Name: series-workflownl6gp Phase: Succeeded StartedAt: 2026-07-10 05:55:22 +0000 UTC FinishedAt: 2026-07-10 07:33:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflownl6gp[0] Phase: Succeeded StartedAt: 2026-07-10 05:55:22 +0000 UTC FinishedAt: 2026-07-10 06:12:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflownl6gp[0].run-triage Phase: Succeeded StartedAt: 2026-07-10 05:55:22 +0000 UTC FinishedAt: 2026-07-10 06:12:32 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "a635d6748234582ea287c5ffeae28b9b23f91c7e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "a635d6748234582ea287c5ffeae28b9b23f91c7e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "d38cd915-886e-41cd-b9c2-e092642c5396" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_arm_vcpu_alloc_hdbss", "kvm_arm_vcpu_free_hdbss", "kvm_flush_hdbss_buffer", "kvm_handle_hdbss_fault", "kvm_arm_enable_hdbss_global", "kvm_arm_disable_hdbss_global", "kvm_arm_hdbss_on_dirty_logging_change", "kvm_arch_sync_dirty_log" ], "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+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcm1fdmNwdV9hbGxvY19oZGJzcyYjMzQ7LAogICAgJiMzNDtrdm1fYXJtX3ZjcHVfZnJlZV9oZGJzcyYjMzQ7LAogICAgJiMzNDtrdm1fZmx1c2hfaGRic3NfYnVmZmVyJiMzNDssCiAgICAmIzM0O2t2bV9oYW5kbGVfaGRic3NfZmF1bHQmIzM0OywKICAgICYjMzQ7a3ZtX2FybV9lbmFibGVfaGRic3NfZ2xvYmFsJiMzNDssCiAgICAmIzM0O2t2bV9hcm1fZGlzYWJsZV9oZGJzc19nbG9iYWwmIzM0OywKICAgICYjMzQ7a3ZtX2FybV9oZGJzc19vbl9kaXJ0eV9sb2dnaW5nX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9zeW5jX2RpcnR5X2xvZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIEhhcmR3YXJlIERpcnR5IHN0YXRlIHRyYWNraW5nIHN0cnVjdHVyZSAoSERCU1MpIHN1cHBvcnQgZm9yIEtWTSBvbiBhcm02NC4gSXQgbW9kaWZpZXMgY29yZSBLVk0gbG9naWMgZm9yIGRpcnR5IHBhZ2UgbG9nZ2luZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyBhbmQgZ3Vlc3QgZXhlY3V0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjEyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMGJiYTNiOTE1YTFkYmM4N2QyOTIwNDI3NWIxNTU0NWM3MWNhMmZkY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDEwIDA2OjEyOjAyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmhcbmluZGV4IGE1Nzg3MGZhOTZkYjViLi5iZGZhYjA4NmZkOTQ1MyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaFxuQEAgLTg2Myw2ICYjNDM7ODYzLDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzeXN0ZW1fc3VwcG9ydHNfaGFmdCh2b2lkKVxuIFx0cmV0dXJuIGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFGVCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc3lzdGVtX3N1cHBvcnRzX2hkYnNzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfSERCU1MpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBzeXN0ZW1fc3VwcG9ydHNfbXBhbSh2b2lkKVxuIHtcbiBcdHJldHVybiBhbHRlcm5hdGl2ZV9oYXNfY2FwX3VubGlrZWx5KEFSTTY0X01QQU0pO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZXNyLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2Vzci5oXG5pbmRleCA4MWMxNzMyMGE1ODhkOS4uMmU2YjY3OWI1OTA4MDggMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2Vzci5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2Vzci5oXG5AQCAtNDM3LDYgJiM0Mzs0MzcsMTEgQEBcbiAjaWZuZGVmIF9fQVNTRU1CTEVSX19cbiAjaW5jbHVkZSBcdTAwM2Nhc20vdHlwZXMuaFx1MDAzZVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgZXNyX2lzczJfaXNfaGRic3NmKHVuc2lnbmVkIGxvbmcgZXNyKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIEVTUl9FTHhfSVNTMihlc3IpIFx1MDAyNiBFU1JfRUx4X0hEQlNTRjtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZXNyX2Jya19jb21tZW50KHVuc2lnbmVkIGxvbmcgZXNyKVxuIHtcbiBcdHJldHVybiBlc3IgXHUwMDI2IEVTUl9FTHhfQlJLNjRfSVNTX0NPTU1FTlRfTUFTSztcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9kaXJ0eV9iaXQuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2RpcnR5X2JpdC5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmE0Y2RhOGNkYWIyNDcyXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9kaXJ0eV9iaXQuaFxuQEAgLTAsMCAmIzQzOzEsMjkgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuJiM0MzsvKlxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQVJNIEx0ZC5cbiYjNDM7ICogQXV0aG9yOiBMZW9uYXJkbyBCcmFzIFx1MDAzY2xlby5icmFzQGFybS5jb21cdTAwM2VcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9fQVJNNjRfS1ZNX0RJUlRZX0JJVF9IX19cbiYjNDM7I2RlZmluZSBfX0FSTTY0X0tWTV9ESVJUWV9CSVRfSF9fXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX3BndGFibGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2Nhc20vc3lzcmVnLmhcdTAwM2VcbiYjNDM7XG4mIzQzOy8qIEhEQlNTIGVudHJ5IGZpZWxkIGRlZmluaXRpb25zICovXG4mIzQzOyNkZWZpbmUgSERCU1NfRU5UUllfVkFMSURcdEJJVCgwKVxuJiM0MzsjZGVmaW5lIEhEQlNTX0VOVFJZX1RUV0xfU0hJRlQgKDEpXG4mIzQzOyNkZWZpbmUgSERCU1NfRU5UUllfVFRXTF9NQVNLIChHRU5NQVNLKDMsIDEpKVxuJiM0MzsjZGVmaW5lIEhEQlNTX0VOVFJZX1RUV0woeCkgXFxcbiYjNDM7XHQoKCh4KSBcdTAwM2NcdTAwM2MgSERCU1NfRU5UUllfVFRXTF9TSElGVCkgXHUwMDI2IEhEQlNTX0VOVFJZX1RUV0xfTUFTSylcbiYjNDM7I2RlZmluZSBIREJTU19FTlRSWV9UVFdMX1JFU1YgSERCU1NfRU5UUllfVFRXTCgtNClcbiYjNDM7I2RlZmluZSBIREJTU19FTlRSWV9JUEFcdEdFTk1BU0tfVUxMKDU1LCAxMilcbiYjNDM7XG4mIzQzO2ludCBrdm1fYXJtX3ZjcHVfYWxsb2NfaGRic3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xuJiM0Mzt2b2lkIGt2bV9hcm1fdmNwdV9mcmVlX2hkYnNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4mIzQzO3ZvaWQga3ZtX2ZsdXNoX2hkYnNzX2J1ZmZlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuJiM0MztpbnQga3ZtX2hhbmRsZV9oZGJzc19mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuJiM0Mzt2b2lkIGt2bV9hcm1faGRic3Nfb25fZGlydHlfbG9nZ2luZ19jaGFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBpbnQgbnJfbWVtc2xvdHNfbG9nZ2luZyk7XG4mIzQzO3ZvaWQga3ZtX2FybV9kaXNhYmxlX2hkYnNzX2dsb2JhbChzdHJ1Y3Qga3ZtICprdm0pO1xuJiM0MztcbiYjNDM7I2VuZGlmIC8qIF9fQVJNNjRfS1ZNX0RJUlRZX0JJVF9IX18gKi9cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IGJhZTJjNGY5MmVmNWMwLi5jZWNmYjg4NGE2NGZhNyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtNTUsNiAmIzQzOzU1LDcgQEBcbiAjZGVmaW5lIEtWTV9SRVFfR1VFU1RfSFlQX0lSUV9QRU5ESU5HXHRLVk1fQVJDSF9SRVEoOSlcbiAjZGVmaW5lIEtWTV9SRVFfTUFQX0wxX1ZOQ1JfRUwyXHRcdEtWTV9BUkNIX1JFUSgxMClcbiAjZGVmaW5lIEtWTV9SRVFfVkdJQ19QUk9DRVNTX1VQREFURVx0S1ZNX0FSQ0hfUkVRKDExKVxuJiM0MzsjZGVmaW5lIEtWTV9SRVFfRkxVU0hfSERCU1NcdFx0XHRLVk1fQVJDSF9SRVEoMTIpXG4gXG4gI2RlZmluZSBLVk1fRElSVFlfTE9HX01BTlVBTF9DQVBTICAgKEtWTV9ESVJUWV9MT0dfTUFOVUFMX1BST1RFQ1RfRU5BQkxFIHwgXFxcbiBcdFx0XHRcdCAgICAgS1ZNX0RJUlRZX0xPR19JTklUSUFMTFlfU0VUKVxuQEAgLTQyMCw2ICYjNDM7NDIxLDEwIEBAIHN0cnVjdCBrdm1fYXJjaCB7XG4gXHQgKi9cbiBcdHN0cnVjdCBrdm1fcHJvdGVjdGVkX3ZtIHBrdm07XG4gXG4mIzQzO1x0LyogSERCU1M6IHBlci1WTSBkaXJ0eSB0cmFja2luZyBzdGF0ZSAqL1xuJiM0MztcdGJvb2wgZW5hYmxlX2hkYnNzO1xuJiM0MztcdHVuc2lnbmVkIGludCBoZGJzc19vcmRlcjtcbiYjNDM7XG4gI2lmZGVmIENPTkZJR19QVERVTVBfU1RBR0UyX0RFQlVHRlNcbiBcdC8qIE5lc3RlZCB2aXJ0dWFsaXphdGlvbiBpbmZvICovXG4gXHRzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX252X2RlbnRyeTtcbkBAIC04MzgsNiAmIzQzOzg0MywxMiBAQCBzdHJ1Y3QgdmNwdV9yZXNldF9zdGF0ZSB7XG4gXHRib29sXHRcdHJlc2V0O1xuIH07XG4gXG4mIzQzO3N0cnVjdCB2Y3B1X2hkYnNzX3N0YXRlIHtcbiYjNDM7XHRwaHlzX2FkZHJfdCBiYXNlX3BoeXM7ICAgLyogZm9yIG1lbW9yeSBmcmVlICovXG4mIzQzO1x0dTY0IGhkYnNzYnJfZWwyOyAgICAgICAgIC8qIGxvYWQgZGlyZWN0bHkgKi9cbiYjNDM7XHR1NjQgaGRic3Nwcm9kX2VsMjsgICAgICAgLyogc2F2ZSBkaXJlY3RseSAqL1xuJiM0Mzt9O1xuJiM0MztcbiBzdHJ1Y3Qgdm5jcl90bGI7XG4gXG4gc3RydWN0IGt2bV92Y3B1X2FyY2gge1xuQEAgLTk0NSw2ICYjNDM7OTU2LDkgQEAgc3RydWN0IGt2bV92Y3B1X2FyY2gge1xuIFxuIFx0LyogSHlwLXJlYWRhYmxlIGNvcHkgb2Yga3ZtX3ZjcHU6OnBpZCAqL1xuIFx0cGlkX3QgcGlkO1xuJiM0MztcbiYjNDM7XHQvKiBIREJTUyByZWdpc3RlcnMgaW5mbyAqL1xuJiM0MztcdHN0cnVjdCB2Y3B1X2hkYnNzX3N0YXRlIGhkYnNzO1xuIH07XG4gXG4gLypcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmhcbmluZGV4IDQxYTg2ODc5MzhlYjZiLi41ZTBmYWM0YmZhNTM2OSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX3BndGFibGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGd0YWJsZS5oXG5AQCAtOTMsNiAmIzQzOzkzLDggQEAgdHlwZWRlZiB1NjQga3ZtX3B0ZV90O1xuIFxuICNkZWZpbmUgS1ZNX1BURV9MRUFGX0FUVFJfSElfUzJfWE5cdEdFTk1BU0soNTQsIDUzKVxuIFxuJiM0MzsjZGVmaW5lIEtWTV9QVEVfTEVBRl9BVFRSX0hJX1MyX0RCTVx0QklUKDUxKVxuJiM0MztcbiAjZGVmaW5lIEtWTV9QVEVfTEVBRl9BVFRSX0hJX1MxX0dQXHRCSVQoNTApXG4gXG4gI2RlZmluZSBLVk1fUFRFX0xFQUZfQVRUUl9TMl9QRVJNU1x0KEtWTV9QVEVfTEVBRl9BVFRSX0xPX1MyX1MyQVBfUiB8IFxcXG5AQCAtMjQ5LDEwICYjNDM7MjUxLDEyIEBAIHN0cnVjdCBrdm1fcGd0YWJsZV9tbV9vcHMge1xuICAqIGVudW0ga3ZtX3BndGFibGVfc3RhZ2UyX2ZsYWdzIC0gU3RhZ2UtMiBwYWdlLXRhYmxlIGZsYWdzLlxuICAqIEBLVk1fUEdUQUJMRV9TMl9JRE1BUDpcdE9ubHkgdXNlIGlkZW50aXR5IG1hcHBpbmdzLlxuICAqIEBLVk1fUEdUQUJMRV9TMl9BU19TMTpcdEZpbmFsIG1lbW9yeSBhdHRyaWJ1dGVzIGFyZSB0aGF0IG9mIFN0YWdlLTEuXG4mIzQzOyAqIEBLVk1fUEdUQUJMRV9TMl9EQk06XHRIYXJkd2FyZS1tYW5hZ2VkIERCTSBmb3Igd3JpdGFibGUgcGFnZXMuXG4gICovXG4gZW51bSBrdm1fcGd0YWJsZV9zdGFnZTJfZmxhZ3Mge1xuIFx0S1ZNX1BHVEFCTEVfUzJfSURNQVBcdFx0XHQ9IEJJVCgwKSxcbiBcdEtWTV9QR1RBQkxFX1MyX0FTX1MxXHRcdFx0PSBCSVQoMSksXG4mIzQzO1x0S1ZNX1BHVEFCTEVfUzJfREJNXHRcdFx0PSBCSVQoMiksXG4gfTtcbiBcbiAvKipcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N5c3JlZy5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNyZWcuaFxuaW5kZXggN2FhMDhkNTlkNDk0NDguLjEzNTRhNThjMzMxNjdiIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNyZWcuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNyZWcuaFxuQEAgLTEwMzksNiAmIzQzOzEwMzksMTcgQEBcbiBcbiAjZGVmaW5lIEdDU19DQVAoeClcdCgoKCh1bnNpZ25lZCBsb25nKXgpIFx1MDAyNiBHQ1NfQ0FQX0FERFJfTUFTSykgfCBcXFxuIFx0XHRcdFx0XHQgICAgICAgR0NTX0NBUF9WQUxJRF9UT0tFTilcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIERlZmluaXRpb25zIGZvciB0aGUgSERCU1MgZmVhdHVyZVxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBIREJTU19NQVhfT1JERVJcdFx0SERCU1NCUl9FTDJfU1pfMk1CXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEhEQlNTQlJfRUwyKGJhZGRyLCBzeilcdCgoKGJhZGRyKSBcdTAwMjYgSERCU1NCUl9FTDJfQkFERFJfTUFTSykgfCBcXFxuJiM0MztcdFx0XHRcdCBGSUVMRF9QUkVQKEhEQlNTQlJfRUwyX1NaX01BU0ssIHN6KSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgSERCU1NQUk9EX0lEWChwcm9kKVx0RklFTERfR0VUKEhEQlNTUFJPRF9FTDJfSU5ERVhfTUFTSywgcHJvZClcbiYjNDM7XG4gLypcbiAgKiBEZWZpbml0aW9ucyBmb3IgR0lDdjUgaW5zdHJ1Y3Rpb25zXG4gICovXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jIGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jXG5pbmRleCA5YTIyZGYwYzUxMjBmMy4uYWEzMjdlZWJhZjFjYTggMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuY1xuQEAgLTIxMzEsNiAmIzQzOzIxMzEsMTEgQEAgc3RhdGljIGJvb2wgaHZoZV9wb3NzaWJsZShjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksXG4gXHRyZXR1cm4gYXJtNjRfdGVzdF9zd19mZWF0dXJlX292ZXJyaWRlKEFSTTY0X1NXX0ZFQVRVUkVfT1ZFUlJJREVfSFZIRSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBoYXNfdmhlX2hkYnNzKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSwgaW50IGNvcGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gaXNfa2VybmVsX2luX2h5cF9tb2RlKCkgXHUwMDI2XHUwMDI2IGhhc19jcHVpZF9mZWF0dXJlKGVudHJ5LCBjb3BlKTtcbiYjNDM7fVxuJiM0MztcbiBib29sIGNwdV9zdXBwb3J0c19iYm1sMl9ub2Fib3J0KHZvaWQpXG4ge1xuIFx0LypcbkBAIC0yNzgxLDYgJiM0MzsyNzg2LDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyBhcm02NF9mZWF0dXJlc1tdID0ge1xuIFx0XHRBUk02NF9DUFVJRF9GSUVMRFMoSURfQUE2NE1NRlIxX0VMMSwgSEFGREJTLCBIQUZUKVxuIFx0fSxcbiAjZW5kaWZcbiYjNDM7XHR7XG4mIzQzO1x0XHQuZGVzYyA9IFwmIzM0O0hhcmR3YXJlIERpcnR5IHN0YXRlIHRyYWNraW5nIHN0cnVjdHVyZSAoSERCU1MpXCYjMzQ7LFxuJiM0MztcdFx0LnR5cGUgPSBBUk02NF9DUFVDQVBfU1lTVEVNX0ZFQVRVUkUsXG4mIzQzO1x0XHQuY2FwYWJpbGl0eSA9IEFSTTY0X0hBU19IREJTUyxcbiYjNDM7XHRcdC5tYXRjaGVzID0gaGFzX3ZoZV9oZGJzcyxcbiYjNDM7XHRcdEFSTTY0X0NQVUlEX0ZJRUxEUyhJRF9BQTY0TU1GUjFfRUwxLCBIQUZEQlMsIEhEQlNTKVxuJiM0MztcdH0sXG4gXHR7XG4gXHRcdC5kZXNjID0gXCYjMzQ7Q1JDMzIgaW5zdHJ1Y3Rpb25zXCYjMzQ7LFxuIFx0XHQuY2FwYWJpbGl0eSA9IEFSTTY0X0hBU19DUkMzMixcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9NYWtlZmlsZSBiL2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlXG5pbmRleCA1OTYxMmQyZjI3N2MxZC4uZWMyNzQ5YWY2NGZhNGMgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vTWFrZWZpbGVcbkBAIC0xOCw2ICYjNDM7MTgsNyBAQCBrdm0teSAmIzQzOz0gYXJtLm8gbW11Lm8gbW1pby5vIHBzY2kubyBoeXBlcmNhbGxzLm8gcHZ0aW1lLm8gXFxcbiBcdCBndWVzdC5vIGRlYnVnLm8gcmVzZXQubyBzeXNfcmVncy5vIHN0YWNrdHJhY2UubyBcXFxuIFx0IHZnaWMtc3lzLXJlZy12My5vIGZwc2ltZC5vIHBrdm0ubyBcXFxuIFx0IGFyY2hfdGltZXIubyB0cm5nLm8gdm1pZC5vIGVtdWxhdGUtbmVzdGVkLm8gbmVzdGVkLm8gYXQubyBcXFxuJiM0MztcdCBkaXJ0eV9iaXQubyBcXFxuIFx0IHZnaWMvdmdpYy5vIHZnaWMvdmdpYy1pbml0Lm8gXFxcbiBcdCB2Z2ljL3ZnaWMtaXJxZmQubyB2Z2ljL3ZnaWMtdjIubyBcXFxuIFx0IHZnaWMvdmdpYy12My5vIHZnaWMvdmdpYy12NC5vIFxcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vYXJtLmMgYi9hcmNoL2FybTY0L2t2bS9hcm0uY1xuaW5kZXggNTBhZGZmZjc1YmU4MmUuLjUzNmQ5NDc5OWJhOGY5IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vYXJtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL2FybS5jXG5AQCAtMzgsNiAmIzQzOzM4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX2FzbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9lbXVsYXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX2h5cC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fZGlydHlfYml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX21tdS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9uZXN0ZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fcGt2bS5oXHUwMDNlXG5AQCAtMzE2LDYgJiM0MzszMTcsMTQgQEAgdm9pZCBrdm1fYXJjaF9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSlcbiBcdGlmIChpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSlcbiBcdFx0cGt2bV9kZXN0cm95X2h5cF92bShrdm0pO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogVXNlcnNwYWNlIG1heSBkZXN0cm95IHRoZSBWTSB3aXRob3V0IGRpc2FibGluZyBkaXJ0eSBsb2dnaW5nLFxuJiM0MztcdCAqIHNvIHRoZSBhdXRvLWRpc2FibGUgcGF0aCBpcyBuZXZlciByZWFjaGVkLiBGb3JjZSBkaXNhYmxlIEhEQlNTXG4mIzQzO1x0ICogaGVyZSB0byBlbnN1cmUgdkNQVSBidWZmZXJzIGFyZSBmcmVlZCBhbmQgcHJldmVudCBtZW1vcnkgbGVha3MuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGt2bS1cdTAwM2VhcmNoLmVuYWJsZV9oZGJzcylcbiYjNDM7XHRcdGt2bV9hcm1fZGlzYWJsZV9oZGJzc19nbG9iYWwoa3ZtKTtcbiYjNDM7XG4gXHRrdm1fdW5pbml0X3N0YWdlMl9tbXUoa3ZtKTtcbiBcdGt2bV9kZXN0cm95X21waWRyX2RhdGEoa3ZtKTtcbiBcbkBAIC01NjUsNiAmIzQzOzU3NCwxMiBAQCBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKGVycilcbiBcdFx0a3ZtX3ZnaWNfdmNwdV9kZXN0cm95KHZjcHUpO1xuIFxuJiM0MztcdGlmICh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmVuYWJsZV9oZGJzcykge1xuJiM0MztcdFx0ZXJyID0ga3ZtX2FybV92Y3B1X2FsbG9jX2hkYnNzKHZjcHUsIHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guaGRic3Nfb3JkZXIpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0a3ZtX3ZnaWNfdmNwdV9kZXN0cm95KHZjcHUpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC03NDgsNiAmIzQzOzc2Myw5IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRrdm1fdmNwdV9wdXRfaHdfbW11KHZjcHUpO1xuIFx0a3ZtX2FybV92bWlkX2NsZWFyX2FjdGl2ZSgpO1xuIFxuJiM0MztcdGlmICh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmVuYWJsZV9oZGJzcylcbiYjNDM7XHRcdGt2bV9mbHVzaF9oZGJzc19idWZmZXIodmNwdSk7XG4mIzQzO1xuIFx0dmNwdV9jbGVhcl9vbl91bnN1cHBvcnRlZF9jcHUodmNwdSk7XG4gXHR2Y3B1LVx1MDAzZWNwdSA9IC0xO1xuIH1cbkBAIC0xMTUwLDYgJiM0MzsxMTY4LDkgQEAgc3RhdGljIGludCBjaGVja192Y3B1X3JlcXVlc3RzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0aWYgKGt2bV9kaXJ0eV9yaW5nX2NoZWNrX3JlcXVlc3QodmNwdSkpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXG4mIzQzO1x0XHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9GTFVTSF9IREJTUywgdmNwdSkpXG4mIzQzO1x0XHRcdGt2bV9mbHVzaF9oZGJzc19idWZmZXIodmNwdSk7XG4mIzQzO1xuIFx0XHRjaGVja19uZXN0ZWRfdmNwdV9yZXF1ZXN0cyh2Y3B1KTtcbiBcdH1cbiBcbkBAIC0xOTY0LDcgJiM0MzsxOTg1LDE1IEBAIGxvbmcga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxuIFxuIHZvaWQga3ZtX2FyY2hfc3luY19kaXJ0eV9sb2coc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90KVxuIHtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEZsdXNoIGFsbCBDUFVzJiMzOTsgZGlydHkgbG9nIGJ1ZmZlcnMgdG8gdGhlIGRpcnR5X2JpdG1hcC4gIENhbGxlZFxuJiM0MztcdCAqIGJlZm9yZSByZXBvcnRpbmcgZGlydHlfYml0bWFwIHRvIHVzZXJzcGFjZS4gU2VuZCBhIHJlcXVlc3Qgd2l0aFxuJiM0MztcdCAqIEtWTV9SRVFVRVNUX1dBSVQgdG8gZmx1c2ggYnVmZmVyIHN5bmNocm9ub3VzbHkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFrdm0tXHUwMDNlYXJjaC5lbmFibGVfaGRic3MpXG4mIzQzO1x0XHRyZXR1cm47XG4gXG4mIzQzO1x0a3ZtX21ha2VfYWxsX2NwdXNfcmVxdWVzdChrdm0sIEtWTV9SRVFfRkxVU0hfSERCU1MgfCBLVk1fUkVRVUVTVF9XQUlUKTtcbiB9XG4gXG4gc3RhdGljIGludCBrdm1fdm1faW9jdGxfc2V0X2RldmljZV9hZGRyKHN0cnVjdCBrdm0gKmt2bSxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYyBiL2FyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmM1YmY4NjZjMjNlZjJiXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuY1xuQEAgLTAsMCAmIzQzOzEsMjE5IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IEFSTSBMdGQuXG4mIzQzOyAqIEF1dGhvcjogTGVvbmFyZG8gQnJhcyBcdTAwM2NsZW8uYnJhc0Bhcm0uY29tXHUwMDNlXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9kaXJ0eV9iaXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX21tdS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9zeXNyZWcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9nZnAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rY29uZmlnLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuJiM0MztcbiYjNDM7aW50IGt2bV9hcm1fdmNwdV9hbGxvY19oZGJzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBvcmRlcilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwYWdlICpoZGJzc19wZyA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdGlmICh2Y3B1LVx1MDAzZWFyY2guaGRic3MuaGRic3Nicl9lbDIgfHwgIXN5c3RlbV9zdXBwb3J0c19oZGJzcygpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChvcmRlciBcdTAwM2UgSERCU1NfTUFYX09SREVSKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGhkYnNzX3BnID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTF9BQ0NPVU5ULCBvcmRlcik7XG4mIzQzO1x0aWYgKCFoZGJzc19wZylcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHR2Y3B1LVx1MDAzZWFyY2guaGRic3MgPSAoc3RydWN0IHZjcHVfaGRic3Nfc3RhdGUpIHtcbiYjNDM7XHRcdC5iYXNlX3BoeXMgPSBwYWdlX3RvX3BoeXMoaGRic3NfcGcpLFxuJiM0MztcdFx0LmhkYnNzYnJfZWwyID0gSERCU1NCUl9FTDIocGFnZV90b19waHlzKGhkYnNzX3BnKSwgb3JkZXIpLFxuJiM0MztcdFx0LmhkYnNzcHJvZF9lbDIgPSAwLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGt2bV9hcm1fdmNwdV9mcmVlX2hkYnNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwYWdlICpoZGJzc19wZztcbiYjNDM7XG4mIzQzO1x0aWYgKCF2Y3B1LVx1MDAzZWFyY2guaGRic3MuaGRic3Nicl9lbDIpIHtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGhkYnNzX3BnID0gcGh5c190b19wYWdlKHZjcHUtXHUwMDNlYXJjaC5oZGJzcy5iYXNlX3BoeXMpO1xuJiM0MztcdGlmIChoZGJzc19wZylcbiYjNDM7XHRcdF9fZnJlZV9wYWdlcyhoZGJzc19wZyxcbiYjNDM7XHRcdCAgICAgRklFTERfR0VUKEhEQlNTQlJfRUwyX1NaX01BU0ssXG4mIzQzO1x0XHRcdCAgICAgICB2Y3B1LVx1MDAzZWFyY2guaGRic3MuaGRic3Nicl9lbDIpKTtcbiYjNDM7XG4mIzQzO1x0dmNwdS1cdTAwM2VhcmNoLmhkYnNzLmhkYnNzYnJfZWwyID0gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBrdm1fZmx1c2hfaGRic3NfYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7e1xuJiM0MztcdGludCBpZHgsIGN1cnJfaWR4O1xuJiM0MztcdHU2NCAqaGRic3NfYnVmO1xuJiM0MztcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuJiM0MztcbiYjNDM7XHRpZiAoIWt2bS1cdTAwM2VhcmNoLmVuYWJsZV9oZGJzcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Y3Vycl9pZHggPSBIREJTU1BST0RfSURYKHJlYWRfc3lzcmVnX3MoU1lTX0hEQlNTUFJPRF9FTDIpKTtcbiYjNDM7XG4mIzQzO1x0LyogRG8gbm90aGluZyBpZiBIREJTUyBidWZmZXIgaXMgZW1wdHkgb3IgYnJfZWwyIGlzIE5VTEwgKi9cbiYjNDM7XHRpZiAoY3Vycl9pZHggPT0gMCB8fCB2Y3B1LVx1MDAzZWFyY2guaGRic3MuaGRic3Nicl9lbDIgPT0gMClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aGRic3NfYnVmID0gcGFnZV9hZGRyZXNzKHBoeXNfdG9fcGFnZSh2Y3B1LVx1MDAzZWFyY2guaGRic3MuYmFzZV9waHlzKSk7XG4mIzQzO1x0aWYgKCFoZGJzc19idWYpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGd1YXJkKHdyaXRlX2xvY2tfaXJxc2F2ZSkoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlbW11X2xvY2spO1xuJiM0MztcdGZvciAoaWR4ID0gMDsgaWR4IFx1MDAzYyBjdXJyX2lkeDsgaWR4JiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTY0IGdwYTtcbiYjNDM7XG4mIzQzO1x0XHRncGEgPSBoZGJzc19idWZbaWR4XTtcbiYjNDM7XHRcdGlmICghKGdwYSBcdTAwMjYgSERCU1NfRU5UUllfVkFMSUQpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRncGEgXHUwMDI2PSBIREJTU19FTlRSWV9JUEE7XG4mIzQzO1x0XHRrdm1fdmNwdV9tYXJrX3BhZ2VfZGlydHkodmNwdSwgZ3BhIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIHJlc2V0IEhEQlNTIGluZGV4ICovXG4mIzQzO1x0d3JpdGVfc3lzcmVnX3MoMCwgU1lTX0hEQlNTUFJPRF9FTDIpO1xuJiM0MztcdHZjcHUtXHUwMDNlYXJjaC5oZGJzcy5oZGJzc3Byb2RfZWwyID0gMDtcbiYjNDM7XHRpc2IoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IGt2bV9oYW5kbGVfaGRic3NfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mzt7XG4mIzQzO1x0dTY0IHByb2Q7XG4mIzQzO1x0dTY0IGZzYztcbiYjNDM7XG4mIzQzO1x0cHJvZCA9IHJlYWRfc3lzcmVnX3MoU1lTX0hEQlNTUFJPRF9FTDIpO1xuJiM0MztcdGZzYyA9IEZJRUxEX0dFVChIREJTU1BST0RfRUwyX0ZTQ19NQVNLLCBwcm9kKTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChmc2MpIHtcbiYjNDM7XHRjYXNlIEhEQlNTUFJPRF9FTDJfRlNDX09LOlxuJiM0MztcdFx0LyogQnVmZmVyIGZ1bGwsIHNldCByZXF1ZXN0IHRvIGZsdXNoIG9uIG5leHQgdmNwdSBleGl0ICovXG4mIzQzO1x0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfRkxVU0hfSERCU1MsIHZjcHUpO1xuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1x0Y2FzZSBIREJTU1BST0RfRUwyX0ZTQ19FeHRlcm5hbEFib3J0OlxuJiM0MztcdGNhc2UgSERCU1NQUk9EX0VMMl9GU0NfR1BGOlxuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdC8qIFVua25vd24gZmF1bHQuICovXG4mIzQzO1x0XHRXQVJOX09OQ0UoMSxcbiYjNDM7XHRcdFx0ICBcJiMzNDtVbmV4cGVjdGVkIEhEQlNTIGZhdWx0IHR5cGUsIEZTQzogMHglbGx4IChwcm9kPTB4JWxseCwgdmNwdT0lZClcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgZnNjLCBwcm9kLCB2Y3B1LVx1MDAzZXZjcHVfaWQpO1xuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IGhkYnNzX2F1dG9fc2VsZWN0X29yZGVyKHN0cnVjdCBrdm0gKmt2bSlcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbnBhZ2VzID0gMDtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90O1xuJiM0MztcdGludCBia3Q7XG4mIzQzO1xuJiM0MztcdGt2bV9mb3JfZWFjaF9tZW1zbG90KG1lbXNsb3QsIGJrdCwga3ZtX21lbXNsb3RzKGt2bSkpXG4mIzQzO1x0XHRucGFnZXMgJiM0Mzs9IG1lbXNsb3QtXHUwMDNlbnBhZ2VzO1xuJiM0MztcbiYjNDM7XHRpZiAobnBhZ2VzIFx1MDAzYz0gMTYzODQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRlbHNlIGlmIChucGFnZXMgXHUwMDNjPSAyNjIxNDQpXG4mIzQzO1x0XHRyZXR1cm4gMztcbiYjNDM7XHRlbHNlIGlmIChucGFnZXMgXHUwMDNjPSA0MTk0MzA0KVxuJiM0MztcdFx0cmV0dXJuIDY7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cmV0dXJuIDk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEVuYWJsZSBIREJTUyBmb3IgYWxsIHZDUFVzIGluIHRoZSBWTS5cbiYjNDM7ICpcbiYjNDM7ICogQ2FsbGVkIGZyb20ga3ZtX2FybV9oZGJzc19vbl9kaXJ0eV9sb2dnaW5nX2NoYW5nZSgpIHdoaWNoIGlzIGludm9rZWRcbiYjNDM7ICogYnkga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oKSB1bmRlciBrdm0tXHUwMDNlc2xvdHNfbG9jay5cbiYjNDM7ICpcbiYjNDM7ICogSWYgYnVmZmVyIGFsbG9jYXRpb24gZmFpbHMsIEhEQlNTIHJlbWFpbnMgZGlzYWJsZWQgYW5kIGRpcnR5IHRyYWNraW5nXG4mIzQzOyAqIGZhbGxzIGJhY2sgdG8gdGhlIHRyYWRpdGlvbmFsIHNvZnR3YXJlLWJhc2VkIGFwcHJvYWNoIChQVEUgd3JpdGUtcHJvdGVjdFxuJiM0MzsgKiAmIzQzOyBzb2Z0d2FyZSBkaXJ0eSBtYXJraW5nKS4gVGhpcyBkb2VzIG5vdCBhZmZlY3QgY29ycmVjdG5lc3M7IGRpcnR5XG4mIzQzOyAqIGxvZ2dpbmcgcmVtYWlucyBmdW5jdGlvbmFsIHdpdGhvdXQgSERCU1MuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGt2bV9hcm1fZW5hYmxlX2hkYnNzX2dsb2JhbChzdHJ1Y3Qga3ZtICprdm0pXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgb3JkZXI7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuJiM0MztcbiYjNDM7XHRpZiAoIXN5c3RlbV9zdXBwb3J0c19oZGJzcygpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChrdm0tXHUwMDNlZGlydHlfcmluZ19zaXplKSAvKiBEb24mIzM5O3Qgc3VwcG9ydCBIREJTUyBpbiBkaXJ0eSByaW5nIG1vZGUgKi9cbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAoa3ZtLVx1MDAzZWFyY2guZW5hYmxlX2hkYnNzKSAvKiBBbHJlYWR5IE9uICovXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LyogVHVybiBpdCBvbiAqL1xuJiM0MztcdG9yZGVyID0gaGRic3NfYXV0b19zZWxlY3Rfb3JkZXIoa3ZtKTtcbiYjNDM7XHRrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pIHtcbiYjNDM7XHRcdGVyciA9IGt2bV9hcm1fdmNwdV9hbGxvY19oZGJzcyh2Y3B1LCBvcmRlcik7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRnb3RvIGVycm9yX2FsbG9jO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0a3ZtLVx1MDAzZWFyY2guZW5hYmxlX2hkYnNzID0gdHJ1ZTtcbiYjNDM7XHRrdm0tXHUwMDNlYXJjaC5tbXUudnRjciB8PSBWVENSX0VMMl9IRCB8IFZUQ1JfRUwyX0hEQlNTIHwgVlRDUl9FTDJfSEE7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogV2Ugc2hvdWxkIGtpY2sgdmNwdXMgb3V0IG9mIGd1ZXN0IG1vZGUgaGVyZSB0byBsb2FkIG5ld1xuJiM0MztcdCAqIHZ0Y3IgdmFsdWUgdG8gdnRjcl9lbDIgcmVnaXN0ZXIgd2hlbiByZS1lbnRlciBndWVzdCBtb2RlLlxuJiM0MztcdCAqL1xuJiM0MztcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSlcbiYjNDM7XHRcdGt2bV92Y3B1X2tpY2sodmNwdSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyb3JfYWxsb2M6XG4mIzQzO1x0a3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKVxuJiM0MztcdFx0aWYgKHZjcHUtXHUwMDNlYXJjaC5oZGJzcy5iYXNlX3BoeXMpXG4mIzQzO1x0XHRcdGt2bV9hcm1fdmNwdV9mcmVlX2hkYnNzKHZjcHUpO1xuJiM0MztcbiYjNDM7XHRwcl93YXJuX29uY2UoXCYjMzQ7a3ZtOiBmYWlsZWQgdG8gYWxsb2NhdGUgSERCU1MgYnVmZmVycyAob3JkZXI9JXUpLCBcJiMzNDtcbiYjNDM7XHRcdCAgICAgXCYjMzQ7ZmFsbGluZyBiYWNrIHRvIHNvZnR3YXJlIGRpcnR5IHRyYWNraW5nXFxuXCYjMzQ7LCBvcmRlcik7XG4mIzQzO1x0cmV0dXJuIC1FTk9NRU07XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQga3ZtX2FybV9kaXNhYmxlX2hkYnNzX2dsb2JhbChzdHJ1Y3Qga3ZtICprdm0pXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGk7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuJiM0MztcbiYjNDM7XHRpZiAoIWt2bS1cdTAwM2VhcmNoLmVuYWJsZV9oZGJzcykgLyogQWxyZWFkeSBPZmYgKi9cbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0LyogVHVybiBpdCBvZmYgKi9cbiYjNDM7XHRrdm0tXHUwMDNlYXJjaC5tbXUudnRjciBcdTAwMjY9IH4oVlRDUl9FTDJfSEQgfCBWVENSX0VMMl9IREJTUyB8IFZUQ1JfRUwyX0hBKTtcbiYjNDM7XG4mIzQzO1x0a3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKVxuJiM0MztcdFx0a3ZtX2FybV92Y3B1X2ZyZWVfaGRic3ModmNwdSk7XG4mIzQzO1xuJiM0MztcdGt2bS1cdTAwM2VhcmNoLmVuYWJsZV9oZGJzcyA9IGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGt2bV9hcm1faGRic3Nfb25fZGlydHlfbG9nZ2luZ19jaGFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBpbnQgbnJfbWVtc2xvdHNfbG9nZ2luZylcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQ2FsbGVkIGZyb20ga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oKSB1bmRlciBrdm0tXHUwMDNlc2xvdHNfbG9jay5cbiYjNDM7XHQgKiBBbGwgc3RhdGUgdHJhbnNpdGlvbnMgYXJlIHNlcmlhbGl6ZWQgYnkgc2xvdHNfbG9jay5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAobnJfbWVtc2xvdHNfbG9nZ2luZyBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgIWt2bS1cdTAwM2VhcmNoLmVuYWJsZV9oZGJzcylcbiYjNDM7XHRcdGt2bV9hcm1fZW5hYmxlX2hkYnNzX2dsb2JhbChrdm0pO1xuJiM0MztcdGVsc2UgaWYgKG5yX21lbXNsb3RzX2xvZ2dpbmcgPT0gMCBcdTAwMjZcdTAwMjYga3ZtLVx1MDAzZWFyY2guZW5hYmxlX2hkYnNzKVxuJiM0MztcdFx0a3ZtX2FybV9kaXNhYmxlX2hkYnNzX2dsb2JhbChrdm0pO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuYyBiL2FyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmNcbmluZGV4IDkxYTdkZmFkNjY4NjYwLi4yMWVjNDU2ZWNjNDExYSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmNcbkBAIC03MzEsOSAmIzQzOzczMSwyMyBAQCBzdGF0aWMgaW50IHN0YWdlMl9zZXRfcHJvdF9hdHRyKHN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0LCBlbnVtIGt2bV9wZ3RhYmxlX3Byb3QgcFxuIFx0aWYgKHByb3QgXHUwMDI2IEtWTV9QR1RBQkxFX1BST1RfUilcbiBcdFx0YXR0ciB8PSBLVk1fUFRFX0xFQUZfQVRUUl9MT19TMl9TMkFQX1I7XG4gXG4tXHRpZiAocHJvdCBcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9XKVxuJiM0MztcdGlmIChwcm90IFx1MDAyNiBLVk1fUEdUQUJMRV9QUk9UX1cpIHtcbiBcdFx0YXR0ciB8PSBLVk1fUFRFX0xFQUZfQVRUUl9MT19TMl9TMkFQX1c7XG4gXG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogU2V0IERCTSBiaXQgZm9yIHdyaXRhYmxlIG5vbi1kZXZpY2UgcGFnZXMgaWYgdGhlIHBhZ2UtdGFibGVcbiYjNDM7XHRcdCAqIGhhcyBLVk1fUEdUQUJMRV9TMl9EQk0gZmxhZyAoc3lzdGVtIHN1cHBvcnRzIEhEQlNTKS5cbiYjNDM7XHRcdCAqXG4mIzQzO1x0XHQgKiBGb3Igc3RhZ2UgMiB0cmFuc2xhdGlvbnMgdXNpbmcgSW5kaXJlY3QgcGVybWlzc2lvbnMsIGlmIHRoZVxuJiM0MztcdFx0ICogRWZmZWN0aXZlIHZhbHVlIG9mIFZUQ1JfRUwyLkhEIGlzIDAsIHRoZW4gZGlydHkgc3RhdGUgaXNcbiYjNDM7XHRcdCAqIG1hbmFnZWQgYnkgc29mdHdhcmUuIEhhcmR3YXJlIG9ubHkgdXBkYXRlcyB0aGUgZGlydHkgc3RhdGVcbiYjNDM7XHRcdCAqIHdoZW4gVlRDUl9FTDIuSEQ9MSAoSERCU1MgZW5hYmxlZCkuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmICgocGd0LVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fUEdUQUJMRV9TMl9EQk0pIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICEocHJvdCBcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9ERVZJQ0UpKVxuJiM0MztcdFx0XHRhdHRyIHw9IEtWTV9QVEVfTEVBRl9BVFRSX0hJX1MyX0RCTTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKCFrdm1fbHBhMl9pc19lbmFibGVkKCkpXG4gXHRcdGF0dHIgfD0gRklFTERfUFJFUChLVk1fUFRFX0xFQUZfQVRUUl9MT19TMl9TSCwgc2gpO1xuIFxuQEAgLTEzNjcsOSAmIzQzOzEzODEsMjYgQEAgaW50IGt2bV9wZ3RhYmxlX3N0YWdlMl9yZWxheF9wZXJtcyhzdHJ1Y3Qga3ZtX3BndGFibGUgKnBndCwgdTY0IGFkZHIsXG4gXHRpZiAocHJvdCBcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9SKVxuIFx0XHRzZXQgfD0gS1ZNX1BURV9MRUFGX0FUVFJfTE9fUzJfUzJBUF9SO1xuIFxuLVx0aWYgKHByb3QgXHUwMDI2IEtWTV9QR1RBQkxFX1BST1RfVylcbiYjNDM7XHRpZiAocHJvdCBcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9XKSB7XG4gXHRcdHNldCB8PSBLVk1fUFRFX0xFQUZfQVRUUl9MT19TMl9TMkFQX1c7XG4gXG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogTm8gREVWSUNFIGZpbHRlciBuZWVkZWQgaGVyZTogcmVsYXhfcGVybXMgaXMgb25seSBjYWxsZWRcbiYjNDM7XHRcdCAqIG9uIEZTQ19QRVJNIGZhdWx0cy4gRGV2aWNlIHBhZ2VzIGFsd2F5cyBnZXQgZnVsbCBSVyBmcm9tXG4mIzQzO1x0XHQgKiBpbml0aWFsIG1hcHBpbmcgYW5kIGFyZSBuZXZlciB3cml0ZS1wcm90ZWN0ZWQgZHVyaW5nXG4mIzQzO1x0XHQgKiBtaWdyYXRpb24sIHNvIHRoZXkgbmV2ZXIgdHJpZ2dlciBhIHBlcm1pc3Npb24gZmF1bHQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChwZ3QtXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9QR1RBQkxFX1MyX0RCTSlcbiYjNDM7XHRcdFx0c2V0IHw9IEtWTV9QVEVfTEVBRl9BVFRSX0hJX1MyX0RCTTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIENsZWFyIERCTSBvbiBX4oaSUk8gZG93bmdyYWRlIHRvIHByZXZlbnQgaGFyZHdhcmUgZnJvbVxuJiM0MztcdFx0ICogc2lsZW50bHkgdXBncmFkaW5nIFJPJiM0MztEQk0gYmFjayB0byBXJiM0MztkaXJ0eSwgd2hpY2ggd291bGRcbiYjNDM7XHRcdCAqIGJ5cGFzcyBLVk0mIzM5O3Mgd3JpdGUgdHJhY2tpbmcgYW5kIGNhdXNlIGRhdGEgY29ycnVwdGlvbi5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0Y2xyIHw9IEtWTV9QVEVfTEVBRl9BVFRSX0hJX1MyX0RCTTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0ID0gc3RhZ2UyX3NldF94bl9hdHRyKHByb3QsIFx1MDAyNnhuKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guYyBiL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmNcbmluZGV4IGJiZTljZWJkM2Q5ZDU3Li5mZTcyOTQ0YmZkM2Q1YiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmNcbkBAIC0yMiw2ICYjNDM7MjIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fZW11bGF0ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9oeXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fbW11LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9kaXJ0eV9iaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9mcHNpbWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9kZWJ1Zy1tb25pdG9ycy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3Byb2Nlc3Nvci5oXHUwMDNlXG5AQCAtMjEzLDYgJiM0MzsyMTQsMTkgQEAgc3RhdGljIHZvaWQgX192Y3B1X3B1dF9kZWFjdGl2YXRlX3RyYXBzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIF9fbG9hZF9oZGJzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFrdm0tXHUwMDNlYXJjaC5lbmFibGVfaGRic3MpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHdyaXRlX3N5c3JlZ19zKHZjcHUtXHUwMDNlYXJjaC5oZGJzcy5oZGJzc2JyX2VsMiwgU1lTX0hEQlNTQlJfRUwyKTtcbiYjNDM7XHR3cml0ZV9zeXNyZWdfcyh2Y3B1LVx1MDAzZWFyY2guaGRic3MuaGRic3Nwcm9kX2VsMiwgU1lTX0hEQlNTUFJPRF9FTDIpO1xuJiM0MztcbiYjNDM7XHRpc2IoKTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIGt2bV92Y3B1X2xvYWRfdmhlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRob3N0X2RhdGFfcHRyKGhvc3RfY3R4dCktXHUwMDNlX19oeXBfcnVubmluZ192Y3B1ID0gdmNwdTtcbkBAIC0yMjAsNiAmIzQzOzIzNCw3IEBAIHZvaWQga3ZtX3ZjcHVfbG9hZF92aGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0X192Y3B1X2xvYWRfc3dpdGNoX3N5c3JlZ3ModmNwdSk7XG4gXHRfX3ZjcHVfbG9hZF9hY3RpdmF0ZV90cmFwcyh2Y3B1KTtcbiBcdF9fbG9hZF9zdGFnZTIodmNwdS1cdTAwM2VhcmNoLmh3X21tdSk7XG4mIzQzO1x0X19sb2FkX2hkYnNzKHZjcHUpO1xuIH1cbiBcbiB2b2lkIGt2bV92Y3B1X3B1dF92aGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL21tdS5jIGIvYXJjaC9hcm02NC9rdm0vbW11LmNcbmluZGV4IDZjOTQxYWFhMTBjNjM5Li40ODRmNDhkYWUwMDAzYyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9tbXUuY1xuQEAgLTE2LDYgJiM0MzsxNiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2NhY2hlZmx1c2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fYXJtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX21tdS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fZGlydHlfYml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX3BndGFibGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fcGt2bS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9hc20uaFx1MDAzZVxuQEAgLTEwMTQsNiAmIzQzOzEwMTUsOSBAQCBpbnQga3ZtX2luaXRfc3RhZ2UyX21tdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHVuc2lnbmVkIGxvbmcgdFxuIFx0aWYgKGVycilcbiBcdFx0Z290byBvdXRfZnJlZV9wZ3RhYmxlO1xuIFxuJiM0MztcdGlmIChzeXN0ZW1fc3VwcG9ydHNfaGRic3MoKSlcbiYjNDM7XHRcdHBndC1cdTAwM2VmbGFncyB8PSBLVk1fUEdUQUJMRV9TMl9EQk07XG4mIzQzO1xuIFx0bW11LVx1MDAzZXBndCA9IHBndDtcbiBcdGlmIChpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSlcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMTAyNyw4ICYjNDM7MTAzMSwxMiBAQCBpbnQga3ZtX2luaXRfc3RhZ2UyX21tdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHVuc2lnbmVkIGxvbmcgdFxuIFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSlcbiBcdFx0KnBlcl9jcHVfcHRyKG1tdS1cdTAwM2VsYXN0X3ZjcHVfcmFuLCBjcHUpID0gLTE7XG4gXG4tXHQgLyogVGhlIGVhZ2VyIHBhZ2Ugc3BsaXR0aW5nIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgKi9cbi1cdG1tdS1cdTAwM2VzcGxpdF9wYWdlX2NodW5rX3NpemUgPSBLVk1fQVJNX0VBR0VSX1NQTElUX0NIVU5LX1NJWkVfREVGQVVMVDtcbiYjNDM7XHQgLyogVGhlIGVhZ2VyIHBhZ2Ugc3BsaXR0aW5nIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgaWYgc3lzdGVtIGhhcyBubyBIREJTUyAqL1xuJiM0MztcdGlmIChzeXN0ZW1fc3VwcG9ydHNfaGRic3MoKSlcbiYjNDM7XHRcdG1tdS1cdTAwM2VzcGxpdF9wYWdlX2NodW5rX3NpemUgPSAyNTYgKiAxMDI0ICogUEFHRV9TSVpFO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdG1tdS1cdTAwM2VzcGxpdF9wYWdlX2NodW5rX3NpemUgPSBLVk1fQVJNX0VBR0VSX1NQTElUX0NIVU5LX1NJWkVfREVGQVVMVDtcbiYjNDM7XG4gXHRtbXUtXHUwMDNlc3BsaXRfcGFnZV9jYWNoZS5nZnBfemVybyA9IF9fR0ZQX1pFUk87XG4gXG4gXHRtbXUtXHUwMDNlcGdkX3BoeXMgPSBfX3BhKHBndC1cdTAwM2VwZ2QpO1xuQEAgLTIyMzQsNiAmIzQzOzIyNDIsNyBAQCBpbnQga3ZtX2hhbmRsZV9ndWVzdF9zZWEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIH1cbiBcbiAvKipcbiYjNDM7XG4gICoga3ZtX2hhbmRsZV9ndWVzdF9hYm9ydCAtIGhhbmRsZXMgYWxsIDJuZCBzdGFnZSBhYm9ydHNcbiAgKiBAdmNwdTpcdHRoZSBWQ1BVIHBvaW50ZXJcbiAgKlxuQEAgLTIyNzEsNiAmIzQzOzIyODAsOSBAQCBpbnQga3ZtX2hhbmRsZV9ndWVzdF9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHRpc19pYWJ0ID0ga3ZtX3ZjcHVfdHJhcF9pc19pYWJ0KHZjcHUpO1xuIFxuJiM0MztcdGlmIChlc3JfaXNzMl9pc19oZGJzc2YoZXNyKSlcbiYjNDM7XHRcdHJldHVybiBrdm1faGFuZGxlX2hkYnNzX2ZhdWx0KHZjcHUpO1xuJiM0MztcbiBcdGlmIChlc3JfZnNjX2lzX3RyYW5zbGF0aW9uX2ZhdWx0KGVzcikpIHtcbiBcdFx0LyogQmV5b25kIHNhbml0aXNlZCBQQVJhbmdlICh3aGljaCBpcyB0aGUgSVBBIGxpbWl0KSAqL1xuIFx0XHRpZiAoZmF1bHRfaXBhIFx1MDAzZT0gQklUX1VMTChnZXRfa3ZtX2lwYV9saW1pdCgpKSkge1xuQEAgLTI1NzYsNiAmIzQzOzI1ODgsOSBAQCB2b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbiB7XG4gXHRib29sIGxvZ19kaXJ0eV9wYWdlcyA9IG5ldyBcdTAwMjZcdTAwMjYgbmV3LVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fTUVNX0xPR19ESVJUWV9QQUdFUztcbiBcbiYjNDM7XHRrdm1fYXJtX2hkYnNzX29uX2RpcnR5X2xvZ2dpbmdfY2hhbmdlKGt2bSxcbiYjNDM7XHRcdGF0b21pY19yZWFkKFx1MDAyNmt2bS1cdTAwM2Vucl9tZW1zbG90c19kaXJ0eV9sb2dnaW5nKSk7XG4mIzQzO1xuIFx0LypcbiBcdCAqIEF0IHRoaXMgcG9pbnQgbWVtc2xvdCBoYXMgYmVlbiBjb21taXR0ZWQgYW5kIHRoZXJlIGlzIGFuXG4gXHQgKiBhbGxvY2F0ZWQgZGlydHlfYml0bWFwW10sIGRpcnR5IHBhZ2VzIHdpbGwgYmUgdHJhY2tlZCB3aGlsZSB0aGVcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9yZXNldC5jIGIvYXJjaC9hcm02NC9rdm0vcmVzZXQuY1xuaW5kZXggYjk2M2ZkOTc1YWFjYWYuLmQ4MTA0YmNiZDlmZmFkIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vcmVzZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vcmVzZXQuY1xuQEAgLTI3LDYgJiM0MzsyNyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9hc20uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fZW11bGF0ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9tbXUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX2RpcnR5X2JpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9uZXN0ZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS92aXJ0LmhcdTAwM2VcbiBcbkBAIC0xNjEsNiAmIzQzOzE2Miw5IEBAIHZvaWQga3ZtX2FybV92Y3B1X2Rlc3Ryb3koc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXZjcHUtXHUwMDNlYXJjaC5jdHh0LnZuY3JfYXJyYXkpO1xuIFx0a2ZyZWUodmNwdS1cdTAwM2VhcmNoLnZuY3JfdGxiKTtcbiBcdGtmcmVlKHZjcHUtXHUwMDNlYXJjaC5jY3NpZHIpO1xuJiM0MztcbiYjNDM7XHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5lbmFibGVfaGRic3MpXG4mIzQzO1x0XHRrdm1fYXJtX3ZjcHVfZnJlZV9oZGJzcyh2Y3B1KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQga3ZtX3ZjcHVfcmVzZXRfc3ZlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L3Rvb2xzL2NwdWNhcHMgYi9hcmNoL2FybTY0L3Rvb2xzL2NwdWNhcHNcbmluZGV4IDliODVhODRmNmZkNDk0Li5hODc3MDZjOWQxNjBlMCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2Fwc1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC90b29scy9jcHVjYXBzXG5AQCAtNjksNiAmIzQzOzY5LDcgQEAgSEFTX1ZBNTJcbiBIQVNfVklSVF9IT1NUX0VYVE5cbiBIQVNfV0ZYVFxuIEhBU19YTlhcbiYjNDM7SEFTX0hEQlNTXG4gSEFGVFxuIEhXX0RCTVxuIEtWTV9IVkhFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDY6MTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2FybV92Y3B1X2FsbG9jX2hkYnNzJiMzNDssCiAgICAmIzM0O2t2bV9hcm1fdmNwdV9mcmVlX2hkYnNzJiMzNDssCiAgICAmIzM0O2t2bV9mbHVzaF9oZGJzc19idWZmZXImIzM0OywKICAgICYjMzQ7a3ZtX2hhbmRsZV9oZGJzc19mYXVsdCYjMzQ7LAogICAgJiMzNDtrdm1fYXJtX2VuYWJsZV9oZGJzc19nbG9iYWwmIzM0OywKICAgICYjMzQ7a3ZtX2FybV9kaXNhYmxlX2hkYnNzX2dsb2JhbCYjMzQ7LAogICAgJiMzNDtrdm1fYXJtX2hkYnNzX29uX2RpcnR5X2xvZ2dpbmdfY2hhbmdlJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3N5bmNfZGlydHlfbG9nJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgSGFyZHdhcmUgRGlydHkgc3RhdGUgdHJhY2tpbmcgc3RydWN0dXJlIChIREJTUykgc3VwcG9ydCBmb3IgS1ZNIG9uIGFybTY0LiBJdCBtb2RpZmllcyBjb3JlIEtWTSBsb2dpYyBmb3IgZGlydHkgcGFnZSBsb2dnaW5nIGFuZCBtZW1vcnkgbWFuYWdlbWVudCwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGFuZCBndWVzdCBleGVjdXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDBiYmEzYjkxNWExZGJjODdkMjkyMDQyNzViMTU1NDVjNzFjYTJmZGMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAxMCAwNjoxMjowMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmgKaW5kZXggYTU3ODcwZmE5NmRiNWIuLmJkZmFiMDg2ZmQ5NDUzIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaApAQCAtODYzLDYgJiM0Mzs4NjMsMTEgQEAgc3RhdGljIGlubGluZSBib29sIHN5c3RlbV9zdXBwb3J0c19oYWZ0KHZvaWQpCiAJcmV0dXJuIGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFGVCk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc3lzdGVtX3N1cHBvcnRzX2hkYnNzKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfSERCU1MpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBzeXN0ZW1fc3VwcG9ydHNfbXBhbSh2b2lkKQogewogCXJldHVybiBhbHRlcm5hdGl2ZV9oYXNfY2FwX3VubGlrZWx5KEFSTTY0X01QQU0pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lc3IuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZXNyLmgKaW5kZXggODFjMTczMjBhNTg4ZDkuLjJlNmI2NzliNTkwODA4IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2Vzci5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZXNyLmgKQEAgLTQzNyw2ICYjNDM7NDM3LDExIEBACiAjaWZuZGVmIF9fQVNTRU1CTEVSX18KICNpbmNsdWRlICZsdDthc20vdHlwZXMuaCZndDsKIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBlc3JfaXNzMl9pc19oZGJzc2YodW5zaWduZWQgbG9uZyBlc3IpCiYjNDM7ewomIzQzOwlyZXR1cm4gRVNSX0VMeF9JU1MyKGVzcikgJmFtcDsgRVNSX0VMeF9IREJTU0Y7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGVzcl9icmtfY29tbWVudCh1bnNpZ25lZCBsb25nIGVzcikKIHsKIAlyZXR1cm4gZXNyICZhbXA7IEVTUl9FTHhfQlJLNjRfSVNTX0NPTU1FTlRfTUFTSzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2RpcnR5X2JpdC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZGlydHlfYml0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmE0Y2RhOGNkYWIyNDcyCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZGlydHlfYml0LmgKQEAgLTAsMCAmIzQzOzEsMjkgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCiYjNDM7LyoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQVJNIEx0ZC4KJiM0MzsgKiBBdXRob3I6IExlb25hcmRvIEJyYXMgJmx0O2xlby5icmFzQGFybS5jb20mZ3Q7CiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfX0FSTTY0X0tWTV9ESVJUWV9CSVRfSF9fCiYjNDM7I2RlZmluZSBfX0FSTTY0X0tWTV9ESVJUWV9CSVRfSF9fCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9rdm1fcGd0YWJsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthc20vc3lzcmVnLmgmZ3Q7CiYjNDM7CiYjNDM7LyogSERCU1MgZW50cnkgZmllbGQgZGVmaW5pdGlvbnMgKi8KJiM0MzsjZGVmaW5lIEhEQlNTX0VOVFJZX1ZBTElECUJJVCgwKQomIzQzOyNkZWZpbmUgSERCU1NfRU5UUllfVFRXTF9TSElGVCAoMSkKJiM0MzsjZGVmaW5lIEhEQlNTX0VOVFJZX1RUV0xfTUFTSyAoR0VOTUFTSygzLCAxKSkKJiM0MzsjZGVmaW5lIEhEQlNTX0VOVFJZX1RUV0woeCkgXAomIzQzOwkoKCh4KSAmbHQ7Jmx0OyBIREJTU19FTlRSWV9UVFdMX1NISUZUKSAmYW1wOyBIREJTU19FTlRSWV9UVFdMX01BU0spCiYjNDM7I2RlZmluZSBIREJTU19FTlRSWV9UVFdMX1JFU1YgSERCU1NfRU5UUllfVFRXTCgtNCkKJiM0MzsjZGVmaW5lIEhEQlNTX0VOVFJZX0lQQQlHRU5NQVNLX1VMTCg1NSwgMTIpCiYjNDM7CiYjNDM7aW50IGt2bV9hcm1fdmNwdV9hbGxvY19oZGJzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBvcmRlcik7CiYjNDM7dm9pZCBrdm1fYXJtX3ZjcHVfZnJlZV9oZGJzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwomIzQzO3ZvaWQga3ZtX2ZsdXNoX2hkYnNzX2J1ZmZlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwomIzQzO2ludCBrdm1faGFuZGxlX2hkYnNzX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiYjNDM7dm9pZCBrdm1fYXJtX2hkYnNzX29uX2RpcnR5X2xvZ2dpbmdfY2hhbmdlKHN0cnVjdCBrdm0gKmt2bSwgaW50IG5yX21lbXNsb3RzX2xvZ2dpbmcpOwomIzQzO3ZvaWQga3ZtX2FybV9kaXNhYmxlX2hkYnNzX2dsb2JhbChzdHJ1Y3Qga3ZtICprdm0pOwomIzQzOwomIzQzOyNlbmRpZiAvKiBfX0FSTTY0X0tWTV9ESVJUWV9CSVRfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggYmFlMmM0ZjkyZWY1YzAuLmNlY2ZiODg0YTY0ZmE3IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC01NSw2ICYjNDM7NTUsNyBAQAogI2RlZmluZSBLVk1fUkVRX0dVRVNUX0hZUF9JUlFfUEVORElORwlLVk1fQVJDSF9SRVEoOSkKICNkZWZpbmUgS1ZNX1JFUV9NQVBfTDFfVk5DUl9FTDIJCUtWTV9BUkNIX1JFUSgxMCkKICNkZWZpbmUgS1ZNX1JFUV9WR0lDX1BST0NFU1NfVVBEQVRFCUtWTV9BUkNIX1JFUSgxMSkKJiM0MzsjZGVmaW5lIEtWTV9SRVFfRkxVU0hfSERCU1MJCQlLVk1fQVJDSF9SRVEoMTIpCiAKICNkZWZpbmUgS1ZNX0RJUlRZX0xPR19NQU5VQUxfQ0FQUyAgIChLVk1fRElSVFlfTE9HX01BTlVBTF9QUk9URUNUX0VOQUJMRSB8IFwKIAkJCQkgICAgIEtWTV9ESVJUWV9MT0dfSU5JVElBTExZX1NFVCkKQEAgLTQyMCw2ICYjNDM7NDIxLDEwIEBAIHN0cnVjdCBrdm1fYXJjaCB7CiAJICovCiAJc3RydWN0IGt2bV9wcm90ZWN0ZWRfdm0gcGt2bTsKIAomIzQzOwkvKiBIREJTUzogcGVyLVZNIGRpcnR5IHRyYWNraW5nIHN0YXRlICovCiYjNDM7CWJvb2wgZW5hYmxlX2hkYnNzOwomIzQzOwl1bnNpZ25lZCBpbnQgaGRic3Nfb3JkZXI7CiYjNDM7CiAjaWZkZWYgQ09ORklHX1BURFVNUF9TVEFHRTJfREVCVUdGUwogCS8qIE5lc3RlZCB2aXJ0dWFsaXphdGlvbiBpbmZvICovCiAJc3RydWN0IGRlbnRyeSAqZGVidWdmc19udl9kZW50cnk7CkBAIC04MzgsNiAmIzQzOzg0MywxMiBAQCBzdHJ1Y3QgdmNwdV9yZXNldF9zdGF0ZSB7CiAJYm9vbAkJcmVzZXQ7CiB9OwogCiYjNDM7c3RydWN0IHZjcHVfaGRic3Nfc3RhdGUgewomIzQzOwlwaHlzX2FkZHJfdCBiYXNlX3BoeXM7ICAgLyogZm9yIG1lbW9yeSBmcmVlICovCiYjNDM7CXU2NCBoZGJzc2JyX2VsMjsgICAgICAgICAvKiBsb2FkIGRpcmVjdGx5ICovCiYjNDM7CXU2NCBoZGJzc3Byb2RfZWwyOyAgICAgICAvKiBzYXZlIGRpcmVjdGx5ICovCiYjNDM7fTsKJiM0MzsKIHN0cnVjdCB2bmNyX3RsYjsKIAogc3RydWN0IGt2bV92Y3B1X2FyY2ggewpAQCAtOTQ1LDYgJiM0Mzs5NTYsOSBAQCBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7CiAKIAkvKiBIeXAtcmVhZGFibGUgY29weSBvZiBrdm1fdmNwdTo6cGlkICovCiAJcGlkX3QgcGlkOwomIzQzOwomIzQzOwkvKiBIREJTUyByZWdpc3RlcnMgaW5mbyAqLwomIzQzOwlzdHJ1Y3QgdmNwdV9oZGJzc19zdGF0ZSBoZGJzczsKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmgKaW5kZXggNDFhODY4NzkzOGViNmIuLjVlMGZhYzRiZmE1MzY5IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGd0YWJsZS5oCkBAIC05Myw2ICYjNDM7OTMsOCBAQCB0eXBlZGVmIHU2NCBrdm1fcHRlX3Q7CiAKICNkZWZpbmUgS1ZNX1BURV9MRUFGX0FUVFJfSElfUzJfWE4JR0VOTUFTSyg1NCwgNTMpCiAKJiM0MzsjZGVmaW5lIEtWTV9QVEVfTEVBRl9BVFRSX0hJX1MyX0RCTQlCSVQoNTEpCiYjNDM7CiAjZGVmaW5lIEtWTV9QVEVfTEVBRl9BVFRSX0hJX1MxX0dQCUJJVCg1MCkKIAogI2RlZmluZSBLVk1fUFRFX0xFQUZfQVRUUl9TMl9QRVJNUwkoS1ZNX1BURV9MRUFGX0FUVFJfTE9fUzJfUzJBUF9SIHwgXApAQCAtMjQ5LDEwICYjNDM7MjUxLDEyIEBAIHN0cnVjdCBrdm1fcGd0YWJsZV9tbV9vcHMgewogICogZW51bSBrdm1fcGd0YWJsZV9zdGFnZTJfZmxhZ3MgLSBTdGFnZS0yIHBhZ2UtdGFibGUgZmxhZ3MuCiAgKiBAS1ZNX1BHVEFCTEVfUzJfSURNQVA6CU9ubHkgdXNlIGlkZW50aXR5IG1hcHBpbmdzLgogICogQEtWTV9QR1RBQkxFX1MyX0FTX1MxOglGaW5hbCBtZW1vcnkgYXR0cmlidXRlcyBhcmUgdGhhdCBvZiBTdGFnZS0xLgomIzQzOyAqIEBLVk1fUEdUQUJMRV9TMl9EQk06CUhhcmR3YXJlLW1hbmFnZWQgREJNIGZvciB3cml0YWJsZSBwYWdlcy4KICAqLwogZW51bSBrdm1fcGd0YWJsZV9zdGFnZTJfZmxhZ3MgewogCUtWTV9QR1RBQkxFX1MyX0lETUFQCQkJPSBCSVQoMCksCiAJS1ZNX1BHVEFCTEVfUzJfQVNfUzEJCQk9IEJJVCgxKSwKJiM0MzsJS1ZNX1BHVEFCTEVfUzJfREJNCQkJPSBCSVQoMiksCiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3lzcmVnLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N5c3JlZy5oCmluZGV4IDdhYTA4ZDU5ZDQ5NDQ4Li4xMzU0YTU4YzMzMTY3YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNyZWcuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N5c3JlZy5oCkBAIC0xMDM5LDYgJiM0MzsxMDM5LDE3IEBACiAKICNkZWZpbmUgR0NTX0NBUCh4KQkoKCgodW5zaWduZWQgbG9uZyl4KSAmYW1wOyBHQ1NfQ0FQX0FERFJfTUFTSykgfCBcCiAJCQkJCSAgICAgICBHQ1NfQ0FQX1ZBTElEX1RPS0VOKQomIzQzOwomIzQzOy8qCiYjNDM7ICogRGVmaW5pdGlvbnMgZm9yIHRoZSBIREJTUyBmZWF0dXJlCiYjNDM7ICovCiYjNDM7I2RlZmluZSBIREJTU19NQVhfT1JERVIJCUhEQlNTQlJfRUwyX1NaXzJNQgomIzQzOwomIzQzOyNkZWZpbmUgSERCU1NCUl9FTDIoYmFkZHIsIHN6KQkoKChiYWRkcikgJmFtcDsgSERCU1NCUl9FTDJfQkFERFJfTUFTSykgfCBcCiYjNDM7CQkJCSBGSUVMRF9QUkVQKEhEQlNTQlJfRUwyX1NaX01BU0ssIHN6KSkKJiM0MzsKJiM0MzsjZGVmaW5lIEhEQlNTUFJPRF9JRFgocHJvZCkJRklFTERfR0VUKEhEQlNTUFJPRF9FTDJfSU5ERVhfTUFTSywgcHJvZCkKJiM0MzsKIC8qCiAgKiBEZWZpbml0aW9ucyBmb3IgR0lDdjUgaW5zdHJ1Y3Rpb25zCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYwppbmRleCA5YTIyZGYwYzUxMjBmMy4uYWEzMjdlZWJhZjFjYTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMKQEAgLTIxMzEsNiAmIzQzOzIxMzEsMTEgQEAgc3RhdGljIGJvb2wgaHZoZV9wb3NzaWJsZShjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksCiAJcmV0dXJuIGFybTY0X3Rlc3Rfc3dfZmVhdHVyZV9vdmVycmlkZShBUk02NF9TV19GRUFUVVJFX09WRVJSSURFX0hWSEUpOwogfQogCiYjNDM7c3RhdGljIGJvb2wgaGFzX3ZoZV9oZGJzcyhjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksIGludCBjb3BlKQomIzQzO3sKJiM0MzsJcmV0dXJuIGlzX2tlcm5lbF9pbl9oeXBfbW9kZSgpICZhbXA7JmFtcDsgaGFzX2NwdWlkX2ZlYXR1cmUoZW50cnksIGNvcGUpOwomIzQzO30KJiM0MzsKIGJvb2wgY3B1X3N1cHBvcnRzX2JibWwyX25vYWJvcnQodm9pZCkKIHsKIAkvKgpAQCAtMjc4MSw2ICYjNDM7Mjc4NiwxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgYXJtNjRfZmVhdHVyZXNbXSA9IHsKIAkJQVJNNjRfQ1BVSURfRklFTERTKElEX0FBNjRNTUZSMV9FTDEsIEhBRkRCUywgSEFGVCkKIAl9LAogI2VuZGlmCiYjNDM7CXsKJiM0MzsJCS5kZXNjID0gJiMzNDtIYXJkd2FyZSBEaXJ0eSBzdGF0ZSB0cmFja2luZyBzdHJ1Y3R1cmUgKEhEQlNTKSYjMzQ7LAomIzQzOwkJLnR5cGUgPSBBUk02NF9DUFVDQVBfU1lTVEVNX0ZFQVRVUkUsCiYjNDM7CQkuY2FwYWJpbGl0eSA9IEFSTTY0X0hBU19IREJTUywKJiM0MzsJCS5tYXRjaGVzID0gaGFzX3ZoZV9oZGJzcywKJiM0MzsJCUFSTTY0X0NQVUlEX0ZJRUxEUyhJRF9BQTY0TU1GUjFfRUwxLCBIQUZEQlMsIEhEQlNTKQomIzQzOwl9LAogCXsKIAkJLmRlc2MgPSAmIzM0O0NSQzMyIGluc3RydWN0aW9ucyYjMzQ7LAogCQkuY2FwYWJpbGl0eSA9IEFSTTY0X0hBU19DUkMzMiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlIGIvYXJjaC9hcm02NC9rdm0vTWFrZWZpbGUKaW5kZXggNTk2MTJkMmYyNzdjMWQuLmVjMjc0OWFmNjRmYTRjIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9NYWtlZmlsZQpAQCAtMTgsNiAmIzQzOzE4LDcgQEAga3ZtLXkgJiM0Mzs9IGFybS5vIG1tdS5vIG1taW8ubyBwc2NpLm8gaHlwZXJjYWxscy5vIHB2dGltZS5vIFwKIAkgZ3Vlc3QubyBkZWJ1Zy5vIHJlc2V0Lm8gc3lzX3JlZ3MubyBzdGFja3RyYWNlLm8gXAogCSB2Z2ljLXN5cy1yZWctdjMubyBmcHNpbWQubyBwa3ZtLm8gXAogCSBhcmNoX3RpbWVyLm8gdHJuZy5vIHZtaWQubyBlbXVsYXRlLW5lc3RlZC5vIG5lc3RlZC5vIGF0Lm8gXAomIzQzOwkgZGlydHlfYml0Lm8gXAogCSB2Z2ljL3ZnaWMubyB2Z2ljL3ZnaWMtaW5pdC5vIFwKIAkgdmdpYy92Z2ljLWlycWZkLm8gdmdpYy92Z2ljLXYyLm8gXAogCSB2Z2ljL3ZnaWMtdjMubyB2Z2ljL3ZnaWMtdjQubyBcCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9hcm0uYyBiL2FyY2gvYXJtNjQva3ZtL2FybS5jCmluZGV4IDUwYWRmZmY3NWJlODJlLi41MzZkOTQ3OTliYThmOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vYXJtLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vYXJtLmMKQEAgLTM4LDYgJiM0MzszOCw3IEBACiAjaW5jbHVkZSAmbHQ7YXNtL2t2bV9hc20uaCZndDsKICNpbmNsdWRlICZsdDthc20va3ZtX2VtdWxhdGUuaCZndDsKICNpbmNsdWRlICZsdDthc20va3ZtX2h5cC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthc20va3ZtX2RpcnR5X2JpdC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9rdm1fbW11LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2t2bV9uZXN0ZWQuaCZndDsKICNpbmNsdWRlICZsdDthc20va3ZtX3Brdm0uaCZndDsKQEAgLTMxNiw2ICYjNDM7MzE3LDE0IEBAIHZvaWQga3ZtX2FyY2hfZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pCiAJaWYgKGlzX3Byb3RlY3RlZF9rdm1fZW5hYmxlZCgpKQogCQlwa3ZtX2Rlc3Ryb3lfaHlwX3ZtKGt2bSk7CiAKJiM0MzsJLyoKJiM0MzsJICogVXNlcnNwYWNlIG1heSBkZXN0cm95IHRoZSBWTSB3aXRob3V0IGRpc2FibGluZyBkaXJ0eSBsb2dnaW5nLAomIzQzOwkgKiBzbyB0aGUgYXV0by1kaXNhYmxlIHBhdGggaXMgbmV2ZXIgcmVhY2hlZC4gRm9yY2UgZGlzYWJsZSBIREJTUwomIzQzOwkgKiBoZXJlIHRvIGVuc3VyZSB2Q1BVIGJ1ZmZlcnMgYXJlIGZyZWVkIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrcy4KJiM0MzsJICovCiYjNDM7CWlmIChrdm0tJmd0O2FyY2guZW5hYmxlX2hkYnNzKQomIzQzOwkJa3ZtX2FybV9kaXNhYmxlX2hkYnNzX2dsb2JhbChrdm0pOwomIzQzOwogCWt2bV91bmluaXRfc3RhZ2UyX21tdShrdm0pOwogCWt2bV9kZXN0cm95X21waWRyX2RhdGEoa3ZtKTsKIApAQCAtNTY1LDYgJiM0Mzs1NzQsMTIgQEAgaW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZiAoZXJyKQogCQlrdm1fdmdpY192Y3B1X2Rlc3Ryb3kodmNwdSk7CiAKJiM0MzsJaWYgKHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5lbmFibGVfaGRic3MpIHsKJiM0MzsJCWVyciA9IGt2bV9hcm1fdmNwdV9hbGxvY19oZGJzcyh2Y3B1LCB2Y3B1LSZndDtrdm0tJmd0O2FyY2guaGRic3Nfb3JkZXIpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlrdm1fdmdpY192Y3B1X2Rlc3Ryb3kodmNwdSk7CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC03NDgsNiAmIzQzOzc2Myw5IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQlrdm1fdmNwdV9wdXRfaHdfbW11KHZjcHUpOwogCWt2bV9hcm1fdm1pZF9jbGVhcl9hY3RpdmUoKTsKIAomIzQzOwlpZiAodmNwdS0mZ3Q7a3ZtLSZndDthcmNoLmVuYWJsZV9oZGJzcykKJiM0MzsJCWt2bV9mbHVzaF9oZGJzc19idWZmZXIodmNwdSk7CiYjNDM7CiAJdmNwdV9jbGVhcl9vbl91bnN1cHBvcnRlZF9jcHUodmNwdSk7CiAJdmNwdS0mZ3Q7Y3B1ID0gLTE7CiB9CkBAIC0xMTUwLDYgJiM0MzsxMTY4LDkgQEAgc3RhdGljIGludCBjaGVja192Y3B1X3JlcXVlc3RzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJaWYgKGt2bV9kaXJ0eV9yaW5nX2NoZWNrX3JlcXVlc3QodmNwdSkpCiAJCQlyZXR1cm4gMDsKIAomIzQzOwkJaWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfRkxVU0hfSERCU1MsIHZjcHUpKQomIzQzOwkJCWt2bV9mbHVzaF9oZGJzc19idWZmZXIodmNwdSk7CiYjNDM7CiAJCWNoZWNrX25lc3RlZF92Y3B1X3JlcXVlc3RzKHZjcHUpOwogCX0KIApAQCAtMTk2NCw3ICYjNDM7MTk4NSwxNSBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwKIAogdm9pZCBrdm1fYXJjaF9zeW5jX2RpcnR5X2xvZyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QpCiB7CiYjNDM7CS8qCiYjNDM7CSAqIEZsdXNoIGFsbCBDUFVzJiMzOTsgZGlydHkgbG9nIGJ1ZmZlcnMgdG8gdGhlIGRpcnR5X2JpdG1hcC4gIENhbGxlZAomIzQzOwkgKiBiZWZvcmUgcmVwb3J0aW5nIGRpcnR5X2JpdG1hcCB0byB1c2Vyc3BhY2UuIFNlbmQgYSByZXF1ZXN0IHdpdGgKJiM0MzsJICogS1ZNX1JFUVVFU1RfV0FJVCB0byBmbHVzaCBidWZmZXIgc3luY2hyb25vdXNseS4KJiM0MzsJICovCiYjNDM7CWlmICgha3ZtLSZndDthcmNoLmVuYWJsZV9oZGJzcykKJiM0MzsJCXJldHVybjsKIAomIzQzOwlrdm1fbWFrZV9hbGxfY3B1c19yZXF1ZXN0KGt2bSwgS1ZNX1JFUV9GTFVTSF9IREJTUyB8IEtWTV9SRVFVRVNUX1dBSVQpOwogfQogCiBzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9zZXRfZGV2aWNlX2FkZHIoc3RydWN0IGt2bSAqa3ZtLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMgYi9hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uYzViZjg2NmMyM2VmMmIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYwpAQCAtMCwwICYjNDM7MSwyMTkgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7LyoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQVJNIEx0ZC4KJiM0MzsgKiBBdXRob3I6IExlb25hcmRvIEJyYXMgJmx0O2xlby5icmFzQGFybS5jb20mZ3Q7CiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9rdm1fZGlydHlfYml0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9rdm1fbW11LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9zeXNyZWcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZ2ZwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tjb25maWcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW0uaCZndDsKJiM0MzsKJiM0MztpbnQga3ZtX2FybV92Y3B1X2FsbG9jX2hkYnNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IG9yZGVyKQomIzQzO3sKJiM0MzsJc3RydWN0IHBhZ2UgKmhkYnNzX3BnID0gTlVMTDsKJiM0MzsKJiM0MzsJaWYgKHZjcHUtJmd0O2FyY2guaGRic3MuaGRic3Nicl9lbDIgfHwgIXN5c3RlbV9zdXBwb3J0c19oZGJzcygpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChvcmRlciAmZ3Q7IEhEQlNTX01BWF9PUkRFUikKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwloZGJzc19wZyA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUxfQUNDT1VOVCwgb3JkZXIpOwomIzQzOwlpZiAoIWhkYnNzX3BnKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXZjcHUtJmd0O2FyY2guaGRic3MgPSAoc3RydWN0IHZjcHVfaGRic3Nfc3RhdGUpIHsKJiM0MzsJCS5iYXNlX3BoeXMgPSBwYWdlX3RvX3BoeXMoaGRic3NfcGcpLAomIzQzOwkJLmhkYnNzYnJfZWwyID0gSERCU1NCUl9FTDIocGFnZV90b19waHlzKGhkYnNzX3BnKSwgb3JkZXIpLAomIzQzOwkJLmhkYnNzcHJvZF9lbDIgPSAwLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBrdm1fYXJtX3ZjcHVfZnJlZV9oZGJzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGFnZSAqaGRic3NfcGc7CiYjNDM7CiYjNDM7CWlmICghdmNwdS0mZ3Q7YXJjaC5oZGJzcy5oZGJzc2JyX2VsMikgewomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWhkYnNzX3BnID0gcGh5c190b19wYWdlKHZjcHUtJmd0O2FyY2guaGRic3MuYmFzZV9waHlzKTsKJiM0MzsJaWYgKGhkYnNzX3BnKQomIzQzOwkJX19mcmVlX3BhZ2VzKGhkYnNzX3BnLAomIzQzOwkJICAgICBGSUVMRF9HRVQoSERCU1NCUl9FTDJfU1pfTUFTSywKJiM0MzsJCQkgICAgICAgdmNwdS0mZ3Q7YXJjaC5oZGJzcy5oZGJzc2JyX2VsMikpOwomIzQzOwomIzQzOwl2Y3B1LSZndDthcmNoLmhkYnNzLmhkYnNzYnJfZWwyID0gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBrdm1fZmx1c2hfaGRic3NfYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CWludCBpZHgsIGN1cnJfaWR4OwomIzQzOwl1NjQgKmhkYnNzX2J1ZjsKJiM0MzsJc3RydWN0IGt2bSAqa3ZtID0gdmNwdS0mZ3Q7a3ZtOwomIzQzOwomIzQzOwlpZiAoIWt2bS0mZ3Q7YXJjaC5lbmFibGVfaGRic3MpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWN1cnJfaWR4ID0gSERCU1NQUk9EX0lEWChyZWFkX3N5c3JlZ19zKFNZU19IREJTU1BST0RfRUwyKSk7CiYjNDM7CiYjNDM7CS8qIERvIG5vdGhpbmcgaWYgSERCU1MgYnVmZmVyIGlzIGVtcHR5IG9yIGJyX2VsMiBpcyBOVUxMICovCiYjNDM7CWlmIChjdXJyX2lkeCA9PSAwIHx8IHZjcHUtJmd0O2FyY2guaGRic3MuaGRic3Nicl9lbDIgPT0gMCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaGRic3NfYnVmID0gcGFnZV9hZGRyZXNzKHBoeXNfdG9fcGFnZSh2Y3B1LSZndDthcmNoLmhkYnNzLmJhc2VfcGh5cykpOwomIzQzOwlpZiAoIWhkYnNzX2J1ZikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZ3VhcmQod3JpdGVfbG9ja19pcnFzYXZlKSgmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7bW11X2xvY2spOwomIzQzOwlmb3IgKGlkeCA9IDA7IGlkeCAmbHQ7IGN1cnJfaWR4OyBpZHgmIzQzOyYjNDM7KSB7CiYjNDM7CQl1NjQgZ3BhOwomIzQzOwomIzQzOwkJZ3BhID0gaGRic3NfYnVmW2lkeF07CiYjNDM7CQlpZiAoIShncGEgJmFtcDsgSERCU1NfRU5UUllfVkFMSUQpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJZ3BhICZhbXA7PSBIREJTU19FTlRSWV9JUEE7CiYjNDM7CQlrdm1fdmNwdV9tYXJrX3BhZ2VfZGlydHkodmNwdSwgZ3BhICZndDsmZ3Q7IFBBR0VfU0hJRlQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIHJlc2V0IEhEQlNTIGluZGV4ICovCiYjNDM7CXdyaXRlX3N5c3JlZ19zKDAsIFNZU19IREJTU1BST0RfRUwyKTsKJiM0MzsJdmNwdS0mZ3Q7YXJjaC5oZGJzcy5oZGJzc3Byb2RfZWwyID0gMDsKJiM0MzsJaXNiKCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBrdm1faGFuZGxlX2hkYnNzX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CXU2NCBwcm9kOwomIzQzOwl1NjQgZnNjOwomIzQzOwomIzQzOwlwcm9kID0gcmVhZF9zeXNyZWdfcyhTWVNfSERCU1NQUk9EX0VMMik7CiYjNDM7CWZzYyA9IEZJRUxEX0dFVChIREJTU1BST0RfRUwyX0ZTQ19NQVNLLCBwcm9kKTsKJiM0MzsKJiM0MzsJc3dpdGNoIChmc2MpIHsKJiM0MzsJY2FzZSBIREJTU1BST0RfRUwyX0ZTQ19PSzoKJiM0MzsJCS8qIEJ1ZmZlciBmdWxsLCBzZXQgcmVxdWVzdCB0byBmbHVzaCBvbiBuZXh0IHZjcHUgZXhpdCAqLwomIzQzOwkJa3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX0ZMVVNIX0hEQlNTLCB2Y3B1KTsKJiM0MzsJCXJldHVybiAxOwomIzQzOwljYXNlIEhEQlNTUFJPRF9FTDJfRlNDX0V4dGVybmFsQWJvcnQ6CiYjNDM7CWNhc2UgSERCU1NQUk9EX0VMMl9GU0NfR1BGOgomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQkvKiBVbmtub3duIGZhdWx0LiAqLwomIzQzOwkJV0FSTl9PTkNFKDEsCiYjNDM7CQkJICAmIzM0O1VuZXhwZWN0ZWQgSERCU1MgZmF1bHQgdHlwZSwgRlNDOiAweCVsbHggKHByb2Q9MHglbGx4LCB2Y3B1PSVkKVxuJiMzNDssCiYjNDM7CQkJICBmc2MsIHByb2QsIHZjcHUtJmd0O3ZjcHVfaWQpOwomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBoZGJzc19hdXRvX3NlbGVjdF9vcmRlcihzdHJ1Y3Qga3ZtICprdm0pCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIG5wYWdlcyA9IDA7CiYjNDM7CXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3Q7CiYjNDM7CWludCBia3Q7CiYjNDM7CiYjNDM7CWt2bV9mb3JfZWFjaF9tZW1zbG90KG1lbXNsb3QsIGJrdCwga3ZtX21lbXNsb3RzKGt2bSkpCiYjNDM7CQlucGFnZXMgJiM0Mzs9IG1lbXNsb3QtJmd0O25wYWdlczsKJiM0MzsKJiM0MzsJaWYgKG5wYWdlcyAmbHQ7PSAxNjM4NCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwllbHNlIGlmIChucGFnZXMgJmx0Oz0gMjYyMTQ0KQomIzQzOwkJcmV0dXJuIDM7CiYjNDM7CWVsc2UgaWYgKG5wYWdlcyAmbHQ7PSA0MTk0MzA0KQomIzQzOwkJcmV0dXJuIDY7CiYjNDM7CWVsc2UKJiM0MzsJCXJldHVybiA5OwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEVuYWJsZSBIREJTUyBmb3IgYWxsIHZDUFVzIGluIHRoZSBWTS4KJiM0MzsgKgomIzQzOyAqIENhbGxlZCBmcm9tIGt2bV9hcm1faGRic3Nfb25fZGlydHlfbG9nZ2luZ19jaGFuZ2UoKSB3aGljaCBpcyBpbnZva2VkCiYjNDM7ICogYnkga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oKSB1bmRlciBrdm0tJmd0O3Nsb3RzX2xvY2suCiYjNDM7ICoKJiM0MzsgKiBJZiBidWZmZXIgYWxsb2NhdGlvbiBmYWlscywgSERCU1MgcmVtYWlucyBkaXNhYmxlZCBhbmQgZGlydHkgdHJhY2tpbmcKJiM0MzsgKiBmYWxscyBiYWNrIHRvIHRoZSB0cmFkaXRpb25hbCBzb2Z0d2FyZS1iYXNlZCBhcHByb2FjaCAoUFRFIHdyaXRlLXByb3RlY3QKJiM0MzsgKiAmIzQzOyBzb2Z0d2FyZSBkaXJ0eSBtYXJraW5nKS4gVGhpcyBkb2VzIG5vdCBhZmZlY3QgY29ycmVjdG5lc3M7IGRpcnR5CiYjNDM7ICogbG9nZ2luZyByZW1haW5zIGZ1bmN0aW9uYWwgd2l0aG91dCBIREJTUy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGt2bV9hcm1fZW5hYmxlX2hkYnNzX2dsb2JhbChzdHJ1Y3Qga3ZtICprdm0pCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwl1bnNpZ25lZCBsb25nIGk7CiYjNDM7CXVuc2lnbmVkIGludCBvcmRlcjsKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwomIzQzOwomIzQzOwlpZiAoIXN5c3RlbV9zdXBwb3J0c19oZGJzcygpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChrdm0tJmd0O2RpcnR5X3Jpbmdfc2l6ZSkgLyogRG9uJiMzOTt0IHN1cHBvcnQgSERCU1MgaW4gZGlydHkgcmluZyBtb2RlICovCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKGt2bS0mZ3Q7YXJjaC5lbmFibGVfaGRic3MpIC8qIEFscmVhZHkgT24gKi8KJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBUdXJuIGl0IG9uICovCiYjNDM7CW9yZGVyID0gaGRic3NfYXV0b19zZWxlY3Rfb3JkZXIoa3ZtKTsKJiM0MzsJa3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKSB7CiYjNDM7CQllcnIgPSBrdm1fYXJtX3ZjcHVfYWxsb2NfaGRic3ModmNwdSwgb3JkZXIpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlnb3RvIGVycm9yX2FsbG9jOwomIzQzOwl9CiYjNDM7CiYjNDM7CWt2bS0mZ3Q7YXJjaC5lbmFibGVfaGRic3MgPSB0cnVlOwomIzQzOwlrdm0tJmd0O2FyY2gubW11LnZ0Y3IgfD0gVlRDUl9FTDJfSEQgfCBWVENSX0VMMl9IREJTUyB8IFZUQ1JfRUwyX0hBOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBXZSBzaG91bGQga2ljayB2Y3B1cyBvdXQgb2YgZ3Vlc3QgbW9kZSBoZXJlIHRvIGxvYWQgbmV3CiYjNDM7CSAqIHZ0Y3IgdmFsdWUgdG8gdnRjcl9lbDIgcmVnaXN0ZXIgd2hlbiByZS1lbnRlciBndWVzdCBtb2RlLgomIzQzOwkgKi8KJiM0MzsJa3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKQomIzQzOwkJa3ZtX3ZjcHVfa2ljayh2Y3B1KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyb3JfYWxsb2M6CiYjNDM7CWt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkKJiM0MzsJCWlmICh2Y3B1LSZndDthcmNoLmhkYnNzLmJhc2VfcGh5cykKJiM0MzsJCQlrdm1fYXJtX3ZjcHVfZnJlZV9oZGJzcyh2Y3B1KTsKJiM0MzsKJiM0MzsJcHJfd2Fybl9vbmNlKCYjMzQ7a3ZtOiBmYWlsZWQgdG8gYWxsb2NhdGUgSERCU1MgYnVmZmVycyAob3JkZXI9JXUpLCAmIzM0OwomIzQzOwkJICAgICAmIzM0O2ZhbGxpbmcgYmFjayB0byBzb2Z0d2FyZSBkaXJ0eSB0cmFja2luZ1xuJiMzNDssIG9yZGVyKTsKJiM0MzsJcmV0dXJuIC1FTk9NRU07CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQga3ZtX2FybV9kaXNhYmxlX2hkYnNzX2dsb2JhbChzdHJ1Y3Qga3ZtICprdm0pCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGk7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKJiM0MzsKJiM0MzsJaWYgKCFrdm0tJmd0O2FyY2guZW5hYmxlX2hkYnNzKSAvKiBBbHJlYWR5IE9mZiAqLwomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwkvKiBUdXJuIGl0IG9mZiAqLwomIzQzOwlrdm0tJmd0O2FyY2gubW11LnZ0Y3IgJmFtcDs9IH4oVlRDUl9FTDJfSEQgfCBWVENSX0VMMl9IREJTUyB8IFZUQ1JfRUwyX0hBKTsKJiM0MzsKJiM0MzsJa3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKQomIzQzOwkJa3ZtX2FybV92Y3B1X2ZyZWVfaGRic3ModmNwdSk7CiYjNDM7CiYjNDM7CWt2bS0mZ3Q7YXJjaC5lbmFibGVfaGRic3MgPSBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBrdm1fYXJtX2hkYnNzX29uX2RpcnR5X2xvZ2dpbmdfY2hhbmdlKHN0cnVjdCBrdm0gKmt2bSwgaW50IG5yX21lbXNsb3RzX2xvZ2dpbmcpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBDYWxsZWQgZnJvbSBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbigpIHVuZGVyIGt2bS0mZ3Q7c2xvdHNfbG9jay4KJiM0MzsJICogQWxsIHN0YXRlIHRyYW5zaXRpb25zIGFyZSBzZXJpYWxpemVkIGJ5IHNsb3RzX2xvY2suCiYjNDM7CSAqLwomIzQzOwlpZiAobnJfbWVtc2xvdHNfbG9nZ2luZyAmZ3Q7IDAgJmFtcDsmYW1wOyAha3ZtLSZndDthcmNoLmVuYWJsZV9oZGJzcykKJiM0MzsJCWt2bV9hcm1fZW5hYmxlX2hkYnNzX2dsb2JhbChrdm0pOwomIzQzOwllbHNlIGlmIChucl9tZW1zbG90c19sb2dnaW5nID09IDAgJmFtcDsmYW1wOyBrdm0tJmd0O2FyY2guZW5hYmxlX2hkYnNzKQomIzQzOwkJa3ZtX2FybV9kaXNhYmxlX2hkYnNzX2dsb2JhbChrdm0pOwomIzQzO30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmMgYi9hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jCmluZGV4IDkxYTdkZmFkNjY4NjYwLi4yMWVjNDU2ZWNjNDExYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jCkBAIC03MzEsOSAmIzQzOzczMSwyMyBAQCBzdGF0aWMgaW50IHN0YWdlMl9zZXRfcHJvdF9hdHRyKHN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0LCBlbnVtIGt2bV9wZ3RhYmxlX3Byb3QgcAogCWlmIChwcm90ICZhbXA7IEtWTV9QR1RBQkxFX1BST1RfUikKIAkJYXR0ciB8PSBLVk1fUFRFX0xFQUZfQVRUUl9MT19TMl9TMkFQX1I7CiAKLQlpZiAocHJvdCAmYW1wOyBLVk1fUEdUQUJMRV9QUk9UX1cpCiYjNDM7CWlmIChwcm90ICZhbXA7IEtWTV9QR1RBQkxFX1BST1RfVykgewogCQlhdHRyIHw9IEtWTV9QVEVfTEVBRl9BVFRSX0xPX1MyX1MyQVBfVzsKIAomIzQzOwkJLyoKJiM0MzsJCSAqIFNldCBEQk0gYml0IGZvciB3cml0YWJsZSBub24tZGV2aWNlIHBhZ2VzIGlmIHRoZSBwYWdlLXRhYmxlCiYjNDM7CQkgKiBoYXMgS1ZNX1BHVEFCTEVfUzJfREJNIGZsYWcgKHN5c3RlbSBzdXBwb3J0cyBIREJTUykuCiYjNDM7CQkgKgomIzQzOwkJICogRm9yIHN0YWdlIDIgdHJhbnNsYXRpb25zIHVzaW5nIEluZGlyZWN0IHBlcm1pc3Npb25zLCBpZiB0aGUKJiM0MzsJCSAqIEVmZmVjdGl2ZSB2YWx1ZSBvZiBWVENSX0VMMi5IRCBpcyAwLCB0aGVuIGRpcnR5IHN0YXRlIGlzCiYjNDM7CQkgKiBtYW5hZ2VkIGJ5IHNvZnR3YXJlLiBIYXJkd2FyZSBvbmx5IHVwZGF0ZXMgdGhlIGRpcnR5IHN0YXRlCiYjNDM7CQkgKiB3aGVuIFZUQ1JfRUwyLkhEPTEgKEhEQlNTIGVuYWJsZWQpLgomIzQzOwkJICovCiYjNDM7CQlpZiAoKHBndC0mZ3Q7ZmxhZ3MgJmFtcDsgS1ZNX1BHVEFCTEVfUzJfREJNKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIShwcm90ICZhbXA7IEtWTV9QR1RBQkxFX1BST1RfREVWSUNFKSkKJiM0MzsJCQlhdHRyIHw9IEtWTV9QVEVfTEVBRl9BVFRSX0hJX1MyX0RCTTsKJiM0MzsJfQomIzQzOwogCWlmICgha3ZtX2xwYTJfaXNfZW5hYmxlZCgpKQogCQlhdHRyIHw9IEZJRUxEX1BSRVAoS1ZNX1BURV9MRUFGX0FUVFJfTE9fUzJfU0gsIHNoKTsKIApAQCAtMTM2Nyw5ICYjNDM7MTM4MSwyNiBAQCBpbnQga3ZtX3BndGFibGVfc3RhZ2UyX3JlbGF4X3Blcm1zKHN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0LCB1NjQgYWRkciwKIAlpZiAocHJvdCAmYW1wOyBLVk1fUEdUQUJMRV9QUk9UX1IpCiAJCXNldCB8PSBLVk1fUFRFX0xFQUZfQVRUUl9MT19TMl9TMkFQX1I7CiAKLQlpZiAocHJvdCAmYW1wOyBLVk1fUEdUQUJMRV9QUk9UX1cpCiYjNDM7CWlmIChwcm90ICZhbXA7IEtWTV9QR1RBQkxFX1BST1RfVykgewogCQlzZXQgfD0gS1ZNX1BURV9MRUFGX0FUVFJfTE9fUzJfUzJBUF9XOwogCiYjNDM7CQkvKgomIzQzOwkJICogTm8gREVWSUNFIGZpbHRlciBuZWVkZWQgaGVyZTogcmVsYXhfcGVybXMgaXMgb25seSBjYWxsZWQKJiM0MzsJCSAqIG9uIEZTQ19QRVJNIGZhdWx0cy4gRGV2aWNlIHBhZ2VzIGFsd2F5cyBnZXQgZnVsbCBSVyBmcm9tCiYjNDM7CQkgKiBpbml0aWFsIG1hcHBpbmcgYW5kIGFyZSBuZXZlciB3cml0ZS1wcm90ZWN0ZWQgZHVyaW5nCiYjNDM7CQkgKiBtaWdyYXRpb24sIHNvIHRoZXkgbmV2ZXIgdHJpZ2dlciBhIHBlcm1pc3Npb24gZmF1bHQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChwZ3QtJmd0O2ZsYWdzICZhbXA7IEtWTV9QR1RBQkxFX1MyX0RCTSkKJiM0MzsJCQlzZXQgfD0gS1ZNX1BURV9MRUFGX0FUVFJfSElfUzJfREJNOwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyoKJiM0MzsJCSAqIENsZWFyIERCTSBvbiBX4oaSUk8gZG93bmdyYWRlIHRvIHByZXZlbnQgaGFyZHdhcmUgZnJvbQomIzQzOwkJICogc2lsZW50bHkgdXBncmFkaW5nIFJPJiM0MztEQk0gYmFjayB0byBXJiM0MztkaXJ0eSwgd2hpY2ggd291bGQKJiM0MzsJCSAqIGJ5cGFzcyBLVk0mIzM5O3Mgd3JpdGUgdHJhY2tpbmcgYW5kIGNhdXNlIGRhdGEgY29ycnVwdGlvbi4KJiM0MzsJCSAqLwomIzQzOwkJY2xyIHw9IEtWTV9QVEVfTEVBRl9BVFRSX0hJX1MyX0RCTTsKJiM0MzsJfQomIzQzOwogCXJldCA9IHN0YWdlMl9zZXRfeG5fYXR0cihwcm90LCAmYW1wO3huKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guYyBiL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmMKaW5kZXggYmJlOWNlYmQzZDlkNTcuLmZlNzI5NDRiZmQzZDViIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmMKQEAgLTIyLDYgJiM0MzsyMiw3IEBACiAjaW5jbHVkZSAmbHQ7YXNtL2t2bV9lbXVsYXRlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2t2bV9oeXAuaCZndDsKICNpbmNsdWRlICZsdDthc20va3ZtX21tdS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthc20va3ZtX2RpcnR5X2JpdC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9mcHNpbWQuaCZndDsKICNpbmNsdWRlICZsdDthc20vZGVidWctbW9uaXRvcnMuaCZndDsKICNpbmNsdWRlICZsdDthc20vcHJvY2Vzc29yLmgmZ3Q7CkBAIC0yMTMsNiAmIzQzOzIxNCwxOSBAQCBzdGF0aWMgdm9pZCBfX3ZjcHVfcHV0X2RlYWN0aXZhdGVfdHJhcHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIF9fbG9hZF9oZGJzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LSZndDtrdm07CiYjNDM7CiYjNDM7CWlmICgha3ZtLSZndDthcmNoLmVuYWJsZV9oZGJzcykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJd3JpdGVfc3lzcmVnX3ModmNwdS0mZ3Q7YXJjaC5oZGJzcy5oZGJzc2JyX2VsMiwgU1lTX0hEQlNTQlJfRUwyKTsKJiM0MzsJd3JpdGVfc3lzcmVnX3ModmNwdS0mZ3Q7YXJjaC5oZGJzcy5oZGJzc3Byb2RfZWwyLCBTWVNfSERCU1NQUk9EX0VMMik7CiYjNDM7CiYjNDM7CWlzYigpOwomIzQzO30KJiM0MzsKIHZvaWQga3ZtX3ZjcHVfbG9hZF92aGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCWhvc3RfZGF0YV9wdHIoaG9zdF9jdHh0KS0mZ3Q7X19oeXBfcnVubmluZ192Y3B1ID0gdmNwdTsKQEAgLTIyMCw2ICYjNDM7MjM0LDcgQEAgdm9pZCBrdm1fdmNwdV9sb2FkX3ZoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJX192Y3B1X2xvYWRfc3dpdGNoX3N5c3JlZ3ModmNwdSk7CiAJX192Y3B1X2xvYWRfYWN0aXZhdGVfdHJhcHModmNwdSk7CiAJX19sb2FkX3N0YWdlMih2Y3B1LSZndDthcmNoLmh3X21tdSk7CiYjNDM7CV9fbG9hZF9oZGJzcyh2Y3B1KTsKIH0KIAogdm9pZCBrdm1fdmNwdV9wdXRfdmhlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL21tdS5jIGIvYXJjaC9hcm02NC9rdm0vbW11LmMKaW5kZXggNmM5NDFhYWExMGM2MzkuLjQ4NGY0OGRhZTAwMDNjIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9tbXUuYwpAQCAtMTYsNiAmIzQzOzE2LDcgQEAKICNpbmNsdWRlICZsdDthc20vY2FjaGVmbHVzaC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9rdm1fYXJtLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2t2bV9tbXUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL2t2bV9kaXJ0eV9iaXQuaCZndDsKICNpbmNsdWRlICZsdDthc20va3ZtX3BndGFibGUuaCZndDsKICNpbmNsdWRlICZsdDthc20va3ZtX3Brdm0uaCZndDsKICNpbmNsdWRlICZsdDthc20va3ZtX2FzbS5oJmd0OwpAQCAtMTAxNCw2ICYjNDM7MTAxNSw5IEBAIGludCBrdm1faW5pdF9zdGFnZTJfbW11KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMl9tbXUgKm1tdSwgdW5zaWduZWQgbG9uZyB0CiAJaWYgKGVycikKIAkJZ290byBvdXRfZnJlZV9wZ3RhYmxlOwogCiYjNDM7CWlmIChzeXN0ZW1fc3VwcG9ydHNfaGRic3MoKSkKJiM0MzsJCXBndC0mZ3Q7ZmxhZ3MgfD0gS1ZNX1BHVEFCTEVfUzJfREJNOwomIzQzOwogCW1tdS0mZ3Q7cGd0ID0gcGd0OwogCWlmIChpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSkKIAkJcmV0dXJuIDA7CkBAIC0xMDI3LDggJiM0MzsxMDMxLDEyIEBAIGludCBrdm1faW5pdF9zdGFnZTJfbW11KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMl9tbXUgKm1tdSwgdW5zaWduZWQgbG9uZyB0CiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKIAkJKnBlcl9jcHVfcHRyKG1tdS0mZ3Q7bGFzdF92Y3B1X3JhbiwgY3B1KSA9IC0xOwogCi0JIC8qIFRoZSBlYWdlciBwYWdlIHNwbGl0dGluZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0ICovCi0JbW11LSZndDtzcGxpdF9wYWdlX2NodW5rX3NpemUgPSBLVk1fQVJNX0VBR0VSX1NQTElUX0NIVU5LX1NJWkVfREVGQVVMVDsKJiM0MzsJIC8qIFRoZSBlYWdlciBwYWdlIHNwbGl0dGluZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IGlmIHN5c3RlbSBoYXMgbm8gSERCU1MgKi8KJiM0MzsJaWYgKHN5c3RlbV9zdXBwb3J0c19oZGJzcygpKQomIzQzOwkJbW11LSZndDtzcGxpdF9wYWdlX2NodW5rX3NpemUgPSAyNTYgKiAxMDI0ICogUEFHRV9TSVpFOwomIzQzOwllbHNlCiYjNDM7CQltbXUtJmd0O3NwbGl0X3BhZ2VfY2h1bmtfc2l6ZSA9IEtWTV9BUk1fRUFHRVJfU1BMSVRfQ0hVTktfU0laRV9ERUZBVUxUOwomIzQzOwogCW1tdS0mZ3Q7c3BsaXRfcGFnZV9jYWNoZS5nZnBfemVybyA9IF9fR0ZQX1pFUk87CiAKIAltbXUtJmd0O3BnZF9waHlzID0gX19wYShwZ3QtJmd0O3BnZCk7CkBAIC0yMjM0LDYgJiM0MzsyMjQyLDcgQEAgaW50IGt2bV9oYW5kbGVfZ3Vlc3Rfc2VhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIH0KIAogLyoqCiYjNDM7CiAgKiBrdm1faGFuZGxlX2d1ZXN0X2Fib3J0IC0gaGFuZGxlcyBhbGwgMm5kIHN0YWdlIGFib3J0cwogICogQHZjcHU6CXRoZSBWQ1BVIHBvaW50ZXIKICAqCkBAIC0yMjcxLDYgJiM0MzsyMjgwLDkgQEAgaW50IGt2bV9oYW5kbGVfZ3Vlc3RfYWJvcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiAJaXNfaWFidCA9IGt2bV92Y3B1X3RyYXBfaXNfaWFidCh2Y3B1KTsKIAomIzQzOwlpZiAoZXNyX2lzczJfaXNfaGRic3NmKGVzcikpCiYjNDM7CQlyZXR1cm4ga3ZtX2hhbmRsZV9oZGJzc19mYXVsdCh2Y3B1KTsKJiM0MzsKIAlpZiAoZXNyX2ZzY19pc190cmFuc2xhdGlvbl9mYXVsdChlc3IpKSB7CiAJCS8qIEJleW9uZCBzYW5pdGlzZWQgUEFSYW5nZSAod2hpY2ggaXMgdGhlIElQQSBsaW1pdCkgKi8KIAkJaWYgKGZhdWx0X2lwYSAmZ3Q7PSBCSVRfVUxMKGdldF9rdm1faXBhX2xpbWl0KCkpKSB7CkBAIC0yNTc2LDYgJiM0MzsyNTg4LDkgQEAgdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sCiB7CiAJYm9vbCBsb2dfZGlydHlfcGFnZXMgPSBuZXcgJmFtcDsmYW1wOyBuZXctJmd0O2ZsYWdzICZhbXA7IEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTOwogCiYjNDM7CWt2bV9hcm1faGRic3Nfb25fZGlydHlfbG9nZ2luZ19jaGFuZ2Uoa3ZtLAomIzQzOwkJYXRvbWljX3JlYWQoJmFtcDtrdm0tJmd0O25yX21lbXNsb3RzX2RpcnR5X2xvZ2dpbmcpKTsKJiM0MzsKIAkvKgogCSAqIEF0IHRoaXMgcG9pbnQgbWVtc2xvdCBoYXMgYmVlbiBjb21taXR0ZWQgYW5kIHRoZXJlIGlzIGFuCiAJICogYWxsb2NhdGVkIGRpcnR5X2JpdG1hcFtdLCBkaXJ0eSBwYWdlcyB3aWxsIGJlIHRyYWNrZWQgd2hpbGUgdGhlCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9yZXNldC5jIGIvYXJjaC9hcm02NC9rdm0vcmVzZXQuYwppbmRleCBiOTYzZmQ5NzVhYWNhZi4uZDgxMDRiY2JkOWZmYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL3Jlc2V0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vcmVzZXQuYwpAQCAtMjcsNiAmIzQzOzI3LDcgQEAKICNpbmNsdWRlICZsdDthc20va3ZtX2FzbS5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9rdm1fZW11bGF0ZS5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9rdm1fbW11LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9rdm1fZGlydHlfYml0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2t2bV9uZXN0ZWQuaCZndDsKICNpbmNsdWRlICZsdDthc20vdmlydC5oJmd0OwogCkBAIC0xNjEsNiAmIzQzOzE2Miw5IEBAIHZvaWQga3ZtX2FybV92Y3B1X2Rlc3Ryb3koc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyl2Y3B1LSZndDthcmNoLmN0eHQudm5jcl9hcnJheSk7CiAJa2ZyZWUodmNwdS0mZ3Q7YXJjaC52bmNyX3RsYik7CiAJa2ZyZWUodmNwdS0mZ3Q7YXJjaC5jY3NpZHIpOwomIzQzOwomIzQzOwlpZiAodmNwdS0mZ3Q7a3ZtLSZndDthcmNoLmVuYWJsZV9oZGJzcykKJiM0MzsJCWt2bV9hcm1fdmNwdV9mcmVlX2hkYnNzKHZjcHUpOwogfQogCiBzdGF0aWMgdm9pZCBrdm1fdmNwdV9yZXNldF9zdmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC90b29scy9jcHVjYXBzIGIvYXJjaC9hcm02NC90b29scy9jcHVjYXBzCmluZGV4IDliODVhODRmNmZkNDk0Li5hODc3MDZjOWQxNjBlMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC90b29scy9jcHVjYXBzCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2FwcwpAQCAtNjksNiAmIzQzOzY5LDcgQEAgSEFTX1ZBNTIKIEhBU19WSVJUX0hPU1RfRVhUTgogSEFTX1dGWFQKIEhBU19YTlgKJiM0MztIQVNfSERCU1MKIEhBRlQKIEhXX0RCTQogS1ZNX0hWSEUKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2NjEKCQkJCQkJCW91dHB1dDogMjA2CgkJCQkJCQl0aG91Z2h0czogMTMyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBIREJTUyBQYXRjaCBmb3IgS1ZNIG9uIGFybTY0KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGludHJvZHVjaW5nIEhEQlNTIHN1cHBvcnQgZm9yIEtWTSBvbiBhcm02NC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBzaWduaWZpY2FudCBvbmUsIHRvIHRoZSBjb3JlIEtWTSBsb2dpYy4gVGhlcmVmb3JlLCBmdXp6aW5nIGlzIGRlZmluaXRlbHkgd2FycmFudGVkLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY3JpdGljYWwgYXJlYXMgZm9yIGZ1enppbmcgYW5kIHRoZSByaWdodCBjb25maWd1cmF0aW9uIHRvIGVuYWJsZSB0aGlzLgoKRmlyc3QsIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggdG91Y2hlcy4gTG9va3MgbGlrZSBpdCYjMzk7cyBhZGRpbmcgbmV3IGZpbGVzIGBhcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuY2AsIGBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9kaXJ0eV9iaXQuaGAsIGFuZCBtb2RpZnlpbmcgc2V2ZXJhbCBleGlzdGluZyBLVk0gZmlsZXMuIEkgc2VlIG1vZGlmaWNhdGlvbnMgaW4gYGt2bV9hcmNoX3ZjcHVfY3JlYXRlYCwgYGt2bV9hcmNoX3ZjcHVfcHV0YCwgYGNoZWNrX3ZjcHVfcmVxdWVzdHNgLCBhbmQgdGhlIGxpa2Ug4oCTIGNvcmUgS1ZNIHN0dWZmLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBIREJTUy1zcGVjaWZpYyBmdW5jdGlvbnMuCgpJIGNhbiBzZWUgc29tZSBrZXkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIEhEQlNTIGltcGxlbWVudGF0aW9uIHRoYXQgYXJlIGFkZGVkL21vZGlmaWVkLiBUaGVzZSBhcmUgbXkgbWFpbiB0YXJnZXRzOgotIGBrdm1fYXJtX3ZjcHVfYWxsb2NfaGRic3NgCi0gYGt2bV9hcm1fdmNwdV9mcmVlX2hkYnNzYAotIGBrdm1fZmx1c2hfaGRic3NfYnVmZmVyYAotIGBrdm1faGFuZGxlX2hkYnNzX2ZhdWx0YAotIGBrdm1fYXJtX2VuYWJsZV9oZGJzc19nbG9iYWxgCi0gYGt2bV9hcm1fZGlzYWJsZV9oZGJzc19nbG9iYWxgCi0gYGt2bV9hcm1faGRic3Nfb25fZGlydHlfbG9nZ2luZ19jaGFuZ2VgCi0gYGt2bV9hcmNoX3N5bmNfZGlydHlfbG9nYAoKTm93LCBsZXQmIzM5O3MgY2hlY2sgZm9yIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzLiBMb29raW5nIGF0IHRoZSBgTWFrZWZpbGVgLCBJIHNlZSB0aGF0IHRoZSBgZGlydHlfYml0Lm9gIGZpbGUgaXMgYmVpbmcgdW5jb25kaXRpb25hbGx5IGJ1aWx0IHdoZW4gS1ZNIGlzIGVuYWJsZWQuIFNvLCB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG5lZWRlZCBpcyBgS1ZNYC4gTm90aGluZyBlbHNlIGFwcGVhcnMgdG8gYmUgYWRkZWQgaW4gdGhlIEtjb25maWcgb3Igc2ltaWxhciBmaWxlcy4KCkluaXRpYWxseSwgSSYjMzk7ZCB0aG91Z2h0IGFib3V0IG9taXR0aW5nIHN0YXRpYyBmdW5jdGlvbnMgbGlrZSBga3ZtX2FybV9lbmFibGVfaGRic3NfZ2xvYmFsYCBhbmQgYGt2bV9hcm1fZGlzYWJsZV9oZGJzc19nbG9iYWxgIGZyb20gdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QsIGFzc3VtaW5nIHRoZSBmdXp6ZXIgbWlnaHQgbm90IGRpcmVjdGx5IHRhcmdldCB0aGVtLiBIb3dldmVyLCBmb3IgY292ZXJhZ2UgYW5kIHRvIGd1aWRlIHRoZSBmdXp6ZXIsIGluY2x1ZGluZyB0aGVtIG1ha2VzIHNlbnNlLgoKQWZ0ZXIgc29tZSBtb3JlIHRob3VnaHQsIEkmIzM5O3ZlIGRlY2lkZWQgdG8gaW5jbHVkZSBga3ZtX2FyY2hfc3luY19kaXJ0eV9sb2dgLCBpdCYjMzk7cyBhIGNyaXRpY2FsIGZ1bmN0aW9uIGZvciBkaXJ0eSBsb2cgc3luY2hyb25pemF0aW9uLiBOb3csIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAgaXMgYWxzbyBhIGNyaXRpY2FsIGNvbXBvbmVudCB0byBmdXp6LiBBdm9pZGluZyBga3ZtX2hhbmRsZV9ndWVzdF9hYm9ydGAgYXMgaXQmIzM5O3MgbGlrZWx5IGEgaG90LXBhdGggZnVuY3Rpb24gYW5kIG1pZ2h0IGJlIGxlc3MgcHJvZml0YWJsZSBmb3IgZnV6emluZy4KCk15IHJlYXNvbmluZyBpcyB0aGlzOiBUaGlzIHBhdGNoIGZ1bmRhbWVudGFsbHkgY2hhbmdlcyBob3cgZGlydHkgcGFnZSBsb2dnaW5nIGFuZCBtZW1vcnkgbWFuYWdlbWVudCB3b3JrIHdpdGhpbiBLVk0gb24gYXJtNjQuIFNpbmNlIHRoaXMgaXMgYW4gaW50ZWdyYXRpb24gdGhhdCB3aWxsIGJlIGFjY2Vzc2libGUgdG8gdXNlcnNwYWNlIHZpYSB0aGUgS1ZNIGlvY3RscywgdGhpcyBpcyB3b3J0aCBmdXp6aW5nIGFuZCBpbmNsdWRpbmcgdGhpcyBjcml0aWNhbCBjb21wb25lbnQgd2lsbCBoZWxwLgoKU28sIGhlcmUmIzM5O3MgbXkgcGxhbiB0byBjYWxsIGBzZXQtcmVzdWx0c2A6CgpgV29ydGhGdXp6aW5nOiB0cnVlYApgRm9jdXNTeW1ib2xzYDoKLSBrdm1fYXJtX3ZjcHVfYWxsb2NfaGRic3MKLSBrdm1fYXJtX3ZjcHVfZnJlZV9oZGJzcwotIGt2bV9mbHVzaF9oZGJzc19idWZmZXIKLSBrdm1faGFuZGxlX2hkYnNzX2ZhdWx0Ci0ga3ZtX2FybV9lbmFibGVfaGRic3NfZ2xvYmFsCi0ga3ZtX2FybV9kaXNhYmxlX2hkYnNzX2dsb2JhbAotIGt2bV9hcm1faGRic3Nfb25fZGlydHlfbG9nZ2luZ19jaGFuZ2UKLSBrdm1fYXJjaF9zeW5jX2RpcnR5X2xvZwpgRW5hYmxlQ29uZmlnc2A6Ci0gS1ZNCgpJJiMzOTttIGNvbmZpZGVudCB0aGlzIGlzIHRoZSByaWdodCBhcHByb2FjaCB0byBlbnN1cmUgdGhpcyBwYXRjaCBnZXRzIHRob3JvdWdoIGZ1enppbmcgY292ZXJhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDY6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcm1fdmNwdV9hbGxvY19oZGJzcyYjMzQ7LAogICAgJiMzNDtrdm1fYXJtX3ZjcHVfZnJlZV9oZGJzcyYjMzQ7LAogICAgJiMzNDtrdm1fZmx1c2hfaGRic3NfYnVmZmVyJiMzNDssCiAgICAmIzM0O2t2bV9oYW5kbGVfaGRic3NfZmF1bHQmIzM0OywKICAgICYjMzQ7a3ZtX2FybV9lbmFibGVfaGRic3NfZ2xvYmFsJiMzNDssCiAgICAmIzM0O2t2bV9hcm1fZGlzYWJsZV9oZGJzc19nbG9iYWwmIzM0OywKICAgICYjMzQ7a3ZtX2FybV9oZGJzc19vbl9kaXJ0eV9sb2dnaW5nX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9zeW5jX2RpcnR5X2xvZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIEhhcmR3YXJlIERpcnR5IHN0YXRlIHRyYWNraW5nIHN0cnVjdHVyZSAoSERCU1MpIHN1cHBvcnQgZm9yIEtWTSBvbiBhcm02NC4gSXQgbW9kaWZpZXMgY29yZSBLVk0gbG9naWMgZm9yIGRpcnR5IHBhZ2UgbG9nZ2luZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyBhbmQgZ3Vlc3QgZXhlY3V0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fYXJtX3ZjcHVfYWxsb2NfaGRic3MmIzM0OywKICAgICYjMzQ7a3ZtX2FybV92Y3B1X2ZyZWVfaGRic3MmIzM0OywKICAgICYjMzQ7a3ZtX2ZsdXNoX2hkYnNzX2J1ZmZlciYjMzQ7LAogICAgJiMzNDtrdm1faGFuZGxlX2hkYnNzX2ZhdWx0JiMzNDssCiAgICAmIzM0O2t2bV9hcm1fZW5hYmxlX2hkYnNzX2dsb2JhbCYjMzQ7LAogICAgJiMzNDtrdm1fYXJtX2Rpc2FibGVfaGRic3NfZ2xvYmFsJiMzNDssCiAgICAmIzM0O2t2bV9hcm1faGRic3Nfb25fZGlydHlfbG9nZ2luZ19jaGFuZ2UmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfc3luY19kaXJ0eV9sb2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBIYXJkd2FyZSBEaXJ0eSBzdGF0ZSB0cmFja2luZyBzdHJ1Y3R1cmUgKEhEQlNTKSBzdXBwb3J0IGZvciBLVk0gb24gYXJtNjQuIEl0IG1vZGlmaWVzIGNvcmUgS1ZNIGxvZ2ljIGZvciBkaXJ0eSBwYWdlIGxvZ2dpbmcgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgYW5kIGd1ZXN0IGV4ZWN1dGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjEyOjA0LjAxMDA4Nzc5OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDY2NzMyNjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcm1fdmNwdV9hbGxvY19oZGJzc1wiLFxuICAgIFwia3ZtX2FybV92Y3B1X2ZyZWVfaGRic3NcIixcbiAgICBcImt2bV9mbHVzaF9oZGJzc19idWZmZXJcIixcbiAgICBcImt2bV9oYW5kbGVfaGRic3NfZmF1bHRcIixcbiAgICBcImt2bV9hcm1fZW5hYmxlX2hkYnNzX2dsb2JhbFwiLFxuICAgIFwia3ZtX2FybV9kaXNhYmxlX2hkYnNzX2dsb2JhbFwiLFxuICAgIFwia3ZtX2FybV9oZGJzc19vbl9kaXJ0eV9sb2dnaW5nX2NoYW5nZVwiLFxuICAgIFwia3ZtX2FyY2hfc3luY19kaXJ0eV9sb2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIEhhcmR3YXJlIERpcnR5IHN0YXRlIHRyYWNraW5nIHN0cnVjdHVyZSAoSERCU1MpIHN1cHBvcnQgZm9yIEtWTSBvbiBhcm02NC4gSXQgbW9kaWZpZXMgY29yZSBLVk0gbG9naWMgZm9yIGRpcnR5IHBhZ2UgbG9nZ2luZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyBhbmQgZ3Vlc3QgZXhlY3V0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjoxMjowNC4wMTAwOTI4NzhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMzY1MjM4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDBiYmEzYjkxNWExZGJjODdkMjkyMDQyNzViMTU1NDVjNzFjYTJmZGNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMTAgMDY6MTI6MDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaFxcbmluZGV4IGE1Nzg3MGZhOTZkYjViLi5iZGZhYjA4NmZkOTQ1MyAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaFxcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oXFxuQEAgLTg2Myw2ICs4NjMsMTEgQEAgc3RhdGljIGlubGluZSBib29sIHN5c3RlbV9zdXBwb3J0c19oYWZ0KHZvaWQpXFxuIFxcdHJldHVybiBjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBRlQpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wgc3lzdGVtX3N1cHBvcnRzX2hkYnNzKHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX0hEQlNTKTtcXG4rfVxcbitcXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHN5c3RlbV9zdXBwb3J0c19tcGFtKHZvaWQpXFxuIHtcXG4gXFx0cmV0dXJuIGFsdGVybmF0aXZlX2hhc19jYXBfdW5saWtlbHkoQVJNNjRfTVBBTSk7XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZXNyLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2Vzci5oXFxuaW5kZXggODFjMTczMjBhNTg4ZDkuLjJlNmI2NzliNTkwODA4IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZXNyLmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2Vzci5oXFxuQEAgLTQzNyw2ICs0MzcsMTEgQEBcXG4gI2lmbmRlZiBfX0FTU0VNQkxFUl9fXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vdHlwZXMuaFxcdTAwM2VcXG4gXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBlc3JfaXNzMl9pc19oZGJzc2YodW5zaWduZWQgbG9uZyBlc3IpXFxuK3tcXG4rXFx0cmV0dXJuIEVTUl9FTHhfSVNTMihlc3IpIFxcdTAwMjYgRVNSX0VMeF9IREJTU0Y7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBlc3JfYnJrX2NvbW1lbnQodW5zaWduZWQgbG9uZyBlc3IpXFxuIHtcXG4gXFx0cmV0dXJuIGVzciBcXHUwMDI2IEVTUl9FTHhfQlJLNjRfSVNTX0NPTU1FTlRfTUFTSztcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZGlydHlfYml0LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9kaXJ0eV9iaXQuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmE0Y2RhOGNkYWIyNDcyXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2RpcnR5X2JpdC5oXFxuQEAgLTAsMCArMSwyOSBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXFxuKy8qXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBBUk0gTHRkLlxcbisgKiBBdXRob3I6IExlb25hcmRvIEJyYXMgXFx1MDAzY2xlby5icmFzQGFybS5jb21cXHUwMDNlXFxuKyAqL1xcbitcXG4rI2lmbmRlZiBfX0FSTTY0X0tWTV9ESVJUWV9CSVRfSF9fXFxuKyNkZWZpbmUgX19BUk02NF9LVk1fRElSVFlfQklUX0hfX1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fcGd0YWJsZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL3N5c3JlZy5oXFx1MDAzZVxcbitcXG4rLyogSERCU1MgZW50cnkgZmllbGQgZGVmaW5pdGlvbnMgKi9cXG4rI2RlZmluZSBIREJTU19FTlRSWV9WQUxJRFxcdEJJVCgwKVxcbisjZGVmaW5lIEhEQlNTX0VOVFJZX1RUV0xfU0hJRlQgKDEpXFxuKyNkZWZpbmUgSERCU1NfRU5UUllfVFRXTF9NQVNLIChHRU5NQVNLKDMsIDEpKVxcbisjZGVmaW5lIEhEQlNTX0VOVFJZX1RUV0woeCkgXFxcXFxcbitcXHQoKCh4KSBcXHUwMDNjXFx1MDAzYyBIREJTU19FTlRSWV9UVFdMX1NISUZUKSBcXHUwMDI2IEhEQlNTX0VOVFJZX1RUV0xfTUFTSylcXG4rI2RlZmluZSBIREJTU19FTlRSWV9UVFdMX1JFU1YgSERCU1NfRU5UUllfVFRXTCgtNClcXG4rI2RlZmluZSBIREJTU19FTlRSWV9JUEFcXHRHRU5NQVNLX1VMTCg1NSwgMTIpXFxuK1xcbitpbnQga3ZtX2FybV92Y3B1X2FsbG9jX2hkYnNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IG9yZGVyKTtcXG4rdm9pZCBrdm1fYXJtX3ZjcHVfZnJlZV9oZGJzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbit2b2lkIGt2bV9mbHVzaF9oZGJzc19idWZmZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4raW50IGt2bV9oYW5kbGVfaGRic3NfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4rdm9pZCBrdm1fYXJtX2hkYnNzX29uX2RpcnR5X2xvZ2dpbmdfY2hhbmdlKHN0cnVjdCBrdm0gKmt2bSwgaW50IG5yX21lbXNsb3RzX2xvZ2dpbmcpO1xcbit2b2lkIGt2bV9hcm1fZGlzYWJsZV9oZGJzc19nbG9iYWwoc3RydWN0IGt2bSAqa3ZtKTtcXG4rXFxuKyNlbmRpZiAvKiBfX0FSTTY0X0tWTV9ESVJUWV9CSVRfSF9fICovXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbmluZGV4IGJhZTJjNGY5MmVmNWMwLi5jZWNmYjg4NGE2NGZhNyAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5AQCAtNTUsNiArNTUsNyBAQFxcbiAjZGVmaW5lIEtWTV9SRVFfR1VFU1RfSFlQX0lSUV9QRU5ESU5HXFx0S1ZNX0FSQ0hfUkVRKDkpXFxuICNkZWZpbmUgS1ZNX1JFUV9NQVBfTDFfVk5DUl9FTDJcXHRcXHRLVk1fQVJDSF9SRVEoMTApXFxuICNkZWZpbmUgS1ZNX1JFUV9WR0lDX1BST0NFU1NfVVBEQVRFXFx0S1ZNX0FSQ0hfUkVRKDExKVxcbisjZGVmaW5lIEtWTV9SRVFfRkxVU0hfSERCU1NcXHRcXHRcXHRLVk1fQVJDSF9SRVEoMTIpXFxuIFxcbiAjZGVmaW5lIEtWTV9ESVJUWV9MT0dfTUFOVUFMX0NBUFMgICAoS1ZNX0RJUlRZX0xPR19NQU5VQUxfUFJPVEVDVF9FTkFCTEUgfCBcXFxcXFxuIFxcdFxcdFxcdFxcdCAgICAgS1ZNX0RJUlRZX0xPR19JTklUSUFMTFlfU0VUKVxcbkBAIC00MjAsNiArNDIxLDEwIEBAIHN0cnVjdCBrdm1fYXJjaCB7XFxuIFxcdCAqL1xcbiBcXHRzdHJ1Y3Qga3ZtX3Byb3RlY3RlZF92bSBwa3ZtO1xcbiBcXG4rXFx0LyogSERCU1M6IHBlci1WTSBkaXJ0eSB0cmFja2luZyBzdGF0ZSAqL1xcbitcXHRib29sIGVuYWJsZV9oZGJzcztcXG4rXFx0dW5zaWduZWQgaW50IGhkYnNzX29yZGVyO1xcbitcXG4gI2lmZGVmIENPTkZJR19QVERVTVBfU1RBR0UyX0RFQlVHRlNcXG4gXFx0LyogTmVzdGVkIHZpcnR1YWxpemF0aW9uIGluZm8gKi9cXG4gXFx0c3RydWN0IGRlbnRyeSAqZGVidWdmc19udl9kZW50cnk7XFxuQEAgLTgzOCw2ICs4NDMsMTIgQEAgc3RydWN0IHZjcHVfcmVzZXRfc3RhdGUge1xcbiBcXHRib29sXFx0XFx0cmVzZXQ7XFxuIH07XFxuIFxcbitzdHJ1Y3QgdmNwdV9oZGJzc19zdGF0ZSB7XFxuK1xcdHBoeXNfYWRkcl90IGJhc2VfcGh5czsgICAvKiBmb3IgbWVtb3J5IGZyZWUgKi9cXG4rXFx0dTY0IGhkYnNzYnJfZWwyOyAgICAgICAgIC8qIGxvYWQgZGlyZWN0bHkgKi9cXG4rXFx0dTY0IGhkYnNzcHJvZF9lbDI7ICAgICAgIC8qIHNhdmUgZGlyZWN0bHkgKi9cXG4rfTtcXG4rXFxuIHN0cnVjdCB2bmNyX3RsYjtcXG4gXFxuIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcXG5AQCAtOTQ1LDYgKzk1Niw5IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcXG4gXFxuIFxcdC8qIEh5cC1yZWFkYWJsZSBjb3B5IG9mIGt2bV92Y3B1OjpwaWQgKi9cXG4gXFx0cGlkX3QgcGlkO1xcbitcXG4rXFx0LyogSERCU1MgcmVnaXN0ZXJzIGluZm8gKi9cXG4rXFx0c3RydWN0IHZjcHVfaGRic3Nfc3RhdGUgaGRic3M7XFxuIH07XFxuIFxcbiAvKlxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmhcXG5pbmRleCA0MWE4Njg3OTM4ZWI2Yi4uNWUwZmFjNGJmYTUzNjkgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGd0YWJsZS5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGd0YWJsZS5oXFxuQEAgLTkzLDYgKzkzLDggQEAgdHlwZWRlZiB1NjQga3ZtX3B0ZV90O1xcbiBcXG4gI2RlZmluZSBLVk1fUFRFX0xFQUZfQVRUUl9ISV9TMl9YTlxcdEdFTk1BU0soNTQsIDUzKVxcbiBcXG4rI2RlZmluZSBLVk1fUFRFX0xFQUZfQVRUUl9ISV9TMl9EQk1cXHRCSVQoNTEpXFxuK1xcbiAjZGVmaW5lIEtWTV9QVEVfTEVBRl9BVFRSX0hJX1MxX0dQXFx0QklUKDUwKVxcbiBcXG4gI2RlZmluZSBLVk1fUFRFX0xFQUZfQVRUUl9TMl9QRVJNU1xcdChLVk1fUFRFX0xFQUZfQVRUUl9MT19TMl9TMkFQX1IgfCBcXFxcXFxuQEAgLTI0OSwxMCArMjUxLDEyIEBAIHN0cnVjdCBrdm1fcGd0YWJsZV9tbV9vcHMge1xcbiAgKiBlbnVtIGt2bV9wZ3RhYmxlX3N0YWdlMl9mbGFncyAtIFN0YWdlLTIgcGFnZS10YWJsZSBmbGFncy5cXG4gICogQEtWTV9QR1RBQkxFX1MyX0lETUFQOlxcdE9ubHkgdXNlIGlkZW50aXR5IG1hcHBpbmdzLlxcbiAgKiBAS1ZNX1BHVEFCTEVfUzJfQVNfUzE6XFx0RmluYWwgbWVtb3J5IGF0dHJpYnV0ZXMgYXJlIHRoYXQgb2YgU3RhZ2UtMS5cXG4rICogQEtWTV9QR1RBQkxFX1MyX0RCTTpcXHRIYXJkd2FyZS1tYW5hZ2VkIERCTSBmb3Igd3JpdGFibGUgcGFnZXMuXFxuICAqL1xcbiBlbnVtIGt2bV9wZ3RhYmxlX3N0YWdlMl9mbGFncyB7XFxuIFxcdEtWTV9QR1RBQkxFX1MyX0lETUFQXFx0XFx0XFx0PSBCSVQoMCksXFxuIFxcdEtWTV9QR1RBQkxFX1MyX0FTX1MxXFx0XFx0XFx0PSBCSVQoMSksXFxuK1xcdEtWTV9QR1RBQkxFX1MyX0RCTVxcdFxcdFxcdD0gQklUKDIpLFxcbiB9O1xcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3lzcmVnLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N5c3JlZy5oXFxuaW5kZXggN2FhMDhkNTlkNDk0NDguLjEzNTRhNThjMzMxNjdiIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3lzcmVnLmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N5c3JlZy5oXFxuQEAgLTEwMzksNiArMTAzOSwxNyBAQFxcbiBcXG4gI2RlZmluZSBHQ1NfQ0FQKHgpXFx0KCgoKHVuc2lnbmVkIGxvbmcpeCkgXFx1MDAyNiBHQ1NfQ0FQX0FERFJfTUFTSykgfCBcXFxcXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBHQ1NfQ0FQX1ZBTElEX1RPS0VOKVxcbitcXG4rLypcXG4rICogRGVmaW5pdGlvbnMgZm9yIHRoZSBIREJTUyBmZWF0dXJlXFxuKyAqL1xcbisjZGVmaW5lIEhEQlNTX01BWF9PUkRFUlxcdFxcdEhEQlNTQlJfRUwyX1NaXzJNQlxcbitcXG4rI2RlZmluZSBIREJTU0JSX0VMMihiYWRkciwgc3opXFx0KCgoYmFkZHIpIFxcdTAwMjYgSERCU1NCUl9FTDJfQkFERFJfTUFTSykgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdCBGSUVMRF9QUkVQKEhEQlNTQlJfRUwyX1NaX01BU0ssIHN6KSlcXG4rXFxuKyNkZWZpbmUgSERCU1NQUk9EX0lEWChwcm9kKVxcdEZJRUxEX0dFVChIREJTU1BST0RfRUwyX0lOREVYX01BU0ssIHByb2QpXFxuK1xcbiAvKlxcbiAgKiBEZWZpbml0aW9ucyBmb3IgR0lDdjUgaW5zdHJ1Y3Rpb25zXFxuICAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmNcXG5pbmRleCA5YTIyZGYwYzUxMjBmMy4uYWEzMjdlZWJhZjFjYTggMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jXFxuKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jXFxuQEAgLTIxMzEsNiArMjEzMSwxMSBAQCBzdGF0aWMgYm9vbCBodmhlX3Bvc3NpYmxlKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSxcXG4gXFx0cmV0dXJuIGFybTY0X3Rlc3Rfc3dfZmVhdHVyZV9vdmVycmlkZShBUk02NF9TV19GRUFUVVJFX09WRVJSSURFX0hWSEUpO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBoYXNfdmhlX2hkYnNzKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSwgaW50IGNvcGUpXFxuK3tcXG4rXFx0cmV0dXJuIGlzX2tlcm5lbF9pbl9oeXBfbW9kZSgpIFxcdTAwMjZcXHUwMDI2IGhhc19jcHVpZF9mZWF0dXJlKGVudHJ5LCBjb3BlKTtcXG4rfVxcbitcXG4gYm9vbCBjcHVfc3VwcG9ydHNfYmJtbDJfbm9hYm9ydCh2b2lkKVxcbiB7XFxuIFxcdC8qXFxuQEAgLTI3ODEsNiArMjc4NiwxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgYXJtNjRfZmVhdHVyZXNbXSA9IHtcXG4gXFx0XFx0QVJNNjRfQ1BVSURfRklFTERTKElEX0FBNjRNTUZSMV9FTDEsIEhBRkRCUywgSEFGVClcXG4gXFx0fSxcXG4gI2VuZGlmXFxuK1xcdHtcXG4rXFx0XFx0LmRlc2MgPSBcXFwiSGFyZHdhcmUgRGlydHkgc3RhdGUgdHJhY2tpbmcgc3RydWN0dXJlIChIREJTUylcXFwiLFxcbitcXHRcXHQudHlwZSA9IEFSTTY0X0NQVUNBUF9TWVNURU1fRkVBVFVSRSxcXG4rXFx0XFx0LmNhcGFiaWxpdHkgPSBBUk02NF9IQVNfSERCU1MsXFxuK1xcdFxcdC5tYXRjaGVzID0gaGFzX3ZoZV9oZGJzcyxcXG4rXFx0XFx0QVJNNjRfQ1BVSURfRklFTERTKElEX0FBNjRNTUZSMV9FTDEsIEhBRkRCUywgSERCU1MpXFxuK1xcdH0sXFxuIFxcdHtcXG4gXFx0XFx0LmRlc2MgPSBcXFwiQ1JDMzIgaW5zdHJ1Y3Rpb25zXFxcIixcXG4gXFx0XFx0LmNhcGFiaWxpdHkgPSBBUk02NF9IQVNfQ1JDMzIsXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlIGIvYXJjaC9hcm02NC9rdm0vTWFrZWZpbGVcXG5pbmRleCA1OTYxMmQyZjI3N2MxZC4uZWMyNzQ5YWY2NGZhNGMgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vTWFrZWZpbGVcXG4rKysgYi9hcmNoL2FybTY0L2t2bS9NYWtlZmlsZVxcbkBAIC0xOCw2ICsxOCw3IEBAIGt2bS15ICs9IGFybS5vIG1tdS5vIG1taW8ubyBwc2NpLm8gaHlwZXJjYWxscy5vIHB2dGltZS5vIFxcXFxcXG4gXFx0IGd1ZXN0Lm8gZGVidWcubyByZXNldC5vIHN5c19yZWdzLm8gc3RhY2t0cmFjZS5vIFxcXFxcXG4gXFx0IHZnaWMtc3lzLXJlZy12My5vIGZwc2ltZC5vIHBrdm0ubyBcXFxcXFxuIFxcdCBhcmNoX3RpbWVyLm8gdHJuZy5vIHZtaWQubyBlbXVsYXRlLW5lc3RlZC5vIG5lc3RlZC5vIGF0Lm8gXFxcXFxcbitcXHQgZGlydHlfYml0Lm8gXFxcXFxcbiBcXHQgdmdpYy92Z2ljLm8gdmdpYy92Z2ljLWluaXQubyBcXFxcXFxuIFxcdCB2Z2ljL3ZnaWMtaXJxZmQubyB2Z2ljL3ZnaWMtdjIubyBcXFxcXFxuIFxcdCB2Z2ljL3ZnaWMtdjMubyB2Z2ljL3ZnaWMtdjQubyBcXFxcXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2FybS5jIGIvYXJjaC9hcm02NC9rdm0vYXJtLmNcXG5pbmRleCA1MGFkZmZmNzViZTgyZS4uNTM2ZDk0Nzk5YmE4ZjkgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vYXJtLmNcXG4rKysgYi9hcmNoL2FybTY0L2t2bS9hcm0uY1xcbkBAIC0zOCw2ICszOCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX2FzbS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9lbXVsYXRlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX2h5cC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9kaXJ0eV9iaXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fbW11LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX25lc3RlZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9wa3ZtLmhcXHUwMDNlXFxuQEAgLTMxNiw2ICszMTcsMTQgQEAgdm9pZCBrdm1fYXJjaF9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSlcXG4gXFx0aWYgKGlzX3Byb3RlY3RlZF9rdm1fZW5hYmxlZCgpKVxcbiBcXHRcXHRwa3ZtX2Rlc3Ryb3lfaHlwX3ZtKGt2bSk7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBVc2Vyc3BhY2UgbWF5IGRlc3Ryb3kgdGhlIFZNIHdpdGhvdXQgZGlzYWJsaW5nIGRpcnR5IGxvZ2dpbmcsXFxuK1xcdCAqIHNvIHRoZSBhdXRvLWRpc2FibGUgcGF0aCBpcyBuZXZlciByZWFjaGVkLiBGb3JjZSBkaXNhYmxlIEhEQlNTXFxuK1xcdCAqIGhlcmUgdG8gZW5zdXJlIHZDUFUgYnVmZmVycyBhcmUgZnJlZWQgYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtzLlxcbitcXHQgKi9cXG4rXFx0aWYgKGt2bS1cXHUwMDNlYXJjaC5lbmFibGVfaGRic3MpXFxuK1xcdFxcdGt2bV9hcm1fZGlzYWJsZV9oZGJzc19nbG9iYWwoa3ZtKTtcXG4rXFxuIFxcdGt2bV91bmluaXRfc3RhZ2UyX21tdShrdm0pO1xcbiBcXHRrdm1fZGVzdHJveV9tcGlkcl9kYXRhKGt2bSk7XFxuIFxcbkBAIC01NjUsNiArNTc0LDEyIEBAIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGt2bV92Z2ljX3ZjcHVfZGVzdHJveSh2Y3B1KTtcXG4gXFxuK1xcdGlmICh2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guZW5hYmxlX2hkYnNzKSB7XFxuK1xcdFxcdGVyciA9IGt2bV9hcm1fdmNwdV9hbGxvY19oZGJzcyh2Y3B1LCB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guaGRic3Nfb3JkZXIpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRrdm1fdmdpY192Y3B1X2Rlc3Ryb3kodmNwdSk7XFxuK1xcdH1cXG4rXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuQEAgLTc0OCw2ICs3NjMsOSBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0a3ZtX3ZjcHVfcHV0X2h3X21tdSh2Y3B1KTtcXG4gXFx0a3ZtX2FybV92bWlkX2NsZWFyX2FjdGl2ZSgpO1xcbiBcXG4rXFx0aWYgKHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5lbmFibGVfaGRic3MpXFxuK1xcdFxcdGt2bV9mbHVzaF9oZGJzc19idWZmZXIodmNwdSk7XFxuK1xcbiBcXHR2Y3B1X2NsZWFyX29uX3Vuc3VwcG9ydGVkX2NwdSh2Y3B1KTtcXG4gXFx0dmNwdS1cXHUwMDNlY3B1ID0gLTE7XFxuIH1cXG5AQCAtMTE1MCw2ICsxMTY4LDkgQEAgc3RhdGljIGludCBjaGVja192Y3B1X3JlcXVlc3RzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0aWYgKGt2bV9kaXJ0eV9yaW5nX2NoZWNrX3JlcXVlc3QodmNwdSkpXFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbiBcXG4rXFx0XFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfRkxVU0hfSERCU1MsIHZjcHUpKVxcbitcXHRcXHRcXHRrdm1fZmx1c2hfaGRic3NfYnVmZmVyKHZjcHUpO1xcbitcXG4gXFx0XFx0Y2hlY2tfbmVzdGVkX3ZjcHVfcmVxdWVzdHModmNwdSk7XFxuIFxcdH1cXG4gXFxuQEAgLTE5NjQsNyArMTk4NSwxNSBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCxcXG4gXFxuIHZvaWQga3ZtX2FyY2hfc3luY19kaXJ0eV9sb2coc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90KVxcbiB7XFxuK1xcdC8qXFxuK1xcdCAqIEZsdXNoIGFsbCBDUFVzJyBkaXJ0eSBsb2cgYnVmZmVycyB0byB0aGUgZGlydHlfYml0bWFwLiAgQ2FsbGVkXFxuK1xcdCAqIGJlZm9yZSByZXBvcnRpbmcgZGlydHlfYml0bWFwIHRvIHVzZXJzcGFjZS4gU2VuZCBhIHJlcXVlc3Qgd2l0aFxcbitcXHQgKiBLVk1fUkVRVUVTVF9XQUlUIHRvIGZsdXNoIGJ1ZmZlciBzeW5jaHJvbm91c2x5LlxcbitcXHQgKi9cXG4rXFx0aWYgKCFrdm0tXFx1MDAzZWFyY2guZW5hYmxlX2hkYnNzKVxcbitcXHRcXHRyZXR1cm47XFxuIFxcbitcXHRrdm1fbWFrZV9hbGxfY3B1c19yZXF1ZXN0KGt2bSwgS1ZNX1JFUV9GTFVTSF9IREJTUyB8IEtWTV9SRVFVRVNUX1dBSVQpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9zZXRfZGV2aWNlX2FkZHIoc3RydWN0IGt2bSAqa3ZtLFxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYyBiL2FyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYzViZjg2NmMyM2VmMmJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmNcXG5AQCAtMCwwICsxLDIxOSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKy8qXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBBUk0gTHRkLlxcbisgKiBBdXRob3I6IExlb25hcmRvIEJyYXMgXFx1MDAzY2xlby5icmFzQGFybS5jb21cXHUwMDNlXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fZGlydHlfYml0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX21tdS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL3N5c3JlZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZ2ZwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rY29uZmlnLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbS5oXFx1MDAzZVxcbitcXG4raW50IGt2bV9hcm1fdmNwdV9hbGxvY19oZGJzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBvcmRlcilcXG4re1xcbitcXHRzdHJ1Y3QgcGFnZSAqaGRic3NfcGcgPSBOVUxMO1xcbitcXG4rXFx0aWYgKHZjcHUtXFx1MDAzZWFyY2guaGRic3MuaGRic3Nicl9lbDIgfHwgIXN5c3RlbV9zdXBwb3J0c19oZGJzcygpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChvcmRlciBcXHUwMDNlIEhEQlNTX01BWF9PUkRFUilcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRoZGJzc19wZyA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUxfQUNDT1VOVCwgb3JkZXIpO1xcbitcXHRpZiAoIWhkYnNzX3BnKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHZjcHUtXFx1MDAzZWFyY2guaGRic3MgPSAoc3RydWN0IHZjcHVfaGRic3Nfc3RhdGUpIHtcXG4rXFx0XFx0LmJhc2VfcGh5cyA9IHBhZ2VfdG9fcGh5cyhoZGJzc19wZyksXFxuK1xcdFxcdC5oZGJzc2JyX2VsMiA9IEhEQlNTQlJfRUwyKHBhZ2VfdG9fcGh5cyhoZGJzc19wZyksIG9yZGVyKSxcXG4rXFx0XFx0LmhkYnNzcHJvZF9lbDIgPSAwLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3ZvaWQga3ZtX2FybV92Y3B1X2ZyZWVfaGRic3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit7XFxuK1xcdHN0cnVjdCBwYWdlICpoZGJzc19wZztcXG4rXFxuK1xcdGlmICghdmNwdS1cXHUwMDNlYXJjaC5oZGJzcy5oZGJzc2JyX2VsMikge1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGhkYnNzX3BnID0gcGh5c190b19wYWdlKHZjcHUtXFx1MDAzZWFyY2guaGRic3MuYmFzZV9waHlzKTtcXG4rXFx0aWYgKGhkYnNzX3BnKVxcbitcXHRcXHRfX2ZyZWVfcGFnZXMoaGRic3NfcGcsXFxuK1xcdFxcdCAgICAgRklFTERfR0VUKEhEQlNTQlJfRUwyX1NaX01BU0ssXFxuK1xcdFxcdFxcdCAgICAgICB2Y3B1LVxcdTAwM2VhcmNoLmhkYnNzLmhkYnNzYnJfZWwyKSk7XFxuK1xcbitcXHR2Y3B1LVxcdTAwM2VhcmNoLmhkYnNzLmhkYnNzYnJfZWwyID0gMDtcXG4rfVxcbitcXG4rdm9pZCBrdm1fZmx1c2hfaGRic3NfYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4re1xcbitcXHRpbnQgaWR4LCBjdXJyX2lkeDtcXG4rXFx0dTY0ICpoZGJzc19idWY7XFxuK1xcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXFx1MDAzZWt2bTtcXG4rXFxuK1xcdGlmICgha3ZtLVxcdTAwM2VhcmNoLmVuYWJsZV9oZGJzcylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Y3Vycl9pZHggPSBIREJTU1BST0RfSURYKHJlYWRfc3lzcmVnX3MoU1lTX0hEQlNTUFJPRF9FTDIpKTtcXG4rXFxuK1xcdC8qIERvIG5vdGhpbmcgaWYgSERCU1MgYnVmZmVyIGlzIGVtcHR5IG9yIGJyX2VsMiBpcyBOVUxMICovXFxuK1xcdGlmIChjdXJyX2lkeCA9PSAwIHx8IHZjcHUtXFx1MDAzZWFyY2guaGRic3MuaGRic3Nicl9lbDIgPT0gMClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aGRic3NfYnVmID0gcGFnZV9hZGRyZXNzKHBoeXNfdG9fcGFnZSh2Y3B1LVxcdTAwM2VhcmNoLmhkYnNzLmJhc2VfcGh5cykpO1xcbitcXHRpZiAoIWhkYnNzX2J1ZilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Z3VhcmQod3JpdGVfbG9ja19pcnFzYXZlKShcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuK1xcdGZvciAoaWR4ID0gMDsgaWR4IFxcdTAwM2MgY3Vycl9pZHg7IGlkeCsrKSB7XFxuK1xcdFxcdHU2NCBncGE7XFxuK1xcbitcXHRcXHRncGEgPSBoZGJzc19idWZbaWR4XTtcXG4rXFx0XFx0aWYgKCEoZ3BhIFxcdTAwMjYgSERCU1NfRU5UUllfVkFMSUQpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGdwYSBcXHUwMDI2PSBIREJTU19FTlRSWV9JUEE7XFxuK1xcdFxcdGt2bV92Y3B1X21hcmtfcGFnZV9kaXJ0eSh2Y3B1LCBncGEgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIHJlc2V0IEhEQlNTIGluZGV4ICovXFxuK1xcdHdyaXRlX3N5c3JlZ19zKDAsIFNZU19IREJTU1BST0RfRUwyKTtcXG4rXFx0dmNwdS1cXHUwMDNlYXJjaC5oZGJzcy5oZGJzc3Byb2RfZWwyID0gMDtcXG4rXFx0aXNiKCk7XFxuK31cXG4rXFxuK2ludCBrdm1faGFuZGxlX2hkYnNzX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4re1xcbitcXHR1NjQgcHJvZDtcXG4rXFx0dTY0IGZzYztcXG4rXFxuK1xcdHByb2QgPSByZWFkX3N5c3JlZ19zKFNZU19IREJTU1BST0RfRUwyKTtcXG4rXFx0ZnNjID0gRklFTERfR0VUKEhEQlNTUFJPRF9FTDJfRlNDX01BU0ssIHByb2QpO1xcbitcXG4rXFx0c3dpdGNoIChmc2MpIHtcXG4rXFx0Y2FzZSBIREJTU1BST0RfRUwyX0ZTQ19PSzpcXG4rXFx0XFx0LyogQnVmZmVyIGZ1bGwsIHNldCByZXF1ZXN0IHRvIGZsdXNoIG9uIG5leHQgdmNwdSBleGl0ICovXFxuK1xcdFxcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9GTFVTSF9IREJTUywgdmNwdSk7XFxuK1xcdFxcdHJldHVybiAxO1xcbitcXHRjYXNlIEhEQlNTUFJPRF9FTDJfRlNDX0V4dGVybmFsQWJvcnQ6XFxuK1xcdGNhc2UgSERCU1NQUk9EX0VMMl9GU0NfR1BGOlxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0LyogVW5rbm93biBmYXVsdC4gKi9cXG4rXFx0XFx0V0FSTl9PTkNFKDEsXFxuK1xcdFxcdFxcdCAgXFxcIlVuZXhwZWN0ZWQgSERCU1MgZmF1bHQgdHlwZSwgRlNDOiAweCVsbHggKHByb2Q9MHglbGx4LCB2Y3B1PSVkKVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICBmc2MsIHByb2QsIHZjcHUtXFx1MDAzZXZjcHVfaWQpO1xcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdW5zaWduZWQgaW50IGhkYnNzX2F1dG9fc2VsZWN0X29yZGVyKHN0cnVjdCBrdm0gKmt2bSlcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIG5wYWdlcyA9IDA7XFxuK1xcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3Q7XFxuK1xcdGludCBia3Q7XFxuK1xcbitcXHRrdm1fZm9yX2VhY2hfbWVtc2xvdChtZW1zbG90LCBia3QsIGt2bV9tZW1zbG90cyhrdm0pKVxcbitcXHRcXHRucGFnZXMgKz0gbWVtc2xvdC1cXHUwMDNlbnBhZ2VzO1xcbitcXG4rXFx0aWYgKG5wYWdlcyBcXHUwMDNjPSAxNjM4NClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGVsc2UgaWYgKG5wYWdlcyBcXHUwMDNjPSAyNjIxNDQpXFxuK1xcdFxcdHJldHVybiAzO1xcbitcXHRlbHNlIGlmIChucGFnZXMgXFx1MDAzYz0gNDE5NDMwNClcXG4rXFx0XFx0cmV0dXJuIDY7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cmV0dXJuIDk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIEVuYWJsZSBIREJTUyBmb3IgYWxsIHZDUFVzIGluIHRoZSBWTS5cXG4rICpcXG4rICogQ2FsbGVkIGZyb20ga3ZtX2FybV9oZGJzc19vbl9kaXJ0eV9sb2dnaW5nX2NoYW5nZSgpIHdoaWNoIGlzIGludm9rZWRcXG4rICogYnkga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oKSB1bmRlciBrdm0tXFx1MDAzZXNsb3RzX2xvY2suXFxuKyAqXFxuKyAqIElmIGJ1ZmZlciBhbGxvY2F0aW9uIGZhaWxzLCBIREJTUyByZW1haW5zIGRpc2FibGVkIGFuZCBkaXJ0eSB0cmFja2luZ1xcbisgKiBmYWxscyBiYWNrIHRvIHRoZSB0cmFkaXRpb25hbCBzb2Z0d2FyZS1iYXNlZCBhcHByb2FjaCAoUFRFIHdyaXRlLXByb3RlY3RcXG4rICogKyBzb2Z0d2FyZSBkaXJ0eSBtYXJraW5nKS4gVGhpcyBkb2VzIG5vdCBhZmZlY3QgY29ycmVjdG5lc3M7IGRpcnR5XFxuKyAqIGxvZ2dpbmcgcmVtYWlucyBmdW5jdGlvbmFsIHdpdGhvdXQgSERCU1MuXFxuKyAqL1xcbitzdGF0aWMgaW50IGt2bV9hcm1fZW5hYmxlX2hkYnNzX2dsb2JhbChzdHJ1Y3Qga3ZtICprdm0pXFxuK3tcXG4rXFx0aW50IGVycjtcXG4rXFx0dW5zaWduZWQgbG9uZyBpO1xcbitcXHR1bnNpZ25lZCBpbnQgb3JkZXI7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG4rXFxuK1xcdGlmICghc3lzdGVtX3N1cHBvcnRzX2hkYnNzKCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKGt2bS1cXHUwMDNlZGlydHlfcmluZ19zaXplKSAvKiBEb24ndCBzdXBwb3J0IEhEQlNTIGluIGRpcnR5IHJpbmcgbW9kZSAqL1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChrdm0tXFx1MDAzZWFyY2guZW5hYmxlX2hkYnNzKSAvKiBBbHJlYWR5IE9uICovXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LyogVHVybiBpdCBvbiAqL1xcbitcXHRvcmRlciA9IGhkYnNzX2F1dG9fc2VsZWN0X29yZGVyKGt2bSk7XFxuK1xcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkge1xcbitcXHRcXHRlcnIgPSBrdm1fYXJtX3ZjcHVfYWxsb2NfaGRic3ModmNwdSwgb3JkZXIpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRnb3RvIGVycm9yX2FsbG9jO1xcbitcXHR9XFxuK1xcbitcXHRrdm0tXFx1MDAzZWFyY2guZW5hYmxlX2hkYnNzID0gdHJ1ZTtcXG4rXFx0a3ZtLVxcdTAwM2VhcmNoLm1tdS52dGNyIHw9IFZUQ1JfRUwyX0hEIHwgVlRDUl9FTDJfSERCU1MgfCBWVENSX0VMMl9IQTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFdlIHNob3VsZCBraWNrIHZjcHVzIG91dCBvZiBndWVzdCBtb2RlIGhlcmUgdG8gbG9hZCBuZXdcXG4rXFx0ICogdnRjciB2YWx1ZSB0byB2dGNyX2VsMiByZWdpc3RlciB3aGVuIHJlLWVudGVyIGd1ZXN0IG1vZGUuXFxuK1xcdCAqL1xcbitcXHRrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pXFxuK1xcdFxcdGt2bV92Y3B1X2tpY2sodmNwdSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycm9yX2FsbG9jOlxcbitcXHRrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pXFxuK1xcdFxcdGlmICh2Y3B1LVxcdTAwM2VhcmNoLmhkYnNzLmJhc2VfcGh5cylcXG4rXFx0XFx0XFx0a3ZtX2FybV92Y3B1X2ZyZWVfaGRic3ModmNwdSk7XFxuK1xcbitcXHRwcl93YXJuX29uY2UoXFxcImt2bTogZmFpbGVkIHRvIGFsbG9jYXRlIEhEQlNTIGJ1ZmZlcnMgKG9yZGVyPSV1KSwgXFxcIlxcbitcXHRcXHQgICAgIFxcXCJmYWxsaW5nIGJhY2sgdG8gc29mdHdhcmUgZGlydHkgdHJhY2tpbmdcXFxcblxcXCIsIG9yZGVyKTtcXG4rXFx0cmV0dXJuIC1FTk9NRU07XFxuK31cXG4rXFxuK3ZvaWQga3ZtX2FybV9kaXNhYmxlX2hkYnNzX2dsb2JhbChzdHJ1Y3Qga3ZtICprdm0pXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBpO1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuK1xcbitcXHRpZiAoIWt2bS1cXHUwMDNlYXJjaC5lbmFibGVfaGRic3MpIC8qIEFscmVhZHkgT2ZmICovXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdC8qIFR1cm4gaXQgb2ZmICovXFxuK1xcdGt2bS1cXHUwMDNlYXJjaC5tbXUudnRjciBcXHUwMDI2PSB+KFZUQ1JfRUwyX0hEIHwgVlRDUl9FTDJfSERCU1MgfCBWVENSX0VMMl9IQSk7XFxuK1xcbitcXHRrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pXFxuK1xcdFxcdGt2bV9hcm1fdmNwdV9mcmVlX2hkYnNzKHZjcHUpO1xcbitcXG4rXFx0a3ZtLVxcdTAwM2VhcmNoLmVuYWJsZV9oZGJzcyA9IGZhbHNlO1xcbit9XFxuK1xcbit2b2lkIGt2bV9hcm1faGRic3Nfb25fZGlydHlfbG9nZ2luZ19jaGFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBpbnQgbnJfbWVtc2xvdHNfbG9nZ2luZylcXG4re1xcbitcXHQvKlxcbitcXHQgKiBDYWxsZWQgZnJvbSBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbigpIHVuZGVyIGt2bS1cXHUwMDNlc2xvdHNfbG9jay5cXG4rXFx0ICogQWxsIHN0YXRlIHRyYW5zaXRpb25zIGFyZSBzZXJpYWxpemVkIGJ5IHNsb3RzX2xvY2suXFxuK1xcdCAqL1xcbitcXHRpZiAobnJfbWVtc2xvdHNfbG9nZ2luZyBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgIWt2bS1cXHUwMDNlYXJjaC5lbmFibGVfaGRic3MpXFxuK1xcdFxcdGt2bV9hcm1fZW5hYmxlX2hkYnNzX2dsb2JhbChrdm0pO1xcbitcXHRlbHNlIGlmIChucl9tZW1zbG90c19sb2dnaW5nID09IDAgXFx1MDAyNlxcdTAwMjYga3ZtLVxcdTAwM2VhcmNoLmVuYWJsZV9oZGJzcylcXG4rXFx0XFx0a3ZtX2FybV9kaXNhYmxlX2hkYnNzX2dsb2JhbChrdm0pO1xcbit9XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmMgYi9hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jXFxuaW5kZXggOTFhN2RmYWQ2Njg2NjAuLjIxZWM0NTZlY2M0MTFhIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmNcXG4rKysgYi9hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jXFxuQEAgLTczMSw5ICs3MzEsMjMgQEAgc3RhdGljIGludCBzdGFnZTJfc2V0X3Byb3RfYXR0cihzdHJ1Y3Qga3ZtX3BndGFibGUgKnBndCwgZW51bSBrdm1fcGd0YWJsZV9wcm90IHBcXG4gXFx0aWYgKHByb3QgXFx1MDAyNiBLVk1fUEdUQUJMRV9QUk9UX1IpXFxuIFxcdFxcdGF0dHIgfD0gS1ZNX1BURV9MRUFGX0FUVFJfTE9fUzJfUzJBUF9SO1xcbiBcXG4tXFx0aWYgKHByb3QgXFx1MDAyNiBLVk1fUEdUQUJMRV9QUk9UX1cpXFxuK1xcdGlmIChwcm90IFxcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9XKSB7XFxuIFxcdFxcdGF0dHIgfD0gS1ZNX1BURV9MRUFGX0FUVFJfTE9fUzJfUzJBUF9XO1xcbiBcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogU2V0IERCTSBiaXQgZm9yIHdyaXRhYmxlIG5vbi1kZXZpY2UgcGFnZXMgaWYgdGhlIHBhZ2UtdGFibGVcXG4rXFx0XFx0ICogaGFzIEtWTV9QR1RBQkxFX1MyX0RCTSBmbGFnIChzeXN0ZW0gc3VwcG9ydHMgSERCU1MpLlxcbitcXHRcXHQgKlxcbitcXHRcXHQgKiBGb3Igc3RhZ2UgMiB0cmFuc2xhdGlvbnMgdXNpbmcgSW5kaXJlY3QgcGVybWlzc2lvbnMsIGlmIHRoZVxcbitcXHRcXHQgKiBFZmZlY3RpdmUgdmFsdWUgb2YgVlRDUl9FTDIuSEQgaXMgMCwgdGhlbiBkaXJ0eSBzdGF0ZSBpc1xcbitcXHRcXHQgKiBtYW5hZ2VkIGJ5IHNvZnR3YXJlLiBIYXJkd2FyZSBvbmx5IHVwZGF0ZXMgdGhlIGRpcnR5IHN0YXRlXFxuK1xcdFxcdCAqIHdoZW4gVlRDUl9FTDIuSEQ9MSAoSERCU1MgZW5hYmxlZCkuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoKHBndC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fUEdUQUJMRV9TMl9EQk0pIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhKHByb3QgXFx1MDAyNiBLVk1fUEdUQUJMRV9QUk9UX0RFVklDRSkpXFxuK1xcdFxcdFxcdGF0dHIgfD0gS1ZNX1BURV9MRUFGX0FUVFJfSElfUzJfREJNO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAoIWt2bV9scGEyX2lzX2VuYWJsZWQoKSlcXG4gXFx0XFx0YXR0ciB8PSBGSUVMRF9QUkVQKEtWTV9QVEVfTEVBRl9BVFRSX0xPX1MyX1NILCBzaCk7XFxuIFxcbkBAIC0xMzY3LDkgKzEzODEsMjYgQEAgaW50IGt2bV9wZ3RhYmxlX3N0YWdlMl9yZWxheF9wZXJtcyhzdHJ1Y3Qga3ZtX3BndGFibGUgKnBndCwgdTY0IGFkZHIsXFxuIFxcdGlmIChwcm90IFxcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9SKVxcbiBcXHRcXHRzZXQgfD0gS1ZNX1BURV9MRUFGX0FUVFJfTE9fUzJfUzJBUF9SO1xcbiBcXG4tXFx0aWYgKHByb3QgXFx1MDAyNiBLVk1fUEdUQUJMRV9QUk9UX1cpXFxuK1xcdGlmIChwcm90IFxcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9XKSB7XFxuIFxcdFxcdHNldCB8PSBLVk1fUFRFX0xFQUZfQVRUUl9MT19TMl9TMkFQX1c7XFxuIFxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBObyBERVZJQ0UgZmlsdGVyIG5lZWRlZCBoZXJlOiByZWxheF9wZXJtcyBpcyBvbmx5IGNhbGxlZFxcbitcXHRcXHQgKiBvbiBGU0NfUEVSTSBmYXVsdHMuIERldmljZSBwYWdlcyBhbHdheXMgZ2V0IGZ1bGwgUlcgZnJvbVxcbitcXHRcXHQgKiBpbml0aWFsIG1hcHBpbmcgYW5kIGFyZSBuZXZlciB3cml0ZS1wcm90ZWN0ZWQgZHVyaW5nXFxuK1xcdFxcdCAqIG1pZ3JhdGlvbiwgc28gdGhleSBuZXZlciB0cmlnZ2VyIGEgcGVybWlzc2lvbiBmYXVsdC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChwZ3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgS1ZNX1BHVEFCTEVfUzJfREJNKVxcbitcXHRcXHRcXHRzZXQgfD0gS1ZNX1BURV9MRUFGX0FUVFJfSElfUzJfREJNO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBDbGVhciBEQk0gb24gV+KGklJPIGRvd25ncmFkZSB0byBwcmV2ZW50IGhhcmR3YXJlIGZyb21cXG4rXFx0XFx0ICogc2lsZW50bHkgdXBncmFkaW5nIFJPK0RCTSBiYWNrIHRvIFcrZGlydHksIHdoaWNoIHdvdWxkXFxuK1xcdFxcdCAqIGJ5cGFzcyBLVk0ncyB3cml0ZSB0cmFja2luZyBhbmQgY2F1c2UgZGF0YSBjb3JydXB0aW9uLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0Y2xyIHw9IEtWTV9QVEVfTEVBRl9BVFRSX0hJX1MyX0RCTTtcXG4rXFx0fVxcbitcXG4gXFx0cmV0ID0gc3RhZ2UyX3NldF94bl9hdHRyKHByb3QsIFxcdTAwMjZ4bik7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmMgYi9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jXFxuaW5kZXggYmJlOWNlYmQzZDlkNTcuLmZlNzI5NDRiZmQzZDViIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmNcXG4rKysgYi9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jXFxuQEAgLTIyLDYgKzIyLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fZW11bGF0ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9oeXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fbW11LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX2RpcnR5X2JpdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2Zwc2ltZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2RlYnVnLW1vbml0b3JzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vcHJvY2Vzc29yLmhcXHUwMDNlXFxuQEAgLTIxMyw2ICsyMTQsMTkgQEAgc3RhdGljIHZvaWQgX192Y3B1X3B1dF9kZWFjdGl2YXRlX3RyYXBzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBfX2xvYWRfaGRic3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit7XFxuK1xcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXFx1MDAzZWt2bTtcXG4rXFxuK1xcdGlmICgha3ZtLVxcdTAwM2VhcmNoLmVuYWJsZV9oZGJzcylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0d3JpdGVfc3lzcmVnX3ModmNwdS1cXHUwMDNlYXJjaC5oZGJzcy5oZGJzc2JyX2VsMiwgU1lTX0hEQlNTQlJfRUwyKTtcXG4rXFx0d3JpdGVfc3lzcmVnX3ModmNwdS1cXHUwMDNlYXJjaC5oZGJzcy5oZGJzc3Byb2RfZWwyLCBTWVNfSERCU1NQUk9EX0VMMik7XFxuK1xcbitcXHRpc2IoKTtcXG4rfVxcbitcXG4gdm9pZCBrdm1fdmNwdV9sb2FkX3ZoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0aG9zdF9kYXRhX3B0cihob3N0X2N0eHQpLVxcdTAwM2VfX2h5cF9ydW5uaW5nX3ZjcHUgPSB2Y3B1O1xcbkBAIC0yMjAsNiArMjM0LDcgQEAgdm9pZCBrdm1fdmNwdV9sb2FkX3ZoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdF9fdmNwdV9sb2FkX3N3aXRjaF9zeXNyZWdzKHZjcHUpO1xcbiBcXHRfX3ZjcHVfbG9hZF9hY3RpdmF0ZV90cmFwcyh2Y3B1KTtcXG4gXFx0X19sb2FkX3N0YWdlMih2Y3B1LVxcdTAwM2VhcmNoLmh3X21tdSk7XFxuK1xcdF9fbG9hZF9oZGJzcyh2Y3B1KTtcXG4gfVxcbiBcXG4gdm9pZCBrdm1fdmNwdV9wdXRfdmhlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vbW11LmMgYi9hcmNoL2FybTY0L2t2bS9tbXUuY1xcbmluZGV4IDZjOTQxYWFhMTBjNjM5Li40ODRmNDhkYWUwMDAzYyAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS9tbXUuY1xcbisrKyBiL2FyY2gvYXJtNjQva3ZtL21tdS5jXFxuQEAgLTE2LDYgKzE2LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9jYWNoZWZsdXNoLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX2FybS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9tbXUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fZGlydHlfYml0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX3BndGFibGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fcGt2bS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9hc20uaFxcdTAwM2VcXG5AQCAtMTAxNCw2ICsxMDE1LDkgQEAgaW50IGt2bV9pbml0X3N0YWdlMl9tbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1bnNpZ25lZCBsb25nIHRcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBvdXRfZnJlZV9wZ3RhYmxlO1xcbiBcXG4rXFx0aWYgKHN5c3RlbV9zdXBwb3J0c19oZGJzcygpKVxcbitcXHRcXHRwZ3QtXFx1MDAzZWZsYWdzIHw9IEtWTV9QR1RBQkxFX1MyX0RCTTtcXG4rXFxuIFxcdG1tdS1cXHUwMDNlcGd0ID0gcGd0O1xcbiBcXHRpZiAoaXNfcHJvdGVjdGVkX2t2bV9lbmFibGVkKCkpXFxuIFxcdFxcdHJldHVybiAwO1xcbkBAIC0xMDI3LDggKzEwMzEsMTIgQEAgaW50IGt2bV9pbml0X3N0YWdlMl9tbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1bnNpZ25lZCBsb25nIHRcXG4gXFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSlcXG4gXFx0XFx0KnBlcl9jcHVfcHRyKG1tdS1cXHUwMDNlbGFzdF92Y3B1X3JhbiwgY3B1KSA9IC0xO1xcbiBcXG4tXFx0IC8qIFRoZSBlYWdlciBwYWdlIHNwbGl0dGluZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0ICovXFxuLVxcdG1tdS1cXHUwMDNlc3BsaXRfcGFnZV9jaHVua19zaXplID0gS1ZNX0FSTV9FQUdFUl9TUExJVF9DSFVOS19TSVpFX0RFRkFVTFQ7XFxuK1xcdCAvKiBUaGUgZWFnZXIgcGFnZSBzcGxpdHRpbmcgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCBpZiBzeXN0ZW0gaGFzIG5vIEhEQlNTICovXFxuK1xcdGlmIChzeXN0ZW1fc3VwcG9ydHNfaGRic3MoKSlcXG4rXFx0XFx0bW11LVxcdTAwM2VzcGxpdF9wYWdlX2NodW5rX3NpemUgPSAyNTYgKiAxMDI0ICogUEFHRV9TSVpFO1xcbitcXHRlbHNlXFxuK1xcdFxcdG1tdS1cXHUwMDNlc3BsaXRfcGFnZV9jaHVua19zaXplID0gS1ZNX0FSTV9FQUdFUl9TUExJVF9DSFVOS19TSVpFX0RFRkFVTFQ7XFxuK1xcbiBcXHRtbXUtXFx1MDAzZXNwbGl0X3BhZ2VfY2FjaGUuZ2ZwX3plcm8gPSBfX0dGUF9aRVJPO1xcbiBcXG4gXFx0bW11LVxcdTAwM2VwZ2RfcGh5cyA9IF9fcGEocGd0LVxcdTAwM2VwZ2QpO1xcbkBAIC0yMjM0LDYgKzIyNDIsNyBAQCBpbnQga3ZtX2hhbmRsZV9ndWVzdF9zZWEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB9XFxuIFxcbiAvKipcXG4rXFxuICAqIGt2bV9oYW5kbGVfZ3Vlc3RfYWJvcnQgLSBoYW5kbGVzIGFsbCAybmQgc3RhZ2UgYWJvcnRzXFxuICAqIEB2Y3B1OlxcdHRoZSBWQ1BVIHBvaW50ZXJcXG4gICpcXG5AQCAtMjI3MSw2ICsyMjgwLDkgQEAgaW50IGt2bV9oYW5kbGVfZ3Vlc3RfYWJvcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gXFx0aXNfaWFidCA9IGt2bV92Y3B1X3RyYXBfaXNfaWFidCh2Y3B1KTtcXG4gXFxuK1xcdGlmIChlc3JfaXNzMl9pc19oZGJzc2YoZXNyKSlcXG4rXFx0XFx0cmV0dXJuIGt2bV9oYW5kbGVfaGRic3NfZmF1bHQodmNwdSk7XFxuK1xcbiBcXHRpZiAoZXNyX2ZzY19pc190cmFuc2xhdGlvbl9mYXVsdChlc3IpKSB7XFxuIFxcdFxcdC8qIEJleW9uZCBzYW5pdGlzZWQgUEFSYW5nZSAod2hpY2ggaXMgdGhlIElQQSBsaW1pdCkgKi9cXG4gXFx0XFx0aWYgKGZhdWx0X2lwYSBcXHUwMDNlPSBCSVRfVUxMKGdldF9rdm1faXBhX2xpbWl0KCkpKSB7XFxuQEAgLTI1NzYsNiArMjU4OCw5IEBAIHZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxcbiB7XFxuIFxcdGJvb2wgbG9nX2RpcnR5X3BhZ2VzID0gbmV3IFxcdTAwMjZcXHUwMDI2IG5ldy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0xPR19ESVJUWV9QQUdFUztcXG4gXFxuK1xcdGt2bV9hcm1faGRic3Nfb25fZGlydHlfbG9nZ2luZ19jaGFuZ2Uoa3ZtLFxcbitcXHRcXHRhdG9taWNfcmVhZChcXHUwMDI2a3ZtLVxcdTAwM2Vucl9tZW1zbG90c19kaXJ0eV9sb2dnaW5nKSk7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBBdCB0aGlzIHBvaW50IG1lbXNsb3QgaGFzIGJlZW4gY29tbWl0dGVkIGFuZCB0aGVyZSBpcyBhblxcbiBcXHQgKiBhbGxvY2F0ZWQgZGlydHlfYml0bWFwW10sIGRpcnR5IHBhZ2VzIHdpbGwgYmUgdHJhY2tlZCB3aGlsZSB0aGVcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vcmVzZXQuYyBiL2FyY2gvYXJtNjQva3ZtL3Jlc2V0LmNcXG5pbmRleCBiOTYzZmQ5NzVhYWNhZi4uZDgxMDRiY2JkOWZmYWQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vcmVzZXQuY1xcbisrKyBiL2FyY2gvYXJtNjQva3ZtL3Jlc2V0LmNcXG5AQCAtMjcsNiArMjcsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9hc20uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fZW11bGF0ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9tbXUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fZGlydHlfYml0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX25lc3RlZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3ZpcnQuaFxcdTAwM2VcXG4gXFxuQEAgLTE2MSw2ICsxNjIsOSBAQCB2b2lkIGt2bV9hcm1fdmNwdV9kZXN0cm95KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXZjcHUtXFx1MDAzZWFyY2guY3R4dC52bmNyX2FycmF5KTtcXG4gXFx0a2ZyZWUodmNwdS1cXHUwMDNlYXJjaC52bmNyX3RsYik7XFxuIFxcdGtmcmVlKHZjcHUtXFx1MDAzZWFyY2guY2NzaWRyKTtcXG4rXFxuK1xcdGlmICh2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guZW5hYmxlX2hkYnNzKVxcbitcXHRcXHRrdm1fYXJtX3ZjcHVfZnJlZV9oZGJzcyh2Y3B1KTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQga3ZtX3ZjcHVfcmVzZXRfc3ZlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC90b29scy9jcHVjYXBzIGIvYXJjaC9hcm02NC90b29scy9jcHVjYXBzXFxuaW5kZXggOWI4NWE4NGY2ZmQ0OTQuLmE4NzcwNmM5ZDE2MGUwIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2Fwc1xcbisrKyBiL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2Fwc1xcbkBAIC02OSw2ICs2OSw3IEBAIEhBU19WQTUyXFxuIEhBU19WSVJUX0hPU1RfRVhUTlxcbiBIQVNfV0ZYVFxcbiBIQVNfWE5YXFxuK0hBU19IREJTU1xcbiBIQUZUXFxuIEhXX0RCTVxcbiBLVk1fSFZIRVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjoxMjowNC42MjQ0OTg3NjdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2ODUyMzEzNTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcm1fdmNwdV9hbGxvY19oZGJzc1wiLFxuICAgIFwia3ZtX2FybV92Y3B1X2ZyZWVfaGRic3NcIixcbiAgICBcImt2bV9mbHVzaF9oZGJzc19idWZmZXJcIixcbiAgICBcImt2bV9oYW5kbGVfaGRic3NfZmF1bHRcIixcbiAgICBcImt2bV9hcm1fZW5hYmxlX2hkYnNzX2dsb2JhbFwiLFxuICAgIFwia3ZtX2FybV9kaXNhYmxlX2hkYnNzX2dsb2JhbFwiLFxuICAgIFwia3ZtX2FybV9oZGJzc19vbl9kaXJ0eV9sb2dnaW5nX2NoYW5nZVwiLFxuICAgIFwia3ZtX2FyY2hfc3luY19kaXJ0eV9sb2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIEhhcmR3YXJlIERpcnR5IHN0YXRlIHRyYWNraW5nIHN0cnVjdHVyZSAoSERCU1MpIHN1cHBvcnQgZm9yIEtWTSBvbiBhcm02NC4gSXQgbW9kaWZpZXMgY29yZSBLVk0gbG9naWMgZm9yIGRpcnR5IHBhZ2UgbG9nZ2luZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyBhbmQgZ3Vlc3QgZXhlY3V0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBiYmEzYjkxNWExZGJjODdkMjkyMDQyNzViMTU1NDVjNzFjYTJmZGNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxMCAwNjoxMjowMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmhcbmluZGV4IGE1Nzg3MGZhOTZkYjViLi5iZGZhYjA4NmZkOTQ1MyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaFxuQEAgLTg2Myw2ICs4NjMsMTEgQEAgc3RhdGljIGlubGluZSBib29sIHN5c3RlbV9zdXBwb3J0c19oYWZ0KHZvaWQpXG4gXHRyZXR1cm4gY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQUZUKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBib29sIHN5c3RlbV9zdXBwb3J0c19oZGJzcyh2b2lkKVxuK3tcbitcdHJldHVybiBjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19IREJTUyk7XG4rfVxuK1xuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBzeXN0ZW1fc3VwcG9ydHNfbXBhbSh2b2lkKVxuIHtcbiBcdHJldHVybiBhbHRlcm5hdGl2ZV9oYXNfY2FwX3VubGlrZWx5KEFSTTY0X01QQU0pO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZXNyLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2Vzci5oXG5pbmRleCA4MWMxNzMyMGE1ODhkOS4uMmU2YjY3OWI1OTA4MDggMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2Vzci5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2Vzci5oXG5AQCAtNDM3LDYgKzQzNywxMSBAQFxuICNpZm5kZWYgX19BU1NFTUJMRVJfX1xuICNpbmNsdWRlIFx1MDAzY2FzbS90eXBlcy5oXHUwMDNlXG4gXG4rc3RhdGljIGlubGluZSBib29sIGVzcl9pc3MyX2lzX2hkYnNzZih1bnNpZ25lZCBsb25nIGVzcilcbit7XG4rXHRyZXR1cm4gRVNSX0VMeF9JU1MyKGVzcikgXHUwMDI2IEVTUl9FTHhfSERCU1NGO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZXNyX2Jya19jb21tZW50KHVuc2lnbmVkIGxvbmcgZXNyKVxuIHtcbiBcdHJldHVybiBlc3IgXHUwMDI2IEVTUl9FTHhfQlJLNjRfSVNTX0NPTU1FTlRfTUFTSztcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9kaXJ0eV9iaXQuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2RpcnR5X2JpdC5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmE0Y2RhOGNkYWIyNDcyXG4tLS0gL2Rldi9udWxsXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9kaXJ0eV9iaXQuaFxuQEAgLTAsMCArMSwyOSBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbisvKlxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBBUk0gTHRkLlxuKyAqIEF1dGhvcjogTGVvbmFyZG8gQnJhcyBcdTAwM2NsZW8uYnJhc0Bhcm0uY29tXHUwMDNlXG4rICovXG4rXG4rI2lmbmRlZiBfX0FSTTY0X0tWTV9ESVJUWV9CSVRfSF9fXG4rI2RlZmluZSBfX0FSTTY0X0tWTV9ESVJUWV9CSVRfSF9fXG4rXG4rI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9wZ3RhYmxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20vc3lzcmVnLmhcdTAwM2VcbitcbisvKiBIREJTUyBlbnRyeSBmaWVsZCBkZWZpbml0aW9ucyAqL1xuKyNkZWZpbmUgSERCU1NfRU5UUllfVkFMSURcdEJJVCgwKVxuKyNkZWZpbmUgSERCU1NfRU5UUllfVFRXTF9TSElGVCAoMSlcbisjZGVmaW5lIEhEQlNTX0VOVFJZX1RUV0xfTUFTSyAoR0VOTUFTSygzLCAxKSlcbisjZGVmaW5lIEhEQlNTX0VOVFJZX1RUV0woeCkgXFxcbitcdCgoKHgpIFx1MDAzY1x1MDAzYyBIREJTU19FTlRSWV9UVFdMX1NISUZUKSBcdTAwMjYgSERCU1NfRU5UUllfVFRXTF9NQVNLKVxuKyNkZWZpbmUgSERCU1NfRU5UUllfVFRXTF9SRVNWIEhEQlNTX0VOVFJZX1RUV0woLTQpXG4rI2RlZmluZSBIREJTU19FTlRSWV9JUEFcdEdFTk1BU0tfVUxMKDU1LCAxMilcbitcbitpbnQga3ZtX2FybV92Y3B1X2FsbG9jX2hkYnNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IG9yZGVyKTtcbit2b2lkIGt2bV9hcm1fdmNwdV9mcmVlX2hkYnNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4rdm9pZCBrdm1fZmx1c2hfaGRic3NfYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4raW50IGt2bV9oYW5kbGVfaGRic3NfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbit2b2lkIGt2bV9hcm1faGRic3Nfb25fZGlydHlfbG9nZ2luZ19jaGFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBpbnQgbnJfbWVtc2xvdHNfbG9nZ2luZyk7XG4rdm9pZCBrdm1fYXJtX2Rpc2FibGVfaGRic3NfZ2xvYmFsKHN0cnVjdCBrdm0gKmt2bSk7XG4rXG4rI2VuZGlmIC8qIF9fQVJNNjRfS1ZNX0RJUlRZX0JJVF9IX18gKi9cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IGJhZTJjNGY5MmVmNWMwLi5jZWNmYjg4NGE2NGZhNyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtNTUsNiArNTUsNyBAQFxuICNkZWZpbmUgS1ZNX1JFUV9HVUVTVF9IWVBfSVJRX1BFTkRJTkdcdEtWTV9BUkNIX1JFUSg5KVxuICNkZWZpbmUgS1ZNX1JFUV9NQVBfTDFfVk5DUl9FTDJcdFx0S1ZNX0FSQ0hfUkVRKDEwKVxuICNkZWZpbmUgS1ZNX1JFUV9WR0lDX1BST0NFU1NfVVBEQVRFXHRLVk1fQVJDSF9SRVEoMTEpXG4rI2RlZmluZSBLVk1fUkVRX0ZMVVNIX0hEQlNTXHRcdFx0S1ZNX0FSQ0hfUkVRKDEyKVxuIFxuICNkZWZpbmUgS1ZNX0RJUlRZX0xPR19NQU5VQUxfQ0FQUyAgIChLVk1fRElSVFlfTE9HX01BTlVBTF9QUk9URUNUX0VOQUJMRSB8IFxcXG4gXHRcdFx0XHQgICAgIEtWTV9ESVJUWV9MT0dfSU5JVElBTExZX1NFVClcbkBAIC00MjAsNiArNDIxLDEwIEBAIHN0cnVjdCBrdm1fYXJjaCB7XG4gXHQgKi9cbiBcdHN0cnVjdCBrdm1fcHJvdGVjdGVkX3ZtIHBrdm07XG4gXG4rXHQvKiBIREJTUzogcGVyLVZNIGRpcnR5IHRyYWNraW5nIHN0YXRlICovXG4rXHRib29sIGVuYWJsZV9oZGJzcztcbitcdHVuc2lnbmVkIGludCBoZGJzc19vcmRlcjtcbitcbiAjaWZkZWYgQ09ORklHX1BURFVNUF9TVEFHRTJfREVCVUdGU1xuIFx0LyogTmVzdGVkIHZpcnR1YWxpemF0aW9uIGluZm8gKi9cbiBcdHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfbnZfZGVudHJ5O1xuQEAgLTgzOCw2ICs4NDMsMTIgQEAgc3RydWN0IHZjcHVfcmVzZXRfc3RhdGUge1xuIFx0Ym9vbFx0XHRyZXNldDtcbiB9O1xuIFxuK3N0cnVjdCB2Y3B1X2hkYnNzX3N0YXRlIHtcbitcdHBoeXNfYWRkcl90IGJhc2VfcGh5czsgICAvKiBmb3IgbWVtb3J5IGZyZWUgKi9cbitcdHU2NCBoZGJzc2JyX2VsMjsgICAgICAgICAvKiBsb2FkIGRpcmVjdGx5ICovXG4rXHR1NjQgaGRic3Nwcm9kX2VsMjsgICAgICAgLyogc2F2ZSBkaXJlY3RseSAqL1xuK307XG4rXG4gc3RydWN0IHZuY3JfdGxiO1xuIFxuIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcbkBAIC05NDUsNiArOTU2LDkgQEAgc3RydWN0IGt2bV92Y3B1X2FyY2gge1xuIFxuIFx0LyogSHlwLXJlYWRhYmxlIGNvcHkgb2Yga3ZtX3ZjcHU6OnBpZCAqL1xuIFx0cGlkX3QgcGlkO1xuK1xuK1x0LyogSERCU1MgcmVnaXN0ZXJzIGluZm8gKi9cbitcdHN0cnVjdCB2Y3B1X2hkYnNzX3N0YXRlIGhkYnNzO1xuIH07XG4gXG4gLypcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmhcbmluZGV4IDQxYTg2ODc5MzhlYjZiLi41ZTBmYWM0YmZhNTM2OSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX3BndGFibGUuaFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGd0YWJsZS5oXG5AQCAtOTMsNiArOTMsOCBAQCB0eXBlZGVmIHU2NCBrdm1fcHRlX3Q7XG4gXG4gI2RlZmluZSBLVk1fUFRFX0xFQUZfQVRUUl9ISV9TMl9YTlx0R0VOTUFTSyg1NCwgNTMpXG4gXG4rI2RlZmluZSBLVk1fUFRFX0xFQUZfQVRUUl9ISV9TMl9EQk1cdEJJVCg1MSlcbitcbiAjZGVmaW5lIEtWTV9QVEVfTEVBRl9BVFRSX0hJX1MxX0dQXHRCSVQoNTApXG4gXG4gI2RlZmluZSBLVk1fUFRFX0xFQUZfQVRUUl9TMl9QRVJNU1x0KEtWTV9QVEVfTEVBRl9BVFRSX0xPX1MyX1MyQVBfUiB8IFxcXG5AQCAtMjQ5LDEwICsyNTEsMTIgQEAgc3RydWN0IGt2bV9wZ3RhYmxlX21tX29wcyB7XG4gICogZW51bSBrdm1fcGd0YWJsZV9zdGFnZTJfZmxhZ3MgLSBTdGFnZS0yIHBhZ2UtdGFibGUgZmxhZ3MuXG4gICogQEtWTV9QR1RBQkxFX1MyX0lETUFQOlx0T25seSB1c2UgaWRlbnRpdHkgbWFwcGluZ3MuXG4gICogQEtWTV9QR1RBQkxFX1MyX0FTX1MxOlx0RmluYWwgbWVtb3J5IGF0dHJpYnV0ZXMgYXJlIHRoYXQgb2YgU3RhZ2UtMS5cbisgKiBAS1ZNX1BHVEFCTEVfUzJfREJNOlx0SGFyZHdhcmUtbWFuYWdlZCBEQk0gZm9yIHdyaXRhYmxlIHBhZ2VzLlxuICAqL1xuIGVudW0ga3ZtX3BndGFibGVfc3RhZ2UyX2ZsYWdzIHtcbiBcdEtWTV9QR1RBQkxFX1MyX0lETUFQXHRcdFx0PSBCSVQoMCksXG4gXHRLVk1fUEdUQUJMRV9TMl9BU19TMVx0XHRcdD0gQklUKDEpLFxuK1x0S1ZNX1BHVEFCTEVfUzJfREJNXHRcdFx0PSBCSVQoMiksXG4gfTtcbiBcbiAvKipcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N5c3JlZy5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNyZWcuaFxuaW5kZXggN2FhMDhkNTlkNDk0NDguLjEzNTRhNThjMzMxNjdiIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNyZWcuaFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNyZWcuaFxuQEAgLTEwMzksNiArMTAzOSwxNyBAQFxuIFxuICNkZWZpbmUgR0NTX0NBUCh4KVx0KCgoKHVuc2lnbmVkIGxvbmcpeCkgXHUwMDI2IEdDU19DQVBfQUREUl9NQVNLKSB8IFxcXG4gXHRcdFx0XHRcdCAgICAgICBHQ1NfQ0FQX1ZBTElEX1RPS0VOKVxuK1xuKy8qXG4rICogRGVmaW5pdGlvbnMgZm9yIHRoZSBIREJTUyBmZWF0dXJlXG4rICovXG4rI2RlZmluZSBIREJTU19NQVhfT1JERVJcdFx0SERCU1NCUl9FTDJfU1pfMk1CXG4rXG4rI2RlZmluZSBIREJTU0JSX0VMMihiYWRkciwgc3opXHQoKChiYWRkcikgXHUwMDI2IEhEQlNTQlJfRUwyX0JBRERSX01BU0spIHwgXFxcbitcdFx0XHRcdCBGSUVMRF9QUkVQKEhEQlNTQlJfRUwyX1NaX01BU0ssIHN6KSlcbitcbisjZGVmaW5lIEhEQlNTUFJPRF9JRFgocHJvZClcdEZJRUxEX0dFVChIREJTU1BST0RfRUwyX0lOREVYX01BU0ssIHByb2QpXG4rXG4gLypcbiAgKiBEZWZpbml0aW9ucyBmb3IgR0lDdjUgaW5zdHJ1Y3Rpb25zXG4gICovXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jIGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jXG5pbmRleCA5YTIyZGYwYzUxMjBmMy4uYWEzMjdlZWJhZjFjYTggMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmNcbisrKyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuY1xuQEAgLTIxMzEsNiArMjEzMSwxMSBAQCBzdGF0aWMgYm9vbCBodmhlX3Bvc3NpYmxlKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSxcbiBcdHJldHVybiBhcm02NF90ZXN0X3N3X2ZlYXR1cmVfb3ZlcnJpZGUoQVJNNjRfU1dfRkVBVFVSRV9PVkVSUklERV9IVkhFKTtcbiB9XG4gXG4rc3RhdGljIGJvb2wgaGFzX3ZoZV9oZGJzcyhjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksIGludCBjb3BlKVxuK3tcbitcdHJldHVybiBpc19rZXJuZWxfaW5faHlwX21vZGUoKSBcdTAwMjZcdTAwMjYgaGFzX2NwdWlkX2ZlYXR1cmUoZW50cnksIGNvcGUpO1xuK31cbitcbiBib29sIGNwdV9zdXBwb3J0c19iYm1sMl9ub2Fib3J0KHZvaWQpXG4ge1xuIFx0LypcbkBAIC0yNzgxLDYgKzI3ODYsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIGFybTY0X2ZlYXR1cmVzW10gPSB7XG4gXHRcdEFSTTY0X0NQVUlEX0ZJRUxEUyhJRF9BQTY0TU1GUjFfRUwxLCBIQUZEQlMsIEhBRlQpXG4gXHR9LFxuICNlbmRpZlxuK1x0e1xuK1x0XHQuZGVzYyA9IFwiSGFyZHdhcmUgRGlydHkgc3RhdGUgdHJhY2tpbmcgc3RydWN0dXJlIChIREJTUylcIixcbitcdFx0LnR5cGUgPSBBUk02NF9DUFVDQVBfU1lTVEVNX0ZFQVRVUkUsXG4rXHRcdC5jYXBhYmlsaXR5ID0gQVJNNjRfSEFTX0hEQlNTLFxuK1x0XHQubWF0Y2hlcyA9IGhhc192aGVfaGRic3MsXG4rXHRcdEFSTTY0X0NQVUlEX0ZJRUxEUyhJRF9BQTY0TU1GUjFfRUwxLCBIQUZEQlMsIEhEQlNTKVxuK1x0fSxcbiBcdHtcbiBcdFx0LmRlc2MgPSBcIkNSQzMyIGluc3RydWN0aW9uc1wiLFxuIFx0XHQuY2FwYWJpbGl0eSA9IEFSTTY0X0hBU19DUkMzMixcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9NYWtlZmlsZSBiL2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlXG5pbmRleCA1OTYxMmQyZjI3N2MxZC4uZWMyNzQ5YWY2NGZhNGMgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9NYWtlZmlsZVxuKysrIGIvYXJjaC9hcm02NC9rdm0vTWFrZWZpbGVcbkBAIC0xOCw2ICsxOCw3IEBAIGt2bS15ICs9IGFybS5vIG1tdS5vIG1taW8ubyBwc2NpLm8gaHlwZXJjYWxscy5vIHB2dGltZS5vIFxcXG4gXHQgZ3Vlc3QubyBkZWJ1Zy5vIHJlc2V0Lm8gc3lzX3JlZ3MubyBzdGFja3RyYWNlLm8gXFxcbiBcdCB2Z2ljLXN5cy1yZWctdjMubyBmcHNpbWQubyBwa3ZtLm8gXFxcbiBcdCBhcmNoX3RpbWVyLm8gdHJuZy5vIHZtaWQubyBlbXVsYXRlLW5lc3RlZC5vIG5lc3RlZC5vIGF0Lm8gXFxcbitcdCBkaXJ0eV9iaXQubyBcXFxuIFx0IHZnaWMvdmdpYy5vIHZnaWMvdmdpYy1pbml0Lm8gXFxcbiBcdCB2Z2ljL3ZnaWMtaXJxZmQubyB2Z2ljL3ZnaWMtdjIubyBcXFxuIFx0IHZnaWMvdmdpYy12My5vIHZnaWMvdmdpYy12NC5vIFxcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vYXJtLmMgYi9hcmNoL2FybTY0L2t2bS9hcm0uY1xuaW5kZXggNTBhZGZmZjc1YmU4MmUuLjUzNmQ5NDc5OWJhOGY5IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vYXJtLmNcbisrKyBiL2FyY2gvYXJtNjQva3ZtL2FybS5jXG5AQCAtMzgsNiArMzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fYXNtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX2VtdWxhdGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1faHlwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX2RpcnR5X2JpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9tbXUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fbmVzdGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX3Brdm0uaFx1MDAzZVxuQEAgLTMxNiw2ICszMTcsMTQgQEAgdm9pZCBrdm1fYXJjaF9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSlcbiBcdGlmIChpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSlcbiBcdFx0cGt2bV9kZXN0cm95X2h5cF92bShrdm0pO1xuIFxuK1x0LypcbitcdCAqIFVzZXJzcGFjZSBtYXkgZGVzdHJveSB0aGUgVk0gd2l0aG91dCBkaXNhYmxpbmcgZGlydHkgbG9nZ2luZyxcbitcdCAqIHNvIHRoZSBhdXRvLWRpc2FibGUgcGF0aCBpcyBuZXZlciByZWFjaGVkLiBGb3JjZSBkaXNhYmxlIEhEQlNTXG4rXHQgKiBoZXJlIHRvIGVuc3VyZSB2Q1BVIGJ1ZmZlcnMgYXJlIGZyZWVkIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrcy5cbitcdCAqL1xuK1x0aWYgKGt2bS1cdTAwM2VhcmNoLmVuYWJsZV9oZGJzcylcbitcdFx0a3ZtX2FybV9kaXNhYmxlX2hkYnNzX2dsb2JhbChrdm0pO1xuK1xuIFx0a3ZtX3VuaW5pdF9zdGFnZTJfbW11KGt2bSk7XG4gXHRrdm1fZGVzdHJveV9tcGlkcl9kYXRhKGt2bSk7XG4gXG5AQCAtNTY1LDYgKzU3NCwxMiBAQCBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKGVycilcbiBcdFx0a3ZtX3ZnaWNfdmNwdV9kZXN0cm95KHZjcHUpO1xuIFxuK1x0aWYgKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guZW5hYmxlX2hkYnNzKSB7XG4rXHRcdGVyciA9IGt2bV9hcm1fdmNwdV9hbGxvY19oZGJzcyh2Y3B1LCB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmhkYnNzX29yZGVyKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRrdm1fdmdpY192Y3B1X2Rlc3Ryb3kodmNwdSk7XG4rXHR9XG4rXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC03NDgsNiArNzYzLDkgQEAgdm9pZCBrdm1fYXJjaF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdGt2bV92Y3B1X3B1dF9od19tbXUodmNwdSk7XG4gXHRrdm1fYXJtX3ZtaWRfY2xlYXJfYWN0aXZlKCk7XG4gXG4rXHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5lbmFibGVfaGRic3MpXG4rXHRcdGt2bV9mbHVzaF9oZGJzc19idWZmZXIodmNwdSk7XG4rXG4gXHR2Y3B1X2NsZWFyX29uX3Vuc3VwcG9ydGVkX2NwdSh2Y3B1KTtcbiBcdHZjcHUtXHUwMDNlY3B1ID0gLTE7XG4gfVxuQEAgLTExNTAsNiArMTE2OCw5IEBAIHN0YXRpYyBpbnQgY2hlY2tfdmNwdV9yZXF1ZXN0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdGlmIChrdm1fZGlydHlfcmluZ19jaGVja19yZXF1ZXN0KHZjcHUpKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuK1x0XHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9GTFVTSF9IREJTUywgdmNwdSkpXG4rXHRcdFx0a3ZtX2ZsdXNoX2hkYnNzX2J1ZmZlcih2Y3B1KTtcbitcbiBcdFx0Y2hlY2tfbmVzdGVkX3ZjcHVfcmVxdWVzdHModmNwdSk7XG4gXHR9XG4gXG5AQCAtMTk2NCw3ICsxOTg1LDE1IEBAIGxvbmcga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxuIFxuIHZvaWQga3ZtX2FyY2hfc3luY19kaXJ0eV9sb2coc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90KVxuIHtcbitcdC8qXG4rXHQgKiBGbHVzaCBhbGwgQ1BVcycgZGlydHkgbG9nIGJ1ZmZlcnMgdG8gdGhlIGRpcnR5X2JpdG1hcC4gIENhbGxlZFxuK1x0ICogYmVmb3JlIHJlcG9ydGluZyBkaXJ0eV9iaXRtYXAgdG8gdXNlcnNwYWNlLiBTZW5kIGEgcmVxdWVzdCB3aXRoXG4rXHQgKiBLVk1fUkVRVUVTVF9XQUlUIHRvIGZsdXNoIGJ1ZmZlciBzeW5jaHJvbm91c2x5LlxuK1x0ICovXG4rXHRpZiAoIWt2bS1cdTAwM2VhcmNoLmVuYWJsZV9oZGJzcylcbitcdFx0cmV0dXJuO1xuIFxuK1x0a3ZtX21ha2VfYWxsX2NwdXNfcmVxdWVzdChrdm0sIEtWTV9SRVFfRkxVU0hfSERCU1MgfCBLVk1fUkVRVUVTVF9XQUlUKTtcbiB9XG4gXG4gc3RhdGljIGludCBrdm1fdm1faW9jdGxfc2V0X2RldmljZV9hZGRyKHN0cnVjdCBrdm0gKmt2bSxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYyBiL2FyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmM1YmY4NjZjMjNlZjJiXG4tLS0gL2Rldi9udWxsXG4rKysgYi9hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuY1xuQEAgLTAsMCArMSwyMTkgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLypcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQVJNIEx0ZC5cbisgKiBBdXRob3I6IExlb25hcmRvIEJyYXMgXHUwMDNjbGVvLmJyYXNAYXJtLmNvbVx1MDAzZVxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fZGlydHlfYml0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX21tdS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYXNtL3N5c3JlZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZ2ZwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rY29uZmlnLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4rXG4raW50IGt2bV9hcm1fdmNwdV9hbGxvY19oZGJzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBvcmRlcilcbit7XG4rXHRzdHJ1Y3QgcGFnZSAqaGRic3NfcGcgPSBOVUxMO1xuK1xuK1x0aWYgKHZjcHUtXHUwMDNlYXJjaC5oZGJzcy5oZGJzc2JyX2VsMiB8fCAhc3lzdGVtX3N1cHBvcnRzX2hkYnNzKCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKG9yZGVyIFx1MDAzZSBIREJTU19NQVhfT1JERVIpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aGRic3NfcGcgPSBhbGxvY19wYWdlcyhHRlBfS0VSTkVMX0FDQ09VTlQsIG9yZGVyKTtcbitcdGlmICghaGRic3NfcGcpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0dmNwdS1cdTAwM2VhcmNoLmhkYnNzID0gKHN0cnVjdCB2Y3B1X2hkYnNzX3N0YXRlKSB7XG4rXHRcdC5iYXNlX3BoeXMgPSBwYWdlX3RvX3BoeXMoaGRic3NfcGcpLFxuK1x0XHQuaGRic3Nicl9lbDIgPSBIREJTU0JSX0VMMihwYWdlX3RvX3BoeXMoaGRic3NfcGcpLCBvcmRlciksXG4rXHRcdC5oZGJzc3Byb2RfZWwyID0gMCxcbitcdH07XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rdm9pZCBrdm1fYXJtX3ZjcHVfZnJlZV9oZGJzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0c3RydWN0IHBhZ2UgKmhkYnNzX3BnO1xuK1xuK1x0aWYgKCF2Y3B1LVx1MDAzZWFyY2guaGRic3MuaGRic3Nicl9lbDIpIHtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aGRic3NfcGcgPSBwaHlzX3RvX3BhZ2UodmNwdS1cdTAwM2VhcmNoLmhkYnNzLmJhc2VfcGh5cyk7XG4rXHRpZiAoaGRic3NfcGcpXG4rXHRcdF9fZnJlZV9wYWdlcyhoZGJzc19wZyxcbitcdFx0ICAgICBGSUVMRF9HRVQoSERCU1NCUl9FTDJfU1pfTUFTSyxcbitcdFx0XHQgICAgICAgdmNwdS1cdTAwM2VhcmNoLmhkYnNzLmhkYnNzYnJfZWwyKSk7XG4rXG4rXHR2Y3B1LVx1MDAzZWFyY2guaGRic3MuaGRic3Nicl9lbDIgPSAwO1xuK31cbitcbit2b2lkIGt2bV9mbHVzaF9oZGJzc19idWZmZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdGludCBpZHgsIGN1cnJfaWR4O1xuK1x0dTY0ICpoZGJzc19idWY7XG4rXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbitcbitcdGlmICgha3ZtLVx1MDAzZWFyY2guZW5hYmxlX2hkYnNzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRjdXJyX2lkeCA9IEhEQlNTUFJPRF9JRFgocmVhZF9zeXNyZWdfcyhTWVNfSERCU1NQUk9EX0VMMikpO1xuK1xuK1x0LyogRG8gbm90aGluZyBpZiBIREJTUyBidWZmZXIgaXMgZW1wdHkgb3IgYnJfZWwyIGlzIE5VTEwgKi9cbitcdGlmIChjdXJyX2lkeCA9PSAwIHx8IHZjcHUtXHUwMDNlYXJjaC5oZGJzcy5oZGJzc2JyX2VsMiA9PSAwKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRoZGJzc19idWYgPSBwYWdlX2FkZHJlc3MocGh5c190b19wYWdlKHZjcHUtXHUwMDNlYXJjaC5oZGJzcy5iYXNlX3BoeXMpKTtcbitcdGlmICghaGRic3NfYnVmKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRndWFyZCh3cml0ZV9sb2NrX2lycXNhdmUpKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZW1tdV9sb2NrKTtcbitcdGZvciAoaWR4ID0gMDsgaWR4IFx1MDAzYyBjdXJyX2lkeDsgaWR4KyspIHtcbitcdFx0dTY0IGdwYTtcbitcbitcdFx0Z3BhID0gaGRic3NfYnVmW2lkeF07XG4rXHRcdGlmICghKGdwYSBcdTAwMjYgSERCU1NfRU5UUllfVkFMSUQpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRncGEgXHUwMDI2PSBIREJTU19FTlRSWV9JUEE7XG4rXHRcdGt2bV92Y3B1X21hcmtfcGFnZV9kaXJ0eSh2Y3B1LCBncGEgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuK1x0fVxuK1xuK1x0LyogcmVzZXQgSERCU1MgaW5kZXggKi9cbitcdHdyaXRlX3N5c3JlZ19zKDAsIFNZU19IREJTU1BST0RfRUwyKTtcbitcdHZjcHUtXHUwMDNlYXJjaC5oZGJzcy5oZGJzc3Byb2RfZWwyID0gMDtcbitcdGlzYigpO1xuK31cbitcbitpbnQga3ZtX2hhbmRsZV9oZGJzc19mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0dTY0IHByb2Q7XG4rXHR1NjQgZnNjO1xuK1xuK1x0cHJvZCA9IHJlYWRfc3lzcmVnX3MoU1lTX0hEQlNTUFJPRF9FTDIpO1xuK1x0ZnNjID0gRklFTERfR0VUKEhEQlNTUFJPRF9FTDJfRlNDX01BU0ssIHByb2QpO1xuK1xuK1x0c3dpdGNoIChmc2MpIHtcbitcdGNhc2UgSERCU1NQUk9EX0VMMl9GU0NfT0s6XG4rXHRcdC8qIEJ1ZmZlciBmdWxsLCBzZXQgcmVxdWVzdCB0byBmbHVzaCBvbiBuZXh0IHZjcHUgZXhpdCAqL1xuK1x0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfRkxVU0hfSERCU1MsIHZjcHUpO1xuK1x0XHRyZXR1cm4gMTtcbitcdGNhc2UgSERCU1NQUk9EX0VMMl9GU0NfRXh0ZXJuYWxBYm9ydDpcbitcdGNhc2UgSERCU1NQUk9EX0VMMl9GU0NfR1BGOlxuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcdGRlZmF1bHQ6XG4rXHRcdC8qIFVua25vd24gZmF1bHQuICovXG4rXHRcdFdBUk5fT05DRSgxLFxuK1x0XHRcdCAgXCJVbmV4cGVjdGVkIEhEQlNTIGZhdWx0IHR5cGUsIEZTQzogMHglbGx4IChwcm9kPTB4JWxseCwgdmNwdT0lZClcXG5cIixcbitcdFx0XHQgIGZzYywgcHJvZCwgdmNwdS1cdTAwM2V2Y3B1X2lkKTtcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB1bnNpZ25lZCBpbnQgaGRic3NfYXV0b19zZWxlY3Rfb3JkZXIoc3RydWN0IGt2bSAqa3ZtKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgbnBhZ2VzID0gMDtcbitcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3Q7XG4rXHRpbnQgYmt0O1xuK1xuK1x0a3ZtX2Zvcl9lYWNoX21lbXNsb3QobWVtc2xvdCwgYmt0LCBrdm1fbWVtc2xvdHMoa3ZtKSlcbitcdFx0bnBhZ2VzICs9IG1lbXNsb3QtXHUwMDNlbnBhZ2VzO1xuK1xuK1x0aWYgKG5wYWdlcyBcdTAwM2M9IDE2Mzg0KVxuK1x0XHRyZXR1cm4gMDtcbitcdGVsc2UgaWYgKG5wYWdlcyBcdTAwM2M9IDI2MjE0NClcbitcdFx0cmV0dXJuIDM7XG4rXHRlbHNlIGlmIChucGFnZXMgXHUwMDNjPSA0MTk0MzA0KVxuK1x0XHRyZXR1cm4gNjtcbitcdGVsc2VcbitcdFx0cmV0dXJuIDk7XG4rfVxuK1xuKy8qXG4rICogRW5hYmxlIEhEQlNTIGZvciBhbGwgdkNQVXMgaW4gdGhlIFZNLlxuKyAqXG4rICogQ2FsbGVkIGZyb20ga3ZtX2FybV9oZGJzc19vbl9kaXJ0eV9sb2dnaW5nX2NoYW5nZSgpIHdoaWNoIGlzIGludm9rZWRcbisgKiBieSBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbigpIHVuZGVyIGt2bS1cdTAwM2VzbG90c19sb2NrLlxuKyAqXG4rICogSWYgYnVmZmVyIGFsbG9jYXRpb24gZmFpbHMsIEhEQlNTIHJlbWFpbnMgZGlzYWJsZWQgYW5kIGRpcnR5IHRyYWNraW5nXG4rICogZmFsbHMgYmFjayB0byB0aGUgdHJhZGl0aW9uYWwgc29mdHdhcmUtYmFzZWQgYXBwcm9hY2ggKFBURSB3cml0ZS1wcm90ZWN0XG4rICogKyBzb2Z0d2FyZSBkaXJ0eSBtYXJraW5nKS4gVGhpcyBkb2VzIG5vdCBhZmZlY3QgY29ycmVjdG5lc3M7IGRpcnR5XG4rICogbG9nZ2luZyByZW1haW5zIGZ1bmN0aW9uYWwgd2l0aG91dCBIREJTUy5cbisgKi9cbitzdGF0aWMgaW50IGt2bV9hcm1fZW5hYmxlX2hkYnNzX2dsb2JhbChzdHJ1Y3Qga3ZtICprdm0pXG4re1xuK1x0aW50IGVycjtcbitcdHVuc2lnbmVkIGxvbmcgaTtcbitcdHVuc2lnbmVkIGludCBvcmRlcjtcbitcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbitcbitcdGlmICghc3lzdGVtX3N1cHBvcnRzX2hkYnNzKCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKGt2bS1cdTAwM2VkaXJ0eV9yaW5nX3NpemUpIC8qIERvbid0IHN1cHBvcnQgSERCU1MgaW4gZGlydHkgcmluZyBtb2RlICovXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKGt2bS1cdTAwM2VhcmNoLmVuYWJsZV9oZGJzcykgLyogQWxyZWFkeSBPbiAqL1xuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIFR1cm4gaXQgb24gKi9cbitcdG9yZGVyID0gaGRic3NfYXV0b19zZWxlY3Rfb3JkZXIoa3ZtKTtcbitcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkge1xuK1x0XHRlcnIgPSBrdm1fYXJtX3ZjcHVfYWxsb2NfaGRic3ModmNwdSwgb3JkZXIpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGdvdG8gZXJyb3JfYWxsb2M7XG4rXHR9XG4rXG4rXHRrdm0tXHUwMDNlYXJjaC5lbmFibGVfaGRic3MgPSB0cnVlO1xuK1x0a3ZtLVx1MDAzZWFyY2gubW11LnZ0Y3IgfD0gVlRDUl9FTDJfSEQgfCBWVENSX0VMMl9IREJTUyB8IFZUQ1JfRUwyX0hBO1xuK1xuK1x0LypcbitcdCAqIFdlIHNob3VsZCBraWNrIHZjcHVzIG91dCBvZiBndWVzdCBtb2RlIGhlcmUgdG8gbG9hZCBuZXdcbitcdCAqIHZ0Y3IgdmFsdWUgdG8gdnRjcl9lbDIgcmVnaXN0ZXIgd2hlbiByZS1lbnRlciBndWVzdCBtb2RlLlxuK1x0ICovXG4rXHRrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pXG4rXHRcdGt2bV92Y3B1X2tpY2sodmNwdSk7XG4rXG4rXHRyZXR1cm4gMDtcbitcbitlcnJvcl9hbGxvYzpcbitcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSlcbitcdFx0aWYgKHZjcHUtXHUwMDNlYXJjaC5oZGJzcy5iYXNlX3BoeXMpXG4rXHRcdFx0a3ZtX2FybV92Y3B1X2ZyZWVfaGRic3ModmNwdSk7XG4rXG4rXHRwcl93YXJuX29uY2UoXCJrdm06IGZhaWxlZCB0byBhbGxvY2F0ZSBIREJTUyBidWZmZXJzIChvcmRlcj0ldSksIFwiXG4rXHRcdCAgICAgXCJmYWxsaW5nIGJhY2sgdG8gc29mdHdhcmUgZGlydHkgdHJhY2tpbmdcXG5cIiwgb3JkZXIpO1xuK1x0cmV0dXJuIC1FTk9NRU07XG4rfVxuK1xuK3ZvaWQga3ZtX2FybV9kaXNhYmxlX2hkYnNzX2dsb2JhbChzdHJ1Y3Qga3ZtICprdm0pXG4re1xuK1x0dW5zaWduZWQgbG9uZyBpO1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuK1xuK1x0aWYgKCFrdm0tXHUwMDNlYXJjaC5lbmFibGVfaGRic3MpIC8qIEFscmVhZHkgT2ZmICovXG4rXHRcdHJldHVybjtcbitcbitcdC8qIFR1cm4gaXQgb2ZmICovXG4rXHRrdm0tXHUwMDNlYXJjaC5tbXUudnRjciBcdTAwMjY9IH4oVlRDUl9FTDJfSEQgfCBWVENSX0VMMl9IREJTUyB8IFZUQ1JfRUwyX0hBKTtcbitcbitcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSlcbitcdFx0a3ZtX2FybV92Y3B1X2ZyZWVfaGRic3ModmNwdSk7XG4rXG4rXHRrdm0tXHUwMDNlYXJjaC5lbmFibGVfaGRic3MgPSBmYWxzZTtcbit9XG4rXG4rdm9pZCBrdm1fYXJtX2hkYnNzX29uX2RpcnR5X2xvZ2dpbmdfY2hhbmdlKHN0cnVjdCBrdm0gKmt2bSwgaW50IG5yX21lbXNsb3RzX2xvZ2dpbmcpXG4re1xuK1x0LypcbitcdCAqIENhbGxlZCBmcm9tIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKCkgdW5kZXIga3ZtLVx1MDAzZXNsb3RzX2xvY2suXG4rXHQgKiBBbGwgc3RhdGUgdHJhbnNpdGlvbnMgYXJlIHNlcmlhbGl6ZWQgYnkgc2xvdHNfbG9jay5cbitcdCAqL1xuK1x0aWYgKG5yX21lbXNsb3RzX2xvZ2dpbmcgXHUwMDNlIDAgXHUwMDI2XHUwMDI2ICFrdm0tXHUwMDNlYXJjaC5lbmFibGVfaGRic3MpXG4rXHRcdGt2bV9hcm1fZW5hYmxlX2hkYnNzX2dsb2JhbChrdm0pO1xuK1x0ZWxzZSBpZiAobnJfbWVtc2xvdHNfbG9nZ2luZyA9PSAwIFx1MDAyNlx1MDAyNiBrdm0tXHUwMDNlYXJjaC5lbmFibGVfaGRic3MpXG4rXHRcdGt2bV9hcm1fZGlzYWJsZV9oZGJzc19nbG9iYWwoa3ZtKTtcbit9XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuYyBiL2FyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmNcbmluZGV4IDkxYTdkZmFkNjY4NjYwLi4yMWVjNDU2ZWNjNDExYSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmNcbisrKyBiL2FyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmNcbkBAIC03MzEsOSArNzMxLDIzIEBAIHN0YXRpYyBpbnQgc3RhZ2UyX3NldF9wcm90X2F0dHIoc3RydWN0IGt2bV9wZ3RhYmxlICpwZ3QsIGVudW0ga3ZtX3BndGFibGVfcHJvdCBwXG4gXHRpZiAocHJvdCBcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9SKVxuIFx0XHRhdHRyIHw9IEtWTV9QVEVfTEVBRl9BVFRSX0xPX1MyX1MyQVBfUjtcbiBcbi1cdGlmIChwcm90IFx1MDAyNiBLVk1fUEdUQUJMRV9QUk9UX1cpXG4rXHRpZiAocHJvdCBcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9XKSB7XG4gXHRcdGF0dHIgfD0gS1ZNX1BURV9MRUFGX0FUVFJfTE9fUzJfUzJBUF9XO1xuIFxuK1x0XHQvKlxuK1x0XHQgKiBTZXQgREJNIGJpdCBmb3Igd3JpdGFibGUgbm9uLWRldmljZSBwYWdlcyBpZiB0aGUgcGFnZS10YWJsZVxuK1x0XHQgKiBoYXMgS1ZNX1BHVEFCTEVfUzJfREJNIGZsYWcgKHN5c3RlbSBzdXBwb3J0cyBIREJTUykuXG4rXHRcdCAqXG4rXHRcdCAqIEZvciBzdGFnZSAyIHRyYW5zbGF0aW9ucyB1c2luZyBJbmRpcmVjdCBwZXJtaXNzaW9ucywgaWYgdGhlXG4rXHRcdCAqIEVmZmVjdGl2ZSB2YWx1ZSBvZiBWVENSX0VMMi5IRCBpcyAwLCB0aGVuIGRpcnR5IHN0YXRlIGlzXG4rXHRcdCAqIG1hbmFnZWQgYnkgc29mdHdhcmUuIEhhcmR3YXJlIG9ubHkgdXBkYXRlcyB0aGUgZGlydHkgc3RhdGVcbitcdFx0ICogd2hlbiBWVENSX0VMMi5IRD0xIChIREJTUyBlbmFibGVkKS5cbitcdFx0ICovXG4rXHRcdGlmICgocGd0LVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fUEdUQUJMRV9TMl9EQk0pIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIShwcm90IFx1MDAyNiBLVk1fUEdUQUJMRV9QUk9UX0RFVklDRSkpXG4rXHRcdFx0YXR0ciB8PSBLVk1fUFRFX0xFQUZfQVRUUl9ISV9TMl9EQk07XG4rXHR9XG4rXG4gXHRpZiAoIWt2bV9scGEyX2lzX2VuYWJsZWQoKSlcbiBcdFx0YXR0ciB8PSBGSUVMRF9QUkVQKEtWTV9QVEVfTEVBRl9BVFRSX0xPX1MyX1NILCBzaCk7XG4gXG5AQCAtMTM2Nyw5ICsxMzgxLDI2IEBAIGludCBrdm1fcGd0YWJsZV9zdGFnZTJfcmVsYXhfcGVybXMoc3RydWN0IGt2bV9wZ3RhYmxlICpwZ3QsIHU2NCBhZGRyLFxuIFx0aWYgKHByb3QgXHUwMDI2IEtWTV9QR1RBQkxFX1BST1RfUilcbiBcdFx0c2V0IHw9IEtWTV9QVEVfTEVBRl9BVFRSX0xPX1MyX1MyQVBfUjtcbiBcbi1cdGlmIChwcm90IFx1MDAyNiBLVk1fUEdUQUJMRV9QUk9UX1cpXG4rXHRpZiAocHJvdCBcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9XKSB7XG4gXHRcdHNldCB8PSBLVk1fUFRFX0xFQUZfQVRUUl9MT19TMl9TMkFQX1c7XG4gXG4rXHRcdC8qXG4rXHRcdCAqIE5vIERFVklDRSBmaWx0ZXIgbmVlZGVkIGhlcmU6IHJlbGF4X3Blcm1zIGlzIG9ubHkgY2FsbGVkXG4rXHRcdCAqIG9uIEZTQ19QRVJNIGZhdWx0cy4gRGV2aWNlIHBhZ2VzIGFsd2F5cyBnZXQgZnVsbCBSVyBmcm9tXG4rXHRcdCAqIGluaXRpYWwgbWFwcGluZyBhbmQgYXJlIG5ldmVyIHdyaXRlLXByb3RlY3RlZCBkdXJpbmdcbitcdFx0ICogbWlncmF0aW9uLCBzbyB0aGV5IG5ldmVyIHRyaWdnZXIgYSBwZXJtaXNzaW9uIGZhdWx0LlxuK1x0XHQgKi9cbitcdFx0aWYgKHBndC1cdTAwM2VmbGFncyBcdTAwMjYgS1ZNX1BHVEFCTEVfUzJfREJNKVxuK1x0XHRcdHNldCB8PSBLVk1fUFRFX0xFQUZfQVRUUl9ISV9TMl9EQk07XG4rXHR9IGVsc2Uge1xuK1x0XHQvKlxuK1x0XHQgKiBDbGVhciBEQk0gb24gV+KGklJPIGRvd25ncmFkZSB0byBwcmV2ZW50IGhhcmR3YXJlIGZyb21cbitcdFx0ICogc2lsZW50bHkgdXBncmFkaW5nIFJPK0RCTSBiYWNrIHRvIFcrZGlydHksIHdoaWNoIHdvdWxkXG4rXHRcdCAqIGJ5cGFzcyBLVk0ncyB3cml0ZSB0cmFja2luZyBhbmQgY2F1c2UgZGF0YSBjb3JydXB0aW9uLlxuK1x0XHQgKi9cbitcdFx0Y2xyIHw9IEtWTV9QVEVfTEVBRl9BVFRSX0hJX1MyX0RCTTtcbitcdH1cbitcbiBcdHJldCA9IHN0YWdlMl9zZXRfeG5fYXR0cihwcm90LCBcdTAwMjZ4bik7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmMgYi9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jXG5pbmRleCBiYmU5Y2ViZDNkOWQ1Ny4uZmU3Mjk0NGJmZDNkNWIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jXG5AQCAtMjIsNiArMjIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fZW11bGF0ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9oeXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fbW11LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX2RpcnR5X2JpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2Zwc2ltZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2RlYnVnLW1vbml0b3JzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcHJvY2Vzc29yLmhcdTAwM2VcbkBAIC0yMTMsNiArMjE0LDE5IEBAIHN0YXRpYyB2b2lkIF9fdmNwdV9wdXRfZGVhY3RpdmF0ZV90cmFwcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIF9fbG9hZF9oZGJzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG4rXG4rXHRpZiAoIWt2bS1cdTAwM2VhcmNoLmVuYWJsZV9oZGJzcylcbitcdFx0cmV0dXJuO1xuK1xuK1x0d3JpdGVfc3lzcmVnX3ModmNwdS1cdTAwM2VhcmNoLmhkYnNzLmhkYnNzYnJfZWwyLCBTWVNfSERCU1NCUl9FTDIpO1xuK1x0d3JpdGVfc3lzcmVnX3ModmNwdS1cdTAwM2VhcmNoLmhkYnNzLmhkYnNzcHJvZF9lbDIsIFNZU19IREJTU1BST0RfRUwyKTtcbitcbitcdGlzYigpO1xuK31cbitcbiB2b2lkIGt2bV92Y3B1X2xvYWRfdmhlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRob3N0X2RhdGFfcHRyKGhvc3RfY3R4dCktXHUwMDNlX19oeXBfcnVubmluZ192Y3B1ID0gdmNwdTtcbkBAIC0yMjAsNiArMjM0LDcgQEAgdm9pZCBrdm1fdmNwdV9sb2FkX3ZoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRfX3ZjcHVfbG9hZF9zd2l0Y2hfc3lzcmVncyh2Y3B1KTtcbiBcdF9fdmNwdV9sb2FkX2FjdGl2YXRlX3RyYXBzKHZjcHUpO1xuIFx0X19sb2FkX3N0YWdlMih2Y3B1LVx1MDAzZWFyY2guaHdfbW11KTtcbitcdF9fbG9hZF9oZGJzcyh2Y3B1KTtcbiB9XG4gXG4gdm9pZCBrdm1fdmNwdV9wdXRfdmhlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9tbXUuYyBiL2FyY2gvYXJtNjQva3ZtL21tdS5jXG5pbmRleCA2Yzk0MWFhYTEwYzYzOS4uNDg0ZjQ4ZGFlMDAwM2MgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9tbXUuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vbW11LmNcbkBAIC0xNiw2ICsxNiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2NhY2hlZmx1c2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fYXJtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX21tdS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9kaXJ0eV9iaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fcGd0YWJsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9wa3ZtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX2FzbS5oXHUwMDNlXG5AQCAtMTAxNCw2ICsxMDE1LDkgQEAgaW50IGt2bV9pbml0X3N0YWdlMl9tbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1bnNpZ25lZCBsb25nIHRcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gb3V0X2ZyZWVfcGd0YWJsZTtcbiBcbitcdGlmIChzeXN0ZW1fc3VwcG9ydHNfaGRic3MoKSlcbitcdFx0cGd0LVx1MDAzZWZsYWdzIHw9IEtWTV9QR1RBQkxFX1MyX0RCTTtcbitcbiBcdG1tdS1cdTAwM2VwZ3QgPSBwZ3Q7XG4gXHRpZiAoaXNfcHJvdGVjdGVkX2t2bV9lbmFibGVkKCkpXG4gXHRcdHJldHVybiAwO1xuQEAgLTEwMjcsOCArMTAzMSwxMiBAQCBpbnQga3ZtX2luaXRfc3RhZ2UyX21tdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHVuc2lnbmVkIGxvbmcgdFxuIFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSlcbiBcdFx0KnBlcl9jcHVfcHRyKG1tdS1cdTAwM2VsYXN0X3ZjcHVfcmFuLCBjcHUpID0gLTE7XG4gXG4tXHQgLyogVGhlIGVhZ2VyIHBhZ2Ugc3BsaXR0aW5nIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgKi9cbi1cdG1tdS1cdTAwM2VzcGxpdF9wYWdlX2NodW5rX3NpemUgPSBLVk1fQVJNX0VBR0VSX1NQTElUX0NIVU5LX1NJWkVfREVGQVVMVDtcbitcdCAvKiBUaGUgZWFnZXIgcGFnZSBzcGxpdHRpbmcgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCBpZiBzeXN0ZW0gaGFzIG5vIEhEQlNTICovXG4rXHRpZiAoc3lzdGVtX3N1cHBvcnRzX2hkYnNzKCkpXG4rXHRcdG1tdS1cdTAwM2VzcGxpdF9wYWdlX2NodW5rX3NpemUgPSAyNTYgKiAxMDI0ICogUEFHRV9TSVpFO1xuK1x0ZWxzZVxuK1x0XHRtbXUtXHUwMDNlc3BsaXRfcGFnZV9jaHVua19zaXplID0gS1ZNX0FSTV9FQUdFUl9TUExJVF9DSFVOS19TSVpFX0RFRkFVTFQ7XG4rXG4gXHRtbXUtXHUwMDNlc3BsaXRfcGFnZV9jYWNoZS5nZnBfemVybyA9IF9fR0ZQX1pFUk87XG4gXG4gXHRtbXUtXHUwMDNlcGdkX3BoeXMgPSBfX3BhKHBndC1cdTAwM2VwZ2QpO1xuQEAgLTIyMzQsNiArMjI0Miw3IEBAIGludCBrdm1faGFuZGxlX2d1ZXN0X3NlYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gfVxuIFxuIC8qKlxuK1xuICAqIGt2bV9oYW5kbGVfZ3Vlc3RfYWJvcnQgLSBoYW5kbGVzIGFsbCAybmQgc3RhZ2UgYWJvcnRzXG4gICogQHZjcHU6XHR0aGUgVkNQVSBwb2ludGVyXG4gICpcbkBAIC0yMjcxLDYgKzIyODAsOSBAQCBpbnQga3ZtX2hhbmRsZV9ndWVzdF9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHRpc19pYWJ0ID0ga3ZtX3ZjcHVfdHJhcF9pc19pYWJ0KHZjcHUpO1xuIFxuK1x0aWYgKGVzcl9pc3MyX2lzX2hkYnNzZihlc3IpKVxuK1x0XHRyZXR1cm4ga3ZtX2hhbmRsZV9oZGJzc19mYXVsdCh2Y3B1KTtcbitcbiBcdGlmIChlc3JfZnNjX2lzX3RyYW5zbGF0aW9uX2ZhdWx0KGVzcikpIHtcbiBcdFx0LyogQmV5b25kIHNhbml0aXNlZCBQQVJhbmdlICh3aGljaCBpcyB0aGUgSVBBIGxpbWl0KSAqL1xuIFx0XHRpZiAoZmF1bHRfaXBhIFx1MDAzZT0gQklUX1VMTChnZXRfa3ZtX2lwYV9saW1pdCgpKSkge1xuQEAgLTI1NzYsNiArMjU4OCw5IEBAIHZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuIHtcbiBcdGJvb2wgbG9nX2RpcnR5X3BhZ2VzID0gbmV3IFx1MDAyNlx1MDAyNiBuZXctXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTO1xuIFxuK1x0a3ZtX2FybV9oZGJzc19vbl9kaXJ0eV9sb2dnaW5nX2NoYW5nZShrdm0sXG4rXHRcdGF0b21pY19yZWFkKFx1MDAyNmt2bS1cdTAwM2Vucl9tZW1zbG90c19kaXJ0eV9sb2dnaW5nKSk7XG4rXG4gXHQvKlxuIFx0ICogQXQgdGhpcyBwb2ludCBtZW1zbG90IGhhcyBiZWVuIGNvbW1pdHRlZCBhbmQgdGhlcmUgaXMgYW5cbiBcdCAqIGFsbG9jYXRlZCBkaXJ0eV9iaXRtYXBbXSwgZGlydHkgcGFnZXMgd2lsbCBiZSB0cmFja2VkIHdoaWxlIHRoZVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3Jlc2V0LmMgYi9hcmNoL2FybTY0L2t2bS9yZXNldC5jXG5pbmRleCBiOTYzZmQ5NzVhYWNhZi4uZDgxMDRiY2JkOWZmYWQgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9yZXNldC5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS9yZXNldC5jXG5AQCAtMjcsNiArMjcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fYXNtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX2VtdWxhdGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fbW11LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX2RpcnR5X2JpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9uZXN0ZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS92aXJ0LmhcdTAwM2VcbiBcbkBAIC0xNjEsNiArMTYyLDkgQEAgdm9pZCBrdm1fYXJtX3ZjcHVfZGVzdHJveShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpdmNwdS1cdTAwM2VhcmNoLmN0eHQudm5jcl9hcnJheSk7XG4gXHRrZnJlZSh2Y3B1LVx1MDAzZWFyY2gudm5jcl90bGIpO1xuIFx0a2ZyZWUodmNwdS1cdTAwM2VhcmNoLmNjc2lkcik7XG4rXG4rXHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5lbmFibGVfaGRic3MpXG4rXHRcdGt2bV9hcm1fdmNwdV9mcmVlX2hkYnNzKHZjcHUpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBrdm1fdmNwdV9yZXNldF9zdmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2FwcyBiL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2Fwc1xuaW5kZXggOWI4NWE4NGY2ZmQ0OTQuLmE4NzcwNmM5ZDE2MGUwIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC90b29scy9jcHVjYXBzXG4rKysgYi9hcmNoL2FybTY0L3Rvb2xzL2NwdWNhcHNcbkBAIC02OSw2ICs2OSw3IEBAIEhBU19WQTUyXG4gSEFTX1ZJUlRfSE9TVF9FWFROXG4gSEFTX1dGWFRcbiBIQVNfWE5YXG4rSEFTX0hEQlNTXG4gSEFGVFxuIEhXX0RCTVxuIEtWTV9IVkhFXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjoxMjowNC42MjQ0OTk5MzhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjc3Mzg2NzM3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBIREJTUyBQYXRjaCBmb3IgS1ZNIG9uIGFybTY0KipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBpbnRyb2R1Y2luZyBIREJTUyBzdXBwb3J0IGZvciBLVk0gb24gYXJtNjQuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgc2lnbmlmaWNhbnQgb25lLCB0byB0aGUgY29yZSBLVk0gbG9naWMuIFRoZXJlZm9yZSwgZnV6emluZyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZC4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIGFyZWFzIGZvciBmdXp6aW5nIGFuZCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiB0byBlbmFibGUgdGhpcy5cblxuRmlyc3QsIGxldCdzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhpcyBwYXRjaCB0b3VjaGVzLiBMb29rcyBsaWtlIGl0J3MgYWRkaW5nIG5ldyBmaWxlcyBgYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmNgLCBgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZGlydHlfYml0LmhgLCBhbmQgbW9kaWZ5aW5nIHNldmVyYWwgZXhpc3RpbmcgS1ZNIGZpbGVzLiBJIHNlZSBtb2RpZmljYXRpb25zIGluIGBrdm1fYXJjaF92Y3B1X2NyZWF0ZWAsIGBrdm1fYXJjaF92Y3B1X3B1dGAsIGBjaGVja192Y3B1X3JlcXVlc3RzYCwgYW5kIHRoZSBsaWtlIOKAkyBjb3JlIEtWTSBzdHVmZi4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgSERCU1Mtc3BlY2lmaWMgZnVuY3Rpb25zLlxuXG5JIGNhbiBzZWUgc29tZSBrZXkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIEhEQlNTIGltcGxlbWVudGF0aW9uIHRoYXQgYXJlIGFkZGVkL21vZGlmaWVkLiBUaGVzZSBhcmUgbXkgbWFpbiB0YXJnZXRzOlxuLSBga3ZtX2FybV92Y3B1X2FsbG9jX2hkYnNzYFxuLSBga3ZtX2FybV92Y3B1X2ZyZWVfaGRic3NgXG4tIGBrdm1fZmx1c2hfaGRic3NfYnVmZmVyYFxuLSBga3ZtX2hhbmRsZV9oZGJzc19mYXVsdGBcbi0gYGt2bV9hcm1fZW5hYmxlX2hkYnNzX2dsb2JhbGBcbi0gYGt2bV9hcm1fZGlzYWJsZV9oZGJzc19nbG9iYWxgXG4tIGBrdm1fYXJtX2hkYnNzX29uX2RpcnR5X2xvZ2dpbmdfY2hhbmdlYFxuLSBga3ZtX2FyY2hfc3luY19kaXJ0eV9sb2dgXG5cbk5vdywgbGV0J3MgY2hlY2sgZm9yIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzLiBMb29raW5nIGF0IHRoZSBgTWFrZWZpbGVgLCBJIHNlZSB0aGF0IHRoZSBgZGlydHlfYml0Lm9gIGZpbGUgaXMgYmVpbmcgdW5jb25kaXRpb25hbGx5IGJ1aWx0IHdoZW4gS1ZNIGlzIGVuYWJsZWQuIFNvLCB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG5lZWRlZCBpcyBgS1ZNYC4gTm90aGluZyBlbHNlIGFwcGVhcnMgdG8gYmUgYWRkZWQgaW4gdGhlIEtjb25maWcgb3Igc2ltaWxhciBmaWxlcy5cblxuSW5pdGlhbGx5LCBJJ2QgdGhvdWdodCBhYm91dCBvbWl0dGluZyBzdGF0aWMgZnVuY3Rpb25zIGxpa2UgYGt2bV9hcm1fZW5hYmxlX2hkYnNzX2dsb2JhbGAgYW5kIGBrdm1fYXJtX2Rpc2FibGVfaGRic3NfZ2xvYmFsYCBmcm9tIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LCBhc3N1bWluZyB0aGUgZnV6emVyIG1pZ2h0IG5vdCBkaXJlY3RseSB0YXJnZXQgdGhlbS4gSG93ZXZlciwgZm9yIGNvdmVyYWdlIGFuZCB0byBndWlkZSB0aGUgZnV6emVyLCBpbmNsdWRpbmcgdGhlbSBtYWtlcyBzZW5zZS5cblxuQWZ0ZXIgc29tZSBtb3JlIHRob3VnaHQsIEkndmUgZGVjaWRlZCB0byBpbmNsdWRlIGBrdm1fYXJjaF9zeW5jX2RpcnR5X2xvZ2AsIGl0J3MgYSBjcml0aWNhbCBmdW5jdGlvbiBmb3IgZGlydHkgbG9nIHN5bmNocm9uaXphdGlvbi4gTm93LCBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gIGlzIGFsc28gYSBjcml0aWNhbCBjb21wb25lbnQgdG8gZnV6ei4gQXZvaWRpbmcgYGt2bV9oYW5kbGVfZ3Vlc3RfYWJvcnRgIGFzIGl0J3MgbGlrZWx5IGEgaG90LXBhdGggZnVuY3Rpb24gYW5kIG1pZ2h0IGJlIGxlc3MgcHJvZml0YWJsZSBmb3IgZnV6emluZy5cblxuTXkgcmVhc29uaW5nIGlzIHRoaXM6IFRoaXMgcGF0Y2ggZnVuZGFtZW50YWxseSBjaGFuZ2VzIGhvdyBkaXJ0eSBwYWdlIGxvZ2dpbmcgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IHdvcmsgd2l0aGluIEtWTSBvbiBhcm02NC4gU2luY2UgdGhpcyBpcyBhbiBpbnRlZ3JhdGlvbiB0aGF0IHdpbGwgYmUgYWNjZXNzaWJsZSB0byB1c2Vyc3BhY2UgdmlhIHRoZSBLVk0gaW9jdGxzLCB0aGlzIGlzIHdvcnRoIGZ1enppbmcgYW5kIGluY2x1ZGluZyB0aGlzIGNyaXRpY2FsIGNvbXBvbmVudCB3aWxsIGhlbHAuXG5cblNvLCBoZXJlJ3MgbXkgcGxhbiB0byBjYWxsIGBzZXQtcmVzdWx0c2A6XG5cbmBXb3J0aEZ1enppbmc6IHRydWVgXG5gRm9jdXNTeW1ib2xzYDpcbi0ga3ZtX2FybV92Y3B1X2FsbG9jX2hkYnNzXG4tIGt2bV9hcm1fdmNwdV9mcmVlX2hkYnNzXG4tIGt2bV9mbHVzaF9oZGJzc19idWZmZXJcbi0ga3ZtX2hhbmRsZV9oZGJzc19mYXVsdFxuLSBrdm1fYXJtX2VuYWJsZV9oZGJzc19nbG9iYWxcbi0ga3ZtX2FybV9kaXNhYmxlX2hkYnNzX2dsb2JhbFxuLSBrdm1fYXJtX2hkYnNzX29uX2RpcnR5X2xvZ2dpbmdfY2hhbmdlXG4tIGt2bV9hcmNoX3N5bmNfZGlydHlfbG9nXG5gRW5hYmxlQ29uZmlnc2A6XG4tIEtWTVxuXG5JJ20gY29uZmlkZW50IHRoaXMgaXMgdGhlIHJpZ2h0IGFwcHJvYWNoIHRvIGVuc3VyZSB0aGlzIHBhdGNoIGdldHMgdGhvcm91Z2ggZnV6emluZyBjb3ZlcmFnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2NjEsIk91dHB1dFRva2VucyI6MjA2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMyNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjEyOjIxLjM5ODM2OTU3OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg0Mzk3OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcm1fdmNwdV9hbGxvY19oZGJzc1wiLFxuICAgIFwia3ZtX2FybV92Y3B1X2ZyZWVfaGRic3NcIixcbiAgICBcImt2bV9mbHVzaF9oZGJzc19idWZmZXJcIixcbiAgICBcImt2bV9oYW5kbGVfaGRic3NfZmF1bHRcIixcbiAgICBcImt2bV9hcm1fZW5hYmxlX2hkYnNzX2dsb2JhbFwiLFxuICAgIFwia3ZtX2FybV9kaXNhYmxlX2hkYnNzX2dsb2JhbFwiLFxuICAgIFwia3ZtX2FybV9oZGJzc19vbl9kaXJ0eV9sb2dnaW5nX2NoYW5nZVwiLFxuICAgIFwia3ZtX2FyY2hfc3luY19kaXJ0eV9sb2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIEhhcmR3YXJlIERpcnR5IHN0YXRlIHRyYWNraW5nIHN0cnVjdHVyZSAoSERCU1MpIHN1cHBvcnQgZm9yIEtWTSBvbiBhcm02NC4gSXQgbW9kaWZpZXMgY29yZSBLVk0gbG9naWMgZm9yIGRpcnR5IHBhZ2UgbG9nZ2luZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyBhbmQgZ3Vlc3QgZXhlY3V0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcm1fdmNwdV9hbGxvY19oZGJzc1wiLFxuICAgIFwia3ZtX2FybV92Y3B1X2ZyZWVfaGRic3NcIixcbiAgICBcImt2bV9mbHVzaF9oZGJzc19idWZmZXJcIixcbiAgICBcImt2bV9oYW5kbGVfaGRic3NfZmF1bHRcIixcbiAgICBcImt2bV9hcm1fZW5hYmxlX2hkYnNzX2dsb2JhbFwiLFxuICAgIFwia3ZtX2FybV9kaXNhYmxlX2hkYnNzX2dsb2JhbFwiLFxuICAgIFwia3ZtX2FybV9oZGJzc19vbl9kaXJ0eV9sb2dnaW5nX2NoYW5nZVwiLFxuICAgIFwia3ZtX2FyY2hfc3luY19kaXJ0eV9sb2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIEhhcmR3YXJlIERpcnR5IHN0YXRlIHRyYWNraW5nIHN0cnVjdHVyZSAoSERCU1MpIHN1cHBvcnQgZm9yIEtWTSBvbiBhcm02NC4gSXQgbW9kaWZpZXMgY29yZSBLVk0gbG9naWMgZm9yIGRpcnR5IHBhZ2UgbG9nZ2luZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyBhbmQgZ3Vlc3QgZXhlY3V0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflownl6gp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-10 05:55:22 +0000 UTC FinishedAt: 2026-07-10 06:12:23 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "a635d6748234582ea287c5ffeae28b9b23f91c7e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "a635d6748234582ea287c5ffeae28b9b23f91c7e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "d38cd915-886e-41cd-b9c2-e092642c5396" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_arm_vcpu_alloc_hdbss", "kvm_arm_vcpu_free_hdbss", "kvm_flush_hdbss_buffer", "kvm_handle_hdbss_fault", "kvm_arm_enable_hdbss_global", "kvm_arm_disable_hdbss_global", "kvm_arm_hdbss_on_dirty_logging_change", "kvm_arch_sync_dirty_log" ], "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+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcm1fdmNwdV9hbGxvY19oZGJzcyYjMzQ7LAogICAgJiMzNDtrdm1fYXJtX3ZjcHVfZnJlZV9oZGJzcyYjMzQ7LAogICAgJiMzNDtrdm1fZmx1c2hfaGRic3NfYnVmZmVyJiMzNDssCiAgICAmIzM0O2t2bV9oYW5kbGVfaGRic3NfZmF1bHQmIzM0OywKICAgICYjMzQ7a3ZtX2FybV9lbmFibGVfaGRic3NfZ2xvYmFsJiMzNDssCiAgICAmIzM0O2t2bV9hcm1fZGlzYWJsZV9oZGJzc19nbG9iYWwmIzM0OywKICAgICYjMzQ7a3ZtX2FybV9oZGJzc19vbl9kaXJ0eV9sb2dnaW5nX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9zeW5jX2RpcnR5X2xvZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIEhhcmR3YXJlIERpcnR5IHN0YXRlIHRyYWNraW5nIHN0cnVjdHVyZSAoSERCU1MpIHN1cHBvcnQgZm9yIEtWTSBvbiBhcm02NC4gSXQgbW9kaWZpZXMgY29yZSBLVk0gbG9naWMgZm9yIGRpcnR5IHBhZ2UgbG9nZ2luZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyBhbmQgZ3Vlc3QgZXhlY3V0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjEyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMGJiYTNiOTE1YTFkYmM4N2QyOTIwNDI3NWIxNTU0NWM3MWNhMmZkY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDEwIDA2OjEyOjAyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmhcbmluZGV4IGE1Nzg3MGZhOTZkYjViLi5iZGZhYjA4NmZkOTQ1MyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaFxuQEAgLTg2Myw2ICYjNDM7ODYzLDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzeXN0ZW1fc3VwcG9ydHNfaGFmdCh2b2lkKVxuIFx0cmV0dXJuIGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFGVCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc3lzdGVtX3N1cHBvcnRzX2hkYnNzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfSERCU1MpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBzeXN0ZW1fc3VwcG9ydHNfbXBhbSh2b2lkKVxuIHtcbiBcdHJldHVybiBhbHRlcm5hdGl2ZV9oYXNfY2FwX3VubGlrZWx5KEFSTTY0X01QQU0pO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZXNyLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2Vzci5oXG5pbmRleCA4MWMxNzMyMGE1ODhkOS4uMmU2YjY3OWI1OTA4MDggMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2Vzci5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2Vzci5oXG5AQCAtNDM3LDYgJiM0Mzs0MzcsMTEgQEBcbiAjaWZuZGVmIF9fQVNTRU1CTEVSX19cbiAjaW5jbHVkZSBcdTAwM2Nhc20vdHlwZXMuaFx1MDAzZVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgZXNyX2lzczJfaXNfaGRic3NmKHVuc2lnbmVkIGxvbmcgZXNyKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIEVTUl9FTHhfSVNTMihlc3IpIFx1MDAyNiBFU1JfRUx4X0hEQlNTRjtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZXNyX2Jya19jb21tZW50KHVuc2lnbmVkIGxvbmcgZXNyKVxuIHtcbiBcdHJldHVybiBlc3IgXHUwMDI2IEVTUl9FTHhfQlJLNjRfSVNTX0NPTU1FTlRfTUFTSztcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9kaXJ0eV9iaXQuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2RpcnR5X2JpdC5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmE0Y2RhOGNkYWIyNDcyXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9kaXJ0eV9iaXQuaFxuQEAgLTAsMCAmIzQzOzEsMjkgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuJiM0MzsvKlxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQVJNIEx0ZC5cbiYjNDM7ICogQXV0aG9yOiBMZW9uYXJkbyBCcmFzIFx1MDAzY2xlby5icmFzQGFybS5jb21cdTAwM2VcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9fQVJNNjRfS1ZNX0RJUlRZX0JJVF9IX19cbiYjNDM7I2RlZmluZSBfX0FSTTY0X0tWTV9ESVJUWV9CSVRfSF9fXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX3BndGFibGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2Nhc20vc3lzcmVnLmhcdTAwM2VcbiYjNDM7XG4mIzQzOy8qIEhEQlNTIGVudHJ5IGZpZWxkIGRlZmluaXRpb25zICovXG4mIzQzOyNkZWZpbmUgSERCU1NfRU5UUllfVkFMSURcdEJJVCgwKVxuJiM0MzsjZGVmaW5lIEhEQlNTX0VOVFJZX1RUV0xfU0hJRlQgKDEpXG4mIzQzOyNkZWZpbmUgSERCU1NfRU5UUllfVFRXTF9NQVNLIChHRU5NQVNLKDMsIDEpKVxuJiM0MzsjZGVmaW5lIEhEQlNTX0VOVFJZX1RUV0woeCkgXFxcbiYjNDM7XHQoKCh4KSBcdTAwM2NcdTAwM2MgSERCU1NfRU5UUllfVFRXTF9TSElGVCkgXHUwMDI2IEhEQlNTX0VOVFJZX1RUV0xfTUFTSylcbiYjNDM7I2RlZmluZSBIREJTU19FTlRSWV9UVFdMX1JFU1YgSERCU1NfRU5UUllfVFRXTCgtNClcbiYjNDM7I2RlZmluZSBIREJTU19FTlRSWV9JUEFcdEdFTk1BU0tfVUxMKDU1LCAxMilcbiYjNDM7XG4mIzQzO2ludCBrdm1fYXJtX3ZjcHVfYWxsb2NfaGRic3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xuJiM0Mzt2b2lkIGt2bV9hcm1fdmNwdV9mcmVlX2hkYnNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4mIzQzO3ZvaWQga3ZtX2ZsdXNoX2hkYnNzX2J1ZmZlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuJiM0MztpbnQga3ZtX2hhbmRsZV9oZGJzc19mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuJiM0Mzt2b2lkIGt2bV9hcm1faGRic3Nfb25fZGlydHlfbG9nZ2luZ19jaGFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBpbnQgbnJfbWVtc2xvdHNfbG9nZ2luZyk7XG4mIzQzO3ZvaWQga3ZtX2FybV9kaXNhYmxlX2hkYnNzX2dsb2JhbChzdHJ1Y3Qga3ZtICprdm0pO1xuJiM0MztcbiYjNDM7I2VuZGlmIC8qIF9fQVJNNjRfS1ZNX0RJUlRZX0JJVF9IX18gKi9cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IGJhZTJjNGY5MmVmNWMwLi5jZWNmYjg4NGE2NGZhNyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtNTUsNiAmIzQzOzU1LDcgQEBcbiAjZGVmaW5lIEtWTV9SRVFfR1VFU1RfSFlQX0lSUV9QRU5ESU5HXHRLVk1fQVJDSF9SRVEoOSlcbiAjZGVmaW5lIEtWTV9SRVFfTUFQX0wxX1ZOQ1JfRUwyXHRcdEtWTV9BUkNIX1JFUSgxMClcbiAjZGVmaW5lIEtWTV9SRVFfVkdJQ19QUk9DRVNTX1VQREFURVx0S1ZNX0FSQ0hfUkVRKDExKVxuJiM0MzsjZGVmaW5lIEtWTV9SRVFfRkxVU0hfSERCU1NcdFx0XHRLVk1fQVJDSF9SRVEoMTIpXG4gXG4gI2RlZmluZSBLVk1fRElSVFlfTE9HX01BTlVBTF9DQVBTICAgKEtWTV9ESVJUWV9MT0dfTUFOVUFMX1BST1RFQ1RfRU5BQkxFIHwgXFxcbiBcdFx0XHRcdCAgICAgS1ZNX0RJUlRZX0xPR19JTklUSUFMTFlfU0VUKVxuQEAgLTQyMCw2ICYjNDM7NDIxLDEwIEBAIHN0cnVjdCBrdm1fYXJjaCB7XG4gXHQgKi9cbiBcdHN0cnVjdCBrdm1fcHJvdGVjdGVkX3ZtIHBrdm07XG4gXG4mIzQzO1x0LyogSERCU1M6IHBlci1WTSBkaXJ0eSB0cmFja2luZyBzdGF0ZSAqL1xuJiM0MztcdGJvb2wgZW5hYmxlX2hkYnNzO1xuJiM0MztcdHVuc2lnbmVkIGludCBoZGJzc19vcmRlcjtcbiYjNDM7XG4gI2lmZGVmIENPTkZJR19QVERVTVBfU1RBR0UyX0RFQlVHRlNcbiBcdC8qIE5lc3RlZCB2aXJ0dWFsaXphdGlvbiBpbmZvICovXG4gXHRzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX252X2RlbnRyeTtcbkBAIC04MzgsNiAmIzQzOzg0MywxMiBAQCBzdHJ1Y3QgdmNwdV9yZXNldF9zdGF0ZSB7XG4gXHRib29sXHRcdHJlc2V0O1xuIH07XG4gXG4mIzQzO3N0cnVjdCB2Y3B1X2hkYnNzX3N0YXRlIHtcbiYjNDM7XHRwaHlzX2FkZHJfdCBiYXNlX3BoeXM7ICAgLyogZm9yIG1lbW9yeSBmcmVlICovXG4mIzQzO1x0dTY0IGhkYnNzYnJfZWwyOyAgICAgICAgIC8qIGxvYWQgZGlyZWN0bHkgKi9cbiYjNDM7XHR1NjQgaGRic3Nwcm9kX2VsMjsgICAgICAgLyogc2F2ZSBkaXJlY3RseSAqL1xuJiM0Mzt9O1xuJiM0MztcbiBzdHJ1Y3Qgdm5jcl90bGI7XG4gXG4gc3RydWN0IGt2bV92Y3B1X2FyY2gge1xuQEAgLTk0NSw2ICYjNDM7OTU2LDkgQEAgc3RydWN0IGt2bV92Y3B1X2FyY2gge1xuIFxuIFx0LyogSHlwLXJlYWRhYmxlIGNvcHkgb2Yga3ZtX3ZjcHU6OnBpZCAqL1xuIFx0cGlkX3QgcGlkO1xuJiM0MztcbiYjNDM7XHQvKiBIREJTUyByZWdpc3RlcnMgaW5mbyAqL1xuJiM0MztcdHN0cnVjdCB2Y3B1X2hkYnNzX3N0YXRlIGhkYnNzO1xuIH07XG4gXG4gLypcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmhcbmluZGV4IDQxYTg2ODc5MzhlYjZiLi41ZTBmYWM0YmZhNTM2OSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX3BndGFibGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGd0YWJsZS5oXG5AQCAtOTMsNiAmIzQzOzkzLDggQEAgdHlwZWRlZiB1NjQga3ZtX3B0ZV90O1xuIFxuICNkZWZpbmUgS1ZNX1BURV9MRUFGX0FUVFJfSElfUzJfWE5cdEdFTk1BU0soNTQsIDUzKVxuIFxuJiM0MzsjZGVmaW5lIEtWTV9QVEVfTEVBRl9BVFRSX0hJX1MyX0RCTVx0QklUKDUxKVxuJiM0MztcbiAjZGVmaW5lIEtWTV9QVEVfTEVBRl9BVFRSX0hJX1MxX0dQXHRCSVQoNTApXG4gXG4gI2RlZmluZSBLVk1fUFRFX0xFQUZfQVRUUl9TMl9QRVJNU1x0KEtWTV9QVEVfTEVBRl9BVFRSX0xPX1MyX1MyQVBfUiB8IFxcXG5AQCAtMjQ5LDEwICYjNDM7MjUxLDEyIEBAIHN0cnVjdCBrdm1fcGd0YWJsZV9tbV9vcHMge1xuICAqIGVudW0ga3ZtX3BndGFibGVfc3RhZ2UyX2ZsYWdzIC0gU3RhZ2UtMiBwYWdlLXRhYmxlIGZsYWdzLlxuICAqIEBLVk1fUEdUQUJMRV9TMl9JRE1BUDpcdE9ubHkgdXNlIGlkZW50aXR5IG1hcHBpbmdzLlxuICAqIEBLVk1fUEdUQUJMRV9TMl9BU19TMTpcdEZpbmFsIG1lbW9yeSBhdHRyaWJ1dGVzIGFyZSB0aGF0IG9mIFN0YWdlLTEuXG4mIzQzOyAqIEBLVk1fUEdUQUJMRV9TMl9EQk06XHRIYXJkd2FyZS1tYW5hZ2VkIERCTSBmb3Igd3JpdGFibGUgcGFnZXMuXG4gICovXG4gZW51bSBrdm1fcGd0YWJsZV9zdGFnZTJfZmxhZ3Mge1xuIFx0S1ZNX1BHVEFCTEVfUzJfSURNQVBcdFx0XHQ9IEJJVCgwKSxcbiBcdEtWTV9QR1RBQkxFX1MyX0FTX1MxXHRcdFx0PSBCSVQoMSksXG4mIzQzO1x0S1ZNX1BHVEFCTEVfUzJfREJNXHRcdFx0PSBCSVQoMiksXG4gfTtcbiBcbiAvKipcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N5c3JlZy5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNyZWcuaFxuaW5kZXggN2FhMDhkNTlkNDk0NDguLjEzNTRhNThjMzMxNjdiIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNyZWcuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNyZWcuaFxuQEAgLTEwMzksNiAmIzQzOzEwMzksMTcgQEBcbiBcbiAjZGVmaW5lIEdDU19DQVAoeClcdCgoKCh1bnNpZ25lZCBsb25nKXgpIFx1MDAyNiBHQ1NfQ0FQX0FERFJfTUFTSykgfCBcXFxuIFx0XHRcdFx0XHQgICAgICAgR0NTX0NBUF9WQUxJRF9UT0tFTilcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIERlZmluaXRpb25zIGZvciB0aGUgSERCU1MgZmVhdHVyZVxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBIREJTU19NQVhfT1JERVJcdFx0SERCU1NCUl9FTDJfU1pfMk1CXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEhEQlNTQlJfRUwyKGJhZGRyLCBzeilcdCgoKGJhZGRyKSBcdTAwMjYgSERCU1NCUl9FTDJfQkFERFJfTUFTSykgfCBcXFxuJiM0MztcdFx0XHRcdCBGSUVMRF9QUkVQKEhEQlNTQlJfRUwyX1NaX01BU0ssIHN6KSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgSERCU1NQUk9EX0lEWChwcm9kKVx0RklFTERfR0VUKEhEQlNTUFJPRF9FTDJfSU5ERVhfTUFTSywgcHJvZClcbiYjNDM7XG4gLypcbiAgKiBEZWZpbml0aW9ucyBmb3IgR0lDdjUgaW5zdHJ1Y3Rpb25zXG4gICovXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jIGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jXG5pbmRleCA5YTIyZGYwYzUxMjBmMy4uYWEzMjdlZWJhZjFjYTggMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuY1xuQEAgLTIxMzEsNiAmIzQzOzIxMzEsMTEgQEAgc3RhdGljIGJvb2wgaHZoZV9wb3NzaWJsZShjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksXG4gXHRyZXR1cm4gYXJtNjRfdGVzdF9zd19mZWF0dXJlX292ZXJyaWRlKEFSTTY0X1NXX0ZFQVRVUkVfT1ZFUlJJREVfSFZIRSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBoYXNfdmhlX2hkYnNzKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSwgaW50IGNvcGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gaXNfa2VybmVsX2luX2h5cF9tb2RlKCkgXHUwMDI2XHUwMDI2IGhhc19jcHVpZF9mZWF0dXJlKGVudHJ5LCBjb3BlKTtcbiYjNDM7fVxuJiM0MztcbiBib29sIGNwdV9zdXBwb3J0c19iYm1sMl9ub2Fib3J0KHZvaWQpXG4ge1xuIFx0LypcbkBAIC0yNzgxLDYgJiM0MzsyNzg2LDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyBhcm02NF9mZWF0dXJlc1tdID0ge1xuIFx0XHRBUk02NF9DUFVJRF9GSUVMRFMoSURfQUE2NE1NRlIxX0VMMSwgSEFGREJTLCBIQUZUKVxuIFx0fSxcbiAjZW5kaWZcbiYjNDM7XHR7XG4mIzQzO1x0XHQuZGVzYyA9IFwmIzM0O0hhcmR3YXJlIERpcnR5IHN0YXRlIHRyYWNraW5nIHN0cnVjdHVyZSAoSERCU1MpXCYjMzQ7LFxuJiM0MztcdFx0LnR5cGUgPSBBUk02NF9DUFVDQVBfU1lTVEVNX0ZFQVRVUkUsXG4mIzQzO1x0XHQuY2FwYWJpbGl0eSA9IEFSTTY0X0hBU19IREJTUyxcbiYjNDM7XHRcdC5tYXRjaGVzID0gaGFzX3ZoZV9oZGJzcyxcbiYjNDM7XHRcdEFSTTY0X0NQVUlEX0ZJRUxEUyhJRF9BQTY0TU1GUjFfRUwxLCBIQUZEQlMsIEhEQlNTKVxuJiM0MztcdH0sXG4gXHR7XG4gXHRcdC5kZXNjID0gXCYjMzQ7Q1JDMzIgaW5zdHJ1Y3Rpb25zXCYjMzQ7LFxuIFx0XHQuY2FwYWJpbGl0eSA9IEFSTTY0X0hBU19DUkMzMixcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9NYWtlZmlsZSBiL2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlXG5pbmRleCA1OTYxMmQyZjI3N2MxZC4uZWMyNzQ5YWY2NGZhNGMgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vTWFrZWZpbGVcbkBAIC0xOCw2ICYjNDM7MTgsNyBAQCBrdm0teSAmIzQzOz0gYXJtLm8gbW11Lm8gbW1pby5vIHBzY2kubyBoeXBlcmNhbGxzLm8gcHZ0aW1lLm8gXFxcbiBcdCBndWVzdC5vIGRlYnVnLm8gcmVzZXQubyBzeXNfcmVncy5vIHN0YWNrdHJhY2UubyBcXFxuIFx0IHZnaWMtc3lzLXJlZy12My5vIGZwc2ltZC5vIHBrdm0ubyBcXFxuIFx0IGFyY2hfdGltZXIubyB0cm5nLm8gdm1pZC5vIGVtdWxhdGUtbmVzdGVkLm8gbmVzdGVkLm8gYXQubyBcXFxuJiM0MztcdCBkaXJ0eV9iaXQubyBcXFxuIFx0IHZnaWMvdmdpYy5vIHZnaWMvdmdpYy1pbml0Lm8gXFxcbiBcdCB2Z2ljL3ZnaWMtaXJxZmQubyB2Z2ljL3ZnaWMtdjIubyBcXFxuIFx0IHZnaWMvdmdpYy12My5vIHZnaWMvdmdpYy12NC5vIFxcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vYXJtLmMgYi9hcmNoL2FybTY0L2t2bS9hcm0uY1xuaW5kZXggNTBhZGZmZjc1YmU4MmUuLjUzNmQ5NDc5OWJhOGY5IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vYXJtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL2FybS5jXG5AQCAtMzgsNiAmIzQzOzM4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX2FzbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9lbXVsYXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX2h5cC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fZGlydHlfYml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX21tdS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9uZXN0ZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fcGt2bS5oXHUwMDNlXG5AQCAtMzE2LDYgJiM0MzszMTcsMTQgQEAgdm9pZCBrdm1fYXJjaF9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSlcbiBcdGlmIChpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSlcbiBcdFx0cGt2bV9kZXN0cm95X2h5cF92bShrdm0pO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogVXNlcnNwYWNlIG1heSBkZXN0cm95IHRoZSBWTSB3aXRob3V0IGRpc2FibGluZyBkaXJ0eSBsb2dnaW5nLFxuJiM0MztcdCAqIHNvIHRoZSBhdXRvLWRpc2FibGUgcGF0aCBpcyBuZXZlciByZWFjaGVkLiBGb3JjZSBkaXNhYmxlIEhEQlNTXG4mIzQzO1x0ICogaGVyZSB0byBlbnN1cmUgdkNQVSBidWZmZXJzIGFyZSBmcmVlZCBhbmQgcHJldmVudCBtZW1vcnkgbGVha3MuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGt2bS1cdTAwM2VhcmNoLmVuYWJsZV9oZGJzcylcbiYjNDM7XHRcdGt2bV9hcm1fZGlzYWJsZV9oZGJzc19nbG9iYWwoa3ZtKTtcbiYjNDM7XG4gXHRrdm1fdW5pbml0X3N0YWdlMl9tbXUoa3ZtKTtcbiBcdGt2bV9kZXN0cm95X21waWRyX2RhdGEoa3ZtKTtcbiBcbkBAIC01NjUsNiAmIzQzOzU3NCwxMiBAQCBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKGVycilcbiBcdFx0a3ZtX3ZnaWNfdmNwdV9kZXN0cm95KHZjcHUpO1xuIFxuJiM0MztcdGlmICh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmVuYWJsZV9oZGJzcykge1xuJiM0MztcdFx0ZXJyID0ga3ZtX2FybV92Y3B1X2FsbG9jX2hkYnNzKHZjcHUsIHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guaGRic3Nfb3JkZXIpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0a3ZtX3ZnaWNfdmNwdV9kZXN0cm95KHZjcHUpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC03NDgsNiAmIzQzOzc2Myw5IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRrdm1fdmNwdV9wdXRfaHdfbW11KHZjcHUpO1xuIFx0a3ZtX2FybV92bWlkX2NsZWFyX2FjdGl2ZSgpO1xuIFxuJiM0MztcdGlmICh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmVuYWJsZV9oZGJzcylcbiYjNDM7XHRcdGt2bV9mbHVzaF9oZGJzc19idWZmZXIodmNwdSk7XG4mIzQzO1xuIFx0dmNwdV9jbGVhcl9vbl91bnN1cHBvcnRlZF9jcHUodmNwdSk7XG4gXHR2Y3B1LVx1MDAzZWNwdSA9IC0xO1xuIH1cbkBAIC0xMTUwLDYgJiM0MzsxMTY4LDkgQEAgc3RhdGljIGludCBjaGVja192Y3B1X3JlcXVlc3RzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0aWYgKGt2bV9kaXJ0eV9yaW5nX2NoZWNrX3JlcXVlc3QodmNwdSkpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXG4mIzQzO1x0XHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9GTFVTSF9IREJTUywgdmNwdSkpXG4mIzQzO1x0XHRcdGt2bV9mbHVzaF9oZGJzc19idWZmZXIodmNwdSk7XG4mIzQzO1xuIFx0XHRjaGVja19uZXN0ZWRfdmNwdV9yZXF1ZXN0cyh2Y3B1KTtcbiBcdH1cbiBcbkBAIC0xOTY0LDcgJiM0MzsxOTg1LDE1IEBAIGxvbmcga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxuIFxuIHZvaWQga3ZtX2FyY2hfc3luY19kaXJ0eV9sb2coc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90KVxuIHtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEZsdXNoIGFsbCBDUFVzJiMzOTsgZGlydHkgbG9nIGJ1ZmZlcnMgdG8gdGhlIGRpcnR5X2JpdG1hcC4gIENhbGxlZFxuJiM0MztcdCAqIGJlZm9yZSByZXBvcnRpbmcgZGlydHlfYml0bWFwIHRvIHVzZXJzcGFjZS4gU2VuZCBhIHJlcXVlc3Qgd2l0aFxuJiM0MztcdCAqIEtWTV9SRVFVRVNUX1dBSVQgdG8gZmx1c2ggYnVmZmVyIHN5bmNocm9ub3VzbHkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFrdm0tXHUwMDNlYXJjaC5lbmFibGVfaGRic3MpXG4mIzQzO1x0XHRyZXR1cm47XG4gXG4mIzQzO1x0a3ZtX21ha2VfYWxsX2NwdXNfcmVxdWVzdChrdm0sIEtWTV9SRVFfRkxVU0hfSERCU1MgfCBLVk1fUkVRVUVTVF9XQUlUKTtcbiB9XG4gXG4gc3RhdGljIGludCBrdm1fdm1faW9jdGxfc2V0X2RldmljZV9hZGRyKHN0cnVjdCBrdm0gKmt2bSxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYyBiL2FyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmM1YmY4NjZjMjNlZjJiXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuY1xuQEAgLTAsMCAmIzQzOzEsMjE5IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IEFSTSBMdGQuXG4mIzQzOyAqIEF1dGhvcjogTGVvbmFyZG8gQnJhcyBcdTAwM2NsZW8uYnJhc0Bhcm0uY29tXHUwMDNlXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9kaXJ0eV9iaXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX21tdS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9zeXNyZWcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9nZnAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rY29uZmlnLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuJiM0MztcbiYjNDM7aW50IGt2bV9hcm1fdmNwdV9hbGxvY19oZGJzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBvcmRlcilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwYWdlICpoZGJzc19wZyA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdGlmICh2Y3B1LVx1MDAzZWFyY2guaGRic3MuaGRic3Nicl9lbDIgfHwgIXN5c3RlbV9zdXBwb3J0c19oZGJzcygpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChvcmRlciBcdTAwM2UgSERCU1NfTUFYX09SREVSKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGhkYnNzX3BnID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTF9BQ0NPVU5ULCBvcmRlcik7XG4mIzQzO1x0aWYgKCFoZGJzc19wZylcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHR2Y3B1LVx1MDAzZWFyY2guaGRic3MgPSAoc3RydWN0IHZjcHVfaGRic3Nfc3RhdGUpIHtcbiYjNDM7XHRcdC5iYXNlX3BoeXMgPSBwYWdlX3RvX3BoeXMoaGRic3NfcGcpLFxuJiM0MztcdFx0LmhkYnNzYnJfZWwyID0gSERCU1NCUl9FTDIocGFnZV90b19waHlzKGhkYnNzX3BnKSwgb3JkZXIpLFxuJiM0MztcdFx0LmhkYnNzcHJvZF9lbDIgPSAwLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGt2bV9hcm1fdmNwdV9mcmVlX2hkYnNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwYWdlICpoZGJzc19wZztcbiYjNDM7XG4mIzQzO1x0aWYgKCF2Y3B1LVx1MDAzZWFyY2guaGRic3MuaGRic3Nicl9lbDIpIHtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGhkYnNzX3BnID0gcGh5c190b19wYWdlKHZjcHUtXHUwMDNlYXJjaC5oZGJzcy5iYXNlX3BoeXMpO1xuJiM0MztcdGlmIChoZGJzc19wZylcbiYjNDM7XHRcdF9fZnJlZV9wYWdlcyhoZGJzc19wZyxcbiYjNDM7XHRcdCAgICAgRklFTERfR0VUKEhEQlNTQlJfRUwyX1NaX01BU0ssXG4mIzQzO1x0XHRcdCAgICAgICB2Y3B1LVx1MDAzZWFyY2guaGRic3MuaGRic3Nicl9lbDIpKTtcbiYjNDM7XG4mIzQzO1x0dmNwdS1cdTAwM2VhcmNoLmhkYnNzLmhkYnNzYnJfZWwyID0gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBrdm1fZmx1c2hfaGRic3NfYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7e1xuJiM0MztcdGludCBpZHgsIGN1cnJfaWR4O1xuJiM0MztcdHU2NCAqaGRic3NfYnVmO1xuJiM0MztcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuJiM0MztcbiYjNDM7XHRpZiAoIWt2bS1cdTAwM2VhcmNoLmVuYWJsZV9oZGJzcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Y3Vycl9pZHggPSBIREJTU1BST0RfSURYKHJlYWRfc3lzcmVnX3MoU1lTX0hEQlNTUFJPRF9FTDIpKTtcbiYjNDM7XG4mIzQzO1x0LyogRG8gbm90aGluZyBpZiBIREJTUyBidWZmZXIgaXMgZW1wdHkgb3IgYnJfZWwyIGlzIE5VTEwgKi9cbiYjNDM7XHRpZiAoY3Vycl9pZHggPT0gMCB8fCB2Y3B1LVx1MDAzZWFyY2guaGRic3MuaGRic3Nicl9lbDIgPT0gMClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aGRic3NfYnVmID0gcGFnZV9hZGRyZXNzKHBoeXNfdG9fcGFnZSh2Y3B1LVx1MDAzZWFyY2guaGRic3MuYmFzZV9waHlzKSk7XG4mIzQzO1x0aWYgKCFoZGJzc19idWYpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGd1YXJkKHdyaXRlX2xvY2tfaXJxc2F2ZSkoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlbW11X2xvY2spO1xuJiM0MztcdGZvciAoaWR4ID0gMDsgaWR4IFx1MDAzYyBjdXJyX2lkeDsgaWR4JiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTY0IGdwYTtcbiYjNDM7XG4mIzQzO1x0XHRncGEgPSBoZGJzc19idWZbaWR4XTtcbiYjNDM7XHRcdGlmICghKGdwYSBcdTAwMjYgSERCU1NfRU5UUllfVkFMSUQpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRncGEgXHUwMDI2PSBIREJTU19FTlRSWV9JUEE7XG4mIzQzO1x0XHRrdm1fdmNwdV9tYXJrX3BhZ2VfZGlydHkodmNwdSwgZ3BhIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIHJlc2V0IEhEQlNTIGluZGV4ICovXG4mIzQzO1x0d3JpdGVfc3lzcmVnX3MoMCwgU1lTX0hEQlNTUFJPRF9FTDIpO1xuJiM0MztcdHZjcHUtXHUwMDNlYXJjaC5oZGJzcy5oZGJzc3Byb2RfZWwyID0gMDtcbiYjNDM7XHRpc2IoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IGt2bV9oYW5kbGVfaGRic3NfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mzt7XG4mIzQzO1x0dTY0IHByb2Q7XG4mIzQzO1x0dTY0IGZzYztcbiYjNDM7XG4mIzQzO1x0cHJvZCA9IHJlYWRfc3lzcmVnX3MoU1lTX0hEQlNTUFJPRF9FTDIpO1xuJiM0MztcdGZzYyA9IEZJRUxEX0dFVChIREJTU1BST0RfRUwyX0ZTQ19NQVNLLCBwcm9kKTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChmc2MpIHtcbiYjNDM7XHRjYXNlIEhEQlNTUFJPRF9FTDJfRlNDX09LOlxuJiM0MztcdFx0LyogQnVmZmVyIGZ1bGwsIHNldCByZXF1ZXN0IHRvIGZsdXNoIG9uIG5leHQgdmNwdSBleGl0ICovXG4mIzQzO1x0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfRkxVU0hfSERCU1MsIHZjcHUpO1xuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1x0Y2FzZSBIREJTU1BST0RfRUwyX0ZTQ19FeHRlcm5hbEFib3J0OlxuJiM0MztcdGNhc2UgSERCU1NQUk9EX0VMMl9GU0NfR1BGOlxuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdC8qIFVua25vd24gZmF1bHQuICovXG4mIzQzO1x0XHRXQVJOX09OQ0UoMSxcbiYjNDM7XHRcdFx0ICBcJiMzNDtVbmV4cGVjdGVkIEhEQlNTIGZhdWx0IHR5cGUsIEZTQzogMHglbGx4IChwcm9kPTB4JWxseCwgdmNwdT0lZClcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgZnNjLCBwcm9kLCB2Y3B1LVx1MDAzZXZjcHVfaWQpO1xuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IGhkYnNzX2F1dG9fc2VsZWN0X29yZGVyKHN0cnVjdCBrdm0gKmt2bSlcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbnBhZ2VzID0gMDtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90O1xuJiM0MztcdGludCBia3Q7XG4mIzQzO1xuJiM0MztcdGt2bV9mb3JfZWFjaF9tZW1zbG90KG1lbXNsb3QsIGJrdCwga3ZtX21lbXNsb3RzKGt2bSkpXG4mIzQzO1x0XHRucGFnZXMgJiM0Mzs9IG1lbXNsb3QtXHUwMDNlbnBhZ2VzO1xuJiM0MztcbiYjNDM7XHRpZiAobnBhZ2VzIFx1MDAzYz0gMTYzODQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRlbHNlIGlmIChucGFnZXMgXHUwMDNjPSAyNjIxNDQpXG4mIzQzO1x0XHRyZXR1cm4gMztcbiYjNDM7XHRlbHNlIGlmIChucGFnZXMgXHUwMDNjPSA0MTk0MzA0KVxuJiM0MztcdFx0cmV0dXJuIDY7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cmV0dXJuIDk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEVuYWJsZSBIREJTUyBmb3IgYWxsIHZDUFVzIGluIHRoZSBWTS5cbiYjNDM7ICpcbiYjNDM7ICogQ2FsbGVkIGZyb20ga3ZtX2FybV9oZGJzc19vbl9kaXJ0eV9sb2dnaW5nX2NoYW5nZSgpIHdoaWNoIGlzIGludm9rZWRcbiYjNDM7ICogYnkga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oKSB1bmRlciBrdm0tXHUwMDNlc2xvdHNfbG9jay5cbiYjNDM7ICpcbiYjNDM7ICogSWYgYnVmZmVyIGFsbG9jYXRpb24gZmFpbHMsIEhEQlNTIHJlbWFpbnMgZGlzYWJsZWQgYW5kIGRpcnR5IHRyYWNraW5nXG4mIzQzOyAqIGZhbGxzIGJhY2sgdG8gdGhlIHRyYWRpdGlvbmFsIHNvZnR3YXJlLWJhc2VkIGFwcHJvYWNoIChQVEUgd3JpdGUtcHJvdGVjdFxuJiM0MzsgKiAmIzQzOyBzb2Z0d2FyZSBkaXJ0eSBtYXJraW5nKS4gVGhpcyBkb2VzIG5vdCBhZmZlY3QgY29ycmVjdG5lc3M7IGRpcnR5XG4mIzQzOyAqIGxvZ2dpbmcgcmVtYWlucyBmdW5jdGlvbmFsIHdpdGhvdXQgSERCU1MuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGt2bV9hcm1fZW5hYmxlX2hkYnNzX2dsb2JhbChzdHJ1Y3Qga3ZtICprdm0pXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgb3JkZXI7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuJiM0MztcbiYjNDM7XHRpZiAoIXN5c3RlbV9zdXBwb3J0c19oZGJzcygpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChrdm0tXHUwMDNlZGlydHlfcmluZ19zaXplKSAvKiBEb24mIzM5O3Qgc3VwcG9ydCBIREJTUyBpbiBkaXJ0eSByaW5nIG1vZGUgKi9cbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAoa3ZtLVx1MDAzZWFyY2guZW5hYmxlX2hkYnNzKSAvKiBBbHJlYWR5IE9uICovXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LyogVHVybiBpdCBvbiAqL1xuJiM0MztcdG9yZGVyID0gaGRic3NfYXV0b19zZWxlY3Rfb3JkZXIoa3ZtKTtcbiYjNDM7XHRrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pIHtcbiYjNDM7XHRcdGVyciA9IGt2bV9hcm1fdmNwdV9hbGxvY19oZGJzcyh2Y3B1LCBvcmRlcik7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRnb3RvIGVycm9yX2FsbG9jO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0a3ZtLVx1MDAzZWFyY2guZW5hYmxlX2hkYnNzID0gdHJ1ZTtcbiYjNDM7XHRrdm0tXHUwMDNlYXJjaC5tbXUudnRjciB8PSBWVENSX0VMMl9IRCB8IFZUQ1JfRUwyX0hEQlNTIHwgVlRDUl9FTDJfSEE7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogV2Ugc2hvdWxkIGtpY2sgdmNwdXMgb3V0IG9mIGd1ZXN0IG1vZGUgaGVyZSB0byBsb2FkIG5ld1xuJiM0MztcdCAqIHZ0Y3IgdmFsdWUgdG8gdnRjcl9lbDIgcmVnaXN0ZXIgd2hlbiByZS1lbnRlciBndWVzdCBtb2RlLlxuJiM0MztcdCAqL1xuJiM0MztcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSlcbiYjNDM7XHRcdGt2bV92Y3B1X2tpY2sodmNwdSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyb3JfYWxsb2M6XG4mIzQzO1x0a3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKVxuJiM0MztcdFx0aWYgKHZjcHUtXHUwMDNlYXJjaC5oZGJzcy5iYXNlX3BoeXMpXG4mIzQzO1x0XHRcdGt2bV9hcm1fdmNwdV9mcmVlX2hkYnNzKHZjcHUpO1xuJiM0MztcbiYjNDM7XHRwcl93YXJuX29uY2UoXCYjMzQ7a3ZtOiBmYWlsZWQgdG8gYWxsb2NhdGUgSERCU1MgYnVmZmVycyAob3JkZXI9JXUpLCBcJiMzNDtcbiYjNDM7XHRcdCAgICAgXCYjMzQ7ZmFsbGluZyBiYWNrIHRvIHNvZnR3YXJlIGRpcnR5IHRyYWNraW5nXFxuXCYjMzQ7LCBvcmRlcik7XG4mIzQzO1x0cmV0dXJuIC1FTk9NRU07XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQga3ZtX2FybV9kaXNhYmxlX2hkYnNzX2dsb2JhbChzdHJ1Y3Qga3ZtICprdm0pXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGk7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuJiM0MztcbiYjNDM7XHRpZiAoIWt2bS1cdTAwM2VhcmNoLmVuYWJsZV9oZGJzcykgLyogQWxyZWFkeSBPZmYgKi9cbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0LyogVHVybiBpdCBvZmYgKi9cbiYjNDM7XHRrdm0tXHUwMDNlYXJjaC5tbXUudnRjciBcdTAwMjY9IH4oVlRDUl9FTDJfSEQgfCBWVENSX0VMMl9IREJTUyB8IFZUQ1JfRUwyX0hBKTtcbiYjNDM7XG4mIzQzO1x0a3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKVxuJiM0MztcdFx0a3ZtX2FybV92Y3B1X2ZyZWVfaGRic3ModmNwdSk7XG4mIzQzO1xuJiM0MztcdGt2bS1cdTAwM2VhcmNoLmVuYWJsZV9oZGJzcyA9IGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGt2bV9hcm1faGRic3Nfb25fZGlydHlfbG9nZ2luZ19jaGFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBpbnQgbnJfbWVtc2xvdHNfbG9nZ2luZylcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQ2FsbGVkIGZyb20ga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oKSB1bmRlciBrdm0tXHUwMDNlc2xvdHNfbG9jay5cbiYjNDM7XHQgKiBBbGwgc3RhdGUgdHJhbnNpdGlvbnMgYXJlIHNlcmlhbGl6ZWQgYnkgc2xvdHNfbG9jay5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAobnJfbWVtc2xvdHNfbG9nZ2luZyBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgIWt2bS1cdTAwM2VhcmNoLmVuYWJsZV9oZGJzcylcbiYjNDM7XHRcdGt2bV9hcm1fZW5hYmxlX2hkYnNzX2dsb2JhbChrdm0pO1xuJiM0MztcdGVsc2UgaWYgKG5yX21lbXNsb3RzX2xvZ2dpbmcgPT0gMCBcdTAwMjZcdTAwMjYga3ZtLVx1MDAzZWFyY2guZW5hYmxlX2hkYnNzKVxuJiM0MztcdFx0a3ZtX2FybV9kaXNhYmxlX2hkYnNzX2dsb2JhbChrdm0pO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuYyBiL2FyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmNcbmluZGV4IDkxYTdkZmFkNjY4NjYwLi4yMWVjNDU2ZWNjNDExYSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmNcbkBAIC03MzEsOSAmIzQzOzczMSwyMyBAQCBzdGF0aWMgaW50IHN0YWdlMl9zZXRfcHJvdF9hdHRyKHN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0LCBlbnVtIGt2bV9wZ3RhYmxlX3Byb3QgcFxuIFx0aWYgKHByb3QgXHUwMDI2IEtWTV9QR1RBQkxFX1BST1RfUilcbiBcdFx0YXR0ciB8PSBLVk1fUFRFX0xFQUZfQVRUUl9MT19TMl9TMkFQX1I7XG4gXG4tXHRpZiAocHJvdCBcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9XKVxuJiM0MztcdGlmIChwcm90IFx1MDAyNiBLVk1fUEdUQUJMRV9QUk9UX1cpIHtcbiBcdFx0YXR0ciB8PSBLVk1fUFRFX0xFQUZfQVRUUl9MT19TMl9TMkFQX1c7XG4gXG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogU2V0IERCTSBiaXQgZm9yIHdyaXRhYmxlIG5vbi1kZXZpY2UgcGFnZXMgaWYgdGhlIHBhZ2UtdGFibGVcbiYjNDM7XHRcdCAqIGhhcyBLVk1fUEdUQUJMRV9TMl9EQk0gZmxhZyAoc3lzdGVtIHN1cHBvcnRzIEhEQlNTKS5cbiYjNDM7XHRcdCAqXG4mIzQzO1x0XHQgKiBGb3Igc3RhZ2UgMiB0cmFuc2xhdGlvbnMgdXNpbmcgSW5kaXJlY3QgcGVybWlzc2lvbnMsIGlmIHRoZVxuJiM0MztcdFx0ICogRWZmZWN0aXZlIHZhbHVlIG9mIFZUQ1JfRUwyLkhEIGlzIDAsIHRoZW4gZGlydHkgc3RhdGUgaXNcbiYjNDM7XHRcdCAqIG1hbmFnZWQgYnkgc29mdHdhcmUuIEhhcmR3YXJlIG9ubHkgdXBkYXRlcyB0aGUgZGlydHkgc3RhdGVcbiYjNDM7XHRcdCAqIHdoZW4gVlRDUl9FTDIuSEQ9MSAoSERCU1MgZW5hYmxlZCkuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmICgocGd0LVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fUEdUQUJMRV9TMl9EQk0pIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICEocHJvdCBcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9ERVZJQ0UpKVxuJiM0MztcdFx0XHRhdHRyIHw9IEtWTV9QVEVfTEVBRl9BVFRSX0hJX1MyX0RCTTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKCFrdm1fbHBhMl9pc19lbmFibGVkKCkpXG4gXHRcdGF0dHIgfD0gRklFTERfUFJFUChLVk1fUFRFX0xFQUZfQVRUUl9MT19TMl9TSCwgc2gpO1xuIFxuQEAgLTEzNjcsOSAmIzQzOzEzODEsMjYgQEAgaW50IGt2bV9wZ3RhYmxlX3N0YWdlMl9yZWxheF9wZXJtcyhzdHJ1Y3Qga3ZtX3BndGFibGUgKnBndCwgdTY0IGFkZHIsXG4gXHRpZiAocHJvdCBcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9SKVxuIFx0XHRzZXQgfD0gS1ZNX1BURV9MRUFGX0FUVFJfTE9fUzJfUzJBUF9SO1xuIFxuLVx0aWYgKHByb3QgXHUwMDI2IEtWTV9QR1RBQkxFX1BST1RfVylcbiYjNDM7XHRpZiAocHJvdCBcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9XKSB7XG4gXHRcdHNldCB8PSBLVk1fUFRFX0xFQUZfQVRUUl9MT19TMl9TMkFQX1c7XG4gXG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogTm8gREVWSUNFIGZpbHRlciBuZWVkZWQgaGVyZTogcmVsYXhfcGVybXMgaXMgb25seSBjYWxsZWRcbiYjNDM7XHRcdCAqIG9uIEZTQ19QRVJNIGZhdWx0cy4gRGV2aWNlIHBhZ2VzIGFsd2F5cyBnZXQgZnVsbCBSVyBmcm9tXG4mIzQzO1x0XHQgKiBpbml0aWFsIG1hcHBpbmcgYW5kIGFyZSBuZXZlciB3cml0ZS1wcm90ZWN0ZWQgZHVyaW5nXG4mIzQzO1x0XHQgKiBtaWdyYXRpb24sIHNvIHRoZXkgbmV2ZXIgdHJpZ2dlciBhIHBlcm1pc3Npb24gZmF1bHQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChwZ3QtXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9QR1RBQkxFX1MyX0RCTSlcbiYjNDM7XHRcdFx0c2V0IHw9IEtWTV9QVEVfTEVBRl9BVFRSX0hJX1MyX0RCTTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIENsZWFyIERCTSBvbiBX4oaSUk8gZG93bmdyYWRlIHRvIHByZXZlbnQgaGFyZHdhcmUgZnJvbVxuJiM0MztcdFx0ICogc2lsZW50bHkgdXBncmFkaW5nIFJPJiM0MztEQk0gYmFjayB0byBXJiM0MztkaXJ0eSwgd2hpY2ggd291bGRcbiYjNDM7XHRcdCAqIGJ5cGFzcyBLVk0mIzM5O3Mgd3JpdGUgdHJhY2tpbmcgYW5kIGNhdXNlIGRhdGEgY29ycnVwdGlvbi5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0Y2xyIHw9IEtWTV9QVEVfTEVBRl9BVFRSX0hJX1MyX0RCTTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0ID0gc3RhZ2UyX3NldF94bl9hdHRyKHByb3QsIFx1MDAyNnhuKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guYyBiL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmNcbmluZGV4IGJiZTljZWJkM2Q5ZDU3Li5mZTcyOTQ0YmZkM2Q1YiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmNcbkBAIC0yMiw2ICYjNDM7MjIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fZW11bGF0ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9oeXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fbW11LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9kaXJ0eV9iaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9mcHNpbWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9kZWJ1Zy1tb25pdG9ycy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3Byb2Nlc3Nvci5oXHUwMDNlXG5AQCAtMjEzLDYgJiM0MzsyMTQsMTkgQEAgc3RhdGljIHZvaWQgX192Y3B1X3B1dF9kZWFjdGl2YXRlX3RyYXBzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIF9fbG9hZF9oZGJzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFrdm0tXHUwMDNlYXJjaC5lbmFibGVfaGRic3MpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHdyaXRlX3N5c3JlZ19zKHZjcHUtXHUwMDNlYXJjaC5oZGJzcy5oZGJzc2JyX2VsMiwgU1lTX0hEQlNTQlJfRUwyKTtcbiYjNDM7XHR3cml0ZV9zeXNyZWdfcyh2Y3B1LVx1MDAzZWFyY2guaGRic3MuaGRic3Nwcm9kX2VsMiwgU1lTX0hEQlNTUFJPRF9FTDIpO1xuJiM0MztcbiYjNDM7XHRpc2IoKTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIGt2bV92Y3B1X2xvYWRfdmhlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRob3N0X2RhdGFfcHRyKGhvc3RfY3R4dCktXHUwMDNlX19oeXBfcnVubmluZ192Y3B1ID0gdmNwdTtcbkBAIC0yMjAsNiAmIzQzOzIzNCw3IEBAIHZvaWQga3ZtX3ZjcHVfbG9hZF92aGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0X192Y3B1X2xvYWRfc3dpdGNoX3N5c3JlZ3ModmNwdSk7XG4gXHRfX3ZjcHVfbG9hZF9hY3RpdmF0ZV90cmFwcyh2Y3B1KTtcbiBcdF9fbG9hZF9zdGFnZTIodmNwdS1cdTAwM2VhcmNoLmh3X21tdSk7XG4mIzQzO1x0X19sb2FkX2hkYnNzKHZjcHUpO1xuIH1cbiBcbiB2b2lkIGt2bV92Y3B1X3B1dF92aGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL21tdS5jIGIvYXJjaC9hcm02NC9rdm0vbW11LmNcbmluZGV4IDZjOTQxYWFhMTBjNjM5Li40ODRmNDhkYWUwMDAzYyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9tbXUuY1xuQEAgLTE2LDYgJiM0MzsxNiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2NhY2hlZmx1c2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fYXJtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX21tdS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fZGlydHlfYml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX3BndGFibGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fcGt2bS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9hc20uaFx1MDAzZVxuQEAgLTEwMTQsNiAmIzQzOzEwMTUsOSBAQCBpbnQga3ZtX2luaXRfc3RhZ2UyX21tdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHVuc2lnbmVkIGxvbmcgdFxuIFx0aWYgKGVycilcbiBcdFx0Z290byBvdXRfZnJlZV9wZ3RhYmxlO1xuIFxuJiM0MztcdGlmIChzeXN0ZW1fc3VwcG9ydHNfaGRic3MoKSlcbiYjNDM7XHRcdHBndC1cdTAwM2VmbGFncyB8PSBLVk1fUEdUQUJMRV9TMl9EQk07XG4mIzQzO1xuIFx0bW11LVx1MDAzZXBndCA9IHBndDtcbiBcdGlmIChpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSlcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMTAyNyw4ICYjNDM7MTAzMSwxMiBAQCBpbnQga3ZtX2luaXRfc3RhZ2UyX21tdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHVuc2lnbmVkIGxvbmcgdFxuIFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSlcbiBcdFx0KnBlcl9jcHVfcHRyKG1tdS1cdTAwM2VsYXN0X3ZjcHVfcmFuLCBjcHUpID0gLTE7XG4gXG4tXHQgLyogVGhlIGVhZ2VyIHBhZ2Ugc3BsaXR0aW5nIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgKi9cbi1cdG1tdS1cdTAwM2VzcGxpdF9wYWdlX2NodW5rX3NpemUgPSBLVk1fQVJNX0VBR0VSX1NQTElUX0NIVU5LX1NJWkVfREVGQVVMVDtcbiYjNDM7XHQgLyogVGhlIGVhZ2VyIHBhZ2Ugc3BsaXR0aW5nIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgaWYgc3lzdGVtIGhhcyBubyBIREJTUyAqL1xuJiM0MztcdGlmIChzeXN0ZW1fc3VwcG9ydHNfaGRic3MoKSlcbiYjNDM7XHRcdG1tdS1cdTAwM2VzcGxpdF9wYWdlX2NodW5rX3NpemUgPSAyNTYgKiAxMDI0ICogUEFHRV9TSVpFO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdG1tdS1cdTAwM2VzcGxpdF9wYWdlX2NodW5rX3NpemUgPSBLVk1fQVJNX0VBR0VSX1NQTElUX0NIVU5LX1NJWkVfREVGQVVMVDtcbiYjNDM7XG4gXHRtbXUtXHUwMDNlc3BsaXRfcGFnZV9jYWNoZS5nZnBfemVybyA9IF9fR0ZQX1pFUk87XG4gXG4gXHRtbXUtXHUwMDNlcGdkX3BoeXMgPSBfX3BhKHBndC1cdTAwM2VwZ2QpO1xuQEAgLTIyMzQsNiAmIzQzOzIyNDIsNyBAQCBpbnQga3ZtX2hhbmRsZV9ndWVzdF9zZWEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIH1cbiBcbiAvKipcbiYjNDM7XG4gICoga3ZtX2hhbmRsZV9ndWVzdF9hYm9ydCAtIGhhbmRsZXMgYWxsIDJuZCBzdGFnZSBhYm9ydHNcbiAgKiBAdmNwdTpcdHRoZSBWQ1BVIHBvaW50ZXJcbiAgKlxuQEAgLTIyNzEsNiAmIzQzOzIyODAsOSBAQCBpbnQga3ZtX2hhbmRsZV9ndWVzdF9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHRpc19pYWJ0ID0ga3ZtX3ZjcHVfdHJhcF9pc19pYWJ0KHZjcHUpO1xuIFxuJiM0MztcdGlmIChlc3JfaXNzMl9pc19oZGJzc2YoZXNyKSlcbiYjNDM7XHRcdHJldHVybiBrdm1faGFuZGxlX2hkYnNzX2ZhdWx0KHZjcHUpO1xuJiM0MztcbiBcdGlmIChlc3JfZnNjX2lzX3RyYW5zbGF0aW9uX2ZhdWx0KGVzcikpIHtcbiBcdFx0LyogQmV5b25kIHNhbml0aXNlZCBQQVJhbmdlICh3aGljaCBpcyB0aGUgSVBBIGxpbWl0KSAqL1xuIFx0XHRpZiAoZmF1bHRfaXBhIFx1MDAzZT0gQklUX1VMTChnZXRfa3ZtX2lwYV9saW1pdCgpKSkge1xuQEAgLTI1NzYsNiAmIzQzOzI1ODgsOSBAQCB2b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbiB7XG4gXHRib29sIGxvZ19kaXJ0eV9wYWdlcyA9IG5ldyBcdTAwMjZcdTAwMjYgbmV3LVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fTUVNX0xPR19ESVJUWV9QQUdFUztcbiBcbiYjNDM7XHRrdm1fYXJtX2hkYnNzX29uX2RpcnR5X2xvZ2dpbmdfY2hhbmdlKGt2bSxcbiYjNDM7XHRcdGF0b21pY19yZWFkKFx1MDAyNmt2bS1cdTAwM2Vucl9tZW1zbG90c19kaXJ0eV9sb2dnaW5nKSk7XG4mIzQzO1xuIFx0LypcbiBcdCAqIEF0IHRoaXMgcG9pbnQgbWVtc2xvdCBoYXMgYmVlbiBjb21taXR0ZWQgYW5kIHRoZXJlIGlzIGFuXG4gXHQgKiBhbGxvY2F0ZWQgZGlydHlfYml0bWFwW10sIGRpcnR5IHBhZ2VzIHdpbGwgYmUgdHJhY2tlZCB3aGlsZSB0aGVcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9yZXNldC5jIGIvYXJjaC9hcm02NC9rdm0vcmVzZXQuY1xuaW5kZXggYjk2M2ZkOTc1YWFjYWYuLmQ4MTA0YmNiZDlmZmFkIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vcmVzZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vcmVzZXQuY1xuQEAgLTI3LDYgJiM0MzsyNyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9hc20uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fZW11bGF0ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9tbXUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX2RpcnR5X2JpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9uZXN0ZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS92aXJ0LmhcdTAwM2VcbiBcbkBAIC0xNjEsNiAmIzQzOzE2Miw5IEBAIHZvaWQga3ZtX2FybV92Y3B1X2Rlc3Ryb3koc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXZjcHUtXHUwMDNlYXJjaC5jdHh0LnZuY3JfYXJyYXkpO1xuIFx0a2ZyZWUodmNwdS1cdTAwM2VhcmNoLnZuY3JfdGxiKTtcbiBcdGtmcmVlKHZjcHUtXHUwMDNlYXJjaC5jY3NpZHIpO1xuJiM0MztcbiYjNDM7XHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5lbmFibGVfaGRic3MpXG4mIzQzO1x0XHRrdm1fYXJtX3ZjcHVfZnJlZV9oZGJzcyh2Y3B1KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQga3ZtX3ZjcHVfcmVzZXRfc3ZlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L3Rvb2xzL2NwdWNhcHMgYi9hcmNoL2FybTY0L3Rvb2xzL2NwdWNhcHNcbmluZGV4IDliODVhODRmNmZkNDk0Li5hODc3MDZjOWQxNjBlMCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2Fwc1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC90b29scy9jcHVjYXBzXG5AQCAtNjksNiAmIzQzOzY5LDcgQEAgSEFTX1ZBNTJcbiBIQVNfVklSVF9IT1NUX0VYVE5cbiBIQVNfV0ZYVFxuIEhBU19YTlhcbiYjNDM7SEFTX0hEQlNTXG4gSEFGVFxuIEhXX0RCTVxuIEtWTV9IVkhFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDY6MTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2FybV92Y3B1X2FsbG9jX2hkYnNzJiMzNDssCiAgICAmIzM0O2t2bV9hcm1fdmNwdV9mcmVlX2hkYnNzJiMzNDssCiAgICAmIzM0O2t2bV9mbHVzaF9oZGJzc19idWZmZXImIzM0OywKICAgICYjMzQ7a3ZtX2hhbmRsZV9oZGJzc19mYXVsdCYjMzQ7LAogICAgJiMzNDtrdm1fYXJtX2VuYWJsZV9oZGJzc19nbG9iYWwmIzM0OywKICAgICYjMzQ7a3ZtX2FybV9kaXNhYmxlX2hkYnNzX2dsb2JhbCYjMzQ7LAogICAgJiMzNDtrdm1fYXJtX2hkYnNzX29uX2RpcnR5X2xvZ2dpbmdfY2hhbmdlJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3N5bmNfZGlydHlfbG9nJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgSGFyZHdhcmUgRGlydHkgc3RhdGUgdHJhY2tpbmcgc3RydWN0dXJlIChIREJTUykgc3VwcG9ydCBmb3IgS1ZNIG9uIGFybTY0LiBJdCBtb2RpZmllcyBjb3JlIEtWTSBsb2dpYyBmb3IgZGlydHkgcGFnZSBsb2dnaW5nIGFuZCBtZW1vcnkgbWFuYWdlbWVudCwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGFuZCBndWVzdCBleGVjdXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDBiYmEzYjkxNWExZGJjODdkMjkyMDQyNzViMTU1NDVjNzFjYTJmZGMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAxMCAwNjoxMjowMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmgKaW5kZXggYTU3ODcwZmE5NmRiNWIuLmJkZmFiMDg2ZmQ5NDUzIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaApAQCAtODYzLDYgJiM0Mzs4NjMsMTEgQEAgc3RhdGljIGlubGluZSBib29sIHN5c3RlbV9zdXBwb3J0c19oYWZ0KHZvaWQpCiAJcmV0dXJuIGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFGVCk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc3lzdGVtX3N1cHBvcnRzX2hkYnNzKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfSERCU1MpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBzeXN0ZW1fc3VwcG9ydHNfbXBhbSh2b2lkKQogewogCXJldHVybiBhbHRlcm5hdGl2ZV9oYXNfY2FwX3VubGlrZWx5KEFSTTY0X01QQU0pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lc3IuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZXNyLmgKaW5kZXggODFjMTczMjBhNTg4ZDkuLjJlNmI2NzliNTkwODA4IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2Vzci5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZXNyLmgKQEAgLTQzNyw2ICYjNDM7NDM3LDExIEBACiAjaWZuZGVmIF9fQVNTRU1CTEVSX18KICNpbmNsdWRlICZsdDthc20vdHlwZXMuaCZndDsKIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBlc3JfaXNzMl9pc19oZGJzc2YodW5zaWduZWQgbG9uZyBlc3IpCiYjNDM7ewomIzQzOwlyZXR1cm4gRVNSX0VMeF9JU1MyKGVzcikgJmFtcDsgRVNSX0VMeF9IREJTU0Y7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGVzcl9icmtfY29tbWVudCh1bnNpZ25lZCBsb25nIGVzcikKIHsKIAlyZXR1cm4gZXNyICZhbXA7IEVTUl9FTHhfQlJLNjRfSVNTX0NPTU1FTlRfTUFTSzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2RpcnR5X2JpdC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZGlydHlfYml0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmE0Y2RhOGNkYWIyNDcyCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZGlydHlfYml0LmgKQEAgLTAsMCAmIzQzOzEsMjkgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCiYjNDM7LyoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQVJNIEx0ZC4KJiM0MzsgKiBBdXRob3I6IExlb25hcmRvIEJyYXMgJmx0O2xlby5icmFzQGFybS5jb20mZ3Q7CiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfX0FSTTY0X0tWTV9ESVJUWV9CSVRfSF9fCiYjNDM7I2RlZmluZSBfX0FSTTY0X0tWTV9ESVJUWV9CSVRfSF9fCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9rdm1fcGd0YWJsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthc20vc3lzcmVnLmgmZ3Q7CiYjNDM7CiYjNDM7LyogSERCU1MgZW50cnkgZmllbGQgZGVmaW5pdGlvbnMgKi8KJiM0MzsjZGVmaW5lIEhEQlNTX0VOVFJZX1ZBTElECUJJVCgwKQomIzQzOyNkZWZpbmUgSERCU1NfRU5UUllfVFRXTF9TSElGVCAoMSkKJiM0MzsjZGVmaW5lIEhEQlNTX0VOVFJZX1RUV0xfTUFTSyAoR0VOTUFTSygzLCAxKSkKJiM0MzsjZGVmaW5lIEhEQlNTX0VOVFJZX1RUV0woeCkgXAomIzQzOwkoKCh4KSAmbHQ7Jmx0OyBIREJTU19FTlRSWV9UVFdMX1NISUZUKSAmYW1wOyBIREJTU19FTlRSWV9UVFdMX01BU0spCiYjNDM7I2RlZmluZSBIREJTU19FTlRSWV9UVFdMX1JFU1YgSERCU1NfRU5UUllfVFRXTCgtNCkKJiM0MzsjZGVmaW5lIEhEQlNTX0VOVFJZX0lQQQlHRU5NQVNLX1VMTCg1NSwgMTIpCiYjNDM7CiYjNDM7aW50IGt2bV9hcm1fdmNwdV9hbGxvY19oZGJzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBvcmRlcik7CiYjNDM7dm9pZCBrdm1fYXJtX3ZjcHVfZnJlZV9oZGJzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwomIzQzO3ZvaWQga3ZtX2ZsdXNoX2hkYnNzX2J1ZmZlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwomIzQzO2ludCBrdm1faGFuZGxlX2hkYnNzX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiYjNDM7dm9pZCBrdm1fYXJtX2hkYnNzX29uX2RpcnR5X2xvZ2dpbmdfY2hhbmdlKHN0cnVjdCBrdm0gKmt2bSwgaW50IG5yX21lbXNsb3RzX2xvZ2dpbmcpOwomIzQzO3ZvaWQga3ZtX2FybV9kaXNhYmxlX2hkYnNzX2dsb2JhbChzdHJ1Y3Qga3ZtICprdm0pOwomIzQzOwomIzQzOyNlbmRpZiAvKiBfX0FSTTY0X0tWTV9ESVJUWV9CSVRfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggYmFlMmM0ZjkyZWY1YzAuLmNlY2ZiODg0YTY0ZmE3IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC01NSw2ICYjNDM7NTUsNyBAQAogI2RlZmluZSBLVk1fUkVRX0dVRVNUX0hZUF9JUlFfUEVORElORwlLVk1fQVJDSF9SRVEoOSkKICNkZWZpbmUgS1ZNX1JFUV9NQVBfTDFfVk5DUl9FTDIJCUtWTV9BUkNIX1JFUSgxMCkKICNkZWZpbmUgS1ZNX1JFUV9WR0lDX1BST0NFU1NfVVBEQVRFCUtWTV9BUkNIX1JFUSgxMSkKJiM0MzsjZGVmaW5lIEtWTV9SRVFfRkxVU0hfSERCU1MJCQlLVk1fQVJDSF9SRVEoMTIpCiAKICNkZWZpbmUgS1ZNX0RJUlRZX0xPR19NQU5VQUxfQ0FQUyAgIChLVk1fRElSVFlfTE9HX01BTlVBTF9QUk9URUNUX0VOQUJMRSB8IFwKIAkJCQkgICAgIEtWTV9ESVJUWV9MT0dfSU5JVElBTExZX1NFVCkKQEAgLTQyMCw2ICYjNDM7NDIxLDEwIEBAIHN0cnVjdCBrdm1fYXJjaCB7CiAJICovCiAJc3RydWN0IGt2bV9wcm90ZWN0ZWRfdm0gcGt2bTsKIAomIzQzOwkvKiBIREJTUzogcGVyLVZNIGRpcnR5IHRyYWNraW5nIHN0YXRlICovCiYjNDM7CWJvb2wgZW5hYmxlX2hkYnNzOwomIzQzOwl1bnNpZ25lZCBpbnQgaGRic3Nfb3JkZXI7CiYjNDM7CiAjaWZkZWYgQ09ORklHX1BURFVNUF9TVEFHRTJfREVCVUdGUwogCS8qIE5lc3RlZCB2aXJ0dWFsaXphdGlvbiBpbmZvICovCiAJc3RydWN0IGRlbnRyeSAqZGVidWdmc19udl9kZW50cnk7CkBAIC04MzgsNiAmIzQzOzg0MywxMiBAQCBzdHJ1Y3QgdmNwdV9yZXNldF9zdGF0ZSB7CiAJYm9vbAkJcmVzZXQ7CiB9OwogCiYjNDM7c3RydWN0IHZjcHVfaGRic3Nfc3RhdGUgewomIzQzOwlwaHlzX2FkZHJfdCBiYXNlX3BoeXM7ICAgLyogZm9yIG1lbW9yeSBmcmVlICovCiYjNDM7CXU2NCBoZGJzc2JyX2VsMjsgICAgICAgICAvKiBsb2FkIGRpcmVjdGx5ICovCiYjNDM7CXU2NCBoZGJzc3Byb2RfZWwyOyAgICAgICAvKiBzYXZlIGRpcmVjdGx5ICovCiYjNDM7fTsKJiM0MzsKIHN0cnVjdCB2bmNyX3RsYjsKIAogc3RydWN0IGt2bV92Y3B1X2FyY2ggewpAQCAtOTQ1LDYgJiM0Mzs5NTYsOSBAQCBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7CiAKIAkvKiBIeXAtcmVhZGFibGUgY29weSBvZiBrdm1fdmNwdTo6cGlkICovCiAJcGlkX3QgcGlkOwomIzQzOwomIzQzOwkvKiBIREJTUyByZWdpc3RlcnMgaW5mbyAqLwomIzQzOwlzdHJ1Y3QgdmNwdV9oZGJzc19zdGF0ZSBoZGJzczsKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmgKaW5kZXggNDFhODY4NzkzOGViNmIuLjVlMGZhYzRiZmE1MzY5IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGd0YWJsZS5oCkBAIC05Myw2ICYjNDM7OTMsOCBAQCB0eXBlZGVmIHU2NCBrdm1fcHRlX3Q7CiAKICNkZWZpbmUgS1ZNX1BURV9MRUFGX0FUVFJfSElfUzJfWE4JR0VOTUFTSyg1NCwgNTMpCiAKJiM0MzsjZGVmaW5lIEtWTV9QVEVfTEVBRl9BVFRSX0hJX1MyX0RCTQlCSVQoNTEpCiYjNDM7CiAjZGVmaW5lIEtWTV9QVEVfTEVBRl9BVFRSX0hJX1MxX0dQCUJJVCg1MCkKIAogI2RlZmluZSBLVk1fUFRFX0xFQUZfQVRUUl9TMl9QRVJNUwkoS1ZNX1BURV9MRUFGX0FUVFJfTE9fUzJfUzJBUF9SIHwgXApAQCAtMjQ5LDEwICYjNDM7MjUxLDEyIEBAIHN0cnVjdCBrdm1fcGd0YWJsZV9tbV9vcHMgewogICogZW51bSBrdm1fcGd0YWJsZV9zdGFnZTJfZmxhZ3MgLSBTdGFnZS0yIHBhZ2UtdGFibGUgZmxhZ3MuCiAgKiBAS1ZNX1BHVEFCTEVfUzJfSURNQVA6CU9ubHkgdXNlIGlkZW50aXR5IG1hcHBpbmdzLgogICogQEtWTV9QR1RBQkxFX1MyX0FTX1MxOglGaW5hbCBtZW1vcnkgYXR0cmlidXRlcyBhcmUgdGhhdCBvZiBTdGFnZS0xLgomIzQzOyAqIEBLVk1fUEdUQUJMRV9TMl9EQk06CUhhcmR3YXJlLW1hbmFnZWQgREJNIGZvciB3cml0YWJsZSBwYWdlcy4KICAqLwogZW51bSBrdm1fcGd0YWJsZV9zdGFnZTJfZmxhZ3MgewogCUtWTV9QR1RBQkxFX1MyX0lETUFQCQkJPSBCSVQoMCksCiAJS1ZNX1BHVEFCTEVfUzJfQVNfUzEJCQk9IEJJVCgxKSwKJiM0MzsJS1ZNX1BHVEFCTEVfUzJfREJNCQkJPSBCSVQoMiksCiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3lzcmVnLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N5c3JlZy5oCmluZGV4IDdhYTA4ZDU5ZDQ5NDQ4Li4xMzU0YTU4YzMzMTY3YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNyZWcuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N5c3JlZy5oCkBAIC0xMDM5LDYgJiM0MzsxMDM5LDE3IEBACiAKICNkZWZpbmUgR0NTX0NBUCh4KQkoKCgodW5zaWduZWQgbG9uZyl4KSAmYW1wOyBHQ1NfQ0FQX0FERFJfTUFTSykgfCBcCiAJCQkJCSAgICAgICBHQ1NfQ0FQX1ZBTElEX1RPS0VOKQomIzQzOwomIzQzOy8qCiYjNDM7ICogRGVmaW5pdGlvbnMgZm9yIHRoZSBIREJTUyBmZWF0dXJlCiYjNDM7ICovCiYjNDM7I2RlZmluZSBIREJTU19NQVhfT1JERVIJCUhEQlNTQlJfRUwyX1NaXzJNQgomIzQzOwomIzQzOyNkZWZpbmUgSERCU1NCUl9FTDIoYmFkZHIsIHN6KQkoKChiYWRkcikgJmFtcDsgSERCU1NCUl9FTDJfQkFERFJfTUFTSykgfCBcCiYjNDM7CQkJCSBGSUVMRF9QUkVQKEhEQlNTQlJfRUwyX1NaX01BU0ssIHN6KSkKJiM0MzsKJiM0MzsjZGVmaW5lIEhEQlNTUFJPRF9JRFgocHJvZCkJRklFTERfR0VUKEhEQlNTUFJPRF9FTDJfSU5ERVhfTUFTSywgcHJvZCkKJiM0MzsKIC8qCiAgKiBEZWZpbml0aW9ucyBmb3IgR0lDdjUgaW5zdHJ1Y3Rpb25zCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYwppbmRleCA5YTIyZGYwYzUxMjBmMy4uYWEzMjdlZWJhZjFjYTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMKQEAgLTIxMzEsNiAmIzQzOzIxMzEsMTEgQEAgc3RhdGljIGJvb2wgaHZoZV9wb3NzaWJsZShjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksCiAJcmV0dXJuIGFybTY0X3Rlc3Rfc3dfZmVhdHVyZV9vdmVycmlkZShBUk02NF9TV19GRUFUVVJFX09WRVJSSURFX0hWSEUpOwogfQogCiYjNDM7c3RhdGljIGJvb2wgaGFzX3ZoZV9oZGJzcyhjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksIGludCBjb3BlKQomIzQzO3sKJiM0MzsJcmV0dXJuIGlzX2tlcm5lbF9pbl9oeXBfbW9kZSgpICZhbXA7JmFtcDsgaGFzX2NwdWlkX2ZlYXR1cmUoZW50cnksIGNvcGUpOwomIzQzO30KJiM0MzsKIGJvb2wgY3B1X3N1cHBvcnRzX2JibWwyX25vYWJvcnQodm9pZCkKIHsKIAkvKgpAQCAtMjc4MSw2ICYjNDM7Mjc4NiwxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgYXJtNjRfZmVhdHVyZXNbXSA9IHsKIAkJQVJNNjRfQ1BVSURfRklFTERTKElEX0FBNjRNTUZSMV9FTDEsIEhBRkRCUywgSEFGVCkKIAl9LAogI2VuZGlmCiYjNDM7CXsKJiM0MzsJCS5kZXNjID0gJiMzNDtIYXJkd2FyZSBEaXJ0eSBzdGF0ZSB0cmFja2luZyBzdHJ1Y3R1cmUgKEhEQlNTKSYjMzQ7LAomIzQzOwkJLnR5cGUgPSBBUk02NF9DUFVDQVBfU1lTVEVNX0ZFQVRVUkUsCiYjNDM7CQkuY2FwYWJpbGl0eSA9IEFSTTY0X0hBU19IREJTUywKJiM0MzsJCS5tYXRjaGVzID0gaGFzX3ZoZV9oZGJzcywKJiM0MzsJCUFSTTY0X0NQVUlEX0ZJRUxEUyhJRF9BQTY0TU1GUjFfRUwxLCBIQUZEQlMsIEhEQlNTKQomIzQzOwl9LAogCXsKIAkJLmRlc2MgPSAmIzM0O0NSQzMyIGluc3RydWN0aW9ucyYjMzQ7LAogCQkuY2FwYWJpbGl0eSA9IEFSTTY0X0hBU19DUkMzMiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlIGIvYXJjaC9hcm02NC9rdm0vTWFrZWZpbGUKaW5kZXggNTk2MTJkMmYyNzdjMWQuLmVjMjc0OWFmNjRmYTRjIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9NYWtlZmlsZQpAQCAtMTgsNiAmIzQzOzE4LDcgQEAga3ZtLXkgJiM0Mzs9IGFybS5vIG1tdS5vIG1taW8ubyBwc2NpLm8gaHlwZXJjYWxscy5vIHB2dGltZS5vIFwKIAkgZ3Vlc3QubyBkZWJ1Zy5vIHJlc2V0Lm8gc3lzX3JlZ3MubyBzdGFja3RyYWNlLm8gXAogCSB2Z2ljLXN5cy1yZWctdjMubyBmcHNpbWQubyBwa3ZtLm8gXAogCSBhcmNoX3RpbWVyLm8gdHJuZy5vIHZtaWQubyBlbXVsYXRlLW5lc3RlZC5vIG5lc3RlZC5vIGF0Lm8gXAomIzQzOwkgZGlydHlfYml0Lm8gXAogCSB2Z2ljL3ZnaWMubyB2Z2ljL3ZnaWMtaW5pdC5vIFwKIAkgdmdpYy92Z2ljLWlycWZkLm8gdmdpYy92Z2ljLXYyLm8gXAogCSB2Z2ljL3ZnaWMtdjMubyB2Z2ljL3ZnaWMtdjQubyBcCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9hcm0uYyBiL2FyY2gvYXJtNjQva3ZtL2FybS5jCmluZGV4IDUwYWRmZmY3NWJlODJlLi41MzZkOTQ3OTliYThmOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vYXJtLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vYXJtLmMKQEAgLTM4LDYgJiM0MzszOCw3IEBACiAjaW5jbHVkZSAmbHQ7YXNtL2t2bV9hc20uaCZndDsKICNpbmNsdWRlICZsdDthc20va3ZtX2VtdWxhdGUuaCZndDsKICNpbmNsdWRlICZsdDthc20va3ZtX2h5cC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthc20va3ZtX2RpcnR5X2JpdC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9rdm1fbW11LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2t2bV9uZXN0ZWQuaCZndDsKICNpbmNsdWRlICZsdDthc20va3ZtX3Brdm0uaCZndDsKQEAgLTMxNiw2ICYjNDM7MzE3LDE0IEBAIHZvaWQga3ZtX2FyY2hfZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pCiAJaWYgKGlzX3Byb3RlY3RlZF9rdm1fZW5hYmxlZCgpKQogCQlwa3ZtX2Rlc3Ryb3lfaHlwX3ZtKGt2bSk7CiAKJiM0MzsJLyoKJiM0MzsJICogVXNlcnNwYWNlIG1heSBkZXN0cm95IHRoZSBWTSB3aXRob3V0IGRpc2FibGluZyBkaXJ0eSBsb2dnaW5nLAomIzQzOwkgKiBzbyB0aGUgYXV0by1kaXNhYmxlIHBhdGggaXMgbmV2ZXIgcmVhY2hlZC4gRm9yY2UgZGlzYWJsZSBIREJTUwomIzQzOwkgKiBoZXJlIHRvIGVuc3VyZSB2Q1BVIGJ1ZmZlcnMgYXJlIGZyZWVkIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrcy4KJiM0MzsJICovCiYjNDM7CWlmIChrdm0tJmd0O2FyY2guZW5hYmxlX2hkYnNzKQomIzQzOwkJa3ZtX2FybV9kaXNhYmxlX2hkYnNzX2dsb2JhbChrdm0pOwomIzQzOwogCWt2bV91bmluaXRfc3RhZ2UyX21tdShrdm0pOwogCWt2bV9kZXN0cm95X21waWRyX2RhdGEoa3ZtKTsKIApAQCAtNTY1LDYgJiM0Mzs1NzQsMTIgQEAgaW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZiAoZXJyKQogCQlrdm1fdmdpY192Y3B1X2Rlc3Ryb3kodmNwdSk7CiAKJiM0MzsJaWYgKHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5lbmFibGVfaGRic3MpIHsKJiM0MzsJCWVyciA9IGt2bV9hcm1fdmNwdV9hbGxvY19oZGJzcyh2Y3B1LCB2Y3B1LSZndDtrdm0tJmd0O2FyY2guaGRic3Nfb3JkZXIpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlrdm1fdmdpY192Y3B1X2Rlc3Ryb3kodmNwdSk7CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC03NDgsNiAmIzQzOzc2Myw5IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQlrdm1fdmNwdV9wdXRfaHdfbW11KHZjcHUpOwogCWt2bV9hcm1fdm1pZF9jbGVhcl9hY3RpdmUoKTsKIAomIzQzOwlpZiAodmNwdS0mZ3Q7a3ZtLSZndDthcmNoLmVuYWJsZV9oZGJzcykKJiM0MzsJCWt2bV9mbHVzaF9oZGJzc19idWZmZXIodmNwdSk7CiYjNDM7CiAJdmNwdV9jbGVhcl9vbl91bnN1cHBvcnRlZF9jcHUodmNwdSk7CiAJdmNwdS0mZ3Q7Y3B1ID0gLTE7CiB9CkBAIC0xMTUwLDYgJiM0MzsxMTY4LDkgQEAgc3RhdGljIGludCBjaGVja192Y3B1X3JlcXVlc3RzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJaWYgKGt2bV9kaXJ0eV9yaW5nX2NoZWNrX3JlcXVlc3QodmNwdSkpCiAJCQlyZXR1cm4gMDsKIAomIzQzOwkJaWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfRkxVU0hfSERCU1MsIHZjcHUpKQomIzQzOwkJCWt2bV9mbHVzaF9oZGJzc19idWZmZXIodmNwdSk7CiYjNDM7CiAJCWNoZWNrX25lc3RlZF92Y3B1X3JlcXVlc3RzKHZjcHUpOwogCX0KIApAQCAtMTk2NCw3ICYjNDM7MTk4NSwxNSBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwKIAogdm9pZCBrdm1fYXJjaF9zeW5jX2RpcnR5X2xvZyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QpCiB7CiYjNDM7CS8qCiYjNDM7CSAqIEZsdXNoIGFsbCBDUFVzJiMzOTsgZGlydHkgbG9nIGJ1ZmZlcnMgdG8gdGhlIGRpcnR5X2JpdG1hcC4gIENhbGxlZAomIzQzOwkgKiBiZWZvcmUgcmVwb3J0aW5nIGRpcnR5X2JpdG1hcCB0byB1c2Vyc3BhY2UuIFNlbmQgYSByZXF1ZXN0IHdpdGgKJiM0MzsJICogS1ZNX1JFUVVFU1RfV0FJVCB0byBmbHVzaCBidWZmZXIgc3luY2hyb25vdXNseS4KJiM0MzsJICovCiYjNDM7CWlmICgha3ZtLSZndDthcmNoLmVuYWJsZV9oZGJzcykKJiM0MzsJCXJldHVybjsKIAomIzQzOwlrdm1fbWFrZV9hbGxfY3B1c19yZXF1ZXN0KGt2bSwgS1ZNX1JFUV9GTFVTSF9IREJTUyB8IEtWTV9SRVFVRVNUX1dBSVQpOwogfQogCiBzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9zZXRfZGV2aWNlX2FkZHIoc3RydWN0IGt2bSAqa3ZtLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMgYi9hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uYzViZjg2NmMyM2VmMmIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYwpAQCAtMCwwICYjNDM7MSwyMTkgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7LyoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQVJNIEx0ZC4KJiM0MzsgKiBBdXRob3I6IExlb25hcmRvIEJyYXMgJmx0O2xlby5icmFzQGFybS5jb20mZ3Q7CiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9rdm1fZGlydHlfYml0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9rdm1fbW11LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9zeXNyZWcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZ2ZwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tjb25maWcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW0uaCZndDsKJiM0MzsKJiM0MztpbnQga3ZtX2FybV92Y3B1X2FsbG9jX2hkYnNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IG9yZGVyKQomIzQzO3sKJiM0MzsJc3RydWN0IHBhZ2UgKmhkYnNzX3BnID0gTlVMTDsKJiM0MzsKJiM0MzsJaWYgKHZjcHUtJmd0O2FyY2guaGRic3MuaGRic3Nicl9lbDIgfHwgIXN5c3RlbV9zdXBwb3J0c19oZGJzcygpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChvcmRlciAmZ3Q7IEhEQlNTX01BWF9PUkRFUikKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwloZGJzc19wZyA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUxfQUNDT1VOVCwgb3JkZXIpOwomIzQzOwlpZiAoIWhkYnNzX3BnKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXZjcHUtJmd0O2FyY2guaGRic3MgPSAoc3RydWN0IHZjcHVfaGRic3Nfc3RhdGUpIHsKJiM0MzsJCS5iYXNlX3BoeXMgPSBwYWdlX3RvX3BoeXMoaGRic3NfcGcpLAomIzQzOwkJLmhkYnNzYnJfZWwyID0gSERCU1NCUl9FTDIocGFnZV90b19waHlzKGhkYnNzX3BnKSwgb3JkZXIpLAomIzQzOwkJLmhkYnNzcHJvZF9lbDIgPSAwLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBrdm1fYXJtX3ZjcHVfZnJlZV9oZGJzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGFnZSAqaGRic3NfcGc7CiYjNDM7CiYjNDM7CWlmICghdmNwdS0mZ3Q7YXJjaC5oZGJzcy5oZGJzc2JyX2VsMikgewomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWhkYnNzX3BnID0gcGh5c190b19wYWdlKHZjcHUtJmd0O2FyY2guaGRic3MuYmFzZV9waHlzKTsKJiM0MzsJaWYgKGhkYnNzX3BnKQomIzQzOwkJX19mcmVlX3BhZ2VzKGhkYnNzX3BnLAomIzQzOwkJICAgICBGSUVMRF9HRVQoSERCU1NCUl9FTDJfU1pfTUFTSywKJiM0MzsJCQkgICAgICAgdmNwdS0mZ3Q7YXJjaC5oZGJzcy5oZGJzc2JyX2VsMikpOwomIzQzOwomIzQzOwl2Y3B1LSZndDthcmNoLmhkYnNzLmhkYnNzYnJfZWwyID0gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBrdm1fZmx1c2hfaGRic3NfYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CWludCBpZHgsIGN1cnJfaWR4OwomIzQzOwl1NjQgKmhkYnNzX2J1ZjsKJiM0MzsJc3RydWN0IGt2bSAqa3ZtID0gdmNwdS0mZ3Q7a3ZtOwomIzQzOwomIzQzOwlpZiAoIWt2bS0mZ3Q7YXJjaC5lbmFibGVfaGRic3MpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWN1cnJfaWR4ID0gSERCU1NQUk9EX0lEWChyZWFkX3N5c3JlZ19zKFNZU19IREJTU1BST0RfRUwyKSk7CiYjNDM7CiYjNDM7CS8qIERvIG5vdGhpbmcgaWYgSERCU1MgYnVmZmVyIGlzIGVtcHR5IG9yIGJyX2VsMiBpcyBOVUxMICovCiYjNDM7CWlmIChjdXJyX2lkeCA9PSAwIHx8IHZjcHUtJmd0O2FyY2guaGRic3MuaGRic3Nicl9lbDIgPT0gMCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaGRic3NfYnVmID0gcGFnZV9hZGRyZXNzKHBoeXNfdG9fcGFnZSh2Y3B1LSZndDthcmNoLmhkYnNzLmJhc2VfcGh5cykpOwomIzQzOwlpZiAoIWhkYnNzX2J1ZikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZ3VhcmQod3JpdGVfbG9ja19pcnFzYXZlKSgmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7bW11X2xvY2spOwomIzQzOwlmb3IgKGlkeCA9IDA7IGlkeCAmbHQ7IGN1cnJfaWR4OyBpZHgmIzQzOyYjNDM7KSB7CiYjNDM7CQl1NjQgZ3BhOwomIzQzOwomIzQzOwkJZ3BhID0gaGRic3NfYnVmW2lkeF07CiYjNDM7CQlpZiAoIShncGEgJmFtcDsgSERCU1NfRU5UUllfVkFMSUQpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJZ3BhICZhbXA7PSBIREJTU19FTlRSWV9JUEE7CiYjNDM7CQlrdm1fdmNwdV9tYXJrX3BhZ2VfZGlydHkodmNwdSwgZ3BhICZndDsmZ3Q7IFBBR0VfU0hJRlQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIHJlc2V0IEhEQlNTIGluZGV4ICovCiYjNDM7CXdyaXRlX3N5c3JlZ19zKDAsIFNZU19IREJTU1BST0RfRUwyKTsKJiM0MzsJdmNwdS0mZ3Q7YXJjaC5oZGJzcy5oZGJzc3Byb2RfZWwyID0gMDsKJiM0MzsJaXNiKCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBrdm1faGFuZGxlX2hkYnNzX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CXU2NCBwcm9kOwomIzQzOwl1NjQgZnNjOwomIzQzOwomIzQzOwlwcm9kID0gcmVhZF9zeXNyZWdfcyhTWVNfSERCU1NQUk9EX0VMMik7CiYjNDM7CWZzYyA9IEZJRUxEX0dFVChIREJTU1BST0RfRUwyX0ZTQ19NQVNLLCBwcm9kKTsKJiM0MzsKJiM0MzsJc3dpdGNoIChmc2MpIHsKJiM0MzsJY2FzZSBIREJTU1BST0RfRUwyX0ZTQ19PSzoKJiM0MzsJCS8qIEJ1ZmZlciBmdWxsLCBzZXQgcmVxdWVzdCB0byBmbHVzaCBvbiBuZXh0IHZjcHUgZXhpdCAqLwomIzQzOwkJa3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX0ZMVVNIX0hEQlNTLCB2Y3B1KTsKJiM0MzsJCXJldHVybiAxOwomIzQzOwljYXNlIEhEQlNTUFJPRF9FTDJfRlNDX0V4dGVybmFsQWJvcnQ6CiYjNDM7CWNhc2UgSERCU1NQUk9EX0VMMl9GU0NfR1BGOgomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQkvKiBVbmtub3duIGZhdWx0LiAqLwomIzQzOwkJV0FSTl9PTkNFKDEsCiYjNDM7CQkJICAmIzM0O1VuZXhwZWN0ZWQgSERCU1MgZmF1bHQgdHlwZSwgRlNDOiAweCVsbHggKHByb2Q9MHglbGx4LCB2Y3B1PSVkKVxuJiMzNDssCiYjNDM7CQkJICBmc2MsIHByb2QsIHZjcHUtJmd0O3ZjcHVfaWQpOwomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBoZGJzc19hdXRvX3NlbGVjdF9vcmRlcihzdHJ1Y3Qga3ZtICprdm0pCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIG5wYWdlcyA9IDA7CiYjNDM7CXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3Q7CiYjNDM7CWludCBia3Q7CiYjNDM7CiYjNDM7CWt2bV9mb3JfZWFjaF9tZW1zbG90KG1lbXNsb3QsIGJrdCwga3ZtX21lbXNsb3RzKGt2bSkpCiYjNDM7CQlucGFnZXMgJiM0Mzs9IG1lbXNsb3QtJmd0O25wYWdlczsKJiM0MzsKJiM0MzsJaWYgKG5wYWdlcyAmbHQ7PSAxNjM4NCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwllbHNlIGlmIChucGFnZXMgJmx0Oz0gMjYyMTQ0KQomIzQzOwkJcmV0dXJuIDM7CiYjNDM7CWVsc2UgaWYgKG5wYWdlcyAmbHQ7PSA0MTk0MzA0KQomIzQzOwkJcmV0dXJuIDY7CiYjNDM7CWVsc2UKJiM0MzsJCXJldHVybiA5OwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEVuYWJsZSBIREJTUyBmb3IgYWxsIHZDUFVzIGluIHRoZSBWTS4KJiM0MzsgKgomIzQzOyAqIENhbGxlZCBmcm9tIGt2bV9hcm1faGRic3Nfb25fZGlydHlfbG9nZ2luZ19jaGFuZ2UoKSB3aGljaCBpcyBpbnZva2VkCiYjNDM7ICogYnkga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oKSB1bmRlciBrdm0tJmd0O3Nsb3RzX2xvY2suCiYjNDM7ICoKJiM0MzsgKiBJZiBidWZmZXIgYWxsb2NhdGlvbiBmYWlscywgSERCU1MgcmVtYWlucyBkaXNhYmxlZCBhbmQgZGlydHkgdHJhY2tpbmcKJiM0MzsgKiBmYWxscyBiYWNrIHRvIHRoZSB0cmFkaXRpb25hbCBzb2Z0d2FyZS1iYXNlZCBhcHByb2FjaCAoUFRFIHdyaXRlLXByb3RlY3QKJiM0MzsgKiAmIzQzOyBzb2Z0d2FyZSBkaXJ0eSBtYXJraW5nKS4gVGhpcyBkb2VzIG5vdCBhZmZlY3QgY29ycmVjdG5lc3M7IGRpcnR5CiYjNDM7ICogbG9nZ2luZyByZW1haW5zIGZ1bmN0aW9uYWwgd2l0aG91dCBIREJTUy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGt2bV9hcm1fZW5hYmxlX2hkYnNzX2dsb2JhbChzdHJ1Y3Qga3ZtICprdm0pCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwl1bnNpZ25lZCBsb25nIGk7CiYjNDM7CXVuc2lnbmVkIGludCBvcmRlcjsKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwomIzQzOwomIzQzOwlpZiAoIXN5c3RlbV9zdXBwb3J0c19oZGJzcygpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChrdm0tJmd0O2RpcnR5X3Jpbmdfc2l6ZSkgLyogRG9uJiMzOTt0IHN1cHBvcnQgSERCU1MgaW4gZGlydHkgcmluZyBtb2RlICovCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKGt2bS0mZ3Q7YXJjaC5lbmFibGVfaGRic3MpIC8qIEFscmVhZHkgT24gKi8KJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBUdXJuIGl0IG9uICovCiYjNDM7CW9yZGVyID0gaGRic3NfYXV0b19zZWxlY3Rfb3JkZXIoa3ZtKTsKJiM0MzsJa3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKSB7CiYjNDM7CQllcnIgPSBrdm1fYXJtX3ZjcHVfYWxsb2NfaGRic3ModmNwdSwgb3JkZXIpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlnb3RvIGVycm9yX2FsbG9jOwomIzQzOwl9CiYjNDM7CiYjNDM7CWt2bS0mZ3Q7YXJjaC5lbmFibGVfaGRic3MgPSB0cnVlOwomIzQzOwlrdm0tJmd0O2FyY2gubW11LnZ0Y3IgfD0gVlRDUl9FTDJfSEQgfCBWVENSX0VMMl9IREJTUyB8IFZUQ1JfRUwyX0hBOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBXZSBzaG91bGQga2ljayB2Y3B1cyBvdXQgb2YgZ3Vlc3QgbW9kZSBoZXJlIHRvIGxvYWQgbmV3CiYjNDM7CSAqIHZ0Y3IgdmFsdWUgdG8gdnRjcl9lbDIgcmVnaXN0ZXIgd2hlbiByZS1lbnRlciBndWVzdCBtb2RlLgomIzQzOwkgKi8KJiM0MzsJa3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKQomIzQzOwkJa3ZtX3ZjcHVfa2ljayh2Y3B1KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyb3JfYWxsb2M6CiYjNDM7CWt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkKJiM0MzsJCWlmICh2Y3B1LSZndDthcmNoLmhkYnNzLmJhc2VfcGh5cykKJiM0MzsJCQlrdm1fYXJtX3ZjcHVfZnJlZV9oZGJzcyh2Y3B1KTsKJiM0MzsKJiM0MzsJcHJfd2Fybl9vbmNlKCYjMzQ7a3ZtOiBmYWlsZWQgdG8gYWxsb2NhdGUgSERCU1MgYnVmZmVycyAob3JkZXI9JXUpLCAmIzM0OwomIzQzOwkJICAgICAmIzM0O2ZhbGxpbmcgYmFjayB0byBzb2Z0d2FyZSBkaXJ0eSB0cmFja2luZ1xuJiMzNDssIG9yZGVyKTsKJiM0MzsJcmV0dXJuIC1FTk9NRU07CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQga3ZtX2FybV9kaXNhYmxlX2hkYnNzX2dsb2JhbChzdHJ1Y3Qga3ZtICprdm0pCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGk7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKJiM0MzsKJiM0MzsJaWYgKCFrdm0tJmd0O2FyY2guZW5hYmxlX2hkYnNzKSAvKiBBbHJlYWR5IE9mZiAqLwomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwkvKiBUdXJuIGl0IG9mZiAqLwomIzQzOwlrdm0tJmd0O2FyY2gubW11LnZ0Y3IgJmFtcDs9IH4oVlRDUl9FTDJfSEQgfCBWVENSX0VMMl9IREJTUyB8IFZUQ1JfRUwyX0hBKTsKJiM0MzsKJiM0MzsJa3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKQomIzQzOwkJa3ZtX2FybV92Y3B1X2ZyZWVfaGRic3ModmNwdSk7CiYjNDM7CiYjNDM7CWt2bS0mZ3Q7YXJjaC5lbmFibGVfaGRic3MgPSBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBrdm1fYXJtX2hkYnNzX29uX2RpcnR5X2xvZ2dpbmdfY2hhbmdlKHN0cnVjdCBrdm0gKmt2bSwgaW50IG5yX21lbXNsb3RzX2xvZ2dpbmcpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBDYWxsZWQgZnJvbSBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbigpIHVuZGVyIGt2bS0mZ3Q7c2xvdHNfbG9jay4KJiM0MzsJICogQWxsIHN0YXRlIHRyYW5zaXRpb25zIGFyZSBzZXJpYWxpemVkIGJ5IHNsb3RzX2xvY2suCiYjNDM7CSAqLwomIzQzOwlpZiAobnJfbWVtc2xvdHNfbG9nZ2luZyAmZ3Q7IDAgJmFtcDsmYW1wOyAha3ZtLSZndDthcmNoLmVuYWJsZV9oZGJzcykKJiM0MzsJCWt2bV9hcm1fZW5hYmxlX2hkYnNzX2dsb2JhbChrdm0pOwomIzQzOwllbHNlIGlmIChucl9tZW1zbG90c19sb2dnaW5nID09IDAgJmFtcDsmYW1wOyBrdm0tJmd0O2FyY2guZW5hYmxlX2hkYnNzKQomIzQzOwkJa3ZtX2FybV9kaXNhYmxlX2hkYnNzX2dsb2JhbChrdm0pOwomIzQzO30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmMgYi9hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jCmluZGV4IDkxYTdkZmFkNjY4NjYwLi4yMWVjNDU2ZWNjNDExYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jCkBAIC03MzEsOSAmIzQzOzczMSwyMyBAQCBzdGF0aWMgaW50IHN0YWdlMl9zZXRfcHJvdF9hdHRyKHN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0LCBlbnVtIGt2bV9wZ3RhYmxlX3Byb3QgcAogCWlmIChwcm90ICZhbXA7IEtWTV9QR1RBQkxFX1BST1RfUikKIAkJYXR0ciB8PSBLVk1fUFRFX0xFQUZfQVRUUl9MT19TMl9TMkFQX1I7CiAKLQlpZiAocHJvdCAmYW1wOyBLVk1fUEdUQUJMRV9QUk9UX1cpCiYjNDM7CWlmIChwcm90ICZhbXA7IEtWTV9QR1RBQkxFX1BST1RfVykgewogCQlhdHRyIHw9IEtWTV9QVEVfTEVBRl9BVFRSX0xPX1MyX1MyQVBfVzsKIAomIzQzOwkJLyoKJiM0MzsJCSAqIFNldCBEQk0gYml0IGZvciB3cml0YWJsZSBub24tZGV2aWNlIHBhZ2VzIGlmIHRoZSBwYWdlLXRhYmxlCiYjNDM7CQkgKiBoYXMgS1ZNX1BHVEFCTEVfUzJfREJNIGZsYWcgKHN5c3RlbSBzdXBwb3J0cyBIREJTUykuCiYjNDM7CQkgKgomIzQzOwkJICogRm9yIHN0YWdlIDIgdHJhbnNsYXRpb25zIHVzaW5nIEluZGlyZWN0IHBlcm1pc3Npb25zLCBpZiB0aGUKJiM0MzsJCSAqIEVmZmVjdGl2ZSB2YWx1ZSBvZiBWVENSX0VMMi5IRCBpcyAwLCB0aGVuIGRpcnR5IHN0YXRlIGlzCiYjNDM7CQkgKiBtYW5hZ2VkIGJ5IHNvZnR3YXJlLiBIYXJkd2FyZSBvbmx5IHVwZGF0ZXMgdGhlIGRpcnR5IHN0YXRlCiYjNDM7CQkgKiB3aGVuIFZUQ1JfRUwyLkhEPTEgKEhEQlNTIGVuYWJsZWQpLgomIzQzOwkJICovCiYjNDM7CQlpZiAoKHBndC0mZ3Q7ZmxhZ3MgJmFtcDsgS1ZNX1BHVEFCTEVfUzJfREJNKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIShwcm90ICZhbXA7IEtWTV9QR1RBQkxFX1BST1RfREVWSUNFKSkKJiM0MzsJCQlhdHRyIHw9IEtWTV9QVEVfTEVBRl9BVFRSX0hJX1MyX0RCTTsKJiM0MzsJfQomIzQzOwogCWlmICgha3ZtX2xwYTJfaXNfZW5hYmxlZCgpKQogCQlhdHRyIHw9IEZJRUxEX1BSRVAoS1ZNX1BURV9MRUFGX0FUVFJfTE9fUzJfU0gsIHNoKTsKIApAQCAtMTM2Nyw5ICYjNDM7MTM4MSwyNiBAQCBpbnQga3ZtX3BndGFibGVfc3RhZ2UyX3JlbGF4X3Blcm1zKHN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0LCB1NjQgYWRkciwKIAlpZiAocHJvdCAmYW1wOyBLVk1fUEdUQUJMRV9QUk9UX1IpCiAJCXNldCB8PSBLVk1fUFRFX0xFQUZfQVRUUl9MT19TMl9TMkFQX1I7CiAKLQlpZiAocHJvdCAmYW1wOyBLVk1fUEdUQUJMRV9QUk9UX1cpCiYjNDM7CWlmIChwcm90ICZhbXA7IEtWTV9QR1RBQkxFX1BST1RfVykgewogCQlzZXQgfD0gS1ZNX1BURV9MRUFGX0FUVFJfTE9fUzJfUzJBUF9XOwogCiYjNDM7CQkvKgomIzQzOwkJICogTm8gREVWSUNFIGZpbHRlciBuZWVkZWQgaGVyZTogcmVsYXhfcGVybXMgaXMgb25seSBjYWxsZWQKJiM0MzsJCSAqIG9uIEZTQ19QRVJNIGZhdWx0cy4gRGV2aWNlIHBhZ2VzIGFsd2F5cyBnZXQgZnVsbCBSVyBmcm9tCiYjNDM7CQkgKiBpbml0aWFsIG1hcHBpbmcgYW5kIGFyZSBuZXZlciB3cml0ZS1wcm90ZWN0ZWQgZHVyaW5nCiYjNDM7CQkgKiBtaWdyYXRpb24sIHNvIHRoZXkgbmV2ZXIgdHJpZ2dlciBhIHBlcm1pc3Npb24gZmF1bHQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChwZ3QtJmd0O2ZsYWdzICZhbXA7IEtWTV9QR1RBQkxFX1MyX0RCTSkKJiM0MzsJCQlzZXQgfD0gS1ZNX1BURV9MRUFGX0FUVFJfSElfUzJfREJNOwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyoKJiM0MzsJCSAqIENsZWFyIERCTSBvbiBX4oaSUk8gZG93bmdyYWRlIHRvIHByZXZlbnQgaGFyZHdhcmUgZnJvbQomIzQzOwkJICogc2lsZW50bHkgdXBncmFkaW5nIFJPJiM0MztEQk0gYmFjayB0byBXJiM0MztkaXJ0eSwgd2hpY2ggd291bGQKJiM0MzsJCSAqIGJ5cGFzcyBLVk0mIzM5O3Mgd3JpdGUgdHJhY2tpbmcgYW5kIGNhdXNlIGRhdGEgY29ycnVwdGlvbi4KJiM0MzsJCSAqLwomIzQzOwkJY2xyIHw9IEtWTV9QVEVfTEVBRl9BVFRSX0hJX1MyX0RCTTsKJiM0MzsJfQomIzQzOwogCXJldCA9IHN0YWdlMl9zZXRfeG5fYXR0cihwcm90LCAmYW1wO3huKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guYyBiL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmMKaW5kZXggYmJlOWNlYmQzZDlkNTcuLmZlNzI5NDRiZmQzZDViIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmMKQEAgLTIyLDYgJiM0MzsyMiw3IEBACiAjaW5jbHVkZSAmbHQ7YXNtL2t2bV9lbXVsYXRlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2t2bV9oeXAuaCZndDsKICNpbmNsdWRlICZsdDthc20va3ZtX21tdS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthc20va3ZtX2RpcnR5X2JpdC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9mcHNpbWQuaCZndDsKICNpbmNsdWRlICZsdDthc20vZGVidWctbW9uaXRvcnMuaCZndDsKICNpbmNsdWRlICZsdDthc20vcHJvY2Vzc29yLmgmZ3Q7CkBAIC0yMTMsNiAmIzQzOzIxNCwxOSBAQCBzdGF0aWMgdm9pZCBfX3ZjcHVfcHV0X2RlYWN0aXZhdGVfdHJhcHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIF9fbG9hZF9oZGJzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LSZndDtrdm07CiYjNDM7CiYjNDM7CWlmICgha3ZtLSZndDthcmNoLmVuYWJsZV9oZGJzcykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJd3JpdGVfc3lzcmVnX3ModmNwdS0mZ3Q7YXJjaC5oZGJzcy5oZGJzc2JyX2VsMiwgU1lTX0hEQlNTQlJfRUwyKTsKJiM0MzsJd3JpdGVfc3lzcmVnX3ModmNwdS0mZ3Q7YXJjaC5oZGJzcy5oZGJzc3Byb2RfZWwyLCBTWVNfSERCU1NQUk9EX0VMMik7CiYjNDM7CiYjNDM7CWlzYigpOwomIzQzO30KJiM0MzsKIHZvaWQga3ZtX3ZjcHVfbG9hZF92aGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCWhvc3RfZGF0YV9wdHIoaG9zdF9jdHh0KS0mZ3Q7X19oeXBfcnVubmluZ192Y3B1ID0gdmNwdTsKQEAgLTIyMCw2ICYjNDM7MjM0LDcgQEAgdm9pZCBrdm1fdmNwdV9sb2FkX3ZoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJX192Y3B1X2xvYWRfc3dpdGNoX3N5c3JlZ3ModmNwdSk7CiAJX192Y3B1X2xvYWRfYWN0aXZhdGVfdHJhcHModmNwdSk7CiAJX19sb2FkX3N0YWdlMih2Y3B1LSZndDthcmNoLmh3X21tdSk7CiYjNDM7CV9fbG9hZF9oZGJzcyh2Y3B1KTsKIH0KIAogdm9pZCBrdm1fdmNwdV9wdXRfdmhlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL21tdS5jIGIvYXJjaC9hcm02NC9rdm0vbW11LmMKaW5kZXggNmM5NDFhYWExMGM2MzkuLjQ4NGY0OGRhZTAwMDNjIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9tbXUuYwpAQCAtMTYsNiAmIzQzOzE2LDcgQEAKICNpbmNsdWRlICZsdDthc20vY2FjaGVmbHVzaC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9rdm1fYXJtLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2t2bV9tbXUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL2t2bV9kaXJ0eV9iaXQuaCZndDsKICNpbmNsdWRlICZsdDthc20va3ZtX3BndGFibGUuaCZndDsKICNpbmNsdWRlICZsdDthc20va3ZtX3Brdm0uaCZndDsKICNpbmNsdWRlICZsdDthc20va3ZtX2FzbS5oJmd0OwpAQCAtMTAxNCw2ICYjNDM7MTAxNSw5IEBAIGludCBrdm1faW5pdF9zdGFnZTJfbW11KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMl9tbXUgKm1tdSwgdW5zaWduZWQgbG9uZyB0CiAJaWYgKGVycikKIAkJZ290byBvdXRfZnJlZV9wZ3RhYmxlOwogCiYjNDM7CWlmIChzeXN0ZW1fc3VwcG9ydHNfaGRic3MoKSkKJiM0MzsJCXBndC0mZ3Q7ZmxhZ3MgfD0gS1ZNX1BHVEFCTEVfUzJfREJNOwomIzQzOwogCW1tdS0mZ3Q7cGd0ID0gcGd0OwogCWlmIChpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSkKIAkJcmV0dXJuIDA7CkBAIC0xMDI3LDggJiM0MzsxMDMxLDEyIEBAIGludCBrdm1faW5pdF9zdGFnZTJfbW11KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMl9tbXUgKm1tdSwgdW5zaWduZWQgbG9uZyB0CiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKIAkJKnBlcl9jcHVfcHRyKG1tdS0mZ3Q7bGFzdF92Y3B1X3JhbiwgY3B1KSA9IC0xOwogCi0JIC8qIFRoZSBlYWdlciBwYWdlIHNwbGl0dGluZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0ICovCi0JbW11LSZndDtzcGxpdF9wYWdlX2NodW5rX3NpemUgPSBLVk1fQVJNX0VBR0VSX1NQTElUX0NIVU5LX1NJWkVfREVGQVVMVDsKJiM0MzsJIC8qIFRoZSBlYWdlciBwYWdlIHNwbGl0dGluZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IGlmIHN5c3RlbSBoYXMgbm8gSERCU1MgKi8KJiM0MzsJaWYgKHN5c3RlbV9zdXBwb3J0c19oZGJzcygpKQomIzQzOwkJbW11LSZndDtzcGxpdF9wYWdlX2NodW5rX3NpemUgPSAyNTYgKiAxMDI0ICogUEFHRV9TSVpFOwomIzQzOwllbHNlCiYjNDM7CQltbXUtJmd0O3NwbGl0X3BhZ2VfY2h1bmtfc2l6ZSA9IEtWTV9BUk1fRUFHRVJfU1BMSVRfQ0hVTktfU0laRV9ERUZBVUxUOwomIzQzOwogCW1tdS0mZ3Q7c3BsaXRfcGFnZV9jYWNoZS5nZnBfemVybyA9IF9fR0ZQX1pFUk87CiAKIAltbXUtJmd0O3BnZF9waHlzID0gX19wYShwZ3QtJmd0O3BnZCk7CkBAIC0yMjM0LDYgJiM0MzsyMjQyLDcgQEAgaW50IGt2bV9oYW5kbGVfZ3Vlc3Rfc2VhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIH0KIAogLyoqCiYjNDM7CiAgKiBrdm1faGFuZGxlX2d1ZXN0X2Fib3J0IC0gaGFuZGxlcyBhbGwgMm5kIHN0YWdlIGFib3J0cwogICogQHZjcHU6CXRoZSBWQ1BVIHBvaW50ZXIKICAqCkBAIC0yMjcxLDYgJiM0MzsyMjgwLDkgQEAgaW50IGt2bV9oYW5kbGVfZ3Vlc3RfYWJvcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiAJaXNfaWFidCA9IGt2bV92Y3B1X3RyYXBfaXNfaWFidCh2Y3B1KTsKIAomIzQzOwlpZiAoZXNyX2lzczJfaXNfaGRic3NmKGVzcikpCiYjNDM7CQlyZXR1cm4ga3ZtX2hhbmRsZV9oZGJzc19mYXVsdCh2Y3B1KTsKJiM0MzsKIAlpZiAoZXNyX2ZzY19pc190cmFuc2xhdGlvbl9mYXVsdChlc3IpKSB7CiAJCS8qIEJleW9uZCBzYW5pdGlzZWQgUEFSYW5nZSAod2hpY2ggaXMgdGhlIElQQSBsaW1pdCkgKi8KIAkJaWYgKGZhdWx0X2lwYSAmZ3Q7PSBCSVRfVUxMKGdldF9rdm1faXBhX2xpbWl0KCkpKSB7CkBAIC0yNTc2LDYgJiM0MzsyNTg4LDkgQEAgdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sCiB7CiAJYm9vbCBsb2dfZGlydHlfcGFnZXMgPSBuZXcgJmFtcDsmYW1wOyBuZXctJmd0O2ZsYWdzICZhbXA7IEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTOwogCiYjNDM7CWt2bV9hcm1faGRic3Nfb25fZGlydHlfbG9nZ2luZ19jaGFuZ2Uoa3ZtLAomIzQzOwkJYXRvbWljX3JlYWQoJmFtcDtrdm0tJmd0O25yX21lbXNsb3RzX2RpcnR5X2xvZ2dpbmcpKTsKJiM0MzsKIAkvKgogCSAqIEF0IHRoaXMgcG9pbnQgbWVtc2xvdCBoYXMgYmVlbiBjb21taXR0ZWQgYW5kIHRoZXJlIGlzIGFuCiAJICogYWxsb2NhdGVkIGRpcnR5X2JpdG1hcFtdLCBkaXJ0eSBwYWdlcyB3aWxsIGJlIHRyYWNrZWQgd2hpbGUgdGhlCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9yZXNldC5jIGIvYXJjaC9hcm02NC9rdm0vcmVzZXQuYwppbmRleCBiOTYzZmQ5NzVhYWNhZi4uZDgxMDRiY2JkOWZmYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL3Jlc2V0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vcmVzZXQuYwpAQCAtMjcsNiAmIzQzOzI3LDcgQEAKICNpbmNsdWRlICZsdDthc20va3ZtX2FzbS5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9rdm1fZW11bGF0ZS5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9rdm1fbW11LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9rdm1fZGlydHlfYml0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2t2bV9uZXN0ZWQuaCZndDsKICNpbmNsdWRlICZsdDthc20vdmlydC5oJmd0OwogCkBAIC0xNjEsNiAmIzQzOzE2Miw5IEBAIHZvaWQga3ZtX2FybV92Y3B1X2Rlc3Ryb3koc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyl2Y3B1LSZndDthcmNoLmN0eHQudm5jcl9hcnJheSk7CiAJa2ZyZWUodmNwdS0mZ3Q7YXJjaC52bmNyX3RsYik7CiAJa2ZyZWUodmNwdS0mZ3Q7YXJjaC5jY3NpZHIpOwomIzQzOwomIzQzOwlpZiAodmNwdS0mZ3Q7a3ZtLSZndDthcmNoLmVuYWJsZV9oZGJzcykKJiM0MzsJCWt2bV9hcm1fdmNwdV9mcmVlX2hkYnNzKHZjcHUpOwogfQogCiBzdGF0aWMgdm9pZCBrdm1fdmNwdV9yZXNldF9zdmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC90b29scy9jcHVjYXBzIGIvYXJjaC9hcm02NC90b29scy9jcHVjYXBzCmluZGV4IDliODVhODRmNmZkNDk0Li5hODc3MDZjOWQxNjBlMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC90b29scy9jcHVjYXBzCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2FwcwpAQCAtNjksNiAmIzQzOzY5LDcgQEAgSEFTX1ZBNTIKIEhBU19WSVJUX0hPU1RfRVhUTgogSEFTX1dGWFQKIEhBU19YTlgKJiM0MztIQVNfSERCU1MKIEhBRlQKIEhXX0RCTQogS1ZNX0hWSEUKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2NjEKCQkJCQkJCW91dHB1dDogMjA2CgkJCQkJCQl0aG91Z2h0czogMTMyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBIREJTUyBQYXRjaCBmb3IgS1ZNIG9uIGFybTY0KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGludHJvZHVjaW5nIEhEQlNTIHN1cHBvcnQgZm9yIEtWTSBvbiBhcm02NC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBzaWduaWZpY2FudCBvbmUsIHRvIHRoZSBjb3JlIEtWTSBsb2dpYy4gVGhlcmVmb3JlLCBmdXp6aW5nIGlzIGRlZmluaXRlbHkgd2FycmFudGVkLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY3JpdGljYWwgYXJlYXMgZm9yIGZ1enppbmcgYW5kIHRoZSByaWdodCBjb25maWd1cmF0aW9uIHRvIGVuYWJsZSB0aGlzLgoKRmlyc3QsIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggdG91Y2hlcy4gTG9va3MgbGlrZSBpdCYjMzk7cyBhZGRpbmcgbmV3IGZpbGVzIGBhcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuY2AsIGBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9kaXJ0eV9iaXQuaGAsIGFuZCBtb2RpZnlpbmcgc2V2ZXJhbCBleGlzdGluZyBLVk0gZmlsZXMuIEkgc2VlIG1vZGlmaWNhdGlvbnMgaW4gYGt2bV9hcmNoX3ZjcHVfY3JlYXRlYCwgYGt2bV9hcmNoX3ZjcHVfcHV0YCwgYGNoZWNrX3ZjcHVfcmVxdWVzdHNgLCBhbmQgdGhlIGxpa2Ug4oCTIGNvcmUgS1ZNIHN0dWZmLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBIREJTUy1zcGVjaWZpYyBmdW5jdGlvbnMuCgpJIGNhbiBzZWUgc29tZSBrZXkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIEhEQlNTIGltcGxlbWVudGF0aW9uIHRoYXQgYXJlIGFkZGVkL21vZGlmaWVkLiBUaGVzZSBhcmUgbXkgbWFpbiB0YXJnZXRzOgotIGBrdm1fYXJtX3ZjcHVfYWxsb2NfaGRic3NgCi0gYGt2bV9hcm1fdmNwdV9mcmVlX2hkYnNzYAotIGBrdm1fZmx1c2hfaGRic3NfYnVmZmVyYAotIGBrdm1faGFuZGxlX2hkYnNzX2ZhdWx0YAotIGBrdm1fYXJtX2VuYWJsZV9oZGJzc19nbG9iYWxgCi0gYGt2bV9hcm1fZGlzYWJsZV9oZGJzc19nbG9iYWxgCi0gYGt2bV9hcm1faGRic3Nfb25fZGlydHlfbG9nZ2luZ19jaGFuZ2VgCi0gYGt2bV9hcmNoX3N5bmNfZGlydHlfbG9nYAoKTm93LCBsZXQmIzM5O3MgY2hlY2sgZm9yIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzLiBMb29raW5nIGF0IHRoZSBgTWFrZWZpbGVgLCBJIHNlZSB0aGF0IHRoZSBgZGlydHlfYml0Lm9gIGZpbGUgaXMgYmVpbmcgdW5jb25kaXRpb25hbGx5IGJ1aWx0IHdoZW4gS1ZNIGlzIGVuYWJsZWQuIFNvLCB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG5lZWRlZCBpcyBgS1ZNYC4gTm90aGluZyBlbHNlIGFwcGVhcnMgdG8gYmUgYWRkZWQgaW4gdGhlIEtjb25maWcgb3Igc2ltaWxhciBmaWxlcy4KCkluaXRpYWxseSwgSSYjMzk7ZCB0aG91Z2h0IGFib3V0IG9taXR0aW5nIHN0YXRpYyBmdW5jdGlvbnMgbGlrZSBga3ZtX2FybV9lbmFibGVfaGRic3NfZ2xvYmFsYCBhbmQgYGt2bV9hcm1fZGlzYWJsZV9oZGJzc19nbG9iYWxgIGZyb20gdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QsIGFzc3VtaW5nIHRoZSBmdXp6ZXIgbWlnaHQgbm90IGRpcmVjdGx5IHRhcmdldCB0aGVtLiBIb3dldmVyLCBmb3IgY292ZXJhZ2UgYW5kIHRvIGd1aWRlIHRoZSBmdXp6ZXIsIGluY2x1ZGluZyB0aGVtIG1ha2VzIHNlbnNlLgoKQWZ0ZXIgc29tZSBtb3JlIHRob3VnaHQsIEkmIzM5O3ZlIGRlY2lkZWQgdG8gaW5jbHVkZSBga3ZtX2FyY2hfc3luY19kaXJ0eV9sb2dgLCBpdCYjMzk7cyBhIGNyaXRpY2FsIGZ1bmN0aW9uIGZvciBkaXJ0eSBsb2cgc3luY2hyb25pemF0aW9uLiBOb3csIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAgaXMgYWxzbyBhIGNyaXRpY2FsIGNvbXBvbmVudCB0byBmdXp6LiBBdm9pZGluZyBga3ZtX2hhbmRsZV9ndWVzdF9hYm9ydGAgYXMgaXQmIzM5O3MgbGlrZWx5IGEgaG90LXBhdGggZnVuY3Rpb24gYW5kIG1pZ2h0IGJlIGxlc3MgcHJvZml0YWJsZSBmb3IgZnV6emluZy4KCk15IHJlYXNvbmluZyBpcyB0aGlzOiBUaGlzIHBhdGNoIGZ1bmRhbWVudGFsbHkgY2hhbmdlcyBob3cgZGlydHkgcGFnZSBsb2dnaW5nIGFuZCBtZW1vcnkgbWFuYWdlbWVudCB3b3JrIHdpdGhpbiBLVk0gb24gYXJtNjQuIFNpbmNlIHRoaXMgaXMgYW4gaW50ZWdyYXRpb24gdGhhdCB3aWxsIGJlIGFjY2Vzc2libGUgdG8gdXNlcnNwYWNlIHZpYSB0aGUgS1ZNIGlvY3RscywgdGhpcyBpcyB3b3J0aCBmdXp6aW5nIGFuZCBpbmNsdWRpbmcgdGhpcyBjcml0aWNhbCBjb21wb25lbnQgd2lsbCBoZWxwLgoKU28sIGhlcmUmIzM5O3MgbXkgcGxhbiB0byBjYWxsIGBzZXQtcmVzdWx0c2A6CgpgV29ydGhGdXp6aW5nOiB0cnVlYApgRm9jdXNTeW1ib2xzYDoKLSBrdm1fYXJtX3ZjcHVfYWxsb2NfaGRic3MKLSBrdm1fYXJtX3ZjcHVfZnJlZV9oZGJzcwotIGt2bV9mbHVzaF9oZGJzc19idWZmZXIKLSBrdm1faGFuZGxlX2hkYnNzX2ZhdWx0Ci0ga3ZtX2FybV9lbmFibGVfaGRic3NfZ2xvYmFsCi0ga3ZtX2FybV9kaXNhYmxlX2hkYnNzX2dsb2JhbAotIGt2bV9hcm1faGRic3Nfb25fZGlydHlfbG9nZ2luZ19jaGFuZ2UKLSBrdm1fYXJjaF9zeW5jX2RpcnR5X2xvZwpgRW5hYmxlQ29uZmlnc2A6Ci0gS1ZNCgpJJiMzOTttIGNvbmZpZGVudCB0aGlzIGlzIHRoZSByaWdodCBhcHByb2FjaCB0byBlbnN1cmUgdGhpcyBwYXRjaCBnZXRzIHRob3JvdWdoIGZ1enppbmcgY292ZXJhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDY6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcm1fdmNwdV9hbGxvY19oZGJzcyYjMzQ7LAogICAgJiMzNDtrdm1fYXJtX3ZjcHVfZnJlZV9oZGJzcyYjMzQ7LAogICAgJiMzNDtrdm1fZmx1c2hfaGRic3NfYnVmZmVyJiMzNDssCiAgICAmIzM0O2t2bV9oYW5kbGVfaGRic3NfZmF1bHQmIzM0OywKICAgICYjMzQ7a3ZtX2FybV9lbmFibGVfaGRic3NfZ2xvYmFsJiMzNDssCiAgICAmIzM0O2t2bV9hcm1fZGlzYWJsZV9oZGJzc19nbG9iYWwmIzM0OywKICAgICYjMzQ7a3ZtX2FybV9oZGJzc19vbl9kaXJ0eV9sb2dnaW5nX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9zeW5jX2RpcnR5X2xvZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIEhhcmR3YXJlIERpcnR5IHN0YXRlIHRyYWNraW5nIHN0cnVjdHVyZSAoSERCU1MpIHN1cHBvcnQgZm9yIEtWTSBvbiBhcm02NC4gSXQgbW9kaWZpZXMgY29yZSBLVk0gbG9naWMgZm9yIGRpcnR5IHBhZ2UgbG9nZ2luZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyBhbmQgZ3Vlc3QgZXhlY3V0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fYXJtX3ZjcHVfYWxsb2NfaGRic3MmIzM0OywKICAgICYjMzQ7a3ZtX2FybV92Y3B1X2ZyZWVfaGRic3MmIzM0OywKICAgICYjMzQ7a3ZtX2ZsdXNoX2hkYnNzX2J1ZmZlciYjMzQ7LAogICAgJiMzNDtrdm1faGFuZGxlX2hkYnNzX2ZhdWx0JiMzNDssCiAgICAmIzM0O2t2bV9hcm1fZW5hYmxlX2hkYnNzX2dsb2JhbCYjMzQ7LAogICAgJiMzNDtrdm1fYXJtX2Rpc2FibGVfaGRic3NfZ2xvYmFsJiMzNDssCiAgICAmIzM0O2t2bV9hcm1faGRic3Nfb25fZGlydHlfbG9nZ2luZ19jaGFuZ2UmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfc3luY19kaXJ0eV9sb2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBIYXJkd2FyZSBEaXJ0eSBzdGF0ZSB0cmFja2luZyBzdHJ1Y3R1cmUgKEhEQlNTKSBzdXBwb3J0IGZvciBLVk0gb24gYXJtNjQuIEl0IG1vZGlmaWVzIGNvcmUgS1ZNIGxvZ2ljIGZvciBkaXJ0eSBwYWdlIGxvZ2dpbmcgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgYW5kIGd1ZXN0IGV4ZWN1dGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjEyOjA0LjAxMDA4Nzc5OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDY2NzMyNjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcm1fdmNwdV9hbGxvY19oZGJzc1wiLFxuICAgIFwia3ZtX2FybV92Y3B1X2ZyZWVfaGRic3NcIixcbiAgICBcImt2bV9mbHVzaF9oZGJzc19idWZmZXJcIixcbiAgICBcImt2bV9oYW5kbGVfaGRic3NfZmF1bHRcIixcbiAgICBcImt2bV9hcm1fZW5hYmxlX2hkYnNzX2dsb2JhbFwiLFxuICAgIFwia3ZtX2FybV9kaXNhYmxlX2hkYnNzX2dsb2JhbFwiLFxuICAgIFwia3ZtX2FybV9oZGJzc19vbl9kaXJ0eV9sb2dnaW5nX2NoYW5nZVwiLFxuICAgIFwia3ZtX2FyY2hfc3luY19kaXJ0eV9sb2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIEhhcmR3YXJlIERpcnR5IHN0YXRlIHRyYWNraW5nIHN0cnVjdHVyZSAoSERCU1MpIHN1cHBvcnQgZm9yIEtWTSBvbiBhcm02NC4gSXQgbW9kaWZpZXMgY29yZSBLVk0gbG9naWMgZm9yIGRpcnR5IHBhZ2UgbG9nZ2luZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyBhbmQgZ3Vlc3QgZXhlY3V0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjoxMjowNC4wMTAwOTI4NzhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMzY1MjM4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDBiYmEzYjkxNWExZGJjODdkMjkyMDQyNzViMTU1NDVjNzFjYTJmZGNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMTAgMDY6MTI6MDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaFxcbmluZGV4IGE1Nzg3MGZhOTZkYjViLi5iZGZhYjA4NmZkOTQ1MyAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaFxcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oXFxuQEAgLTg2Myw2ICs4NjMsMTEgQEAgc3RhdGljIGlubGluZSBib29sIHN5c3RlbV9zdXBwb3J0c19oYWZ0KHZvaWQpXFxuIFxcdHJldHVybiBjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBRlQpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wgc3lzdGVtX3N1cHBvcnRzX2hkYnNzKHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX0hEQlNTKTtcXG4rfVxcbitcXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHN5c3RlbV9zdXBwb3J0c19tcGFtKHZvaWQpXFxuIHtcXG4gXFx0cmV0dXJuIGFsdGVybmF0aXZlX2hhc19jYXBfdW5saWtlbHkoQVJNNjRfTVBBTSk7XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZXNyLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2Vzci5oXFxuaW5kZXggODFjMTczMjBhNTg4ZDkuLjJlNmI2NzliNTkwODA4IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZXNyLmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2Vzci5oXFxuQEAgLTQzNyw2ICs0MzcsMTEgQEBcXG4gI2lmbmRlZiBfX0FTU0VNQkxFUl9fXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vdHlwZXMuaFxcdTAwM2VcXG4gXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBlc3JfaXNzMl9pc19oZGJzc2YodW5zaWduZWQgbG9uZyBlc3IpXFxuK3tcXG4rXFx0cmV0dXJuIEVTUl9FTHhfSVNTMihlc3IpIFxcdTAwMjYgRVNSX0VMeF9IREJTU0Y7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBlc3JfYnJrX2NvbW1lbnQodW5zaWduZWQgbG9uZyBlc3IpXFxuIHtcXG4gXFx0cmV0dXJuIGVzciBcXHUwMDI2IEVTUl9FTHhfQlJLNjRfSVNTX0NPTU1FTlRfTUFTSztcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZGlydHlfYml0LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9kaXJ0eV9iaXQuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmE0Y2RhOGNkYWIyNDcyXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2RpcnR5X2JpdC5oXFxuQEAgLTAsMCArMSwyOSBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXFxuKy8qXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBBUk0gTHRkLlxcbisgKiBBdXRob3I6IExlb25hcmRvIEJyYXMgXFx1MDAzY2xlby5icmFzQGFybS5jb21cXHUwMDNlXFxuKyAqL1xcbitcXG4rI2lmbmRlZiBfX0FSTTY0X0tWTV9ESVJUWV9CSVRfSF9fXFxuKyNkZWZpbmUgX19BUk02NF9LVk1fRElSVFlfQklUX0hfX1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fcGd0YWJsZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL3N5c3JlZy5oXFx1MDAzZVxcbitcXG4rLyogSERCU1MgZW50cnkgZmllbGQgZGVmaW5pdGlvbnMgKi9cXG4rI2RlZmluZSBIREJTU19FTlRSWV9WQUxJRFxcdEJJVCgwKVxcbisjZGVmaW5lIEhEQlNTX0VOVFJZX1RUV0xfU0hJRlQgKDEpXFxuKyNkZWZpbmUgSERCU1NfRU5UUllfVFRXTF9NQVNLIChHRU5NQVNLKDMsIDEpKVxcbisjZGVmaW5lIEhEQlNTX0VOVFJZX1RUV0woeCkgXFxcXFxcbitcXHQoKCh4KSBcXHUwMDNjXFx1MDAzYyBIREJTU19FTlRSWV9UVFdMX1NISUZUKSBcXHUwMDI2IEhEQlNTX0VOVFJZX1RUV0xfTUFTSylcXG4rI2RlZmluZSBIREJTU19FTlRSWV9UVFdMX1JFU1YgSERCU1NfRU5UUllfVFRXTCgtNClcXG4rI2RlZmluZSBIREJTU19FTlRSWV9JUEFcXHRHRU5NQVNLX1VMTCg1NSwgMTIpXFxuK1xcbitpbnQga3ZtX2FybV92Y3B1X2FsbG9jX2hkYnNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IG9yZGVyKTtcXG4rdm9pZCBrdm1fYXJtX3ZjcHVfZnJlZV9oZGJzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbit2b2lkIGt2bV9mbHVzaF9oZGJzc19idWZmZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4raW50IGt2bV9oYW5kbGVfaGRic3NfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4rdm9pZCBrdm1fYXJtX2hkYnNzX29uX2RpcnR5X2xvZ2dpbmdfY2hhbmdlKHN0cnVjdCBrdm0gKmt2bSwgaW50IG5yX21lbXNsb3RzX2xvZ2dpbmcpO1xcbit2b2lkIGt2bV9hcm1fZGlzYWJsZV9oZGJzc19nbG9iYWwoc3RydWN0IGt2bSAqa3ZtKTtcXG4rXFxuKyNlbmRpZiAvKiBfX0FSTTY0X0tWTV9ESVJUWV9CSVRfSF9fICovXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbmluZGV4IGJhZTJjNGY5MmVmNWMwLi5jZWNmYjg4NGE2NGZhNyAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5AQCAtNTUsNiArNTUsNyBAQFxcbiAjZGVmaW5lIEtWTV9SRVFfR1VFU1RfSFlQX0lSUV9QRU5ESU5HXFx0S1ZNX0FSQ0hfUkVRKDkpXFxuICNkZWZpbmUgS1ZNX1JFUV9NQVBfTDFfVk5DUl9FTDJcXHRcXHRLVk1fQVJDSF9SRVEoMTApXFxuICNkZWZpbmUgS1ZNX1JFUV9WR0lDX1BST0NFU1NfVVBEQVRFXFx0S1ZNX0FSQ0hfUkVRKDExKVxcbisjZGVmaW5lIEtWTV9SRVFfRkxVU0hfSERCU1NcXHRcXHRcXHRLVk1fQVJDSF9SRVEoMTIpXFxuIFxcbiAjZGVmaW5lIEtWTV9ESVJUWV9MT0dfTUFOVUFMX0NBUFMgICAoS1ZNX0RJUlRZX0xPR19NQU5VQUxfUFJPVEVDVF9FTkFCTEUgfCBcXFxcXFxuIFxcdFxcdFxcdFxcdCAgICAgS1ZNX0RJUlRZX0xPR19JTklUSUFMTFlfU0VUKVxcbkBAIC00MjAsNiArNDIxLDEwIEBAIHN0cnVjdCBrdm1fYXJjaCB7XFxuIFxcdCAqL1xcbiBcXHRzdHJ1Y3Qga3ZtX3Byb3RlY3RlZF92bSBwa3ZtO1xcbiBcXG4rXFx0LyogSERCU1M6IHBlci1WTSBkaXJ0eSB0cmFja2luZyBzdGF0ZSAqL1xcbitcXHRib29sIGVuYWJsZV9oZGJzcztcXG4rXFx0dW5zaWduZWQgaW50IGhkYnNzX29yZGVyO1xcbitcXG4gI2lmZGVmIENPTkZJR19QVERVTVBfU1RBR0UyX0RFQlVHRlNcXG4gXFx0LyogTmVzdGVkIHZpcnR1YWxpemF0aW9uIGluZm8gKi9cXG4gXFx0c3RydWN0IGRlbnRyeSAqZGVidWdmc19udl9kZW50cnk7XFxuQEAgLTgzOCw2ICs4NDMsMTIgQEAgc3RydWN0IHZjcHVfcmVzZXRfc3RhdGUge1xcbiBcXHRib29sXFx0XFx0cmVzZXQ7XFxuIH07XFxuIFxcbitzdHJ1Y3QgdmNwdV9oZGJzc19zdGF0ZSB7XFxuK1xcdHBoeXNfYWRkcl90IGJhc2VfcGh5czsgICAvKiBmb3IgbWVtb3J5IGZyZWUgKi9cXG4rXFx0dTY0IGhkYnNzYnJfZWwyOyAgICAgICAgIC8qIGxvYWQgZGlyZWN0bHkgKi9cXG4rXFx0dTY0IGhkYnNzcHJvZF9lbDI7ICAgICAgIC8qIHNhdmUgZGlyZWN0bHkgKi9cXG4rfTtcXG4rXFxuIHN0cnVjdCB2bmNyX3RsYjtcXG4gXFxuIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcXG5AQCAtOTQ1LDYgKzk1Niw5IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcXG4gXFxuIFxcdC8qIEh5cC1yZWFkYWJsZSBjb3B5IG9mIGt2bV92Y3B1OjpwaWQgKi9cXG4gXFx0cGlkX3QgcGlkO1xcbitcXG4rXFx0LyogSERCU1MgcmVnaXN0ZXJzIGluZm8gKi9cXG4rXFx0c3RydWN0IHZjcHVfaGRic3Nfc3RhdGUgaGRic3M7XFxuIH07XFxuIFxcbiAvKlxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmhcXG5pbmRleCA0MWE4Njg3OTM4ZWI2Yi4uNWUwZmFjNGJmYTUzNjkgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGd0YWJsZS5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGd0YWJsZS5oXFxuQEAgLTkzLDYgKzkzLDggQEAgdHlwZWRlZiB1NjQga3ZtX3B0ZV90O1xcbiBcXG4gI2RlZmluZSBLVk1fUFRFX0xFQUZfQVRUUl9ISV9TMl9YTlxcdEdFTk1BU0soNTQsIDUzKVxcbiBcXG4rI2RlZmluZSBLVk1fUFRFX0xFQUZfQVRUUl9ISV9TMl9EQk1cXHRCSVQoNTEpXFxuK1xcbiAjZGVmaW5lIEtWTV9QVEVfTEVBRl9BVFRSX0hJX1MxX0dQXFx0QklUKDUwKVxcbiBcXG4gI2RlZmluZSBLVk1fUFRFX0xFQUZfQVRUUl9TMl9QRVJNU1xcdChLVk1fUFRFX0xFQUZfQVRUUl9MT19TMl9TMkFQX1IgfCBcXFxcXFxuQEAgLTI0OSwxMCArMjUxLDEyIEBAIHN0cnVjdCBrdm1fcGd0YWJsZV9tbV9vcHMge1xcbiAgKiBlbnVtIGt2bV9wZ3RhYmxlX3N0YWdlMl9mbGFncyAtIFN0YWdlLTIgcGFnZS10YWJsZSBmbGFncy5cXG4gICogQEtWTV9QR1RBQkxFX1MyX0lETUFQOlxcdE9ubHkgdXNlIGlkZW50aXR5IG1hcHBpbmdzLlxcbiAgKiBAS1ZNX1BHVEFCTEVfUzJfQVNfUzE6XFx0RmluYWwgbWVtb3J5IGF0dHJpYnV0ZXMgYXJlIHRoYXQgb2YgU3RhZ2UtMS5cXG4rICogQEtWTV9QR1RBQkxFX1MyX0RCTTpcXHRIYXJkd2FyZS1tYW5hZ2VkIERCTSBmb3Igd3JpdGFibGUgcGFnZXMuXFxuICAqL1xcbiBlbnVtIGt2bV9wZ3RhYmxlX3N0YWdlMl9mbGFncyB7XFxuIFxcdEtWTV9QR1RBQkxFX1MyX0lETUFQXFx0XFx0XFx0PSBCSVQoMCksXFxuIFxcdEtWTV9QR1RBQkxFX1MyX0FTX1MxXFx0XFx0XFx0PSBCSVQoMSksXFxuK1xcdEtWTV9QR1RBQkxFX1MyX0RCTVxcdFxcdFxcdD0gQklUKDIpLFxcbiB9O1xcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3lzcmVnLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N5c3JlZy5oXFxuaW5kZXggN2FhMDhkNTlkNDk0NDguLjEzNTRhNThjMzMxNjdiIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3lzcmVnLmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N5c3JlZy5oXFxuQEAgLTEwMzksNiArMTAzOSwxNyBAQFxcbiBcXG4gI2RlZmluZSBHQ1NfQ0FQKHgpXFx0KCgoKHVuc2lnbmVkIGxvbmcpeCkgXFx1MDAyNiBHQ1NfQ0FQX0FERFJfTUFTSykgfCBcXFxcXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBHQ1NfQ0FQX1ZBTElEX1RPS0VOKVxcbitcXG4rLypcXG4rICogRGVmaW5pdGlvbnMgZm9yIHRoZSBIREJTUyBmZWF0dXJlXFxuKyAqL1xcbisjZGVmaW5lIEhEQlNTX01BWF9PUkRFUlxcdFxcdEhEQlNTQlJfRUwyX1NaXzJNQlxcbitcXG4rI2RlZmluZSBIREJTU0JSX0VMMihiYWRkciwgc3opXFx0KCgoYmFkZHIpIFxcdTAwMjYgSERCU1NCUl9FTDJfQkFERFJfTUFTSykgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdCBGSUVMRF9QUkVQKEhEQlNTQlJfRUwyX1NaX01BU0ssIHN6KSlcXG4rXFxuKyNkZWZpbmUgSERCU1NQUk9EX0lEWChwcm9kKVxcdEZJRUxEX0dFVChIREJTU1BST0RfRUwyX0lOREVYX01BU0ssIHByb2QpXFxuK1xcbiAvKlxcbiAgKiBEZWZpbml0aW9ucyBmb3IgR0lDdjUgaW5zdHJ1Y3Rpb25zXFxuICAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmNcXG5pbmRleCA5YTIyZGYwYzUxMjBmMy4uYWEzMjdlZWJhZjFjYTggMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jXFxuKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jXFxuQEAgLTIxMzEsNiArMjEzMSwxMSBAQCBzdGF0aWMgYm9vbCBodmhlX3Bvc3NpYmxlKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSxcXG4gXFx0cmV0dXJuIGFybTY0X3Rlc3Rfc3dfZmVhdHVyZV9vdmVycmlkZShBUk02NF9TV19GRUFUVVJFX09WRVJSSURFX0hWSEUpO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBoYXNfdmhlX2hkYnNzKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSwgaW50IGNvcGUpXFxuK3tcXG4rXFx0cmV0dXJuIGlzX2tlcm5lbF9pbl9oeXBfbW9kZSgpIFxcdTAwMjZcXHUwMDI2IGhhc19jcHVpZF9mZWF0dXJlKGVudHJ5LCBjb3BlKTtcXG4rfVxcbitcXG4gYm9vbCBjcHVfc3VwcG9ydHNfYmJtbDJfbm9hYm9ydCh2b2lkKVxcbiB7XFxuIFxcdC8qXFxuQEAgLTI3ODEsNiArMjc4NiwxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgYXJtNjRfZmVhdHVyZXNbXSA9IHtcXG4gXFx0XFx0QVJNNjRfQ1BVSURfRklFTERTKElEX0FBNjRNTUZSMV9FTDEsIEhBRkRCUywgSEFGVClcXG4gXFx0fSxcXG4gI2VuZGlmXFxuK1xcdHtcXG4rXFx0XFx0LmRlc2MgPSBcXFwiSGFyZHdhcmUgRGlydHkgc3RhdGUgdHJhY2tpbmcgc3RydWN0dXJlIChIREJTUylcXFwiLFxcbitcXHRcXHQudHlwZSA9IEFSTTY0X0NQVUNBUF9TWVNURU1fRkVBVFVSRSxcXG4rXFx0XFx0LmNhcGFiaWxpdHkgPSBBUk02NF9IQVNfSERCU1MsXFxuK1xcdFxcdC5tYXRjaGVzID0gaGFzX3ZoZV9oZGJzcyxcXG4rXFx0XFx0QVJNNjRfQ1BVSURfRklFTERTKElEX0FBNjRNTUZSMV9FTDEsIEhBRkRCUywgSERCU1MpXFxuK1xcdH0sXFxuIFxcdHtcXG4gXFx0XFx0LmRlc2MgPSBcXFwiQ1JDMzIgaW5zdHJ1Y3Rpb25zXFxcIixcXG4gXFx0XFx0LmNhcGFiaWxpdHkgPSBBUk02NF9IQVNfQ1JDMzIsXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlIGIvYXJjaC9hcm02NC9rdm0vTWFrZWZpbGVcXG5pbmRleCA1OTYxMmQyZjI3N2MxZC4uZWMyNzQ5YWY2NGZhNGMgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vTWFrZWZpbGVcXG4rKysgYi9hcmNoL2FybTY0L2t2bS9NYWtlZmlsZVxcbkBAIC0xOCw2ICsxOCw3IEBAIGt2bS15ICs9IGFybS5vIG1tdS5vIG1taW8ubyBwc2NpLm8gaHlwZXJjYWxscy5vIHB2dGltZS5vIFxcXFxcXG4gXFx0IGd1ZXN0Lm8gZGVidWcubyByZXNldC5vIHN5c19yZWdzLm8gc3RhY2t0cmFjZS5vIFxcXFxcXG4gXFx0IHZnaWMtc3lzLXJlZy12My5vIGZwc2ltZC5vIHBrdm0ubyBcXFxcXFxuIFxcdCBhcmNoX3RpbWVyLm8gdHJuZy5vIHZtaWQubyBlbXVsYXRlLW5lc3RlZC5vIG5lc3RlZC5vIGF0Lm8gXFxcXFxcbitcXHQgZGlydHlfYml0Lm8gXFxcXFxcbiBcXHQgdmdpYy92Z2ljLm8gdmdpYy92Z2ljLWluaXQubyBcXFxcXFxuIFxcdCB2Z2ljL3ZnaWMtaXJxZmQubyB2Z2ljL3ZnaWMtdjIubyBcXFxcXFxuIFxcdCB2Z2ljL3ZnaWMtdjMubyB2Z2ljL3ZnaWMtdjQubyBcXFxcXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2FybS5jIGIvYXJjaC9hcm02NC9rdm0vYXJtLmNcXG5pbmRleCA1MGFkZmZmNzViZTgyZS4uNTM2ZDk0Nzk5YmE4ZjkgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vYXJtLmNcXG4rKysgYi9hcmNoL2FybTY0L2t2bS9hcm0uY1xcbkBAIC0zOCw2ICszOCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX2FzbS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9lbXVsYXRlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX2h5cC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9kaXJ0eV9iaXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fbW11LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX25lc3RlZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9wa3ZtLmhcXHUwMDNlXFxuQEAgLTMxNiw2ICszMTcsMTQgQEAgdm9pZCBrdm1fYXJjaF9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSlcXG4gXFx0aWYgKGlzX3Byb3RlY3RlZF9rdm1fZW5hYmxlZCgpKVxcbiBcXHRcXHRwa3ZtX2Rlc3Ryb3lfaHlwX3ZtKGt2bSk7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBVc2Vyc3BhY2UgbWF5IGRlc3Ryb3kgdGhlIFZNIHdpdGhvdXQgZGlzYWJsaW5nIGRpcnR5IGxvZ2dpbmcsXFxuK1xcdCAqIHNvIHRoZSBhdXRvLWRpc2FibGUgcGF0aCBpcyBuZXZlciByZWFjaGVkLiBGb3JjZSBkaXNhYmxlIEhEQlNTXFxuK1xcdCAqIGhlcmUgdG8gZW5zdXJlIHZDUFUgYnVmZmVycyBhcmUgZnJlZWQgYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtzLlxcbitcXHQgKi9cXG4rXFx0aWYgKGt2bS1cXHUwMDNlYXJjaC5lbmFibGVfaGRic3MpXFxuK1xcdFxcdGt2bV9hcm1fZGlzYWJsZV9oZGJzc19nbG9iYWwoa3ZtKTtcXG4rXFxuIFxcdGt2bV91bmluaXRfc3RhZ2UyX21tdShrdm0pO1xcbiBcXHRrdm1fZGVzdHJveV9tcGlkcl9kYXRhKGt2bSk7XFxuIFxcbkBAIC01NjUsNiArNTc0LDEyIEBAIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGt2bV92Z2ljX3ZjcHVfZGVzdHJveSh2Y3B1KTtcXG4gXFxuK1xcdGlmICh2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guZW5hYmxlX2hkYnNzKSB7XFxuK1xcdFxcdGVyciA9IGt2bV9hcm1fdmNwdV9hbGxvY19oZGJzcyh2Y3B1LCB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guaGRic3Nfb3JkZXIpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRrdm1fdmdpY192Y3B1X2Rlc3Ryb3kodmNwdSk7XFxuK1xcdH1cXG4rXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuQEAgLTc0OCw2ICs3NjMsOSBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0a3ZtX3ZjcHVfcHV0X2h3X21tdSh2Y3B1KTtcXG4gXFx0a3ZtX2FybV92bWlkX2NsZWFyX2FjdGl2ZSgpO1xcbiBcXG4rXFx0aWYgKHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5lbmFibGVfaGRic3MpXFxuK1xcdFxcdGt2bV9mbHVzaF9oZGJzc19idWZmZXIodmNwdSk7XFxuK1xcbiBcXHR2Y3B1X2NsZWFyX29uX3Vuc3VwcG9ydGVkX2NwdSh2Y3B1KTtcXG4gXFx0dmNwdS1cXHUwMDNlY3B1ID0gLTE7XFxuIH1cXG5AQCAtMTE1MCw2ICsxMTY4LDkgQEAgc3RhdGljIGludCBjaGVja192Y3B1X3JlcXVlc3RzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0aWYgKGt2bV9kaXJ0eV9yaW5nX2NoZWNrX3JlcXVlc3QodmNwdSkpXFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbiBcXG4rXFx0XFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfRkxVU0hfSERCU1MsIHZjcHUpKVxcbitcXHRcXHRcXHRrdm1fZmx1c2hfaGRic3NfYnVmZmVyKHZjcHUpO1xcbitcXG4gXFx0XFx0Y2hlY2tfbmVzdGVkX3ZjcHVfcmVxdWVzdHModmNwdSk7XFxuIFxcdH1cXG4gXFxuQEAgLTE5NjQsNyArMTk4NSwxNSBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCxcXG4gXFxuIHZvaWQga3ZtX2FyY2hfc3luY19kaXJ0eV9sb2coc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90KVxcbiB7XFxuK1xcdC8qXFxuK1xcdCAqIEZsdXNoIGFsbCBDUFVzJyBkaXJ0eSBsb2cgYnVmZmVycyB0byB0aGUgZGlydHlfYml0bWFwLiAgQ2FsbGVkXFxuK1xcdCAqIGJlZm9yZSByZXBvcnRpbmcgZGlydHlfYml0bWFwIHRvIHVzZXJzcGFjZS4gU2VuZCBhIHJlcXVlc3Qgd2l0aFxcbitcXHQgKiBLVk1fUkVRVUVTVF9XQUlUIHRvIGZsdXNoIGJ1ZmZlciBzeW5jaHJvbm91c2x5LlxcbitcXHQgKi9cXG4rXFx0aWYgKCFrdm0tXFx1MDAzZWFyY2guZW5hYmxlX2hkYnNzKVxcbitcXHRcXHRyZXR1cm47XFxuIFxcbitcXHRrdm1fbWFrZV9hbGxfY3B1c19yZXF1ZXN0KGt2bSwgS1ZNX1JFUV9GTFVTSF9IREJTUyB8IEtWTV9SRVFVRVNUX1dBSVQpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9zZXRfZGV2aWNlX2FkZHIoc3RydWN0IGt2bSAqa3ZtLFxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYyBiL2FyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYzViZjg2NmMyM2VmMmJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmNcXG5AQCAtMCwwICsxLDIxOSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKy8qXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBBUk0gTHRkLlxcbisgKiBBdXRob3I6IExlb25hcmRvIEJyYXMgXFx1MDAzY2xlby5icmFzQGFybS5jb21cXHUwMDNlXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fZGlydHlfYml0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX21tdS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL3N5c3JlZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZ2ZwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rY29uZmlnLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbS5oXFx1MDAzZVxcbitcXG4raW50IGt2bV9hcm1fdmNwdV9hbGxvY19oZGJzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBvcmRlcilcXG4re1xcbitcXHRzdHJ1Y3QgcGFnZSAqaGRic3NfcGcgPSBOVUxMO1xcbitcXG4rXFx0aWYgKHZjcHUtXFx1MDAzZWFyY2guaGRic3MuaGRic3Nicl9lbDIgfHwgIXN5c3RlbV9zdXBwb3J0c19oZGJzcygpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChvcmRlciBcXHUwMDNlIEhEQlNTX01BWF9PUkRFUilcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRoZGJzc19wZyA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUxfQUNDT1VOVCwgb3JkZXIpO1xcbitcXHRpZiAoIWhkYnNzX3BnKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHZjcHUtXFx1MDAzZWFyY2guaGRic3MgPSAoc3RydWN0IHZjcHVfaGRic3Nfc3RhdGUpIHtcXG4rXFx0XFx0LmJhc2VfcGh5cyA9IHBhZ2VfdG9fcGh5cyhoZGJzc19wZyksXFxuK1xcdFxcdC5oZGJzc2JyX2VsMiA9IEhEQlNTQlJfRUwyKHBhZ2VfdG9fcGh5cyhoZGJzc19wZyksIG9yZGVyKSxcXG4rXFx0XFx0LmhkYnNzcHJvZF9lbDIgPSAwLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3ZvaWQga3ZtX2FybV92Y3B1X2ZyZWVfaGRic3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit7XFxuK1xcdHN0cnVjdCBwYWdlICpoZGJzc19wZztcXG4rXFxuK1xcdGlmICghdmNwdS1cXHUwMDNlYXJjaC5oZGJzcy5oZGJzc2JyX2VsMikge1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGhkYnNzX3BnID0gcGh5c190b19wYWdlKHZjcHUtXFx1MDAzZWFyY2guaGRic3MuYmFzZV9waHlzKTtcXG4rXFx0aWYgKGhkYnNzX3BnKVxcbitcXHRcXHRfX2ZyZWVfcGFnZXMoaGRic3NfcGcsXFxuK1xcdFxcdCAgICAgRklFTERfR0VUKEhEQlNTQlJfRUwyX1NaX01BU0ssXFxuK1xcdFxcdFxcdCAgICAgICB2Y3B1LVxcdTAwM2VhcmNoLmhkYnNzLmhkYnNzYnJfZWwyKSk7XFxuK1xcbitcXHR2Y3B1LVxcdTAwM2VhcmNoLmhkYnNzLmhkYnNzYnJfZWwyID0gMDtcXG4rfVxcbitcXG4rdm9pZCBrdm1fZmx1c2hfaGRic3NfYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4re1xcbitcXHRpbnQgaWR4LCBjdXJyX2lkeDtcXG4rXFx0dTY0ICpoZGJzc19idWY7XFxuK1xcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXFx1MDAzZWt2bTtcXG4rXFxuK1xcdGlmICgha3ZtLVxcdTAwM2VhcmNoLmVuYWJsZV9oZGJzcylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Y3Vycl9pZHggPSBIREJTU1BST0RfSURYKHJlYWRfc3lzcmVnX3MoU1lTX0hEQlNTUFJPRF9FTDIpKTtcXG4rXFxuK1xcdC8qIERvIG5vdGhpbmcgaWYgSERCU1MgYnVmZmVyIGlzIGVtcHR5IG9yIGJyX2VsMiBpcyBOVUxMICovXFxuK1xcdGlmIChjdXJyX2lkeCA9PSAwIHx8IHZjcHUtXFx1MDAzZWFyY2guaGRic3MuaGRic3Nicl9lbDIgPT0gMClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aGRic3NfYnVmID0gcGFnZV9hZGRyZXNzKHBoeXNfdG9fcGFnZSh2Y3B1LVxcdTAwM2VhcmNoLmhkYnNzLmJhc2VfcGh5cykpO1xcbitcXHRpZiAoIWhkYnNzX2J1ZilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Z3VhcmQod3JpdGVfbG9ja19pcnFzYXZlKShcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuK1xcdGZvciAoaWR4ID0gMDsgaWR4IFxcdTAwM2MgY3Vycl9pZHg7IGlkeCsrKSB7XFxuK1xcdFxcdHU2NCBncGE7XFxuK1xcbitcXHRcXHRncGEgPSBoZGJzc19idWZbaWR4XTtcXG4rXFx0XFx0aWYgKCEoZ3BhIFxcdTAwMjYgSERCU1NfRU5UUllfVkFMSUQpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGdwYSBcXHUwMDI2PSBIREJTU19FTlRSWV9JUEE7XFxuK1xcdFxcdGt2bV92Y3B1X21hcmtfcGFnZV9kaXJ0eSh2Y3B1LCBncGEgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIHJlc2V0IEhEQlNTIGluZGV4ICovXFxuK1xcdHdyaXRlX3N5c3JlZ19zKDAsIFNZU19IREJTU1BST0RfRUwyKTtcXG4rXFx0dmNwdS1cXHUwMDNlYXJjaC5oZGJzcy5oZGJzc3Byb2RfZWwyID0gMDtcXG4rXFx0aXNiKCk7XFxuK31cXG4rXFxuK2ludCBrdm1faGFuZGxlX2hkYnNzX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4re1xcbitcXHR1NjQgcHJvZDtcXG4rXFx0dTY0IGZzYztcXG4rXFxuK1xcdHByb2QgPSByZWFkX3N5c3JlZ19zKFNZU19IREJTU1BST0RfRUwyKTtcXG4rXFx0ZnNjID0gRklFTERfR0VUKEhEQlNTUFJPRF9FTDJfRlNDX01BU0ssIHByb2QpO1xcbitcXG4rXFx0c3dpdGNoIChmc2MpIHtcXG4rXFx0Y2FzZSBIREJTU1BST0RfRUwyX0ZTQ19PSzpcXG4rXFx0XFx0LyogQnVmZmVyIGZ1bGwsIHNldCByZXF1ZXN0IHRvIGZsdXNoIG9uIG5leHQgdmNwdSBleGl0ICovXFxuK1xcdFxcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9GTFVTSF9IREJTUywgdmNwdSk7XFxuK1xcdFxcdHJldHVybiAxO1xcbitcXHRjYXNlIEhEQlNTUFJPRF9FTDJfRlNDX0V4dGVybmFsQWJvcnQ6XFxuK1xcdGNhc2UgSERCU1NQUk9EX0VMMl9GU0NfR1BGOlxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0LyogVW5rbm93biBmYXVsdC4gKi9cXG4rXFx0XFx0V0FSTl9PTkNFKDEsXFxuK1xcdFxcdFxcdCAgXFxcIlVuZXhwZWN0ZWQgSERCU1MgZmF1bHQgdHlwZSwgRlNDOiAweCVsbHggKHByb2Q9MHglbGx4LCB2Y3B1PSVkKVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICBmc2MsIHByb2QsIHZjcHUtXFx1MDAzZXZjcHVfaWQpO1xcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdW5zaWduZWQgaW50IGhkYnNzX2F1dG9fc2VsZWN0X29yZGVyKHN0cnVjdCBrdm0gKmt2bSlcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIG5wYWdlcyA9IDA7XFxuK1xcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3Q7XFxuK1xcdGludCBia3Q7XFxuK1xcbitcXHRrdm1fZm9yX2VhY2hfbWVtc2xvdChtZW1zbG90LCBia3QsIGt2bV9tZW1zbG90cyhrdm0pKVxcbitcXHRcXHRucGFnZXMgKz0gbWVtc2xvdC1cXHUwMDNlbnBhZ2VzO1xcbitcXG4rXFx0aWYgKG5wYWdlcyBcXHUwMDNjPSAxNjM4NClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGVsc2UgaWYgKG5wYWdlcyBcXHUwMDNjPSAyNjIxNDQpXFxuK1xcdFxcdHJldHVybiAzO1xcbitcXHRlbHNlIGlmIChucGFnZXMgXFx1MDAzYz0gNDE5NDMwNClcXG4rXFx0XFx0cmV0dXJuIDY7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cmV0dXJuIDk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIEVuYWJsZSBIREJTUyBmb3IgYWxsIHZDUFVzIGluIHRoZSBWTS5cXG4rICpcXG4rICogQ2FsbGVkIGZyb20ga3ZtX2FybV9oZGJzc19vbl9kaXJ0eV9sb2dnaW5nX2NoYW5nZSgpIHdoaWNoIGlzIGludm9rZWRcXG4rICogYnkga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oKSB1bmRlciBrdm0tXFx1MDAzZXNsb3RzX2xvY2suXFxuKyAqXFxuKyAqIElmIGJ1ZmZlciBhbGxvY2F0aW9uIGZhaWxzLCBIREJTUyByZW1haW5zIGRpc2FibGVkIGFuZCBkaXJ0eSB0cmFja2luZ1xcbisgKiBmYWxscyBiYWNrIHRvIHRoZSB0cmFkaXRpb25hbCBzb2Z0d2FyZS1iYXNlZCBhcHByb2FjaCAoUFRFIHdyaXRlLXByb3RlY3RcXG4rICogKyBzb2Z0d2FyZSBkaXJ0eSBtYXJraW5nKS4gVGhpcyBkb2VzIG5vdCBhZmZlY3QgY29ycmVjdG5lc3M7IGRpcnR5XFxuKyAqIGxvZ2dpbmcgcmVtYWlucyBmdW5jdGlvbmFsIHdpdGhvdXQgSERCU1MuXFxuKyAqL1xcbitzdGF0aWMgaW50IGt2bV9hcm1fZW5hYmxlX2hkYnNzX2dsb2JhbChzdHJ1Y3Qga3ZtICprdm0pXFxuK3tcXG4rXFx0aW50IGVycjtcXG4rXFx0dW5zaWduZWQgbG9uZyBpO1xcbitcXHR1bnNpZ25lZCBpbnQgb3JkZXI7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG4rXFxuK1xcdGlmICghc3lzdGVtX3N1cHBvcnRzX2hkYnNzKCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKGt2bS1cXHUwMDNlZGlydHlfcmluZ19zaXplKSAvKiBEb24ndCBzdXBwb3J0IEhEQlNTIGluIGRpcnR5IHJpbmcgbW9kZSAqL1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChrdm0tXFx1MDAzZWFyY2guZW5hYmxlX2hkYnNzKSAvKiBBbHJlYWR5IE9uICovXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LyogVHVybiBpdCBvbiAqL1xcbitcXHRvcmRlciA9IGhkYnNzX2F1dG9fc2VsZWN0X29yZGVyKGt2bSk7XFxuK1xcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkge1xcbitcXHRcXHRlcnIgPSBrdm1fYXJtX3ZjcHVfYWxsb2NfaGRic3ModmNwdSwgb3JkZXIpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRnb3RvIGVycm9yX2FsbG9jO1xcbitcXHR9XFxuK1xcbitcXHRrdm0tXFx1MDAzZWFyY2guZW5hYmxlX2hkYnNzID0gdHJ1ZTtcXG4rXFx0a3ZtLVxcdTAwM2VhcmNoLm1tdS52dGNyIHw9IFZUQ1JfRUwyX0hEIHwgVlRDUl9FTDJfSERCU1MgfCBWVENSX0VMMl9IQTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFdlIHNob3VsZCBraWNrIHZjcHVzIG91dCBvZiBndWVzdCBtb2RlIGhlcmUgdG8gbG9hZCBuZXdcXG4rXFx0ICogdnRjciB2YWx1ZSB0byB2dGNyX2VsMiByZWdpc3RlciB3aGVuIHJlLWVudGVyIGd1ZXN0IG1vZGUuXFxuK1xcdCAqL1xcbitcXHRrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pXFxuK1xcdFxcdGt2bV92Y3B1X2tpY2sodmNwdSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycm9yX2FsbG9jOlxcbitcXHRrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pXFxuK1xcdFxcdGlmICh2Y3B1LVxcdTAwM2VhcmNoLmhkYnNzLmJhc2VfcGh5cylcXG4rXFx0XFx0XFx0a3ZtX2FybV92Y3B1X2ZyZWVfaGRic3ModmNwdSk7XFxuK1xcbitcXHRwcl93YXJuX29uY2UoXFxcImt2bTogZmFpbGVkIHRvIGFsbG9jYXRlIEhEQlNTIGJ1ZmZlcnMgKG9yZGVyPSV1KSwgXFxcIlxcbitcXHRcXHQgICAgIFxcXCJmYWxsaW5nIGJhY2sgdG8gc29mdHdhcmUgZGlydHkgdHJhY2tpbmdcXFxcblxcXCIsIG9yZGVyKTtcXG4rXFx0cmV0dXJuIC1FTk9NRU07XFxuK31cXG4rXFxuK3ZvaWQga3ZtX2FybV9kaXNhYmxlX2hkYnNzX2dsb2JhbChzdHJ1Y3Qga3ZtICprdm0pXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBpO1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuK1xcbitcXHRpZiAoIWt2bS1cXHUwMDNlYXJjaC5lbmFibGVfaGRic3MpIC8qIEFscmVhZHkgT2ZmICovXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdC8qIFR1cm4gaXQgb2ZmICovXFxuK1xcdGt2bS1cXHUwMDNlYXJjaC5tbXUudnRjciBcXHUwMDI2PSB+KFZUQ1JfRUwyX0hEIHwgVlRDUl9FTDJfSERCU1MgfCBWVENSX0VMMl9IQSk7XFxuK1xcbitcXHRrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pXFxuK1xcdFxcdGt2bV9hcm1fdmNwdV9mcmVlX2hkYnNzKHZjcHUpO1xcbitcXG4rXFx0a3ZtLVxcdTAwM2VhcmNoLmVuYWJsZV9oZGJzcyA9IGZhbHNlO1xcbit9XFxuK1xcbit2b2lkIGt2bV9hcm1faGRic3Nfb25fZGlydHlfbG9nZ2luZ19jaGFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBpbnQgbnJfbWVtc2xvdHNfbG9nZ2luZylcXG4re1xcbitcXHQvKlxcbitcXHQgKiBDYWxsZWQgZnJvbSBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbigpIHVuZGVyIGt2bS1cXHUwMDNlc2xvdHNfbG9jay5cXG4rXFx0ICogQWxsIHN0YXRlIHRyYW5zaXRpb25zIGFyZSBzZXJpYWxpemVkIGJ5IHNsb3RzX2xvY2suXFxuK1xcdCAqL1xcbitcXHRpZiAobnJfbWVtc2xvdHNfbG9nZ2luZyBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgIWt2bS1cXHUwMDNlYXJjaC5lbmFibGVfaGRic3MpXFxuK1xcdFxcdGt2bV9hcm1fZW5hYmxlX2hkYnNzX2dsb2JhbChrdm0pO1xcbitcXHRlbHNlIGlmIChucl9tZW1zbG90c19sb2dnaW5nID09IDAgXFx1MDAyNlxcdTAwMjYga3ZtLVxcdTAwM2VhcmNoLmVuYWJsZV9oZGJzcylcXG4rXFx0XFx0a3ZtX2FybV9kaXNhYmxlX2hkYnNzX2dsb2JhbChrdm0pO1xcbit9XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmMgYi9hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jXFxuaW5kZXggOTFhN2RmYWQ2Njg2NjAuLjIxZWM0NTZlY2M0MTFhIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmNcXG4rKysgYi9hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jXFxuQEAgLTczMSw5ICs3MzEsMjMgQEAgc3RhdGljIGludCBzdGFnZTJfc2V0X3Byb3RfYXR0cihzdHJ1Y3Qga3ZtX3BndGFibGUgKnBndCwgZW51bSBrdm1fcGd0YWJsZV9wcm90IHBcXG4gXFx0aWYgKHByb3QgXFx1MDAyNiBLVk1fUEdUQUJMRV9QUk9UX1IpXFxuIFxcdFxcdGF0dHIgfD0gS1ZNX1BURV9MRUFGX0FUVFJfTE9fUzJfUzJBUF9SO1xcbiBcXG4tXFx0aWYgKHByb3QgXFx1MDAyNiBLVk1fUEdUQUJMRV9QUk9UX1cpXFxuK1xcdGlmIChwcm90IFxcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9XKSB7XFxuIFxcdFxcdGF0dHIgfD0gS1ZNX1BURV9MRUFGX0FUVFJfTE9fUzJfUzJBUF9XO1xcbiBcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogU2V0IERCTSBiaXQgZm9yIHdyaXRhYmxlIG5vbi1kZXZpY2UgcGFnZXMgaWYgdGhlIHBhZ2UtdGFibGVcXG4rXFx0XFx0ICogaGFzIEtWTV9QR1RBQkxFX1MyX0RCTSBmbGFnIChzeXN0ZW0gc3VwcG9ydHMgSERCU1MpLlxcbitcXHRcXHQgKlxcbitcXHRcXHQgKiBGb3Igc3RhZ2UgMiB0cmFuc2xhdGlvbnMgdXNpbmcgSW5kaXJlY3QgcGVybWlzc2lvbnMsIGlmIHRoZVxcbitcXHRcXHQgKiBFZmZlY3RpdmUgdmFsdWUgb2YgVlRDUl9FTDIuSEQgaXMgMCwgdGhlbiBkaXJ0eSBzdGF0ZSBpc1xcbitcXHRcXHQgKiBtYW5hZ2VkIGJ5IHNvZnR3YXJlLiBIYXJkd2FyZSBvbmx5IHVwZGF0ZXMgdGhlIGRpcnR5IHN0YXRlXFxuK1xcdFxcdCAqIHdoZW4gVlRDUl9FTDIuSEQ9MSAoSERCU1MgZW5hYmxlZCkuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoKHBndC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fUEdUQUJMRV9TMl9EQk0pIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhKHByb3QgXFx1MDAyNiBLVk1fUEdUQUJMRV9QUk9UX0RFVklDRSkpXFxuK1xcdFxcdFxcdGF0dHIgfD0gS1ZNX1BURV9MRUFGX0FUVFJfSElfUzJfREJNO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAoIWt2bV9scGEyX2lzX2VuYWJsZWQoKSlcXG4gXFx0XFx0YXR0ciB8PSBGSUVMRF9QUkVQKEtWTV9QVEVfTEVBRl9BVFRSX0xPX1MyX1NILCBzaCk7XFxuIFxcbkBAIC0xMzY3LDkgKzEzODEsMjYgQEAgaW50IGt2bV9wZ3RhYmxlX3N0YWdlMl9yZWxheF9wZXJtcyhzdHJ1Y3Qga3ZtX3BndGFibGUgKnBndCwgdTY0IGFkZHIsXFxuIFxcdGlmIChwcm90IFxcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9SKVxcbiBcXHRcXHRzZXQgfD0gS1ZNX1BURV9MRUFGX0FUVFJfTE9fUzJfUzJBUF9SO1xcbiBcXG4tXFx0aWYgKHByb3QgXFx1MDAyNiBLVk1fUEdUQUJMRV9QUk9UX1cpXFxuK1xcdGlmIChwcm90IFxcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9XKSB7XFxuIFxcdFxcdHNldCB8PSBLVk1fUFRFX0xFQUZfQVRUUl9MT19TMl9TMkFQX1c7XFxuIFxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBObyBERVZJQ0UgZmlsdGVyIG5lZWRlZCBoZXJlOiByZWxheF9wZXJtcyBpcyBvbmx5IGNhbGxlZFxcbitcXHRcXHQgKiBvbiBGU0NfUEVSTSBmYXVsdHMuIERldmljZSBwYWdlcyBhbHdheXMgZ2V0IGZ1bGwgUlcgZnJvbVxcbitcXHRcXHQgKiBpbml0aWFsIG1hcHBpbmcgYW5kIGFyZSBuZXZlciB3cml0ZS1wcm90ZWN0ZWQgZHVyaW5nXFxuK1xcdFxcdCAqIG1pZ3JhdGlvbiwgc28gdGhleSBuZXZlciB0cmlnZ2VyIGEgcGVybWlzc2lvbiBmYXVsdC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChwZ3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgS1ZNX1BHVEFCTEVfUzJfREJNKVxcbitcXHRcXHRcXHRzZXQgfD0gS1ZNX1BURV9MRUFGX0FUVFJfSElfUzJfREJNO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBDbGVhciBEQk0gb24gV+KGklJPIGRvd25ncmFkZSB0byBwcmV2ZW50IGhhcmR3YXJlIGZyb21cXG4rXFx0XFx0ICogc2lsZW50bHkgdXBncmFkaW5nIFJPK0RCTSBiYWNrIHRvIFcrZGlydHksIHdoaWNoIHdvdWxkXFxuK1xcdFxcdCAqIGJ5cGFzcyBLVk0ncyB3cml0ZSB0cmFja2luZyBhbmQgY2F1c2UgZGF0YSBjb3JydXB0aW9uLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0Y2xyIHw9IEtWTV9QVEVfTEVBRl9BVFRSX0hJX1MyX0RCTTtcXG4rXFx0fVxcbitcXG4gXFx0cmV0ID0gc3RhZ2UyX3NldF94bl9hdHRyKHByb3QsIFxcdTAwMjZ4bik7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmMgYi9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jXFxuaW5kZXggYmJlOWNlYmQzZDlkNTcuLmZlNzI5NDRiZmQzZDViIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmNcXG4rKysgYi9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jXFxuQEAgLTIyLDYgKzIyLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fZW11bGF0ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9oeXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fbW11LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX2RpcnR5X2JpdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2Zwc2ltZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2RlYnVnLW1vbml0b3JzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vcHJvY2Vzc29yLmhcXHUwMDNlXFxuQEAgLTIxMyw2ICsyMTQsMTkgQEAgc3RhdGljIHZvaWQgX192Y3B1X3B1dF9kZWFjdGl2YXRlX3RyYXBzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBfX2xvYWRfaGRic3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit7XFxuK1xcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXFx1MDAzZWt2bTtcXG4rXFxuK1xcdGlmICgha3ZtLVxcdTAwM2VhcmNoLmVuYWJsZV9oZGJzcylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0d3JpdGVfc3lzcmVnX3ModmNwdS1cXHUwMDNlYXJjaC5oZGJzcy5oZGJzc2JyX2VsMiwgU1lTX0hEQlNTQlJfRUwyKTtcXG4rXFx0d3JpdGVfc3lzcmVnX3ModmNwdS1cXHUwMDNlYXJjaC5oZGJzcy5oZGJzc3Byb2RfZWwyLCBTWVNfSERCU1NQUk9EX0VMMik7XFxuK1xcbitcXHRpc2IoKTtcXG4rfVxcbitcXG4gdm9pZCBrdm1fdmNwdV9sb2FkX3ZoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0aG9zdF9kYXRhX3B0cihob3N0X2N0eHQpLVxcdTAwM2VfX2h5cF9ydW5uaW5nX3ZjcHUgPSB2Y3B1O1xcbkBAIC0yMjAsNiArMjM0LDcgQEAgdm9pZCBrdm1fdmNwdV9sb2FkX3ZoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdF9fdmNwdV9sb2FkX3N3aXRjaF9zeXNyZWdzKHZjcHUpO1xcbiBcXHRfX3ZjcHVfbG9hZF9hY3RpdmF0ZV90cmFwcyh2Y3B1KTtcXG4gXFx0X19sb2FkX3N0YWdlMih2Y3B1LVxcdTAwM2VhcmNoLmh3X21tdSk7XFxuK1xcdF9fbG9hZF9oZGJzcyh2Y3B1KTtcXG4gfVxcbiBcXG4gdm9pZCBrdm1fdmNwdV9wdXRfdmhlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vbW11LmMgYi9hcmNoL2FybTY0L2t2bS9tbXUuY1xcbmluZGV4IDZjOTQxYWFhMTBjNjM5Li40ODRmNDhkYWUwMDAzYyAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS9tbXUuY1xcbisrKyBiL2FyY2gvYXJtNjQva3ZtL21tdS5jXFxuQEAgLTE2LDYgKzE2LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9jYWNoZWZsdXNoLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX2FybS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9tbXUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fZGlydHlfYml0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX3BndGFibGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fcGt2bS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9hc20uaFxcdTAwM2VcXG5AQCAtMTAxNCw2ICsxMDE1LDkgQEAgaW50IGt2bV9pbml0X3N0YWdlMl9tbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1bnNpZ25lZCBsb25nIHRcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBvdXRfZnJlZV9wZ3RhYmxlO1xcbiBcXG4rXFx0aWYgKHN5c3RlbV9zdXBwb3J0c19oZGJzcygpKVxcbitcXHRcXHRwZ3QtXFx1MDAzZWZsYWdzIHw9IEtWTV9QR1RBQkxFX1MyX0RCTTtcXG4rXFxuIFxcdG1tdS1cXHUwMDNlcGd0ID0gcGd0O1xcbiBcXHRpZiAoaXNfcHJvdGVjdGVkX2t2bV9lbmFibGVkKCkpXFxuIFxcdFxcdHJldHVybiAwO1xcbkBAIC0xMDI3LDggKzEwMzEsMTIgQEAgaW50IGt2bV9pbml0X3N0YWdlMl9tbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1bnNpZ25lZCBsb25nIHRcXG4gXFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSlcXG4gXFx0XFx0KnBlcl9jcHVfcHRyKG1tdS1cXHUwMDNlbGFzdF92Y3B1X3JhbiwgY3B1KSA9IC0xO1xcbiBcXG4tXFx0IC8qIFRoZSBlYWdlciBwYWdlIHNwbGl0dGluZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0ICovXFxuLVxcdG1tdS1cXHUwMDNlc3BsaXRfcGFnZV9jaHVua19zaXplID0gS1ZNX0FSTV9FQUdFUl9TUExJVF9DSFVOS19TSVpFX0RFRkFVTFQ7XFxuK1xcdCAvKiBUaGUgZWFnZXIgcGFnZSBzcGxpdHRpbmcgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCBpZiBzeXN0ZW0gaGFzIG5vIEhEQlNTICovXFxuK1xcdGlmIChzeXN0ZW1fc3VwcG9ydHNfaGRic3MoKSlcXG4rXFx0XFx0bW11LVxcdTAwM2VzcGxpdF9wYWdlX2NodW5rX3NpemUgPSAyNTYgKiAxMDI0ICogUEFHRV9TSVpFO1xcbitcXHRlbHNlXFxuK1xcdFxcdG1tdS1cXHUwMDNlc3BsaXRfcGFnZV9jaHVua19zaXplID0gS1ZNX0FSTV9FQUdFUl9TUExJVF9DSFVOS19TSVpFX0RFRkFVTFQ7XFxuK1xcbiBcXHRtbXUtXFx1MDAzZXNwbGl0X3BhZ2VfY2FjaGUuZ2ZwX3plcm8gPSBfX0dGUF9aRVJPO1xcbiBcXG4gXFx0bW11LVxcdTAwM2VwZ2RfcGh5cyA9IF9fcGEocGd0LVxcdTAwM2VwZ2QpO1xcbkBAIC0yMjM0LDYgKzIyNDIsNyBAQCBpbnQga3ZtX2hhbmRsZV9ndWVzdF9zZWEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB9XFxuIFxcbiAvKipcXG4rXFxuICAqIGt2bV9oYW5kbGVfZ3Vlc3RfYWJvcnQgLSBoYW5kbGVzIGFsbCAybmQgc3RhZ2UgYWJvcnRzXFxuICAqIEB2Y3B1OlxcdHRoZSBWQ1BVIHBvaW50ZXJcXG4gICpcXG5AQCAtMjI3MSw2ICsyMjgwLDkgQEAgaW50IGt2bV9oYW5kbGVfZ3Vlc3RfYWJvcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gXFx0aXNfaWFidCA9IGt2bV92Y3B1X3RyYXBfaXNfaWFidCh2Y3B1KTtcXG4gXFxuK1xcdGlmIChlc3JfaXNzMl9pc19oZGJzc2YoZXNyKSlcXG4rXFx0XFx0cmV0dXJuIGt2bV9oYW5kbGVfaGRic3NfZmF1bHQodmNwdSk7XFxuK1xcbiBcXHRpZiAoZXNyX2ZzY19pc190cmFuc2xhdGlvbl9mYXVsdChlc3IpKSB7XFxuIFxcdFxcdC8qIEJleW9uZCBzYW5pdGlzZWQgUEFSYW5nZSAod2hpY2ggaXMgdGhlIElQQSBsaW1pdCkgKi9cXG4gXFx0XFx0aWYgKGZhdWx0X2lwYSBcXHUwMDNlPSBCSVRfVUxMKGdldF9rdm1faXBhX2xpbWl0KCkpKSB7XFxuQEAgLTI1NzYsNiArMjU4OCw5IEBAIHZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxcbiB7XFxuIFxcdGJvb2wgbG9nX2RpcnR5X3BhZ2VzID0gbmV3IFxcdTAwMjZcXHUwMDI2IG5ldy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0xPR19ESVJUWV9QQUdFUztcXG4gXFxuK1xcdGt2bV9hcm1faGRic3Nfb25fZGlydHlfbG9nZ2luZ19jaGFuZ2Uoa3ZtLFxcbitcXHRcXHRhdG9taWNfcmVhZChcXHUwMDI2a3ZtLVxcdTAwM2Vucl9tZW1zbG90c19kaXJ0eV9sb2dnaW5nKSk7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBBdCB0aGlzIHBvaW50IG1lbXNsb3QgaGFzIGJlZW4gY29tbWl0dGVkIGFuZCB0aGVyZSBpcyBhblxcbiBcXHQgKiBhbGxvY2F0ZWQgZGlydHlfYml0bWFwW10sIGRpcnR5IHBhZ2VzIHdpbGwgYmUgdHJhY2tlZCB3aGlsZSB0aGVcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vcmVzZXQuYyBiL2FyY2gvYXJtNjQva3ZtL3Jlc2V0LmNcXG5pbmRleCBiOTYzZmQ5NzVhYWNhZi4uZDgxMDRiY2JkOWZmYWQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vcmVzZXQuY1xcbisrKyBiL2FyY2gvYXJtNjQva3ZtL3Jlc2V0LmNcXG5AQCAtMjcsNiArMjcsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9hc20uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fZW11bGF0ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9tbXUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fZGlydHlfYml0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX25lc3RlZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3ZpcnQuaFxcdTAwM2VcXG4gXFxuQEAgLTE2MSw2ICsxNjIsOSBAQCB2b2lkIGt2bV9hcm1fdmNwdV9kZXN0cm95KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXZjcHUtXFx1MDAzZWFyY2guY3R4dC52bmNyX2FycmF5KTtcXG4gXFx0a2ZyZWUodmNwdS1cXHUwMDNlYXJjaC52bmNyX3RsYik7XFxuIFxcdGtmcmVlKHZjcHUtXFx1MDAzZWFyY2guY2NzaWRyKTtcXG4rXFxuK1xcdGlmICh2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guZW5hYmxlX2hkYnNzKVxcbitcXHRcXHRrdm1fYXJtX3ZjcHVfZnJlZV9oZGJzcyh2Y3B1KTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQga3ZtX3ZjcHVfcmVzZXRfc3ZlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC90b29scy9jcHVjYXBzIGIvYXJjaC9hcm02NC90b29scy9jcHVjYXBzXFxuaW5kZXggOWI4NWE4NGY2ZmQ0OTQuLmE4NzcwNmM5ZDE2MGUwIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2Fwc1xcbisrKyBiL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2Fwc1xcbkBAIC02OSw2ICs2OSw3IEBAIEhBU19WQTUyXFxuIEhBU19WSVJUX0hPU1RfRVhUTlxcbiBIQVNfV0ZYVFxcbiBIQVNfWE5YXFxuK0hBU19IREJTU1xcbiBIQUZUXFxuIEhXX0RCTVxcbiBLVk1fSFZIRVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjoxMjowNC42MjQ0OTg3NjdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2ODUyMzEzNTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcm1fdmNwdV9hbGxvY19oZGJzc1wiLFxuICAgIFwia3ZtX2FybV92Y3B1X2ZyZWVfaGRic3NcIixcbiAgICBcImt2bV9mbHVzaF9oZGJzc19idWZmZXJcIixcbiAgICBcImt2bV9oYW5kbGVfaGRic3NfZmF1bHRcIixcbiAgICBcImt2bV9hcm1fZW5hYmxlX2hkYnNzX2dsb2JhbFwiLFxuICAgIFwia3ZtX2FybV9kaXNhYmxlX2hkYnNzX2dsb2JhbFwiLFxuICAgIFwia3ZtX2FybV9oZGJzc19vbl9kaXJ0eV9sb2dnaW5nX2NoYW5nZVwiLFxuICAgIFwia3ZtX2FyY2hfc3luY19kaXJ0eV9sb2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIEhhcmR3YXJlIERpcnR5IHN0YXRlIHRyYWNraW5nIHN0cnVjdHVyZSAoSERCU1MpIHN1cHBvcnQgZm9yIEtWTSBvbiBhcm02NC4gSXQgbW9kaWZpZXMgY29yZSBLVk0gbG9naWMgZm9yIGRpcnR5IHBhZ2UgbG9nZ2luZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyBhbmQgZ3Vlc3QgZXhlY3V0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBiYmEzYjkxNWExZGJjODdkMjkyMDQyNzViMTU1NDVjNzFjYTJmZGNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxMCAwNjoxMjowMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmhcbmluZGV4IGE1Nzg3MGZhOTZkYjViLi5iZGZhYjA4NmZkOTQ1MyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaFxuQEAgLTg2Myw2ICs4NjMsMTEgQEAgc3RhdGljIGlubGluZSBib29sIHN5c3RlbV9zdXBwb3J0c19oYWZ0KHZvaWQpXG4gXHRyZXR1cm4gY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQUZUKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBib29sIHN5c3RlbV9zdXBwb3J0c19oZGJzcyh2b2lkKVxuK3tcbitcdHJldHVybiBjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19IREJTUyk7XG4rfVxuK1xuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBzeXN0ZW1fc3VwcG9ydHNfbXBhbSh2b2lkKVxuIHtcbiBcdHJldHVybiBhbHRlcm5hdGl2ZV9oYXNfY2FwX3VubGlrZWx5KEFSTTY0X01QQU0pO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZXNyLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2Vzci5oXG5pbmRleCA4MWMxNzMyMGE1ODhkOS4uMmU2YjY3OWI1OTA4MDggMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2Vzci5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2Vzci5oXG5AQCAtNDM3LDYgKzQzNywxMSBAQFxuICNpZm5kZWYgX19BU1NFTUJMRVJfX1xuICNpbmNsdWRlIFx1MDAzY2FzbS90eXBlcy5oXHUwMDNlXG4gXG4rc3RhdGljIGlubGluZSBib29sIGVzcl9pc3MyX2lzX2hkYnNzZih1bnNpZ25lZCBsb25nIGVzcilcbit7XG4rXHRyZXR1cm4gRVNSX0VMeF9JU1MyKGVzcikgXHUwMDI2IEVTUl9FTHhfSERCU1NGO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZXNyX2Jya19jb21tZW50KHVuc2lnbmVkIGxvbmcgZXNyKVxuIHtcbiBcdHJldHVybiBlc3IgXHUwMDI2IEVTUl9FTHhfQlJLNjRfSVNTX0NPTU1FTlRfTUFTSztcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9kaXJ0eV9iaXQuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2RpcnR5X2JpdC5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmE0Y2RhOGNkYWIyNDcyXG4tLS0gL2Rldi9udWxsXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9kaXJ0eV9iaXQuaFxuQEAgLTAsMCArMSwyOSBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbisvKlxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBBUk0gTHRkLlxuKyAqIEF1dGhvcjogTGVvbmFyZG8gQnJhcyBcdTAwM2NsZW8uYnJhc0Bhcm0uY29tXHUwMDNlXG4rICovXG4rXG4rI2lmbmRlZiBfX0FSTTY0X0tWTV9ESVJUWV9CSVRfSF9fXG4rI2RlZmluZSBfX0FSTTY0X0tWTV9ESVJUWV9CSVRfSF9fXG4rXG4rI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9wZ3RhYmxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20vc3lzcmVnLmhcdTAwM2VcbitcbisvKiBIREJTUyBlbnRyeSBmaWVsZCBkZWZpbml0aW9ucyAqL1xuKyNkZWZpbmUgSERCU1NfRU5UUllfVkFMSURcdEJJVCgwKVxuKyNkZWZpbmUgSERCU1NfRU5UUllfVFRXTF9TSElGVCAoMSlcbisjZGVmaW5lIEhEQlNTX0VOVFJZX1RUV0xfTUFTSyAoR0VOTUFTSygzLCAxKSlcbisjZGVmaW5lIEhEQlNTX0VOVFJZX1RUV0woeCkgXFxcbitcdCgoKHgpIFx1MDAzY1x1MDAzYyBIREJTU19FTlRSWV9UVFdMX1NISUZUKSBcdTAwMjYgSERCU1NfRU5UUllfVFRXTF9NQVNLKVxuKyNkZWZpbmUgSERCU1NfRU5UUllfVFRXTF9SRVNWIEhEQlNTX0VOVFJZX1RUV0woLTQpXG4rI2RlZmluZSBIREJTU19FTlRSWV9JUEFcdEdFTk1BU0tfVUxMKDU1LCAxMilcbitcbitpbnQga3ZtX2FybV92Y3B1X2FsbG9jX2hkYnNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IG9yZGVyKTtcbit2b2lkIGt2bV9hcm1fdmNwdV9mcmVlX2hkYnNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4rdm9pZCBrdm1fZmx1c2hfaGRic3NfYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4raW50IGt2bV9oYW5kbGVfaGRic3NfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbit2b2lkIGt2bV9hcm1faGRic3Nfb25fZGlydHlfbG9nZ2luZ19jaGFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBpbnQgbnJfbWVtc2xvdHNfbG9nZ2luZyk7XG4rdm9pZCBrdm1fYXJtX2Rpc2FibGVfaGRic3NfZ2xvYmFsKHN0cnVjdCBrdm0gKmt2bSk7XG4rXG4rI2VuZGlmIC8qIF9fQVJNNjRfS1ZNX0RJUlRZX0JJVF9IX18gKi9cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IGJhZTJjNGY5MmVmNWMwLi5jZWNmYjg4NGE2NGZhNyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtNTUsNiArNTUsNyBAQFxuICNkZWZpbmUgS1ZNX1JFUV9HVUVTVF9IWVBfSVJRX1BFTkRJTkdcdEtWTV9BUkNIX1JFUSg5KVxuICNkZWZpbmUgS1ZNX1JFUV9NQVBfTDFfVk5DUl9FTDJcdFx0S1ZNX0FSQ0hfUkVRKDEwKVxuICNkZWZpbmUgS1ZNX1JFUV9WR0lDX1BST0NFU1NfVVBEQVRFXHRLVk1fQVJDSF9SRVEoMTEpXG4rI2RlZmluZSBLVk1fUkVRX0ZMVVNIX0hEQlNTXHRcdFx0S1ZNX0FSQ0hfUkVRKDEyKVxuIFxuICNkZWZpbmUgS1ZNX0RJUlRZX0xPR19NQU5VQUxfQ0FQUyAgIChLVk1fRElSVFlfTE9HX01BTlVBTF9QUk9URUNUX0VOQUJMRSB8IFxcXG4gXHRcdFx0XHQgICAgIEtWTV9ESVJUWV9MT0dfSU5JVElBTExZX1NFVClcbkBAIC00MjAsNiArNDIxLDEwIEBAIHN0cnVjdCBrdm1fYXJjaCB7XG4gXHQgKi9cbiBcdHN0cnVjdCBrdm1fcHJvdGVjdGVkX3ZtIHBrdm07XG4gXG4rXHQvKiBIREJTUzogcGVyLVZNIGRpcnR5IHRyYWNraW5nIHN0YXRlICovXG4rXHRib29sIGVuYWJsZV9oZGJzcztcbitcdHVuc2lnbmVkIGludCBoZGJzc19vcmRlcjtcbitcbiAjaWZkZWYgQ09ORklHX1BURFVNUF9TVEFHRTJfREVCVUdGU1xuIFx0LyogTmVzdGVkIHZpcnR1YWxpemF0aW9uIGluZm8gKi9cbiBcdHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfbnZfZGVudHJ5O1xuQEAgLTgzOCw2ICs4NDMsMTIgQEAgc3RydWN0IHZjcHVfcmVzZXRfc3RhdGUge1xuIFx0Ym9vbFx0XHRyZXNldDtcbiB9O1xuIFxuK3N0cnVjdCB2Y3B1X2hkYnNzX3N0YXRlIHtcbitcdHBoeXNfYWRkcl90IGJhc2VfcGh5czsgICAvKiBmb3IgbWVtb3J5IGZyZWUgKi9cbitcdHU2NCBoZGJzc2JyX2VsMjsgICAgICAgICAvKiBsb2FkIGRpcmVjdGx5ICovXG4rXHR1NjQgaGRic3Nwcm9kX2VsMjsgICAgICAgLyogc2F2ZSBkaXJlY3RseSAqL1xuK307XG4rXG4gc3RydWN0IHZuY3JfdGxiO1xuIFxuIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcbkBAIC05NDUsNiArOTU2LDkgQEAgc3RydWN0IGt2bV92Y3B1X2FyY2gge1xuIFxuIFx0LyogSHlwLXJlYWRhYmxlIGNvcHkgb2Yga3ZtX3ZjcHU6OnBpZCAqL1xuIFx0cGlkX3QgcGlkO1xuK1xuK1x0LyogSERCU1MgcmVnaXN0ZXJzIGluZm8gKi9cbitcdHN0cnVjdCB2Y3B1X2hkYnNzX3N0YXRlIGhkYnNzO1xuIH07XG4gXG4gLypcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmhcbmluZGV4IDQxYTg2ODc5MzhlYjZiLi41ZTBmYWM0YmZhNTM2OSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX3BndGFibGUuaFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGd0YWJsZS5oXG5AQCAtOTMsNiArOTMsOCBAQCB0eXBlZGVmIHU2NCBrdm1fcHRlX3Q7XG4gXG4gI2RlZmluZSBLVk1fUFRFX0xFQUZfQVRUUl9ISV9TMl9YTlx0R0VOTUFTSyg1NCwgNTMpXG4gXG4rI2RlZmluZSBLVk1fUFRFX0xFQUZfQVRUUl9ISV9TMl9EQk1cdEJJVCg1MSlcbitcbiAjZGVmaW5lIEtWTV9QVEVfTEVBRl9BVFRSX0hJX1MxX0dQXHRCSVQoNTApXG4gXG4gI2RlZmluZSBLVk1fUFRFX0xFQUZfQVRUUl9TMl9QRVJNU1x0KEtWTV9QVEVfTEVBRl9BVFRSX0xPX1MyX1MyQVBfUiB8IFxcXG5AQCAtMjQ5LDEwICsyNTEsMTIgQEAgc3RydWN0IGt2bV9wZ3RhYmxlX21tX29wcyB7XG4gICogZW51bSBrdm1fcGd0YWJsZV9zdGFnZTJfZmxhZ3MgLSBTdGFnZS0yIHBhZ2UtdGFibGUgZmxhZ3MuXG4gICogQEtWTV9QR1RBQkxFX1MyX0lETUFQOlx0T25seSB1c2UgaWRlbnRpdHkgbWFwcGluZ3MuXG4gICogQEtWTV9QR1RBQkxFX1MyX0FTX1MxOlx0RmluYWwgbWVtb3J5IGF0dHJpYnV0ZXMgYXJlIHRoYXQgb2YgU3RhZ2UtMS5cbisgKiBAS1ZNX1BHVEFCTEVfUzJfREJNOlx0SGFyZHdhcmUtbWFuYWdlZCBEQk0gZm9yIHdyaXRhYmxlIHBhZ2VzLlxuICAqL1xuIGVudW0ga3ZtX3BndGFibGVfc3RhZ2UyX2ZsYWdzIHtcbiBcdEtWTV9QR1RBQkxFX1MyX0lETUFQXHRcdFx0PSBCSVQoMCksXG4gXHRLVk1fUEdUQUJMRV9TMl9BU19TMVx0XHRcdD0gQklUKDEpLFxuK1x0S1ZNX1BHVEFCTEVfUzJfREJNXHRcdFx0PSBCSVQoMiksXG4gfTtcbiBcbiAvKipcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N5c3JlZy5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNyZWcuaFxuaW5kZXggN2FhMDhkNTlkNDk0NDguLjEzNTRhNThjMzMxNjdiIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNyZWcuaFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNyZWcuaFxuQEAgLTEwMzksNiArMTAzOSwxNyBAQFxuIFxuICNkZWZpbmUgR0NTX0NBUCh4KVx0KCgoKHVuc2lnbmVkIGxvbmcpeCkgXHUwMDI2IEdDU19DQVBfQUREUl9NQVNLKSB8IFxcXG4gXHRcdFx0XHRcdCAgICAgICBHQ1NfQ0FQX1ZBTElEX1RPS0VOKVxuK1xuKy8qXG4rICogRGVmaW5pdGlvbnMgZm9yIHRoZSBIREJTUyBmZWF0dXJlXG4rICovXG4rI2RlZmluZSBIREJTU19NQVhfT1JERVJcdFx0SERCU1NCUl9FTDJfU1pfMk1CXG4rXG4rI2RlZmluZSBIREJTU0JSX0VMMihiYWRkciwgc3opXHQoKChiYWRkcikgXHUwMDI2IEhEQlNTQlJfRUwyX0JBRERSX01BU0spIHwgXFxcbitcdFx0XHRcdCBGSUVMRF9QUkVQKEhEQlNTQlJfRUwyX1NaX01BU0ssIHN6KSlcbitcbisjZGVmaW5lIEhEQlNTUFJPRF9JRFgocHJvZClcdEZJRUxEX0dFVChIREJTU1BST0RfRUwyX0lOREVYX01BU0ssIHByb2QpXG4rXG4gLypcbiAgKiBEZWZpbml0aW9ucyBmb3IgR0lDdjUgaW5zdHJ1Y3Rpb25zXG4gICovXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jIGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jXG5pbmRleCA5YTIyZGYwYzUxMjBmMy4uYWEzMjdlZWJhZjFjYTggMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmNcbisrKyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuY1xuQEAgLTIxMzEsNiArMjEzMSwxMSBAQCBzdGF0aWMgYm9vbCBodmhlX3Bvc3NpYmxlKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSxcbiBcdHJldHVybiBhcm02NF90ZXN0X3N3X2ZlYXR1cmVfb3ZlcnJpZGUoQVJNNjRfU1dfRkVBVFVSRV9PVkVSUklERV9IVkhFKTtcbiB9XG4gXG4rc3RhdGljIGJvb2wgaGFzX3ZoZV9oZGJzcyhjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksIGludCBjb3BlKVxuK3tcbitcdHJldHVybiBpc19rZXJuZWxfaW5faHlwX21vZGUoKSBcdTAwMjZcdTAwMjYgaGFzX2NwdWlkX2ZlYXR1cmUoZW50cnksIGNvcGUpO1xuK31cbitcbiBib29sIGNwdV9zdXBwb3J0c19iYm1sMl9ub2Fib3J0KHZvaWQpXG4ge1xuIFx0LypcbkBAIC0yNzgxLDYgKzI3ODYsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIGFybTY0X2ZlYXR1cmVzW10gPSB7XG4gXHRcdEFSTTY0X0NQVUlEX0ZJRUxEUyhJRF9BQTY0TU1GUjFfRUwxLCBIQUZEQlMsIEhBRlQpXG4gXHR9LFxuICNlbmRpZlxuK1x0e1xuK1x0XHQuZGVzYyA9IFwiSGFyZHdhcmUgRGlydHkgc3RhdGUgdHJhY2tpbmcgc3RydWN0dXJlIChIREJTUylcIixcbitcdFx0LnR5cGUgPSBBUk02NF9DUFVDQVBfU1lTVEVNX0ZFQVRVUkUsXG4rXHRcdC5jYXBhYmlsaXR5ID0gQVJNNjRfSEFTX0hEQlNTLFxuK1x0XHQubWF0Y2hlcyA9IGhhc192aGVfaGRic3MsXG4rXHRcdEFSTTY0X0NQVUlEX0ZJRUxEUyhJRF9BQTY0TU1GUjFfRUwxLCBIQUZEQlMsIEhEQlNTKVxuK1x0fSxcbiBcdHtcbiBcdFx0LmRlc2MgPSBcIkNSQzMyIGluc3RydWN0aW9uc1wiLFxuIFx0XHQuY2FwYWJpbGl0eSA9IEFSTTY0X0hBU19DUkMzMixcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9NYWtlZmlsZSBiL2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlXG5pbmRleCA1OTYxMmQyZjI3N2MxZC4uZWMyNzQ5YWY2NGZhNGMgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9NYWtlZmlsZVxuKysrIGIvYXJjaC9hcm02NC9rdm0vTWFrZWZpbGVcbkBAIC0xOCw2ICsxOCw3IEBAIGt2bS15ICs9IGFybS5vIG1tdS5vIG1taW8ubyBwc2NpLm8gaHlwZXJjYWxscy5vIHB2dGltZS5vIFxcXG4gXHQgZ3Vlc3QubyBkZWJ1Zy5vIHJlc2V0Lm8gc3lzX3JlZ3MubyBzdGFja3RyYWNlLm8gXFxcbiBcdCB2Z2ljLXN5cy1yZWctdjMubyBmcHNpbWQubyBwa3ZtLm8gXFxcbiBcdCBhcmNoX3RpbWVyLm8gdHJuZy5vIHZtaWQubyBlbXVsYXRlLW5lc3RlZC5vIG5lc3RlZC5vIGF0Lm8gXFxcbitcdCBkaXJ0eV9iaXQubyBcXFxuIFx0IHZnaWMvdmdpYy5vIHZnaWMvdmdpYy1pbml0Lm8gXFxcbiBcdCB2Z2ljL3ZnaWMtaXJxZmQubyB2Z2ljL3ZnaWMtdjIubyBcXFxuIFx0IHZnaWMvdmdpYy12My5vIHZnaWMvdmdpYy12NC5vIFxcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vYXJtLmMgYi9hcmNoL2FybTY0L2t2bS9hcm0uY1xuaW5kZXggNTBhZGZmZjc1YmU4MmUuLjUzNmQ5NDc5OWJhOGY5IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vYXJtLmNcbisrKyBiL2FyY2gvYXJtNjQva3ZtL2FybS5jXG5AQCAtMzgsNiArMzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fYXNtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX2VtdWxhdGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1faHlwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX2RpcnR5X2JpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9tbXUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fbmVzdGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX3Brdm0uaFx1MDAzZVxuQEAgLTMxNiw2ICszMTcsMTQgQEAgdm9pZCBrdm1fYXJjaF9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSlcbiBcdGlmIChpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSlcbiBcdFx0cGt2bV9kZXN0cm95X2h5cF92bShrdm0pO1xuIFxuK1x0LypcbitcdCAqIFVzZXJzcGFjZSBtYXkgZGVzdHJveSB0aGUgVk0gd2l0aG91dCBkaXNhYmxpbmcgZGlydHkgbG9nZ2luZyxcbitcdCAqIHNvIHRoZSBhdXRvLWRpc2FibGUgcGF0aCBpcyBuZXZlciByZWFjaGVkLiBGb3JjZSBkaXNhYmxlIEhEQlNTXG4rXHQgKiBoZXJlIHRvIGVuc3VyZSB2Q1BVIGJ1ZmZlcnMgYXJlIGZyZWVkIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrcy5cbitcdCAqL1xuK1x0aWYgKGt2bS1cdTAwM2VhcmNoLmVuYWJsZV9oZGJzcylcbitcdFx0a3ZtX2FybV9kaXNhYmxlX2hkYnNzX2dsb2JhbChrdm0pO1xuK1xuIFx0a3ZtX3VuaW5pdF9zdGFnZTJfbW11KGt2bSk7XG4gXHRrdm1fZGVzdHJveV9tcGlkcl9kYXRhKGt2bSk7XG4gXG5AQCAtNTY1LDYgKzU3NCwxMiBAQCBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKGVycilcbiBcdFx0a3ZtX3ZnaWNfdmNwdV9kZXN0cm95KHZjcHUpO1xuIFxuK1x0aWYgKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guZW5hYmxlX2hkYnNzKSB7XG4rXHRcdGVyciA9IGt2bV9hcm1fdmNwdV9hbGxvY19oZGJzcyh2Y3B1LCB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmhkYnNzX29yZGVyKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRrdm1fdmdpY192Y3B1X2Rlc3Ryb3kodmNwdSk7XG4rXHR9XG4rXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC03NDgsNiArNzYzLDkgQEAgdm9pZCBrdm1fYXJjaF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdGt2bV92Y3B1X3B1dF9od19tbXUodmNwdSk7XG4gXHRrdm1fYXJtX3ZtaWRfY2xlYXJfYWN0aXZlKCk7XG4gXG4rXHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5lbmFibGVfaGRic3MpXG4rXHRcdGt2bV9mbHVzaF9oZGJzc19idWZmZXIodmNwdSk7XG4rXG4gXHR2Y3B1X2NsZWFyX29uX3Vuc3VwcG9ydGVkX2NwdSh2Y3B1KTtcbiBcdHZjcHUtXHUwMDNlY3B1ID0gLTE7XG4gfVxuQEAgLTExNTAsNiArMTE2OCw5IEBAIHN0YXRpYyBpbnQgY2hlY2tfdmNwdV9yZXF1ZXN0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdGlmIChrdm1fZGlydHlfcmluZ19jaGVja19yZXF1ZXN0KHZjcHUpKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuK1x0XHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9GTFVTSF9IREJTUywgdmNwdSkpXG4rXHRcdFx0a3ZtX2ZsdXNoX2hkYnNzX2J1ZmZlcih2Y3B1KTtcbitcbiBcdFx0Y2hlY2tfbmVzdGVkX3ZjcHVfcmVxdWVzdHModmNwdSk7XG4gXHR9XG4gXG5AQCAtMTk2NCw3ICsxOTg1LDE1IEBAIGxvbmcga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxuIFxuIHZvaWQga3ZtX2FyY2hfc3luY19kaXJ0eV9sb2coc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90KVxuIHtcbitcdC8qXG4rXHQgKiBGbHVzaCBhbGwgQ1BVcycgZGlydHkgbG9nIGJ1ZmZlcnMgdG8gdGhlIGRpcnR5X2JpdG1hcC4gIENhbGxlZFxuK1x0ICogYmVmb3JlIHJlcG9ydGluZyBkaXJ0eV9iaXRtYXAgdG8gdXNlcnNwYWNlLiBTZW5kIGEgcmVxdWVzdCB3aXRoXG4rXHQgKiBLVk1fUkVRVUVTVF9XQUlUIHRvIGZsdXNoIGJ1ZmZlciBzeW5jaHJvbm91c2x5LlxuK1x0ICovXG4rXHRpZiAoIWt2bS1cdTAwM2VhcmNoLmVuYWJsZV9oZGJzcylcbitcdFx0cmV0dXJuO1xuIFxuK1x0a3ZtX21ha2VfYWxsX2NwdXNfcmVxdWVzdChrdm0sIEtWTV9SRVFfRkxVU0hfSERCU1MgfCBLVk1fUkVRVUVTVF9XQUlUKTtcbiB9XG4gXG4gc3RhdGljIGludCBrdm1fdm1faW9jdGxfc2V0X2RldmljZV9hZGRyKHN0cnVjdCBrdm0gKmt2bSxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYyBiL2FyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmM1YmY4NjZjMjNlZjJiXG4tLS0gL2Rldi9udWxsXG4rKysgYi9hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuY1xuQEAgLTAsMCArMSwyMTkgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLypcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQVJNIEx0ZC5cbisgKiBBdXRob3I6IExlb25hcmRvIEJyYXMgXHUwMDNjbGVvLmJyYXNAYXJtLmNvbVx1MDAzZVxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fZGlydHlfYml0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX21tdS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYXNtL3N5c3JlZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZ2ZwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rY29uZmlnLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4rXG4raW50IGt2bV9hcm1fdmNwdV9hbGxvY19oZGJzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBvcmRlcilcbit7XG4rXHRzdHJ1Y3QgcGFnZSAqaGRic3NfcGcgPSBOVUxMO1xuK1xuK1x0aWYgKHZjcHUtXHUwMDNlYXJjaC5oZGJzcy5oZGJzc2JyX2VsMiB8fCAhc3lzdGVtX3N1cHBvcnRzX2hkYnNzKCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKG9yZGVyIFx1MDAzZSBIREJTU19NQVhfT1JERVIpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aGRic3NfcGcgPSBhbGxvY19wYWdlcyhHRlBfS0VSTkVMX0FDQ09VTlQsIG9yZGVyKTtcbitcdGlmICghaGRic3NfcGcpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0dmNwdS1cdTAwM2VhcmNoLmhkYnNzID0gKHN0cnVjdCB2Y3B1X2hkYnNzX3N0YXRlKSB7XG4rXHRcdC5iYXNlX3BoeXMgPSBwYWdlX3RvX3BoeXMoaGRic3NfcGcpLFxuK1x0XHQuaGRic3Nicl9lbDIgPSBIREJTU0JSX0VMMihwYWdlX3RvX3BoeXMoaGRic3NfcGcpLCBvcmRlciksXG4rXHRcdC5oZGJzc3Byb2RfZWwyID0gMCxcbitcdH07XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rdm9pZCBrdm1fYXJtX3ZjcHVfZnJlZV9oZGJzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0c3RydWN0IHBhZ2UgKmhkYnNzX3BnO1xuK1xuK1x0aWYgKCF2Y3B1LVx1MDAzZWFyY2guaGRic3MuaGRic3Nicl9lbDIpIHtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aGRic3NfcGcgPSBwaHlzX3RvX3BhZ2UodmNwdS1cdTAwM2VhcmNoLmhkYnNzLmJhc2VfcGh5cyk7XG4rXHRpZiAoaGRic3NfcGcpXG4rXHRcdF9fZnJlZV9wYWdlcyhoZGJzc19wZyxcbitcdFx0ICAgICBGSUVMRF9HRVQoSERCU1NCUl9FTDJfU1pfTUFTSyxcbitcdFx0XHQgICAgICAgdmNwdS1cdTAwM2VhcmNoLmhkYnNzLmhkYnNzYnJfZWwyKSk7XG4rXG4rXHR2Y3B1LVx1MDAzZWFyY2guaGRic3MuaGRic3Nicl9lbDIgPSAwO1xuK31cbitcbit2b2lkIGt2bV9mbHVzaF9oZGJzc19idWZmZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdGludCBpZHgsIGN1cnJfaWR4O1xuK1x0dTY0ICpoZGJzc19idWY7XG4rXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbitcbitcdGlmICgha3ZtLVx1MDAzZWFyY2guZW5hYmxlX2hkYnNzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRjdXJyX2lkeCA9IEhEQlNTUFJPRF9JRFgocmVhZF9zeXNyZWdfcyhTWVNfSERCU1NQUk9EX0VMMikpO1xuK1xuK1x0LyogRG8gbm90aGluZyBpZiBIREJTUyBidWZmZXIgaXMgZW1wdHkgb3IgYnJfZWwyIGlzIE5VTEwgKi9cbitcdGlmIChjdXJyX2lkeCA9PSAwIHx8IHZjcHUtXHUwMDNlYXJjaC5oZGJzcy5oZGJzc2JyX2VsMiA9PSAwKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRoZGJzc19idWYgPSBwYWdlX2FkZHJlc3MocGh5c190b19wYWdlKHZjcHUtXHUwMDNlYXJjaC5oZGJzcy5iYXNlX3BoeXMpKTtcbitcdGlmICghaGRic3NfYnVmKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRndWFyZCh3cml0ZV9sb2NrX2lycXNhdmUpKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZW1tdV9sb2NrKTtcbitcdGZvciAoaWR4ID0gMDsgaWR4IFx1MDAzYyBjdXJyX2lkeDsgaWR4KyspIHtcbitcdFx0dTY0IGdwYTtcbitcbitcdFx0Z3BhID0gaGRic3NfYnVmW2lkeF07XG4rXHRcdGlmICghKGdwYSBcdTAwMjYgSERCU1NfRU5UUllfVkFMSUQpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRncGEgXHUwMDI2PSBIREJTU19FTlRSWV9JUEE7XG4rXHRcdGt2bV92Y3B1X21hcmtfcGFnZV9kaXJ0eSh2Y3B1LCBncGEgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuK1x0fVxuK1xuK1x0LyogcmVzZXQgSERCU1MgaW5kZXggKi9cbitcdHdyaXRlX3N5c3JlZ19zKDAsIFNZU19IREJTU1BST0RfRUwyKTtcbitcdHZjcHUtXHUwMDNlYXJjaC5oZGJzcy5oZGJzc3Byb2RfZWwyID0gMDtcbitcdGlzYigpO1xuK31cbitcbitpbnQga3ZtX2hhbmRsZV9oZGJzc19mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0dTY0IHByb2Q7XG4rXHR1NjQgZnNjO1xuK1xuK1x0cHJvZCA9IHJlYWRfc3lzcmVnX3MoU1lTX0hEQlNTUFJPRF9FTDIpO1xuK1x0ZnNjID0gRklFTERfR0VUKEhEQlNTUFJPRF9FTDJfRlNDX01BU0ssIHByb2QpO1xuK1xuK1x0c3dpdGNoIChmc2MpIHtcbitcdGNhc2UgSERCU1NQUk9EX0VMMl9GU0NfT0s6XG4rXHRcdC8qIEJ1ZmZlciBmdWxsLCBzZXQgcmVxdWVzdCB0byBmbHVzaCBvbiBuZXh0IHZjcHUgZXhpdCAqL1xuK1x0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfRkxVU0hfSERCU1MsIHZjcHUpO1xuK1x0XHRyZXR1cm4gMTtcbitcdGNhc2UgSERCU1NQUk9EX0VMMl9GU0NfRXh0ZXJuYWxBYm9ydDpcbitcdGNhc2UgSERCU1NQUk9EX0VMMl9GU0NfR1BGOlxuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcdGRlZmF1bHQ6XG4rXHRcdC8qIFVua25vd24gZmF1bHQuICovXG4rXHRcdFdBUk5fT05DRSgxLFxuK1x0XHRcdCAgXCJVbmV4cGVjdGVkIEhEQlNTIGZhdWx0IHR5cGUsIEZTQzogMHglbGx4IChwcm9kPTB4JWxseCwgdmNwdT0lZClcXG5cIixcbitcdFx0XHQgIGZzYywgcHJvZCwgdmNwdS1cdTAwM2V2Y3B1X2lkKTtcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB1bnNpZ25lZCBpbnQgaGRic3NfYXV0b19zZWxlY3Rfb3JkZXIoc3RydWN0IGt2bSAqa3ZtKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgbnBhZ2VzID0gMDtcbitcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3Q7XG4rXHRpbnQgYmt0O1xuK1xuK1x0a3ZtX2Zvcl9lYWNoX21lbXNsb3QobWVtc2xvdCwgYmt0LCBrdm1fbWVtc2xvdHMoa3ZtKSlcbitcdFx0bnBhZ2VzICs9IG1lbXNsb3QtXHUwMDNlbnBhZ2VzO1xuK1xuK1x0aWYgKG5wYWdlcyBcdTAwM2M9IDE2Mzg0KVxuK1x0XHRyZXR1cm4gMDtcbitcdGVsc2UgaWYgKG5wYWdlcyBcdTAwM2M9IDI2MjE0NClcbitcdFx0cmV0dXJuIDM7XG4rXHRlbHNlIGlmIChucGFnZXMgXHUwMDNjPSA0MTk0MzA0KVxuK1x0XHRyZXR1cm4gNjtcbitcdGVsc2VcbitcdFx0cmV0dXJuIDk7XG4rfVxuK1xuKy8qXG4rICogRW5hYmxlIEhEQlNTIGZvciBhbGwgdkNQVXMgaW4gdGhlIFZNLlxuKyAqXG4rICogQ2FsbGVkIGZyb20ga3ZtX2FybV9oZGJzc19vbl9kaXJ0eV9sb2dnaW5nX2NoYW5nZSgpIHdoaWNoIGlzIGludm9rZWRcbisgKiBieSBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbigpIHVuZGVyIGt2bS1cdTAwM2VzbG90c19sb2NrLlxuKyAqXG4rICogSWYgYnVmZmVyIGFsbG9jYXRpb24gZmFpbHMsIEhEQlNTIHJlbWFpbnMgZGlzYWJsZWQgYW5kIGRpcnR5IHRyYWNraW5nXG4rICogZmFsbHMgYmFjayB0byB0aGUgdHJhZGl0aW9uYWwgc29mdHdhcmUtYmFzZWQgYXBwcm9hY2ggKFBURSB3cml0ZS1wcm90ZWN0XG4rICogKyBzb2Z0d2FyZSBkaXJ0eSBtYXJraW5nKS4gVGhpcyBkb2VzIG5vdCBhZmZlY3QgY29ycmVjdG5lc3M7IGRpcnR5XG4rICogbG9nZ2luZyByZW1haW5zIGZ1bmN0aW9uYWwgd2l0aG91dCBIREJTUy5cbisgKi9cbitzdGF0aWMgaW50IGt2bV9hcm1fZW5hYmxlX2hkYnNzX2dsb2JhbChzdHJ1Y3Qga3ZtICprdm0pXG4re1xuK1x0aW50IGVycjtcbitcdHVuc2lnbmVkIGxvbmcgaTtcbitcdHVuc2lnbmVkIGludCBvcmRlcjtcbitcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbitcbitcdGlmICghc3lzdGVtX3N1cHBvcnRzX2hkYnNzKCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKGt2bS1cdTAwM2VkaXJ0eV9yaW5nX3NpemUpIC8qIERvbid0IHN1cHBvcnQgSERCU1MgaW4gZGlydHkgcmluZyBtb2RlICovXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKGt2bS1cdTAwM2VhcmNoLmVuYWJsZV9oZGJzcykgLyogQWxyZWFkeSBPbiAqL1xuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIFR1cm4gaXQgb24gKi9cbitcdG9yZGVyID0gaGRic3NfYXV0b19zZWxlY3Rfb3JkZXIoa3ZtKTtcbitcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkge1xuK1x0XHRlcnIgPSBrdm1fYXJtX3ZjcHVfYWxsb2NfaGRic3ModmNwdSwgb3JkZXIpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGdvdG8gZXJyb3JfYWxsb2M7XG4rXHR9XG4rXG4rXHRrdm0tXHUwMDNlYXJjaC5lbmFibGVfaGRic3MgPSB0cnVlO1xuK1x0a3ZtLVx1MDAzZWFyY2gubW11LnZ0Y3IgfD0gVlRDUl9FTDJfSEQgfCBWVENSX0VMMl9IREJTUyB8IFZUQ1JfRUwyX0hBO1xuK1xuK1x0LypcbitcdCAqIFdlIHNob3VsZCBraWNrIHZjcHVzIG91dCBvZiBndWVzdCBtb2RlIGhlcmUgdG8gbG9hZCBuZXdcbitcdCAqIHZ0Y3IgdmFsdWUgdG8gdnRjcl9lbDIgcmVnaXN0ZXIgd2hlbiByZS1lbnRlciBndWVzdCBtb2RlLlxuK1x0ICovXG4rXHRrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pXG4rXHRcdGt2bV92Y3B1X2tpY2sodmNwdSk7XG4rXG4rXHRyZXR1cm4gMDtcbitcbitlcnJvcl9hbGxvYzpcbitcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSlcbitcdFx0aWYgKHZjcHUtXHUwMDNlYXJjaC5oZGJzcy5iYXNlX3BoeXMpXG4rXHRcdFx0a3ZtX2FybV92Y3B1X2ZyZWVfaGRic3ModmNwdSk7XG4rXG4rXHRwcl93YXJuX29uY2UoXCJrdm06IGZhaWxlZCB0byBhbGxvY2F0ZSBIREJTUyBidWZmZXJzIChvcmRlcj0ldSksIFwiXG4rXHRcdCAgICAgXCJmYWxsaW5nIGJhY2sgdG8gc29mdHdhcmUgZGlydHkgdHJhY2tpbmdcXG5cIiwgb3JkZXIpO1xuK1x0cmV0dXJuIC1FTk9NRU07XG4rfVxuK1xuK3ZvaWQga3ZtX2FybV9kaXNhYmxlX2hkYnNzX2dsb2JhbChzdHJ1Y3Qga3ZtICprdm0pXG4re1xuK1x0dW5zaWduZWQgbG9uZyBpO1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuK1xuK1x0aWYgKCFrdm0tXHUwMDNlYXJjaC5lbmFibGVfaGRic3MpIC8qIEFscmVhZHkgT2ZmICovXG4rXHRcdHJldHVybjtcbitcbitcdC8qIFR1cm4gaXQgb2ZmICovXG4rXHRrdm0tXHUwMDNlYXJjaC5tbXUudnRjciBcdTAwMjY9IH4oVlRDUl9FTDJfSEQgfCBWVENSX0VMMl9IREJTUyB8IFZUQ1JfRUwyX0hBKTtcbitcbitcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSlcbitcdFx0a3ZtX2FybV92Y3B1X2ZyZWVfaGRic3ModmNwdSk7XG4rXG4rXHRrdm0tXHUwMDNlYXJjaC5lbmFibGVfaGRic3MgPSBmYWxzZTtcbit9XG4rXG4rdm9pZCBrdm1fYXJtX2hkYnNzX29uX2RpcnR5X2xvZ2dpbmdfY2hhbmdlKHN0cnVjdCBrdm0gKmt2bSwgaW50IG5yX21lbXNsb3RzX2xvZ2dpbmcpXG4re1xuK1x0LypcbitcdCAqIENhbGxlZCBmcm9tIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKCkgdW5kZXIga3ZtLVx1MDAzZXNsb3RzX2xvY2suXG4rXHQgKiBBbGwgc3RhdGUgdHJhbnNpdGlvbnMgYXJlIHNlcmlhbGl6ZWQgYnkgc2xvdHNfbG9jay5cbitcdCAqL1xuK1x0aWYgKG5yX21lbXNsb3RzX2xvZ2dpbmcgXHUwMDNlIDAgXHUwMDI2XHUwMDI2ICFrdm0tXHUwMDNlYXJjaC5lbmFibGVfaGRic3MpXG4rXHRcdGt2bV9hcm1fZW5hYmxlX2hkYnNzX2dsb2JhbChrdm0pO1xuK1x0ZWxzZSBpZiAobnJfbWVtc2xvdHNfbG9nZ2luZyA9PSAwIFx1MDAyNlx1MDAyNiBrdm0tXHUwMDNlYXJjaC5lbmFibGVfaGRic3MpXG4rXHRcdGt2bV9hcm1fZGlzYWJsZV9oZGJzc19nbG9iYWwoa3ZtKTtcbit9XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuYyBiL2FyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmNcbmluZGV4IDkxYTdkZmFkNjY4NjYwLi4yMWVjNDU2ZWNjNDExYSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmNcbisrKyBiL2FyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmNcbkBAIC03MzEsOSArNzMxLDIzIEBAIHN0YXRpYyBpbnQgc3RhZ2UyX3NldF9wcm90X2F0dHIoc3RydWN0IGt2bV9wZ3RhYmxlICpwZ3QsIGVudW0ga3ZtX3BndGFibGVfcHJvdCBwXG4gXHRpZiAocHJvdCBcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9SKVxuIFx0XHRhdHRyIHw9IEtWTV9QVEVfTEVBRl9BVFRSX0xPX1MyX1MyQVBfUjtcbiBcbi1cdGlmIChwcm90IFx1MDAyNiBLVk1fUEdUQUJMRV9QUk9UX1cpXG4rXHRpZiAocHJvdCBcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9XKSB7XG4gXHRcdGF0dHIgfD0gS1ZNX1BURV9MRUFGX0FUVFJfTE9fUzJfUzJBUF9XO1xuIFxuK1x0XHQvKlxuK1x0XHQgKiBTZXQgREJNIGJpdCBmb3Igd3JpdGFibGUgbm9uLWRldmljZSBwYWdlcyBpZiB0aGUgcGFnZS10YWJsZVxuK1x0XHQgKiBoYXMgS1ZNX1BHVEFCTEVfUzJfREJNIGZsYWcgKHN5c3RlbSBzdXBwb3J0cyBIREJTUykuXG4rXHRcdCAqXG4rXHRcdCAqIEZvciBzdGFnZSAyIHRyYW5zbGF0aW9ucyB1c2luZyBJbmRpcmVjdCBwZXJtaXNzaW9ucywgaWYgdGhlXG4rXHRcdCAqIEVmZmVjdGl2ZSB2YWx1ZSBvZiBWVENSX0VMMi5IRCBpcyAwLCB0aGVuIGRpcnR5IHN0YXRlIGlzXG4rXHRcdCAqIG1hbmFnZWQgYnkgc29mdHdhcmUuIEhhcmR3YXJlIG9ubHkgdXBkYXRlcyB0aGUgZGlydHkgc3RhdGVcbitcdFx0ICogd2hlbiBWVENSX0VMMi5IRD0xIChIREJTUyBlbmFibGVkKS5cbitcdFx0ICovXG4rXHRcdGlmICgocGd0LVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fUEdUQUJMRV9TMl9EQk0pIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIShwcm90IFx1MDAyNiBLVk1fUEdUQUJMRV9QUk9UX0RFVklDRSkpXG4rXHRcdFx0YXR0ciB8PSBLVk1fUFRFX0xFQUZfQVRUUl9ISV9TMl9EQk07XG4rXHR9XG4rXG4gXHRpZiAoIWt2bV9scGEyX2lzX2VuYWJsZWQoKSlcbiBcdFx0YXR0ciB8PSBGSUVMRF9QUkVQKEtWTV9QVEVfTEVBRl9BVFRSX0xPX1MyX1NILCBzaCk7XG4gXG5AQCAtMTM2Nyw5ICsxMzgxLDI2IEBAIGludCBrdm1fcGd0YWJsZV9zdGFnZTJfcmVsYXhfcGVybXMoc3RydWN0IGt2bV9wZ3RhYmxlICpwZ3QsIHU2NCBhZGRyLFxuIFx0aWYgKHByb3QgXHUwMDI2IEtWTV9QR1RBQkxFX1BST1RfUilcbiBcdFx0c2V0IHw9IEtWTV9QVEVfTEVBRl9BVFRSX0xPX1MyX1MyQVBfUjtcbiBcbi1cdGlmIChwcm90IFx1MDAyNiBLVk1fUEdUQUJMRV9QUk9UX1cpXG4rXHRpZiAocHJvdCBcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9XKSB7XG4gXHRcdHNldCB8PSBLVk1fUFRFX0xFQUZfQVRUUl9MT19TMl9TMkFQX1c7XG4gXG4rXHRcdC8qXG4rXHRcdCAqIE5vIERFVklDRSBmaWx0ZXIgbmVlZGVkIGhlcmU6IHJlbGF4X3Blcm1zIGlzIG9ubHkgY2FsbGVkXG4rXHRcdCAqIG9uIEZTQ19QRVJNIGZhdWx0cy4gRGV2aWNlIHBhZ2VzIGFsd2F5cyBnZXQgZnVsbCBSVyBmcm9tXG4rXHRcdCAqIGluaXRpYWwgbWFwcGluZyBhbmQgYXJlIG5ldmVyIHdyaXRlLXByb3RlY3RlZCBkdXJpbmdcbitcdFx0ICogbWlncmF0aW9uLCBzbyB0aGV5IG5ldmVyIHRyaWdnZXIgYSBwZXJtaXNzaW9uIGZhdWx0LlxuK1x0XHQgKi9cbitcdFx0aWYgKHBndC1cdTAwM2VmbGFncyBcdTAwMjYgS1ZNX1BHVEFCTEVfUzJfREJNKVxuK1x0XHRcdHNldCB8PSBLVk1fUFRFX0xFQUZfQVRUUl9ISV9TMl9EQk07XG4rXHR9IGVsc2Uge1xuK1x0XHQvKlxuK1x0XHQgKiBDbGVhciBEQk0gb24gV+KGklJPIGRvd25ncmFkZSB0byBwcmV2ZW50IGhhcmR3YXJlIGZyb21cbitcdFx0ICogc2lsZW50bHkgdXBncmFkaW5nIFJPK0RCTSBiYWNrIHRvIFcrZGlydHksIHdoaWNoIHdvdWxkXG4rXHRcdCAqIGJ5cGFzcyBLVk0ncyB3cml0ZSB0cmFja2luZyBhbmQgY2F1c2UgZGF0YSBjb3JydXB0aW9uLlxuK1x0XHQgKi9cbitcdFx0Y2xyIHw9IEtWTV9QVEVfTEVBRl9BVFRSX0hJX1MyX0RCTTtcbitcdH1cbitcbiBcdHJldCA9IHN0YWdlMl9zZXRfeG5fYXR0cihwcm90LCBcdTAwMjZ4bik7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmMgYi9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jXG5pbmRleCBiYmU5Y2ViZDNkOWQ1Ny4uZmU3Mjk0NGJmZDNkNWIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jXG5AQCAtMjIsNiArMjIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fZW11bGF0ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9oeXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fbW11LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX2RpcnR5X2JpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2Zwc2ltZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2RlYnVnLW1vbml0b3JzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcHJvY2Vzc29yLmhcdTAwM2VcbkBAIC0yMTMsNiArMjE0LDE5IEBAIHN0YXRpYyB2b2lkIF9fdmNwdV9wdXRfZGVhY3RpdmF0ZV90cmFwcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIF9fbG9hZF9oZGJzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG4rXG4rXHRpZiAoIWt2bS1cdTAwM2VhcmNoLmVuYWJsZV9oZGJzcylcbitcdFx0cmV0dXJuO1xuK1xuK1x0d3JpdGVfc3lzcmVnX3ModmNwdS1cdTAwM2VhcmNoLmhkYnNzLmhkYnNzYnJfZWwyLCBTWVNfSERCU1NCUl9FTDIpO1xuK1x0d3JpdGVfc3lzcmVnX3ModmNwdS1cdTAwM2VhcmNoLmhkYnNzLmhkYnNzcHJvZF9lbDIsIFNZU19IREJTU1BST0RfRUwyKTtcbitcbitcdGlzYigpO1xuK31cbitcbiB2b2lkIGt2bV92Y3B1X2xvYWRfdmhlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRob3N0X2RhdGFfcHRyKGhvc3RfY3R4dCktXHUwMDNlX19oeXBfcnVubmluZ192Y3B1ID0gdmNwdTtcbkBAIC0yMjAsNiArMjM0LDcgQEAgdm9pZCBrdm1fdmNwdV9sb2FkX3ZoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRfX3ZjcHVfbG9hZF9zd2l0Y2hfc3lzcmVncyh2Y3B1KTtcbiBcdF9fdmNwdV9sb2FkX2FjdGl2YXRlX3RyYXBzKHZjcHUpO1xuIFx0X19sb2FkX3N0YWdlMih2Y3B1LVx1MDAzZWFyY2guaHdfbW11KTtcbitcdF9fbG9hZF9oZGJzcyh2Y3B1KTtcbiB9XG4gXG4gdm9pZCBrdm1fdmNwdV9wdXRfdmhlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9tbXUuYyBiL2FyY2gvYXJtNjQva3ZtL21tdS5jXG5pbmRleCA2Yzk0MWFhYTEwYzYzOS4uNDg0ZjQ4ZGFlMDAwM2MgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9tbXUuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vbW11LmNcbkBAIC0xNiw2ICsxNiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2NhY2hlZmx1c2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fYXJtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX21tdS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9kaXJ0eV9iaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fcGd0YWJsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9wa3ZtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX2FzbS5oXHUwMDNlXG5AQCAtMTAxNCw2ICsxMDE1LDkgQEAgaW50IGt2bV9pbml0X3N0YWdlMl9tbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1bnNpZ25lZCBsb25nIHRcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gb3V0X2ZyZWVfcGd0YWJsZTtcbiBcbitcdGlmIChzeXN0ZW1fc3VwcG9ydHNfaGRic3MoKSlcbitcdFx0cGd0LVx1MDAzZWZsYWdzIHw9IEtWTV9QR1RBQkxFX1MyX0RCTTtcbitcbiBcdG1tdS1cdTAwM2VwZ3QgPSBwZ3Q7XG4gXHRpZiAoaXNfcHJvdGVjdGVkX2t2bV9lbmFibGVkKCkpXG4gXHRcdHJldHVybiAwO1xuQEAgLTEwMjcsOCArMTAzMSwxMiBAQCBpbnQga3ZtX2luaXRfc3RhZ2UyX21tdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHVuc2lnbmVkIGxvbmcgdFxuIFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSlcbiBcdFx0KnBlcl9jcHVfcHRyKG1tdS1cdTAwM2VsYXN0X3ZjcHVfcmFuLCBjcHUpID0gLTE7XG4gXG4tXHQgLyogVGhlIGVhZ2VyIHBhZ2Ugc3BsaXR0aW5nIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgKi9cbi1cdG1tdS1cdTAwM2VzcGxpdF9wYWdlX2NodW5rX3NpemUgPSBLVk1fQVJNX0VBR0VSX1NQTElUX0NIVU5LX1NJWkVfREVGQVVMVDtcbitcdCAvKiBUaGUgZWFnZXIgcGFnZSBzcGxpdHRpbmcgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCBpZiBzeXN0ZW0gaGFzIG5vIEhEQlNTICovXG4rXHRpZiAoc3lzdGVtX3N1cHBvcnRzX2hkYnNzKCkpXG4rXHRcdG1tdS1cdTAwM2VzcGxpdF9wYWdlX2NodW5rX3NpemUgPSAyNTYgKiAxMDI0ICogUEFHRV9TSVpFO1xuK1x0ZWxzZVxuK1x0XHRtbXUtXHUwMDNlc3BsaXRfcGFnZV9jaHVua19zaXplID0gS1ZNX0FSTV9FQUdFUl9TUExJVF9DSFVOS19TSVpFX0RFRkFVTFQ7XG4rXG4gXHRtbXUtXHUwMDNlc3BsaXRfcGFnZV9jYWNoZS5nZnBfemVybyA9IF9fR0ZQX1pFUk87XG4gXG4gXHRtbXUtXHUwMDNlcGdkX3BoeXMgPSBfX3BhKHBndC1cdTAwM2VwZ2QpO1xuQEAgLTIyMzQsNiArMjI0Miw3IEBAIGludCBrdm1faGFuZGxlX2d1ZXN0X3NlYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gfVxuIFxuIC8qKlxuK1xuICAqIGt2bV9oYW5kbGVfZ3Vlc3RfYWJvcnQgLSBoYW5kbGVzIGFsbCAybmQgc3RhZ2UgYWJvcnRzXG4gICogQHZjcHU6XHR0aGUgVkNQVSBwb2ludGVyXG4gICpcbkBAIC0yMjcxLDYgKzIyODAsOSBAQCBpbnQga3ZtX2hhbmRsZV9ndWVzdF9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHRpc19pYWJ0ID0ga3ZtX3ZjcHVfdHJhcF9pc19pYWJ0KHZjcHUpO1xuIFxuK1x0aWYgKGVzcl9pc3MyX2lzX2hkYnNzZihlc3IpKVxuK1x0XHRyZXR1cm4ga3ZtX2hhbmRsZV9oZGJzc19mYXVsdCh2Y3B1KTtcbitcbiBcdGlmIChlc3JfZnNjX2lzX3RyYW5zbGF0aW9uX2ZhdWx0KGVzcikpIHtcbiBcdFx0LyogQmV5b25kIHNhbml0aXNlZCBQQVJhbmdlICh3aGljaCBpcyB0aGUgSVBBIGxpbWl0KSAqL1xuIFx0XHRpZiAoZmF1bHRfaXBhIFx1MDAzZT0gQklUX1VMTChnZXRfa3ZtX2lwYV9saW1pdCgpKSkge1xuQEAgLTI1NzYsNiArMjU4OCw5IEBAIHZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuIHtcbiBcdGJvb2wgbG9nX2RpcnR5X3BhZ2VzID0gbmV3IFx1MDAyNlx1MDAyNiBuZXctXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTO1xuIFxuK1x0a3ZtX2FybV9oZGJzc19vbl9kaXJ0eV9sb2dnaW5nX2NoYW5nZShrdm0sXG4rXHRcdGF0b21pY19yZWFkKFx1MDAyNmt2bS1cdTAwM2Vucl9tZW1zbG90c19kaXJ0eV9sb2dnaW5nKSk7XG4rXG4gXHQvKlxuIFx0ICogQXQgdGhpcyBwb2ludCBtZW1zbG90IGhhcyBiZWVuIGNvbW1pdHRlZCBhbmQgdGhlcmUgaXMgYW5cbiBcdCAqIGFsbG9jYXRlZCBkaXJ0eV9iaXRtYXBbXSwgZGlydHkgcGFnZXMgd2lsbCBiZSB0cmFja2VkIHdoaWxlIHRoZVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3Jlc2V0LmMgYi9hcmNoL2FybTY0L2t2bS9yZXNldC5jXG5pbmRleCBiOTYzZmQ5NzVhYWNhZi4uZDgxMDRiY2JkOWZmYWQgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9yZXNldC5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS9yZXNldC5jXG5AQCAtMjcsNiArMjcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fYXNtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX2VtdWxhdGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fbW11LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX2RpcnR5X2JpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9uZXN0ZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS92aXJ0LmhcdTAwM2VcbiBcbkBAIC0xNjEsNiArMTYyLDkgQEAgdm9pZCBrdm1fYXJtX3ZjcHVfZGVzdHJveShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpdmNwdS1cdTAwM2VhcmNoLmN0eHQudm5jcl9hcnJheSk7XG4gXHRrZnJlZSh2Y3B1LVx1MDAzZWFyY2gudm5jcl90bGIpO1xuIFx0a2ZyZWUodmNwdS1cdTAwM2VhcmNoLmNjc2lkcik7XG4rXG4rXHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5lbmFibGVfaGRic3MpXG4rXHRcdGt2bV9hcm1fdmNwdV9mcmVlX2hkYnNzKHZjcHUpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBrdm1fdmNwdV9yZXNldF9zdmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2FwcyBiL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2Fwc1xuaW5kZXggOWI4NWE4NGY2ZmQ0OTQuLmE4NzcwNmM5ZDE2MGUwIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC90b29scy9jcHVjYXBzXG4rKysgYi9hcmNoL2FybTY0L3Rvb2xzL2NwdWNhcHNcbkBAIC02OSw2ICs2OSw3IEBAIEhBU19WQTUyXG4gSEFTX1ZJUlRfSE9TVF9FWFROXG4gSEFTX1dGWFRcbiBIQVNfWE5YXG4rSEFTX0hEQlNTXG4gSEFGVFxuIEhXX0RCTVxuIEtWTV9IVkhFXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjoxMjowNC42MjQ0OTk5MzhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjc3Mzg2NzM3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBIREJTUyBQYXRjaCBmb3IgS1ZNIG9uIGFybTY0KipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBpbnRyb2R1Y2luZyBIREJTUyBzdXBwb3J0IGZvciBLVk0gb24gYXJtNjQuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgc2lnbmlmaWNhbnQgb25lLCB0byB0aGUgY29yZSBLVk0gbG9naWMuIFRoZXJlZm9yZSwgZnV6emluZyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZC4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIGFyZWFzIGZvciBmdXp6aW5nIGFuZCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiB0byBlbmFibGUgdGhpcy5cblxuRmlyc3QsIGxldCdzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhpcyBwYXRjaCB0b3VjaGVzLiBMb29rcyBsaWtlIGl0J3MgYWRkaW5nIG5ldyBmaWxlcyBgYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmNgLCBgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZGlydHlfYml0LmhgLCBhbmQgbW9kaWZ5aW5nIHNldmVyYWwgZXhpc3RpbmcgS1ZNIGZpbGVzLiBJIHNlZSBtb2RpZmljYXRpb25zIGluIGBrdm1fYXJjaF92Y3B1X2NyZWF0ZWAsIGBrdm1fYXJjaF92Y3B1X3B1dGAsIGBjaGVja192Y3B1X3JlcXVlc3RzYCwgYW5kIHRoZSBsaWtlIOKAkyBjb3JlIEtWTSBzdHVmZi4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgSERCU1Mtc3BlY2lmaWMgZnVuY3Rpb25zLlxuXG5JIGNhbiBzZWUgc29tZSBrZXkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIEhEQlNTIGltcGxlbWVudGF0aW9uIHRoYXQgYXJlIGFkZGVkL21vZGlmaWVkLiBUaGVzZSBhcmUgbXkgbWFpbiB0YXJnZXRzOlxuLSBga3ZtX2FybV92Y3B1X2FsbG9jX2hkYnNzYFxuLSBga3ZtX2FybV92Y3B1X2ZyZWVfaGRic3NgXG4tIGBrdm1fZmx1c2hfaGRic3NfYnVmZmVyYFxuLSBga3ZtX2hhbmRsZV9oZGJzc19mYXVsdGBcbi0gYGt2bV9hcm1fZW5hYmxlX2hkYnNzX2dsb2JhbGBcbi0gYGt2bV9hcm1fZGlzYWJsZV9oZGJzc19nbG9iYWxgXG4tIGBrdm1fYXJtX2hkYnNzX29uX2RpcnR5X2xvZ2dpbmdfY2hhbmdlYFxuLSBga3ZtX2FyY2hfc3luY19kaXJ0eV9sb2dgXG5cbk5vdywgbGV0J3MgY2hlY2sgZm9yIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzLiBMb29raW5nIGF0IHRoZSBgTWFrZWZpbGVgLCBJIHNlZSB0aGF0IHRoZSBgZGlydHlfYml0Lm9gIGZpbGUgaXMgYmVpbmcgdW5jb25kaXRpb25hbGx5IGJ1aWx0IHdoZW4gS1ZNIGlzIGVuYWJsZWQuIFNvLCB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG5lZWRlZCBpcyBgS1ZNYC4gTm90aGluZyBlbHNlIGFwcGVhcnMgdG8gYmUgYWRkZWQgaW4gdGhlIEtjb25maWcgb3Igc2ltaWxhciBmaWxlcy5cblxuSW5pdGlhbGx5LCBJJ2QgdGhvdWdodCBhYm91dCBvbWl0dGluZyBzdGF0aWMgZnVuY3Rpb25zIGxpa2UgYGt2bV9hcm1fZW5hYmxlX2hkYnNzX2dsb2JhbGAgYW5kIGBrdm1fYXJtX2Rpc2FibGVfaGRic3NfZ2xvYmFsYCBmcm9tIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LCBhc3N1bWluZyB0aGUgZnV6emVyIG1pZ2h0IG5vdCBkaXJlY3RseSB0YXJnZXQgdGhlbS4gSG93ZXZlciwgZm9yIGNvdmVyYWdlIGFuZCB0byBndWlkZSB0aGUgZnV6emVyLCBpbmNsdWRpbmcgdGhlbSBtYWtlcyBzZW5zZS5cblxuQWZ0ZXIgc29tZSBtb3JlIHRob3VnaHQsIEkndmUgZGVjaWRlZCB0byBpbmNsdWRlIGBrdm1fYXJjaF9zeW5jX2RpcnR5X2xvZ2AsIGl0J3MgYSBjcml0aWNhbCBmdW5jdGlvbiBmb3IgZGlydHkgbG9nIHN5bmNocm9uaXphdGlvbi4gTm93LCBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gIGlzIGFsc28gYSBjcml0aWNhbCBjb21wb25lbnQgdG8gZnV6ei4gQXZvaWRpbmcgYGt2bV9oYW5kbGVfZ3Vlc3RfYWJvcnRgIGFzIGl0J3MgbGlrZWx5IGEgaG90LXBhdGggZnVuY3Rpb24gYW5kIG1pZ2h0IGJlIGxlc3MgcHJvZml0YWJsZSBmb3IgZnV6emluZy5cblxuTXkgcmVhc29uaW5nIGlzIHRoaXM6IFRoaXMgcGF0Y2ggZnVuZGFtZW50YWxseSBjaGFuZ2VzIGhvdyBkaXJ0eSBwYWdlIGxvZ2dpbmcgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IHdvcmsgd2l0aGluIEtWTSBvbiBhcm02NC4gU2luY2UgdGhpcyBpcyBhbiBpbnRlZ3JhdGlvbiB0aGF0IHdpbGwgYmUgYWNjZXNzaWJsZSB0byB1c2Vyc3BhY2UgdmlhIHRoZSBLVk0gaW9jdGxzLCB0aGlzIGlzIHdvcnRoIGZ1enppbmcgYW5kIGluY2x1ZGluZyB0aGlzIGNyaXRpY2FsIGNvbXBvbmVudCB3aWxsIGhlbHAuXG5cblNvLCBoZXJlJ3MgbXkgcGxhbiB0byBjYWxsIGBzZXQtcmVzdWx0c2A6XG5cbmBXb3J0aEZ1enppbmc6IHRydWVgXG5gRm9jdXNTeW1ib2xzYDpcbi0ga3ZtX2FybV92Y3B1X2FsbG9jX2hkYnNzXG4tIGt2bV9hcm1fdmNwdV9mcmVlX2hkYnNzXG4tIGt2bV9mbHVzaF9oZGJzc19idWZmZXJcbi0ga3ZtX2hhbmRsZV9oZGJzc19mYXVsdFxuLSBrdm1fYXJtX2VuYWJsZV9oZGJzc19nbG9iYWxcbi0ga3ZtX2FybV9kaXNhYmxlX2hkYnNzX2dsb2JhbFxuLSBrdm1fYXJtX2hkYnNzX29uX2RpcnR5X2xvZ2dpbmdfY2hhbmdlXG4tIGt2bV9hcmNoX3N5bmNfZGlydHlfbG9nXG5gRW5hYmxlQ29uZmlnc2A6XG4tIEtWTVxuXG5JJ20gY29uZmlkZW50IHRoaXMgaXMgdGhlIHJpZ2h0IGFwcHJvYWNoIHRvIGVuc3VyZSB0aGlzIHBhdGNoIGdldHMgdGhvcm91Z2ggZnV6emluZyBjb3ZlcmFnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2NjEsIk91dHB1dFRva2VucyI6MjA2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMyNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjEyOjIxLjM5ODM2OTU3OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg0Mzk3OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcm1fdmNwdV9hbGxvY19oZGJzc1wiLFxuICAgIFwia3ZtX2FybV92Y3B1X2ZyZWVfaGRic3NcIixcbiAgICBcImt2bV9mbHVzaF9oZGJzc19idWZmZXJcIixcbiAgICBcImt2bV9oYW5kbGVfaGRic3NfZmF1bHRcIixcbiAgICBcImt2bV9hcm1fZW5hYmxlX2hkYnNzX2dsb2JhbFwiLFxuICAgIFwia3ZtX2FybV9kaXNhYmxlX2hkYnNzX2dsb2JhbFwiLFxuICAgIFwia3ZtX2FybV9oZGJzc19vbl9kaXJ0eV9sb2dnaW5nX2NoYW5nZVwiLFxuICAgIFwia3ZtX2FyY2hfc3luY19kaXJ0eV9sb2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIEhhcmR3YXJlIERpcnR5IHN0YXRlIHRyYWNraW5nIHN0cnVjdHVyZSAoSERCU1MpIHN1cHBvcnQgZm9yIEtWTSBvbiBhcm02NC4gSXQgbW9kaWZpZXMgY29yZSBLVk0gbG9naWMgZm9yIGRpcnR5IHBhZ2UgbG9nZ2luZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyBhbmQgZ3Vlc3QgZXhlY3V0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcm1fdmNwdV9hbGxvY19oZGJzc1wiLFxuICAgIFwia3ZtX2FybV92Y3B1X2ZyZWVfaGRic3NcIixcbiAgICBcImt2bV9mbHVzaF9oZGJzc19idWZmZXJcIixcbiAgICBcImt2bV9oYW5kbGVfaGRic3NfZmF1bHRcIixcbiAgICBcImt2bV9hcm1fZW5hYmxlX2hkYnNzX2dsb2JhbFwiLFxuICAgIFwia3ZtX2FybV9kaXNhYmxlX2hkYnNzX2dsb2JhbFwiLFxuICAgIFwia3ZtX2FybV9oZGJzc19vbl9kaXJ0eV9sb2dnaW5nX2NoYW5nZVwiLFxuICAgIFwia3ZtX2FyY2hfc3luY19kaXJ0eV9sb2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIEhhcmR3YXJlIERpcnR5IHN0YXRlIHRyYWNraW5nIHN0cnVjdHVyZSAoSERCU1MpIHN1cHBvcnQgZm9yIEtWTSBvbiBhcm02NC4gSXQgbW9kaWZpZXMgY29yZSBLVk0gbG9naWMgZm9yIGRpcnR5IHBhZ2UgbG9nZ2luZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyBhbmQgZ3Vlc3QgZXhlY3V0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflownl6gp[1] Phase: Succeeded StartedAt: 2026-07-10 06:12:32 +0000 UTC FinishedAt: 2026-07-10 06:12:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflownl6gp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-10 06:12:32 +0000 UTC FinishedAt: 2026-07-10 06:12:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflownl6gp[2] Phase: Succeeded StartedAt: 2026-07-10 06:12:32 +0000 UTC FinishedAt: 2026-07-10 07:33:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflownl6gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_vcpu_alloc_hdbss","kvm_arm_vcpu_free_hdbss","kvm_flush_hdbss_buffer","kvm_handle_hdbss_fault","kvm_arm_enable_hdbss_global","kvm_arm_disable_hdbss_global","kvm_arm_hdbss_on_dirty_logging_change","kvm_arch_sync_dirty_log"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d38cd915-886e-41cd-b9c2-e092642c5396","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-10 06:12:32 +0000 UTC FinishedAt: 2026-07-10 07:33:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_vcpu_alloc_hdbss","kvm_arm_vcpu_free_hdbss","kvm_flush_hdbss_buffer","kvm_handle_hdbss_fault","kvm_arm_enable_hdbss_global","kvm_arm_disable_hdbss_global","kvm_arm_hdbss_on_dirty_logging_change","kvm_arch_sync_dirty_log"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d38cd915-886e-41cd-b9c2-e092642c5396","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflownl6gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_vcpu_alloc_hdbss","kvm_arm_vcpu_free_hdbss","kvm_flush_hdbss_buffer","kvm_handle_hdbss_fault","kvm_arm_enable_hdbss_global","kvm_arm_disable_hdbss_global","kvm_arm_hdbss_on_dirty_logging_change","kvm_arch_sync_dirty_log"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d38cd915-886e-41cd-b9c2-e092642c5396","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-10 06:12:32 +0000 UTC FinishedAt: 2026-07-10 06:12:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflownl6gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_vcpu_alloc_hdbss","kvm_arm_vcpu_free_hdbss","kvm_flush_hdbss_buffer","kvm_handle_hdbss_fault","kvm_arm_enable_hdbss_global","kvm_arm_disable_hdbss_global","kvm_arm_hdbss_on_dirty_logging_change","kvm_arch_sync_dirty_log"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d38cd915-886e-41cd-b9c2-e092642c5396","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-10 06:12:32 +0000 UTC FinishedAt: 2026-07-10 06:12:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflownl6gp/series-workflownl6gp-convert-artifact-1198958831/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownl6gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_vcpu_alloc_hdbss","kvm_arm_vcpu_free_hdbss","kvm_flush_hdbss_buffer","kvm_handle_hdbss_fault","kvm_arm_enable_hdbss_global","kvm_arm_disable_hdbss_global","kvm_arm_hdbss_on_dirty_logging_change","kvm_arch_sync_dirty_log"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d38cd915-886e-41cd-b9c2-e092642c5396","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-10 06:12:42 +0000 UTC FinishedAt: 2026-07-10 06:54:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflownl6gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_vcpu_alloc_hdbss","kvm_arm_vcpu_free_hdbss","kvm_flush_hdbss_buffer","kvm_handle_hdbss_fault","kvm_arm_enable_hdbss_global","kvm_arm_disable_hdbss_global","kvm_arm_hdbss_on_dirty_logging_change","kvm_arch_sync_dirty_log"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d38cd915-886e-41cd-b9c2-e092642c5396","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-10 06:12:42 +0000 UTC FinishedAt: 2026-07-10 06:54:23 +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:*44501d43-7ed8-4f59-bd04-7bfadc768bd8,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-workflownl6gp/series-workflownl6gp-convert-artifact-1198958831/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": "d2e6d95d-2bdd-4c25-aee8-b71a2a6ac65f", "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-workflownl6gp/series-workflownl6gp-build-action-3212142005/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownl6gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_vcpu_alloc_hdbss","kvm_arm_vcpu_free_hdbss","kvm_flush_hdbss_buffer","kvm_handle_hdbss_fault","kvm_arm_enable_hdbss_global","kvm_arm_disable_hdbss_global","kvm_arm_hdbss_on_dirty_logging_change","kvm_arch_sync_dirty_log"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d38cd915-886e-41cd-b9c2-e092642c5396","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-10 06:12:42 +0000 UTC FinishedAt: 2026-07-10 06:53:47 +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:*44501d43-7ed8-4f59-bd04-7bfadc768bd8,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-workflownl6gp/series-workflownl6gp-convert-artifact-1198958831/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": "d2e6d95d-2bdd-4c25-aee8-b71a2a6ac65f", "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-workflownl6gp/series-workflownl6gp-build-action-3212142005/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownl6gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_vcpu_alloc_hdbss","kvm_arm_vcpu_free_hdbss","kvm_flush_hdbss_buffer","kvm_handle_hdbss_fault","kvm_arm_enable_hdbss_global","kvm_arm_disable_hdbss_global","kvm_arm_hdbss_on_dirty_logging_change","kvm_arch_sync_dirty_log"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d38cd915-886e-41cd-b9c2-e092642c5396","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-10 06:54:23 +0000 UTC FinishedAt: 2026-07-10 06:54:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflownl6gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_vcpu_alloc_hdbss","kvm_arm_vcpu_free_hdbss","kvm_flush_hdbss_buffer","kvm_handle_hdbss_fault","kvm_arm_enable_hdbss_global","kvm_arm_disable_hdbss_global","kvm_arm_hdbss_on_dirty_logging_change","kvm_arch_sync_dirty_log"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d38cd915-886e-41cd-b9c2-e092642c5396","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-10 06:54:23 +0000 UTC FinishedAt: 2026-07-10 06:54:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflownl6gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_vcpu_alloc_hdbss","kvm_arm_vcpu_free_hdbss","kvm_flush_hdbss_buffer","kvm_handle_hdbss_fault","kvm_arm_enable_hdbss_global","kvm_arm_disable_hdbss_global","kvm_arm_hdbss_on_dirty_logging_change","kvm_arch_sync_dirty_log"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d38cd915-886e-41cd-b9c2-e092642c5396","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-10 06:54:23 +0000 UTC FinishedAt: 2026-07-10 06:54:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflownl6gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_vcpu_alloc_hdbss","kvm_arm_vcpu_free_hdbss","kvm_flush_hdbss_buffer","kvm_handle_hdbss_fault","kvm_arm_enable_hdbss_global","kvm_arm_disable_hdbss_global","kvm_arm_hdbss_on_dirty_logging_change","kvm_arch_sync_dirty_log"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d38cd915-886e-41cd-b9c2-e092642c5396","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-10 06:54:23 +0000 UTC FinishedAt: 2026-07-10 06:54:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d38cd915-886e-41cd-b9c2-e092642c5396","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflownl6gp/series-workflownl6gp-convert-artifact-1155714110/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownl6gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_vcpu_alloc_hdbss","kvm_arm_vcpu_free_hdbss","kvm_flush_hdbss_buffer","kvm_handle_hdbss_fault","kvm_arm_enable_hdbss_global","kvm_arm_disable_hdbss_global","kvm_arm_hdbss_on_dirty_logging_change","kvm_arch_sync_dirty_log"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d38cd915-886e-41cd-b9c2-e092642c5396","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-10 06:54:33 +0000 UTC FinishedAt: 2026-07-10 06:56:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflownl6gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_vcpu_alloc_hdbss","kvm_arm_vcpu_free_hdbss","kvm_flush_hdbss_buffer","kvm_handle_hdbss_fault","kvm_arm_enable_hdbss_global","kvm_arm_disable_hdbss_global","kvm_arm_hdbss_on_dirty_logging_change","kvm_arch_sync_dirty_log"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d38cd915-886e-41cd-b9c2-e092642c5396","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-10 06:54:33 +0000 UTC FinishedAt: 2026-07-10 06:56:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d2e6d95d-2bdd-4c25-aee8-b71a2a6ac65f,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-workflownl6gp/series-workflownl6gp-build-action-3212142005/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-workflownl6gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_vcpu_alloc_hdbss","kvm_arm_vcpu_free_hdbss","kvm_flush_hdbss_buffer","kvm_handle_hdbss_fault","kvm_arm_enable_hdbss_global","kvm_arm_disable_hdbss_global","kvm_arm_hdbss_on_dirty_logging_change","kvm_arch_sync_dirty_log"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d38cd915-886e-41cd-b9c2-e092642c5396","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-10 06:56:51 +0000 UTC FinishedAt: 2026-07-10 06:56:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflownl6gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_vcpu_alloc_hdbss","kvm_arm_vcpu_free_hdbss","kvm_flush_hdbss_buffer","kvm_handle_hdbss_fault","kvm_arm_enable_hdbss_global","kvm_arm_disable_hdbss_global","kvm_arm_hdbss_on_dirty_logging_change","kvm_arch_sync_dirty_log"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d38cd915-886e-41cd-b9c2-e092642c5396","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-10 06:56:51 +0000 UTC FinishedAt: 2026-07-10 06:56:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflownl6gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_vcpu_alloc_hdbss","kvm_arm_vcpu_free_hdbss","kvm_flush_hdbss_buffer","kvm_handle_hdbss_fault","kvm_arm_enable_hdbss_global","kvm_arm_disable_hdbss_global","kvm_arm_hdbss_on_dirty_logging_change","kvm_arch_sync_dirty_log"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d38cd915-886e-41cd-b9c2-e092642c5396","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-10 06:56:51 +0000 UTC FinishedAt: 2026-07-10 07:27:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflownl6gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_vcpu_alloc_hdbss","kvm_arm_vcpu_free_hdbss","kvm_flush_hdbss_buffer","kvm_handle_hdbss_fault","kvm_arm_enable_hdbss_global","kvm_arm_disable_hdbss_global","kvm_arm_hdbss_on_dirty_logging_change","kvm_arch_sync_dirty_log"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d38cd915-886e-41cd-b9c2-e092642c5396","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-10 06:56:51 +0000 UTC FinishedAt: 2026-07-10 07:27:24 +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:*44501d43-7ed8-4f59-bd04-7bfadc768bd8,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-workflownl6gp/series-workflownl6gp-convert-artifact-1155714110/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": "a57aa171-f50a-44be-9918-f69f0a79bc76", "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-workflownl6gp/series-workflownl6gp-build-action-3208480146/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownl6gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_vcpu_alloc_hdbss","kvm_arm_vcpu_free_hdbss","kvm_flush_hdbss_buffer","kvm_handle_hdbss_fault","kvm_arm_enable_hdbss_global","kvm_arm_disable_hdbss_global","kvm_arm_hdbss_on_dirty_logging_change","kvm_arch_sync_dirty_log"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d38cd915-886e-41cd-b9c2-e092642c5396","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-10 06:56:51 +0000 UTC FinishedAt: 2026-07-10 07:27:14 +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:*44501d43-7ed8-4f59-bd04-7bfadc768bd8,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-workflownl6gp/series-workflownl6gp-convert-artifact-1155714110/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": "a57aa171-f50a-44be-9918-f69f0a79bc76", "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-workflownl6gp/series-workflownl6gp-build-action-3208480146/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownl6gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_vcpu_alloc_hdbss","kvm_arm_vcpu_free_hdbss","kvm_flush_hdbss_buffer","kvm_handle_hdbss_fault","kvm_arm_enable_hdbss_global","kvm_arm_disable_hdbss_global","kvm_arm_hdbss_on_dirty_logging_change","kvm_arch_sync_dirty_log"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d38cd915-886e-41cd-b9c2-e092642c5396","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-10 07:27:24 +0000 UTC FinishedAt: 2026-07-10 07:27:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflownl6gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_vcpu_alloc_hdbss","kvm_arm_vcpu_free_hdbss","kvm_flush_hdbss_buffer","kvm_handle_hdbss_fault","kvm_arm_enable_hdbss_global","kvm_arm_disable_hdbss_global","kvm_arm_hdbss_on_dirty_logging_change","kvm_arch_sync_dirty_log"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d38cd915-886e-41cd-b9c2-e092642c5396","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-10 07:27:24 +0000 UTC FinishedAt: 2026-07-10 07:27:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflownl6gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_vcpu_alloc_hdbss","kvm_arm_vcpu_free_hdbss","kvm_flush_hdbss_buffer","kvm_handle_hdbss_fault","kvm_arm_enable_hdbss_global","kvm_arm_disable_hdbss_global","kvm_arm_hdbss_on_dirty_logging_change","kvm_arch_sync_dirty_log"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d38cd915-886e-41cd-b9c2-e092642c5396","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-10 07:27:24 +0000 UTC FinishedAt: 2026-07-10 07:29:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflownl6gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_vcpu_alloc_hdbss","kvm_arm_vcpu_free_hdbss","kvm_flush_hdbss_buffer","kvm_handle_hdbss_fault","kvm_arm_enable_hdbss_global","kvm_arm_disable_hdbss_global","kvm_arm_hdbss_on_dirty_logging_change","kvm_arch_sync_dirty_log"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d38cd915-886e-41cd-b9c2-e092642c5396","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-10 07:27:24 +0000 UTC FinishedAt: 2026-07-10 07:29:31 +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:*a57aa171-f50a-44be-9918-f69f0a79bc76,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-workflownl6gp/series-workflownl6gp-build-action-3208480146/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-workflownl6gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_vcpu_alloc_hdbss","kvm_arm_vcpu_free_hdbss","kvm_flush_hdbss_buffer","kvm_handle_hdbss_fault","kvm_arm_enable_hdbss_global","kvm_arm_disable_hdbss_global","kvm_arm_hdbss_on_dirty_logging_change","kvm_arch_sync_dirty_log"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d38cd915-886e-41cd-b9c2-e092642c5396","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-10 07:29:40 +0000 UTC FinishedAt: 2026-07-10 07:33:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflownl6gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_vcpu_alloc_hdbss","kvm_arm_vcpu_free_hdbss","kvm_flush_hdbss_buffer","kvm_handle_hdbss_fault","kvm_arm_enable_hdbss_global","kvm_arm_disable_hdbss_global","kvm_arm_hdbss_on_dirty_logging_change","kvm_arch_sync_dirty_log"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d38cd915-886e-41cd-b9c2-e092642c5396","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-10 07:29:40 +0000 UTC FinishedAt: 2026-07-10 07:33:08 +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_vcpu_alloc_hdbss","kvm_arm_vcpu_free_hdbss","kvm_flush_hdbss_buffer","kvm_handle_hdbss_fault","kvm_arm_enable_hdbss_global","kvm_arm_disable_hdbss_global","kvm_arm_hdbss_on_dirty_logging_change","kvm_arch_sync_dirty_log"],"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:*d2e6d95d-2bdd-4c25-aee8-b71a2a6ac65f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a57aa171-f50a-44be-9918-f69f0a79bc76,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-workflownl6gp/series-workflownl6gp-build-action-3212142005/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-workflownl6gp/series-workflownl6gp-build-action-3208480146/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflownl6gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_vcpu_alloc_hdbss","kvm_arm_vcpu_free_hdbss","kvm_flush_hdbss_buffer","kvm_handle_hdbss_fault","kvm_arm_enable_hdbss_global","kvm_arm_disable_hdbss_global","kvm_arm_hdbss_on_dirty_logging_change","kvm_arch_sync_dirty_log"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d38cd915-886e-41cd-b9c2-e092642c5396","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-10 07:29:40 +0000 UTC FinishedAt: 2026-07-10 07:30:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflownl6gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_vcpu_alloc_hdbss","kvm_arm_vcpu_free_hdbss","kvm_flush_hdbss_buffer","kvm_handle_hdbss_fault","kvm_arm_enable_hdbss_global","kvm_arm_disable_hdbss_global","kvm_arm_hdbss_on_dirty_logging_change","kvm_arch_sync_dirty_log"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d38cd915-886e-41cd-b9c2-e092642c5396","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-10 07:29:40 +0000 UTC FinishedAt: 2026-07-10 07:29:50 +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_vcpu_alloc_hdbss","kvm_arm_vcpu_free_hdbss","kvm_flush_hdbss_buffer","kvm_handle_hdbss_fault","kvm_arm_enable_hdbss_global","kvm_arm_disable_hdbss_global","kvm_arm_hdbss_on_dirty_logging_change","kvm_arch_sync_dirty_log"],"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-workflownl6gp/series-workflownl6gp-convert-artifact-3501906755/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownl6gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_vcpu_alloc_hdbss","kvm_arm_vcpu_free_hdbss","kvm_flush_hdbss_buffer","kvm_handle_hdbss_fault","kvm_arm_enable_hdbss_global","kvm_arm_disable_hdbss_global","kvm_arm_hdbss_on_dirty_logging_change","kvm_arch_sync_dirty_log"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d38cd915-886e-41cd-b9c2-e092642c5396","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-10 07:29:40 +0000 UTC FinishedAt: 2026-07-10 07:29:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflownl6gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_vcpu_alloc_hdbss","kvm_arm_vcpu_free_hdbss","kvm_flush_hdbss_buffer","kvm_handle_hdbss_fault","kvm_arm_enable_hdbss_global","kvm_arm_disable_hdbss_global","kvm_arm_hdbss_on_dirty_logging_change","kvm_arch_sync_dirty_log"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d38cd915-886e-41cd-b9c2-e092642c5396","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-10 07:29:40 +0000 UTC FinishedAt: 2026-07-10 07:29:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflownl6gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_vcpu_alloc_hdbss","kvm_arm_vcpu_free_hdbss","kvm_flush_hdbss_buffer","kvm_handle_hdbss_fault","kvm_arm_enable_hdbss_global","kvm_arm_disable_hdbss_global","kvm_arm_hdbss_on_dirty_logging_change","kvm_arch_sync_dirty_log"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d38cd915-886e-41cd-b9c2-e092642c5396","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-10 07:29:41 +0000 UTC FinishedAt: 2026-07-10 07:29:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflownl6gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_vcpu_alloc_hdbss","kvm_arm_vcpu_free_hdbss","kvm_flush_hdbss_buffer","kvm_handle_hdbss_fault","kvm_arm_enable_hdbss_global","kvm_arm_disable_hdbss_global","kvm_arm_hdbss_on_dirty_logging_change","kvm_arch_sync_dirty_log"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d38cd915-886e-41cd-b9c2-e092642c5396","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-10 07:30:01 +0000 UTC FinishedAt: 2026-07-10 07:33:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflownl6gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_vcpu_alloc_hdbss","kvm_arm_vcpu_free_hdbss","kvm_flush_hdbss_buffer","kvm_handle_hdbss_fault","kvm_arm_enable_hdbss_global","kvm_arm_disable_hdbss_global","kvm_arm_hdbss_on_dirty_logging_change","kvm_arch_sync_dirty_log"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d38cd915-886e-41cd-b9c2-e092642c5396","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-10 07:30:01 +0000 UTC FinishedAt: 2026-07-10 07:32:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d2e6d95d-2bdd-4c25-aee8-b71a2a6ac65f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a57aa171-f50a-44be-9918-f69f0a79bc76,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-workflownl6gp/series-workflownl6gp-build-action-3212142005/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-workflownl6gp/series-workflownl6gp-build-action-3208480146/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-workflownl6gp/series-workflownl6gp-convert-artifact-3501906755/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,}