Name: series-workflowb6t4l Phase: Running StartedAt: 2026-07-02 17:56:35 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb6t4l[0] Phase: Running StartedAt: 2026-07-02 17:56:35 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb6t4l[0].run-triage Phase: Running StartedAt: 2026-07-02 17:56:35 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb6t4l[0].run-triage(0) Phase: Running StartedAt: 2026-07-02 17:56:35 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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": "4a50a141f05a8d1737661b19ee22ff8455b94409", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "4a50a141f05a8d1737661b19ee22ff8455b94409", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS_FS" ], "series_id": "7cc1a767-ada8-439e-ab8c-cd4c79141bf6" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ntfs_attr_list_lock", "ntfs_attr_list_unlock", "ntfs_attr_lock_search_ctx", "ntfs_attr_unlock_search_ctx", "ntfs_attr_get_search_ctx", "ntfs_attr_put_search_ctx", "ntfs_attr_map_whole_runlist", "ntfs_attr_update_mapping_pairs", "ntfs_inode_add_attrlist", "ntfs_inode_free_space" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGZzX2F0dHJfbGlzdF9sb2NrJiMzNDssCiAgICAmIzM0O250ZnNfYXR0cl9saXN0X3VubG9jayYjMzQ7LAogICAgJiMzNDtudGZzX2F0dHJfbG9ja19zZWFyY2hfY3R4JiMzNDssCiAgICAmIzM0O250ZnNfYXR0cl91bmxvY2tfc2VhcmNoX2N0eCYjMzQ7LAogICAgJiMzNDtudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgmIzM0OywKICAgICYjMzQ7bnRmc19hdHRyX3B1dF9zZWFyY2hfY3R4JiMzNDssCiAgICAmIzM0O250ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdCYjMzQ7LAogICAgJiMzNDtudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMmIzM0OywKICAgICYjMzQ7bnRmc19pbm9kZV9hZGRfYXR0cmxpc3QmIzM0OywKICAgICYjMzQ7bnRmc19pbm9kZV9mcmVlX3NwYWNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgcmVhZC13cml0ZSBzZW1hcGhvcmUgKGBhdHRyX2xpc3RfbG9ja2ApIHRvIGBzdHJ1Y3QgbnRmc19pbm9kZWAgYW5kIHVzZXMgaXQgdG8gc2VyaWFsaXplIGF0dHJpYnV0ZSBsaXN0IHBvaW50ZXIgdXBkYXRlcyB3aXRoIGxvb2t1cHMgYWNyb3NzIHRoZSBOVEZTIGRyaXZlci4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBsb2NraW5nIHNjaGVtZSBvZiB0aGUgTlRGUyBmaWxlc3lzdGVtLCBhZmZlY3RpbmcgbWFueSBjb3JlIG9wZXJhdGlvbnMgbGlrZSBhdHRyaWJ1dGUgbG9va3VwLCBtYXBwaW5nIHBhaXJzIHVwZGF0ZXMsIGFuZCBleHRlbnQgYXR0YWNobWVudC4gRnV6emluZyBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBuZXcgbG9ja2luZyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgZGVhZGxvY2tzIG9yIHJhY2UgY29uZGl0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDA3MzMwN2QxODdmOTI2ODFiMjE1ZTlhNDY0MjQzNzU3MTEwN2Q4YzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyIDE4OjE1OjQ4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL250ZnMvYW9wcy5jIGIvZnMvbnRmcy9hb3BzLmNcbmluZGV4IDFmYmY4MzJhZDE2NTQwLi45ODE3NzdmZjI0Mjc5NyAxMDA2NDRcbi0tLSBhL2ZzL250ZnMvYW9wcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9udGZzL2FvcHMuY1xuQEAgLTEzMSw2ICYjNDM7MTMxLDcgQEAgc3RhdGljIHNlY3Rvcl90IG50ZnNfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYmxvY2spXG4gXHRzNjQgbGNuO1xuIFx0dW5zaWduZWQgbG9uZyBibG9ja3NpemUsIGZsYWdzO1xuIFx0c3RydWN0IG50ZnNfaW5vZGUgKm5pID0gTlRGU19JKG1hcHBpbmctXHUwMDNlaG9zdCk7XG4mIzQzO1x0c3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTtcbiBcdHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sID0gbmktXHUwMDNldm9sO1xuIFx0dW5zaWduZWQgaW50IGRlbHRhO1xuIFx0dW5zaWduZWQgY2hhciBibG9ja3NpemVfYml0cztcbkBAIC0xNjAsMTAgJiM0MzsxNjEsMTIgQEAgc3RhdGljIHNlY3Rvcl90IG50ZnNfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYmxvY2spXG4gXHQgKi9cbiBcdGlmICh1bmxpa2VseShvZnMgXHUwMDNlPSBzaXplIHx8IChvZnMgJiM0MzsgYmxvY2tzaXplIFx1MDAzZSBzaXplIFx1MDAyNlx1MDAyNiBzaXplIFx1MDAzYyBpX3NpemUpKSlcbiBcdFx0Z290byBob2xlO1xuJiM0MztcdGF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdGRvd25fcmVhZChcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuIFx0bGNuID0gbnRmc19hdHRyX3Zjbl90b19sY25fbm9sb2NrKG5pLCBudGZzX2J5dGVzX3RvX2NsdXN0ZXIodm9sLCBvZnMpLFxuIFx0XHRcdGZhbHNlKTtcbiBcdHVwX3JlYWQoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbiYjNDM7XHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4gXHRpZiAodW5saWtlbHkobGNuIFx1MDAzYyBMQ05fSE9MRSkpIHtcbiBcdFx0LypcbiBcdFx0ICogU3RlcCBkb3duIHRvIGFuIGludGVnZXIgdG8gYXZvaWQgZ2NjIGRvaW5nIGEgbG9uZyBsb25nXG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9hdHRyaWIuYyBiL2ZzL250ZnMvYXR0cmliLmNcbmluZGV4IGRkODgyODA5ODUxMTgzLi45MDk2YTU0ODY1MzU1OSAxMDA2NDRcbi0tLSBhL2ZzL250ZnMvYXR0cmliLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL250ZnMvYXR0cmliLmNcbkBAIC0xMDgsNyAmIzQzOzEwOCw3IEBAIGludCBudGZzX21hcF9ydW5saXN0X25vbG9jayhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCB2Y24sIHN0cnVjdCBudGZzX2F0dHJfc2VhXG4gXHRcdG0gPSBtYXBfbWZ0X3JlY29yZChiYXNlX25pKTtcbiBcdFx0aWYgKElTX0VSUihtKSlcbiBcdFx0XHRyZXR1cm4gUFRSX0VSUihtKTtcbi1cdFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KGJhc2VfbmksIG0pO1xuJiM0MztcdFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KGJhc2VfbmksIG0sIE5URlNfQVRUUl9DVFhfTE9DS19OT05FKTtcbiBcdFx0aWYgKHVubGlrZWx5KCFjdHgpKSB7XG4gXHRcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0XHRnb3RvIGVycl9vdXQ7XG5AQCAtMzAwLDE0ICYjNDM7MzAwLDE3IEBAIGludCBudGZzX21hcF9ydW5saXN0X25vbG9jayhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCB2Y24sIHN0cnVjdCBudGZzX2F0dHJfc2VhXG4gICovXG4gaW50IG50ZnNfbWFwX3J1bmxpc3Qoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgdmNuKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pO1xuIFx0aW50IGVyciA9IDA7XG4gXG4mIzQzO1x0YXR0cl9sb2NrX25pID0gbnRmc19hdHRyX2xpc3RfbG9jayhuaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0ZG93bl93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuIFx0LyogTWFrZSBzdXJlIHNvbWVvbmUgZWxzZSBkaWRuJiMzOTt0IGRvIHRoZSB3b3JrIHdoaWxlIHdlIHdlcmUgc2xlZXBpbmcuICovXG4gXHRpZiAobGlrZWx5KG50ZnNfcmxfdmNuX3RvX2xjbihuaS1cdTAwM2VydW5saXN0LnJsLCB2Y24pIFx1MDAzYz1cbiBcdFx0XHRMQ05fUkxfTk9UX01BUFBFRCkpXG4gXHRcdGVyciA9IG50ZnNfbWFwX3J1bmxpc3Rfbm9sb2NrKG5pLCB2Y24sIE5VTEwpO1xuIFx0dXBfd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbiYjNDM7XHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0zMTgsNyAmIzQzOzMyMSw3IEBAIHN0cnVjdCBydW5saXN0X2VsZW1lbnQgKm50ZnNfYXR0cl92Y25fdG9fcmwoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgdmNuLCBzNjRcbiBcdGJvb2wgaXNfcmV0cnkgPSBmYWxzZTtcbiBcbiBcdGlmICghcmwpIHtcbi1cdFx0ZXJyID0gbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0KG5pKTtcbiYjNDM7XHRcdGVyciA9IG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdF9ub2xvY2sobmkpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuIFx0XHRybCA9IG5pLVx1MDAzZXJ1bmxpc3Qucmw7XG5AQCAtMTU3OSw2ICYjNDM7MTU4Miw5MyBAQCBpbnQgbnRmc19hdHRyX2xvb2t1cChjb25zdCBfX2xlMzIgdHlwZSwgY29uc3QgX19sZTE2ICpuYW1lLFxuIFx0XHRcdHZhbCwgdmFsX2xlbiwgY3R4KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbnRmc19pbm9kZSAqbnRmc19hdHRyX3NlYXJjaF9sb2NrX2lub2RlKHN0cnVjdCBudGZzX2lub2RlICpuaSlcbiYjNDM7e1xuJiM0MztcdGlmICghbmkpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRpZiAoTklub0F0dHIobmkpKSB7XG4mIzQzO1x0XHRpZiAobmktXHUwMDNldHlwZSA9PSBBVF9BVFRSSUJVVEVfTElTVClcbiYjNDM7XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0XHRyZXR1cm4gbmktXHUwMDNlZXh0LmJhc2VfbnRmc19pbm87XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBuaTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbnRmc19hdHRyX2xpc3RfYXNzZXJ0X2hlbGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG50ZnNfaW5vZGUgKmxvY2tfbmkgPSBudGZzX2F0dHJfc2VhcmNoX2xvY2tfaW5vZGUobmkpO1xuJiM0MztcbiYjNDM7XHRpZiAobG9ja19uaSlcbiYjNDM7XHRcdHJ3c2VtX2Fzc2VydF9oZWxkKFx1MDAyNmxvY2tfbmktXHUwMDNlYXR0cl9saXN0X2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdHJ1Y3QgbnRmc19pbm9kZSAqbnRmc19hdHRyX2xpc3RfbG9jayhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXG4mIzQzO1x0XHRcdFx0ICAgICAgIGVudW0gbnRmc19hdHRyX3NlYXJjaF9jdHhfbG9ja19tb2RlIGxvY2tfbW9kZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBudGZzX2lub2RlICpsb2NrX25pO1xuJiM0MztcbiYjNDM7XHRpZiAobG9ja19tb2RlID09IE5URlNfQVRUUl9DVFhfTE9DS19OT05FKSB7XG4mIzQzO1x0XHRudGZzX2F0dHJfbGlzdF9hc3NlcnRfaGVsZChuaSk7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGxvY2tfbmkgPSBudGZzX2F0dHJfc2VhcmNoX2xvY2tfaW5vZGUobmkpO1xuJiM0MztcdGlmICghbG9ja19uaSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRpZiAobG9ja19tb2RlID09IE5URlNfQVRUUl9DVFhfTE9DS19XUklURSlcbiYjNDM7XHRcdGRvd25fd3JpdGUoXHUwMDI2bG9ja19uaS1cdTAwM2VhdHRyX2xpc3RfbG9jayk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ZG93bl9yZWFkKFx1MDAyNmxvY2tfbmktXHUwMDNlYXR0cl9saXN0X2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbG9ja19uaTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBudGZzX2F0dHJfbGlzdF91bmxvY2soc3RydWN0IG50ZnNfaW5vZGUgKmxvY2tfbmksXG4mIzQzO1x0XHRcdCAgIGVudW0gbnRmc19hdHRyX3NlYXJjaF9jdHhfbG9ja19tb2RlIGxvY2tfbW9kZSlcbiYjNDM7e1xuJiM0MztcdGlmICghbG9ja19uaSB8fCBsb2NrX21vZGUgPT0gTlRGU19BVFRSX0NUWF9MT0NLX05PTkUpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmIChsb2NrX21vZGUgPT0gTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKVxuJiM0MztcdFx0dXBfd3JpdGUoXHUwMDI2bG9ja19uaS1cdTAwM2VhdHRyX2xpc3RfbG9jayk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0dXBfcmVhZChcdTAwMjZsb2NrX25pLVx1MDAzZWF0dHJfbGlzdF9sb2NrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBudGZzX2F0dHJfbG9ja19zZWFyY2hfY3R4KHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4LFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxuJiM0MztcdFx0XHQgICAgICAgZW51bSBudGZzX2F0dHJfc2VhcmNoX2N0eF9sb2NrX21vZGUgbG9ja19tb2RlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG50ZnNfaW5vZGUgKmxvY2tfbmk7XG4mIzQzO1xuJiM0MztcdGN0eC1cdTAwM2VhdHRyX2xpc3RfbG9ja19uaSA9IE5VTEw7XG4mIzQzO1x0Y3R4LVx1MDAzZWF0dHJfbGlzdF9sb2NrX21vZGUgPSBOVEZTX0FUVFJfQ1RYX0xPQ0tfTk9ORTtcbiYjNDM7XG4mIzQzO1x0aWYgKGxvY2tfbW9kZSA9PSBOVEZTX0FUVFJfQ1RYX0xPQ0tfTk9ORSkge1xuJiM0MztcdFx0bnRmc19hdHRyX2xpc3RfYXNzZXJ0X2hlbGQobmkpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIGxvY2tfbW9kZSk7XG4mIzQzO1x0aWYgKCFsb2NrX25pKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRjdHgtXHUwMDNlYXR0cl9saXN0X2xvY2tfbmkgPSBsb2NrX25pO1xuJiM0MztcdGN0eC1cdTAwM2VhdHRyX2xpc3RfbG9ja19tb2RlID0gbG9ja19tb2RlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIG50ZnNfYXR0cl91bmxvY2tfc2VhcmNoX2N0eChzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eClcbiYjNDM7e1xuJiM0MztcdGlmICghY3R4LVx1MDAzZWF0dHJfbGlzdF9sb2NrX25pKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRudGZzX2F0dHJfbGlzdF91bmxvY2soY3R4LVx1MDAzZWF0dHJfbGlzdF9sb2NrX25pLCBjdHgtXHUwMDNlYXR0cl9saXN0X2xvY2tfbW9kZSk7XG4mIzQzO1xuJiM0MztcdGN0eC1cdTAwM2VhdHRyX2xpc3RfbG9ja19uaSA9IE5VTEw7XG4mIzQzO1x0Y3R4LVx1MDAzZWF0dHJfbGlzdF9sb2NrX21vZGUgPSBOVEZTX0FUVFJfQ1RYX0xPQ0tfTk9ORTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBudGZzX2F0dHJfaW5pdF9zZWFyY2hfY3R4IC0gaW5pdGlhbGl6ZSBhbiBhdHRyaWJ1dGUgc2VhcmNoIGNvbnRleHRcbiAgKiBAY3R4OiAgICAgICAgYXR0cmlidXRlIHNlYXJjaCBjb250ZXh0IHRvIGluaXRpYWxpemVcbkBAIC0xNjA5LDYgJiM0MzsxNjk5LDggQEAgc3RhdGljIGJvb2wgbnRmc19hdHRyX2luaXRfc2VhcmNoX2N0eChzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eCxcbiBcdGN0eC1cdTAwM2ViYXNlX21yZWMgPSBOVUxMO1xuIFx0Y3R4LVx1MDAzZWJhc2VfYXR0ciA9IE5VTEw7XG4gXHRjdHgtXHUwMDNlbWFwcGVkX2Jhc2VfbXJlYyA9IGZhbHNlO1xuJiM0MztcdGN0eC1cdTAwM2VhdHRyX2xpc3RfbG9ja19uaSA9IE5VTEw7XG4mIzQzO1x0Y3R4LVx1MDAzZWF0dHJfbGlzdF9sb2NrX21vZGUgPSBOVEZTX0FUVFJfQ1RYX0xPQ0tfTk9ORTtcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbkBAIC0xNjI0LDYgJiM0MzsxNzE2LDkgQEAgc3RhdGljIGJvb2wgbnRmc19hdHRyX2luaXRfc2VhcmNoX2N0eChzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eCxcbiAgKi9cbiB2b2lkIG50ZnNfYXR0cl9yZWluaXRfc2VhcmNoX2N0eChzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eClcbiB7XG4mIzQzO1x0c3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbGlzdF9sb2NrX25pID0gY3R4LVx1MDAzZWF0dHJfbGlzdF9sb2NrX25pO1xuJiM0MztcdGVudW0gbnRmc19hdHRyX3NlYXJjaF9jdHhfbG9ja19tb2RlIGF0dHJfbGlzdF9sb2NrX21vZGUgPVxuJiM0MztcdFx0Y3R4LVx1MDAzZWF0dHJfbGlzdF9sb2NrX21vZGU7XG4gXHRib29sIG1hcHBlZF9tcmVjO1xuIFxuIFx0aWYgKGxpa2VseSghY3R4LVx1MDAzZWJhc2VfbnRmc19pbm8pKSB7XG5AQCAtMTY0NSw2ICYjNDM7MTc0MCw4IEBAIHZvaWQgbnRmc19hdHRyX3JlaW5pdF9zZWFyY2hfY3R4KHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4KVxuIFx0bWFwcGVkX21yZWMgPSBjdHgtXHUwMDNlbWFwcGVkX2Jhc2VfbXJlYztcbiBcdG50ZnNfYXR0cl9pbml0X3NlYXJjaF9jdHgoY3R4LCBjdHgtXHUwMDNlYmFzZV9udGZzX2lubywgY3R4LVx1MDAzZWJhc2VfbXJlYyk7XG4gXHRjdHgtXHUwMDNlbWFwcGVkX21yZWMgPSBtYXBwZWRfbXJlYztcbiYjNDM7XHRjdHgtXHUwMDNlYXR0cl9saXN0X2xvY2tfbmkgPSBhdHRyX2xpc3RfbG9ja19uaTtcbiYjNDM7XHRjdHgtXHUwMDNlYXR0cl9saXN0X2xvY2tfbW9kZSA9IGF0dHJfbGlzdF9sb2NrX21vZGU7XG4gfVxuIFxuIC8qXG5AQCAtMTY1Niw3ICYjNDM7MTc1Myw4IEBAIHZvaWQgbnRmc19hdHRyX3JlaW5pdF9zZWFyY2hfY3R4KHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4KVxuICAqIGFuZCByZXR1cm4gaXQuIFJldHVybiBOVUxMIGlmIGFsbG9jYXRpb24gZmFpbGVkLlxuICAqL1xuIHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KHN0cnVjdCBudGZzX2lub2RlICpuaSxcbi1cdFx0c3RydWN0IG1mdF9yZWNvcmQgKm1yZWMpXG4mIzQzO1x0XHRzdHJ1Y3QgbWZ0X3JlY29yZCAqbXJlYyxcbiYjNDM7XHRcdGVudW0gbnRmc19hdHRyX3NlYXJjaF9jdHhfbG9ja19tb2RlIGxvY2tfbW9kZSlcbiB7XG4gXHRzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eDtcbiBcdGJvb2wgaW5pdDtcbkBAIC0xNjY3LDYgJiM0MzsxNzY1LDggQEAgc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxuIFx0XHRpZiAoaW5pdCA9PSBmYWxzZSkge1xuIFx0XHRcdGttZW1fY2FjaGVfZnJlZShudGZzX2F0dHJfY3R4X2NhY2hlLCBjdHgpO1xuIFx0XHRcdGN0eCA9IE5VTEw7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRudGZzX2F0dHJfbG9ja19zZWFyY2hfY3R4KGN0eCwgbmksIGxvY2tfbW9kZSk7XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC0xNjgyLDYgJiM0MzsxNzgyLDggQEAgc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxuICAqL1xuIHZvaWQgbnRmc19hdHRyX3B1dF9zZWFyY2hfY3R4KHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4KVxuIHtcbiYjNDM7XHRudGZzX2F0dHJfdW5sb2NrX3NlYXJjaF9jdHgoY3R4KTtcbiYjNDM7XG4gXHRpZiAoY3R4LVx1MDAzZW1hcHBlZF9tcmVjKVxuIFx0XHR1bm1hcF9tZnRfcmVjb3JkKGN0eC1cdTAwM2VudGZzX2lubyk7XG4gXG5AQCAtMTkwNSw3ICYjNDM7MjAwNyw4IEBAIGludCBudGZzX3Jlc2lkZW50X2F0dHJfdmFsdWVfcmVzaXplKHN0cnVjdCBtZnRfcmVjb3JkICptLCBzdHJ1Y3QgYXR0cl9yZWNvcmQgKmEsXG4gICogaW5vZGUgaV9zaXplIGlzIHRoYXQgdGhpcyBpcyBub3QgbmVjZXNzYXJpbHkgdXB0b2RhdGUuICBUaGlzIGhhcHBlbnMgd2hlblxuICAqIG50ZnNfYXR0cl9tYWtlX25vbl9yZXNpZGVudCgpIGlzIGNhbGxlZCBpbiB0aGUgLVx1MDAzZXRydW5jYXRlIGNhbGwgcGF0aChzKS5cbiAgKi9cbi1pbnQgbnRmc19hdHRyX21ha2Vfbm9uX3Jlc2lkZW50KHN0cnVjdCBudGZzX2lub2RlICpuaSwgY29uc3QgdTMyIGRhdGFfc2l6ZSlcbiYjNDM7c3RhdGljIGludCBfX250ZnNfYXR0cl9tYWtlX25vbl9yZXNpZGVudChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHUzMiBkYXRhX3NpemUsXG4mIzQzO1x0XHRcdFx0XHQgZW51bSBudGZzX2F0dHJfc2VhcmNoX2N0eF9sb2NrX21vZGUgbG9ja19tb2RlKVxuIHtcbiBcdHM2NCBuZXdfc2l6ZTtcbiBcdHN0cnVjdCBpbm9kZSAqdmkgPSBWRlNfSShuaSk7XG5AQCAtMTk1MSw3ICYjNDM7MjA1NCw3IEBAIGludCBudGZzX2F0dHJfbWFrZV9ub25fcmVzaWRlbnQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBjb25zdCB1MzIgZGF0YV9zaXplKVxuIFx0XHRjdHggPSBOVUxMO1xuIFx0XHRnb3RvIGVycl9vdXQ7XG4gXHR9XG4tXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoYmFzZV9uaSwgbSk7XG4mIzQzO1x0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KGJhc2VfbmksIG0sIGxvY2tfbW9kZSk7XG4gXHRpZiAodW5saWtlbHkoIWN0eCkpIHtcbiBcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0Z290byBlcnJfb3V0O1xuQEAgLTIyMjUsNiAmIzQzOzIzMjgsMTIgQEAgaW50IG50ZnNfYXR0cl9tYWtlX25vbl9yZXNpZGVudChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGNvbnN0IHUzMiBkYXRhX3NpemUpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjNDM7aW50IG50ZnNfYXR0cl9tYWtlX25vbl9yZXNpZGVudChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGNvbnN0IHUzMiBkYXRhX3NpemUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX19udGZzX2F0dHJfbWFrZV9ub25fcmVzaWRlbnQobmksIGRhdGFfc2l6ZSxcbiYjNDM7XHRcdFx0TlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogbnRmc19hdHRyX3NldCAtIGZpbGwgKGEgcGFydCBvZikgYW4gYXR0cmlidXRlIHdpdGggYSBieXRlXG4gICogQG5pOlx0XHRudGZzIGlub2RlIGRlc2NyaWJpbmcgdGhlIGF0dHJpYnV0ZSB0byBmaWxsXG5AQCAtMjI5MCw3ICYjNDM7MjM5OSw3IEBAIGludCBudGZzX2F0dHJfc2V0X2luaXRpYWxpemVkX3NpemUoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBsb2ZmX3QgbmV3X3NpemUpXG4gXHRpZiAoIU5Jbm9Ob25SZXNpZGVudChuaSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTtcbiYjNDM7XHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdGlmICghY3R4KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0yMzkwLDcgJiM0MzsyNDk5LDcgQEAgaW50IG50ZnNfcmVzaWRlbnRfYXR0cl9yZWNvcmRfYWRkKHN0cnVjdCBudGZzX2lub2RlICpuaSwgX19sZTMyIHR5cGUsXG4gXHR9XG4gXG4gXHQvKiBMb2NhdGUgcGxhY2Ugd2hlcmUgcmVjb3JkIHNob3VsZCBiZS4gKi9cbi1cdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCk7XG4mIzQzO1x0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfTk9ORSk7XG4gXHRpZiAoIWN0eCkge1xuIFx0XHRudGZzX2Vycm9yKG5pLVx1MDAzZXZvbC1cdTAwM2VzYiwgXCYjMzQ7JXM6IEZhaWxlZCB0byBnZXQgc2VhcmNoIGNvbnRleHRcJiMzNDssXG4gXHRcdFx0XHRfX2Z1bmNfXyk7XG5AQCAtMjUxMiw3ICYjNDM7MjYyMSw3IEBAIHN0YXRpYyBpbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9yZWNvcmRfYWRkKHN0cnVjdCBudGZzX2lub2RlICpuaSwgX19sZTMyIHR5cGUsXG4gXHR9XG4gXG4gXHQvKiBMb2NhdGUgcGxhY2Ugd2hlcmUgcmVjb3JkIHNob3VsZCBiZS4gKi9cbi1cdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCk7XG4mIzQzO1x0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfTk9ORSk7XG4gXHRpZiAoIWN0eCkge1xuIFx0XHRwcl9lcnIoXCYjMzQ7JXM6IEZhaWxlZCB0byBnZXQgc2VhcmNoIGNvbnRleHRcXG5cJiMzNDssIF9fZnVuY19fKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtMjYyMiw2ICYjNDM7MjczMSw3IEBAIHN0YXRpYyBpbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9yZWNvcmRfYWRkKHN0cnVjdCBudGZzX2lub2RlICpuaSwgX19sZTMyIHR5cGUsXG4gaW50IG50ZnNfYXR0cl9yZWNvcmRfcm0oc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpXG4ge1xuIFx0c3RydWN0IG50ZnNfaW5vZGUgKmJhc2VfbmksICpuaTtcbiYjNDM7XHR1OCAqb2xkX2FsID0gTlVMTDtcbiBcdF9fbGUzMiB0eXBlO1xuIFx0aW50IGVycjtcbiBcbkBAIC0yNjYwLDkgJiM0MzsyNzcwLDExIEBAIGludCBudGZzX2F0dHJfcmVjb3JkX3JtKHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4KVxuIFx0LyogUG9zdCAkQVRUUklCVVRFX0xJU1QgZGVsZXRlIHNldHVwLiAqL1xuIFx0aWYgKHR5cGUgPT0gQVRfQVRUUklCVVRFX0xJU1QpIHtcbiBcdFx0aWYgKE5Jbm9BdHRyTGlzdChiYXNlX25pKSBcdTAwMjZcdTAwMjYgYmFzZV9uaS1cdTAwM2VhdHRyX2xpc3QpXG4tXHRcdFx0a3ZmcmVlKGJhc2VfbmktXHUwMDNlYXR0cl9saXN0KTtcbiYjNDM7XHRcdFx0b2xkX2FsID0gYmFzZV9uaS1cdTAwM2VhdHRyX2xpc3Q7XG4gXHRcdGJhc2VfbmktXHUwMDNlYXR0cl9saXN0ID0gTlVMTDtcbiYjNDM7XHRcdGJhc2VfbmktXHUwMDNlYXR0cl9saXN0X3NpemUgPSAwO1xuIFx0XHROSW5vQ2xlYXJBdHRyTGlzdChiYXNlX25pKTtcbiYjNDM7XHRcdGt2ZnJlZShvbGRfYWwpO1xuIFx0fVxuIFxuIFx0LyogRnJlZSBNRlQgcmVjb3JkLCBpZiBpdCBkb2VzbiYjMzk7dCBjb250YWluIGF0dHJpYnV0ZXMuICovXG5AQCAtMzA4Nyw3ICYjNDM7MzE5OSw3IEBAIGludCBudGZzX2F0dHJfb3BlbihzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGNvbnN0IF9fbGUzMiB0eXBlLFxuIFx0XHRuZXduYW1lID0gbmFtZTtcbiBcdH1cbiBcbi1cdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChiYXNlX25pLCBOVUxMKTtcbiYjNDM7XHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoYmFzZV9uaSwgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0aWYgKCFjdHgpIHtcbiBcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0cHJfZXJyKFwmIzM0OyVzOiBGYWlsZWQgdG8gZ2V0IHNlYXJjaCBjb250ZXh0XFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG5AQCAtMzIzOSw3ICYjNDM7MzM1MSw3IEBAIHZvaWQgbnRmc19hdHRyX2Nsb3NlKHN0cnVjdCBudGZzX2lub2RlICpuaSlcbiAgKiB3aWxsIG1hcCB0aGUgcnVubGlzdCBmcmFnbWVudHMgZnJvbSBlYWNoIG9mIHRoZSBleHRlbnRzIHRodXMgZ2l2aW5nIGFjY2Vzc1xuICAqIHRvIHRoZSBlbnRpcmV0eSBvZiB0aGUgZGlzayBhbGxvY2F0aW9uIG9mIGFuIGF0dHJpYnV0ZS5cbiAgKi9cbi1pbnQgbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0KHN0cnVjdCBudGZzX2lub2RlICpuaSlcbiYjNDM7aW50IG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdF9ub2xvY2soc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxuIHtcbiBcdHM2NCBuZXh0X3ZjbiwgbGFzdF92Y24sIGhpZ2hlc3RfdmNuO1xuIFx0c3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHg7XG5AQCAtMzI2Miw3ICYjNDM7MzM3NCw3IEBAIGludCBudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3Qoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxuIFx0ZWxzZVxuIFx0XHRiYXNlX25pID0gbmk7XG4gXG4tXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoYmFzZV9uaSwgTlVMTCk7XG4mIzQzO1x0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KGJhc2VfbmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19OT05FKTtcbiBcdGlmICghY3R4KSB7XG4gXHRcdG50ZnNfZXJyb3Ioc2IsIFwmIzM0OyVzOiBGYWlsZWQgdG8gZ2V0IHNlYXJjaCBjb250ZXh0XCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTMzNTQsNiAmIzQzOzM0NjYsMTggQEAgaW50IG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdChzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjNDM7aW50IG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdChzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiYjNDM7XHRlcnIgPSBudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3Rfbm9sb2NrKG5pKTtcbiYjNDM7XHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBudGZzX2F0dHJfcmVjb3JkX21vdmVfdG8gLSBtb3ZlIGF0dHJpYnV0ZSByZWNvcmQgdG8gdGFyZ2V0IGlub2RlXG4gICogQGN0eDpcdGF0dHJpYnV0ZSBzZWFyY2ggY29udGV4dCBkZXNjcmliaW5nIHRoZSBhdHRyaWJ1dGUgcmVjb3JkXG5AQCAtMzM4OCw3ICYjNDM7MzUxMiw3IEBAIGludCBudGZzX2F0dHJfcmVjb3JkX21vdmVfdG8oc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgsIHN0cnVjdCBudGZzX2lub2RlXG4gXG4gXHQvKiBGaW5kIHBsYWNlIGluIE1GVCByZWNvcmQgd2hlcmUgYXR0cmlidXRlIHdpbGwgYmUgbW92ZWQuICovXG4gXHRhID0gY3R4LVx1MDAzZWF0dHI7XG4tXHRuY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTtcbiYjNDM7XHRuY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfTk9ORSk7XG4gXHRpZiAoIW5jdHgpIHtcbiBcdFx0bnRmc19lcnJvcihzYiwgXCYjMzQ7JXM6IEZhaWxlZCB0byBnZXQgc2VhcmNoIGNvbnRleHRcJiMzNDssIF9fZnVuY19fKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtMzQ3NSw3ICYjNDM7MzU5OSw3IEBAIGludCBudGZzX2F0dHJfcmVjb3JkX21vdmVfYXdheShzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eCwgaW50IGV4dHJhKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbi1cdGVyciA9IG50ZnNfaW5vZGVfYXR0YWNoX2FsbF9leHRlbnRzKGN0eC1cdTAwM2VudGZzX2lubyk7XG4mIzQzO1x0ZXJyID0gbnRmc19pbm9kZV9hdHRhY2hfYWxsX2V4dGVudHNfbm9sb2NrKGN0eC1cdTAwM2VudGZzX2lubyk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdG50ZnNfZXJyb3Ioc2IsIFwmIzM0O0NvdWxkbiYjMzk7dCBhdHRhY2ggZXh0ZW50cywgaW5vZGU9JWxsdVwmIzM0OyxcbiBcdFx0XHQodW5zaWduZWQgbG9uZyBsb25nKWJhc2VfbmktXHUwMDNlbWZ0X25vKTtcbkBAIC0zNTc0LDkgJiM0MzszNjk4LDggQEAgc3RhdGljIGludCBudGZzX2F0dHJfdXBkYXRlX21ldGEoc3RydWN0IGF0dHJfcmVjb3JkICphLCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXG4gXHRcdGlmICgobGUzMl90b19jcHUoYS1cdTAwM2VsZW5ndGgpIC1cbiBcdFx0ICAgICBsZTE2X3RvX2NwdShhLVx1MDAzZWRhdGEubm9uX3Jlc2lkZW50Lm1hcHBpbmdfcGFpcnNfb2Zmc2V0KSA9PSA4KSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICEobGUzMl90b19jcHUobS1cdTAwM2VieXRlc19hbGxvY2F0ZWQpIC0gbGUzMl90b19jcHUobS1cdTAwM2VieXRlc19pbl91c2UpKSkge1xuLVxuIFx0XHRcdGlmICghTklub0F0dHJMaXN0KGJhc2VfbmkpKSB7XG4tXHRcdFx0XHRlcnIgPSBudGZzX2lub2RlX2FkZF9hdHRybGlzdChiYXNlX25pKTtcbiYjNDM7XHRcdFx0XHRlcnIgPSBudGZzX2lub2RlX2FkZF9hdHRybGlzdF9ub2xvY2soYmFzZV9uaSk7XG4gXHRcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0XHRnb3RvIG91dDtcbiBcdFx0XHRcdGVyciA9IC1FQUdBSU47XG5AQCAtMzY3Nyw3ICYjNDM7MzgwMCw3IEBAIHN0YXRpYyBpbnQgbnRmc19hdHRyX3VwZGF0ZV9tZXRhKHN0cnVjdCBhdHRyX3JlY29yZCAqYSwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxuICAqIGNhbGwgdG8gdGhpcyBmdW5jdGlvbi4gVmljZS12ZXJzYSBAbmEtXHUwMDNlY29tcHJlc3NlZF9zaXplIHdpbGwgYmUgY2FsY3VsYXRlZCBhbmRcbiAgKiBzZXQgdG8gY29ycmVjdCB2YWx1ZSBkdXJpbmcgdGhpcyBmdW5jdGlvbi5cbiAgKi9cbi1pbnQgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IGZyb21fdmNuKVxuJiM0MztzdGF0aWMgaW50IF9fbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IGZyb21fdmNuKVxuIHtcbiBcdHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4O1xuIFx0c3RydWN0IG50ZnNfaW5vZGUgKmJhc2Vfbmk7XG5AQCAtMzcwOSw3ICYjNDM7MzgzMiw3IEBAIGludCBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgZnJvbV92Y24pXG4gXHRlbHNlXG4gXHRcdGJhc2VfbmkgPSBuaTtcbiBcbi1cdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChiYXNlX25pLCBOVUxMKTtcbiYjNDM7XHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoYmFzZV9uaSwgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX05PTkUpO1xuIFx0aWYgKCFjdHgpIHtcbiBcdFx0bnRmc19lcnJvcihzYiwgXCYjMzQ7JXM6IEZhaWxlZCB0byBnZXQgc2VhcmNoIGNvbnRleHRcJiMzNDssIF9fZnVuY19fKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtMzgwOSw4ICYjNDM7MzkzMiw4IEBAIGludCBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgZnJvbV92Y24pXG4gXHRcdFx0ICovXG4gXHRcdFx0aWYgKG5pLVx1MDAzZXR5cGUgPT0gQVRfQVRUUklCVVRFX0xJU1QpIHtcbiBcdFx0XHRcdG50ZnNfYXR0cl9wdXRfc2VhcmNoX2N0eChjdHgpO1xuLVx0XHRcdFx0aWYgKG50ZnNfaW5vZGVfZnJlZV9zcGFjZShiYXNlX25pLCBtcF9zaXplIC1cbi1cdFx0XHRcdFx0XHRcdGN1cl9tYXhfbXBfc2l6ZSkpIHtcbiYjNDM7XHRcdFx0XHRpZiAobnRmc19pbm9kZV9mcmVlX3NwYWNlX25vbG9jayhiYXNlX25pLCBtcF9zaXplIC1cbiYjNDM7XHRcdFx0XHRcdFx0XHRcdGN1cl9tYXhfbXBfc2l6ZSkpIHtcbiBcdFx0XHRcdFx0bnRmc19kZWJ1ZyhcJiMzNDtBdHRyaWJ1dGUgbGlzdCBpcyB0b28gYmlnLiBEZWZyYWdtZW50IHRoZSB2b2x1bWVcXG5cJiMzNDspO1xuIFx0XHRcdFx0XHRyZXR1cm4gLUVOT1NQQztcbiBcdFx0XHRcdH1cbkBAIC0zODIyLDcgJiM0MzszOTQ1LDcgQEAgaW50IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBmcm9tX3ZjbilcbiBcdFx0XHQvKiBBZGQgYXR0cmlidXRlIGxpc3QgaWYgaXQgaXNuJiMzOTt0IHByZXNlbnQsIGFuZCByZXRyeS4gKi9cbiBcdFx0XHRpZiAoIU5Jbm9BdHRyTGlzdChiYXNlX25pKSkge1xuIFx0XHRcdFx0bnRmc19hdHRyX3B1dF9zZWFyY2hfY3R4KGN0eCk7XG4tXHRcdFx0XHRpZiAobnRmc19pbm9kZV9hZGRfYXR0cmxpc3QoYmFzZV9uaSkpIHtcbiYjNDM7XHRcdFx0XHRpZiAobnRmc19pbm9kZV9hZGRfYXR0cmxpc3Rfbm9sb2NrKGJhc2VfbmkpKSB7XG4gXHRcdFx0XHRcdG50ZnNfZXJyb3Ioc2IsIFwmIzM0O0NhbiBub3QgYWRkIGF0dHJsaXN0XCYjMzQ7KTtcbiBcdFx0XHRcdFx0cmV0dXJuIC1FSU87XG4gXHRcdFx0XHR9XG5AQCAtNDAyNiw2ICYjNDM7NDE0OSwyMyBAQCBpbnQgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IGZyb21fdmNuKVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4mIzQzO2ludCBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgZnJvbV92Y24pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4mIzQzO1x0ZXJyID0gX19udGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIGZyb21fdmNuKTtcbiYjNDM7XHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzX25vbG9jayhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBmcm9tX3ZjbilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBfX250ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhuaSwgZnJvbV92Y24pO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogbnRmc19hdHRyX21ha2VfcmVzaWRlbnQgLSBjb252ZXJ0IGEgbm9uLXJlc2lkZW50IHRvIGEgcmVzaWRlbnQgYXR0cmlidXRlXG4gICogQG5pOlx0XHRvcGVuIG50ZnMgYXR0cmlidXRlIHRvIG1ha2UgcmVzaWRlbnRcbkBAIC00MDgzLDcgJiM0Mzs0MjIzLDcgQEAgc3RhdGljIGludCBudGZzX2F0dHJfbWFrZV9yZXNpZGVudChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHN0cnVjdCBudGZzX2F0dHJfc2VhcmNcbiBcdH1cbiBcbiBcdC8qIFJlYWQgYW5kIGNhY2hlIHRoZSB3aG9sZSBydW5saXN0IGlmIG5vdCBhbHJlYWR5IGRvbmUuICovXG4tXHRlcnIgPSBudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3QobmkpO1xuJiM0MztcdGVyciA9IG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdF9ub2xvY2sobmkpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbkBAIC00MjIwLDcgJiM0Mzs0MzYwLDcgQEAgc3RhdGljIGludCBudGZzX25vbl9yZXNpZGVudF9hdHRyX3NocmluayhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGNvbnN0IHM2NCBuZXdzaXpcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHR9XG4gXG4tXHRcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCk7XG4mIzQzO1x0XHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdFx0aWYgKCFjdHgpIHtcbiBcdFx0XHRudGZzX2Vycm9yKHZvbC1cdTAwM2VzYiwgXCYjMzQ7JXM6IEZhaWxlZCB0byBnZXQgc2VhcmNoIGNvbnRleHRcJiMzNDssIF9fZnVuY19fKTtcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbkBAIC00MjY4LDcgJiM0Mzs0NDA4LDcgQEAgc3RhdGljIGludCBudGZzX25vbl9yZXNpZGVudF9hdHRyX3NocmluayhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGNvbnN0IHM2NCBuZXdzaXpcbiBcdH1cbiBcbiBcdC8qIEdldCB0aGUgZmlyc3QgYXR0cmlidXRlIHJlY29yZC4gKi9cbi1cdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChiYXNlX25pLCBOVUxMKTtcbiYjNDM7XHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoYmFzZV9uaSwgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0aWYgKCFjdHgpIHtcbiBcdFx0bnRmc19lcnJvcih2b2wtXHUwMDNlc2IsIFwmIzM0OyVzOiBGYWlsZWQgdG8gZ2V0IHNlYXJjaCBjb250ZXh0XCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTQzODAsNyAmIzQzOzQ1MjAsOCBAQCBzdGF0aWMgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfZXhwYW5kKHN0cnVjdCBudGZzX2lub2RlICpuaSwgY29uc3QgczY0IG5ld3NpelxuIFx0ICogY2x1c3RlcnMgaWYgdGhlcmUgaXMgYSBjaGFuZ2UuXG4gXHQgKi9cbiBcdGlmIChudGZzX2J5dGVzX3RvX2NsdXN0ZXIodm9sLCBuaS1cdTAwM2VhbGxvY2F0ZWRfc2l6ZSkgXHUwMDNjIGZpcnN0X2ZyZWVfdmNuKSB7XG4tXHRcdGVyciA9IG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdChuaSk7XG4mIzQzO1x0XHRlcnIgPSBuZWVkX2xvY2sgPyBudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3QobmkpIDpcbiYjNDM7XHRcdFx0XHRudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3Rfbm9sb2NrKG5pKTtcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdG50ZnNfZXJyb3Ioc2IsIFwmIzM0O250ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdCBmYWlsZWRcJiMzNDspO1xuIFx0XHRcdHJldHVybiBlcnI7XG5AQCAtNDQ5OSwxNCAmIzQzOzQ2NDAsMTUgQEAgc3RhdGljIGludCBudGZzX25vbl9yZXNpZGVudF9hdHRyX2V4cGFuZChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGNvbnN0IHM2NCBuZXdzaXpcbiBcbiBcdFx0LyogUHJlcGFyZSB0byBtYXBwaW5nIHBhaXJzIHVwZGF0ZS4gKi9cbiBcdFx0bmktXHUwMDNlYWxsb2NhdGVkX3NpemUgPSBudGZzX2NsdXN0ZXJfdG9fYnl0ZXModm9sLCBmaXJzdF9mcmVlX3Zjbik7XG4tXHRcdGVyciA9IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhuaSwgMCk7XG4mIzQzO1x0XHRlcnIgPSBuZWVkX2xvY2sgPyBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIDApIDpcbiYjNDM7XHRcdFx0XHRudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNfbm9sb2NrKG5pLCAwKTtcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdG50ZnNfZGVidWcoXCYjMzQ7TWFwcGluZyBwYWlycyB1cGRhdGUgZmFpbGVkXCYjMzQ7KTtcbiBcdFx0XHRnb3RvIHJvbGxiYWNrO1xuIFx0XHR9XG4gXHR9XG4gXG4tXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoYmFzZV9uaSwgTlVMTCk7XG4mIzQzO1x0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KGJhc2VfbmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdGlmICghY3R4KSB7XG4gXHRcdGVyciA9IC1FTk9NRU07XG4gXHRcdGlmIChuaS1cdTAwM2VhbGxvY2F0ZWRfc2l6ZSA9PSBvcmdfYWxsb2Nfc2l6ZSlcbkBAIC00NTU3LDE2ICYjNDM7NDY5OSwyMiBAQCBzdGF0aWMgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfZXhwYW5kKHN0cnVjdCBudGZzX2lub2RlICpuaSwgY29uc3QgczY0IG5ld3NpelxuIFx0XHRrdmZyZWUobmktXHUwMDNlcnVubGlzdC5ybCk7XG4gXHRcdG5pLVx1MDAzZXJ1bmxpc3QucmwgPSBOVUxMO1xuIFx0XHRudGZzX2Vycm9yKHNiLCBcJiMzNDtDb3VsZG4mIzM5O3QgdHJ1bmNhdGUgcnVubGlzdC4gUm9sbGJhY2sgZmFpbGVkXCYjMzQ7KTtcbi1cdH0gZWxzZSB7XG4tXHRcdC8qIFByZXBhcmUgdG8gbWFwcGluZyBwYWlycyB1cGRhdGUuICovXG4tXHRcdG5pLVx1MDAzZWFsbG9jYXRlZF9zaXplID0gb3JnX2FsbG9jX3NpemU7XG4tXHRcdC8qIFJlc3RvcmUgbWFwcGluZyBwYWlycy4gKi9cbi1cdFx0aWYgKG5lZWRfbG9jaylcbi1cdFx0XHRkb3duX3JlYWQoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbi1cdFx0aWYgKG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhuaSwgMCkpXG4tXHRcdFx0bnRmc19lcnJvcihzYiwgXCYjMzQ7RmFpbGVkIHRvIHJlc3RvcmUgb2xkIG1hcHBpbmcgcGFpcnNcJiMzNDspO1xuLVx0XHRpZiAobmVlZF9sb2NrKVxuLVx0XHRcdHVwX3JlYWQoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdC8qIFByZXBhcmUgdG8gbWFwcGluZyBwYWlycyB1cGRhdGUuICovXG4mIzQzO1x0XHRcdG5pLVx1MDAzZWFsbG9jYXRlZF9zaXplID0gb3JnX2FsbG9jX3NpemU7XG4mIzQzO1x0XHRcdC8qIFJlc3RvcmUgbWFwcGluZyBwYWlycy4gKi9cbiYjNDM7XHRcdFx0aWYgKG5lZWRfbG9jaykge1xuJiM0MztcdFx0XHRcdHN0cnVjdCBudGZzX2lub2RlICphdHRyX2xvY2tfbmk7XG4mIzQzO1xuJiM0MztcdFx0XHRcdGF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4mIzQzO1x0XHRcdFx0ZG93bl9yZWFkKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4mIzQzO1x0XHRcdFx0aWYgKG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlyc19ub2xvY2sobmksIDApKVxuJiM0MztcdFx0XHRcdFx0bnRmc19lcnJvcihzYiwgXCYjMzQ7RmFpbGVkIHRvIHJlc3RvcmUgb2xkIG1hcHBpbmcgcGFpcnNcJiMzNDspO1xuJiM0MztcdFx0XHRcdHVwX3JlYWQoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbiYjNDM7XHRcdFx0XHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuJiM0MztcdFx0XHR9IGVsc2UgaWYgKG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlyc19ub2xvY2sobmksIDApKSB7XG4mIzQzO1x0XHRcdFx0bnRmc19lcnJvcihzYiwgXCYjMzQ7RmFpbGVkIHRvIHJlc3RvcmUgb2xkIG1hcHBpbmcgcGFpcnNcJiMzNDspO1xuJiM0MztcdFx0XHR9XG4gXG4gXHRcdGlmIChOSW5vU3BhcnNlKG5pKSB8fCBOSW5vQ29tcHJlc3NlZChuaSkpIHtcbiBcdFx0XHRuaS1cdTAwM2VpdHlwZS5jb21wcmVzc2VkLnNpemUgPSAgb3JnX2NvbXByZXNzZWRfc2l6ZTtcbkBAIC00NjAwLDYgJiM0Mzs0NzQ4LDcgQEAgc3RhdGljIGludCBudGZzX3Jlc2lkZW50X2F0dHJfcmVzaXplKHN0cnVjdCBudGZzX2lub2RlICphdHRyX25pLCBjb25zdCBzNjQgbmV3c2lcbiBcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSB2b2wtXHUwMDNlc2I7XG4gXHRpbnQgZXJyID0gLUVJTztcbiBcdHN0cnVjdCBudGZzX2lub2RlICpiYXNlX25pLCAqZXh0X25pID0gTlVMTDtcbiYjNDM7XHR1MzIgcmVzaWRlbnRfdmFsdWVfbGVuO1xuIFxuIGF0dHJfcmVzaXplX2FnYWluOlxuIFx0bnRmc19kZWJ1ZyhcJiMzNDtJbm9kZSAweCVsbHggYXR0ciAweCV4IG5ldyBzaXplICVsbGRcXG5cJiMzNDssXG5AQCAtNDYxMiw3ICYjNDM7NDc2MSw3IEBAIHN0YXRpYyBpbnQgbnRmc19yZXNpZGVudF9hdHRyX3Jlc2l6ZShzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9uaSwgY29uc3QgczY0IG5ld3NpXG4gXHRcdGJhc2VfbmkgPSBhdHRyX25pO1xuIFxuIFx0LyogR2V0IHRoZSBhdHRyaWJ1dGUgcmVjb3JkIHRoYXQgbmVlZHMgbW9kaWZpY2F0aW9uLiAqL1xuLVx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KGJhc2VfbmksIE5VTEwpO1xuJiM0MztcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChiYXNlX25pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4gXHRpZiAoIWN0eCkge1xuIFx0XHRudGZzX2Vycm9yKHNiLCBcJiMzNDslczogRmFpbGVkIHRvIGdldCBzZWFyY2ggY29udGV4dFwmIzM0OywgX19mdW5jX18pO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbkBAIC00NjY0LDggJiM0Mzs0ODEzLDkgQEAgc3RhdGljIGludCBudGZzX3Jlc2lkZW50X2F0dHJfcmVzaXplKHN0cnVjdCBudGZzX2lub2RlICphdHRyX25pLCBjb25zdCBzNjQgbmV3c2lcbiBcdC8qIFRoZXJlIGlzIG5vdCBlbm91Z2ggc3BhY2UgaW4gdGhlIG1mdCByZWNvcmQgdG8gcGVyZm9ybSB0aGUgcmVzaXplLiAqL1xuIFxuIFx0LyogTWFrZSB0aGUgYXR0cmlidXRlIG5vbi1yZXNpZGVudCBpZiBwb3NzaWJsZS4gKi9cbi1cdGVyciA9IG50ZnNfYXR0cl9tYWtlX25vbl9yZXNpZGVudChhdHRyX25pLFxuLVx0XHRcdGxlMzJfdG9fY3B1KGN0eC1cdTAwM2VhdHRyLVx1MDAzZWRhdGEucmVzaWRlbnQudmFsdWVfbGVuZ3RoKSk7XG4mIzQzO1x0cmVzaWRlbnRfdmFsdWVfbGVuID0gbGUzMl90b19jcHUoY3R4LVx1MDAzZWF0dHItXHUwMDNlZGF0YS5yZXNpZGVudC52YWx1ZV9sZW5ndGgpO1xuJiM0MztcdGVyciA9IF9fbnRmc19hdHRyX21ha2Vfbm9uX3Jlc2lkZW50KGF0dHJfbmksIHJlc2lkZW50X3ZhbHVlX2xlbixcbiYjNDM7XHRcdFx0XHRcdCAgICBOVEZTX0FUVFJfQ1RYX0xPQ0tfTk9ORSk7XG4gXHRpZiAoIWVycikge1xuIFx0XHRtYXJrX21mdF9yZWNvcmRfZGlydHkoY3R4LVx1MDAzZW50ZnNfaW5vKTtcbiBcdFx0bnRmc19hdHRyX3B1dF9zZWFyY2hfY3R4KGN0eCk7XG5AQCAtNDcxMiw3ICYjNDM7NDg2Miw4IEBAIHN0YXRpYyBpbnQgbnRmc19yZXNpZGVudF9hdHRyX3Jlc2l6ZShzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9uaSwgY29uc3QgczY0IG5ld3NpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbi1cdFx0aWYgKG50ZnNfYXR0cl9tYWtlX25vbl9yZXNpZGVudChOVEZTX0kodHZpKSwgdmFsdWVfbGVuKSkge1xuJiM0MztcdFx0aWYgKF9fbnRmc19hdHRyX21ha2Vfbm9uX3Jlc2lkZW50KE5URlNfSSh0dmkpLCB2YWx1ZV9sZW4sXG4mIzQzO1x0XHRcdFx0XHRcdCAgTlRGU19BVFRSX0NUWF9MT0NLX05PTkUpKSB7XG4gXHRcdFx0aXB1dCh0dmkpO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG5AQCAtNDg0NCwxMiAmIzQzOzQ5OTUsMTYgQEAgaW50IF9fbnRmc19hdHRyX3RydW5jYXRlX3ZmcyhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGNvbnN0IHM2NCBuZXdzaXplLFxuIFxuIFx0aWYgKE5Jbm9Ob25SZXNpZGVudChuaSkpIHtcbiBcdFx0aWYgKG5ld3NpemUgXHUwMDNlIGlfc2l6ZSkge1xuJiM0MztcdFx0XHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pO1xuJiM0MztcbiYjNDM7XHRcdFx0YXR0cl9sb2NrX25pID0gbnRmc19hdHRyX2xpc3RfbG9jayhuaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcbiBcdFx0XHRkb3duX3dyaXRlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4gXHRcdFx0ZXJyID0gbnRmc19ub25fcmVzaWRlbnRfYXR0cl9leHBhbmQobmksIG5ld3NpemUsIDAsXG4gXHRcdFx0XHRcdFx0XHQgICAgTlZvbERpc2FibGVTcGFyc2UobmktXHUwMDNldm9sKSA/XG4gXHRcdFx0XHRcdFx0XHQgICAgSE9MRVNfTk8gOiBIT0xFU19PSyxcbiBcdFx0XHRcdFx0XHRcdCAgICBmYWxzZSk7XG4gXHRcdFx0dXBfd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbiYjNDM7XHRcdFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcbiBcdFx0fSBlbHNlXG4gXHRcdFx0ZXJyID0gbnRmc19ub25fcmVzaWRlbnRfYXR0cl9zaHJpbmsobmksIG5ld3NpemUpO1xuIFx0fSBlbHNlXG5AQCAtNDk3OSwxNCAmIzQzOzUxMzQsMTcgQEAgaW50IG50ZnNfYXR0cl9tYXBfY2x1c3RlcihzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCB2Y25fc3RhcnQsIHM2NCAqbGNuX3N0YXJ0LFxuIFx0aW50IGVyciA9IDA7XG4gXHRzaXplX3QgbmV3X3JsX2NvdW50O1xuIFxuLVx0ZXJyID0gbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0KG5pKTtcbiYjNDM7XHRlcnIgPSBudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3Rfbm9sb2NrKG5pKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRpZiAoTklub0F0dHIobmkpKVxuLVx0XHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmktXHUwMDNlZXh0LmJhc2VfbnRmc19pbm8sIE5VTEwpO1xuLVx0ZWxzZVxuLVx0XHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwpO1xuJiM0MztcdGlmIChOSW5vQXR0cihuaSkpIHtcbiYjNDM7XHRcdHN0cnVjdCBudGZzX2lub2RlICpiYXNlX25pID0gbmktXHUwMDNlZXh0LmJhc2VfbnRmc19pbm87XG4mIzQzO1xuJiM0MztcdFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KGJhc2VfbmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19OT05FKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfTk9ORSk7XG4mIzQzO1x0fVxuIFx0aWYgKCFjdHgpIHtcbiBcdFx0bnRmc19lcnJvcih2b2wtXHUwMDNlc2IsIFwmIzM0OyVzOiBGYWlsZWQgdG8gZ2V0IHNlYXJjaCBjb250ZXh0XCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTUwOTMsNyAmIzQzOzUyNTEsNyBAQCBpbnQgbnRmc19hdHRyX21hcF9jbHVzdGVyKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IHZjbl9zdGFydCwgczY0ICpsY25fc3RhcnQsXG4gXG4gXHRpZiAodXBkYXRlX21wKSB7XG4gXHRcdG50ZnNfYXR0cl9yZWluaXRfc2VhcmNoX2N0eChjdHgpO1xuLVx0XHRlcnIgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIDApO1xuJiM0MztcdFx0ZXJyID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzX25vbG9jayhuaSwgMCk7XG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHRpbnQgZXJyMjtcbiBcbkBAIC01MTQ2LDcgJiM0Mzs1MzA0LDcgQEAgaW50IG50ZnNfYXR0cl9ybShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXG4gXHRcdGVyciA9IG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdChuaSk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbi1cdFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTtcbiYjNDM7XHRcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0XHRpZiAoIWN0eCkge1xuIFx0XHRcdG50ZnNfZXJyb3Ioc2IsIFwmIzM0OyVzOiBGYWlsZWQgdG8gZ2V0IHNlYXJjaCBjb250ZXh0XCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtNTE2MCw3ICYjNDM7NTMxOCw3IEBAIGludCBudGZzX2F0dHJfcm0oc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxuIFx0fVxuIFxuIFx0LyogU2VhcmNoIGZvciBhdHRyaWJ1dGUgZXh0ZW50cyBhbmQgcmVtb3ZlIHRoZW0gYWxsLiAqL1xuLVx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KGJhc2VfbmksIE5VTEwpO1xuJiM0MztcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChiYXNlX25pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuIFx0aWYgKCFjdHgpIHtcbiBcdFx0bnRmc19lcnJvcihzYiwgXCYjMzQ7JXM6IEZhaWxlZCB0byBnZXQgc2VhcmNoIGNvbnRleHRcJiMzNDssIF9fZnVuY19fKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtNTE5Miw3ICYjNDM7NTM1MCw3IEBAIGludCBudGZzX2F0dHJfZXhpc3Qoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBjb25zdCBfX2xlMzIgdHlwZSwgX19sZTE2ICpuYW1lLFxuIFxuIFx0bnRmc19kZWJ1ZyhcJiMzNDtFbnRlcmluZ1xcblwmIzM0Oyk7XG4gXG4tXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwpO1xuJiM0MztcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0aWYgKCFjdHgpIHtcbiBcdFx0bnRmc19lcnJvcihuaS1cdTAwM2V2b2wtXHUwMDNlc2IsIFwmIzM0OyVzOiBGYWlsZWQgdG8gZ2V0IHNlYXJjaCBjb250ZXh0XCYjMzQ7LFxuIFx0XHRcdFx0X19mdW5jX18pO1xuQEAgLTUzMDEsNiAmIzQzOzU0NTksNyBAQCB2b2lkICpudGZzX2F0dHJfcmVhZGFsbChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGNvbnN0IF9fbGUzMiB0eXBlLFxuIGludCBudGZzX25vbl9yZXNpZGVudF9hdHRyX2luc2VydF9yYW5nZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBzdGFydF92Y24sIHM2NCBsZW4pXG4ge1xuIFx0c3RydWN0IG50ZnNfdm9sdW1lICp2b2wgPSBuaS1cdTAwM2V2b2w7XG4mIzQzO1x0c3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTtcbiBcdHN0cnVjdCBydW5saXN0X2VsZW1lbnQgKmhvbGVfcmwsICpybDtcbiBcdHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4O1xuIFx0aW50IHJldDtcbkBAIC01MzIxLDE2ICYjNDM7NTQ4MCwxOSBAQCBpbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9pbnNlcnRfcmFuZ2Uoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgc3RhcnRfdmNuLCBzNlxuIFx0aG9sZV9ybFsxXS5sY24gPSBMQ05fRU5PRU5UO1xuIFx0aG9sZV9ybFsxXS5sZW5ndGggPSAwO1xuIFxuJiM0MztcdGF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4gXHRkb3duX3dyaXRlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4tXHRyZXQgPSBudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3QobmkpO1xuJiM0MztcdHJldCA9IG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdF9ub2xvY2sobmkpO1xuIFx0aWYgKHJldCkge1xuIFx0XHR1cF93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuJiM0MztcdFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbiBcdHJsID0gbnRmc19ybF9maW5kX3Zjbl9ub2xvY2sobmktXHUwMDNlcnVubGlzdC5ybCwgc3RhcnRfdmNuKTtcbiBcdGlmICghcmwpIHtcbiBcdFx0dXBfd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbiYjNDM7XHRcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4gXHRcdGtmcmVlKGhvbGVfcmwpO1xuIFx0XHRyZXR1cm4gLUVJTztcbiBcdH1cbkBAIC01MzM5LDYgJiM0Mzs1NTAxLDcgQEAgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfaW5zZXJ0X3JhbmdlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IHN0YXJ0X3ZjbiwgczZcbiBcdFx0XHRcdCAgaG9sZV9ybCwgMSwgXHUwMDI2bmV3X3JsX2NvdW50KTtcbiBcdGlmIChJU19FUlIocmwpKSB7XG4gXHRcdHVwX3dyaXRlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4mIzQzO1x0XHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuIFx0XHRrZnJlZShob2xlX3JsKTtcbiBcdFx0cmV0dXJuIFBUUl9FUlIocmwpO1xuIFx0fVxuQEAgLTUzNDksMTIgJiM0Mzs1NTEyLDEzIEBAIGludCBudGZzX25vbl9yZXNpZGVudF9hdHRyX2luc2VydF9yYW5nZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBzdGFydF92Y24sIHM2XG4gXHRuaS1cdTAwM2VkYXRhX3NpemUgJiM0Mzs9IG50ZnNfY2x1c3Rlcl90b19ieXRlcyh2b2wsIGxlbik7XG4gXHRpZiAobnRmc19jbHVzdGVyX3RvX2J5dGVzKHZvbCwgc3RhcnRfdmNuKSBcdTAwM2MgbmktXHUwMDNlaW5pdGlhbGl6ZWRfc2l6ZSlcbiBcdFx0bmktXHUwMDNlaW5pdGlhbGl6ZWRfc2l6ZSAmIzQzOz0gbnRmc19jbHVzdGVyX3RvX2J5dGVzKHZvbCwgbGVuKTtcbi1cdHJldCA9IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhuaSwgMCk7XG4mIzQzO1x0cmV0ID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzX25vbG9jayhuaSwgMCk7XG4gXHR1cF93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuJiM0MztcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTtcbiYjNDM7XHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdGlmICghY3R4KSB7XG4gXHRcdHJldCA9IC1FTk9NRU07XG4gXHRcdHJldHVybiByZXQ7XG5AQCAtNTM3OSw2ICYjNDM7NTU0Myw3IEBAIGludCBudGZzX25vbl9yZXNpZGVudF9hdHRyX2luc2VydF9yYW5nZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBzdGFydF92Y24sIHM2XG4gaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfY29sbGFwc2VfcmFuZ2Uoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgc3RhcnRfdmNuLCBzNjQgbGVuKVxuIHtcbiBcdHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sID0gbmktXHUwMDNldm9sO1xuJiM0MztcdHN0cnVjdCBudGZzX2lub2RlICphdHRyX2xvY2tfbmk7XG4gXHRzdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpwdW5jaF9ybCwgKnJsO1xuIFx0c3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHggPSBOVUxMO1xuIFx0czY0IGVuZF92Y247XG5AQCAtNTM5MywxMCAmIzQzOzU1NTgsMTIgQEAgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfY29sbGFwc2VfcmFuZ2Uoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgc3RhcnRfdmNuLFxuIFx0aWYgKHN0YXJ0X3ZjbiBcdTAwM2U9IGVuZF92Y24pXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiM0MztcdGF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4gXHRkb3duX3dyaXRlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4tXHRyZXQgPSBudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3QobmkpO1xuJiM0MztcdHJldCA9IG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdF9ub2xvY2sobmkpO1xuIFx0aWYgKHJldCkge1xuIFx0XHR1cF93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuJiM0MztcdFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbkBAIC01NDA2LDYgJiM0Mzs1NTczLDcgQEAgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfY29sbGFwc2VfcmFuZ2Uoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgc3RhcnRfdmNuLFxuIFx0cmwgPSBudGZzX3JsX2ZpbmRfdmNuX25vbG9jayhuaS1cdTAwM2VydW5saXN0LnJsLCBzdGFydF92Y24pO1xuIFx0aWYgKCFybCkge1xuIFx0XHR1cF93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuJiM0MztcdFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcbiBcdFx0cmV0dXJuIC1FSU87XG4gXHR9XG4gXG5AQCAtNTQxMyw2ICYjNDM7NTU4MSw3IEBAIGludCBudGZzX25vbl9yZXNpZGVudF9hdHRyX2NvbGxhcHNlX3JhbmdlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IHN0YXJ0X3ZjbixcbiBcdFx0XHRcdCAgICBzdGFydF92Y24sIGxlbiwgXHUwMDI2cHVuY2hfcmwsIFx1MDAyNm5ld19ybF9jbnQpO1xuIFx0aWYgKElTX0VSUihybCkpIHtcbiBcdFx0dXBfd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbiYjNDM7XHRcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4gXHRcdHJldHVybiBQVFJfRVJSKHJsKTtcbiBcdH1cbiBcdG5pLVx1MDAzZXJ1bmxpc3QucmwgPSBybDtcbkBAIC01NDM0LDE1ICYjNDM7NTYwMywxNyBAQCBpbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9jb2xsYXBzZV9yYW5nZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBzdGFydF92Y24sXG4gXHR9XG4gXG4gXHRpZiAobmktXHUwMDNlYWxsb2NhdGVkX3NpemUgXHUwMDNlIDApIHtcbi1cdFx0cmV0ID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG5pLCAwKTtcbiYjNDM7XHRcdHJldCA9IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlyc19ub2xvY2sobmksIDApO1xuIFx0XHRpZiAocmV0KSB7XG4gXHRcdFx0dXBfd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbiYjNDM7XHRcdFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcbiBcdFx0XHRnb3RvIG91dF9ybDtcbiBcdFx0fVxuIFx0fVxuIFx0dXBfd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbiYjNDM7XHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuIFxuLVx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTtcbiYjNDM7XHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdGlmICghY3R4KSB7XG4gXHRcdHJldCA9IC1FTk9NRU07XG4gXHRcdGdvdG8gb3V0X3JsO1xuQEAgLTU0NzQsNiAmIzQzOzU2NDUsNyBAQCBpbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9jb2xsYXBzZV9yYW5nZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBzdGFydF92Y24sXG4gaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfcHVuY2hfaG9sZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBzdGFydF92Y24sIHM2NCBsZW4pXG4ge1xuIFx0c3RydWN0IG50ZnNfdm9sdW1lICp2b2wgPSBuaS1cdTAwM2V2b2w7XG4mIzQzO1x0c3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTtcbiBcdHN0cnVjdCBydW5saXN0X2VsZW1lbnQgKnB1bmNoX3JsLCAqcmw7XG4gXHRzNjQgZW5kX3ZjbjtcbiBcdGludCBkc3RfY250O1xuQEAgLTU0ODcsMTAgJiM0Mzs1NjU5LDEyIEBAIGludCBudGZzX25vbl9yZXNpZGVudF9hdHRyX3B1bmNoX2hvbGUoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgc3RhcnRfdmNuLCBzNjRcbiBcdGlmIChzdGFydF92Y24gXHUwMDNlPSBlbmRfdmNuKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiYjNDM7XHRhdHRyX2xvY2tfbmkgPSBudGZzX2F0dHJfbGlzdF9sb2NrKG5pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuIFx0ZG93bl93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuLVx0cmV0ID0gbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0KG5pKTtcbiYjNDM7XHRyZXQgPSBudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3Rfbm9sb2NrKG5pKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0dXBfd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbiYjNDM7XHRcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG5AQCAtNTUwMCw2ICYjNDM7NTY3NCw3IEBAIGludCBudGZzX25vbl9yZXNpZGVudF9hdHRyX3B1bmNoX2hvbGUoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgc3RhcnRfdmNuLCBzNjRcbiBcdHJsID0gbnRmc19ybF9maW5kX3Zjbl9ub2xvY2sobmktXHUwMDNlcnVubGlzdC5ybCwgc3RhcnRfdmNuKTtcbiBcdGlmICghcmwpIHtcbiBcdFx0dXBfd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbiYjNDM7XHRcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4gXHRcdHJldHVybiAtRUlPO1xuIFx0fVxuIFxuQEAgLTU1MDcsMTMgJiM0Mzs1NjgyLDE1IEBAIGludCBudGZzX25vbl9yZXNpZGVudF9hdHRyX3B1bmNoX2hvbGUoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgc3RhcnRfdmNuLCBzNjRcbiBcdFx0XHRcdHN0YXJ0X3ZjbiwgbGVuLCBcdTAwMjZwdW5jaF9ybCwgXHUwMDI2bmV3X3JsX2NvdW50KTtcbiBcdGlmIChJU19FUlIocmwpKSB7XG4gXHRcdHVwX3dyaXRlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4mIzQzO1x0XHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuIFx0XHRyZXR1cm4gUFRSX0VSUihybCk7XG4gXHR9XG4gXHRuaS1cdTAwM2VydW5saXN0LnJsID0gcmw7XG4gXHRuaS1cdTAwM2VydW5saXN0LmNvdW50ID0gbmV3X3JsX2NvdW50O1xuIFxuLVx0cmV0ID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG5pLCAwKTtcbiYjNDM7XHRyZXQgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNfbm9sb2NrKG5pLCAwKTtcbiBcdHVwX3dyaXRlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4mIzQzO1x0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0a3ZmcmVlKHB1bmNoX3JsKTtcbiBcdFx0cmV0dXJuIHJldDtcbkBAIC01NTQ0LDkgJiM0Mzs1NzIxLDEzIEBAIGludCBudGZzX2F0dHJfZmFsbG9jYXRlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgYnl0ZV9sZW4sIGJvXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aWYgKE5Jbm9Ob25SZXNpZGVudChuaSkgXHUwMDI2XHUwMDI2ICFOSW5vRnVsbHlNYXBwZWQobmkpKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pO1xuJiM0MztcbiYjNDM7XHRcdGF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdFx0ZG93bl93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuLVx0XHRlcnIgPSBudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3QobmkpO1xuJiM0MztcdFx0ZXJyID0gbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0X25vbG9jayhuaSk7XG4gXHRcdHVwX3dyaXRlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4mIzQzO1x0XHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbkBAIC01NTU4LDcgJiM0Mzs1NzM5LDcgQEAgaW50IG50ZnNfYXR0cl9mYWxsb2NhdGUoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBieXRlX2xlbiwgYm9cbiBcdFx0cmV0dXJuIFBUUl9FUlIobXJlYyk7XG4gXHR9XG4gXG4tXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIG1yZWMpO1xuJiM0MztcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgbXJlYywgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0aWYgKCFjdHgpIHtcbiBcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0Z290byBvdXRfdW5tYXA7XG5AQCAtNTYzMywxMSAmIzQzOzU4MTQsMTUgQEAgaW50IG50ZnNfYXR0cl9mYWxsb2NhdGUoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBieXRlX2xlbiwgYm9cbiBcdFx0XHR9XG4gXG4gXHRcdFx0d2hpbGUgKHRyeV9hbGxvY19jbnQgXHUwMDNlIDApIHtcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pO1xuJiM0MztcbiBcdFx0XHRcdG11dGV4X2xvY2tfbmVzdGVkKFx1MDAyNm5pLVx1MDAzZW1yZWNfbG9jaywgTlRGU19JTk9ERV9NVVRFWF9OT1JNQUwpO1xuJiM0MztcdFx0XHRcdGF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4gXHRcdFx0XHRkb3duX3dyaXRlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4gXHRcdFx0XHRlcnIgPSBudGZzX2F0dHJfbWFwX2NsdXN0ZXIobmksIHZjbiwgXHUwMDI2bGNuLCBcdTAwMjZhbGxvY19jbnQsXG4gXHRcdFx0XHRcdFx0XHQgICAgdHJ5X2FsbG9jX2NudCwgXHUwMDI2YmFsbG9jLCBmYWxzZSwgZmFsc2UpO1xuIFx0XHRcdFx0dXBfd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbiYjNDM7XHRcdFx0XHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuIFx0XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5pLVx1MDAzZW1yZWNfbG9jayk7XG4gXHRcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0XHRnb3RvIG91dDtcbkBAIC01NjYzLDExICYjNDM7NTg0OCwxNSBAQCBpbnQgbnRmc19hdHRyX2ZhbGxvY2F0ZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGxvZmZfdCBzdGFydCwgbG9mZl90IGJ5dGVfbGVuLCBib1xuIFx0LyogYWxsb2NhdGUgY2x1c3RlcnMgb3V0c2lkZSBvZiBpbml0aWFsaXplZF9zaXplICovXG4gXHR0cnlfYWxsb2NfY250ID0gdmNuX2VuZCAtIHZjbjtcbiBcdHdoaWxlICh0cnlfYWxsb2NfY250IFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pO1xuJiM0MztcbiBcdFx0bXV0ZXhfbG9ja19uZXN0ZWQoXHUwMDI2bmktXHUwMDNlbXJlY19sb2NrLCBOVEZTX0lOT0RFX01VVEVYX05PUk1BTCk7XG4mIzQzO1x0XHRhdHRyX2xvY2tfbmkgPSBudGZzX2F0dHJfbGlzdF9sb2NrKG5pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuIFx0XHRkb3duX3dyaXRlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4gXHRcdGVyciA9IG50ZnNfYXR0cl9tYXBfY2x1c3RlcihuaSwgdmNuLCBcdTAwMjZsY24sIFx1MDAyNmFsbG9jX2NudCxcbiBcdFx0XHRcdFx0ICAgIHRyeV9hbGxvY19jbnQsIFx1MDAyNmJhbGxvYywgZmFsc2UsIGZhbHNlKTtcbiBcdFx0dXBfd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbiYjNDM7XHRcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZuaS1cdTAwM2VtcmVjX2xvY2spO1xuIFx0XHRpZiAoZXJyIHx8IHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuIFx0XHRcdGdvdG8gb3V0O1xuQEAgLTU2NzgsMTQgJiM0Mzs1ODY3LDE4IEBAIGludCBudGZzX2F0dHJfZmFsbG9jYXRlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgYnl0ZV9sZW4sIGJvXG4gXHR9XG4gXG4gXHRpZiAoTklub1J1bmxpc3REaXJ0eShuaSkpIHtcbiYjNDM7XHRcdHN0cnVjdCBudGZzX2lub2RlICphdHRyX2xvY2tfbmk7XG4mIzQzO1xuIFx0XHRtdXRleF9sb2NrX25lc3RlZChcdTAwMjZuaS1cdTAwM2VtcmVjX2xvY2ssIE5URlNfSU5PREVfTVVURVhfTk9STUFMKTtcbiYjNDM7XHRcdGF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4gXHRcdGRvd25fd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbi1cdFx0ZXJyID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG5pLCAwKTtcbiYjNDM7XHRcdGVyciA9IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlyc19ub2xvY2sobmksIDApO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdG50ZnNfZXJyb3IobmktXHUwMDNldm9sLVx1MDAzZXNiLCBcJiMzNDtVcGRhdGluZyBtYXBwaW5nIHBhaXJzIGZhaWxlZFwmIzM0Oyk7XG4gXHRcdGVsc2VcbiBcdFx0XHROSW5vQ2xlYXJSdW5saXN0RGlydHkobmkpO1xuIFx0XHR1cF93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuJiM0MztcdFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5pLVx1MDAzZW1yZWNfbG9jayk7XG4gXHR9XG4gXHRyZXR1cm4gZXJyO1xuZGlmZiAtLWdpdCBhL2ZzL250ZnMvYXR0cmliLmggYi9mcy9udGZzL2F0dHJpYi5oXG5pbmRleCBlMjIyNGZiZmFhYmU5NS4uNmYxNjcxOTRhZmI4OTggMTAwNjQ0XG4tLS0gYS9mcy9udGZzL2F0dHJpYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9udGZzL2F0dHJpYi5oXG5AQCAtMjYsNiAmIzQzOzI2LDggQEAgZXh0ZXJuIF9fbGUxNiBBVF9VTk5BTUVEW107XG4gICogQGJhc2VfbnRmc19pbm86IEJhc2UgaW5vZGVcbiAgKiBAbWFwcGVkX2Jhc2VfbXJlYzogdHJ1ZSBpZiBAYmFzZV9tcmVjIHdhcyBtYXBwZWQgYnkgdGhlIHNlYXJjaFxuICAqIEBiYXNlX2F0dHI6IEJhc2UgYXR0cmlidXRlIHJlY29yZCBwb2ludGVyXG4mIzQzOyAqIEBhdHRyX2xpc3RfbG9ja19uaTogQmFzZSBpbm9kZSB3aG9zZSBhdHRyX2xpc3RfbG9jayBpcyBoZWxkXG4mIzQzOyAqIEBhdHRyX2xpc3RfbG9ja19tb2RlOiBhdHRyX2xpc3RfbG9jayBtb2RlIGhlbGQgYnkgdGhpcyBjb250ZXh0XG4gICpcbiAgKiBTdHJ1Y3R1cmUgbXVzdCBiZSBpbml0aWFsaXplZCB0byB6ZXJvIGJlZm9yZSB0aGUgZmlyc3QgY2FsbCB0byBvbmUgb2YgdGhlXG4gICogYXR0cmlidXRlIHNlYXJjaCBmdW5jdGlvbnMuIEluaXRpYWxpemUgQG1yZWMgdG8gcG9pbnQgdG8gdGhlIG1mdCByZWNvcmQgdG9cbkBAIC0zOSw2ICYjNDM7NDEsMTIgQEAgZXh0ZXJuIF9fbGUxNiBBVF9VTk5BTUVEW107XG4gICogYW55IG1vZGlmaWNhdGlvbiBvZiB0aGUgc2VhcmNoIGNvbnRleHQsIHRvIGF1dG9tYWdpY2FsbHkgZ2V0IHRoZSBuZXh0XG4gICogbWF0Y2hpbmcgYXR0cmlidXRlLlxuICAqL1xuJiM0MztlbnVtIG50ZnNfYXR0cl9zZWFyY2hfY3R4X2xvY2tfbW9kZSB7XG4mIzQzO1x0TlRGU19BVFRSX0NUWF9MT0NLX05PTkUsXG4mIzQzO1x0TlRGU19BVFRSX0NUWF9MT0NLX1JFQUQsXG4mIzQzO1x0TlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFLFxuJiM0Mzt9O1xuJiM0MztcbiBzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHgge1xuIFx0c3RydWN0IG1mdF9yZWNvcmQgKm1yZWM7XG4gXHRib29sIG1hcHBlZF9tcmVjO1xuQEAgLTUwLDYgJiM0Mzs1OCw4IEBAIHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCB7XG4gXHRzdHJ1Y3QgbWZ0X3JlY29yZCAqYmFzZV9tcmVjO1xuIFx0Ym9vbCBtYXBwZWRfYmFzZV9tcmVjO1xuIFx0c3RydWN0IGF0dHJfcmVjb3JkICpiYXNlX2F0dHI7XG4mIzQzO1x0c3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbGlzdF9sb2NrX25pO1xuJiM0MztcdGVudW0gbnRmc19hdHRyX3NlYXJjaF9jdHhfbG9ja19tb2RlIGF0dHJfbGlzdF9sb2NrX21vZGU7XG4gfTtcbiBcbiBlbnVtIHsgICAgICAgICAgICAgICAgICAvKiB3YXlzIG9mIHByb2Nlc3NpbmcgaG9sZXMgd2hlbiBleHBhbmRpbmcgKi9cbkBAIC02Niw2ICYjNDM7NzYsNyBAQCBzdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpudGZzX2F0dHJfZmluZF92Y25fbm9sb2NrKHN0cnVjdCBudGZzX2lub2RlICpuaSxcbiBcdFx0Y29uc3QgczY0IHZjbiwgc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpO1xuIHN0cnVjdCBydW5saXN0X2VsZW1lbnQgKl9fbnRmc19hdHRyX2ZpbmRfdmNuX25vbG9jayhzdHJ1Y3QgcnVubGlzdCAqcnVubGlzdCxcbiBcdFx0Y29uc3QgczY0IHZjbik7XG4mIzQzO2ludCBudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3Rfbm9sb2NrKHN0cnVjdCBudGZzX2lub2RlICpuaSk7XG4gaW50IG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdChzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpO1xuIGludCBudGZzX2F0dHJfbG9va3VwKGNvbnN0IF9fbGUzMiB0eXBlLCBjb25zdCBfX2xlMTYgKm5hbWUsXG4gXHRcdGNvbnN0IHUzMiBuYW1lX2xlbiwgY29uc3QgdTMyIGljLFxuQEAgLTg3LDcgJiM0Mzs5OCwxNiBAQCBzdGF0aWMgaW5saW5lIHM2NCBudGZzX2F0dHJfc2l6ZShjb25zdCBzdHJ1Y3QgYXR0cl9yZWNvcmQgKmEpXG4gXG4gdm9pZCBudGZzX2F0dHJfcmVpbml0X3NlYXJjaF9jdHgoc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpO1xuIHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KHN0cnVjdCBudGZzX2lub2RlICpuaSxcbi1cdFx0c3RydWN0IG1mdF9yZWNvcmQgKm1yZWMpO1xuJiM0MztcdFx0c3RydWN0IG1mdF9yZWNvcmQgKm1yZWMsXG4mIzQzO1x0XHRlbnVtIG50ZnNfYXR0cl9zZWFyY2hfY3R4X2xvY2tfbW9kZSBsb2NrX21vZGUpO1xuJiM0MztzdHJ1Y3QgbnRmc19pbm9kZSAqbnRmc19hdHRyX2xpc3RfbG9jayhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXG4mIzQzO1x0XHRcdFx0ICAgICAgIGVudW0gbnRmc19hdHRyX3NlYXJjaF9jdHhfbG9ja19tb2RlIGxvY2tfbW9kZSk7XG4mIzQzO3ZvaWQgbnRmc19hdHRyX2xpc3RfdW5sb2NrKHN0cnVjdCBudGZzX2lub2RlICpsb2NrX25pLFxuJiM0MztcdFx0XHQgICBlbnVtIG50ZnNfYXR0cl9zZWFyY2hfY3R4X2xvY2tfbW9kZSBsb2NrX21vZGUpO1xuJiM0Mzt2b2lkIG50ZnNfYXR0cl9sb2NrX3NlYXJjaF9jdHgoc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXG4mIzQzO1x0XHRcdCAgICAgICBlbnVtIG50ZnNfYXR0cl9zZWFyY2hfY3R4X2xvY2tfbW9kZSBsb2NrX21vZGUpO1xuJiM0Mzt2b2lkIG50ZnNfYXR0cl91bmxvY2tfc2VhcmNoX2N0eChzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eCk7XG4gdm9pZCBudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpO1xuIGludCBudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2soY29uc3Qgc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsXG4gXHRcdGNvbnN0IF9fbGUzMiB0eXBlLCBjb25zdCBzNjQgc2l6ZSk7XG5AQCAtMTMzLDYgJiM0MzsxNTMsNyBAQCBpbnQgbnRmc19yZXNpZGVudF9hdHRyX3JlY29yZF9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBfX2xlMzIgdHlwZSxcbiBcdFx0X19sZTE2ICpuYW1lLCB1OCBuYW1lX2xlbiwgdTggKnZhbCwgdTMyIHNpemUsXG4gXHRcdF9fbGUxNiBmbGFncyk7XG4gaW50IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBmcm9tX3Zjbik7XG4mIzQzO2ludCBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNfbm9sb2NrKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IGZyb21fdmNuKTtcbiBzdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpudGZzX2F0dHJfdmNuX3RvX3JsKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IHZjbiwgczY0ICpsY24pO1xuIFxuIC8qXG5AQCAtMTQ4LDcgJiM0MzsxNjksOSBAQCBzdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpudGZzX2F0dHJfdmNuX3RvX3JsKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IHZjbiwgczY0XG4gICpcdCAgICBAbmksIHlvdSBjYW4gc2ltcGx5IGRvOlxuICAqXG4gICpcdGludCBlcnI7XG4tICpcdHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTtcbiYjNDM7ICpcdHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4O1xuJiM0MzsgKlxuJiM0MzsgKlx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4gICpcdGlmICghY3R4KVxuICAqXHRcdC8vIEVycm9yIGNvZGUgaXMgaW4gZXJybm8uIEhhbmRsZSB0aGlzIGNhc2UuXG4gICpcdHdoaWxlICghKGVyciA9IG50ZnNfYXR0cnNfd2FsayhjdHgpKSkge1xuZGlmZiAtLWdpdCBhL2ZzL250ZnMvYXR0cmxpc3QuYyBiL2ZzL250ZnMvYXR0cmxpc3QuY1xuaW5kZXggYWZiMTMwMzhiYTQyNWYuLmZkNWVhYzA2MTI3ODRiIDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9hdHRybGlzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9udGZzL2F0dHJsaXN0LmNcbkBAIC0xNTMsNyAmIzQzOzE1Myw3IEBAIGludCBudGZzX2F0dHJsaXN0X2VudHJ5X2FkZChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHN0cnVjdCBhdHRyX3JlY29yZCAqYXR0cilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHQvKiBGaW5kIHBsYWNlIGZvciB0aGUgbmV3IGVudHJ5LiAqL1xuLVx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTtcbiYjNDM7XHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4gXHRpZiAoIWN0eCkge1xuIFx0XHRlcnIgPSAtRU5PTUVNO1xuIFx0XHRudGZzX2Vycm9yKG5pLVx1MDAzZXZvbC1cdTAwM2VzYiwgXCYjMzQ7RmFpbGVkIHRvIGdldCBzZWFyY2ggY29udGV4dFwmIzM0Oyk7XG5AQCAtMTc2LDcgJiM0MzsxNzYsNiBAQCBpbnQgbnRmc19hdHRybGlzdF9lbnRyeV9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzdHJ1Y3QgYXR0cl9yZWNvcmQgKmF0dHIpXG4gXHRcdGlmIChjdHgtXHUwMDNlYWxfZW50cnktXHUwMDNlbG93ZXN0X3ZjbiA9PSBsb3dlc3RfdmNuKSB7XG4gXHRcdFx0ZXJyID0gLUVFWElTVDtcbiBcdFx0XHRudGZzX2RlYnVnKFwmIzM0O1N1Y2ggYXR0cmlidXRlIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgYXR0cmlidXRlIGxpc3QuXFxuXCYjMzQ7KTtcbi1cdFx0XHRudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoY3R4KTtcbiBcdFx0XHRnb3RvIGVycl9vdXQ7XG4gXHRcdH1cbiBcdFx0LyogQWRkIG5ldyBlbnRyeSBhZnRlciB0aGlzIGV4dGVudC4gKi9cbkBAIC0xODYsMTUgJiM0MzsxODUsMTEgQEAgaW50IG50ZnNfYXR0cmxpc3RfZW50cnlfYWRkKHN0cnVjdCBudGZzX2lub2RlICpuaSwgc3RydWN0IGF0dHJfcmVjb3JkICphdHRyKVxuIFx0XHQvKiBDaGVjayBmb3IgcmVhbCBlcnJvcnMuICovXG4gXHRcdGlmIChlcnIgIT0gLUVOT0VOVCkge1xuIFx0XHRcdG50ZnNfZGVidWcoXCYjMzQ7QXR0cmlidXRlIGxvb2t1cCBmYWlsZWQuXFxuXCYjMzQ7KTtcbi1cdFx0XHRudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoY3R4KTtcbiBcdFx0XHRnb3RvIGVycl9vdXQ7XG4gXHRcdH1cbiBcdFx0LyogTm8gcHJldmlvdXMgZXh0ZW50cyBmb3VuZC4gKi9cbiBcdFx0YWxlID0gY3R4LVx1MDAzZWFsX2VudHJ5O1xuIFx0fVxuLVx0LyogRG9uJiMzOTt0IG5lZWQgaXQgYW55bW9yZSwgQGN0eC1cdTAwM2VhbF9lbnRyeSBwb2ludHMgdG8gQG5pLVx1MDAzZWF0dHJfbGlzdC4gKi9cbi1cdG50ZnNfYXR0cl9wdXRfc2VhcmNoX2N0eChjdHgpO1xuLVxuIFx0LyogRGV0ZXJtaW5lIG5ldyBlbnRyeSBvZmZzZXQuICovXG4gXHRlbnRyeV9vZmZzZXQgPSAoKHU4ICopYWxlIC0gbmktXHUwMDNlYXR0cl9saXN0KTtcbiBcdC8qIFNldCBwb2ludGVyIHRvIG5ldyBlbnRyeS4gKi9cbkBAIC0yMjMsMTYgJiM0MzsyMTgsMjIgQEAgaW50IG50ZnNfYXR0cmxpc3RfZW50cnlfYWRkKHN0cnVjdCBudGZzX2lub2RlICpuaSwgc3RydWN0IGF0dHJfcmVjb3JkICphdHRyKVxuIFx0b2xkX2FsID0gbmktXHUwMDNlYXR0cl9saXN0O1xuIFx0bmktXHUwMDNlYXR0cl9saXN0ID0gbmV3X2FsO1xuIFx0bmktXHUwMDNlYXR0cl9saXN0X3NpemUgPSBuaS1cdTAwM2VhdHRyX2xpc3Rfc2l6ZSAmIzQzOyBlbnRyeV9sZW47XG4mIzQzO1x0bnRmc19hdHRyX3B1dF9zZWFyY2hfY3R4KGN0eCk7XG4mIzQzO1x0Y3R4ID0gTlVMTDtcbiBcbiBcdGVyciA9IG50ZnNfYXR0cmxpc3RfdXBkYXRlKG5pKTtcbiBcdGlmIChlcnIpIHtcbiYjNDM7XHRcdGRvd25fd3JpdGUoXHUwMDI2bmktXHUwMDNlYXR0cl9saXN0X2xvY2spO1xuIFx0XHRuaS1cdTAwM2VhdHRyX2xpc3QgPSBvbGRfYWw7XG4gXHRcdG5pLVx1MDAzZWF0dHJfbGlzdF9zaXplIC09IGVudHJ5X2xlbjtcbiYjNDM7XHRcdHVwX3dyaXRlKFx1MDAyNm5pLVx1MDAzZWF0dHJfbGlzdF9sb2NrKTtcbiBcdFx0Z290byBlcnJfb3V0O1xuIFx0fVxuIFx0a3ZmcmVlKG9sZF9hbCk7XG4gXHRyZXR1cm4gMDtcbiBlcnJfb3V0OlxuJiM0MztcdGlmIChjdHgpXG4mIzQzO1x0XHRudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoY3R4KTtcbiBcdGt2ZnJlZShuZXdfYWwpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG5AQCAtMjQ4LDkgJiM0MzsyNDksMTIgQEAgaW50IG50ZnNfYXR0cmxpc3RfZW50cnlfYWRkKHN0cnVjdCBudGZzX2lub2RlICpuaSwgc3RydWN0IGF0dHJfcmVjb3JkICphdHRyKVxuIGludCBudGZzX2F0dHJsaXN0X2VudHJ5X3JtKHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4KVxuIHtcbiBcdHU4ICpuZXdfYWw7XG4tXHRpbnQgbmV3X2FsX2xlbjtcbiYjNDM7XHRpbnQgZXJyLCBuZXdfYWxfbGVuO1xuIFx0c3RydWN0IG50ZnNfaW5vZGUgKmJhc2Vfbmk7XG4gXHRzdHJ1Y3QgYXR0cl9saXN0X2VudHJ5ICphbGU7XG4mIzQzO1x0ZW51bSBudGZzX2F0dHJfc2VhcmNoX2N0eF9sb2NrX21vZGUgbG9ja19tb2RlO1xuJiM0MztcdGJvb2wgY3R4X2xvY2tlZDtcbiYjNDM7XHR1OCAqb2xkX2FsO1xuIFxuIFx0aWYgKCFjdHggfHwgIWN0eC1cdTAwM2VudGZzX2lubyB8fCAhY3R4LVx1MDAzZWFsX2VudHJ5KSB7XG4gXHRcdG50ZnNfZGVidWcoXCYjMzQ7SW52YWxpZCBhcmd1bWVudHMuXFxuXCYjMzQ7KTtcbkBAIC0yODUsOSAmIzQzOzI4OSwxNyBAQCBpbnQgbnRmc19hdHRybGlzdF9lbnRyeV9ybShzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eClcbiBcdFx0XHRcdGFsZS1cdTAwM2VsZW5ndGgpLCBuZXdfYWxfbGVuIC0gKCh1OCAqKWFsZSAtIGJhc2VfbmktXHUwMDNlYXR0cl9saXN0KSk7XG4gXG4gXHQvKiBTZXQgbmV3IHJ1bmxpc3QuICovXG4tXHRrdmZyZWUoYmFzZV9uaS1cdTAwM2VhdHRyX2xpc3QpO1xuJiM0MztcdG9sZF9hbCA9IGJhc2VfbmktXHUwMDNlYXR0cl9saXN0O1xuIFx0YmFzZV9uaS1cdTAwM2VhdHRyX2xpc3QgPSBuZXdfYWw7XG4gXHRiYXNlX25pLVx1MDAzZWF0dHJfbGlzdF9zaXplID0gbmV3X2FsX2xlbjtcbiYjNDM7XHRrdmZyZWUob2xkX2FsKTtcbiBcbi1cdHJldHVybiBudGZzX2F0dHJsaXN0X3VwZGF0ZShiYXNlX25pKTtcbiYjNDM7XHRjdHhfbG9ja2VkID0gY3R4LVx1MDAzZWF0dHJfbGlzdF9sb2NrX25pO1xuJiM0MztcdGxvY2tfbW9kZSA9IGN0eC1cdTAwM2VhdHRyX2xpc3RfbG9ja19tb2RlO1xuJiM0MztcdGlmIChjdHhfbG9ja2VkKVxuJiM0MztcdFx0bnRmc19hdHRyX3VubG9ja19zZWFyY2hfY3R4KGN0eCk7XG4mIzQzO1x0ZXJyID0gbnRmc19hdHRybGlzdF91cGRhdGUoYmFzZV9uaSk7XG4mIzQzO1x0aWYgKGN0eF9sb2NrZWQpXG4mIzQzO1x0XHRudGZzX2F0dHJfbG9ja19zZWFyY2hfY3R4KGN0eCwgYmFzZV9uaSwgbG9ja19tb2RlKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbmRpZmYgLS1naXQgYS9mcy9udGZzL2NvbXByZXNzLmMgYi9mcy9udGZzL2NvbXByZXNzLmNcbmluZGV4IDc2YmQ4MDZiNDFlZGQ5Li5iYWM2YjMyMDY5NDc1MyAxMDA2NDRcbi0tLSBhL2ZzL250ZnMvY29tcHJlc3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmcy9jb21wcmVzcy5jXG5AQCAtMTI4Nyw2ICYjNDM7MTI4Nyw3IEBAIHN0YXRpYyBpbnQgbnRmc193cml0ZV9jYihzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGxvZmZfdCBwb3MsIHN0cnVjdCBwYWdlICoqcGFnZXMsXG4gXHQvKiBtb3JlIGNvbXByZXNzZWQgemVyb2VzLCB0byBiZSBmb2xsb3dlZCBieSBzb21lIGNvdW50ICovXG4gXHRzdGF0aWMgY2hhciBtb3JlemVyb2VzW10gPSB7MHgwMywgMHhiMCwgMHgwMiwgMHgwMH07XG4gXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzX2Rpc2sgPSBOVUxMLCAqcGc7XG4mIzQzO1x0c3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTtcbiBcdHM2NCBiaW9fbGNuO1xuIFx0c3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqcmxjLCAqcmw7XG4gXHRpbnQgaSwgZXJyO1xuQEAgLTEzOTAsMTAgJiM0MzsxMzkxLDEyIEBAIHN0YXRpYyBpbnQgbnRmc193cml0ZV9jYihzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGxvZmZfdCBwb3MsIHN0cnVjdCBwYWdlICoqcGFnZXMsXG4gXHR9XG4gXG4gXHRiaW9fbGNuID0gcmxjLVx1MDAzZWxjbjtcbiYjNDM7XHRhdHRyX2xvY2tfbmkgPSBudGZzX2F0dHJfbGlzdF9sb2NrKG5pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuIFx0ZG93bl93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuIFx0cmwgPSBudGZzX3J1bmxpc3RzX21lcmdlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QsIHJsYywgMCwgXHUwMDI2bmV3X3JsX2NvdW50KTtcbiBcdGlmIChJU19FUlIocmwpKSB7XG4gXHRcdHVwX3dyaXRlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4mIzQzO1x0XHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuIFx0XHRudGZzX2Vycm9yKHZvbC1cdTAwM2VzYiwgXCYjMzQ7RmFpbGVkIHRvIG1lcmdlIHJ1bmxpc3RzXCYjMzQ7KTtcbiBcdFx0ZXJyID0gUFRSX0VSUihybCk7XG4gXHRcdGlmIChudGZzX2NsdXN0ZXJfZnJlZV9mcm9tX3JsKHZvbCwgcmxjKSlcbkBAIC0xNDA1LDggJiM0MzsxNDA4LDkgQEAgc3RhdGljIGludCBudGZzX3dyaXRlX2NiKHN0cnVjdCBudGZzX2lub2RlICpuaSwgbG9mZl90IHBvcywgc3RydWN0IHBhZ2UgKipwYWdlcyxcbiBcdG5pLVx1MDAzZXJ1bmxpc3QuY291bnQgPSBuZXdfcmxfY291bnQ7XG4gXHRuaS1cdTAwM2VydW5saXN0LnJsID0gcmw7XG4gXG4tXHRlcnIgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIDApO1xuJiM0MztcdGVyciA9IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlyc19ub2xvY2sobmksIDApO1xuIFx0dXBfd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbiYjNDM7XHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuIFx0aWYgKGVycikge1xuIFx0XHRlcnIgPSAtRUlPO1xuIFx0XHRnb3RvIG91dDtcbmRpZmYgLS1naXQgYS9mcy9udGZzL2Rpci5jIGIvZnMvbnRmcy9kaXIuY1xuaW5kZXggNGI2YmQ1ZjMwYzY1ZWEuLjE2NTUwM2QwNTljNmRlIDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9kaXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmcy9kaXIuY1xuQEAgLTkxLDcgJiM0Mzs5MSw3IEBAIHU2NCBudGZzX2xvb2t1cF9pbm9kZV9ieV9uYW1lKHN0cnVjdCBudGZzX2lub2RlICpkaXJfbmksIGNvbnN0IF9fbGUxNiAqdW5hbWUsXG4gXHRcdFx0XHQtUFRSX0VSUihtKSk7XG4gXHRcdHJldHVybiBFUlJfTVJFRihQVFJfRVJSKG0pKTtcbiBcdH1cbi1cdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChkaXJfbmksIG0pO1xuJiM0MztcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChkaXJfbmksIG0sIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdGlmICh1bmxpa2VseSghY3R4KSkge1xuIFx0XHRlcnIgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIGVycl9vdXQ7XG5AQCAtODE0LDcgJiM0Mzs4MTQsNyBAQCBzdGF0aWMgaW50IG50ZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRpcl9jb250ZXh0ICphY3RvcilcbiBcdFx0ZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEgPSBwcml2YXRlO1xuIFx0fVxuIFxuLVx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5kaXIsIE5VTEwpO1xuJiM0MztcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuZGlyLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4gXHRpZiAoIWN0eCkge1xuIFx0XHRlcnIgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIG91dDtcbkBAIC0xMDE1LDcgJiM0MzsxMDE1LDcgQEAgaW50IG50ZnNfY2hlY2tfZW1wdHlfZGlyKHN0cnVjdCBudGZzX2lub2RlICpuaSwgc3RydWN0IG1mdF9yZWNvcmQgKm5pX21yZWMpXG4gXHRpZiAoIShuaV9tcmVjLVx1MDAzZWZsYWdzIFx1MDAyNiBNRlRfUkVDT1JEX0lTX0RJUkVDVE9SWSkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTtcbiYjNDM7XHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdGlmICghY3R4KSB7XG4gXHRcdG50ZnNfZXJyb3IobmktXHUwMDNldm9sLVx1MDAzZXNiLCBcJiMzNDtGYWlsZWQgdG8gZ2V0IHNlYXJjaCBjb250ZXh0XCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtMTExNiw3ICYjNDM7MTExNiw3IEBAIHN0YXRpYyBpbnQgbnRmc19kaXJfZnN5bmMoc3RydWN0IGZpbGUgKmZpbHAsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcbiBcdGlmIChOVm9sU2h1dGRvd24odm9sKSlcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4tXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwpO1xuJiM0MztcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0aWYgKCFjdHgpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL250ZnMvZWEuYyBiL2ZzL250ZnMvZWEuY1xuaW5kZXggMGNkMTkyNzUyYjdjZDcuLjI4NGM5ODU4MDdhNmU2IDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9lYS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9udGZzL2VhLmNcbkBAIC01ODcsNyAmIzQzOzU4Nyw3IEBAIHN0YXRpYyBpbnQgbnRmc19uZXdfYXR0cl9mbGFncyhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIF9fbGUzMiBmYXR0cilcbiBcdGlmIChJU19FUlIobSkpXG4gXHRcdHJldHVybiBQVFJfRVJSKG0pO1xuIFxuLVx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBtKTtcbiYjNDM7XHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIG0sIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdGlmICghY3R4KSB7XG4gXHRcdGVyciA9IC1FTk9NRU07XG4gXHRcdGdvdG8gZXJyX291dDtcbmRpZmYgLS1naXQgYS9mcy9udGZzL2ZpbGUuYyBiL2ZzL250ZnMvZmlsZS5jXG5pbmRleCA2YTdiNjM4ZTUyM2Q5MS4uZGNiNTU1NGZmMWI3MTcgMTAwNjQ0XG4tLS0gYS9mcy9udGZzL2ZpbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmcy9maWxlLmNcbkBAIC0yMyw2ICYjNDM7MjMsNyBAQFxuICNpbmNsdWRlIFwmIzM0O2lvbWFwLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtiaXRtYXAuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZvbHVtZS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2F0dHJpYi5oXCYjMzQ7XG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmlsZWxvY2suaFx1MDAzZVxuIFxuQEAgLTc5LDYgJiM0Mzs4MCw3IEBAIHN0YXRpYyBpbnQgbnRmc190cmltX3ByZWFsbG9jKHN0cnVjdCBpbm9kZSAqdmkpXG4ge1xuIFx0c3RydWN0IG50ZnNfaW5vZGUgKm5pID0gTlRGU19JKHZpKTtcbiBcdHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sID0gbmktXHUwMDNldm9sO1xuJiM0MztcdHN0cnVjdCBudGZzX2lub2RlICphdHRyX2xvY2tfbmk7XG4gXHRzdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpybDtcbiBcdHM2NCBhbGlnbmVkX2RhdGFfc2l6ZTtcbiBcdHM2NCB2Y25fZHMsIHZjbl90cjtcbkBAIC04Nyw2ICYjNDM7ODksNyBAQCBzdGF0aWMgaW50IG50ZnNfdHJpbV9wcmVhbGxvYyhzdHJ1Y3QgaW5vZGUgKnZpKVxuIFxuIFx0aW5vZGVfbG9jayh2aSk7XG4gXHRtdXRleF9sb2NrKFx1MDAyNm5pLVx1MDAzZW1yZWNfbG9jayk7XG4mIzQzO1x0YXR0cl9sb2NrX25pID0gbnRmc19hdHRyX2xpc3RfbG9jayhuaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcbiBcdGRvd25fd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbiBcbiBcdGFsaWduZWRfZGF0YV9zaXplID0gcm91bmRfdXAobmktXHUwMDNlZGF0YV9zaXplLCB2b2wtXHUwMDNlY2x1c3Rlcl9zaXplKTtcbkBAIC0xMTEsNyAmIzQzOzExNCw3IEBAIHN0YXRpYyBpbnQgbnRmc190cmltX3ByZWFsbG9jKHN0cnVjdCBpbm9kZSAqdmkpXG4gXHRcdFx0bnRmc19lcnJvcih2b2wtXHUwMDNlc2IsIFwmIzM0O1ByZWFsbG9jYXRlZCBibG9jayByb2xsYmFjayBmYWlsZWRcJiMzNDspO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdG5pLVx1MDAzZWFsbG9jYXRlZF9zaXplID0gbnRmc19jbHVzdGVyX3RvX2J5dGVzKHZvbCwgdmNuX3RyKTtcbi1cdFx0XHRlcnIgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIDApO1xuJiM0MztcdFx0XHRlcnIgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNfbm9sb2NrKG5pLCAwKTtcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0bnRmc19lcnJvcih2b2wtXHUwMDNlc2IsXG4gXHRcdFx0XHRcdCAgIFwmIzM0O0ZhaWxlZCB0byByb2xsYmFjayBtYXBwaW5nIHBhaXJzIGZvciBwcmVhbGxvY1wmIzM0Oyk7XG5AQCAtMTIwLDYgJiM0MzsxMjMsNyBAQCBzdGF0aWMgaW50IG50ZnNfdHJpbV9wcmVhbGxvYyhzdHJ1Y3QgaW5vZGUgKnZpKVxuIFxuIG91dF91bmxvY2s6XG4gXHR1cF93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuJiM0MztcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2bmktXHUwMDNlbXJlY19sb2NrKTtcbiBcdGlub2RlX3VubG9jayh2aSk7XG4gXG5AQCAtMTc3LDcgJiM0MzsxODEsNyBAQCBzdGF0aWMgaW50IG50ZnNfZmlsZV9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlscCwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxuIFx0XHRyZXQgPSBfX250ZnNfd3JpdGVfaW5vZGUodmksIDEpO1xuIFx0d3JpdGVfaW5vZGVfbm93KHZpLCAhZGF0YXN5bmMpO1xuIFxuLVx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTtcbiYjNDM7XHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdGlmICghY3R4KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0xMDU3LDYgJiM0MzsxMDYxLDcgQEAgc3RhdGljIGxvbmcgbnRmc19mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVcbiBcdHN0cnVjdCBpbm9kZSAqdmkgPSBmaWxlX2lub2RlKGZpbGUpO1xuIFx0c3RydWN0IG50ZnNfaW5vZGUgKm5pID0gTlRGU19JKHZpKTtcbiBcdHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sID0gbmktXHUwMDNldm9sO1xuJiM0MztcdHN0cnVjdCBudGZzX2lub2RlICphdHRyX2xvY2tfbmk7XG4gXHRpbnQgZXJyID0gMDtcbiBcdGxvZmZfdCBvbGRfc2l6ZTtcbiBcdGJvb2wgbWFwX2xvY2tlZCA9IGZhbHNlO1xuQEAgLTEwNzEsOSAmIzQzOzEwNzYsMTEgQEAgc3RhdGljIGxvbmcgbnRmc19mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVcbiBcdFx0cmV0dXJuIC1FTk9TUEM7XG4gXG4gXHRpZiAoTklub05vblJlc2lkZW50KG5pKSBcdTAwMjZcdTAwMjYgIU5Jbm9GdWxseU1hcHBlZChuaSkpIHtcbiYjNDM7XHRcdGF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdFx0ZG93bl93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuLVx0XHRlcnIgPSBudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3QobmkpO1xuJiM0MztcdFx0ZXJyID0gbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0X25vbG9jayhuaSk7XG4gXHRcdHVwX3dyaXRlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4mIzQzO1x0XHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbmRpZmYgLS1naXQgYS9mcy9udGZzL2luZGV4LmMgYi9mcy9udGZzL2luZGV4LmNcbmluZGV4IGM1ZjJjZjc1Yjc1MGU5Li4zNmE3MGFhYTllMmRlNyAxMDA2NDRcbi0tLSBhL2ZzL250ZnMvaW5kZXguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmcy9pbmRleC5jXG5AQCAtNTc1LDcgJiM0Mzs1NzUsNyBAQCBzdGF0aWMgc3RydWN0IGluZGV4X3Jvb3QgKm50ZnNfaXJfbG9va3VwKHN0cnVjdCBudGZzX2lub2RlICpuaSwgX19sZTE2ICpuYW1lLFxuIFx0c3RydWN0IGluZGV4X3Jvb3QgKmlyID0gTlVMTDtcbiBcbiBcdG50ZnNfZGVidWcoXCYjMzQ7RW50ZXJpbmdcXG5cJiMzNDspO1xuLVx0KmN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCk7XG4mIzQzO1x0KmN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcbiBcdGlmICghKmN0eCkge1xuIFx0XHRudGZzX2Vycm9yKG5pLVx1MDAzZXZvbC1cdTAwM2VzYiwgXCYjMzQ7JXMsIEZhaWxlZCB0byBnZXQgc2VhcmNoIGNvbnRleHRcJiMzNDssIF9fZnVuY19fKTtcbiBcdFx0cmV0dXJuIE5VTEw7XG5AQCAtMTMzMiw3ICYjNDM7MTMzMiw4IEBAIHN0YXRpYyBpbnQgbnRmc19pcl9yZXBhcmVudChzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gpXG4gXHQgKiBXaGVuIHRoZXJlIGlzIG5vIHNwYWNlIHRvIGJ1aWxkIGEgbm9uLXJlc2lkZW50XG4gXHQgKiBpbmRleCwgd2UgbWF5IGhhdmUgdG8gbW92ZSB0aGUgcm9vdCB0byBhbiBleHRlbnRcbiBcdCAqL1xuLVx0aWYgKChyZXQgPT0gLUVOT1NQQykgXHUwMDI2XHUwMDI2IChjdHgtXHUwMDNlYWxfZW50cnkgfHwgIW50ZnNfaW5vZGVfYWRkX2F0dHJsaXN0KGljeC1cdTAwM2VpZHhfbmkpKSkge1xuJiM0MztcdGlmICgocmV0ID09IC1FTk9TUEMpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAoY3R4LVx1MDAzZWFsX2VudHJ5IHx8ICFudGZzX2lub2RlX2FkZF9hdHRybGlzdF9ub2xvY2soaWN4LVx1MDAzZWlkeF9uaSkpKSB7XG4gXHRcdG50ZnNfYXR0cl9wdXRfc2VhcmNoX2N0eChjdHgpO1xuIFx0XHRjdHggPSBOVUxMO1xuIFx0XHRpciA9IG50ZnNfaXJfbG9va3VwKGljeC1cdTAwM2VpZHhfbmksIGljeC1cdTAwM2VuYW1lLCBpY3gtXHUwMDNlbmFtZV9sZW4sIFx1MDAyNmN0eCk7XG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9pbm9kZS5jIGIvZnMvbnRmcy9pbm9kZS5jXG5pbmRleCBjMjcxNTUyMWU1NjI4Ni4uOGVkNmNiNWI5YzQyZjggMTAwNjQ0XG4tLS0gYS9mcy9udGZzL2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL250ZnMvaW5vZGUuY1xuQEAgLTMyNiw3ICYjNDM7MzI2LDcgQEAgc3RhdGljIGludCBudGZzX25vbl9yZXNpZGVudF9kZWFsbG9jX2NsdXN0ZXJzKHN0cnVjdCBudGZzX2lub2RlICpuaSlcbiBcdHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqYWN0eDtcbiBcdGludCBlcnIgPSAwO1xuIFxuLVx0YWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCk7XG4mIzQzO1x0YWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0aWYgKCFhY3R4KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdFdBUk5fT04oYWN0eC1cdTAwM2VtcmVjLVx1MDAzZWxpbmtfY291bnQgIT0gMCk7XG5AQCAtNDc1LDYgJiM0Mzs0NzUsNyBAQCB2b2lkIF9fbnRmc19pbml0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBudGZzX2lub2RlICpuaSlcbiBcdG5pLVx1MDAzZWZvbGlvID0gTlVMTDtcbiBcdG5pLVx1MDAzZWZvbGlvX29mcyA9IDA7XG4gXHRuaS1cdTAwM2VtcmVjID0gTlVMTDtcbiYjNDM7XHRpbml0X3J3c2VtKFx1MDAyNm5pLVx1MDAzZWF0dHJfbGlzdF9sb2NrKTtcbiBcdG5pLVx1MDAzZWF0dHJfbGlzdF9zaXplID0gMDtcbiBcdG5pLVx1MDAzZWF0dHJfbGlzdCA9IE5VTEw7XG4gXHRuaS1cdTAwM2VpdHlwZS5pbmRleC5ibG9ja19zaXplID0gMDtcbkBAIC03MTMsNyAmIzQzOzcxNCw3IEBAIHN0YXRpYyBpbnQgbnRmc19yZWFkX2xvY2tlZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKnZpKVxuIFx0XHRnb3RvIGVycl9vdXQ7XG4gXHR9XG4gXG4tXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIG0pO1xuJiM0MztcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgbSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0aWYgKCFjdHgpIHtcbiBcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0Z290byB1bm1fZXJyX291dDtcbkBAIC0xMjgwLDcgJiM0MzsxMjgxLDcgQEAgc3RhdGljIGludCBudGZzX3JlYWRfbG9ja2VkX2F0dHJfaW5vZGUoc3RydWN0IGlub2RlICpiYXNlX3ZpLCBzdHJ1Y3QgaW5vZGUgKnZpKVxuIFx0XHRlcnIgPSBQVFJfRVJSKG0pO1xuIFx0XHRnb3RvIGVycl9vdXQ7XG4gXHR9XG4tXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoYmFzZV9uaSwgbSk7XG4mIzQzO1x0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KGJhc2VfbmksIG0sIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdGlmICghY3R4KSB7XG4gXHRcdGVyciA9IC1FTk9NRU07XG4gXHRcdGdvdG8gdW5tX2Vycl9vdXQ7XG5AQCAtMTUyMCw3ICYjNDM7MTUyMSw3IEBAIHN0YXRpYyBpbnQgbnRmc19yZWFkX2xvY2tlZF9pbmRleF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmJhc2VfdmksIHN0cnVjdCBpbm9kZSAqdmkpXG4gXHRcdGVyciA9IFBUUl9FUlIobSk7XG4gXHRcdGdvdG8gZXJyX291dDtcbiBcdH1cbi1cdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChiYXNlX25pLCBtKTtcbiYjNDM7XHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoYmFzZV9uaSwgbSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0aWYgKCFjdHgpIHtcbiBcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0Z290byB1bm1fZXJyX291dDtcbkBAIC0xOTExLDcgJiM0MzsxOTEyLDcgQEAgaW50IG50ZnNfcmVhZF9pbm9kZV9tb3VudChzdHJ1Y3QgaW5vZGUgKnZpKVxuIFx0LyogUHJvdmlkZXMgcmVhZF9mb2xpbygpIGZvciBtYXBfbWZ0X3JlY29yZCgpLiAqL1xuIFx0dmktXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID0gXHUwMDI2bnRmc19tZnRfYW9wcztcbiBcbi1cdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgbSk7XG4mIzQzO1x0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBtLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4gXHRpZiAoIWN0eCkge1xuIFx0XHRlcnIgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIGVycl9vdXQ7XG5AQCAtMjQ2Niw3ICYjNDM7MjQ2Nyw3IEBAIHN0YXRpYyBpbnQgbnRmc19pbm9kZV9zeW5jX3N0YW5kYXJkX2luZm9ybWF0aW9uKHN0cnVjdCBpbm9kZSAqdmksIHN0cnVjdCBtZnRfcmVjXG4gXHRib29sIG1vZGlmaWVkID0gZmFsc2U7XG4gXG4gXHQvKiBVcGRhdGUgdGhlIGFjY2VzcyB0aW1lcyBpbiB0aGUgc3RhbmRhcmQgaW5mb3JtYXRpb24gYXR0cmlidXRlLiAqL1xuLVx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBtKTtcbiYjNDM7XHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIG0sIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdGlmICh1bmxpa2VseSghY3R4KSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRlcnIgPSBudGZzX2F0dHJfbG9va3VwKEFUX1NUQU5EQVJEX0lORk9STUFUSU9OLCBOVUxMLCAwLFxuQEAgLTI1NjcsNyAmIzQzOzI1NjgsNyBAQCBpbnQgbnRmc19pbm9kZV9zeW5jX2ZpbGVuYW1lKHN0cnVjdCBudGZzX2lub2RlICpuaSlcbiBcbiBcdG50ZnNfZGVidWcoXCYjMzQ7RW50ZXJpbmcgZm9yIGlub2RlICVsbHVcXG5cJiMzNDssIG5pLVx1MDAzZW1mdF9ubyk7XG4gXG4tXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwpO1xuJiM0MztcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0aWYgKCFjdHgpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTI3NTksMTEgJiM0MzsyNzYwLDE1IEBAIGludCBfX250ZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICp2aSwgaW50IHN5bmMpXG4gXHR9XG4gXG4gXHRpZiAoTklub05vblJlc2lkZW50KG5pKSBcdTAwMjZcdTAwMjYgTklub1J1bmxpc3REaXJ0eShuaSkpIHtcbiYjNDM7XHRcdHN0cnVjdCBudGZzX2lub2RlICphdHRyX2xvY2tfbmk7XG4mIzQzO1xuJiM0MztcdFx0YXR0cl9sb2NrX25pID0gbnRmc19hdHRyX2xpc3RfbG9jayhuaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcbiBcdFx0ZG93bl93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuLVx0XHRlcnIgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIDApO1xuJiM0MztcdFx0ZXJyID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzX25vbG9jayhuaSwgMCk7XG4gXHRcdGlmICghZXJyKVxuIFx0XHRcdE5Jbm9DbGVhclJ1bmxpc3REaXJ0eShuaSk7XG4gXHRcdHVwX3dyaXRlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4mIzQzO1x0XHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuIFx0fVxuIFxuIFx0ZXJyID0gbnRmc19pbm9kZV9zeW5jX3N0YW5kYXJkX2luZm9ybWF0aW9uKHZpLCBtKTtcbkBAIC0yOTgyLDcgJiM0MzsyOTg3LDcgQEAgc3RhdGljIHN0cnVjdCBudGZzX2lub2RlICpudGZzX2V4dGVudF9pbm9kZV9vcGVuKHN0cnVjdCBudGZzX2lub2RlICpiYXNlX25pLFxuICAqXG4gICogUmV0dXJuIDAgb24gc3VjY2VzcyBhbmQgZXJyb3IuXG4gICovXG4taW50IG50ZnNfaW5vZGVfYXR0YWNoX2FsbF9leHRlbnRzKHN0cnVjdCBudGZzX2lub2RlICpuaSlcbiYjNDM7aW50IG50ZnNfaW5vZGVfYXR0YWNoX2FsbF9leHRlbnRzX25vbG9jayhzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXG4ge1xuIFx0c3RydWN0IGF0dHJfbGlzdF9lbnRyeSAqYWxlO1xuIFx0dTY0IHByZXZfYXR0YWNoZWQgPSAwO1xuQEAgLTMwMjIsMTMgJiM0MzszMDI3LDI1IEBAIGludCBudGZzX2lub2RlX2F0dGFjaF9hbGxfZXh0ZW50cyhzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO2ludCBudGZzX2lub2RlX2F0dGFjaF9hbGxfZXh0ZW50cyhzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiYjNDM7XHRlcnIgPSBudGZzX2lub2RlX2F0dGFjaF9hbGxfZXh0ZW50c19ub2xvY2sobmkpO1xuJiM0MztcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIG50ZnNfaW5vZGVfYWRkX2F0dHJsaXN0IC0gYWRkIGF0dHJpYnV0ZSBsaXN0IHRvIGlub2RlIGFuZCBmaWxsIGl0XG4gICogQG5pOiBvcGVuZWQgbnRmcyBpbm9kZSB0byB3aGljaCBhZGQgYXR0cmlidXRlIGxpc3RcbiAgKlxuICAqIFJldHVybiAwIG9uIHN1Y2Nlc3Mgb3IgZXJyb3IuXG4gICovXG4taW50IG50ZnNfaW5vZGVfYWRkX2F0dHJsaXN0KHN0cnVjdCBudGZzX2lub2RlICpuaSlcbiYjNDM7aW50IG50ZnNfaW5vZGVfYWRkX2F0dHJsaXN0X25vbG9jayhzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXG4ge1xuIFx0aW50IGVycjtcbiBcdHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4O1xuQEAgLTMwNTMsNyAmIzQzOzMwNzAsNyBAQCBpbnQgbnRmc19pbm9kZV9hZGRfYXR0cmxpc3Qoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxuIFx0XHRyZXR1cm4gLUVJTztcbiBcbiBcdC8qIEZvcm0gYXR0cmlidXRlIGxpc3QuICovXG4tXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIG5pX21yZWMpO1xuJiM0MztcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgbmlfbXJlYywgTlRGU19BVFRSX0NUWF9MT0NLX05PTkUpO1xuIFx0aWYgKCFjdHgpIHtcbiBcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0Z290byBlcnJfb3V0O1xuQEAgLTMxMTEsNyAmIzQzOzMxMjgsNiBAQCBpbnQgbnRmc19pbm9kZV9hZGRfYXR0cmxpc3Qoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxuIFx0XHRnb3RvIHB1dF9lcnJfb3V0O1xuIFx0fVxuIFxuLVx0LyogU2V0IGluLW1lbW9yeSBhdHRyaWJ1dGUgbGlzdC4gKi9cbiBcdG5pLVx1MDAzZWF0dHJfbGlzdCA9IGFsO1xuIFx0bmktXHUwMDNlYXR0cl9saXN0X3NpemUgPSBhbF9sZW47XG4gXHROSW5vU2V0QXR0ckxpc3QobmkpO1xuQEAgLTMxMjEsNyAmIzQzOzMxMzcsNyBAQCBpbnQgbnRmc19pbm9kZV9hZGRfYXR0cmxpc3Qoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxuIFx0LyogRnJlZSBzcGFjZSBpZiB0aGVyZSBpcyBub3QgZW5vdWdoIGl0IGZvciAkQVRUUklCVVRFX0xJU1QuICovXG4gXHRpZiAobGUzMl90b19jcHUobmlfbXJlYy1cdTAwM2VieXRlc19hbGxvY2F0ZWQpIC1cbiBcdFx0XHRsZTMyX3RvX2NwdShuaV9tcmVjLVx1MDAzZWJ5dGVzX2luX3VzZSkgXHUwMDNjIGF0dHJfYWxfbGVuKSB7XG4tXHRcdGlmIChudGZzX2lub2RlX2ZyZWVfc3BhY2UobmksIChpbnQpYXR0cl9hbF9sZW4pKSB7XG4mIzQzO1x0XHRpZiAobnRmc19pbm9kZV9mcmVlX3NwYWNlX25vbG9jayhuaSwgKGludClhdHRyX2FsX2xlbikpIHtcbiBcdFx0XHQvKiBGYWlsZWQgdG8gZnJlZSBzcGFjZS4gKi9cbiBcdFx0XHRlcnIgPSAtRU5PU1BDO1xuIFx0XHRcdG50ZnNfZXJyb3IobmktXHUwMDNldm9sLVx1MDAzZXNiLCBcJiMzNDtGYWlsZWQgdG8gZnJlZSBzcGFjZSBmb3IgYXR0cmxpc3RcJiMzNDspO1xuQEAgLTMxNDgsNiAmIzQzOzMxNjQsNyBAQCBpbnQgbnRmc19pbm9kZV9hZGRfYXR0cmxpc3Qoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxuIHJlbW92ZV9hdHRybGlzdF9yZWNvcmQ6XG4gXHQvKiBQcmV2ZW50IG50ZnNfYXR0cl9yZWNvcm1fcm0gZnJvbSBmcmVlaW5nIGF0dHJpYnV0ZSBsaXN0LiAqL1xuIFx0bmktXHUwMDNlYXR0cl9saXN0ID0gTlVMTDtcbiYjNDM7XHRuaS1cdTAwM2VhdHRyX2xpc3Rfc2l6ZSA9IDA7XG4gXHROSW5vQ2xlYXJBdHRyTGlzdChuaSk7XG4gXHQvKiBSZW1vdmUgJEFUVFJJQlVURV9MSVNUIHJlY29yZC4gKi9cbiBcdG50ZnNfYXR0cl9yZWluaXRfc2VhcmNoX2N0eChjdHgpO1xuQEAgLTMyMDEsNiAmIzQzOzMyMTgsMTggQEAgaW50IG50ZnNfaW5vZGVfYWRkX2F0dHJsaXN0KHN0cnVjdCBudGZzX2lub2RlICpuaSlcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuJiM0MztpbnQgbnRmc19pbm9kZV9hZGRfYXR0cmxpc3Qoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRhdHRyX2xvY2tfbmkgPSBudGZzX2F0dHJfbGlzdF9sb2NrKG5pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuJiM0MztcdGVyciA9IG50ZnNfaW5vZGVfYWRkX2F0dHJsaXN0X25vbG9jayhuaSk7XG4mIzQzO1x0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIG50ZnNfaW5vZGVfY2xvc2UgLSBjbG9zZSBhbiBudGZzIGlub2RlIGFuZCBmcmVlIGFsbCBhc3NvY2lhdGVkIG1lbW9yeVxuICAqIEBuaTpcdFx0bnRmcyBpbm9kZSB0byBjbG9zZVxuQEAgLTMzNDQsNyAmIzQzOzMzNzMsOCBAQCBzdGF0aWMgaW50IG50ZnNfYXR0cl9wb3NpdGlvbihfX2xlMzIgdHlwZSwgc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpXG4gICpcbiAgKiBSZXR1cm4gMCBvbiBzdWNjZXNzIG9yIGVycm9yLlxuICAqL1xuLWludCBudGZzX2lub2RlX2ZyZWVfc3BhY2Uoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBpbnQgc2l6ZSlcbiYjNDM7c3RhdGljIGludCBfX250ZnNfaW5vZGVfZnJlZV9zcGFjZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGludCBzaXplLFxuJiM0MztcdFx0XHRcdCAgIGVudW0gbnRmc19hdHRyX3NlYXJjaF9jdHhfbG9ja19tb2RlIGxvY2tfbW9kZSlcbiB7XG4gXHRzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eDtcbiBcdGludCBmcmVlZCwgZXJyO1xuQEAgLTMzNjgsNyAmIzQzOzMzOTgsNyBAQCBpbnQgbnRmc19pbm9kZV9mcmVlX3NwYWNlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgaW50IHNpemUpXG4gXHRpZiAoc2l6ZSBcdTAwM2M9IGZyZWVkKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCk7XG4mIzQzO1x0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMLCBsb2NrX21vZGUpO1xuIFx0aWYgKCFjdHgpIHtcbiBcdFx0bnRmc19lcnJvcihzYiwgXCYjMzQ7JXMsIEZhaWxlZCB0byBnZXQgc2VhcmNoIGNvbnRleHRcJiMzNDssIF9fZnVuY19fKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtMzQ1NCw2ICYjNDM7MzQ4NCwyMyBAQCBpbnQgbnRmc19pbm9kZV9mcmVlX3NwYWNlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgaW50IHNpemUpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjNDM7aW50IG50ZnNfaW5vZGVfZnJlZV9zcGFjZV9ub2xvY2soc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBpbnQgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBfX250ZnNfaW5vZGVfZnJlZV9zcGFjZShuaSwgc2l6ZSwgTlRGU19BVFRSX0NUWF9MT0NLX05PTkUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbnRmc19pbm9kZV9mcmVlX3NwYWNlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgaW50IHNpemUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4mIzQzO1x0ZXJyID0gX19udGZzX2lub2RlX2ZyZWVfc3BhY2UobmksIHNpemUsIE5URlNfQVRUUl9DVFhfTE9DS19OT05FKTtcbiYjNDM7XHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuIHM2NCBudGZzX2lub2RlX2F0dHJfcHJlYWQoc3RydWN0IGlub2RlICp2aSwgczY0IHBvcywgczY0IGNvdW50LCB1OCAqYnVmKVxuIHtcbiBcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gdmktXHUwMDNlaV9tYXBwaW5nO1xuQEAgLTM0NzgsMTAgJiM0MzszNTI1LDExIEBAIHM2NCBudGZzX2lub2RlX2F0dHJfcHJlYWQoc3RydWN0IGlub2RlICp2aSwgczY0IHBvcywgczY0IGNvdW50LCB1OCAqYnVmKVxuIFx0XHRjb3VudCA9IGlzaXplIC0gcG9zO1xuIFxuIFx0aWYgKCFOSW5vTm9uUmVzaWRlbnQobmkpKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgbnRmc19pbm9kZSAqYmFzZV9uaSA9IG5pLVx1MDAzZWV4dC5iYXNlX250ZnNfaW5vO1xuIFx0XHRzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eDtcbiBcdFx0dTggKmF0dHI7XG4gXG4tXHRcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaS1cdTAwM2VleHQuYmFzZV9udGZzX2lubywgTlVMTCk7XG4mIzQzO1x0XHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoYmFzZV9uaSwgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0XHRpZiAoIWN0eCkge1xuIFx0XHRcdG50ZnNfZXJyb3IodmktXHUwMDNlaV9zYiwgXCYjMzQ7RmFpbGVkIHRvIGdldCBhdHRyIHNlYXJjaCBjdHhcJiMzNDspO1xuIFx0XHRcdGVyciA9IC1FTk9NRU07XG5AQCAtMzY2OSw2ICYjNDM7MzcxNyw4IEBAIHN0YXRpYyBzNjQgX19udGZzX2lub2RlX25vbl9yZXNpZGVudF9hdHRyX3B3cml0ZShzdHJ1Y3QgaW5vZGUgKnZpLFxuIFxuIFx0XHRpZiAoc3luYykge1xuIFx0XHRcdHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sID0gbmktXHUwMDNldm9sO1xuJiM0MztcdFx0XHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pO1xuJiM0MztcdFx0XHRlbnVtIG50ZnNfYXR0cl9zZWFyY2hfY3R4X2xvY2tfbW9kZSBtb2RlO1xuIFx0XHRcdHM2NCBsY24sIGxjbl9jb3VudDtcbiBcdFx0XHR1bnNpZ25lZCBpbnQgbGNuX2ZvbGlvX29mZiA9IDA7XG4gXHRcdFx0c3RydWN0IGJpbyAqYmlvO1xuQEAgLTM2NzgsMTMgJiM0MzszNzI4LDE2IEBAIHN0YXRpYyBzNjQgX19udGZzX2lub2RlX25vbl9yZXNpZGVudF9hdHRyX3B3cml0ZShzdHJ1Y3QgaW5vZGUgKnZpLFxuIFxuIFx0XHRcdGxjbl9jb3VudCA9IG1heF90KHM2NCwgMSwgbnRmc19ieXRlc190b19jbHVzdGVyKHZvbCwgYXR0cl9sZW4pKTtcbiBcdFx0XHR2Y24gPSBudGZzX3BpZHhfdG9fY2x1c3Rlcih2b2wsIGZvbGlvLVx1MDAzZWluZGV4KTtcbiYjNDM7XHRcdFx0bW9kZSA9IE5URlNfQVRUUl9DVFhfTE9DS19SRUFEO1xuIFxuIFx0XHRcdGRvIHtcbiYjNDM7XHRcdFx0XHRhdHRyX2xvY2tfbmkgPSBudGZzX2F0dHJfbGlzdF9sb2NrKG5pLCBtb2RlKTtcbiBcdFx0XHRcdGRvd25fd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbiBcdFx0XHRcdHJsID0gbnRmc19hdHRyX3Zjbl90b19ybChuaSwgdmNuLCBcdTAwMjZsY24pO1xuIFx0XHRcdFx0aWYgKElTX0VSUihybCkpIHtcbiBcdFx0XHRcdFx0cmV0ID0gUFRSX0VSUihybCk7XG4gXHRcdFx0XHRcdHVwX3dyaXRlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4mIzQzO1x0XHRcdFx0XHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBtb2RlKTtcbiBcdFx0XHRcdFx0Z290byBlcnJfdW5sb2NrX2ZvbGlvO1xuIFx0XHRcdFx0fVxuIFxuQEAgLTM2OTYsNiAmIzQzOzM3NDksNyBAQCBzdGF0aWMgczY0IF9fbnRmc19pbm9kZV9ub25fcmVzaWRlbnRfYXR0cl9wd3JpdGUoc3RydWN0IGlub2RlICp2aSxcbiBcdFx0XHRcdFx0bGNuX2NvdW50ID0gMDtcbiBcdFx0XHRcdH1cbiBcdFx0XHRcdHVwX3dyaXRlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4mIzQzO1x0XHRcdFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgbW9kZSk7XG4gXG4gXHRcdFx0XHRpZiAodm9sLVx1MDAzZWNsdXN0ZXJfc2l6ZV9iaXRzIFx1MDAzZSBQQUdFX1NISUZUKSB7XG4gXHRcdFx0XHRcdGxjbl9mb2xpb19vZmYgPSBmb2xpby1cdTAwM2VpbmRleCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbkBAIC0zNzU2LDcgJiM0MzszODEwLDcgQEAgczY0IG50ZnNfaW5vZGVfYXR0cl9wd3JpdGUoc3RydWN0IGlub2RlICp2aSwgczY0IHBvcywgczY0IGNvdW50LCB1OCAqYnVmLCBib29sIHNcbiBcbiBcdFdBUk5fT04oIU5Jbm9BdHRyKG5pKSk7XG4gXG4tXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmktXHUwMDNlZXh0LmJhc2VfbnRmc19pbm8sIE5VTEwpO1xuJiM0MztcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaS1cdTAwM2VleHQuYmFzZV9udGZzX2lubywgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0aWYgKCFjdHgpIHtcbiBcdFx0bnRmc19lcnJvcih2aS1cdTAwM2VpX3NiLCBcJiMzNDtGYWlsZWQgdG8gZ2V0IGF0dHIgc2VhcmNoIGN0eFwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuZGlmZiAtLWdpdCBhL2ZzL250ZnMvaW5vZGUuaCBiL2ZzL250ZnMvaW5vZGUuaFxuaW5kZXggOWFhY2Q1Nzg3ZmZlYTAuLjRkMGZiZDUzZTFjNGFjIDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9pbm9kZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9udGZzL2lub2RlLmhcbkBAIC0xMCw2ICYjNDM7MTAsOCBAQFxuICNpZm5kZWYgX0xJTlVYX05URlNfSU5PREVfSFxuICNkZWZpbmUgX0xJTlVYX05URlNfSU5PREVfSFxuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9yd3NlbS5oXHUwMDNlXG4mIzQzO1xuICNpbmNsdWRlIFwmIzM0O2RlYnVnLmhcJiMzNDtcbiBcbiBlbnVtIG50ZnNfaW5vZGVfbXV0ZXhfbG9ja19jbGFzcyB7XG5AQCAtNjYsNiAmIzQzOzY4LDcgQEAgZW51bSBudGZzX2lub2RlX211dGV4X2xvY2tfY2xhc3Mge1xuICAqIEF0dHJpYnV0ZSBsaXN0IHN1cHBvcnQgKG9ubHkgZm9yIHVzZSBieSB0aGUgYXR0cmlidXRlIGxvb2t1cFxuICAqIGZ1bmN0aW9ucykuIFNldHVwIGR1cmluZyByZWFkX2lub2RlIGZvciBhbGwgaW5vZGVzIHdpdGggYXR0cmlidXRlXG4gICogbGlzdHMuIE9ubHkgdmFsaWQgaWYgTklfQXR0ckxpc3QgaXMgc2V0IGluIHN0YXRlLlxuJiM0MzsgKiBAYXR0cl9saXN0X2xvY2s6IFNlcmlhbGl6ZXMgYXR0cmlidXRlIGxpc3QgcG9pbnRlciB1cGRhdGVzIHdpdGggbG9va3Vwcy5cbiAgKiBAYXR0cl9saXN0X3NpemU6IExlbmd0aCBvZiBhdHRyaWJ1dGUgbGlzdCB2YWx1ZSBpbiBieXRlcy5cbiAgKiBAYXR0cl9saXN0OiBBdHRyaWJ1dGUgbGlzdCB2YWx1ZSBpdHNlbGYuXG4gICpcbkBAIC0xMTgsNiAmIzQzOzEyMSw3IEBAIHN0cnVjdCBudGZzX2lub2RlIHtcbiBcdGludCBmb2xpb19vZnM7XG4gXHRzNjQgbWZ0X2xjblsyXTtcbiBcdHVuc2lnbmVkIGludCBtZnRfbGNuX2NvdW50O1xuJiM0MztcdHN0cnVjdCByd19zZW1hcGhvcmUgYXR0cl9saXN0X2xvY2s7XG4gXHR1MzIgYXR0cl9saXN0X3NpemU7XG4gXHR1OCAqYXR0cl9saXN0O1xuIFx0dW5pb24ge1xuQEAgLTMzNiw5ICYjNDM7MzQwLDEyIEBAIGludCBudGZzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLFxuIFxuIGludCBudGZzX2dldF9ibG9ja19tZnRfcmVjb3JkKHN0cnVjdCBudGZzX2lub2RlICptZnRfbmksIHN0cnVjdCBudGZzX2lub2RlICpuaSk7XG4gaW50IF9fbnRmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKnZpLCBpbnQgc3luYyk7XG4mIzQzO2ludCBudGZzX2lub2RlX2F0dGFjaF9hbGxfZXh0ZW50c19ub2xvY2soc3RydWN0IG50ZnNfaW5vZGUgKm5pKTtcbiBpbnQgbnRmc19pbm9kZV9hdHRhY2hfYWxsX2V4dGVudHMoc3RydWN0IG50ZnNfaW5vZGUgKm5pKTtcbiYjNDM7aW50IG50ZnNfaW5vZGVfYWRkX2F0dHJsaXN0X25vbG9jayhzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpO1xuIGludCBudGZzX2lub2RlX2FkZF9hdHRybGlzdChzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpO1xuIHZvaWQgbnRmc19kZXN0cm95X2V4dF9pbm9kZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpO1xuJiM0MztpbnQgbnRmc19pbm9kZV9mcmVlX3NwYWNlX25vbG9jayhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGludCBzaXplKTtcbiBpbnQgbnRmc19pbm9kZV9mcmVlX3NwYWNlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgaW50IHNpemUpO1xuIHM2NCBudGZzX2lub2RlX2F0dHJfcHJlYWQoc3RydWN0IGlub2RlICp2aSwgczY0IHBvcywgczY0IGNvdW50LCB1OCAqYnVmKTtcbiBzNjQgbnRmc19pbm9kZV9hdHRyX3B3cml0ZShzdHJ1Y3QgaW5vZGUgKnZpLCBzNjQgcG9zLCBzNjQgY291bnQsIHU4ICpidWYsXG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9pb21hcC5jIGIvZnMvbnRmcy9pb21hcC5jXG5pbmRleCA1MmVlY2Y1Y2IyNTZhYS4uM2FmMmM2ZDMyYjBmNzAgMTAwNjQ0XG4tLS0gYS9mcy9udGZzL2lvbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL250ZnMvaW9tYXAuY1xuQEAgLTk1LDcgJiM0Mzs5NSw3IEBAIHN0YXRpYyBpbnQgbnRmc19yZWFkX2lvbWFwX2JlZ2luX3Jlc2lkZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvXG4gXHRlbHNlXG4gXHRcdGJhc2VfbmkgPSBuaTtcbiBcbi1cdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChiYXNlX25pLCBOVUxMKTtcbiYjNDM7XHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoYmFzZV9uaSwgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0aWYgKCFjdHgpIHtcbiBcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0Z290byBvdXQ7XG5AQCAtMTg3LDYgJiM0MzsxODcsNyBAQCBzdGF0aWMgaW50IG50ZnNfcmVhZF9pb21hcF9iZWdpbl9ub25fcmVzaWRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldFxuIFx0XHRib29sIG5lZWRfdW53cml0dGVuKVxuIHtcbiBcdHN0cnVjdCBudGZzX2lub2RlICpuaSA9IE5URlNfSShpbm9kZSk7XG4mIzQzO1x0c3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTtcbiBcdHM2NCB2Y247XG4gXHRzNjQgbGNuO1xuIFx0c3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqcmw7XG5AQCAtMTk3LDIwICYjNDM7MTk4LDI0IEBAIHN0YXRpYyBpbnQgbnRmc19yZWFkX2lvbWFwX2JlZ2luX25vbl9yZXNpZGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0XG4gXHR2Y24gPSBudGZzX2J5dGVzX3RvX2NsdXN0ZXIodm9sLCBvZmZzZXQpO1xuIFx0dmNuX29mcyA9IG50ZnNfYnl0ZXNfdG9fY2x1c3Rlcl9vZmYodm9sLCBvZmZzZXQpO1xuIFxuJiM0MztcdGF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdGRvd25fd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbiBcdHJsID0gbnRmc19hdHRyX3Zjbl90b19ybChuaSwgdmNuLCBcdTAwMjZsY24pO1xuIFx0aWYgKElTX0VSUihybCkpIHtcbiBcdFx0dXBfd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbiYjNDM7XHRcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdFx0cmV0dXJuIFBUUl9FUlIocmwpO1xuIFx0fVxuIFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBJT01BUF9SRVBPUlQpIHtcbiBcdFx0aWYgKGxjbiBcdTAwM2MgTENOX0hPTEUpIHtcbiBcdFx0XHR1cF93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuJiM0MztcdFx0XHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4gXHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAobGNuIFx1MDAzYyBMQ05fRU5PRU5UKSB7XG4gXHRcdHVwX3dyaXRlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4mIzQzO1x0XHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuQEAgLTIzOCw2ICYjNDM7MjQzLDcgQEAgc3RhdGljIGludCBudGZzX3JlYWRfaW9tYXBfYmVnaW5fbm9uX3Jlc2lkZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXRcbiBcdFx0XHRcdFwmIzM0O3J1bmxpc3QodmNuIDogJWxsZCwgbGVuZ3RoIDogJWxsZCwgbGNuIDogJWxsZCkgaXMgY29ycnVwdGVkXFxuXCYjMzQ7LFxuIFx0XHRcdFx0cmwtXHUwMDNldmNuLCBybC1cdTAwM2VsZW5ndGgsIHJsLVx1MDAzZWxjbik7XG4gXHRcdHVwX3dyaXRlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4mIzQzO1x0XHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4gXHRcdHJldHVybiAtRUlPO1xuIFx0fVxuIFxuQEAgLTI0Niw2ICYjNDM7MjUyLDcgQEAgc3RhdGljIGludCBudGZzX3JlYWRfaW9tYXBfYmVnaW5fbm9uX3Jlc2lkZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXRcbiBcdGVsc2VcbiBcdFx0aW9tYXAtXHUwMDNlbGVuZ3RoID0gbGVuZ3RoO1xuIFx0dXBfd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbiYjNDM7XHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4gXG4gXHRpZiAoIShmbGFncyBcdTAwMjYgSU9NQVBfWkVSTykgXHUwMDI2XHUwMDI2XG4gXHRcdFx0aW9tYXAtXHUwMDNldHlwZSA9PSBJT01BUF9NQVBQRUQgXHUwMDI2XHUwMDI2XG5AQCAtMzY1LDYgJiM0MzszNzIsNyBAQCBzdGF0aWMgaW50IG50ZnNfd3JpdGVfc2ltcGxlX2lvbWFwX2JlZ2luX25vbl9yZXNpZGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX1xuIHtcbiBcdHN0cnVjdCBudGZzX2lub2RlICpuaSA9IE5URlNfSShpbm9kZSk7XG4gXHRzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCA9IG5pLVx1MDAzZXZvbDtcbiYjNDM7XHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pO1xuIFx0bG9mZl90IHZjbl9vZnMsIHJsX2xlbmd0aDtcbiBcdHN0cnVjdCBydW5saXN0X2VsZW1lbnQgKnJsLCAqcmxjO1xuIFx0Ym9vbCBpc19yZXRyeSA9IGZhbHNlO1xuQEAgLTM5MCwxMiAmIzQzOzM5OCwxNCBAQCBzdGF0aWMgaW50IG50ZnNfd3JpdGVfc2ltcGxlX2lvbWFwX2JlZ2luX25vbl9yZXNpZGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX1xuIFx0fVxuIFx0dXBfcmVhZChcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuIFxuJiM0MztcdGF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdGRvd25fd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbiByZW1hcF9ybDpcbiBcdC8qIFNlZWsgdG8gZWxlbWVudCBjb250YWluaW5nIHRhcmdldCB2Y24uICovXG4gXHRybCA9IF9fbnRmc19hdHRyX2ZpbmRfdmNuX25vbG9jayhcdTAwMjZuaS1cdTAwM2VydW5saXN0LCB2Y24pO1xuIFx0aWYgKElTX0VSUihybCkpIHtcbiBcdFx0dXBfd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbiYjNDM7XHRcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5pLVx1MDAzZW1yZWNfbG9jayk7XG4gXHRcdHJldHVybiAtRUlPO1xuIFx0fVxuQEAgLTQxNSw2ICYjNDM7NDI1LDcgQEAgc3RhdGljIGludCBudGZzX3dyaXRlX3NpbXBsZV9pb21hcF9iZWdpbl9ub25fcmVzaWRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl9cbiBcdFx0XHRcdFwmIzM0O3J1bmxpc3QodmNuIDogJWxsZCwgbGVuZ3RoIDogJWxsZCkgaXMgY29ycnVwdGVkXFxuXCYjMzQ7LFxuIFx0XHRcdFx0cmwtXHUwMDNldmNuLCBybC1cdTAwM2VsZW5ndGgpO1xuIFx0XHR1cF93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuJiM0MztcdFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2bmktXHUwMDNlbXJlY19sb2NrKTtcbiBcdFx0cmV0dXJuIC1FSU87XG4gXHR9XG5AQCAtNDI5LDYgJiM0Mzs0NDAsNyBAQCBzdGF0aWMgaW50IG50ZnNfd3JpdGVfc2ltcGxlX2lvbWFwX2JlZ2luX25vbl9yZXNpZGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX1xuIFx0XHRcdGlmIChtYXhfY2x1X2NvdW50IFx1MDAzYyAwKSB7XG4gXHRcdFx0XHRlcnIgPSBtYXhfY2x1X2NvdW50O1xuIFx0XHRcdFx0dXBfd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbiYjNDM7XHRcdFx0XHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4gXHRcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bmktXHUwMDNlbXJlY19sb2NrKTtcbiBcdFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdFx0fVxuQEAgLTQ0NCw2ICYjNDM7NDU2LDcgQEAgc3RhdGljIGludCBudGZzX3dyaXRlX3NpbXBsZV9pb21hcF9iZWdpbl9ub25fcmVzaWRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl9cbiBcdFx0XHRcdFx0R0ZQX05PRlMpO1xuIFx0XHRcdGlmICghcmxjKSB7XG4gXHRcdFx0XHR1cF93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuJiM0MztcdFx0XHRcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZuaS1cdTAwM2VtcmVjX2xvY2spO1xuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRcdFx0fVxuQEAgLTQ2MSw2ICYjNDM7NDc0LDcgQEAgc3RhdGljIGludCBudGZzX3dyaXRlX3NpbXBsZV9pb21hcF9iZWdpbl9ub25fcmVzaWRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl9cbiBcdFx0XHRpZiAoSVNfRVJSKHJsKSkge1xuIFx0XHRcdFx0bnRmc19lcnJvcih2b2wtXHUwMDNlc2IsIFwmIzM0O0ZhaWxlZCB0byBtZXJnZSBydW5saXN0c1wmIzM0Oyk7XG4gXHRcdFx0XHR1cF93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuJiM0MztcdFx0XHRcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZuaS1cdTAwM2VtcmVjX2xvY2spO1xuIFx0XHRcdFx0a3ZmcmVlKHJsYyk7XG4gXHRcdFx0XHRyZXR1cm4gUFRSX0VSUihybCk7XG5AQCAtNDcxLDYgJiM0Mzs0ODUsNyBAQCBzdGF0aWMgaW50IG50ZnNfd3JpdGVfc2ltcGxlX2lvbWFwX2JlZ2luX25vbl9yZXNpZGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX1xuIFx0XHRcdG5pLVx1MDAzZWlfZGVhbGxvY19jbHVzdGVycyAmIzQzOz0gbWF4X2NsdV9jb3VudDtcbiBcdFx0fVxuIFx0XHR1cF93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuJiM0MztcdFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2bmktXHUwMDNlbXJlY19sb2NrKTtcbiBcbiBcdFx0aWYgKGxjbiBcdTAwM2MgTENOX0RFTEFMTE9DKVxuQEAgLTUyMyw2ICYjNDM7NTM4LDcgQEAgc3RhdGljIGludCBudGZzX3dyaXRlX3NpbXBsZV9pb21hcF9iZWdpbl9ub25fcmVzaWRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl9cbiBcdFx0fVxuIFx0fSBlbHNlIHtcbiBcdFx0dXBfd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbiYjNDM7XHRcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5pLVx1MDAzZW1yZWNfbG9jayk7XG4gXG4gXHRcdGlvbWFwLVx1MDAzZXR5cGUgPSBJT01BUF9NQVBQRUQ7XG5AQCAtNTQ5LDYgJiM0Mzs1NjUsNyBAQCBzdGF0aWMgaW50IG50ZnNfd3JpdGVfZGFfaW9tYXBfYmVnaW5fbm9uX3Jlc2lkZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4ge1xuIFx0c3RydWN0IG50ZnNfaW5vZGUgKm5pID0gTlRGU19JKGlub2RlKTtcbiBcdHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sID0gbmktXHUwMDNldm9sO1xuJiM0MztcdHN0cnVjdCBudGZzX2lub2RlICphdHRyX2xvY2tfbmk7XG4gXHRsb2ZmX3QgdmNuX29mcywgcmxfbGVuZ3RoO1xuIFx0czY0IHZjbiwgc3RhcnRfbGNuLCBsY25fY291bnQ7XG4gXHRib29sIGJhbGxvYyA9IGZhbHNlLCB1cGRhdGVfbXA7XG5AQCAtNTYxLDExICYjNDM7NTc4LDEzIEBAIHN0YXRpYyBpbnQgbnRmc193cml0ZV9kYV9pb21hcF9iZWdpbl9ub25fcmVzaWRlbnQoc3RydWN0IGlub2RlICppbm9kZSxcbiBcbiBcdHVwZGF0ZV9tcCA9IG50ZnNfaW9tYXBfZmxhZ3MgXHUwMDI2IChOVEZTX0lPTUFQX0ZMQUdTX0RJTyB8IE5URlNfSU9NQVBfRkxBR1NfTUtXUklURSkgfHxcbiBcdFx0XHROSW5vQXR0cihuaSkgfHwgbmktXHUwMDNlbWZ0X25vIFx1MDAzYyBGSUxFX2ZpcnN0X3VzZXI7XG4mIzQzO1x0YXR0cl9sb2NrX25pID0gbnRmc19hdHRyX2xpc3RfbG9jayhuaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcbiBcdGRvd25fd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbiBcdGVyciA9IG50ZnNfYXR0cl9tYXBfY2x1c3RlcihuaSwgdmNuLCBcdTAwMjZzdGFydF9sY24sIFx1MDAyNmxjbl9jb3VudCxcbiBcdFx0XHRtYXhfY2x1X2NvdW50LCBcdTAwMjZiYWxsb2MsIHVwZGF0ZV9tcCxcbiBcdFx0XHRudGZzX2lvbWFwX2ZsYWdzIFx1MDAyNiBOVEZTX0lPTUFQX0ZMQUdTX1dSSVRFQkFDSyk7XG4gXHR1cF93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuJiM0MztcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2bmktXHUwMDNlbXJlY19sb2NrKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0bmktXHUwMDNlaV9kZWFsbG9jX2NsdXN0ZXJzID0gMDtcbkBAIC02MzcsNyAmIzQzOzY1Niw3IEBAIHN0YXRpYyBpbnQgbnRmc193cml0ZV9pb21hcF9iZWdpbl9yZXNpZGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LFxuIFx0aW50IGVyciA9IDA7XG4gXHRjaGFyICprYXR0cjtcbiBcbi1cdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCk7XG4mIzQzO1x0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4gXHRpZiAoIWN0eCkge1xuIFx0XHRlcnIgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIG91dDtcbmRpZmYgLS1naXQgYS9mcy9udGZzL2xvZ2ZpbGUuYyBiL2ZzL250ZnMvbG9nZmlsZS5jXG5pbmRleCAwMjRkZGVlNDJkYzhmNi4uYmY5NjdlZjhhYjY4YzkgMTAwNjQ0XG4tLS0gYS9mcy9udGZzL2xvZ2ZpbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmcy9sb2dmaWxlLmNcbkBAIC02NDMsNiAmIzQzOzY0Myw3IEBAIGJvb2wgbnRmc19lbXB0eV9sb2dmaWxlKHN0cnVjdCBpbm9kZSAqbG9nX3ZpKVxuIFx0c3RydWN0IG50ZnNfaW5vZGUgKmxvZ19uaSA9IE5URlNfSShsb2dfdmkpO1xuIFx0c3RydWN0IG50ZnNfdm9sdW1lICp2b2wgPSBsb2dfbmktXHUwMDNldm9sO1xuIFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHZvbC1cdTAwM2VzYjtcbiYjNDM7XHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pO1xuIFx0c3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqcmw7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50IGVycjtcbkBAIC02NjksNiAmIzQzOzY3MCw3IEBAIGJvb2wgbnRmc19lbXB0eV9sb2dmaWxlKHN0cnVjdCBpbm9kZSAqbG9nX3ZpKVxuIFx0XHRcdHZvbC1cdTAwM2VjbHVzdGVyX3NpemVfYml0cztcbiBcdHJlYWRfdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bG9nX25pLVx1MDAzZXNpemVfbG9jaywgZmxhZ3MpO1xuIFx0dHJ1bmNhdGVfaW5vZGVfcGFnZXMobG9nX3ZpLVx1MDAzZWlfbWFwcGluZywgMCk7XG4mIzQzO1x0YXR0cl9sb2NrX25pID0gbnRmc19hdHRyX2xpc3RfbG9jayhsb2dfbmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdGRvd25fd3JpdGUoXHUwMDI2bG9nX25pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4gXHRybCA9IGxvZ19uaS1cdTAwM2VydW5saXN0LnJsO1xuIFx0aWYgKHVubGlrZWx5KCFybCB8fCB2Y24gXHUwMDNjIHJsLVx1MDAzZXZjbiB8fCAhcmwtXHUwMDNlbGVuZ3RoKSkge1xuQEAgLTc1NSw2ICYjNDM7NzU3LDcgQEAgYm9vbCBudGZzX2VtcHR5X2xvZ2ZpbGUoc3RydWN0IGlub2RlICpsb2dfdmkpXG4gXHRcdH0gd2hpbGUgKHN0YXJ0IFx1MDAzYyBlbmQpO1xuIFx0fSB3aGlsZSAoKCYjNDM7JiM0MztybCktXHUwMDNldmNuIFx1MDAzYyBlbmRfdmNuKTtcbiBcdHVwX3dyaXRlKFx1MDAyNmxvZ19uaS1cdTAwM2VydW5saXN0LmxvY2spO1xuJiM0MztcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdGt2ZnJlZShlbXB0eV9idWYpO1xuIFx0a2ZyZWUocmEpO1xuIFx0dHJ1bmNhdGVfaW5vZGVfcGFnZXMobG9nX3ZpLVx1MDAzZWlfbWFwcGluZywgMCk7XG5AQCAtNzc0LDYgJiM0Mzs3NzcsNyBAQCBib29sIG50ZnNfZW1wdHlfbG9nZmlsZShzdHJ1Y3QgaW5vZGUgKmxvZ192aSlcbiBcdGt2ZnJlZShlbXB0eV9idWYpO1xuIFx0a2ZyZWUocmEpO1xuIFx0dXBfd3JpdGUoXHUwMDI2bG9nX25pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4mIzQzO1x0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0bnRmc19lcnJvcihzYiwgXCYjMzQ7RmFpbGVkIHRvIGZpbGwgTG9nRmlsZSB3aXRoIDB4ZmYgYnl0ZXMgKGVycm9yICVkKS5cJiMzNDssXG4gXHRcdFx0LWVycik7XG4gXHRyZXR1cm4gZmFsc2U7XG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9tZnQuYyBiL2ZzL250ZnMvbWZ0LmNcbmluZGV4IGE1MDE5ZTgwOTUxYjg0Li5mM2UyNzAyMzI1MGNiOSAxMDA2NDRcbi0tLSBhL2ZzL250ZnMvbWZ0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL250ZnMvbWZ0LmNcbkBAIC0xMiw2ICYjNDM7MTIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9tYXAuaFx1MDAzZVxuIFxuJiM0MzsjaW5jbHVkZSBcJiMzNDthdHRyaWIuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2JpdG1hcC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7bGNuYWxsb2MuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O21mdC5oXCYjMzQ7XG5AQCAtMTAxNSw3ICYjNDM7MTAxNiw3IEBAIHN0YXRpYyBpbnQgbnRmc19tZnRfYXR0cl9leHRlbmQoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxuIFx0XHRiYXNlX25pID0gbmk7XG4gXG4gXHRpZiAoIU5Jbm9BdHRyTGlzdChiYXNlX25pKSkge1xuLVx0XHRyZXQgPSBudGZzX2lub2RlX2FkZF9hdHRybGlzdChiYXNlX25pKTtcbiYjNDM7XHRcdHJldCA9IG50ZnNfaW5vZGVfYWRkX2F0dHJsaXN0X25vbG9jayhiYXNlX25pKTtcbiBcdFx0aWYgKHJldCkge1xuIFx0XHRcdHByX2VycihcJiMzNDtDYW4gbm90IGFkZCBhdHRybGlzdFxcblwmIzM0Oyk7XG4gXHRcdFx0Z290byBvdXQ7XG5AQCAtMTAyNSw3ICYjNDM7MTAyNiw3IEBAIHN0YXRpYyBpbnQgbnRmc19tZnRfYXR0cl9leHRlbmQoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxuIFx0XHR9XG4gXHR9XG4gXG4tXHRyZXQgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIDApO1xuJiM0MztcdHJldCA9IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlyc19ub2xvY2sobmksIDApO1xuIFx0aWYgKHJldClcbiBcdFx0cHJfZXJyKFwmIzM0O01QIHVwZGF0ZSBmYWlsZWRcXG5cJiMzNDspO1xuIFxuQEAgLTEwNTcsNiAmIzQzOzEwNTgsNyBAQCBzdGF0aWMgaW50IG50ZnNfbWZ0X2JpdG1hcF9leHRlbmRfYWxsb2NhdGlvbl9ub2xvY2soc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpXG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcdHN0cnVjdCBudGZzX2lub2RlICptZnRfbmksICptZnRibXBfbmk7XG4mIzQzO1x0c3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTtcbiBcdHN0cnVjdCBydW5saXN0X2VsZW1lbnQgKnJsLCAqcmwyID0gTlVMTDtcbiBcdHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4ID0gTlVMTDtcbiBcdHN0cnVjdCBtZnRfcmVjb3JkICptcmVjO1xuQEAgLTEwNzUsNiAmIzQzOzEwNzcsNyBAQCBzdGF0aWMgaW50IG50ZnNfbWZ0X2JpdG1hcF9leHRlbmRfYWxsb2NhdGlvbl9ub2xvY2soc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpXG4gXHRudGZzX2RlYnVnKFwmIzM0O0V4dGVuZGluZyBtZnQgYml0bWFwIGFsbG9jYXRpb24uXCYjMzQ7KTtcbiBcdG1mdF9uaSA9IE5URlNfSSh2b2wtXHUwMDNlbWZ0X2lubyk7XG4gXHRtZnRibXBfbmkgPSBOVEZTX0kodm9sLVx1MDAzZW1mdGJtcF9pbm8pO1xuJiM0MztcdGF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobWZ0Ym1wX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuIFx0LypcbiBcdCAqIERldGVybWluZSB0aGUgbGFzdCBsY24gb2YgdGhlIG1mdCBiaXRtYXAuICBUaGUgYWxsb2NhdGVkIHNpemUgb2YgdGhlXG4gXHQgKiBtZnQgYml0bWFwIGNhbm5vdCBiZSB6ZXJvIHNvIHdlIGFyZSBvayB0byBkbyB0aGlzLlxuQEAgLTEwODcsNiAmIzQzOzEwOTAsNyBAQCBzdGF0aWMgaW50IG50ZnNfbWZ0X2JpdG1hcF9leHRlbmRfYWxsb2NhdGlvbl9ub2xvY2soc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpXG4gXHRcdFx0TlRGU19CX1RPX0NMVSh2b2wsIGxsIC0gMSksIE5VTEwpO1xuIFx0aWYgKElTX0VSUihybCkgfHwgdW5saWtlbHkoIXJsLVx1MDAzZWxlbmd0aCB8fCBybC1cdTAwM2VsY24gXHUwMDNjIDApKSB7XG4gXHRcdHVwX3dyaXRlKFx1MDAyNm1mdGJtcF9uaS1cdTAwM2VydW5saXN0LmxvY2spO1xuJiM0MztcdFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcbiBcdFx0bnRmc19lcnJvcih2b2wtXHUwMDNlc2IsXG4gXHRcdFx0XCYjMzQ7RmFpbGVkIHRvIGRldGVybWluZSBsYXN0IGFsbG9jYXRlZCBjbHVzdGVyIG9mIG1mdCBiaXRtYXAgYXR0cmlidXRlLlwmIzM0Oyk7XG4gXHRcdGlmICghSVNfRVJSKHJsKSlcbkBAIC0xMTA4LDYgJiM0MzsxMTEyLDcgQEAgc3RhdGljIGludCBudGZzX21mdF9iaXRtYXBfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxuIFx0XHRcdGxsIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULCBOVUxMKTtcbiBcdGlmIChJU19FUlIoZm9saW8pKSB7XG4gXHRcdHVwX3dyaXRlKFx1MDAyNm1mdGJtcF9uaS1cdTAwM2VydW5saXN0LmxvY2spO1xuJiM0MztcdFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcbiBcdFx0bnRmc19lcnJvcih2b2wtXHUwMDNlc2IsIFwmIzM0O0ZhaWxlZCB0byByZWFkIGZyb20gbGNuIGJpdG1hcC5cJiMzNDspO1xuIFx0XHRyZXR1cm4gUFRSX0VSUihmb2xpbyk7XG4gXHR9XG5AQCAtMTEzOSw2ICYjNDM7MTE0NCw3IEBAIHN0YXRpYyBpbnQgbnRmc19tZnRfYml0bWFwX2V4dGVuZF9hbGxvY2F0aW9uX25vbG9jayhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbClcbiBcdFx0XHRcdHRydWUsIGZhbHNlLCBmYWxzZSk7XG4gXHRcdGlmIChJU19FUlIocmwyKSkge1xuIFx0XHRcdHVwX3dyaXRlKFx1MDAyNm1mdGJtcF9uaS1cdTAwM2VydW5saXN0LmxvY2spO1xuJiM0MztcdFx0XHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuIFx0XHRcdG50ZnNfZXJyb3Iodm9sLVx1MDAzZXNiLFxuIFx0XHRcdFx0XHRcJiMzNDtGYWlsZWQgdG8gYWxsb2NhdGUgYSBjbHVzdGVyIGZvciB0aGUgbWZ0IGJpdG1hcC5cJiMzNDspO1xuIFx0XHRcdHJldHVybiBQVFJfRVJSKHJsMik7XG5AQCAtMTE0Niw2ICYjNDM7MTE1Miw3IEBAIHN0YXRpYyBpbnQgbnRmc19tZnRfYml0bWFwX2V4dGVuZF9hbGxvY2F0aW9uX25vbG9jayhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbClcbiBcdFx0cmwgPSBudGZzX3J1bmxpc3RzX21lcmdlKFx1MDAyNm1mdGJtcF9uaS1cdTAwM2VydW5saXN0LCBybDIsIDAsIFx1MDAyNm5ld19ybF9jb3VudCk7XG4gXHRcdGlmIChJU19FUlIocmwpKSB7XG4gXHRcdFx0dXBfd3JpdGUoXHUwMDI2bWZ0Ym1wX25pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4mIzQzO1x0XHRcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4gXHRcdFx0bnRmc19lcnJvcih2b2wtXHUwMDNlc2IsIFwmIzM0O0ZhaWxlZCB0byBtZXJnZSBydW5saXN0cyBmb3IgbWZ0IGJpdG1hcC5cJiMzNDspO1xuIFx0XHRcdGlmIChudGZzX2NsdXN0ZXJfZnJlZV9mcm9tX3JsKHZvbCwgcmwyKSkge1xuIFx0XHRcdFx0bnRmc19lcnJvcih2b2wtXHUwMDNlc2IsIFwmIzM0O0ZhaWxlZCB0byBkZWFsbG9jYXRlIGFsbG9jYXRlZCBjbHVzdGVyLiVzXCYjMzQ7LFxuQEAgLTExNzMsNyAmIzQzOzExODAsNyBAQCBzdGF0aWMgaW50IG50ZnNfbWZ0X2JpdG1hcF9leHRlbmRfYWxsb2NhdGlvbl9ub2xvY2soc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpXG4gXHRcdHJldCA9IFBUUl9FUlIobXJlYyk7XG4gXHRcdGdvdG8gdW5kb19hbGxvYztcbiBcdH1cbi1cdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChtZnRfbmksIG1yZWMpO1xuJiM0MztcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChtZnRfbmksIG1yZWMsIE5URlNfQVRUUl9DVFhfTE9DS19OT05FKTtcbiBcdGlmICh1bmxpa2VseSghY3R4KSkge1xuIFx0XHRudGZzX2Vycm9yKHZvbC1cdTAwM2VzYiwgXCYjMzQ7RmFpbGVkIHRvIGdldCBzZWFyY2ggY29udGV4dC5cJiMzNDspO1xuIFx0XHRyZXQgPSAtRU5PTUVNO1xuQEAgLTEyNjUsNiAmIzQzOzEyNzIsNyBAQCBzdGF0aWMgaW50IG50ZnNfbWZ0X2JpdG1hcF9leHRlbmRfYWxsb2NhdGlvbl9ub2xvY2soc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpXG4gXHRudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoY3R4KTtcbiBcdHVubWFwX21mdF9yZWNvcmQobWZ0X25pKTtcbiBcdHVwX3dyaXRlKFx1MDAyNm1mdGJtcF9uaS1cdTAwM2VydW5saXN0LmxvY2spO1xuJiM0MztcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4gXHRudGZzX2RlYnVnKFwmIzM0O0RvbmUuXCYjMzQ7KTtcbiBcdHJldHVybiAwO1xuIFxuQEAgLTEyODEsNiAmIzQzOzEyODksNyBAQCBzdGF0aWMgaW50IG50ZnNfbWZ0X2JpdG1hcF9leHRlbmRfYWxsb2NhdGlvbl9ub2xvY2soc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpXG4gXHRcdG50ZnNfYXR0cl9wdXRfc2VhcmNoX2N0eChjdHgpO1xuIFx0XHR1bm1hcF9tZnRfcmVjb3JkKG1mdF9uaSk7XG4gXHRcdHVwX3dyaXRlKFx1MDAyNm1mdGJtcF9uaS1cdTAwM2VydW5saXN0LmxvY2spO1xuJiM0MztcdFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcbiBcdFx0LypcbiBcdFx0ICogVGhlIG9ubHkgdGhpbmcgdGhhdCBpcyBub3cgd3JvbmcgaXMgLVx1MDAzZWFsbG9jYXRlZF9zaXplIG9mIHRoZVxuIFx0XHQgKiBiYXNlIGF0dHJpYnV0ZSBleHRlbnQgd2hpY2ggY2hrZHNrIHNob3VsZCBiZSBhYmxlIHRvIGZpeC5cbkBAIC0xMzI0LDcgJiM0MzsxMzMzLDggQEAgc3RhdGljIGludCBudGZzX21mdF9iaXRtYXBfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxuIFx0XHRcdE5Wb2xTZXRFcnJvcnModm9sKTtcbiBcdFx0fVxuIFx0XHRtYXJrX21mdF9yZWNvcmRfZGlydHkoY3R4LVx1MDAzZW50ZnNfaW5vKTtcbi1cdH0gZWxzZSBpZiAoc3RhdHVzLm1wX2V4dGVuZGVkIFx1MDAyNlx1MDAyNiBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobWZ0Ym1wX25pLCAwKSkge1xuJiM0MztcdH0gZWxzZSBpZiAoc3RhdHVzLm1wX2V4dGVuZGVkIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzX25vbG9jayhtZnRibXBfbmksIDApKSB7XG4gXHRcdG50ZnNfZXJyb3Iodm9sLVx1MDAzZXNiLCBcJiMzNDtGYWlsZWQgdG8gcmVzdG9yZSBtYXBwaW5nIHBhaXJzLiVzXCYjMzQ7LCBlcyk7XG4gXHRcdE5Wb2xTZXRFcnJvcnModm9sKTtcbiBcdH1cbkBAIC0xMzMzLDYgJiM0MzsxMzQzLDcgQEAgc3RhdGljIGludCBudGZzX21mdF9iaXRtYXBfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxuIFx0aWYgKCFJU19FUlIobXJlYykpXG4gXHRcdHVubWFwX21mdF9yZWNvcmQobWZ0X25pKTtcbiBcdHVwX3dyaXRlKFx1MDAyNm1mdGJtcF9uaS1cdTAwM2VydW5saXN0LmxvY2spO1xuJiM0MztcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC0xMzcxLDcgJiM0MzsxMzgyLDcgQEAgc3RhdGljIGludCBudGZzX21mdF9iaXRtYXBfZXh0ZW5kX2luaXRpYWxpemVkX25vbG9jayhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbClcbiBcdFx0bnRmc19lcnJvcih2b2wtXHUwMDNlc2IsIFwmIzM0O0ZhaWxlZCB0byBtYXAgbWZ0IHJlY29yZC5cJiMzNDspO1xuIFx0XHRyZXR1cm4gUFRSX0VSUihtcmVjKTtcbiBcdH1cbi1cdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChtZnRfbmksIG1yZWMpO1xuJiM0MztcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChtZnRfbmksIG1yZWMsIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdGlmICh1bmxpa2VseSghY3R4KSkge1xuIFx0XHRudGZzX2Vycm9yKHZvbC1cdTAwM2VzYiwgXCYjMzQ7RmFpbGVkIHRvIGdldCBzZWFyY2ggY29udGV4dC5cJiMzNDspO1xuIFx0XHRyZXQgPSAtRU5PTUVNO1xuQEAgLTE0MjMsNyAmIzQzOzE0MzQsNyBAQCBzdGF0aWMgaW50IG50ZnNfbWZ0X2JpdG1hcF9leHRlbmRfaW5pdGlhbGl6ZWRfbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxuIFx0XHROVm9sU2V0RXJyb3JzKHZvbCk7XG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4tXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobWZ0X25pLCBtcmVjKTtcbiYjNDM7XHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobWZ0X25pLCBtcmVjLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4gXHRpZiAodW5saWtlbHkoIWN0eCkpIHtcbiBcdFx0bnRmc19lcnJvcih2b2wtXHUwMDNlc2IsIFwmIzM0O0ZhaWxlZCB0byBnZXQgc2VhcmNoIGNvbnRleHQuJXNcJiMzNDssIGVzKTtcbiBcdFx0TlZvbFNldEVycm9ycyh2b2wpO1xuQEAgLTE0OTAsNiAmIzQzOzE1MDEsNyBAQCBzdGF0aWMgaW50IG50ZnNfbWZ0X2RhdGFfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxuIFx0czY0IG1pbl9uciwgbnIsIGxsO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHN0cnVjdCBudGZzX2lub2RlICptZnRfbmk7XG4mIzQzO1x0c3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTtcbiBcdHN0cnVjdCBydW5saXN0X2VsZW1lbnQgKnJsLCAqcmwyO1xuIFx0c3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHggPSBOVUxMO1xuIFx0c3RydWN0IG1mdF9yZWNvcmQgKm1yZWM7XG5AQCAtMTUwMSw2ICYjNDM7MTUxMyw3IEBAIHN0YXRpYyBpbnQgbnRmc19tZnRfZGF0YV9leHRlbmRfYWxsb2NhdGlvbl9ub2xvY2soc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpXG4gXG4gXHRudGZzX2RlYnVnKFwmIzM0O0V4dGVuZGluZyBtZnQgZGF0YSBhbGxvY2F0aW9uLlwmIzM0Oyk7XG4gXHRtZnRfbmkgPSBOVEZTX0kodm9sLVx1MDAzZW1mdF9pbm8pO1xuJiM0MztcdGF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobWZ0X25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuIFx0LypcbiBcdCAqIERldGVybWluZSB0aGUgcHJlZmVycmVkIGFsbG9jYXRpb24gbG9jYXRpb24sIGkuZS4gdGhlIGxhc3QgbGNuIG9mXG4gXHQgKiB0aGUgbWZ0IGRhdGEgYXR0cmlidXRlLiAgVGhlIGFsbG9jYXRlZCBzaXplIG9mIHRoZSBtZnQgZGF0YVxuQEAgLTE1MTQsNiAmIzQzOzE1MjcsNyBAQCBzdGF0aWMgaW50IG50ZnNfbWZ0X2RhdGFfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxuIFx0XHRcdE5URlNfQl9UT19DTFUodm9sLCBsbCAtIDEpLCBOVUxMKTtcbiBcdGlmIChJU19FUlIocmwpIHx8IHVubGlrZWx5KCFybC1cdTAwM2VsZW5ndGggfHwgcmwtXHUwMDNlbGNuIFx1MDAzYyAwKSkge1xuIFx0XHR1cF93cml0ZShcdTAwMjZtZnRfbmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbiYjNDM7XHRcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4gXHRcdG50ZnNfZXJyb3Iodm9sLVx1MDAzZXNiLFxuIFx0XHRcdFwmIzM0O0ZhaWxlZCB0byBkZXRlcm1pbmUgbGFzdCBhbGxvY2F0ZWQgY2x1c3RlciBvZiBtZnQgZGF0YSBhdHRyaWJ1dGUuXCYjMzQ7KTtcbiBcdFx0aWYgKCFJU19FUlIocmwpKVxuQEAgLTE1NDQsNiAmIzQzOzE1NTgsNyBAQCBzdGF0aWMgaW50IG50ZnNfbWZ0X2RhdGFfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxuIFx0XHRcdG50ZnNfd2FybmluZyh2b2wtXHUwMDNlc2IsXG4gXHRcdFx0XHRcJiMzNDtDYW5ub3QgYWxsb2NhdGUgbWZ0IHJlY29yZCBiZWNhdXNlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBpbm9kZXMgKDJeMzIpIGhhcyBhbHJlYWR5IGJlZW4gcmVhY2hlZC5cJiMzNDspO1xuIFx0XHRcdHVwX3dyaXRlKFx1MDAyNm1mdF9uaS1cdTAwM2VydW5saXN0LmxvY2spO1xuJiM0MztcdFx0XHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuIFx0XHRcdHJldHVybiAtRU5PU1BDO1xuIFx0XHR9XG4gXHR9XG5AQCAtMTU2OCw2ICYjNDM7MTU4Myw3IEBAIHN0YXRpYyBpbnQgbnRmc19tZnRfZGF0YV9leHRlbmRfYWxsb2NhdGlvbl9ub2xvY2soc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpXG4gXHRcdFx0bnRmc19lcnJvcih2b2wtXHUwMDNlc2IsXG4gXHRcdFx0XHRcJiMzNDtGYWlsZWQgdG8gYWxsb2NhdGUgdGhlIG1pbmltYWwgbnVtYmVyIG9mIGNsdXN0ZXJzICglbGxpKSBmb3IgdGhlIG1mdCBkYXRhIGF0dHJpYnV0ZS5cJiMzNDssXG4gXHRcdFx0XHRucik7XG4mIzQzO1x0XHRcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4gXHRcdFx0cmV0dXJuIFBUUl9FUlIocmwyKTtcbiBcdFx0fVxuIFx0XHQvKlxuQEAgLTE1ODMsNiAmIzQzOzE1OTksNyBAQCBzdGF0aWMgaW50IG50ZnNfbWZ0X2RhdGFfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxuIFx0cmwgPSBudGZzX3J1bmxpc3RzX21lcmdlKFx1MDAyNm1mdF9uaS1cdTAwM2VydW5saXN0LCBybDIsIDAsIFx1MDAyNm5ld19ybF9jb3VudCk7XG4gXHRpZiAoSVNfRVJSKHJsKSkge1xuIFx0XHR1cF93cml0ZShcdTAwMjZtZnRfbmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbiYjNDM7XHRcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4gXHRcdG50ZnNfZXJyb3Iodm9sLVx1MDAzZXNiLCBcJiMzNDtGYWlsZWQgdG8gbWVyZ2UgcnVubGlzdHMgZm9yIG1mdCBkYXRhIGF0dHJpYnV0ZS5cJiMzNDspO1xuIFx0XHRpZiAobnRmc19jbHVzdGVyX2ZyZWVfZnJvbV9ybCh2b2wsIHJsMikpIHtcbiBcdFx0XHRudGZzX2Vycm9yKHZvbC1cdTAwM2VzYixcbkBAIC0xNjA4LDcgJiM0MzsxNjI1LDcgQEAgc3RhdGljIGludCBudGZzX21mdF9kYXRhX2V4dGVuZF9hbGxvY2F0aW9uX25vbG9jayhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbClcbiBcdFx0ZG93bl93cml0ZShcdTAwMjZtZnRfbmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbiBcdFx0Z290byB1bmRvX2FsbG9jO1xuIFx0fVxuLVx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG1mdF9uaSwgbXJlYyk7XG4mIzQzO1x0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG1mdF9uaSwgbXJlYywgTlRGU19BVFRSX0NUWF9MT0NLX05PTkUpO1xuIFx0aWYgKHVubGlrZWx5KCFjdHgpKSB7XG4gXHRcdG50ZnNfZXJyb3Iodm9sLVx1MDAzZXNiLCBcJiMzNDtGYWlsZWQgdG8gZ2V0IHNlYXJjaCBjb250ZXh0LlwmIzM0Oyk7XG4gXHRcdHJldCA9IC1FTk9NRU07XG5AQCAtMTcwNCw2ICYjNDM7MTcyMSw3IEBAIHN0YXRpYyBpbnQgbnRmc19tZnRfZGF0YV9leHRlbmRfYWxsb2NhdGlvbl9ub2xvY2soc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpXG4gXHRudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoY3R4KTtcbiBcdHVubWFwX21mdF9yZWNvcmQobWZ0X25pKTtcbiBcdG50ZnNfZGVidWcoXCYjMzQ7RG9uZS5cJiMzNDspO1xuJiM0MztcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4gXHRyZXR1cm4gMDtcbiByZXN0b3JlX3VuZG9fYWxsb2M6XG4gXHRudGZzX2F0dHJfcmVpbml0X3NlYXJjaF9jdHgoY3R4KTtcbkBAIC0xNzE3LDYgJiM0MzsxNzM1LDcgQEAgc3RhdGljIGludCBudGZzX21mdF9kYXRhX2V4dGVuZF9hbGxvY2F0aW9uX25vbG9jayhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbClcbiBcdFx0bnRmc19hdHRyX3B1dF9zZWFyY2hfY3R4KGN0eCk7XG4gXHRcdHVubWFwX21mdF9yZWNvcmQobWZ0X25pKTtcbiBcdFx0dXBfd3JpdGUoXHUwMDI2bWZ0X25pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4mIzQzO1x0XHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuIFx0XHQvKlxuIFx0XHQgKiBUaGUgb25seSB0aGluZyB0aGF0IGlzIG5vdyB3cm9uZyBpcyAtXHUwMDNlYWxsb2NhdGVkX3NpemUgb2YgdGhlXG4gXHRcdCAqIGJhc2UgYXR0cmlidXRlIGV4dGVudCB3aGljaCBjaGtkc2sgc2hvdWxkIGJlIGFibGUgdG8gZml4LlxuQEAgLTE3MzYsNyAmIzQzOzE3NTUsNyBAQCBzdGF0aWMgaW50IG50ZnNfbWZ0X2RhdGFfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxuIFx0XHRudGZzX2Vycm9yKHZvbC1cdTAwM2VzYiwgXCYjMzQ7RmFpbGVkIHRvIHRydW5jYXRlIG1mdCBkYXRhIGF0dHJpYnV0ZSBydW5saXN0LiVzXCYjMzQ7LCBlcyk7XG4gXHRcdE5Wb2xTZXRFcnJvcnModm9sKTtcbiBcdH1cbi1cdGlmIChtcF9leHRlbmRlZCBcdTAwMjZcdTAwMjYgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG1mdF9uaSwgMCkpIHtcbiYjNDM7XHRpZiAobXBfZXh0ZW5kZWQgXHUwMDI2XHUwMDI2IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlyc19ub2xvY2sobWZ0X25pLCAwKSkge1xuIFx0XHRudGZzX2Vycm9yKHZvbC1cdTAwM2VzYiwgXCYjMzQ7RmFpbGVkIHRvIHJlc3RvcmUgbWFwcGluZyBwYWlycy4lc1wmIzM0OyxcbiBcdFx0XHQgICBlcyk7XG4gXHRcdE5Wb2xTZXRFcnJvcnModm9sKTtcbkBAIC0xNzY1LDYgJiM0MzsxNzg0LDcgQEAgc3RhdGljIGludCBudGZzX21mdF9kYXRhX2V4dGVuZF9hbGxvY2F0aW9uX25vbG9jayhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbClcbiBcdH1cbiBcdGlmICghSVNfRVJSKG1yZWMpKVxuIFx0XHR1bm1hcF9tZnRfcmVjb3JkKG1mdF9uaSk7XG4mIzQzO1x0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTIyNDgsNyAmIzQzOzIyNjgsNyBAQCBpbnQgbnRmc19tZnRfcmVjb3JkX2FsbG9jKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBjb25zdCBpbnQgbW9kZSxcbiBcdFx0ZXJyID0gUFRSX0VSUihtKTtcbiBcdFx0Z290byB1bmRvX2RhdGFfaW5pdDtcbiBcdH1cbi1cdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChtZnRfbmksIG0pO1xuJiM0MztcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChtZnRfbmksIG0sIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdGlmICh1bmxpa2VseSghY3R4KSkge1xuIFx0XHRudGZzX2Vycm9yKHZvbC1cdTAwM2VzYiwgXCYjMzQ7RmFpbGVkIHRvIGdldCBzZWFyY2ggY29udGV4dC5cJiMzNDspO1xuIFx0XHRlcnIgPSAtRU5PTUVNO1xuQEAgLTI1OTMsMTQgJiM0MzsyNjEzLDE3IEBAIGludCBudGZzX21mdF9yZWNvcmRfZnJlZShzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxuIHN0YXRpYyBzNjQgbGNuX2Zyb21faW5kZXgoc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcbiBcdFx0dW5zaWduZWQgbG9uZyBpbmRleClcbiB7XG4mIzQzO1x0c3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTtcbiBcdHM2NCB2Y247XG4gXHRzNjQgbGNuO1xuIFxuIFx0dmNuID0gbnRmc19waWR4X3RvX2NsdXN0ZXIodm9sLCBpbmRleCk7XG4gXG4mIzQzO1x0YXR0cl9sb2NrX25pID0gbnRmc19hdHRyX2xpc3RfbG9jayhuaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0ZG93bl9yZWFkKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4gXHRsY24gPSBudGZzX2F0dHJfdmNuX3RvX2xjbl9ub2xvY2sobmksIHZjbiwgZmFsc2UpO1xuIFx0dXBfcmVhZChcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuJiM0MztcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcbiBcdHJldHVybiBsY247XG4gfVxuQEAgLTI3MDAsMTQgJiM0MzsyNzIzLDIwIEBAIHN0YXRpYyBpbnQgbnRmc193cml0ZV9tZnRfYmxvY2soc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3XG4gXHRcdFx0XHRiaW8gPSBOVUxMO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHRpZiAodm9sLVx1MDAzZWNsdXN0ZXJfc2l6ZSBcdTAwM2MgZm9saW9fc2l6ZShmb2xpbykpIHtcbi1cdFx0XHRcdGRvd25fd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbi1cdFx0XHRcdHJsID0gbnRmc19hdHRyX3Zjbl90b19ybChuaSwgdmNuX29mZiwgXHUwMDI2bGNuKTtcbi1cdFx0XHRcdHVwX3dyaXRlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4tXHRcdFx0XHRpZiAoSVNfRVJSKHJsKSB8fCBsY24gXHUwMDNjIDApIHtcbi1cdFx0XHRcdFx0ZXJyID0gLUVJTztcbi1cdFx0XHRcdFx0Z290byB1bm1fZG9uZTtcbi1cdFx0XHRcdH1cbiYjNDM7XHRcdFx0XHRpZiAodm9sLVx1MDAzZWNsdXN0ZXJfc2l6ZSBcdTAwM2MgZm9saW9fc2l6ZShmb2xpbykpIHtcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBudGZzX2lub2RlICphdHRyX2xvY2tfbmk7XG4mIzQzO1x0XHRcdFx0XHRlbnVtIG50ZnNfYXR0cl9zZWFyY2hfY3R4X2xvY2tfbW9kZSBtb2RlO1xuJiM0MztcbiYjNDM7XHRcdFx0XHRcdG1vZGUgPSBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRDtcbiYjNDM7XHRcdFx0XHRcdGF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIG1vZGUpO1xuJiM0MztcdFx0XHRcdFx0ZG93bl93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuJiM0MztcdFx0XHRcdFx0cmwgPSBudGZzX2F0dHJfdmNuX3RvX3JsKG5pLCB2Y25fb2ZmLCBcdTAwMjZsY24pO1xuJiM0MztcdFx0XHRcdFx0dXBfd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbiYjNDM7XHRcdFx0XHRcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIG1vZGUpO1xuJiM0MztcdFx0XHRcdFx0aWYgKElTX0VSUihybCkgfHwgbGNuIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdFx0XHRcdGVyciA9IC1FSU87XG4mIzQzO1x0XHRcdFx0XHRcdGdvdG8gdW5tX2RvbmU7XG4mIzQzO1x0XHRcdFx0XHR9XG4gXG4gXHRcdFx0XHRpZiAoYmlvIFx1MDAyNlx1MDAyNlxuIFx0XHRcdFx0ICAgKGJpb19lbmRfc2VjdG9yKGJpbykgXHUwMDNlXHUwMDNlICh2b2wtXHUwMDNlY2x1c3Rlcl9zaXplX2JpdHMgLSA5KSkgIT1cbmRpZmYgLS1naXQgYS9mcy9udGZzL25hbWVpLmMgYi9mcy9udGZzL25hbWVpLmNcbmluZGV4IGExOTYyNmExMzViZDdmLi43M2QwODdiNzc4YzA0MyAxMDA2NDRcbi0tLSBhL2ZzL250ZnMvbmFtZWkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmcy9uYW1laS5jXG5AQCAtMjY2LDcgJiM0MzsyNjYsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbnRmc19sb29rdXAoc3RydWN0IGlub2RlICpkaXJfaW5vLCBzdHJ1Y3QgZGVudHJ5ICpkZW50LFxuIFx0XHRcdFx0Y3R4ID0gTlVMTDtcbiBcdFx0XHRcdGdvdG8gZXJyX291dDtcbiBcdFx0XHR9XG4tXHRcdFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBtKTtcbiYjNDM7XHRcdFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBtLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4gXHRcdFx0aWYgKHVubGlrZWx5KCFjdHgpKSB7XG4gXHRcdFx0XHRlcnIgPSAtRU5PTUVNO1xuIFx0XHRcdFx0Z290byBlcnJfb3V0O1xuQEAgLTg1OCw3ICYjNDM7ODU4LDcgQEAgc3RhdGljIGludCBudGZzX2RlbGV0ZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHN0cnVjdCBudGZzX2lub2RlICpkaXJfbmksXG4gXHQgKiBJZiBmaWxlbmFtZSBpbiBET1Mgb3IgaW4gV0lOMzIgbmFtZXNwYWNlLCB0aGVuIHJlbW92ZSBET1MgbmFtZSBmaXJzdCxcbiBcdCAqIG9ubHkgdGhlbiByZW1vdmUgV0lOMzIgbmFtZS5cbiBcdCAqL1xuLVx0YWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCk7XG4mIzQzO1x0YWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcbiBcdGlmICghYWN0eCkge1xuIFx0XHRudGZzX2Vycm9yKHNiLCBcJiMzNDslcywgRmFpbGVkIHRvIGdldCBzZWFyY2ggY29udGV4dFwmIzM0OywgX19mdW5jX18pO1xuIFx0XHRpZiAobmVlZF9sb2NrKSB7XG5AQCAtMTYwNiw3ICYjNDM7MTYwNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpudGZzX2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqY2hpbGRfZGVudClcbiBcdGlmIChJU19FUlIobXJlYykpXG4gXHRcdHJldHVybiBFUlJfQ0FTVChtcmVjKTtcbiBcdC8qIEZpbmQgdGhlIGZpcnN0IGZpbGUgbmFtZSBhdHRyaWJ1dGUgaW4gdGhlIG1mdCByZWNvcmQuICovXG4tXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIG1yZWMpO1xuJiM0MztcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgbXJlYywgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0aWYgKHVubGlrZWx5KCFjdHgpKSB7XG4gXHRcdHVubWFwX21mdF9yZWNvcmQobmkpO1xuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbmRpZmYgLS1naXQgYS9mcy9udGZzL3N1cGVyLmMgYi9mcy9udGZzL3N1cGVyLmNcbmluZGV4IDhhYmU3YmVlNGMwZDliLi42YWYyNGZiZWI5MThkZiAxMDA2NDRcbi0tLSBhL2ZzL250ZnMvc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmcy9zdXBlci5jXG5AQCAtMzgwLDcgJiM0MzszODAsNyBAQCBzdGF0aWMgaW50IG50ZnNfd3JpdGVfdm9sdW1lX2ZsYWdzKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBjb25zdCBfX2xlMTYgZmxhZ3MpXG4gXHRpZiAodm9sLVx1MDAzZXZvbF9mbGFncyA9PSBmbGFncylcbiBcdFx0Z290byBkb25lO1xuIFxuLVx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTtcbiYjNDM7XHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdGlmICghY3R4KSB7XG4gXHRcdGVyciA9IC1FTk9NRU07XG4gXHRcdGdvdG8gcHV0X3VubV9lcnJfb3V0O1xuQEAgLTQ3Niw3ICYjNDM7NDc2LDcgQEAgaW50IG50ZnNfd3JpdGVfdm9sdW1lX2xhYmVsKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBjaGFyICpsYWJlbClcbiBcdH1cbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2dm9sX25pLVx1MDAzZW1yZWNfbG9jayk7XG4tXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgodm9sX25pLCBOVUxMKTtcbiYjNDM7XHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgodm9sX25pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuIFx0aWYgKCFjdHgpIHtcbiBcdFx0cmV0ID0gLUVOT01FTTtcbiBcdFx0Z290byBvdXQ7XG5AQCAtMTQ4MSw3ICYjNDM7MTQ4MSw3IEBAIHN0YXRpYyBib29sIGxvYWRfc3lzdGVtX2ZpbGVzKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxuIFx0XHRnb3RvIHZvbHVtZV9mYWlsZWQ7XG4gXHR9XG4gXG4tXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoTlRGU19JKHZvbC1cdTAwM2V2b2xfaW5vKSwgbSk7XG4mIzQzO1x0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KE5URlNfSSh2b2wtXHUwMDNldm9sX2lubyksIG0sIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdGlmICghY3R4KSB7XG4gXHRcdG50ZnNfZXJyb3Ioc2IsIFwmIzM0O0ZhaWxlZCB0byBnZXQgYXR0cmlidXRlIHNlYXJjaCBjb250ZXh0LlwmIzM0Oyk7XG4gXHRcdGdvdG8gZ2V0X2N0eF92b2xfZmFpbGVkO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGZzX2F0dHJfbGlzdF9sb2NrJiMzNDssCiAgICAmIzM0O250ZnNfYXR0cl9saXN0X3VubG9jayYjMzQ7LAogICAgJiMzNDtudGZzX2F0dHJfbG9ja19zZWFyY2hfY3R4JiMzNDssCiAgICAmIzM0O250ZnNfYXR0cl91bmxvY2tfc2VhcmNoX2N0eCYjMzQ7LAogICAgJiMzNDtudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgmIzM0OywKICAgICYjMzQ7bnRmc19hdHRyX3B1dF9zZWFyY2hfY3R4JiMzNDssCiAgICAmIzM0O250ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdCYjMzQ7LAogICAgJiMzNDtudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMmIzM0OywKICAgICYjMzQ7bnRmc19pbm9kZV9hZGRfYXR0cmxpc3QmIzM0OywKICAgICYjMzQ7bnRmc19pbm9kZV9mcmVlX3NwYWNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgcmVhZC13cml0ZSBzZW1hcGhvcmUgKGBhdHRyX2xpc3RfbG9ja2ApIHRvIGBzdHJ1Y3QgbnRmc19pbm9kZWAgYW5kIHVzZXMgaXQgdG8gc2VyaWFsaXplIGF0dHJpYnV0ZSBsaXN0IHBvaW50ZXIgdXBkYXRlcyB3aXRoIGxvb2t1cHMgYWNyb3NzIHRoZSBOVEZTIGRyaXZlci4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBsb2NraW5nIHNjaGVtZSBvZiB0aGUgTlRGUyBmaWxlc3lzdGVtLCBhZmZlY3RpbmcgbWFueSBjb3JlIG9wZXJhdGlvbnMgbGlrZSBhdHRyaWJ1dGUgbG9va3VwLCBtYXBwaW5nIHBhaXJzIHVwZGF0ZXMsIGFuZCBleHRlbnQgYXR0YWNobWVudC4gRnV6emluZyBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBuZXcgbG9ja2luZyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgZGVhZGxvY2tzIG9yIHJhY2UgY29uZGl0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDczMzA3ZDE4N2Y5MjY4MWIyMTVlOWE0NjQyNDM3NTcxMTA3ZDhjMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDIgMTg6MTU6NDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9udGZzL2FvcHMuYyBiL2ZzL250ZnMvYW9wcy5jCmluZGV4IDFmYmY4MzJhZDE2NTQwLi45ODE3NzdmZjI0Mjc5NyAxMDA2NDQKLS0tIGEvZnMvbnRmcy9hb3BzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmcy9hb3BzLmMKQEAgLTEzMSw2ICYjNDM7MTMxLDcgQEAgc3RhdGljIHNlY3Rvcl90IG50ZnNfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYmxvY2spCiAJczY0IGxjbjsKIAl1bnNpZ25lZCBsb25nIGJsb2Nrc2l6ZSwgZmxhZ3M7CiAJc3RydWN0IG50ZnNfaW5vZGUgKm5pID0gTlRGU19JKG1hcHBpbmctJmd0O2hvc3QpOwomIzQzOwlzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pOwogCXN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sID0gbmktJmd0O3ZvbDsKIAl1bnNpZ25lZCBpbnQgZGVsdGE7CiAJdW5zaWduZWQgY2hhciBibG9ja3NpemVfYml0czsKQEAgLTE2MCwxMCAmIzQzOzE2MSwxMiBAQCBzdGF0aWMgc2VjdG9yX3QgbnRmc19ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibG9jaykKIAkgKi8KIAlpZiAodW5saWtlbHkob2ZzICZndDs9IHNpemUgfHwgKG9mcyAmIzQzOyBibG9ja3NpemUgJmd0OyBzaXplICZhbXA7JmFtcDsgc2l6ZSAmbHQ7IGlfc2l6ZSkpKQogCQlnb3RvIGhvbGU7CiYjNDM7CWF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTsKIAlkb3duX3JlYWQoJmFtcDtuaS0mZ3Q7cnVubGlzdC5sb2NrKTsKIAlsY24gPSBudGZzX2F0dHJfdmNuX3RvX2xjbl9ub2xvY2sobmksIG50ZnNfYnl0ZXNfdG9fY2x1c3Rlcih2b2wsIG9mcyksCiAJCQlmYWxzZSk7CiAJdXBfcmVhZCgmYW1wO25pLSZndDtydW5saXN0LmxvY2spOwomIzQzOwludGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7CiAJaWYgKHVubGlrZWx5KGxjbiAmbHQ7IExDTl9IT0xFKSkgewogCQkvKgogCQkgKiBTdGVwIGRvd24gdG8gYW4gaW50ZWdlciB0byBhdm9pZCBnY2MgZG9pbmcgYSBsb25nIGxvbmcKZGlmZiAtLWdpdCBhL2ZzL250ZnMvYXR0cmliLmMgYi9mcy9udGZzL2F0dHJpYi5jCmluZGV4IGRkODgyODA5ODUxMTgzLi45MDk2YTU0ODY1MzU1OSAxMDA2NDQKLS0tIGEvZnMvbnRmcy9hdHRyaWIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9udGZzL2F0dHJpYi5jCkBAIC0xMDgsNyAmIzQzOzEwOCw3IEBAIGludCBudGZzX21hcF9ydW5saXN0X25vbG9jayhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCB2Y24sIHN0cnVjdCBudGZzX2F0dHJfc2VhCiAJCW0gPSBtYXBfbWZ0X3JlY29yZChiYXNlX25pKTsKIAkJaWYgKElTX0VSUihtKSkKIAkJCXJldHVybiBQVFJfRVJSKG0pOwotCQljdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoYmFzZV9uaSwgbSk7CiYjNDM7CQljdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoYmFzZV9uaSwgbSwgTlRGU19BVFRSX0NUWF9MT0NLX05PTkUpOwogCQlpZiAodW5saWtlbHkoIWN0eCkpIHsKIAkJCWVyciA9IC1FTk9NRU07CiAJCQlnb3RvIGVycl9vdXQ7CkBAIC0zMDAsMTQgJiM0MzszMDAsMTcgQEAgaW50IG50ZnNfbWFwX3J1bmxpc3Rfbm9sb2NrKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IHZjbiwgc3RydWN0IG50ZnNfYXR0cl9zZWEKICAqLwogaW50IG50ZnNfbWFwX3J1bmxpc3Qoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgdmNuKQogewomIzQzOwlzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pOwogCWludCBlcnIgPSAwOwogCiYjNDM7CWF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTsKIAlkb3duX3dyaXRlKCZhbXA7bmktJmd0O3J1bmxpc3QubG9jayk7CiAJLyogTWFrZSBzdXJlIHNvbWVvbmUgZWxzZSBkaWRuJiMzOTt0IGRvIHRoZSB3b3JrIHdoaWxlIHdlIHdlcmUgc2xlZXBpbmcuICovCiAJaWYgKGxpa2VseShudGZzX3JsX3Zjbl90b19sY24obmktJmd0O3J1bmxpc3QucmwsIHZjbikgJmx0Oz0KIAkJCUxDTl9STF9OT1RfTUFQUEVEKSkKIAkJZXJyID0gbnRmc19tYXBfcnVubGlzdF9ub2xvY2sobmksIHZjbiwgTlVMTCk7CiAJdXBfd3JpdGUoJmFtcDtuaS0mZ3Q7cnVubGlzdC5sb2NrKTsKJiM0MzsJbnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTMxOCw3ICYjNDM7MzIxLDcgQEAgc3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqbnRmc19hdHRyX3Zjbl90b19ybChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCB2Y24sIHM2NAogCWJvb2wgaXNfcmV0cnkgPSBmYWxzZTsKIAogCWlmICghcmwpIHsKLQkJZXJyID0gbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0KG5pKTsKJiM0MzsJCWVyciA9IG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdF9ub2xvY2sobmkpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CiAJCXJsID0gbmktJmd0O3J1bmxpc3Qucmw7CkBAIC0xNTc5LDYgJiM0MzsxNTgyLDkzIEBAIGludCBudGZzX2F0dHJfbG9va3VwKGNvbnN0IF9fbGUzMiB0eXBlLCBjb25zdCBfX2xlMTYgKm5hbWUsCiAJCQl2YWwsIHZhbF9sZW4sIGN0eCk7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IG50ZnNfaW5vZGUgKm50ZnNfYXR0cl9zZWFyY2hfbG9ja19pbm9kZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpCiYjNDM7ewomIzQzOwlpZiAoIW5pKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CWlmIChOSW5vQXR0cihuaSkpIHsKJiM0MzsJCWlmIChuaS0mZ3Q7dHlwZSA9PSBBVF9BVFRSSUJVVEVfTElTVCkKJiM0MzsJCQlyZXR1cm4gTlVMTDsKJiM0MzsJCXJldHVybiBuaS0mZ3Q7ZXh0LmJhc2VfbnRmc19pbm87CiYjNDM7CX0KJiM0MzsJcmV0dXJuIG5pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBudGZzX2F0dHJfbGlzdF9hc3NlcnRfaGVsZChzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbnRmc19pbm9kZSAqbG9ja19uaSA9IG50ZnNfYXR0cl9zZWFyY2hfbG9ja19pbm9kZShuaSk7CiYjNDM7CiYjNDM7CWlmIChsb2NrX25pKQomIzQzOwkJcndzZW1fYXNzZXJ0X2hlbGQoJmFtcDtsb2NrX25pLSZndDthdHRyX2xpc3RfbG9jayk7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBudGZzX2lub2RlICpudGZzX2F0dHJfbGlzdF9sb2NrKHN0cnVjdCBudGZzX2lub2RlICpuaSwKJiM0MzsJCQkJICAgICAgIGVudW0gbnRmc19hdHRyX3NlYXJjaF9jdHhfbG9ja19tb2RlIGxvY2tfbW9kZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBudGZzX2lub2RlICpsb2NrX25pOwomIzQzOwomIzQzOwlpZiAobG9ja19tb2RlID09IE5URlNfQVRUUl9DVFhfTE9DS19OT05FKSB7CiYjNDM7CQludGZzX2F0dHJfbGlzdF9hc3NlcnRfaGVsZChuaSk7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlsb2NrX25pID0gbnRmc19hdHRyX3NlYXJjaF9sb2NrX2lub2RlKG5pKTsKJiM0MzsJaWYgKCFsb2NrX25pKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CWlmIChsb2NrX21vZGUgPT0gTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKQomIzQzOwkJZG93bl93cml0ZSgmYW1wO2xvY2tfbmktJmd0O2F0dHJfbGlzdF9sb2NrKTsKJiM0MzsJZWxzZQomIzQzOwkJZG93bl9yZWFkKCZhbXA7bG9ja19uaS0mZ3Q7YXR0cl9saXN0X2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gbG9ja19uaTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBudGZzX2F0dHJfbGlzdF91bmxvY2soc3RydWN0IG50ZnNfaW5vZGUgKmxvY2tfbmksCiYjNDM7CQkJICAgZW51bSBudGZzX2F0dHJfc2VhcmNoX2N0eF9sb2NrX21vZGUgbG9ja19tb2RlKQomIzQzO3sKJiM0MzsJaWYgKCFsb2NrX25pIHx8IGxvY2tfbW9kZSA9PSBOVEZTX0FUVFJfQ1RYX0xPQ0tfTk9ORSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKGxvY2tfbW9kZSA9PSBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpCiYjNDM7CQl1cF93cml0ZSgmYW1wO2xvY2tfbmktJmd0O2F0dHJfbGlzdF9sb2NrKTsKJiM0MzsJZWxzZQomIzQzOwkJdXBfcmVhZCgmYW1wO2xvY2tfbmktJmd0O2F0dHJfbGlzdF9sb2NrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBudGZzX2F0dHJfbG9ja19zZWFyY2hfY3R4KHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4LAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksCiYjNDM7CQkJICAgICAgIGVudW0gbnRmc19hdHRyX3NlYXJjaF9jdHhfbG9ja19tb2RlIGxvY2tfbW9kZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBudGZzX2lub2RlICpsb2NrX25pOwomIzQzOwomIzQzOwljdHgtJmd0O2F0dHJfbGlzdF9sb2NrX25pID0gTlVMTDsKJiM0MzsJY3R4LSZndDthdHRyX2xpc3RfbG9ja19tb2RlID0gTlRGU19BVFRSX0NUWF9MT0NLX05PTkU7CiYjNDM7CiYjNDM7CWlmIChsb2NrX21vZGUgPT0gTlRGU19BVFRSX0NUWF9MT0NLX05PTkUpIHsKJiM0MzsJCW50ZnNfYXR0cl9saXN0X2Fzc2VydF9oZWxkKG5pKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlsb2NrX25pID0gbnRmc19hdHRyX2xpc3RfbG9jayhuaSwgbG9ja19tb2RlKTsKJiM0MzsJaWYgKCFsb2NrX25pKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwljdHgtJmd0O2F0dHJfbGlzdF9sb2NrX25pID0gbG9ja19uaTsKJiM0MzsJY3R4LSZndDthdHRyX2xpc3RfbG9ja19tb2RlID0gbG9ja19tb2RlOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIG50ZnNfYXR0cl91bmxvY2tfc2VhcmNoX2N0eChzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eCkKJiM0Mzt7CiYjNDM7CWlmICghY3R4LSZndDthdHRyX2xpc3RfbG9ja19uaSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbnRmc19hdHRyX2xpc3RfdW5sb2NrKGN0eC0mZ3Q7YXR0cl9saXN0X2xvY2tfbmksIGN0eC0mZ3Q7YXR0cl9saXN0X2xvY2tfbW9kZSk7CiYjNDM7CiYjNDM7CWN0eC0mZ3Q7YXR0cl9saXN0X2xvY2tfbmkgPSBOVUxMOwomIzQzOwljdHgtJmd0O2F0dHJfbGlzdF9sb2NrX21vZGUgPSBOVEZTX0FUVFJfQ1RYX0xPQ0tfTk9ORTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIG50ZnNfYXR0cl9pbml0X3NlYXJjaF9jdHggLSBpbml0aWFsaXplIGFuIGF0dHJpYnV0ZSBzZWFyY2ggY29udGV4dAogICogQGN0eDogICAgICAgIGF0dHJpYnV0ZSBzZWFyY2ggY29udGV4dCB0byBpbml0aWFsaXplCkBAIC0xNjA5LDYgJiM0MzsxNjk5LDggQEAgc3RhdGljIGJvb2wgbnRmc19hdHRyX2luaXRfc2VhcmNoX2N0eChzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eCwKIAljdHgtJmd0O2Jhc2VfbXJlYyA9IE5VTEw7CiAJY3R4LSZndDtiYXNlX2F0dHIgPSBOVUxMOwogCWN0eC0mZ3Q7bWFwcGVkX2Jhc2VfbXJlYyA9IGZhbHNlOwomIzQzOwljdHgtJmd0O2F0dHJfbGlzdF9sb2NrX25pID0gTlVMTDsKJiM0MzsJY3R4LSZndDthdHRyX2xpc3RfbG9ja19tb2RlID0gTlRGU19BVFRSX0NUWF9MT0NLX05PTkU7CiAJcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE2MjQsNiAmIzQzOzE3MTYsOSBAQCBzdGF0aWMgYm9vbCBudGZzX2F0dHJfaW5pdF9zZWFyY2hfY3R4KHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4LAogICovCiB2b2lkIG50ZnNfYXR0cl9yZWluaXRfc2VhcmNoX2N0eChzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eCkKIHsKJiM0MzsJc3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbGlzdF9sb2NrX25pID0gY3R4LSZndDthdHRyX2xpc3RfbG9ja19uaTsKJiM0MzsJZW51bSBudGZzX2F0dHJfc2VhcmNoX2N0eF9sb2NrX21vZGUgYXR0cl9saXN0X2xvY2tfbW9kZSA9CiYjNDM7CQljdHgtJmd0O2F0dHJfbGlzdF9sb2NrX21vZGU7CiAJYm9vbCBtYXBwZWRfbXJlYzsKIAogCWlmIChsaWtlbHkoIWN0eC0mZ3Q7YmFzZV9udGZzX2lubykpIHsKQEAgLTE2NDUsNiAmIzQzOzE3NDAsOCBAQCB2b2lkIG50ZnNfYXR0cl9yZWluaXRfc2VhcmNoX2N0eChzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eCkKIAltYXBwZWRfbXJlYyA9IGN0eC0mZ3Q7bWFwcGVkX2Jhc2VfbXJlYzsKIAludGZzX2F0dHJfaW5pdF9zZWFyY2hfY3R4KGN0eCwgY3R4LSZndDtiYXNlX250ZnNfaW5vLCBjdHgtJmd0O2Jhc2VfbXJlYyk7CiAJY3R4LSZndDttYXBwZWRfbXJlYyA9IG1hcHBlZF9tcmVjOwomIzQzOwljdHgtJmd0O2F0dHJfbGlzdF9sb2NrX25pID0gYXR0cl9saXN0X2xvY2tfbmk7CiYjNDM7CWN0eC0mZ3Q7YXR0cl9saXN0X2xvY2tfbW9kZSA9IGF0dHJfbGlzdF9sb2NrX21vZGU7CiB9CiAKIC8qCkBAIC0xNjU2LDcgJiM0MzsxNzUzLDggQEAgdm9pZCBudGZzX2F0dHJfcmVpbml0X3NlYXJjaF9jdHgoc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpCiAgKiBhbmQgcmV0dXJuIGl0LiBSZXR1cm4gTlVMTCBpZiBhbGxvY2F0aW9uIGZhaWxlZC4KICAqLwogc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoc3RydWN0IG50ZnNfaW5vZGUgKm5pLAotCQlzdHJ1Y3QgbWZ0X3JlY29yZCAqbXJlYykKJiM0MzsJCXN0cnVjdCBtZnRfcmVjb3JkICptcmVjLAomIzQzOwkJZW51bSBudGZzX2F0dHJfc2VhcmNoX2N0eF9sb2NrX21vZGUgbG9ja19tb2RlKQogewogCXN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4OwogCWJvb2wgaW5pdDsKQEAgLTE2NjcsNiAmIzQzOzE3NjUsOCBAQCBzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKm50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksCiAJCWlmIChpbml0ID09IGZhbHNlKSB7CiAJCQlrbWVtX2NhY2hlX2ZyZWUobnRmc19hdHRyX2N0eF9jYWNoZSwgY3R4KTsKIAkJCWN0eCA9IE5VTEw7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCW50ZnNfYXR0cl9sb2NrX3NlYXJjaF9jdHgoY3R4LCBuaSwgbG9ja19tb2RlKTsKIAkJfQogCX0KIApAQCAtMTY4Miw2ICYjNDM7MTc4Miw4IEBAIHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KHN0cnVjdCBudGZzX2lub2RlICpuaSwKICAqLwogdm9pZCBudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpCiB7CiYjNDM7CW50ZnNfYXR0cl91bmxvY2tfc2VhcmNoX2N0eChjdHgpOwomIzQzOwogCWlmIChjdHgtJmd0O21hcHBlZF9tcmVjKQogCQl1bm1hcF9tZnRfcmVjb3JkKGN0eC0mZ3Q7bnRmc19pbm8pOwogCkBAIC0xOTA1LDcgJiM0MzsyMDA3LDggQEAgaW50IG50ZnNfcmVzaWRlbnRfYXR0cl92YWx1ZV9yZXNpemUoc3RydWN0IG1mdF9yZWNvcmQgKm0sIHN0cnVjdCBhdHRyX3JlY29yZCAqYSwKICAqIGlub2RlIGlfc2l6ZSBpcyB0aGF0IHRoaXMgaXMgbm90IG5lY2Vzc2FyaWx5IHVwdG9kYXRlLiAgVGhpcyBoYXBwZW5zIHdoZW4KICAqIG50ZnNfYXR0cl9tYWtlX25vbl9yZXNpZGVudCgpIGlzIGNhbGxlZCBpbiB0aGUgLSZndDt0cnVuY2F0ZSBjYWxsIHBhdGgocykuCiAgKi8KLWludCBudGZzX2F0dHJfbWFrZV9ub25fcmVzaWRlbnQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBjb25zdCB1MzIgZGF0YV9zaXplKQomIzQzO3N0YXRpYyBpbnQgX19udGZzX2F0dHJfbWFrZV9ub25fcmVzaWRlbnQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCB1MzIgZGF0YV9zaXplLAomIzQzOwkJCQkJIGVudW0gbnRmc19hdHRyX3NlYXJjaF9jdHhfbG9ja19tb2RlIGxvY2tfbW9kZSkKIHsKIAlzNjQgbmV3X3NpemU7CiAJc3RydWN0IGlub2RlICp2aSA9IFZGU19JKG5pKTsKQEAgLTE5NTEsNyAmIzQzOzIwNTQsNyBAQCBpbnQgbnRmc19hdHRyX21ha2Vfbm9uX3Jlc2lkZW50KHN0cnVjdCBudGZzX2lub2RlICpuaSwgY29uc3QgdTMyIGRhdGFfc2l6ZSkKIAkJY3R4ID0gTlVMTDsKIAkJZ290byBlcnJfb3V0OwogCX0KLQljdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoYmFzZV9uaSwgbSk7CiYjNDM7CWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChiYXNlX25pLCBtLCBsb2NrX21vZGUpOwogCWlmICh1bmxpa2VseSghY3R4KSkgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9vdXQ7CkBAIC0yMjI1LDYgJiM0MzsyMzI4LDEyIEBAIGludCBudGZzX2F0dHJfbWFrZV9ub25fcmVzaWRlbnQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBjb25zdCB1MzIgZGF0YV9zaXplKQogCXJldHVybiBlcnI7CiB9CiAKJiM0MztpbnQgbnRmc19hdHRyX21ha2Vfbm9uX3Jlc2lkZW50KHN0cnVjdCBudGZzX2lub2RlICpuaSwgY29uc3QgdTMyIGRhdGFfc2l6ZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBfX250ZnNfYXR0cl9tYWtlX25vbl9yZXNpZGVudChuaSwgZGF0YV9zaXplLAomIzQzOwkJCU5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTsKJiM0Mzt9CiYjNDM7CiAvKgogICogbnRmc19hdHRyX3NldCAtIGZpbGwgKGEgcGFydCBvZikgYW4gYXR0cmlidXRlIHdpdGggYSBieXRlCiAgKiBAbmk6CQludGZzIGlub2RlIGRlc2NyaWJpbmcgdGhlIGF0dHJpYnV0ZSB0byBmaWxsCkBAIC0yMjkwLDcgJiM0MzsyMzk5LDcgQEAgaW50IG50ZnNfYXR0cl9zZXRfaW5pdGlhbGl6ZWRfc2l6ZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGxvZmZfdCBuZXdfc2l6ZSkKIAlpZiAoIU5Jbm9Ob25SZXNpZGVudChuaSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTsKJiM0MzsJY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7CiAJaWYgKCFjdHgpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0yMzkwLDcgJiM0MzsyNDk5LDcgQEAgaW50IG50ZnNfcmVzaWRlbnRfYXR0cl9yZWNvcmRfYWRkKHN0cnVjdCBudGZzX2lub2RlICpuaSwgX19sZTMyIHR5cGUsCiAJfQogCiAJLyogTG9jYXRlIHBsYWNlIHdoZXJlIHJlY29yZCBzaG91bGQgYmUuICovCi0JY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTsKJiM0MzsJY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfTk9ORSk7CiAJaWYgKCFjdHgpIHsKIAkJbnRmc19lcnJvcihuaS0mZ3Q7dm9sLSZndDtzYiwgJiMzNDslczogRmFpbGVkIHRvIGdldCBzZWFyY2ggY29udGV4dCYjMzQ7LAogCQkJCV9fZnVuY19fKTsKQEAgLTI1MTIsNyAmIzQzOzI2MjEsNyBAQCBzdGF0aWMgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfcmVjb3JkX2FkZChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIF9fbGUzMiB0eXBlLAogCX0KIAogCS8qIExvY2F0ZSBwbGFjZSB3aGVyZSByZWNvcmQgc2hvdWxkIGJlLiAqLwotCWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCk7CiYjNDM7CWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX05PTkUpOwogCWlmICghY3R4KSB7CiAJCXByX2VycigmIzM0OyVzOiBGYWlsZWQgdG8gZ2V0IHNlYXJjaCBjb250ZXh0XG4mIzM0OywgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTI2MjIsNiAmIzQzOzI3MzEsNyBAQCBzdGF0aWMgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfcmVjb3JkX2FkZChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIF9fbGUzMiB0eXBlLAogaW50IG50ZnNfYXR0cl9yZWNvcmRfcm0oc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpCiB7CiAJc3RydWN0IG50ZnNfaW5vZGUgKmJhc2VfbmksICpuaTsKJiM0MzsJdTggKm9sZF9hbCA9IE5VTEw7CiAJX19sZTMyIHR5cGU7CiAJaW50IGVycjsKIApAQCAtMjY2MCw5ICYjNDM7Mjc3MCwxMSBAQCBpbnQgbnRmc19hdHRyX3JlY29yZF9ybShzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eCkKIAkvKiBQb3N0ICRBVFRSSUJVVEVfTElTVCBkZWxldGUgc2V0dXAuICovCiAJaWYgKHR5cGUgPT0gQVRfQVRUUklCVVRFX0xJU1QpIHsKIAkJaWYgKE5Jbm9BdHRyTGlzdChiYXNlX25pKSAmYW1wOyZhbXA7IGJhc2VfbmktJmd0O2F0dHJfbGlzdCkKLQkJCWt2ZnJlZShiYXNlX25pLSZndDthdHRyX2xpc3QpOwomIzQzOwkJCW9sZF9hbCA9IGJhc2VfbmktJmd0O2F0dHJfbGlzdDsKIAkJYmFzZV9uaS0mZ3Q7YXR0cl9saXN0ID0gTlVMTDsKJiM0MzsJCWJhc2VfbmktJmd0O2F0dHJfbGlzdF9zaXplID0gMDsKIAkJTklub0NsZWFyQXR0ckxpc3QoYmFzZV9uaSk7CiYjNDM7CQlrdmZyZWUob2xkX2FsKTsKIAl9CiAKIAkvKiBGcmVlIE1GVCByZWNvcmQsIGlmIGl0IGRvZXNuJiMzOTt0IGNvbnRhaW4gYXR0cmlidXRlcy4gKi8KQEAgLTMwODcsNyAmIzQzOzMxOTksNyBAQCBpbnQgbnRmc19hdHRyX29wZW4oc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBjb25zdCBfX2xlMzIgdHlwZSwKIAkJbmV3bmFtZSA9IG5hbWU7CiAJfQogCi0JY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KGJhc2VfbmksIE5VTEwpOwomIzQzOwljdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoYmFzZV9uaSwgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpOwogCWlmICghY3R4KSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCXByX2VycigmIzM0OyVzOiBGYWlsZWQgdG8gZ2V0IHNlYXJjaCBjb250ZXh0XG4mIzM0OywgX19mdW5jX18pOwpAQCAtMzIzOSw3ICYjNDM7MzM1MSw3IEBAIHZvaWQgbnRmc19hdHRyX2Nsb3NlKHN0cnVjdCBudGZzX2lub2RlICpuaSkKICAqIHdpbGwgbWFwIHRoZSBydW5saXN0IGZyYWdtZW50cyBmcm9tIGVhY2ggb2YgdGhlIGV4dGVudHMgdGh1cyBnaXZpbmcgYWNjZXNzCiAgKiB0byB0aGUgZW50aXJldHkgb2YgdGhlIGRpc2sgYWxsb2NhdGlvbiBvZiBhbiBhdHRyaWJ1dGUuCiAgKi8KLWludCBudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3Qoc3RydWN0IG50ZnNfaW5vZGUgKm5pKQomIzQzO2ludCBudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3Rfbm9sb2NrKHN0cnVjdCBudGZzX2lub2RlICpuaSkKIHsKIAlzNjQgbmV4dF92Y24sIGxhc3RfdmNuLCBoaWdoZXN0X3ZjbjsKIAlzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eDsKQEAgLTMyNjIsNyAmIzQzOzMzNzQsNyBAQCBpbnQgbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0KHN0cnVjdCBudGZzX2lub2RlICpuaSkKIAllbHNlCiAJCWJhc2VfbmkgPSBuaTsKIAotCWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChiYXNlX25pLCBOVUxMKTsKJiM0MzsJY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KGJhc2VfbmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19OT05FKTsKIAlpZiAoIWN0eCkgewogCQludGZzX2Vycm9yKHNiLCAmIzM0OyVzOiBGYWlsZWQgdG8gZ2V0IHNlYXJjaCBjb250ZXh0JiMzNDssIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0zMzU0LDYgJiM0MzszNDY2LDE4IEBAIGludCBudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3Qoc3RydWN0IG50ZnNfaW5vZGUgKm5pKQogCXJldHVybiBlcnI7CiB9CiAKJiM0MztpbnQgbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0KHN0cnVjdCBudGZzX2lub2RlICpuaSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBudGZzX2lub2RlICphdHRyX2xvY2tfbmk7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTsKJiM0MzsJZXJyID0gbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0X25vbG9jayhuaSk7CiYjNDM7CW50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiAvKgogICogbnRmc19hdHRyX3JlY29yZF9tb3ZlX3RvIC0gbW92ZSBhdHRyaWJ1dGUgcmVjb3JkIHRvIHRhcmdldCBpbm9kZQogICogQGN0eDoJYXR0cmlidXRlIHNlYXJjaCBjb250ZXh0IGRlc2NyaWJpbmcgdGhlIGF0dHJpYnV0ZSByZWNvcmQKQEAgLTMzODgsNyAmIzQzOzM1MTIsNyBAQCBpbnQgbnRmc19hdHRyX3JlY29yZF9tb3ZlX3RvKHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4LCBzdHJ1Y3QgbnRmc19pbm9kZQogCiAJLyogRmluZCBwbGFjZSBpbiBNRlQgcmVjb3JkIHdoZXJlIGF0dHJpYnV0ZSB3aWxsIGJlIG1vdmVkLiAqLwogCWEgPSBjdHgtJmd0O2F0dHI7Ci0JbmN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCk7CiYjNDM7CW5jdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19OT05FKTsKIAlpZiAoIW5jdHgpIHsKIAkJbnRmc19lcnJvcihzYiwgJiMzNDslczogRmFpbGVkIHRvIGdldCBzZWFyY2ggY29udGV4dCYjMzQ7LCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMzQ3NSw3ICYjNDM7MzU5OSw3IEBAIGludCBudGZzX2F0dHJfcmVjb3JkX21vdmVfYXdheShzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eCwgaW50IGV4dHJhKQogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQllcnIgPSBudGZzX2lub2RlX2F0dGFjaF9hbGxfZXh0ZW50cyhjdHgtJmd0O250ZnNfaW5vKTsKJiM0MzsJZXJyID0gbnRmc19pbm9kZV9hdHRhY2hfYWxsX2V4dGVudHNfbm9sb2NrKGN0eC0mZ3Q7bnRmc19pbm8pOwogCWlmIChlcnIpIHsKIAkJbnRmc19lcnJvcihzYiwgJiMzNDtDb3VsZG4mIzM5O3QgYXR0YWNoIGV4dGVudHMsIGlub2RlPSVsbHUmIzM0OywKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpYmFzZV9uaS0mZ3Q7bWZ0X25vKTsKQEAgLTM1NzQsOSAmIzQzOzM2OTgsOCBAQCBzdGF0aWMgaW50IG50ZnNfYXR0cl91cGRhdGVfbWV0YShzdHJ1Y3QgYXR0cl9yZWNvcmQgKmEsIHN0cnVjdCBudGZzX2lub2RlICpuaSwKIAkJaWYgKChsZTMyX3RvX2NwdShhLSZndDtsZW5ndGgpIC0KIAkJICAgICBsZTE2X3RvX2NwdShhLSZndDtkYXRhLm5vbl9yZXNpZGVudC5tYXBwaW5nX3BhaXJzX29mZnNldCkgPT0gOCkgJmFtcDsmYW1wOwogCQkgICAgIShsZTMyX3RvX2NwdShtLSZndDtieXRlc19hbGxvY2F0ZWQpIC0gbGUzMl90b19jcHUobS0mZ3Q7Ynl0ZXNfaW5fdXNlKSkpIHsKLQogCQkJaWYgKCFOSW5vQXR0ckxpc3QoYmFzZV9uaSkpIHsKLQkJCQllcnIgPSBudGZzX2lub2RlX2FkZF9hdHRybGlzdChiYXNlX25pKTsKJiM0MzsJCQkJZXJyID0gbnRmc19pbm9kZV9hZGRfYXR0cmxpc3Rfbm9sb2NrKGJhc2VfbmkpOwogCQkJCWlmIChlcnIpCiAJCQkJCWdvdG8gb3V0OwogCQkJCWVyciA9IC1FQUdBSU47CkBAIC0zNjc3LDcgJiM0MzszODAwLDcgQEAgc3RhdGljIGludCBudGZzX2F0dHJfdXBkYXRlX21ldGEoc3RydWN0IGF0dHJfcmVjb3JkICphLCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksCiAgKiBjYWxsIHRvIHRoaXMgZnVuY3Rpb24uIFZpY2UtdmVyc2EgQG5hLSZndDtjb21wcmVzc2VkX3NpemUgd2lsbCBiZSBjYWxjdWxhdGVkIGFuZAogICogc2V0IHRvIGNvcnJlY3QgdmFsdWUgZHVyaW5nIHRoaXMgZnVuY3Rpb24uCiAgKi8KLWludCBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgZnJvbV92Y24pCiYjNDM7c3RhdGljIGludCBfX250ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBmcm9tX3ZjbikKIHsKIAlzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eDsKIAlzdHJ1Y3QgbnRmc19pbm9kZSAqYmFzZV9uaTsKQEAgLTM3MDksNyAmIzQzOzM4MzIsNyBAQCBpbnQgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IGZyb21fdmNuKQogCWVsc2UKIAkJYmFzZV9uaSA9IG5pOwogCi0JY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KGJhc2VfbmksIE5VTEwpOwomIzQzOwljdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoYmFzZV9uaSwgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX05PTkUpOwogCWlmICghY3R4KSB7CiAJCW50ZnNfZXJyb3Ioc2IsICYjMzQ7JXM6IEZhaWxlZCB0byBnZXQgc2VhcmNoIGNvbnRleHQmIzM0OywgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTM4MDksOCAmIzQzOzM5MzIsOCBAQCBpbnQgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IGZyb21fdmNuKQogCQkJICovCiAJCQlpZiAobmktJmd0O3R5cGUgPT0gQVRfQVRUUklCVVRFX0xJU1QpIHsKIAkJCQludGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoY3R4KTsKLQkJCQlpZiAobnRmc19pbm9kZV9mcmVlX3NwYWNlKGJhc2VfbmksIG1wX3NpemUgLQotCQkJCQkJCWN1cl9tYXhfbXBfc2l6ZSkpIHsKJiM0MzsJCQkJaWYgKG50ZnNfaW5vZGVfZnJlZV9zcGFjZV9ub2xvY2soYmFzZV9uaSwgbXBfc2l6ZSAtCiYjNDM7CQkJCQkJCQljdXJfbWF4X21wX3NpemUpKSB7CiAJCQkJCW50ZnNfZGVidWcoJiMzNDtBdHRyaWJ1dGUgbGlzdCBpcyB0b28gYmlnLiBEZWZyYWdtZW50IHRoZSB2b2x1bWVcbiYjMzQ7KTsKIAkJCQkJcmV0dXJuIC1FTk9TUEM7CiAJCQkJfQpAQCAtMzgyMiw3ICYjNDM7Mzk0NSw3IEBAIGludCBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgZnJvbV92Y24pCiAJCQkvKiBBZGQgYXR0cmlidXRlIGxpc3QgaWYgaXQgaXNuJiMzOTt0IHByZXNlbnQsIGFuZCByZXRyeS4gKi8KIAkJCWlmICghTklub0F0dHJMaXN0KGJhc2VfbmkpKSB7CiAJCQkJbnRmc19hdHRyX3B1dF9zZWFyY2hfY3R4KGN0eCk7Ci0JCQkJaWYgKG50ZnNfaW5vZGVfYWRkX2F0dHJsaXN0KGJhc2VfbmkpKSB7CiYjNDM7CQkJCWlmIChudGZzX2lub2RlX2FkZF9hdHRybGlzdF9ub2xvY2soYmFzZV9uaSkpIHsKIAkJCQkJbnRmc19lcnJvcihzYiwgJiMzNDtDYW4gbm90IGFkZCBhdHRybGlzdCYjMzQ7KTsKIAkJCQkJcmV0dXJuIC1FSU87CiAJCQkJfQpAQCAtNDAyNiw2ICYjNDM7NDE0OSwyMyBAQCBpbnQgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IGZyb21fdmNuKQogCXJldHVybiBlcnI7CiB9CiAKJiM0MztpbnQgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IGZyb21fdmNuKQomIzQzO3sKJiM0MzsJc3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJYXR0cl9sb2NrX25pID0gbnRmc19hdHRyX2xpc3RfbG9jayhuaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTsKJiM0MzsJZXJyID0gX19udGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIGZyb21fdmNuKTsKJiM0MzsJbnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlyc19ub2xvY2soc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgZnJvbV92Y24pCiYjNDM7ewomIzQzOwlyZXR1cm4gX19udGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIGZyb21fdmNuKTsKJiM0Mzt9CiYjNDM7CiAvKgogICogbnRmc19hdHRyX21ha2VfcmVzaWRlbnQgLSBjb252ZXJ0IGEgbm9uLXJlc2lkZW50IHRvIGEgcmVzaWRlbnQgYXR0cmlidXRlCiAgKiBAbmk6CQlvcGVuIG50ZnMgYXR0cmlidXRlIHRvIG1ha2UgcmVzaWRlbnQKQEAgLTQwODMsNyAmIzQzOzQyMjMsNyBAQCBzdGF0aWMgaW50IG50ZnNfYXR0cl9tYWtlX3Jlc2lkZW50KHN0cnVjdCBudGZzX2lub2RlICpuaSwgc3RydWN0IG50ZnNfYXR0cl9zZWFyYwogCX0KIAogCS8qIFJlYWQgYW5kIGNhY2hlIHRoZSB3aG9sZSBydW5saXN0IGlmIG5vdCBhbHJlYWR5IGRvbmUuICovCi0JZXJyID0gbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0KG5pKTsKJiM0MzsJZXJyID0gbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0X25vbG9jayhuaSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtNDIyMCw3ICYjNDM7NDM2MCw3IEBAIHN0YXRpYyBpbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9zaHJpbmsoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBjb25zdCBzNjQgbmV3c2l6CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAKLQkJY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTsKJiM0MzsJCWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpOwogCQlpZiAoIWN0eCkgewogCQkJbnRmc19lcnJvcih2b2wtJmd0O3NiLCAmIzM0OyVzOiBGYWlsZWQgdG8gZ2V0IHNlYXJjaCBjb250ZXh0JiMzNDssIF9fZnVuY19fKTsKIAkJCXJldHVybiAtRU5PTUVNOwpAQCAtNDI2OCw3ICYjNDM7NDQwOCw3IEBAIHN0YXRpYyBpbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9zaHJpbmsoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBjb25zdCBzNjQgbmV3c2l6CiAJfQogCiAJLyogR2V0IHRoZSBmaXJzdCBhdHRyaWJ1dGUgcmVjb3JkLiAqLwotCWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChiYXNlX25pLCBOVUxMKTsKJiM0MzsJY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KGJhc2VfbmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTsKIAlpZiAoIWN0eCkgewogCQludGZzX2Vycm9yKHZvbC0mZ3Q7c2IsICYjMzQ7JXM6IEZhaWxlZCB0byBnZXQgc2VhcmNoIGNvbnRleHQmIzM0OywgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTQzODAsNyAmIzQzOzQ1MjAsOCBAQCBzdGF0aWMgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfZXhwYW5kKHN0cnVjdCBudGZzX2lub2RlICpuaSwgY29uc3QgczY0IG5ld3NpegogCSAqIGNsdXN0ZXJzIGlmIHRoZXJlIGlzIGEgY2hhbmdlLgogCSAqLwogCWlmIChudGZzX2J5dGVzX3RvX2NsdXN0ZXIodm9sLCBuaS0mZ3Q7YWxsb2NhdGVkX3NpemUpICZsdDsgZmlyc3RfZnJlZV92Y24pIHsKLQkJZXJyID0gbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0KG5pKTsKJiM0MzsJCWVyciA9IG5lZWRfbG9jayA/IG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdChuaSkgOgomIzQzOwkJCQludGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3Rfbm9sb2NrKG5pKTsKIAkJaWYgKGVycikgewogCQkJbnRmc19lcnJvcihzYiwgJiMzNDtudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3QgZmFpbGVkJiMzNDspOwogCQkJcmV0dXJuIGVycjsKQEAgLTQ0OTksMTQgJiM0Mzs0NjQwLDE1IEBAIHN0YXRpYyBpbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9leHBhbmQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBjb25zdCBzNjQgbmV3c2l6CiAKIAkJLyogUHJlcGFyZSB0byBtYXBwaW5nIHBhaXJzIHVwZGF0ZS4gKi8KIAkJbmktJmd0O2FsbG9jYXRlZF9zaXplID0gbnRmc19jbHVzdGVyX3RvX2J5dGVzKHZvbCwgZmlyc3RfZnJlZV92Y24pOwotCQllcnIgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIDApOwomIzQzOwkJZXJyID0gbmVlZF9sb2NrID8gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG5pLCAwKSA6CiYjNDM7CQkJCW50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlyc19ub2xvY2sobmksIDApOwogCQlpZiAoZXJyKSB7CiAJCQludGZzX2RlYnVnKCYjMzQ7TWFwcGluZyBwYWlycyB1cGRhdGUgZmFpbGVkJiMzNDspOwogCQkJZ290byByb2xsYmFjazsKIAkJfQogCX0KIAotCWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChiYXNlX25pLCBOVUxMKTsKJiM0MzsJY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KGJhc2VfbmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTsKIAlpZiAoIWN0eCkgewogCQllcnIgPSAtRU5PTUVNOwogCQlpZiAobmktJmd0O2FsbG9jYXRlZF9zaXplID09IG9yZ19hbGxvY19zaXplKQpAQCAtNDU1NywxNiAmIzQzOzQ2OTksMjIgQEAgc3RhdGljIGludCBudGZzX25vbl9yZXNpZGVudF9hdHRyX2V4cGFuZChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGNvbnN0IHM2NCBuZXdzaXoKIAkJa3ZmcmVlKG5pLSZndDtydW5saXN0LnJsKTsKIAkJbmktJmd0O3J1bmxpc3QucmwgPSBOVUxMOwogCQludGZzX2Vycm9yKHNiLCAmIzM0O0NvdWxkbiYjMzk7dCB0cnVuY2F0ZSBydW5saXN0LiBSb2xsYmFjayBmYWlsZWQmIzM0Oyk7Ci0JfSBlbHNlIHsKLQkJLyogUHJlcGFyZSB0byBtYXBwaW5nIHBhaXJzIHVwZGF0ZS4gKi8KLQkJbmktJmd0O2FsbG9jYXRlZF9zaXplID0gb3JnX2FsbG9jX3NpemU7Ci0JCS8qIFJlc3RvcmUgbWFwcGluZyBwYWlycy4gKi8KLQkJaWYgKG5lZWRfbG9jaykKLQkJCWRvd25fcmVhZCgmYW1wO25pLSZndDtydW5saXN0LmxvY2spOwotCQlpZiAobnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG5pLCAwKSkKLQkJCW50ZnNfZXJyb3Ioc2IsICYjMzQ7RmFpbGVkIHRvIHJlc3RvcmUgb2xkIG1hcHBpbmcgcGFpcnMmIzM0Oyk7Ci0JCWlmIChuZWVkX2xvY2spCi0JCQl1cF9yZWFkKCZhbXA7bmktJmd0O3J1bmxpc3QubG9jayk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCS8qIFByZXBhcmUgdG8gbWFwcGluZyBwYWlycyB1cGRhdGUuICovCiYjNDM7CQkJbmktJmd0O2FsbG9jYXRlZF9zaXplID0gb3JnX2FsbG9jX3NpemU7CiYjNDM7CQkJLyogUmVzdG9yZSBtYXBwaW5nIHBhaXJzLiAqLwomIzQzOwkJCWlmIChuZWVkX2xvY2spIHsKJiM0MzsJCQkJc3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTsKJiM0MzsKJiM0MzsJCQkJYXR0cl9sb2NrX25pID0gbnRmc19hdHRyX2xpc3RfbG9jayhuaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTsKJiM0MzsJCQkJZG93bl9yZWFkKCZhbXA7bmktJmd0O3J1bmxpc3QubG9jayk7CiYjNDM7CQkJCWlmIChudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNfbm9sb2NrKG5pLCAwKSkKJiM0MzsJCQkJCW50ZnNfZXJyb3Ioc2IsICYjMzQ7RmFpbGVkIHRvIHJlc3RvcmUgb2xkIG1hcHBpbmcgcGFpcnMmIzM0Oyk7CiYjNDM7CQkJCXVwX3JlYWQoJmFtcDtuaS0mZ3Q7cnVubGlzdC5sb2NrKTsKJiM0MzsJCQkJbnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTsKJiM0MzsJCQl9IGVsc2UgaWYgKG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlyc19ub2xvY2sobmksIDApKSB7CiYjNDM7CQkJCW50ZnNfZXJyb3Ioc2IsICYjMzQ7RmFpbGVkIHRvIHJlc3RvcmUgb2xkIG1hcHBpbmcgcGFpcnMmIzM0Oyk7CiYjNDM7CQkJfQogCiAJCWlmIChOSW5vU3BhcnNlKG5pKSB8fCBOSW5vQ29tcHJlc3NlZChuaSkpIHsKIAkJCW5pLSZndDtpdHlwZS5jb21wcmVzc2VkLnNpemUgPSAgb3JnX2NvbXByZXNzZWRfc2l6ZTsKQEAgLTQ2MDAsNiAmIzQzOzQ3NDgsNyBAQCBzdGF0aWMgaW50IG50ZnNfcmVzaWRlbnRfYXR0cl9yZXNpemUoc3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbmksIGNvbnN0IHM2NCBuZXdzaQogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSB2b2wtJmd0O3NiOwogCWludCBlcnIgPSAtRUlPOwogCXN0cnVjdCBudGZzX2lub2RlICpiYXNlX25pLCAqZXh0X25pID0gTlVMTDsKJiM0MzsJdTMyIHJlc2lkZW50X3ZhbHVlX2xlbjsKIAogYXR0cl9yZXNpemVfYWdhaW46CiAJbnRmc19kZWJ1ZygmIzM0O0lub2RlIDB4JWxseCBhdHRyIDB4JXggbmV3IHNpemUgJWxsZFxuJiMzNDssCkBAIC00NjEyLDcgJiM0Mzs0NzYxLDcgQEAgc3RhdGljIGludCBudGZzX3Jlc2lkZW50X2F0dHJfcmVzaXplKHN0cnVjdCBudGZzX2lub2RlICphdHRyX25pLCBjb25zdCBzNjQgbmV3c2kKIAkJYmFzZV9uaSA9IGF0dHJfbmk7CiAKIAkvKiBHZXQgdGhlIGF0dHJpYnV0ZSByZWNvcmQgdGhhdCBuZWVkcyBtb2RpZmljYXRpb24uICovCi0JY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KGJhc2VfbmksIE5VTEwpOwomIzQzOwljdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoYmFzZV9uaSwgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpOwogCWlmICghY3R4KSB7CiAJCW50ZnNfZXJyb3Ioc2IsICYjMzQ7JXM6IEZhaWxlZCB0byBnZXQgc2VhcmNoIGNvbnRleHQmIzM0OywgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTQ2NjQsOCAmIzQzOzQ4MTMsOSBAQCBzdGF0aWMgaW50IG50ZnNfcmVzaWRlbnRfYXR0cl9yZXNpemUoc3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbmksIGNvbnN0IHM2NCBuZXdzaQogCS8qIFRoZXJlIGlzIG5vdCBlbm91Z2ggc3BhY2UgaW4gdGhlIG1mdCByZWNvcmQgdG8gcGVyZm9ybSB0aGUgcmVzaXplLiAqLwogCiAJLyogTWFrZSB0aGUgYXR0cmlidXRlIG5vbi1yZXNpZGVudCBpZiBwb3NzaWJsZS4gKi8KLQllcnIgPSBudGZzX2F0dHJfbWFrZV9ub25fcmVzaWRlbnQoYXR0cl9uaSwKLQkJCWxlMzJfdG9fY3B1KGN0eC0mZ3Q7YXR0ci0mZ3Q7ZGF0YS5yZXNpZGVudC52YWx1ZV9sZW5ndGgpKTsKJiM0MzsJcmVzaWRlbnRfdmFsdWVfbGVuID0gbGUzMl90b19jcHUoY3R4LSZndDthdHRyLSZndDtkYXRhLnJlc2lkZW50LnZhbHVlX2xlbmd0aCk7CiYjNDM7CWVyciA9IF9fbnRmc19hdHRyX21ha2Vfbm9uX3Jlc2lkZW50KGF0dHJfbmksIHJlc2lkZW50X3ZhbHVlX2xlbiwKJiM0MzsJCQkJCSAgICBOVEZTX0FUVFJfQ1RYX0xPQ0tfTk9ORSk7CiAJaWYgKCFlcnIpIHsKIAkJbWFya19tZnRfcmVjb3JkX2RpcnR5KGN0eC0mZ3Q7bnRmc19pbm8pOwogCQludGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoY3R4KTsKQEAgLTQ3MTIsNyAmIzQzOzQ4NjIsOCBAQCBzdGF0aWMgaW50IG50ZnNfcmVzaWRlbnRfYXR0cl9yZXNpemUoc3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbmksIGNvbnN0IHM2NCBuZXdzaQogCQkJY29udGludWU7CiAJCX0KIAotCQlpZiAobnRmc19hdHRyX21ha2Vfbm9uX3Jlc2lkZW50KE5URlNfSSh0dmkpLCB2YWx1ZV9sZW4pKSB7CiYjNDM7CQlpZiAoX19udGZzX2F0dHJfbWFrZV9ub25fcmVzaWRlbnQoTlRGU19JKHR2aSksIHZhbHVlX2xlbiwKJiM0MzsJCQkJCQkgIE5URlNfQVRUUl9DVFhfTE9DS19OT05FKSkgewogCQkJaXB1dCh0dmkpOwogCQkJY29udGludWU7CiAJCX0KQEAgLTQ4NDQsMTIgJiM0Mzs0OTk1LDE2IEBAIGludCBfX250ZnNfYXR0cl90cnVuY2F0ZV92ZnMoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBjb25zdCBzNjQgbmV3c2l6ZSwKIAogCWlmIChOSW5vTm9uUmVzaWRlbnQobmkpKSB7CiAJCWlmIChuZXdzaXplICZndDsgaV9zaXplKSB7CiYjNDM7CQkJc3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTsKJiM0MzsKJiM0MzsJCQlhdHRyX2xvY2tfbmkgPSBudGZzX2F0dHJfbGlzdF9sb2NrKG5pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpOwogCQkJZG93bl93cml0ZSgmYW1wO25pLSZndDtydW5saXN0LmxvY2spOwogCQkJZXJyID0gbnRmc19ub25fcmVzaWRlbnRfYXR0cl9leHBhbmQobmksIG5ld3NpemUsIDAsCiAJCQkJCQkJICAgIE5Wb2xEaXNhYmxlU3BhcnNlKG5pLSZndDt2b2wpID8KIAkJCQkJCQkgICAgSE9MRVNfTk8gOiBIT0xFU19PSywKIAkJCQkJCQkgICAgZmFsc2UpOwogCQkJdXBfd3JpdGUoJmFtcDtuaS0mZ3Q7cnVubGlzdC5sb2NrKTsKJiM0MzsJCQludGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpOwogCQl9IGVsc2UKIAkJCWVyciA9IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfc2hyaW5rKG5pLCBuZXdzaXplKTsKIAl9IGVsc2UKQEAgLTQ5NzksMTQgJiM0Mzs1MTM0LDE3IEBAIGludCBudGZzX2F0dHJfbWFwX2NsdXN0ZXIoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgdmNuX3N0YXJ0LCBzNjQgKmxjbl9zdGFydCwKIAlpbnQgZXJyID0gMDsKIAlzaXplX3QgbmV3X3JsX2NvdW50OwogCi0JZXJyID0gbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0KG5pKTsKJiM0MzsJZXJyID0gbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0X25vbG9jayhuaSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWlmIChOSW5vQXR0cihuaSkpCi0JCWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaS0mZ3Q7ZXh0LmJhc2VfbnRmc19pbm8sIE5VTEwpOwotCWVsc2UKLQkJY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTsKJiM0MzsJaWYgKE5Jbm9BdHRyKG5pKSkgewomIzQzOwkJc3RydWN0IG50ZnNfaW5vZGUgKmJhc2VfbmkgPSBuaS0mZ3Q7ZXh0LmJhc2VfbnRmc19pbm87CiYjNDM7CiYjNDM7CQljdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoYmFzZV9uaSwgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX05PTkUpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfTk9ORSk7CiYjNDM7CX0KIAlpZiAoIWN0eCkgewogCQludGZzX2Vycm9yKHZvbC0mZ3Q7c2IsICYjMzQ7JXM6IEZhaWxlZCB0byBnZXQgc2VhcmNoIGNvbnRleHQmIzM0OywgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTUwOTMsNyAmIzQzOzUyNTEsNyBAQCBpbnQgbnRmc19hdHRyX21hcF9jbHVzdGVyKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IHZjbl9zdGFydCwgczY0ICpsY25fc3RhcnQsCiAKIAlpZiAodXBkYXRlX21wKSB7CiAJCW50ZnNfYXR0cl9yZWluaXRfc2VhcmNoX2N0eChjdHgpOwotCQllcnIgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIDApOwomIzQzOwkJZXJyID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzX25vbG9jayhuaSwgMCk7CiAJCWlmIChlcnIpIHsKIAkJCWludCBlcnIyOwogCkBAIC01MTQ2LDcgJiM0Mzs1MzA0LDcgQEAgaW50IG50ZnNfYXR0cl9ybShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpCiAJCWVyciA9IG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdChuaSk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwotCQljdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwpOwomIzQzOwkJY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7CiAJCWlmICghY3R4KSB7CiAJCQludGZzX2Vycm9yKHNiLCAmIzM0OyVzOiBGYWlsZWQgdG8gZ2V0IHNlYXJjaCBjb250ZXh0JiMzNDssIF9fZnVuY19fKTsKIAkJCXJldHVybiAtRU5PTUVNOwpAQCAtNTE2MCw3ICYjNDM7NTMxOCw3IEBAIGludCBudGZzX2F0dHJfcm0oc3RydWN0IG50ZnNfaW5vZGUgKm5pKQogCX0KIAogCS8qIFNlYXJjaCBmb3IgYXR0cmlidXRlIGV4dGVudHMgYW5kIHJlbW92ZSB0aGVtIGFsbC4gKi8KLQljdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoYmFzZV9uaSwgTlVMTCk7CiYjNDM7CWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChiYXNlX25pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpOwogCWlmICghY3R4KSB7CiAJCW50ZnNfZXJyb3Ioc2IsICYjMzQ7JXM6IEZhaWxlZCB0byBnZXQgc2VhcmNoIGNvbnRleHQmIzM0OywgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTUxOTIsNyAmIzQzOzUzNTAsNyBAQCBpbnQgbnRmc19hdHRyX2V4aXN0KHN0cnVjdCBudGZzX2lub2RlICpuaSwgY29uc3QgX19sZTMyIHR5cGUsIF9fbGUxNiAqbmFtZSwKIAogCW50ZnNfZGVidWcoJiMzNDtFbnRlcmluZ1xuJiMzNDspOwogCi0JY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTsKJiM0MzsJY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7CiAJaWYgKCFjdHgpIHsKIAkJbnRmc19lcnJvcihuaS0mZ3Q7dm9sLSZndDtzYiwgJiMzNDslczogRmFpbGVkIHRvIGdldCBzZWFyY2ggY29udGV4dCYjMzQ7LAogCQkJCV9fZnVuY19fKTsKQEAgLTUzMDEsNiAmIzQzOzU0NTksNyBAQCB2b2lkICpudGZzX2F0dHJfcmVhZGFsbChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGNvbnN0IF9fbGUzMiB0eXBlLAogaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfaW5zZXJ0X3JhbmdlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IHN0YXJ0X3ZjbiwgczY0IGxlbikKIHsKIAlzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCA9IG5pLSZndDt2b2w7CiYjNDM7CXN0cnVjdCBudGZzX2lub2RlICphdHRyX2xvY2tfbmk7CiAJc3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqaG9sZV9ybCwgKnJsOwogCXN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4OwogCWludCByZXQ7CkBAIC01MzIxLDE2ICYjNDM7NTQ4MCwxOSBAQCBpbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9pbnNlcnRfcmFuZ2Uoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgc3RhcnRfdmNuLCBzNgogCWhvbGVfcmxbMV0ubGNuID0gTENOX0VOT0VOVDsKIAlob2xlX3JsWzFdLmxlbmd0aCA9IDA7CiAKJiM0MzsJYXR0cl9sb2NrX25pID0gbnRmc19hdHRyX2xpc3RfbG9jayhuaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTsKIAlkb3duX3dyaXRlKCZhbXA7bmktJmd0O3J1bmxpc3QubG9jayk7Ci0JcmV0ID0gbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0KG5pKTsKJiM0MzsJcmV0ID0gbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0X25vbG9jayhuaSk7CiAJaWYgKHJldCkgewogCQl1cF93cml0ZSgmYW1wO25pLSZndDtydW5saXN0LmxvY2spOwomIzQzOwkJbnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAlybCA9IG50ZnNfcmxfZmluZF92Y25fbm9sb2NrKG5pLSZndDtydW5saXN0LnJsLCBzdGFydF92Y24pOwogCWlmICghcmwpIHsKIAkJdXBfd3JpdGUoJmFtcDtuaS0mZ3Q7cnVubGlzdC5sb2NrKTsKJiM0MzsJCW50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7CiAJCWtmcmVlKGhvbGVfcmwpOwogCQlyZXR1cm4gLUVJTzsKIAl9CkBAIC01MzM5LDYgJiM0Mzs1NTAxLDcgQEAgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfaW5zZXJ0X3JhbmdlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IHN0YXJ0X3ZjbiwgczYKIAkJCQkgIGhvbGVfcmwsIDEsICZhbXA7bmV3X3JsX2NvdW50KTsKIAlpZiAoSVNfRVJSKHJsKSkgewogCQl1cF93cml0ZSgmYW1wO25pLSZndDtydW5saXN0LmxvY2spOwomIzQzOwkJbnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTsKIAkJa2ZyZWUoaG9sZV9ybCk7CiAJCXJldHVybiBQVFJfRVJSKHJsKTsKIAl9CkBAIC01MzQ5LDEyICYjNDM7NTUxMiwxMyBAQCBpbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9pbnNlcnRfcmFuZ2Uoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgc3RhcnRfdmNuLCBzNgogCW5pLSZndDtkYXRhX3NpemUgJiM0Mzs9IG50ZnNfY2x1c3Rlcl90b19ieXRlcyh2b2wsIGxlbik7CiAJaWYgKG50ZnNfY2x1c3Rlcl90b19ieXRlcyh2b2wsIHN0YXJ0X3ZjbikgJmx0OyBuaS0mZ3Q7aW5pdGlhbGl6ZWRfc2l6ZSkKIAkJbmktJmd0O2luaXRpYWxpemVkX3NpemUgJiM0Mzs9IG50ZnNfY2x1c3Rlcl90b19ieXRlcyh2b2wsIGxlbik7Ci0JcmV0ID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG5pLCAwKTsKJiM0MzsJcmV0ID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzX25vbG9jayhuaSwgMCk7CiAJdXBfd3JpdGUoJmFtcDtuaS0mZ3Q7cnVubGlzdC5sb2NrKTsKJiM0MzsJbnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTsKJiM0MzsJY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7CiAJaWYgKCFjdHgpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJcmV0dXJuIHJldDsKQEAgLTUzNzksNiAmIzQzOzU1NDMsNyBAQCBpbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9pbnNlcnRfcmFuZ2Uoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgc3RhcnRfdmNuLCBzNgogaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfY29sbGFwc2VfcmFuZ2Uoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgc3RhcnRfdmNuLCBzNjQgbGVuKQogewogCXN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sID0gbmktJmd0O3ZvbDsKJiM0MzsJc3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTsKIAlzdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpwdW5jaF9ybCwgKnJsOwogCXN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4ID0gTlVMTDsKIAlzNjQgZW5kX3ZjbjsKQEAgLTUzOTMsMTAgJiM0Mzs1NTU4LDEyIEBAIGludCBudGZzX25vbl9yZXNpZGVudF9hdHRyX2NvbGxhcHNlX3JhbmdlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IHN0YXJ0X3ZjbiwKIAlpZiAoc3RhcnRfdmNuICZndDs9IGVuZF92Y24pCiAJCXJldHVybiAtRUlOVkFMOwogCiYjNDM7CWF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7CiAJZG93bl93cml0ZSgmYW1wO25pLSZndDtydW5saXN0LmxvY2spOwotCXJldCA9IG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdChuaSk7CiYjNDM7CXJldCA9IG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdF9ub2xvY2sobmkpOwogCWlmIChyZXQpIHsKIAkJdXBfd3JpdGUoJmFtcDtuaS0mZ3Q7cnVubGlzdC5sb2NrKTsKJiM0MzsJCW50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC01NDA2LDYgJiM0Mzs1NTczLDcgQEAgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfY29sbGFwc2VfcmFuZ2Uoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgc3RhcnRfdmNuLAogCXJsID0gbnRmc19ybF9maW5kX3Zjbl9ub2xvY2sobmktJmd0O3J1bmxpc3QucmwsIHN0YXJ0X3Zjbik7CiAJaWYgKCFybCkgewogCQl1cF93cml0ZSgmYW1wO25pLSZndDtydW5saXN0LmxvY2spOwomIzQzOwkJbnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC01NDEzLDYgJiM0Mzs1NTgxLDcgQEAgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfY29sbGFwc2VfcmFuZ2Uoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgc3RhcnRfdmNuLAogCQkJCSAgICBzdGFydF92Y24sIGxlbiwgJmFtcDtwdW5jaF9ybCwgJmFtcDtuZXdfcmxfY250KTsKIAlpZiAoSVNfRVJSKHJsKSkgewogCQl1cF93cml0ZSgmYW1wO25pLSZndDtydW5saXN0LmxvY2spOwomIzQzOwkJbnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTsKIAkJcmV0dXJuIFBUUl9FUlIocmwpOwogCX0KIAluaS0mZ3Q7cnVubGlzdC5ybCA9IHJsOwpAQCAtNTQzNCwxNSAmIzQzOzU2MDMsMTcgQEAgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfY29sbGFwc2VfcmFuZ2Uoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgc3RhcnRfdmNuLAogCX0KIAogCWlmIChuaS0mZ3Q7YWxsb2NhdGVkX3NpemUgJmd0OyAwKSB7Ci0JCXJldCA9IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhuaSwgMCk7CiYjNDM7CQlyZXQgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNfbm9sb2NrKG5pLCAwKTsKIAkJaWYgKHJldCkgewogCQkJdXBfd3JpdGUoJmFtcDtuaS0mZ3Q7cnVubGlzdC5sb2NrKTsKJiM0MzsJCQludGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpOwogCQkJZ290byBvdXRfcmw7CiAJCX0KIAl9CiAJdXBfd3JpdGUoJmFtcDtuaS0mZ3Q7cnVubGlzdC5sb2NrKTsKJiM0MzsJbnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTsKIAotCWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCk7CiYjNDM7CWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpOwogCWlmICghY3R4KSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0X3JsOwpAQCAtNTQ3NCw2ICYjNDM7NTY0NSw3IEBAIGludCBudGZzX25vbl9yZXNpZGVudF9hdHRyX2NvbGxhcHNlX3JhbmdlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IHN0YXJ0X3ZjbiwKIGludCBudGZzX25vbl9yZXNpZGVudF9hdHRyX3B1bmNoX2hvbGUoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgc3RhcnRfdmNuLCBzNjQgbGVuKQogewogCXN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sID0gbmktJmd0O3ZvbDsKJiM0MzsJc3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTsKIAlzdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpwdW5jaF9ybCwgKnJsOwogCXM2NCBlbmRfdmNuOwogCWludCBkc3RfY250OwpAQCAtNTQ4NywxMCAmIzQzOzU2NTksMTIgQEAgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfcHVuY2hfaG9sZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBzdGFydF92Y24sIHM2NAogCWlmIChzdGFydF92Y24gJmd0Oz0gZW5kX3ZjbikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJYXR0cl9sb2NrX25pID0gbnRmc19hdHRyX2xpc3RfbG9jayhuaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTsKIAlkb3duX3dyaXRlKCZhbXA7bmktJmd0O3J1bmxpc3QubG9jayk7Ci0JcmV0ID0gbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0KG5pKTsKJiM0MzsJcmV0ID0gbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0X25vbG9jayhuaSk7CiAJaWYgKHJldCkgewogCQl1cF93cml0ZSgmYW1wO25pLSZndDtydW5saXN0LmxvY2spOwomIzQzOwkJbnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTU1MDAsNiAmIzQzOzU2NzQsNyBAQCBpbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9wdW5jaF9ob2xlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IHN0YXJ0X3ZjbiwgczY0CiAJcmwgPSBudGZzX3JsX2ZpbmRfdmNuX25vbG9jayhuaS0mZ3Q7cnVubGlzdC5ybCwgc3RhcnRfdmNuKTsKIAlpZiAoIXJsKSB7CiAJCXVwX3dyaXRlKCZhbXA7bmktJmd0O3J1bmxpc3QubG9jayk7CiYjNDM7CQludGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTU1MDcsMTMgJiM0Mzs1NjgyLDE1IEBAIGludCBudGZzX25vbl9yZXNpZGVudF9hdHRyX3B1bmNoX2hvbGUoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgc3RhcnRfdmNuLCBzNjQKIAkJCQlzdGFydF92Y24sIGxlbiwgJmFtcDtwdW5jaF9ybCwgJmFtcDtuZXdfcmxfY291bnQpOwogCWlmIChJU19FUlIocmwpKSB7CiAJCXVwX3dyaXRlKCZhbXA7bmktJmd0O3J1bmxpc3QubG9jayk7CiYjNDM7CQludGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpOwogCQlyZXR1cm4gUFRSX0VSUihybCk7CiAJfQogCW5pLSZndDtydW5saXN0LnJsID0gcmw7CiAJbmktJmd0O3J1bmxpc3QuY291bnQgPSBuZXdfcmxfY291bnQ7CiAKLQlyZXQgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIDApOwomIzQzOwlyZXQgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNfbm9sb2NrKG5pLCAwKTsKIAl1cF93cml0ZSgmYW1wO25pLSZndDtydW5saXN0LmxvY2spOwomIzQzOwludGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpOwogCWlmIChyZXQpIHsKIAkJa3ZmcmVlKHB1bmNoX3JsKTsKIAkJcmV0dXJuIHJldDsKQEAgLTU1NDQsOSAmIzQzOzU3MjEsMTMgQEAgaW50IG50ZnNfYXR0cl9mYWxsb2NhdGUoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBieXRlX2xlbiwgYm8KIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoTklub05vblJlc2lkZW50KG5pKSAmYW1wOyZhbXA7ICFOSW5vRnVsbHlNYXBwZWQobmkpKSB7CiYjNDM7CQlzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pOwomIzQzOwomIzQzOwkJYXR0cl9sb2NrX25pID0gbnRmc19hdHRyX2xpc3RfbG9jayhuaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpOwogCQlkb3duX3dyaXRlKCZhbXA7bmktJmd0O3J1bmxpc3QubG9jayk7Ci0JCWVyciA9IG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdChuaSk7CiYjNDM7CQllcnIgPSBudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3Rfbm9sb2NrKG5pKTsKIAkJdXBfd3JpdGUoJmFtcDtuaS0mZ3Q7cnVubGlzdC5sb2NrKTsKJiM0MzsJCW50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAJfQpAQCAtNTU1OCw3ICYjNDM7NTczOSw3IEBAIGludCBudGZzX2F0dHJfZmFsbG9jYXRlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgYnl0ZV9sZW4sIGJvCiAJCXJldHVybiBQVFJfRVJSKG1yZWMpOwogCX0KIAotCWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgbXJlYyk7CiYjNDM7CWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgbXJlYywgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpOwogCWlmICghY3R4KSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gb3V0X3VubWFwOwpAQCAtNTYzMywxMSAmIzQzOzU4MTQsMTUgQEAgaW50IG50ZnNfYXR0cl9mYWxsb2NhdGUoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBieXRlX2xlbiwgYm8KIAkJCX0KIAogCQkJd2hpbGUgKHRyeV9hbGxvY19jbnQgJmd0OyAwKSB7CiYjNDM7CQkJCXN0cnVjdCBudGZzX2lub2RlICphdHRyX2xvY2tfbmk7CiYjNDM7CiAJCQkJbXV0ZXhfbG9ja19uZXN0ZWQoJmFtcDtuaS0mZ3Q7bXJlY19sb2NrLCBOVEZTX0lOT0RFX01VVEVYX05PUk1BTCk7CiYjNDM7CQkJCWF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7CiAJCQkJZG93bl93cml0ZSgmYW1wO25pLSZndDtydW5saXN0LmxvY2spOwogCQkJCWVyciA9IG50ZnNfYXR0cl9tYXBfY2x1c3RlcihuaSwgdmNuLCAmYW1wO2xjbiwgJmFtcDthbGxvY19jbnQsCiAJCQkJCQkJICAgIHRyeV9hbGxvY19jbnQsICZhbXA7YmFsbG9jLCBmYWxzZSwgZmFsc2UpOwogCQkJCXVwX3dyaXRlKCZhbXA7bmktJmd0O3J1bmxpc3QubG9jayk7CiYjNDM7CQkJCW50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7CiAJCQkJbXV0ZXhfdW5sb2NrKCZhbXA7bmktJmd0O21yZWNfbG9jayk7CiAJCQkJaWYgKGVycikKIAkJCQkJZ290byBvdXQ7CkBAIC01NjYzLDExICYjNDM7NTg0OCwxNSBAQCBpbnQgbnRmc19hdHRyX2ZhbGxvY2F0ZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGxvZmZfdCBzdGFydCwgbG9mZl90IGJ5dGVfbGVuLCBibwogCS8qIGFsbG9jYXRlIGNsdXN0ZXJzIG91dHNpZGUgb2YgaW5pdGlhbGl6ZWRfc2l6ZSAqLwogCXRyeV9hbGxvY19jbnQgPSB2Y25fZW5kIC0gdmNuOwogCXdoaWxlICh0cnlfYWxsb2NfY250ICZndDsgMCkgewomIzQzOwkJc3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTsKJiM0MzsKIAkJbXV0ZXhfbG9ja19uZXN0ZWQoJmFtcDtuaS0mZ3Q7bXJlY19sb2NrLCBOVEZTX0lOT0RFX01VVEVYX05PUk1BTCk7CiYjNDM7CQlhdHRyX2xvY2tfbmkgPSBudGZzX2F0dHJfbGlzdF9sb2NrKG5pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpOwogCQlkb3duX3dyaXRlKCZhbXA7bmktJmd0O3J1bmxpc3QubG9jayk7CiAJCWVyciA9IG50ZnNfYXR0cl9tYXBfY2x1c3RlcihuaSwgdmNuLCAmYW1wO2xjbiwgJmFtcDthbGxvY19jbnQsCiAJCQkJCSAgICB0cnlfYWxsb2NfY250LCAmYW1wO2JhbGxvYywgZmFsc2UsIGZhbHNlKTsKIAkJdXBfd3JpdGUoJmFtcDtuaS0mZ3Q7cnVubGlzdC5sb2NrKTsKJiM0MzsJCW50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7CiAJCW11dGV4X3VubG9jaygmYW1wO25pLSZndDttcmVjX2xvY2spOwogCQlpZiAoZXJyIHx8IHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQkJZ290byBvdXQ7CkBAIC01Njc4LDE0ICYjNDM7NTg2NywxOCBAQCBpbnQgbnRmc19hdHRyX2ZhbGxvY2F0ZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGxvZmZfdCBzdGFydCwgbG9mZl90IGJ5dGVfbGVuLCBibwogCX0KIAogCWlmIChOSW5vUnVubGlzdERpcnR5KG5pKSkgewomIzQzOwkJc3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTsKJiM0MzsKIAkJbXV0ZXhfbG9ja19uZXN0ZWQoJmFtcDtuaS0mZ3Q7bXJlY19sb2NrLCBOVEZTX0lOT0RFX01VVEVYX05PUk1BTCk7CiYjNDM7CQlhdHRyX2xvY2tfbmkgPSBudGZzX2F0dHJfbGlzdF9sb2NrKG5pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpOwogCQlkb3duX3dyaXRlKCZhbXA7bmktJmd0O3J1bmxpc3QubG9jayk7Ci0JCWVyciA9IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhuaSwgMCk7CiYjNDM7CQllcnIgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNfbm9sb2NrKG5pLCAwKTsKIAkJaWYgKGVycikKIAkJCW50ZnNfZXJyb3IobmktJmd0O3ZvbC0mZ3Q7c2IsICYjMzQ7VXBkYXRpbmcgbWFwcGluZyBwYWlycyBmYWlsZWQmIzM0Oyk7CiAJCWVsc2UKIAkJCU5Jbm9DbGVhclJ1bmxpc3REaXJ0eShuaSk7CiAJCXVwX3dyaXRlKCZhbXA7bmktJmd0O3J1bmxpc3QubG9jayk7CiYjNDM7CQludGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpOwogCQltdXRleF91bmxvY2soJmFtcDtuaS0mZ3Q7bXJlY19sb2NrKTsKIAl9CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2ZzL250ZnMvYXR0cmliLmggYi9mcy9udGZzL2F0dHJpYi5oCmluZGV4IGUyMjI0ZmJmYWFiZTk1Li42ZjE2NzE5NGFmYjg5OCAxMDA2NDQKLS0tIGEvZnMvbnRmcy9hdHRyaWIuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9udGZzL2F0dHJpYi5oCkBAIC0yNiw2ICYjNDM7MjYsOCBAQCBleHRlcm4gX19sZTE2IEFUX1VOTkFNRURbXTsKICAqIEBiYXNlX250ZnNfaW5vOiBCYXNlIGlub2RlCiAgKiBAbWFwcGVkX2Jhc2VfbXJlYzogdHJ1ZSBpZiBAYmFzZV9tcmVjIHdhcyBtYXBwZWQgYnkgdGhlIHNlYXJjaAogICogQGJhc2VfYXR0cjogQmFzZSBhdHRyaWJ1dGUgcmVjb3JkIHBvaW50ZXIKJiM0MzsgKiBAYXR0cl9saXN0X2xvY2tfbmk6IEJhc2UgaW5vZGUgd2hvc2UgYXR0cl9saXN0X2xvY2sgaXMgaGVsZAomIzQzOyAqIEBhdHRyX2xpc3RfbG9ja19tb2RlOiBhdHRyX2xpc3RfbG9jayBtb2RlIGhlbGQgYnkgdGhpcyBjb250ZXh0CiAgKgogICogU3RydWN0dXJlIG11c3QgYmUgaW5pdGlhbGl6ZWQgdG8gemVybyBiZWZvcmUgdGhlIGZpcnN0IGNhbGwgdG8gb25lIG9mIHRoZQogICogYXR0cmlidXRlIHNlYXJjaCBmdW5jdGlvbnMuIEluaXRpYWxpemUgQG1yZWMgdG8gcG9pbnQgdG8gdGhlIG1mdCByZWNvcmQgdG8KQEAgLTM5LDYgJiM0Mzs0MSwxMiBAQCBleHRlcm4gX19sZTE2IEFUX1VOTkFNRURbXTsKICAqIGFueSBtb2RpZmljYXRpb24gb2YgdGhlIHNlYXJjaCBjb250ZXh0LCB0byBhdXRvbWFnaWNhbGx5IGdldCB0aGUgbmV4dAogICogbWF0Y2hpbmcgYXR0cmlidXRlLgogICovCiYjNDM7ZW51bSBudGZzX2F0dHJfc2VhcmNoX2N0eF9sb2NrX21vZGUgewomIzQzOwlOVEZTX0FUVFJfQ1RYX0xPQ0tfTk9ORSwKJiM0MzsJTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQsCiYjNDM7CU5URlNfQVRUUl9DVFhfTE9DS19XUklURSwKJiM0Mzt9OwomIzQzOwogc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4IHsKIAlzdHJ1Y3QgbWZ0X3JlY29yZCAqbXJlYzsKIAlib29sIG1hcHBlZF9tcmVjOwpAQCAtNTAsNiAmIzQzOzU4LDggQEAgc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4IHsKIAlzdHJ1Y3QgbWZ0X3JlY29yZCAqYmFzZV9tcmVjOwogCWJvb2wgbWFwcGVkX2Jhc2VfbXJlYzsKIAlzdHJ1Y3QgYXR0cl9yZWNvcmQgKmJhc2VfYXR0cjsKJiM0MzsJc3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbGlzdF9sb2NrX25pOwomIzQzOwllbnVtIG50ZnNfYXR0cl9zZWFyY2hfY3R4X2xvY2tfbW9kZSBhdHRyX2xpc3RfbG9ja19tb2RlOwogfTsKIAogZW51bSB7ICAgICAgICAgICAgICAgICAgLyogd2F5cyBvZiBwcm9jZXNzaW5nIGhvbGVzIHdoZW4gZXhwYW5kaW5nICovCkBAIC02Niw2ICYjNDM7NzYsNyBAQCBzdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpudGZzX2F0dHJfZmluZF92Y25fbm9sb2NrKHN0cnVjdCBudGZzX2lub2RlICpuaSwKIAkJY29uc3QgczY0IHZjbiwgc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpOwogc3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqX19udGZzX2F0dHJfZmluZF92Y25fbm9sb2NrKHN0cnVjdCBydW5saXN0ICpydW5saXN0LAogCQljb25zdCBzNjQgdmNuKTsKJiM0MztpbnQgbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0X25vbG9jayhzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpOwogaW50IG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdChzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpOwogaW50IG50ZnNfYXR0cl9sb29rdXAoY29uc3QgX19sZTMyIHR5cGUsIGNvbnN0IF9fbGUxNiAqbmFtZSwKIAkJY29uc3QgdTMyIG5hbWVfbGVuLCBjb25zdCB1MzIgaWMsCkBAIC04Nyw3ICYjNDM7OTgsMTYgQEAgc3RhdGljIGlubGluZSBzNjQgbnRmc19hdHRyX3NpemUoY29uc3Qgc3RydWN0IGF0dHJfcmVjb3JkICphKQogCiB2b2lkIG50ZnNfYXR0cl9yZWluaXRfc2VhcmNoX2N0eChzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eCk7CiBzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKm50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksCi0JCXN0cnVjdCBtZnRfcmVjb3JkICptcmVjKTsKJiM0MzsJCXN0cnVjdCBtZnRfcmVjb3JkICptcmVjLAomIzQzOwkJZW51bSBudGZzX2F0dHJfc2VhcmNoX2N0eF9sb2NrX21vZGUgbG9ja19tb2RlKTsKJiM0MztzdHJ1Y3QgbnRmc19pbm9kZSAqbnRmc19hdHRyX2xpc3RfbG9jayhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksCiYjNDM7CQkJCSAgICAgICBlbnVtIG50ZnNfYXR0cl9zZWFyY2hfY3R4X2xvY2tfbW9kZSBsb2NrX21vZGUpOwomIzQzO3ZvaWQgbnRmc19hdHRyX2xpc3RfdW5sb2NrKHN0cnVjdCBudGZzX2lub2RlICpsb2NrX25pLAomIzQzOwkJCSAgIGVudW0gbnRmc19hdHRyX3NlYXJjaF9jdHhfbG9ja19tb2RlIGxvY2tfbW9kZSk7CiYjNDM7dm9pZCBudGZzX2F0dHJfbG9ja19zZWFyY2hfY3R4KHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4LAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksCiYjNDM7CQkJICAgICAgIGVudW0gbnRmc19hdHRyX3NlYXJjaF9jdHhfbG9ja19tb2RlIGxvY2tfbW9kZSk7CiYjNDM7dm9pZCBudGZzX2F0dHJfdW5sb2NrX3NlYXJjaF9jdHgoc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpOwogdm9pZCBudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpOwogaW50IG50ZnNfYXR0cl9zaXplX2JvdW5kc19jaGVjayhjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwKIAkJY29uc3QgX19sZTMyIHR5cGUsIGNvbnN0IHM2NCBzaXplKTsKQEAgLTEzMyw2ICYjNDM7MTUzLDcgQEAgaW50IG50ZnNfcmVzaWRlbnRfYXR0cl9yZWNvcmRfYWRkKHN0cnVjdCBudGZzX2lub2RlICpuaSwgX19sZTMyIHR5cGUsCiAJCV9fbGUxNiAqbmFtZSwgdTggbmFtZV9sZW4sIHU4ICp2YWwsIHUzMiBzaXplLAogCQlfX2xlMTYgZmxhZ3MpOwogaW50IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBmcm9tX3Zjbik7CiYjNDM7aW50IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlyc19ub2xvY2soc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgZnJvbV92Y24pOwogc3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqbnRmc19hdHRyX3Zjbl90b19ybChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCB2Y24sIHM2NCAqbGNuKTsKIAogLyoKQEAgLTE0OCw3ICYjNDM7MTY5LDkgQEAgc3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqbnRmc19hdHRyX3Zjbl90b19ybChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCB2Y24sIHM2NAogICoJICAgIEBuaSwgeW91IGNhbiBzaW1wbHkgZG86CiAgKgogICoJaW50IGVycjsKLSAqCXN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTsKJiM0MzsgKglzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eDsKJiM0MzsgKgomIzQzOyAqCWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpOwogICoJaWYgKCFjdHgpCiAgKgkJLy8gRXJyb3IgY29kZSBpcyBpbiBlcnJuby4gSGFuZGxlIHRoaXMgY2FzZS4KICAqCXdoaWxlICghKGVyciA9IG50ZnNfYXR0cnNfd2FsayhjdHgpKSkgewpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9hdHRybGlzdC5jIGIvZnMvbnRmcy9hdHRybGlzdC5jCmluZGV4IGFmYjEzMDM4YmE0MjVmLi5mZDVlYWMwNjEyNzg0YiAxMDA2NDQKLS0tIGEvZnMvbnRmcy9hdHRybGlzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL250ZnMvYXR0cmxpc3QuYwpAQCAtMTUzLDcgJiM0MzsxNTMsNyBAQCBpbnQgbnRmc19hdHRybGlzdF9lbnRyeV9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzdHJ1Y3QgYXR0cl9yZWNvcmQgKmF0dHIpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJLyogRmluZCBwbGFjZSBmb3IgdGhlIG5ldyBlbnRyeS4gKi8KLQljdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwpOwomIzQzOwljdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7CiAJaWYgKCFjdHgpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJbnRmc19lcnJvcihuaS0mZ3Q7dm9sLSZndDtzYiwgJiMzNDtGYWlsZWQgdG8gZ2V0IHNlYXJjaCBjb250ZXh0JiMzNDspOwpAQCAtMTc2LDcgJiM0MzsxNzYsNiBAQCBpbnQgbnRmc19hdHRybGlzdF9lbnRyeV9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzdHJ1Y3QgYXR0cl9yZWNvcmQgKmF0dHIpCiAJCWlmIChjdHgtJmd0O2FsX2VudHJ5LSZndDtsb3dlc3RfdmNuID09IGxvd2VzdF92Y24pIHsKIAkJCWVyciA9IC1FRVhJU1Q7CiAJCQludGZzX2RlYnVnKCYjMzQ7U3VjaCBhdHRyaWJ1dGUgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBhdHRyaWJ1dGUgbGlzdC5cbiYjMzQ7KTsKLQkJCW50ZnNfYXR0cl9wdXRfc2VhcmNoX2N0eChjdHgpOwogCQkJZ290byBlcnJfb3V0OwogCQl9CiAJCS8qIEFkZCBuZXcgZW50cnkgYWZ0ZXIgdGhpcyBleHRlbnQuICovCkBAIC0xODYsMTUgJiM0MzsxODUsMTEgQEAgaW50IG50ZnNfYXR0cmxpc3RfZW50cnlfYWRkKHN0cnVjdCBudGZzX2lub2RlICpuaSwgc3RydWN0IGF0dHJfcmVjb3JkICphdHRyKQogCQkvKiBDaGVjayBmb3IgcmVhbCBlcnJvcnMuICovCiAJCWlmIChlcnIgIT0gLUVOT0VOVCkgewogCQkJbnRmc19kZWJ1ZygmIzM0O0F0dHJpYnV0ZSBsb29rdXAgZmFpbGVkLlxuJiMzNDspOwotCQkJbnRmc19hdHRyX3B1dF9zZWFyY2hfY3R4KGN0eCk7CiAJCQlnb3RvIGVycl9vdXQ7CiAJCX0KIAkJLyogTm8gcHJldmlvdXMgZXh0ZW50cyBmb3VuZC4gKi8KIAkJYWxlID0gY3R4LSZndDthbF9lbnRyeTsKIAl9Ci0JLyogRG9uJiMzOTt0IG5lZWQgaXQgYW55bW9yZSwgQGN0eC0mZ3Q7YWxfZW50cnkgcG9pbnRzIHRvIEBuaS0mZ3Q7YXR0cl9saXN0LiAqLwotCW50ZnNfYXR0cl9wdXRfc2VhcmNoX2N0eChjdHgpOwotCiAJLyogRGV0ZXJtaW5lIG5ldyBlbnRyeSBvZmZzZXQuICovCiAJZW50cnlfb2Zmc2V0ID0gKCh1OCAqKWFsZSAtIG5pLSZndDthdHRyX2xpc3QpOwogCS8qIFNldCBwb2ludGVyIHRvIG5ldyBlbnRyeS4gKi8KQEAgLTIyMywxNiAmIzQzOzIxOCwyMiBAQCBpbnQgbnRmc19hdHRybGlzdF9lbnRyeV9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzdHJ1Y3QgYXR0cl9yZWNvcmQgKmF0dHIpCiAJb2xkX2FsID0gbmktJmd0O2F0dHJfbGlzdDsKIAluaS0mZ3Q7YXR0cl9saXN0ID0gbmV3X2FsOwogCW5pLSZndDthdHRyX2xpc3Rfc2l6ZSA9IG5pLSZndDthdHRyX2xpc3Rfc2l6ZSAmIzQzOyBlbnRyeV9sZW47CiYjNDM7CW50ZnNfYXR0cl9wdXRfc2VhcmNoX2N0eChjdHgpOwomIzQzOwljdHggPSBOVUxMOwogCiAJZXJyID0gbnRmc19hdHRybGlzdF91cGRhdGUobmkpOwogCWlmIChlcnIpIHsKJiM0MzsJCWRvd25fd3JpdGUoJmFtcDtuaS0mZ3Q7YXR0cl9saXN0X2xvY2spOwogCQluaS0mZ3Q7YXR0cl9saXN0ID0gb2xkX2FsOwogCQluaS0mZ3Q7YXR0cl9saXN0X3NpemUgLT0gZW50cnlfbGVuOwomIzQzOwkJdXBfd3JpdGUoJmFtcDtuaS0mZ3Q7YXR0cl9saXN0X2xvY2spOwogCQlnb3RvIGVycl9vdXQ7CiAJfQogCWt2ZnJlZShvbGRfYWwpOwogCXJldHVybiAwOwogZXJyX291dDoKJiM0MzsJaWYgKGN0eCkKJiM0MzsJCW50ZnNfYXR0cl9wdXRfc2VhcmNoX2N0eChjdHgpOwogCWt2ZnJlZShuZXdfYWwpOwogCXJldHVybiBlcnI7CiB9CkBAIC0yNDgsOSAmIzQzOzI0OSwxMiBAQCBpbnQgbnRmc19hdHRybGlzdF9lbnRyeV9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzdHJ1Y3QgYXR0cl9yZWNvcmQgKmF0dHIpCiBpbnQgbnRmc19hdHRybGlzdF9lbnRyeV9ybShzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eCkKIHsKIAl1OCAqbmV3X2FsOwotCWludCBuZXdfYWxfbGVuOwomIzQzOwlpbnQgZXJyLCBuZXdfYWxfbGVuOwogCXN0cnVjdCBudGZzX2lub2RlICpiYXNlX25pOwogCXN0cnVjdCBhdHRyX2xpc3RfZW50cnkgKmFsZTsKJiM0MzsJZW51bSBudGZzX2F0dHJfc2VhcmNoX2N0eF9sb2NrX21vZGUgbG9ja19tb2RlOwomIzQzOwlib29sIGN0eF9sb2NrZWQ7CiYjNDM7CXU4ICpvbGRfYWw7CiAKIAlpZiAoIWN0eCB8fCAhY3R4LSZndDtudGZzX2lubyB8fCAhY3R4LSZndDthbF9lbnRyeSkgewogCQludGZzX2RlYnVnKCYjMzQ7SW52YWxpZCBhcmd1bWVudHMuXG4mIzM0Oyk7CkBAIC0yODUsOSAmIzQzOzI4OSwxNyBAQCBpbnQgbnRmc19hdHRybGlzdF9lbnRyeV9ybShzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eCkKIAkJCQlhbGUtJmd0O2xlbmd0aCksIG5ld19hbF9sZW4gLSAoKHU4ICopYWxlIC0gYmFzZV9uaS0mZ3Q7YXR0cl9saXN0KSk7CiAKIAkvKiBTZXQgbmV3IHJ1bmxpc3QuICovCi0Ja3ZmcmVlKGJhc2VfbmktJmd0O2F0dHJfbGlzdCk7CiYjNDM7CW9sZF9hbCA9IGJhc2VfbmktJmd0O2F0dHJfbGlzdDsKIAliYXNlX25pLSZndDthdHRyX2xpc3QgPSBuZXdfYWw7CiAJYmFzZV9uaS0mZ3Q7YXR0cl9saXN0X3NpemUgPSBuZXdfYWxfbGVuOwomIzQzOwlrdmZyZWUob2xkX2FsKTsKIAotCXJldHVybiBudGZzX2F0dHJsaXN0X3VwZGF0ZShiYXNlX25pKTsKJiM0MzsJY3R4X2xvY2tlZCA9IGN0eC0mZ3Q7YXR0cl9saXN0X2xvY2tfbmk7CiYjNDM7CWxvY2tfbW9kZSA9IGN0eC0mZ3Q7YXR0cl9saXN0X2xvY2tfbW9kZTsKJiM0MzsJaWYgKGN0eF9sb2NrZWQpCiYjNDM7CQludGZzX2F0dHJfdW5sb2NrX3NlYXJjaF9jdHgoY3R4KTsKJiM0MzsJZXJyID0gbnRmc19hdHRybGlzdF91cGRhdGUoYmFzZV9uaSk7CiYjNDM7CWlmIChjdHhfbG9ja2VkKQomIzQzOwkJbnRmc19hdHRyX2xvY2tfc2VhcmNoX2N0eChjdHgsIGJhc2VfbmksIGxvY2tfbW9kZSk7CiYjNDM7CXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9mcy9udGZzL2NvbXByZXNzLmMgYi9mcy9udGZzL2NvbXByZXNzLmMKaW5kZXggNzZiZDgwNmI0MWVkZDkuLmJhYzZiMzIwNjk0NzUzIDEwMDY0NAotLS0gYS9mcy9udGZzL2NvbXByZXNzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmcy9jb21wcmVzcy5jCkBAIC0xMjg3LDYgJiM0MzsxMjg3LDcgQEAgc3RhdGljIGludCBudGZzX3dyaXRlX2NiKHN0cnVjdCBudGZzX2lub2RlICpuaSwgbG9mZl90IHBvcywgc3RydWN0IHBhZ2UgKipwYWdlcywKIAkvKiBtb3JlIGNvbXByZXNzZWQgemVyb2VzLCB0byBiZSBmb2xsb3dlZCBieSBzb21lIGNvdW50ICovCiAJc3RhdGljIGNoYXIgbW9yZXplcm9lc1tdID0gezB4MDMsIDB4YjAsIDB4MDIsIDB4MDB9OwogCXN0cnVjdCBwYWdlICoqcGFnZXNfZGlzayA9IE5VTEwsICpwZzsKJiM0MzsJc3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTsKIAlzNjQgYmlvX2xjbjsKIAlzdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpybGMsICpybDsKIAlpbnQgaSwgZXJyOwpAQCAtMTM5MCwxMCAmIzQzOzEzOTEsMTIgQEAgc3RhdGljIGludCBudGZzX3dyaXRlX2NiKHN0cnVjdCBudGZzX2lub2RlICpuaSwgbG9mZl90IHBvcywgc3RydWN0IHBhZ2UgKipwYWdlcywKIAl9CiAKIAliaW9fbGNuID0gcmxjLSZndDtsY247CiYjNDM7CWF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7CiAJZG93bl93cml0ZSgmYW1wO25pLSZndDtydW5saXN0LmxvY2spOwogCXJsID0gbnRmc19ydW5saXN0c19tZXJnZSgmYW1wO25pLSZndDtydW5saXN0LCBybGMsIDAsICZhbXA7bmV3X3JsX2NvdW50KTsKIAlpZiAoSVNfRVJSKHJsKSkgewogCQl1cF93cml0ZSgmYW1wO25pLSZndDtydW5saXN0LmxvY2spOwomIzQzOwkJbnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTsKIAkJbnRmc19lcnJvcih2b2wtJmd0O3NiLCAmIzM0O0ZhaWxlZCB0byBtZXJnZSBydW5saXN0cyYjMzQ7KTsKIAkJZXJyID0gUFRSX0VSUihybCk7CiAJCWlmIChudGZzX2NsdXN0ZXJfZnJlZV9mcm9tX3JsKHZvbCwgcmxjKSkKQEAgLTE0MDUsOCAmIzQzOzE0MDgsOSBAQCBzdGF0aWMgaW50IG50ZnNfd3JpdGVfY2Ioc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBsb2ZmX3QgcG9zLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLAogCW5pLSZndDtydW5saXN0LmNvdW50ID0gbmV3X3JsX2NvdW50OwogCW5pLSZndDtydW5saXN0LnJsID0gcmw7CiAKLQllcnIgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIDApOwomIzQzOwllcnIgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNfbm9sb2NrKG5pLCAwKTsKIAl1cF93cml0ZSgmYW1wO25pLSZndDtydW5saXN0LmxvY2spOwomIzQzOwludGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpOwogCWlmIChlcnIpIHsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9mcy9udGZzL2Rpci5jIGIvZnMvbnRmcy9kaXIuYwppbmRleCA0YjZiZDVmMzBjNjVlYS4uMTY1NTAzZDA1OWM2ZGUgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvZGlyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmcy9kaXIuYwpAQCAtOTEsNyAmIzQzOzkxLDcgQEAgdTY0IG50ZnNfbG9va3VwX2lub2RlX2J5X25hbWUoc3RydWN0IG50ZnNfaW5vZGUgKmRpcl9uaSwgY29uc3QgX19sZTE2ICp1bmFtZSwKIAkJCQktUFRSX0VSUihtKSk7CiAJCXJldHVybiBFUlJfTVJFRihQVFJfRVJSKG0pKTsKIAl9Ci0JY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KGRpcl9uaSwgbSk7CiYjNDM7CWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChkaXJfbmksIG0sIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTsKIAlpZiAodW5saWtlbHkoIWN0eCkpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfb3V0OwpAQCAtODE0LDcgJiM0Mzs4MTQsNyBAQCBzdGF0aWMgaW50IG50ZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRpcl9jb250ZXh0ICphY3RvcikKIAkJZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhID0gcHJpdmF0ZTsKIAl9CiAKLQljdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmRpciwgTlVMTCk7CiYjNDM7CWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuZGlyLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7CiAJaWYgKCFjdHgpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CkBAIC0xMDE1LDcgJiM0MzsxMDE1LDcgQEAgaW50IG50ZnNfY2hlY2tfZW1wdHlfZGlyKHN0cnVjdCBudGZzX2lub2RlICpuaSwgc3RydWN0IG1mdF9yZWNvcmQgKm5pX21yZWMpCiAJaWYgKCEobmlfbXJlYy0mZ3Q7ZmxhZ3MgJmFtcDsgTUZUX1JFQ09SRF9JU19ESVJFQ1RPUlkpKQogCQlyZXR1cm4gMDsKIAotCWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCk7CiYjNDM7CWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpOwogCWlmICghY3R4KSB7CiAJCW50ZnNfZXJyb3IobmktJmd0O3ZvbC0mZ3Q7c2IsICYjMzQ7RmFpbGVkIHRvIGdldCBzZWFyY2ggY29udGV4dCYjMzQ7KTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xMTE2LDcgJiM0MzsxMTE2LDcgQEAgc3RhdGljIGludCBudGZzX2Rpcl9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlscCwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLAogCWlmIChOVm9sU2h1dGRvd24odm9sKSkKIAkJcmV0dXJuIC1FSU87CiAKLQljdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwpOwomIzQzOwljdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTsKIAlpZiAoIWN0eCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL2ZzL250ZnMvZWEuYyBiL2ZzL250ZnMvZWEuYwppbmRleCAwY2QxOTI3NTJiN2NkNy4uMjg0Yzk4NTgwN2E2ZTYgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvZWEuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9udGZzL2VhLmMKQEAgLTU4Nyw3ICYjNDM7NTg3LDcgQEAgc3RhdGljIGludCBudGZzX25ld19hdHRyX2ZsYWdzKHN0cnVjdCBudGZzX2lub2RlICpuaSwgX19sZTMyIGZhdHRyKQogCWlmIChJU19FUlIobSkpCiAJCXJldHVybiBQVFJfRVJSKG0pOwogCi0JY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBtKTsKJiM0MzsJY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBtLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7CiAJaWYgKCFjdHgpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfb3V0OwpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9maWxlLmMgYi9mcy9udGZzL2ZpbGUuYwppbmRleCA2YTdiNjM4ZTUyM2Q5MS4uZGNiNTU1NGZmMWI3MTcgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL250ZnMvZmlsZS5jCkBAIC0yMyw2ICYjNDM7MjMsNyBAQAogI2luY2x1ZGUgJiMzNDtpb21hcC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Yml0bWFwLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2b2x1bWUuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDthdHRyaWIuaCYjMzQ7CiAKICNpbmNsdWRlICZsdDtsaW51eC9maWxlbG9jay5oJmd0OwogCkBAIC03OSw2ICYjNDM7ODAsNyBAQCBzdGF0aWMgaW50IG50ZnNfdHJpbV9wcmVhbGxvYyhzdHJ1Y3QgaW5vZGUgKnZpKQogewogCXN0cnVjdCBudGZzX2lub2RlICpuaSA9IE5URlNfSSh2aSk7CiAJc3RydWN0IG50ZnNfdm9sdW1lICp2b2wgPSBuaS0mZ3Q7dm9sOwomIzQzOwlzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pOwogCXN0cnVjdCBydW5saXN0X2VsZW1lbnQgKnJsOwogCXM2NCBhbGlnbmVkX2RhdGFfc2l6ZTsKIAlzNjQgdmNuX2RzLCB2Y25fdHI7CkBAIC04Nyw2ICYjNDM7ODksNyBAQCBzdGF0aWMgaW50IG50ZnNfdHJpbV9wcmVhbGxvYyhzdHJ1Y3QgaW5vZGUgKnZpKQogCiAJaW5vZGVfbG9jayh2aSk7CiAJbXV0ZXhfbG9jaygmYW1wO25pLSZndDttcmVjX2xvY2spOwomIzQzOwlhdHRyX2xvY2tfbmkgPSBudGZzX2F0dHJfbGlzdF9sb2NrKG5pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpOwogCWRvd25fd3JpdGUoJmFtcDtuaS0mZ3Q7cnVubGlzdC5sb2NrKTsKIAogCWFsaWduZWRfZGF0YV9zaXplID0gcm91bmRfdXAobmktJmd0O2RhdGFfc2l6ZSwgdm9sLSZndDtjbHVzdGVyX3NpemUpOwpAQCAtMTExLDcgJiM0MzsxMTQsNyBAQCBzdGF0aWMgaW50IG50ZnNfdHJpbV9wcmVhbGxvYyhzdHJ1Y3QgaW5vZGUgKnZpKQogCQkJbnRmc19lcnJvcih2b2wtJmd0O3NiLCAmIzM0O1ByZWFsbG9jYXRlZCBibG9jayByb2xsYmFjayBmYWlsZWQmIzM0Oyk7CiAJCX0gZWxzZSB7CiAJCQluaS0mZ3Q7YWxsb2NhdGVkX3NpemUgPSBudGZzX2NsdXN0ZXJfdG9fYnl0ZXModm9sLCB2Y25fdHIpOwotCQkJZXJyID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG5pLCAwKTsKJiM0MzsJCQllcnIgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNfbm9sb2NrKG5pLCAwKTsKIAkJCWlmIChlcnIpCiAJCQkJbnRmc19lcnJvcih2b2wtJmd0O3NiLAogCQkJCQkgICAmIzM0O0ZhaWxlZCB0byByb2xsYmFjayBtYXBwaW5nIHBhaXJzIGZvciBwcmVhbGxvYyYjMzQ7KTsKQEAgLTEyMCw2ICYjNDM7MTIzLDcgQEAgc3RhdGljIGludCBudGZzX3RyaW1fcHJlYWxsb2Moc3RydWN0IGlub2RlICp2aSkKIAogb3V0X3VubG9jazoKIAl1cF93cml0ZSgmYW1wO25pLSZndDtydW5saXN0LmxvY2spOwomIzQzOwludGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpOwogCW11dGV4X3VubG9jaygmYW1wO25pLSZndDttcmVjX2xvY2spOwogCWlub2RlX3VubG9jayh2aSk7CiAKQEAgLTE3Nyw3ICYjNDM7MTgxLDcgQEAgc3RhdGljIGludCBudGZzX2ZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbHAsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwKIAkJcmV0ID0gX19udGZzX3dyaXRlX2lub2RlKHZpLCAxKTsKIAl3cml0ZV9pbm9kZV9ub3codmksICFkYXRhc3luYyk7CiAKLQljdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwpOwomIzQzOwljdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTsKIAlpZiAoIWN0eCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTEwNTcsNiAmIzQzOzEwNjEsNyBAQCBzdGF0aWMgbG9uZyBudGZzX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZQogCXN0cnVjdCBpbm9kZSAqdmkgPSBmaWxlX2lub2RlKGZpbGUpOwogCXN0cnVjdCBudGZzX2lub2RlICpuaSA9IE5URlNfSSh2aSk7CiAJc3RydWN0IG50ZnNfdm9sdW1lICp2b2wgPSBuaS0mZ3Q7dm9sOwomIzQzOwlzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pOwogCWludCBlcnIgPSAwOwogCWxvZmZfdCBvbGRfc2l6ZTsKIAlib29sIG1hcF9sb2NrZWQgPSBmYWxzZTsKQEAgLTEwNzEsOSAmIzQzOzEwNzYsMTEgQEAgc3RhdGljIGxvbmcgbnRmc19mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGUKIAkJcmV0dXJuIC1FTk9TUEM7CiAKIAlpZiAoTklub05vblJlc2lkZW50KG5pKSAmYW1wOyZhbXA7ICFOSW5vRnVsbHlNYXBwZWQobmkpKSB7CiYjNDM7CQlhdHRyX2xvY2tfbmkgPSBudGZzX2F0dHJfbGlzdF9sb2NrKG5pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7CiAJCWRvd25fd3JpdGUoJmFtcDtuaS0mZ3Q7cnVubGlzdC5sb2NrKTsKLQkJZXJyID0gbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0KG5pKTsKJiM0MzsJCWVyciA9IG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdF9ub2xvY2sobmkpOwogCQl1cF93cml0ZSgmYW1wO25pLSZndDtydW5saXN0LmxvY2spOwomIzQzOwkJbnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAl9CmRpZmYgLS1naXQgYS9mcy9udGZzL2luZGV4LmMgYi9mcy9udGZzL2luZGV4LmMKaW5kZXggYzVmMmNmNzViNzUwZTkuLjM2YTcwYWFhOWUyZGU3IDEwMDY0NAotLS0gYS9mcy9udGZzL2luZGV4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmcy9pbmRleC5jCkBAIC01NzUsNyAmIzQzOzU3NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5kZXhfcm9vdCAqbnRmc19pcl9sb29rdXAoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBfX2xlMTYgKm5hbWUsCiAJc3RydWN0IGluZGV4X3Jvb3QgKmlyID0gTlVMTDsKIAogCW50ZnNfZGVidWcoJiMzNDtFbnRlcmluZ1xuJiMzNDspOwotCSpjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwpOwomIzQzOwkqY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpOwogCWlmICghKmN0eCkgewogCQludGZzX2Vycm9yKG5pLSZndDt2b2wtJmd0O3NiLCAmIzM0OyVzLCBGYWlsZWQgdG8gZ2V0IHNlYXJjaCBjb250ZXh0JiMzNDssIF9fZnVuY19fKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC0xMzMyLDcgJiM0MzsxMzMyLDggQEAgc3RhdGljIGludCBudGZzX2lyX3JlcGFyZW50KHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeCkKIAkgKiBXaGVuIHRoZXJlIGlzIG5vIHNwYWNlIHRvIGJ1aWxkIGEgbm9uLXJlc2lkZW50CiAJICogaW5kZXgsIHdlIG1heSBoYXZlIHRvIG1vdmUgdGhlIHJvb3QgdG8gYW4gZXh0ZW50CiAJICovCi0JaWYgKChyZXQgPT0gLUVOT1NQQykgJmFtcDsmYW1wOyAoY3R4LSZndDthbF9lbnRyeSB8fCAhbnRmc19pbm9kZV9hZGRfYXR0cmxpc3QoaWN4LSZndDtpZHhfbmkpKSkgewomIzQzOwlpZiAoKHJldCA9PSAtRU5PU1BDKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAoY3R4LSZndDthbF9lbnRyeSB8fCAhbnRmc19pbm9kZV9hZGRfYXR0cmxpc3Rfbm9sb2NrKGljeC0mZ3Q7aWR4X25pKSkpIHsKIAkJbnRmc19hdHRyX3B1dF9zZWFyY2hfY3R4KGN0eCk7CiAJCWN0eCA9IE5VTEw7CiAJCWlyID0gbnRmc19pcl9sb29rdXAoaWN4LSZndDtpZHhfbmksIGljeC0mZ3Q7bmFtZSwgaWN4LSZndDtuYW1lX2xlbiwgJmFtcDtjdHgpOwpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9pbm9kZS5jIGIvZnMvbnRmcy9pbm9kZS5jCmluZGV4IGMyNzE1NTIxZTU2Mjg2Li44ZWQ2Y2I1YjljNDJmOCAxMDA2NDQKLS0tIGEvZnMvbnRmcy9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL250ZnMvaW5vZGUuYwpAQCAtMzI2LDcgJiM0MzszMjYsNyBAQCBzdGF0aWMgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2RlYWxsb2NfY2x1c3RlcnMoc3RydWN0IG50ZnNfaW5vZGUgKm5pKQogCXN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqYWN0eDsKIAlpbnQgZXJyID0gMDsKIAotCWFjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwpOwomIzQzOwlhY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7CiAJaWYgKCFhY3R4KQogCQlyZXR1cm4gLUVOT01FTTsKIAlXQVJOX09OKGFjdHgtJmd0O21yZWMtJmd0O2xpbmtfY291bnQgIT0gMCk7CkBAIC00NzUsNiAmIzQzOzQ3NSw3IEBAIHZvaWQgX19udGZzX2luaXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IG50ZnNfaW5vZGUgKm5pKQogCW5pLSZndDtmb2xpbyA9IE5VTEw7CiAJbmktJmd0O2ZvbGlvX29mcyA9IDA7CiAJbmktJmd0O21yZWMgPSBOVUxMOwomIzQzOwlpbml0X3J3c2VtKCZhbXA7bmktJmd0O2F0dHJfbGlzdF9sb2NrKTsKIAluaS0mZ3Q7YXR0cl9saXN0X3NpemUgPSAwOwogCW5pLSZndDthdHRyX2xpc3QgPSBOVUxMOwogCW5pLSZndDtpdHlwZS5pbmRleC5ibG9ja19zaXplID0gMDsKQEAgLTcxMyw3ICYjNDM7NzE0LDcgQEAgc3RhdGljIGludCBudGZzX3JlYWRfbG9ja2VkX2lub2RlKHN0cnVjdCBpbm9kZSAqdmkpCiAJCWdvdG8gZXJyX291dDsKIAl9CiAKLQljdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIG0pOwomIzQzOwljdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIG0sIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTsKIAlpZiAoIWN0eCkgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIHVubV9lcnJfb3V0OwpAQCAtMTI4MCw3ICYjNDM7MTI4MSw3IEBAIHN0YXRpYyBpbnQgbnRmc19yZWFkX2xvY2tlZF9hdHRyX2lub2RlKHN0cnVjdCBpbm9kZSAqYmFzZV92aSwgc3RydWN0IGlub2RlICp2aSkKIAkJZXJyID0gUFRSX0VSUihtKTsKIAkJZ290byBlcnJfb3V0OwogCX0KLQljdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoYmFzZV9uaSwgbSk7CiYjNDM7CWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChiYXNlX25pLCBtLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7CiAJaWYgKCFjdHgpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byB1bm1fZXJyX291dDsKQEAgLTE1MjAsNyAmIzQzOzE1MjEsNyBAQCBzdGF0aWMgaW50IG50ZnNfcmVhZF9sb2NrZWRfaW5kZXhfaW5vZGUoc3RydWN0IGlub2RlICpiYXNlX3ZpLCBzdHJ1Y3QgaW5vZGUgKnZpKQogCQllcnIgPSBQVFJfRVJSKG0pOwogCQlnb3RvIGVycl9vdXQ7CiAJfQotCWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChiYXNlX25pLCBtKTsKJiM0MzsJY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KGJhc2VfbmksIG0sIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTsKIAlpZiAoIWN0eCkgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIHVubV9lcnJfb3V0OwpAQCAtMTkxMSw3ICYjNDM7MTkxMiw3IEBAIGludCBudGZzX3JlYWRfaW5vZGVfbW91bnQoc3RydWN0IGlub2RlICp2aSkKIAkvKiBQcm92aWRlcyByZWFkX2ZvbGlvKCkgZm9yIG1hcF9tZnRfcmVjb3JkKCkuICovCiAJdmktJmd0O2lfbWFwcGluZy0mZ3Q7YV9vcHMgPSAmYW1wO250ZnNfbWZ0X2FvcHM7CiAKLQljdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIG0pOwomIzQzOwljdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIG0sIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTsKIAlpZiAoIWN0eCkgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9vdXQ7CkBAIC0yNDY2LDcgJiM0MzsyNDY3LDcgQEAgc3RhdGljIGludCBudGZzX2lub2RlX3N5bmNfc3RhbmRhcmRfaW5mb3JtYXRpb24oc3RydWN0IGlub2RlICp2aSwgc3RydWN0IG1mdF9yZWMKIAlib29sIG1vZGlmaWVkID0gZmFsc2U7CiAKIAkvKiBVcGRhdGUgdGhlIGFjY2VzcyB0aW1lcyBpbiB0aGUgc3RhbmRhcmQgaW5mb3JtYXRpb24gYXR0cmlidXRlLiAqLwotCWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgbSk7CiYjNDM7CWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgbSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpOwogCWlmICh1bmxpa2VseSghY3R4KSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJZXJyID0gbnRmc19hdHRyX2xvb2t1cChBVF9TVEFOREFSRF9JTkZPUk1BVElPTiwgTlVMTCwgMCwKQEAgLTI1NjcsNyAmIzQzOzI1NjgsNyBAQCBpbnQgbnRmc19pbm9kZV9zeW5jX2ZpbGVuYW1lKHN0cnVjdCBudGZzX2lub2RlICpuaSkKIAogCW50ZnNfZGVidWcoJiMzNDtFbnRlcmluZyBmb3IgaW5vZGUgJWxsdVxuJiMzNDssIG5pLSZndDttZnRfbm8pOwogCi0JY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTsKJiM0MzsJY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7CiAJaWYgKCFjdHgpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0yNzU5LDExICYjNDM7Mjc2MCwxNSBAQCBpbnQgX19udGZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqdmksIGludCBzeW5jKQogCX0KIAogCWlmIChOSW5vTm9uUmVzaWRlbnQobmkpICZhbXA7JmFtcDsgTklub1J1bmxpc3REaXJ0eShuaSkpIHsKJiM0MzsJCXN0cnVjdCBudGZzX2lub2RlICphdHRyX2xvY2tfbmk7CiYjNDM7CiYjNDM7CQlhdHRyX2xvY2tfbmkgPSBudGZzX2F0dHJfbGlzdF9sb2NrKG5pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpOwogCQlkb3duX3dyaXRlKCZhbXA7bmktJmd0O3J1bmxpc3QubG9jayk7Ci0JCWVyciA9IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhuaSwgMCk7CiYjNDM7CQllcnIgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNfbm9sb2NrKG5pLCAwKTsKIAkJaWYgKCFlcnIpCiAJCQlOSW5vQ2xlYXJSdW5saXN0RGlydHkobmkpOwogCQl1cF93cml0ZSgmYW1wO25pLSZndDtydW5saXN0LmxvY2spOwomIzQzOwkJbnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTsKIAl9CiAKIAllcnIgPSBudGZzX2lub2RlX3N5bmNfc3RhbmRhcmRfaW5mb3JtYXRpb24odmksIG0pOwpAQCAtMjk4Miw3ICYjNDM7Mjk4Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgbnRmc19pbm9kZSAqbnRmc19leHRlbnRfaW5vZGVfb3BlbihzdHJ1Y3QgbnRmc19pbm9kZSAqYmFzZV9uaSwKICAqCiAgKiBSZXR1cm4gMCBvbiBzdWNjZXNzIGFuZCBlcnJvci4KICAqLwotaW50IG50ZnNfaW5vZGVfYXR0YWNoX2FsbF9leHRlbnRzKHN0cnVjdCBudGZzX2lub2RlICpuaSkKJiM0MztpbnQgbnRmc19pbm9kZV9hdHRhY2hfYWxsX2V4dGVudHNfbm9sb2NrKHN0cnVjdCBudGZzX2lub2RlICpuaSkKIHsKIAlzdHJ1Y3QgYXR0cl9saXN0X2VudHJ5ICphbGU7CiAJdTY0IHByZXZfYXR0YWNoZWQgPSAwOwpAQCAtMzAyMiwxMyAmIzQzOzMwMjcsMjUgQEAgaW50IG50ZnNfaW5vZGVfYXR0YWNoX2FsbF9leHRlbnRzKHN0cnVjdCBudGZzX2lub2RlICpuaSkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO2ludCBudGZzX2lub2RlX2F0dGFjaF9hbGxfZXh0ZW50cyhzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlhdHRyX2xvY2tfbmkgPSBudGZzX2F0dHJfbGlzdF9sb2NrKG5pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7CiYjNDM7CWVyciA9IG50ZnNfaW5vZGVfYXR0YWNoX2FsbF9leHRlbnRzX25vbG9jayhuaSk7CiYjNDM7CW50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiAvKgogICogbnRmc19pbm9kZV9hZGRfYXR0cmxpc3QgLSBhZGQgYXR0cmlidXRlIGxpc3QgdG8gaW5vZGUgYW5kIGZpbGwgaXQKICAqIEBuaTogb3BlbmVkIG50ZnMgaW5vZGUgdG8gd2hpY2ggYWRkIGF0dHJpYnV0ZSBsaXN0CiAgKgogICogUmV0dXJuIDAgb24gc3VjY2VzcyBvciBlcnJvci4KICAqLwotaW50IG50ZnNfaW5vZGVfYWRkX2F0dHJsaXN0KHN0cnVjdCBudGZzX2lub2RlICpuaSkKJiM0MztpbnQgbnRmc19pbm9kZV9hZGRfYXR0cmxpc3Rfbm9sb2NrKHN0cnVjdCBudGZzX2lub2RlICpuaSkKIHsKIAlpbnQgZXJyOwogCXN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4OwpAQCAtMzA1Myw3ICYjNDM7MzA3MCw3IEBAIGludCBudGZzX2lub2RlX2FkZF9hdHRybGlzdChzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpCiAJCXJldHVybiAtRUlPOwogCiAJLyogRm9ybSBhdHRyaWJ1dGUgbGlzdC4gKi8KLQljdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIG5pX21yZWMpOwomIzQzOwljdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIG5pX21yZWMsIE5URlNfQVRUUl9DVFhfTE9DS19OT05FKTsKIAlpZiAoIWN0eCkgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9vdXQ7CkBAIC0zMTExLDcgJiM0MzszMTI4LDYgQEAgaW50IG50ZnNfaW5vZGVfYWRkX2F0dHJsaXN0KHN0cnVjdCBudGZzX2lub2RlICpuaSkKIAkJZ290byBwdXRfZXJyX291dDsKIAl9CiAKLQkvKiBTZXQgaW4tbWVtb3J5IGF0dHJpYnV0ZSBsaXN0LiAqLwogCW5pLSZndDthdHRyX2xpc3QgPSBhbDsKIAluaS0mZ3Q7YXR0cl9saXN0X3NpemUgPSBhbF9sZW47CiAJTklub1NldEF0dHJMaXN0KG5pKTsKQEAgLTMxMjEsNyAmIzQzOzMxMzcsNyBAQCBpbnQgbnRmc19pbm9kZV9hZGRfYXR0cmxpc3Qoc3RydWN0IG50ZnNfaW5vZGUgKm5pKQogCS8qIEZyZWUgc3BhY2UgaWYgdGhlcmUgaXMgbm90IGVub3VnaCBpdCBmb3IgJEFUVFJJQlVURV9MSVNULiAqLwogCWlmIChsZTMyX3RvX2NwdShuaV9tcmVjLSZndDtieXRlc19hbGxvY2F0ZWQpIC0KIAkJCWxlMzJfdG9fY3B1KG5pX21yZWMtJmd0O2J5dGVzX2luX3VzZSkgJmx0OyBhdHRyX2FsX2xlbikgewotCQlpZiAobnRmc19pbm9kZV9mcmVlX3NwYWNlKG5pLCAoaW50KWF0dHJfYWxfbGVuKSkgewomIzQzOwkJaWYgKG50ZnNfaW5vZGVfZnJlZV9zcGFjZV9ub2xvY2sobmksIChpbnQpYXR0cl9hbF9sZW4pKSB7CiAJCQkvKiBGYWlsZWQgdG8gZnJlZSBzcGFjZS4gKi8KIAkJCWVyciA9IC1FTk9TUEM7CiAJCQludGZzX2Vycm9yKG5pLSZndDt2b2wtJmd0O3NiLCAmIzM0O0ZhaWxlZCB0byBmcmVlIHNwYWNlIGZvciBhdHRybGlzdCYjMzQ7KTsKQEAgLTMxNDgsNiAmIzQzOzMxNjQsNyBAQCBpbnQgbnRmc19pbm9kZV9hZGRfYXR0cmxpc3Qoc3RydWN0IG50ZnNfaW5vZGUgKm5pKQogcmVtb3ZlX2F0dHJsaXN0X3JlY29yZDoKIAkvKiBQcmV2ZW50IG50ZnNfYXR0cl9yZWNvcm1fcm0gZnJvbSBmcmVlaW5nIGF0dHJpYnV0ZSBsaXN0LiAqLwogCW5pLSZndDthdHRyX2xpc3QgPSBOVUxMOwomIzQzOwluaS0mZ3Q7YXR0cl9saXN0X3NpemUgPSAwOwogCU5Jbm9DbGVhckF0dHJMaXN0KG5pKTsKIAkvKiBSZW1vdmUgJEFUVFJJQlVURV9MSVNUIHJlY29yZC4gKi8KIAludGZzX2F0dHJfcmVpbml0X3NlYXJjaF9jdHgoY3R4KTsKQEAgLTMyMDEsNiAmIzQzOzMyMTgsMTggQEAgaW50IG50ZnNfaW5vZGVfYWRkX2F0dHJsaXN0KHN0cnVjdCBudGZzX2lub2RlICpuaSkKIAlyZXR1cm4gZXJyOwogfQogCiYjNDM7aW50IG50ZnNfaW5vZGVfYWRkX2F0dHJsaXN0KHN0cnVjdCBudGZzX2lub2RlICpuaSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBudGZzX2lub2RlICphdHRyX2xvY2tfbmk7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7CiYjNDM7CWVyciA9IG50ZnNfaW5vZGVfYWRkX2F0dHJsaXN0X25vbG9jayhuaSk7CiYjNDM7CW50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwogLyoKICAqIG50ZnNfaW5vZGVfY2xvc2UgLSBjbG9zZSBhbiBudGZzIGlub2RlIGFuZCBmcmVlIGFsbCBhc3NvY2lhdGVkIG1lbW9yeQogICogQG5pOgkJbnRmcyBpbm9kZSB0byBjbG9zZQpAQCAtMzM0NCw3ICYjNDM7MzM3Myw4IEBAIHN0YXRpYyBpbnQgbnRmc19hdHRyX3Bvc2l0aW9uKF9fbGUzMiB0eXBlLCBzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eCkKICAqCiAgKiBSZXR1cm4gMCBvbiBzdWNjZXNzIG9yIGVycm9yLgogICovCi1pbnQgbnRmc19pbm9kZV9mcmVlX3NwYWNlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgaW50IHNpemUpCiYjNDM7c3RhdGljIGludCBfX250ZnNfaW5vZGVfZnJlZV9zcGFjZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGludCBzaXplLAomIzQzOwkJCQkgICBlbnVtIG50ZnNfYXR0cl9zZWFyY2hfY3R4X2xvY2tfbW9kZSBsb2NrX21vZGUpCiB7CiAJc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHg7CiAJaW50IGZyZWVkLCBlcnI7CkBAIC0zMzY4LDcgJiM0MzszMzk4LDcgQEAgaW50IG50ZnNfaW5vZGVfZnJlZV9zcGFjZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGludCBzaXplKQogCWlmIChzaXplICZsdDs9IGZyZWVkKQogCQlyZXR1cm4gMDsKIAotCWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCk7CiYjNDM7CWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCwgbG9ja19tb2RlKTsKIAlpZiAoIWN0eCkgewogCQludGZzX2Vycm9yKHNiLCAmIzM0OyVzLCBGYWlsZWQgdG8gZ2V0IHNlYXJjaCBjb250ZXh0JiMzNDssIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0zNDU0LDYgJiM0MzszNDg0LDIzIEBAIGludCBudGZzX2lub2RlX2ZyZWVfc3BhY2Uoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBpbnQgc2l6ZSkKIAlyZXR1cm4gZXJyOwogfQogCiYjNDM7aW50IG50ZnNfaW5vZGVfZnJlZV9zcGFjZV9ub2xvY2soc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBpbnQgc2l6ZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBfX250ZnNfaW5vZGVfZnJlZV9zcGFjZShuaSwgc2l6ZSwgTlRGU19BVFRSX0NUWF9MT0NLX05PTkUpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbnRmc19pbm9kZV9mcmVlX3NwYWNlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgaW50IHNpemUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlhdHRyX2xvY2tfbmkgPSBudGZzX2F0dHJfbGlzdF9sb2NrKG5pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpOwomIzQzOwllcnIgPSBfX250ZnNfaW5vZGVfZnJlZV9zcGFjZShuaSwgc2l6ZSwgTlRGU19BVFRSX0NUWF9MT0NLX05PTkUpOwomIzQzOwludGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKIHM2NCBudGZzX2lub2RlX2F0dHJfcHJlYWQoc3RydWN0IGlub2RlICp2aSwgczY0IHBvcywgczY0IGNvdW50LCB1OCAqYnVmKQogewogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gdmktJmd0O2lfbWFwcGluZzsKQEAgLTM0NzgsMTAgJiM0MzszNTI1LDExIEBAIHM2NCBudGZzX2lub2RlX2F0dHJfcHJlYWQoc3RydWN0IGlub2RlICp2aSwgczY0IHBvcywgczY0IGNvdW50LCB1OCAqYnVmKQogCQljb3VudCA9IGlzaXplIC0gcG9zOwogCiAJaWYgKCFOSW5vTm9uUmVzaWRlbnQobmkpKSB7CiYjNDM7CQlzdHJ1Y3QgbnRmc19pbm9kZSAqYmFzZV9uaSA9IG5pLSZndDtleHQuYmFzZV9udGZzX2lubzsKIAkJc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHg7CiAJCXU4ICphdHRyOwogCi0JCWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaS0mZ3Q7ZXh0LmJhc2VfbnRmc19pbm8sIE5VTEwpOwomIzQzOwkJY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KGJhc2VfbmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTsKIAkJaWYgKCFjdHgpIHsKIAkJCW50ZnNfZXJyb3IodmktJmd0O2lfc2IsICYjMzQ7RmFpbGVkIHRvIGdldCBhdHRyIHNlYXJjaCBjdHgmIzM0Oyk7CiAJCQllcnIgPSAtRU5PTUVNOwpAQCAtMzY2OSw2ICYjNDM7MzcxNyw4IEBAIHN0YXRpYyBzNjQgX19udGZzX2lub2RlX25vbl9yZXNpZGVudF9hdHRyX3B3cml0ZShzdHJ1Y3QgaW5vZGUgKnZpLAogCiAJCWlmIChzeW5jKSB7CiAJCQlzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCA9IG5pLSZndDt2b2w7CiYjNDM7CQkJc3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTsKJiM0MzsJCQllbnVtIG50ZnNfYXR0cl9zZWFyY2hfY3R4X2xvY2tfbW9kZSBtb2RlOwogCQkJczY0IGxjbiwgbGNuX2NvdW50OwogCQkJdW5zaWduZWQgaW50IGxjbl9mb2xpb19vZmYgPSAwOwogCQkJc3RydWN0IGJpbyAqYmlvOwpAQCAtMzY3OCwxMyAmIzQzOzM3MjgsMTYgQEAgc3RhdGljIHM2NCBfX250ZnNfaW5vZGVfbm9uX3Jlc2lkZW50X2F0dHJfcHdyaXRlKHN0cnVjdCBpbm9kZSAqdmksCiAKIAkJCWxjbl9jb3VudCA9IG1heF90KHM2NCwgMSwgbnRmc19ieXRlc190b19jbHVzdGVyKHZvbCwgYXR0cl9sZW4pKTsKIAkJCXZjbiA9IG50ZnNfcGlkeF90b19jbHVzdGVyKHZvbCwgZm9saW8tJmd0O2luZGV4KTsKJiM0MzsJCQltb2RlID0gTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQ7CiAKIAkJCWRvIHsKJiM0MzsJCQkJYXR0cl9sb2NrX25pID0gbnRmc19hdHRyX2xpc3RfbG9jayhuaSwgbW9kZSk7CiAJCQkJZG93bl93cml0ZSgmYW1wO25pLSZndDtydW5saXN0LmxvY2spOwogCQkJCXJsID0gbnRmc19hdHRyX3Zjbl90b19ybChuaSwgdmNuLCAmYW1wO2xjbik7CiAJCQkJaWYgKElTX0VSUihybCkpIHsKIAkJCQkJcmV0ID0gUFRSX0VSUihybCk7CiAJCQkJCXVwX3dyaXRlKCZhbXA7bmktJmd0O3J1bmxpc3QubG9jayk7CiYjNDM7CQkJCQludGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBtb2RlKTsKIAkJCQkJZ290byBlcnJfdW5sb2NrX2ZvbGlvOwogCQkJCX0KIApAQCAtMzY5Niw2ICYjNDM7Mzc0OSw3IEBAIHN0YXRpYyBzNjQgX19udGZzX2lub2RlX25vbl9yZXNpZGVudF9hdHRyX3B3cml0ZShzdHJ1Y3QgaW5vZGUgKnZpLAogCQkJCQlsY25fY291bnQgPSAwOwogCQkJCX0KIAkJCQl1cF93cml0ZSgmYW1wO25pLSZndDtydW5saXN0LmxvY2spOwomIzQzOwkJCQludGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBtb2RlKTsKIAogCQkJCWlmICh2b2wtJmd0O2NsdXN0ZXJfc2l6ZV9iaXRzICZndDsgUEFHRV9TSElGVCkgewogCQkJCQlsY25fZm9saW9fb2ZmID0gZm9saW8tJmd0O2luZGV4ICZsdDsmbHQ7IFBBR0VfU0hJRlQ7CkBAIC0zNzU2LDcgJiM0MzszODEwLDcgQEAgczY0IG50ZnNfaW5vZGVfYXR0cl9wd3JpdGUoc3RydWN0IGlub2RlICp2aSwgczY0IHBvcywgczY0IGNvdW50LCB1OCAqYnVmLCBib29sIHMKIAogCVdBUk5fT04oIU5Jbm9BdHRyKG5pKSk7CiAKLQljdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmktJmd0O2V4dC5iYXNlX250ZnNfaW5vLCBOVUxMKTsKJiM0MzsJY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLSZndDtleHQuYmFzZV9udGZzX2lubywgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpOwogCWlmICghY3R4KSB7CiAJCW50ZnNfZXJyb3IodmktJmd0O2lfc2IsICYjMzQ7RmFpbGVkIHRvIGdldCBhdHRyIHNlYXJjaCBjdHgmIzM0Oyk7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9pbm9kZS5oIGIvZnMvbnRmcy9pbm9kZS5oCmluZGV4IDlhYWNkNTc4N2ZmZWEwLi40ZDBmYmQ1M2UxYzRhYyAxMDA2NDQKLS0tIGEvZnMvbnRmcy9pbm9kZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL250ZnMvaW5vZGUuaApAQCAtMTAsNiAmIzQzOzEwLDggQEAKICNpZm5kZWYgX0xJTlVYX05URlNfSU5PREVfSAogI2RlZmluZSBfTElOVVhfTlRGU19JTk9ERV9ICiAKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcndzZW0uaCZndDsKJiM0MzsKICNpbmNsdWRlICYjMzQ7ZGVidWcuaCYjMzQ7CiAKIGVudW0gbnRmc19pbm9kZV9tdXRleF9sb2NrX2NsYXNzIHsKQEAgLTY2LDYgJiM0Mzs2OCw3IEBAIGVudW0gbnRmc19pbm9kZV9tdXRleF9sb2NrX2NsYXNzIHsKICAqIEF0dHJpYnV0ZSBsaXN0IHN1cHBvcnQgKG9ubHkgZm9yIHVzZSBieSB0aGUgYXR0cmlidXRlIGxvb2t1cAogICogZnVuY3Rpb25zKS4gU2V0dXAgZHVyaW5nIHJlYWRfaW5vZGUgZm9yIGFsbCBpbm9kZXMgd2l0aCBhdHRyaWJ1dGUKICAqIGxpc3RzLiBPbmx5IHZhbGlkIGlmIE5JX0F0dHJMaXN0IGlzIHNldCBpbiBzdGF0ZS4KJiM0MzsgKiBAYXR0cl9saXN0X2xvY2s6IFNlcmlhbGl6ZXMgYXR0cmlidXRlIGxpc3QgcG9pbnRlciB1cGRhdGVzIHdpdGggbG9va3Vwcy4KICAqIEBhdHRyX2xpc3Rfc2l6ZTogTGVuZ3RoIG9mIGF0dHJpYnV0ZSBsaXN0IHZhbHVlIGluIGJ5dGVzLgogICogQGF0dHJfbGlzdDogQXR0cmlidXRlIGxpc3QgdmFsdWUgaXRzZWxmLgogICoKQEAgLTExOCw2ICYjNDM7MTIxLDcgQEAgc3RydWN0IG50ZnNfaW5vZGUgewogCWludCBmb2xpb19vZnM7CiAJczY0IG1mdF9sY25bMl07CiAJdW5zaWduZWQgaW50IG1mdF9sY25fY291bnQ7CiYjNDM7CXN0cnVjdCByd19zZW1hcGhvcmUgYXR0cl9saXN0X2xvY2s7CiAJdTMyIGF0dHJfbGlzdF9zaXplOwogCXU4ICphdHRyX2xpc3Q7CiAJdW5pb24gewpAQCAtMzM2LDkgJiM0MzszNDAsMTIgQEAgaW50IG50ZnNfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsCiAKIGludCBudGZzX2dldF9ibG9ja19tZnRfcmVjb3JkKHN0cnVjdCBudGZzX2lub2RlICptZnRfbmksIHN0cnVjdCBudGZzX2lub2RlICpuaSk7CiBpbnQgX19udGZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqdmksIGludCBzeW5jKTsKJiM0MztpbnQgbnRmc19pbm9kZV9hdHRhY2hfYWxsX2V4dGVudHNfbm9sb2NrKHN0cnVjdCBudGZzX2lub2RlICpuaSk7CiBpbnQgbnRmc19pbm9kZV9hdHRhY2hfYWxsX2V4dGVudHMoc3RydWN0IG50ZnNfaW5vZGUgKm5pKTsKJiM0MztpbnQgbnRmc19pbm9kZV9hZGRfYXR0cmxpc3Rfbm9sb2NrKHN0cnVjdCBudGZzX2lub2RlICpuaSk7CiBpbnQgbnRmc19pbm9kZV9hZGRfYXR0cmxpc3Qoc3RydWN0IG50ZnNfaW5vZGUgKm5pKTsKIHZvaWQgbnRmc19kZXN0cm95X2V4dF9pbm9kZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpOwomIzQzO2ludCBudGZzX2lub2RlX2ZyZWVfc3BhY2Vfbm9sb2NrKHN0cnVjdCBudGZzX2lub2RlICpuaSwgaW50IHNpemUpOwogaW50IG50ZnNfaW5vZGVfZnJlZV9zcGFjZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGludCBzaXplKTsKIHM2NCBudGZzX2lub2RlX2F0dHJfcHJlYWQoc3RydWN0IGlub2RlICp2aSwgczY0IHBvcywgczY0IGNvdW50LCB1OCAqYnVmKTsKIHM2NCBudGZzX2lub2RlX2F0dHJfcHdyaXRlKHN0cnVjdCBpbm9kZSAqdmksIHM2NCBwb3MsIHM2NCBjb3VudCwgdTggKmJ1ZiwKZGlmZiAtLWdpdCBhL2ZzL250ZnMvaW9tYXAuYyBiL2ZzL250ZnMvaW9tYXAuYwppbmRleCA1MmVlY2Y1Y2IyNTZhYS4uM2FmMmM2ZDMyYjBmNzAgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvaW9tYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9udGZzL2lvbWFwLmMKQEAgLTk1LDcgJiM0Mzs5NSw3IEBAIHN0YXRpYyBpbnQgbnRmc19yZWFkX2lvbWFwX2JlZ2luX3Jlc2lkZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvCiAJZWxzZQogCQliYXNlX25pID0gbmk7CiAKLQljdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoYmFzZV9uaSwgTlVMTCk7CiYjNDM7CWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChiYXNlX25pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7CiAJaWYgKCFjdHgpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CkBAIC0xODcsNiAmIzQzOzE4Nyw3IEBAIHN0YXRpYyBpbnQgbnRmc19yZWFkX2lvbWFwX2JlZ2luX25vbl9yZXNpZGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0CiAJCWJvb2wgbmVlZF91bndyaXR0ZW4pCiB7CiAJc3RydWN0IG50ZnNfaW5vZGUgKm5pID0gTlRGU19JKGlub2RlKTsKJiM0MzsJc3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTsKIAlzNjQgdmNuOwogCXM2NCBsY247CiAJc3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqcmw7CkBAIC0xOTcsMjAgJiM0MzsxOTgsMjQgQEAgc3RhdGljIGludCBudGZzX3JlYWRfaW9tYXBfYmVnaW5fbm9uX3Jlc2lkZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQKIAl2Y24gPSBudGZzX2J5dGVzX3RvX2NsdXN0ZXIodm9sLCBvZmZzZXQpOwogCXZjbl9vZnMgPSBudGZzX2J5dGVzX3RvX2NsdXN0ZXJfb2ZmKHZvbCwgb2Zmc2V0KTsKIAomIzQzOwlhdHRyX2xvY2tfbmkgPSBudGZzX2F0dHJfbGlzdF9sb2NrKG5pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7CiAJZG93bl93cml0ZSgmYW1wO25pLSZndDtydW5saXN0LmxvY2spOwogCXJsID0gbnRmc19hdHRyX3Zjbl90b19ybChuaSwgdmNuLCAmYW1wO2xjbik7CiAJaWYgKElTX0VSUihybCkpIHsKIAkJdXBfd3JpdGUoJmFtcDtuaS0mZ3Q7cnVubGlzdC5sb2NrKTsKJiM0MzsJCW50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTsKIAkJcmV0dXJuIFBUUl9FUlIocmwpOwogCX0KIAogCWlmIChmbGFncyAmYW1wOyBJT01BUF9SRVBPUlQpIHsKIAkJaWYgKGxjbiAmbHQ7IExDTl9IT0xFKSB7CiAJCQl1cF93cml0ZSgmYW1wO25pLSZndDtydW5saXN0LmxvY2spOwomIzQzOwkJCW50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTsKIAkJCXJldHVybiAtRU5PRU5UOwogCQl9CiAJfSBlbHNlIGlmIChsY24gJmx0OyBMQ05fRU5PRU5UKSB7CiAJCXVwX3dyaXRlKCZhbXA7bmktJmd0O3J1bmxpc3QubG9jayk7CiYjNDM7CQludGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMjM4LDYgJiM0MzsyNDMsNyBAQCBzdGF0aWMgaW50IG50ZnNfcmVhZF9pb21hcF9iZWdpbl9ub25fcmVzaWRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldAogCQkJCSYjMzQ7cnVubGlzdCh2Y24gOiAlbGxkLCBsZW5ndGggOiAlbGxkLCBsY24gOiAlbGxkKSBpcyBjb3JydXB0ZWRcbiYjMzQ7LAogCQkJCXJsLSZndDt2Y24sIHJsLSZndDtsZW5ndGgsIHJsLSZndDtsY24pOwogCQl1cF93cml0ZSgmYW1wO25pLSZndDtydW5saXN0LmxvY2spOwomIzQzOwkJbnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTI0Niw2ICYjNDM7MjUyLDcgQEAgc3RhdGljIGludCBudGZzX3JlYWRfaW9tYXBfYmVnaW5fbm9uX3Jlc2lkZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQKIAllbHNlCiAJCWlvbWFwLSZndDtsZW5ndGggPSBsZW5ndGg7CiAJdXBfd3JpdGUoJmFtcDtuaS0mZ3Q7cnVubGlzdC5sb2NrKTsKJiM0MzsJbnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpOwogCiAJaWYgKCEoZmxhZ3MgJmFtcDsgSU9NQVBfWkVSTykgJmFtcDsmYW1wOwogCQkJaW9tYXAtJmd0O3R5cGUgPT0gSU9NQVBfTUFQUEVEICZhbXA7JmFtcDsKQEAgLTM2NSw2ICYjNDM7MzcyLDcgQEAgc3RhdGljIGludCBudGZzX3dyaXRlX3NpbXBsZV9pb21hcF9iZWdpbl9ub25fcmVzaWRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl8KIHsKIAlzdHJ1Y3QgbnRmc19pbm9kZSAqbmkgPSBOVEZTX0koaW5vZGUpOwogCXN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sID0gbmktJmd0O3ZvbDsKJiM0MzsJc3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTsKIAlsb2ZmX3QgdmNuX29mcywgcmxfbGVuZ3RoOwogCXN0cnVjdCBydW5saXN0X2VsZW1lbnQgKnJsLCAqcmxjOwogCWJvb2wgaXNfcmV0cnkgPSBmYWxzZTsKQEAgLTM5MCwxMiAmIzQzOzM5OCwxNCBAQCBzdGF0aWMgaW50IG50ZnNfd3JpdGVfc2ltcGxlX2lvbWFwX2JlZ2luX25vbl9yZXNpZGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmXwogCX0KIAl1cF9yZWFkKCZhbXA7bmktJmd0O3J1bmxpc3QubG9jayk7CiAKJiM0MzsJYXR0cl9sb2NrX25pID0gbnRmc19hdHRyX2xpc3RfbG9jayhuaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpOwogCWRvd25fd3JpdGUoJmFtcDtuaS0mZ3Q7cnVubGlzdC5sb2NrKTsKIHJlbWFwX3JsOgogCS8qIFNlZWsgdG8gZWxlbWVudCBjb250YWluaW5nIHRhcmdldCB2Y24uICovCiAJcmwgPSBfX250ZnNfYXR0cl9maW5kX3Zjbl9ub2xvY2soJmFtcDtuaS0mZ3Q7cnVubGlzdCwgdmNuKTsKIAlpZiAoSVNfRVJSKHJsKSkgewogCQl1cF93cml0ZSgmYW1wO25pLSZndDtydW5saXN0LmxvY2spOwomIzQzOwkJbnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpOwogCQltdXRleF91bmxvY2soJmFtcDtuaS0mZ3Q7bXJlY19sb2NrKTsKIAkJcmV0dXJuIC1FSU87CiAJfQpAQCAtNDE1LDYgJiM0Mzs0MjUsNyBAQCBzdGF0aWMgaW50IG50ZnNfd3JpdGVfc2ltcGxlX2lvbWFwX2JlZ2luX25vbl9yZXNpZGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmXwogCQkJCSYjMzQ7cnVubGlzdCh2Y24gOiAlbGxkLCBsZW5ndGggOiAlbGxkKSBpcyBjb3JydXB0ZWRcbiYjMzQ7LAogCQkJCXJsLSZndDt2Y24sIHJsLSZndDtsZW5ndGgpOwogCQl1cF93cml0ZSgmYW1wO25pLSZndDtydW5saXN0LmxvY2spOwomIzQzOwkJbnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpOwogCQltdXRleF91bmxvY2soJmFtcDtuaS0mZ3Q7bXJlY19sb2NrKTsKIAkJcmV0dXJuIC1FSU87CiAJfQpAQCAtNDI5LDYgJiM0Mzs0NDAsNyBAQCBzdGF0aWMgaW50IG50ZnNfd3JpdGVfc2ltcGxlX2lvbWFwX2JlZ2luX25vbl9yZXNpZGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmXwogCQkJaWYgKG1heF9jbHVfY291bnQgJmx0OyAwKSB7CiAJCQkJZXJyID0gbWF4X2NsdV9jb3VudDsKIAkJCQl1cF93cml0ZSgmYW1wO25pLSZndDtydW5saXN0LmxvY2spOwomIzQzOwkJCQludGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7CiAJCQkJbXV0ZXhfdW5sb2NrKCZhbXA7bmktJmd0O21yZWNfbG9jayk7CiAJCQkJcmV0dXJuIGVycjsKIAkJCX0KQEAgLTQ0NCw2ICYjNDM7NDU2LDcgQEAgc3RhdGljIGludCBudGZzX3dyaXRlX3NpbXBsZV9pb21hcF9iZWdpbl9ub25fcmVzaWRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl8KIAkJCQkJR0ZQX05PRlMpOwogCQkJaWYgKCFybGMpIHsKIAkJCQl1cF93cml0ZSgmYW1wO25pLSZndDtydW5saXN0LmxvY2spOwomIzQzOwkJCQludGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7CiAJCQkJbXV0ZXhfdW5sb2NrKCZhbXA7bmktJmd0O21yZWNfbG9jayk7CiAJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQl9CkBAIC00NjEsNiAmIzQzOzQ3NCw3IEBAIHN0YXRpYyBpbnQgbnRmc193cml0ZV9zaW1wbGVfaW9tYXBfYmVnaW5fbm9uX3Jlc2lkZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfCiAJCQlpZiAoSVNfRVJSKHJsKSkgewogCQkJCW50ZnNfZXJyb3Iodm9sLSZndDtzYiwgJiMzNDtGYWlsZWQgdG8gbWVyZ2UgcnVubGlzdHMmIzM0Oyk7CiAJCQkJdXBfd3JpdGUoJmFtcDtuaS0mZ3Q7cnVubGlzdC5sb2NrKTsKJiM0MzsJCQkJbnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpOwogCQkJCW11dGV4X3VubG9jaygmYW1wO25pLSZndDttcmVjX2xvY2spOwogCQkJCWt2ZnJlZShybGMpOwogCQkJCXJldHVybiBQVFJfRVJSKHJsKTsKQEAgLTQ3MSw2ICYjNDM7NDg1LDcgQEAgc3RhdGljIGludCBudGZzX3dyaXRlX3NpbXBsZV9pb21hcF9iZWdpbl9ub25fcmVzaWRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl8KIAkJCW5pLSZndDtpX2RlYWxsb2NfY2x1c3RlcnMgJiM0Mzs9IG1heF9jbHVfY291bnQ7CiAJCX0KIAkJdXBfd3JpdGUoJmFtcDtuaS0mZ3Q7cnVubGlzdC5sb2NrKTsKJiM0MzsJCW50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTsKIAkJbXV0ZXhfdW5sb2NrKCZhbXA7bmktJmd0O21yZWNfbG9jayk7CiAKIAkJaWYgKGxjbiAmbHQ7IExDTl9ERUxBTExPQykKQEAgLTUyMyw2ICYjNDM7NTM4LDcgQEAgc3RhdGljIGludCBudGZzX3dyaXRlX3NpbXBsZV9pb21hcF9iZWdpbl9ub25fcmVzaWRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl8KIAkJfQogCX0gZWxzZSB7CiAJCXVwX3dyaXRlKCZhbXA7bmktJmd0O3J1bmxpc3QubG9jayk7CiYjNDM7CQludGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7CiAJCW11dGV4X3VubG9jaygmYW1wO25pLSZndDttcmVjX2xvY2spOwogCiAJCWlvbWFwLSZndDt0eXBlID0gSU9NQVBfTUFQUEVEOwpAQCAtNTQ5LDYgJiM0Mzs1NjUsNyBAQCBzdGF0aWMgaW50IG50ZnNfd3JpdGVfZGFfaW9tYXBfYmVnaW5fbm9uX3Jlc2lkZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsCiB7CiAJc3RydWN0IG50ZnNfaW5vZGUgKm5pID0gTlRGU19JKGlub2RlKTsKIAlzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCA9IG5pLSZndDt2b2w7CiYjNDM7CXN0cnVjdCBudGZzX2lub2RlICphdHRyX2xvY2tfbmk7CiAJbG9mZl90IHZjbl9vZnMsIHJsX2xlbmd0aDsKIAlzNjQgdmNuLCBzdGFydF9sY24sIGxjbl9jb3VudDsKIAlib29sIGJhbGxvYyA9IGZhbHNlLCB1cGRhdGVfbXA7CkBAIC01NjEsMTEgJiM0Mzs1NzgsMTMgQEAgc3RhdGljIGludCBudGZzX3dyaXRlX2RhX2lvbWFwX2JlZ2luX25vbl9yZXNpZGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCiAJdXBkYXRlX21wID0gbnRmc19pb21hcF9mbGFncyAmYW1wOyAoTlRGU19JT01BUF9GTEFHU19ESU8gfCBOVEZTX0lPTUFQX0ZMQUdTX01LV1JJVEUpIHx8CiAJCQlOSW5vQXR0cihuaSkgfHwgbmktJmd0O21mdF9ubyAmbHQ7IEZJTEVfZmlyc3RfdXNlcjsKJiM0MzsJYXR0cl9sb2NrX25pID0gbnRmc19hdHRyX2xpc3RfbG9jayhuaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTsKIAlkb3duX3dyaXRlKCZhbXA7bmktJmd0O3J1bmxpc3QubG9jayk7CiAJZXJyID0gbnRmc19hdHRyX21hcF9jbHVzdGVyKG5pLCB2Y24sICZhbXA7c3RhcnRfbGNuLCAmYW1wO2xjbl9jb3VudCwKIAkJCW1heF9jbHVfY291bnQsICZhbXA7YmFsbG9jLCB1cGRhdGVfbXAsCiAJCQludGZzX2lvbWFwX2ZsYWdzICZhbXA7IE5URlNfSU9NQVBfRkxBR1NfV1JJVEVCQUNLKTsKIAl1cF93cml0ZSgmYW1wO25pLSZndDtydW5saXN0LmxvY2spOwomIzQzOwludGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpOwogCW11dGV4X3VubG9jaygmYW1wO25pLSZndDttcmVjX2xvY2spOwogCWlmIChlcnIpIHsKIAkJbmktJmd0O2lfZGVhbGxvY19jbHVzdGVycyA9IDA7CkBAIC02MzcsNyAmIzQzOzY1Niw3IEBAIHN0YXRpYyBpbnQgbnRmc193cml0ZV9pb21hcF9iZWdpbl9yZXNpZGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LAogCWludCBlcnIgPSAwOwogCWNoYXIgKmthdHRyOwogCi0JY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTsKJiM0MzsJY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7CiAJaWYgKCFjdHgpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9mcy9udGZzL2xvZ2ZpbGUuYyBiL2ZzL250ZnMvbG9nZmlsZS5jCmluZGV4IDAyNGRkZWU0MmRjOGY2Li5iZjk2N2VmOGFiNjhjOSAxMDA2NDQKLS0tIGEvZnMvbnRmcy9sb2dmaWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmcy9sb2dmaWxlLmMKQEAgLTY0Myw2ICYjNDM7NjQzLDcgQEAgYm9vbCBudGZzX2VtcHR5X2xvZ2ZpbGUoc3RydWN0IGlub2RlICpsb2dfdmkpCiAJc3RydWN0IG50ZnNfaW5vZGUgKmxvZ19uaSA9IE5URlNfSShsb2dfdmkpOwogCXN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sID0gbG9nX25pLSZndDt2b2w7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHZvbC0mZ3Q7c2I7CiYjNDM7CXN0cnVjdCBudGZzX2lub2RlICphdHRyX2xvY2tfbmk7CiAJc3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqcmw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyOwpAQCAtNjY5LDYgJiM0Mzs2NzAsNyBAQCBib29sIG50ZnNfZW1wdHlfbG9nZmlsZShzdHJ1Y3QgaW5vZGUgKmxvZ192aSkKIAkJCXZvbC0mZ3Q7Y2x1c3Rlcl9zaXplX2JpdHM7CiAJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2xvZ19uaS0mZ3Q7c2l6ZV9sb2NrLCBmbGFncyk7CiAJdHJ1bmNhdGVfaW5vZGVfcGFnZXMobG9nX3ZpLSZndDtpX21hcHBpbmcsIDApOwomIzQzOwlhdHRyX2xvY2tfbmkgPSBudGZzX2F0dHJfbGlzdF9sb2NrKGxvZ19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpOwogCWRvd25fd3JpdGUoJmFtcDtsb2dfbmktJmd0O3J1bmxpc3QubG9jayk7CiAJcmwgPSBsb2dfbmktJmd0O3J1bmxpc3Qucmw7CiAJaWYgKHVubGlrZWx5KCFybCB8fCB2Y24gJmx0OyBybC0mZ3Q7dmNuIHx8ICFybC0mZ3Q7bGVuZ3RoKSkgewpAQCAtNzU1LDYgJiM0Mzs3NTcsNyBAQCBib29sIG50ZnNfZW1wdHlfbG9nZmlsZShzdHJ1Y3QgaW5vZGUgKmxvZ192aSkKIAkJfSB3aGlsZSAoc3RhcnQgJmx0OyBlbmQpOwogCX0gd2hpbGUgKCgmIzQzOyYjNDM7cmwpLSZndDt2Y24gJmx0OyBlbmRfdmNuKTsKIAl1cF93cml0ZSgmYW1wO2xvZ19uaS0mZ3Q7cnVubGlzdC5sb2NrKTsKJiM0MzsJbnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpOwogCWt2ZnJlZShlbXB0eV9idWYpOwogCWtmcmVlKHJhKTsKIAl0cnVuY2F0ZV9pbm9kZV9wYWdlcyhsb2dfdmktJmd0O2lfbWFwcGluZywgMCk7CkBAIC03NzQsNiAmIzQzOzc3Nyw3IEBAIGJvb2wgbnRmc19lbXB0eV9sb2dmaWxlKHN0cnVjdCBpbm9kZSAqbG9nX3ZpKQogCWt2ZnJlZShlbXB0eV9idWYpOwogCWtmcmVlKHJhKTsKIAl1cF93cml0ZSgmYW1wO2xvZ19uaS0mZ3Q7cnVubGlzdC5sb2NrKTsKJiM0MzsJbnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpOwogCW50ZnNfZXJyb3Ioc2IsICYjMzQ7RmFpbGVkIHRvIGZpbGwgTG9nRmlsZSB3aXRoIDB4ZmYgYnl0ZXMgKGVycm9yICVkKS4mIzM0OywKIAkJCS1lcnIpOwogCXJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL2ZzL250ZnMvbWZ0LmMgYi9mcy9udGZzL21mdC5jCmluZGV4IGE1MDE5ZTgwOTUxYjg0Li5mM2UyNzAyMzI1MGNiOSAxMDA2NDQKLS0tIGEvZnMvbnRmcy9tZnQuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9udGZzL21mdC5jCkBAIC0xMiw2ICYjNDM7MTIsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2Jpby5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lvbWFwLmgmZ3Q7CiAKJiM0MzsjaW5jbHVkZSAmIzM0O2F0dHJpYi5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Yml0bWFwLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtsY25hbGxvYy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7bWZ0LmgmIzM0OwpAQCAtMTAxNSw3ICYjNDM7MTAxNiw3IEBAIHN0YXRpYyBpbnQgbnRmc19tZnRfYXR0cl9leHRlbmQoc3RydWN0IG50ZnNfaW5vZGUgKm5pKQogCQliYXNlX25pID0gbmk7CiAKIAlpZiAoIU5Jbm9BdHRyTGlzdChiYXNlX25pKSkgewotCQlyZXQgPSBudGZzX2lub2RlX2FkZF9hdHRybGlzdChiYXNlX25pKTsKJiM0MzsJCXJldCA9IG50ZnNfaW5vZGVfYWRkX2F0dHJsaXN0X25vbG9jayhiYXNlX25pKTsKIAkJaWYgKHJldCkgewogCQkJcHJfZXJyKCYjMzQ7Q2FuIG5vdCBhZGQgYXR0cmxpc3RcbiYjMzQ7KTsKIAkJCWdvdG8gb3V0OwpAQCAtMTAyNSw3ICYjNDM7MTAyNiw3IEBAIHN0YXRpYyBpbnQgbnRmc19tZnRfYXR0cl9leHRlbmQoc3RydWN0IG50ZnNfaW5vZGUgKm5pKQogCQl9CiAJfQogCi0JcmV0ID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG5pLCAwKTsKJiM0MzsJcmV0ID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzX25vbG9jayhuaSwgMCk7CiAJaWYgKHJldCkKIAkJcHJfZXJyKCYjMzQ7TVAgdXBkYXRlIGZhaWxlZFxuJiMzNDspOwogCkBAIC0xMDU3LDYgJiM0MzsxMDU4LDcgQEAgc3RhdGljIGludCBudGZzX21mdF9iaXRtYXBfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKQogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGZvbGlvICpmb2xpbzsKIAlzdHJ1Y3QgbnRmc19pbm9kZSAqbWZ0X25pLCAqbWZ0Ym1wX25pOwomIzQzOwlzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pOwogCXN0cnVjdCBydW5saXN0X2VsZW1lbnQgKnJsLCAqcmwyID0gTlVMTDsKIAlzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eCA9IE5VTEw7CiAJc3RydWN0IG1mdF9yZWNvcmQgKm1yZWM7CkBAIC0xMDc1LDYgJiM0MzsxMDc3LDcgQEAgc3RhdGljIGludCBudGZzX21mdF9iaXRtYXBfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKQogCW50ZnNfZGVidWcoJiMzNDtFeHRlbmRpbmcgbWZ0IGJpdG1hcCBhbGxvY2F0aW9uLiYjMzQ7KTsKIAltZnRfbmkgPSBOVEZTX0kodm9sLSZndDttZnRfaW5vKTsKIAltZnRibXBfbmkgPSBOVEZTX0kodm9sLSZndDttZnRibXBfaW5vKTsKJiM0MzsJYXR0cl9sb2NrX25pID0gbnRmc19hdHRyX2xpc3RfbG9jayhtZnRibXBfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7CiAJLyoKIAkgKiBEZXRlcm1pbmUgdGhlIGxhc3QgbGNuIG9mIHRoZSBtZnQgYml0bWFwLiAgVGhlIGFsbG9jYXRlZCBzaXplIG9mIHRoZQogCSAqIG1mdCBiaXRtYXAgY2Fubm90IGJlIHplcm8gc28gd2UgYXJlIG9rIHRvIGRvIHRoaXMuCkBAIC0xMDg3LDYgJiM0MzsxMDkwLDcgQEAgc3RhdGljIGludCBudGZzX21mdF9iaXRtYXBfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKQogCQkJTlRGU19CX1RPX0NMVSh2b2wsIGxsIC0gMSksIE5VTEwpOwogCWlmIChJU19FUlIocmwpIHx8IHVubGlrZWx5KCFybC0mZ3Q7bGVuZ3RoIHx8IHJsLSZndDtsY24gJmx0OyAwKSkgewogCQl1cF93cml0ZSgmYW1wO21mdGJtcF9uaS0mZ3Q7cnVubGlzdC5sb2NrKTsKJiM0MzsJCW50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7CiAJCW50ZnNfZXJyb3Iodm9sLSZndDtzYiwKIAkJCSYjMzQ7RmFpbGVkIHRvIGRldGVybWluZSBsYXN0IGFsbG9jYXRlZCBjbHVzdGVyIG9mIG1mdCBiaXRtYXAgYXR0cmlidXRlLiYjMzQ7KTsKIAkJaWYgKCFJU19FUlIocmwpKQpAQCAtMTEwOCw2ICYjNDM7MTExMiw3IEBAIHN0YXRpYyBpbnQgbnRmc19tZnRfYml0bWFwX2V4dGVuZF9hbGxvY2F0aW9uX25vbG9jayhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCkKIAkJCWxsICZndDsmZ3Q7IFBBR0VfU0hJRlQsIE5VTEwpOwogCWlmIChJU19FUlIoZm9saW8pKSB7CiAJCXVwX3dyaXRlKCZhbXA7bWZ0Ym1wX25pLSZndDtydW5saXN0LmxvY2spOwomIzQzOwkJbnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTsKIAkJbnRmc19lcnJvcih2b2wtJmd0O3NiLCAmIzM0O0ZhaWxlZCB0byByZWFkIGZyb20gbGNuIGJpdG1hcC4mIzM0Oyk7CiAJCXJldHVybiBQVFJfRVJSKGZvbGlvKTsKIAl9CkBAIC0xMTM5LDYgJiM0MzsxMTQ0LDcgQEAgc3RhdGljIGludCBudGZzX21mdF9iaXRtYXBfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKQogCQkJCXRydWUsIGZhbHNlLCBmYWxzZSk7CiAJCWlmIChJU19FUlIocmwyKSkgewogCQkJdXBfd3JpdGUoJmFtcDttZnRibXBfbmktJmd0O3J1bmxpc3QubG9jayk7CiYjNDM7CQkJbnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTsKIAkJCW50ZnNfZXJyb3Iodm9sLSZndDtzYiwKIAkJCQkJJiMzNDtGYWlsZWQgdG8gYWxsb2NhdGUgYSBjbHVzdGVyIGZvciB0aGUgbWZ0IGJpdG1hcC4mIzM0Oyk7CiAJCQlyZXR1cm4gUFRSX0VSUihybDIpOwpAQCAtMTE0Niw2ICYjNDM7MTE1Miw3IEBAIHN0YXRpYyBpbnQgbnRmc19tZnRfYml0bWFwX2V4dGVuZF9hbGxvY2F0aW9uX25vbG9jayhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCkKIAkJcmwgPSBudGZzX3J1bmxpc3RzX21lcmdlKCZhbXA7bWZ0Ym1wX25pLSZndDtydW5saXN0LCBybDIsIDAsICZhbXA7bmV3X3JsX2NvdW50KTsKIAkJaWYgKElTX0VSUihybCkpIHsKIAkJCXVwX3dyaXRlKCZhbXA7bWZ0Ym1wX25pLSZndDtydW5saXN0LmxvY2spOwomIzQzOwkJCW50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7CiAJCQludGZzX2Vycm9yKHZvbC0mZ3Q7c2IsICYjMzQ7RmFpbGVkIHRvIG1lcmdlIHJ1bmxpc3RzIGZvciBtZnQgYml0bWFwLiYjMzQ7KTsKIAkJCWlmIChudGZzX2NsdXN0ZXJfZnJlZV9mcm9tX3JsKHZvbCwgcmwyKSkgewogCQkJCW50ZnNfZXJyb3Iodm9sLSZndDtzYiwgJiMzNDtGYWlsZWQgdG8gZGVhbGxvY2F0ZSBhbGxvY2F0ZWQgY2x1c3Rlci4lcyYjMzQ7LApAQCAtMTE3Myw3ICYjNDM7MTE4MCw3IEBAIHN0YXRpYyBpbnQgbnRmc19tZnRfYml0bWFwX2V4dGVuZF9hbGxvY2F0aW9uX25vbG9jayhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCkKIAkJcmV0ID0gUFRSX0VSUihtcmVjKTsKIAkJZ290byB1bmRvX2FsbG9jOwogCX0KLQljdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobWZ0X25pLCBtcmVjKTsKJiM0MzsJY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG1mdF9uaSwgbXJlYywgTlRGU19BVFRSX0NUWF9MT0NLX05PTkUpOwogCWlmICh1bmxpa2VseSghY3R4KSkgewogCQludGZzX2Vycm9yKHZvbC0mZ3Q7c2IsICYjMzQ7RmFpbGVkIHRvIGdldCBzZWFyY2ggY29udGV4dC4mIzM0Oyk7CiAJCXJldCA9IC1FTk9NRU07CkBAIC0xMjY1LDYgJiM0MzsxMjcyLDcgQEAgc3RhdGljIGludCBudGZzX21mdF9iaXRtYXBfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKQogCW50ZnNfYXR0cl9wdXRfc2VhcmNoX2N0eChjdHgpOwogCXVubWFwX21mdF9yZWNvcmQobWZ0X25pKTsKIAl1cF93cml0ZSgmYW1wO21mdGJtcF9uaS0mZ3Q7cnVubGlzdC5sb2NrKTsKJiM0MzsJbnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTsKIAludGZzX2RlYnVnKCYjMzQ7RG9uZS4mIzM0Oyk7CiAJcmV0dXJuIDA7CiAKQEAgLTEyODEsNiAmIzQzOzEyODksNyBAQCBzdGF0aWMgaW50IG50ZnNfbWZ0X2JpdG1hcF9leHRlbmRfYWxsb2NhdGlvbl9ub2xvY2soc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpCiAJCW50ZnNfYXR0cl9wdXRfc2VhcmNoX2N0eChjdHgpOwogCQl1bm1hcF9tZnRfcmVjb3JkKG1mdF9uaSk7CiAJCXVwX3dyaXRlKCZhbXA7bWZ0Ym1wX25pLSZndDtydW5saXN0LmxvY2spOwomIzQzOwkJbnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTsKIAkJLyoKIAkJICogVGhlIG9ubHkgdGhpbmcgdGhhdCBpcyBub3cgd3JvbmcgaXMgLSZndDthbGxvY2F0ZWRfc2l6ZSBvZiB0aGUKIAkJICogYmFzZSBhdHRyaWJ1dGUgZXh0ZW50IHdoaWNoIGNoa2RzayBzaG91bGQgYmUgYWJsZSB0byBmaXguCkBAIC0xMzI0LDcgJiM0MzsxMzMzLDggQEAgc3RhdGljIGludCBudGZzX21mdF9iaXRtYXBfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKQogCQkJTlZvbFNldEVycm9ycyh2b2wpOwogCQl9CiAJCW1hcmtfbWZ0X3JlY29yZF9kaXJ0eShjdHgtJmd0O250ZnNfaW5vKTsKLQl9IGVsc2UgaWYgKHN0YXR1cy5tcF9leHRlbmRlZCAmYW1wOyZhbXA7IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhtZnRibXBfbmksIDApKSB7CiYjNDM7CX0gZWxzZSBpZiAoc3RhdHVzLm1wX2V4dGVuZGVkICZhbXA7JmFtcDsKJiM0MzsJCSAgIG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlyc19ub2xvY2sobWZ0Ym1wX25pLCAwKSkgewogCQludGZzX2Vycm9yKHZvbC0mZ3Q7c2IsICYjMzQ7RmFpbGVkIHRvIHJlc3RvcmUgbWFwcGluZyBwYWlycy4lcyYjMzQ7LCBlcyk7CiAJCU5Wb2xTZXRFcnJvcnModm9sKTsKIAl9CkBAIC0xMzMzLDYgJiM0MzsxMzQzLDcgQEAgc3RhdGljIGludCBudGZzX21mdF9iaXRtYXBfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKQogCWlmICghSVNfRVJSKG1yZWMpKQogCQl1bm1hcF9tZnRfcmVjb3JkKG1mdF9uaSk7CiAJdXBfd3JpdGUoJmFtcDttZnRibXBfbmktJmd0O3J1bmxpc3QubG9jayk7CiYjNDM7CW50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTM3MSw3ICYjNDM7MTM4Miw3IEBAIHN0YXRpYyBpbnQgbnRmc19tZnRfYml0bWFwX2V4dGVuZF9pbml0aWFsaXplZF9ub2xvY2soc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpCiAJCW50ZnNfZXJyb3Iodm9sLSZndDtzYiwgJiMzNDtGYWlsZWQgdG8gbWFwIG1mdCByZWNvcmQuJiMzNDspOwogCQlyZXR1cm4gUFRSX0VSUihtcmVjKTsKIAl9Ci0JY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG1mdF9uaSwgbXJlYyk7CiYjNDM7CWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChtZnRfbmksIG1yZWMsIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTsKIAlpZiAodW5saWtlbHkoIWN0eCkpIHsKIAkJbnRmc19lcnJvcih2b2wtJmd0O3NiLCAmIzM0O0ZhaWxlZCB0byBnZXQgc2VhcmNoIGNvbnRleHQuJiMzNDspOwogCQlyZXQgPSAtRU5PTUVNOwpAQCAtMTQyMyw3ICYjNDM7MTQzNCw3IEBAIHN0YXRpYyBpbnQgbnRmc19tZnRfYml0bWFwX2V4dGVuZF9pbml0aWFsaXplZF9ub2xvY2soc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpCiAJCU5Wb2xTZXRFcnJvcnModm9sKTsKIAkJcmV0dXJuIHJldDsKIAl9Ci0JY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG1mdF9uaSwgbXJlYyk7CiYjNDM7CWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChtZnRfbmksIG1yZWMsIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTsKIAlpZiAodW5saWtlbHkoIWN0eCkpIHsKIAkJbnRmc19lcnJvcih2b2wtJmd0O3NiLCAmIzM0O0ZhaWxlZCB0byBnZXQgc2VhcmNoIGNvbnRleHQuJXMmIzM0OywgZXMpOwogCQlOVm9sU2V0RXJyb3JzKHZvbCk7CkBAIC0xNDkwLDYgJiM0MzsxNTAxLDcgQEAgc3RhdGljIGludCBudGZzX21mdF9kYXRhX2V4dGVuZF9hbGxvY2F0aW9uX25vbG9jayhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCkKIAlzNjQgbWluX25yLCBuciwgbGw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgbnRmc19pbm9kZSAqbWZ0X25pOwomIzQzOwlzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pOwogCXN0cnVjdCBydW5saXN0X2VsZW1lbnQgKnJsLCAqcmwyOwogCXN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4ID0gTlVMTDsKIAlzdHJ1Y3QgbWZ0X3JlY29yZCAqbXJlYzsKQEAgLTE1MDEsNiAmIzQzOzE1MTMsNyBAQCBzdGF0aWMgaW50IG50ZnNfbWZ0X2RhdGFfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKQogCiAJbnRmc19kZWJ1ZygmIzM0O0V4dGVuZGluZyBtZnQgZGF0YSBhbGxvY2F0aW9uLiYjMzQ7KTsKIAltZnRfbmkgPSBOVEZTX0kodm9sLSZndDttZnRfaW5vKTsKJiM0MzsJYXR0cl9sb2NrX25pID0gbnRmc19hdHRyX2xpc3RfbG9jayhtZnRfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7CiAJLyoKIAkgKiBEZXRlcm1pbmUgdGhlIHByZWZlcnJlZCBhbGxvY2F0aW9uIGxvY2F0aW9uLCBpLmUuIHRoZSBsYXN0IGxjbiBvZgogCSAqIHRoZSBtZnQgZGF0YSBhdHRyaWJ1dGUuICBUaGUgYWxsb2NhdGVkIHNpemUgb2YgdGhlIG1mdCBkYXRhCkBAIC0xNTE0LDYgJiM0MzsxNTI3LDcgQEAgc3RhdGljIGludCBudGZzX21mdF9kYXRhX2V4dGVuZF9hbGxvY2F0aW9uX25vbG9jayhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCkKIAkJCU5URlNfQl9UT19DTFUodm9sLCBsbCAtIDEpLCBOVUxMKTsKIAlpZiAoSVNfRVJSKHJsKSB8fCB1bmxpa2VseSghcmwtJmd0O2xlbmd0aCB8fCBybC0mZ3Q7bGNuICZsdDsgMCkpIHsKIAkJdXBfd3JpdGUoJmFtcDttZnRfbmktJmd0O3J1bmxpc3QubG9jayk7CiYjNDM7CQludGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpOwogCQludGZzX2Vycm9yKHZvbC0mZ3Q7c2IsCiAJCQkmIzM0O0ZhaWxlZCB0byBkZXRlcm1pbmUgbGFzdCBhbGxvY2F0ZWQgY2x1c3RlciBvZiBtZnQgZGF0YSBhdHRyaWJ1dGUuJiMzNDspOwogCQlpZiAoIUlTX0VSUihybCkpCkBAIC0xNTQ0LDYgJiM0MzsxNTU4LDcgQEAgc3RhdGljIGludCBudGZzX21mdF9kYXRhX2V4dGVuZF9hbGxvY2F0aW9uX25vbG9jayhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCkKIAkJCW50ZnNfd2FybmluZyh2b2wtJmd0O3NiLAogCQkJCSYjMzQ7Q2Fubm90IGFsbG9jYXRlIG1mdCByZWNvcmQgYmVjYXVzZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgaW5vZGVzICgyXjMyKSBoYXMgYWxyZWFkeSBiZWVuIHJlYWNoZWQuJiMzNDspOwogCQkJdXBfd3JpdGUoJmFtcDttZnRfbmktJmd0O3J1bmxpc3QubG9jayk7CiYjNDM7CQkJbnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTsKIAkJCXJldHVybiAtRU5PU1BDOwogCQl9CiAJfQpAQCAtMTU2OCw2ICYjNDM7MTU4Myw3IEBAIHN0YXRpYyBpbnQgbnRmc19tZnRfZGF0YV9leHRlbmRfYWxsb2NhdGlvbl9ub2xvY2soc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpCiAJCQludGZzX2Vycm9yKHZvbC0mZ3Q7c2IsCiAJCQkJJiMzNDtGYWlsZWQgdG8gYWxsb2NhdGUgdGhlIG1pbmltYWwgbnVtYmVyIG9mIGNsdXN0ZXJzICglbGxpKSBmb3IgdGhlIG1mdCBkYXRhIGF0dHJpYnV0ZS4mIzM0OywKIAkJCQlucik7CiYjNDM7CQkJbnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTsKIAkJCXJldHVybiBQVFJfRVJSKHJsMik7CiAJCX0KIAkJLyoKQEAgLTE1ODMsNiAmIzQzOzE1OTksNyBAQCBzdGF0aWMgaW50IG50ZnNfbWZ0X2RhdGFfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKQogCXJsID0gbnRmc19ydW5saXN0c19tZXJnZSgmYW1wO21mdF9uaS0mZ3Q7cnVubGlzdCwgcmwyLCAwLCAmYW1wO25ld19ybF9jb3VudCk7CiAJaWYgKElTX0VSUihybCkpIHsKIAkJdXBfd3JpdGUoJmFtcDttZnRfbmktJmd0O3J1bmxpc3QubG9jayk7CiYjNDM7CQludGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpOwogCQludGZzX2Vycm9yKHZvbC0mZ3Q7c2IsICYjMzQ7RmFpbGVkIHRvIG1lcmdlIHJ1bmxpc3RzIGZvciBtZnQgZGF0YSBhdHRyaWJ1dGUuJiMzNDspOwogCQlpZiAobnRmc19jbHVzdGVyX2ZyZWVfZnJvbV9ybCh2b2wsIHJsMikpIHsKIAkJCW50ZnNfZXJyb3Iodm9sLSZndDtzYiwKQEAgLTE2MDgsNyAmIzQzOzE2MjUsNyBAQCBzdGF0aWMgaW50IG50ZnNfbWZ0X2RhdGFfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKQogCQlkb3duX3dyaXRlKCZhbXA7bWZ0X25pLSZndDtydW5saXN0LmxvY2spOwogCQlnb3RvIHVuZG9fYWxsb2M7CiAJfQotCWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChtZnRfbmksIG1yZWMpOwomIzQzOwljdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobWZ0X25pLCBtcmVjLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfTk9ORSk7CiAJaWYgKHVubGlrZWx5KCFjdHgpKSB7CiAJCW50ZnNfZXJyb3Iodm9sLSZndDtzYiwgJiMzNDtGYWlsZWQgdG8gZ2V0IHNlYXJjaCBjb250ZXh0LiYjMzQ7KTsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTE3MDQsNiAmIzQzOzE3MjEsNyBAQCBzdGF0aWMgaW50IG50ZnNfbWZ0X2RhdGFfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKQogCW50ZnNfYXR0cl9wdXRfc2VhcmNoX2N0eChjdHgpOwogCXVubWFwX21mdF9yZWNvcmQobWZ0X25pKTsKIAludGZzX2RlYnVnKCYjMzQ7RG9uZS4mIzM0Oyk7CiYjNDM7CW50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7CiAJcmV0dXJuIDA7CiByZXN0b3JlX3VuZG9fYWxsb2M6CiAJbnRmc19hdHRyX3JlaW5pdF9zZWFyY2hfY3R4KGN0eCk7CkBAIC0xNzE3LDYgJiM0MzsxNzM1LDcgQEAgc3RhdGljIGludCBudGZzX21mdF9kYXRhX2V4dGVuZF9hbGxvY2F0aW9uX25vbG9jayhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCkKIAkJbnRmc19hdHRyX3B1dF9zZWFyY2hfY3R4KGN0eCk7CiAJCXVubWFwX21mdF9yZWNvcmQobWZ0X25pKTsKIAkJdXBfd3JpdGUoJmFtcDttZnRfbmktJmd0O3J1bmxpc3QubG9jayk7CiYjNDM7CQludGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpOwogCQkvKgogCQkgKiBUaGUgb25seSB0aGluZyB0aGF0IGlzIG5vdyB3cm9uZyBpcyAtJmd0O2FsbG9jYXRlZF9zaXplIG9mIHRoZQogCQkgKiBiYXNlIGF0dHJpYnV0ZSBleHRlbnQgd2hpY2ggY2hrZHNrIHNob3VsZCBiZSBhYmxlIHRvIGZpeC4KQEAgLTE3MzYsNyAmIzQzOzE3NTUsNyBAQCBzdGF0aWMgaW50IG50ZnNfbWZ0X2RhdGFfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKQogCQludGZzX2Vycm9yKHZvbC0mZ3Q7c2IsICYjMzQ7RmFpbGVkIHRvIHRydW5jYXRlIG1mdCBkYXRhIGF0dHJpYnV0ZSBydW5saXN0LiVzJiMzNDssIGVzKTsKIAkJTlZvbFNldEVycm9ycyh2b2wpOwogCX0KLQlpZiAobXBfZXh0ZW5kZWQgJmFtcDsmYW1wOyBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobWZ0X25pLCAwKSkgewomIzQzOwlpZiAobXBfZXh0ZW5kZWQgJmFtcDsmYW1wOyBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNfbm9sb2NrKG1mdF9uaSwgMCkpIHsKIAkJbnRmc19lcnJvcih2b2wtJmd0O3NiLCAmIzM0O0ZhaWxlZCB0byByZXN0b3JlIG1hcHBpbmcgcGFpcnMuJXMmIzM0OywKIAkJCSAgIGVzKTsKIAkJTlZvbFNldEVycm9ycyh2b2wpOwpAQCAtMTc2NSw2ICYjNDM7MTc4NCw3IEBAIHN0YXRpYyBpbnQgbnRmc19tZnRfZGF0YV9leHRlbmRfYWxsb2NhdGlvbl9ub2xvY2soc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpCiAJfQogCWlmICghSVNfRVJSKG1yZWMpKQogCQl1bm1hcF9tZnRfcmVjb3JkKG1mdF9uaSk7CiYjNDM7CW50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjI0OCw3ICYjNDM7MjI2OCw3IEBAIGludCBudGZzX21mdF9yZWNvcmRfYWxsb2Moc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsIGNvbnN0IGludCBtb2RlLAogCQllcnIgPSBQVFJfRVJSKG0pOwogCQlnb3RvIHVuZG9fZGF0YV9pbml0OwogCX0KLQljdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobWZ0X25pLCBtKTsKJiM0MzsJY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG1mdF9uaSwgbSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpOwogCWlmICh1bmxpa2VseSghY3R4KSkgewogCQludGZzX2Vycm9yKHZvbC0mZ3Q7c2IsICYjMzQ7RmFpbGVkIHRvIGdldCBzZWFyY2ggY29udGV4dC4mIzM0Oyk7CiAJCWVyciA9IC1FTk9NRU07CkBAIC0yNTkzLDE0ICYjNDM7MjYxMywxNyBAQCBpbnQgbnRmc19tZnRfcmVjb3JkX2ZyZWUoc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsIHN0cnVjdCBudGZzX2lub2RlICpuaSkKIHN0YXRpYyBzNjQgbGNuX2Zyb21faW5kZXgoc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsIHN0cnVjdCBudGZzX2lub2RlICpuaSwKIAkJdW5zaWduZWQgbG9uZyBpbmRleCkKIHsKJiM0MzsJc3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTsKIAlzNjQgdmNuOwogCXM2NCBsY247CiAKIAl2Y24gPSBudGZzX3BpZHhfdG9fY2x1c3Rlcih2b2wsIGluZGV4KTsKIAomIzQzOwlhdHRyX2xvY2tfbmkgPSBudGZzX2F0dHJfbGlzdF9sb2NrKG5pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7CiAJZG93bl9yZWFkKCZhbXA7bmktJmd0O3J1bmxpc3QubG9jayk7CiAJbGNuID0gbnRmc19hdHRyX3Zjbl90b19sY25fbm9sb2NrKG5pLCB2Y24sIGZhbHNlKTsKIAl1cF9yZWFkKCZhbXA7bmktJmd0O3J1bmxpc3QubG9jayk7CiYjNDM7CW50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTsKIAogCXJldHVybiBsY247CiB9CkBAIC0yNzAwLDE0ICYjNDM7MjcyMywyMCBAQCBzdGF0aWMgaW50IG50ZnNfd3JpdGVfbWZ0X2Jsb2NrKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqdwogCQkJCWJpbyA9IE5VTEw7CiAJCQl9CiAKLQkJCWlmICh2b2wtJmd0O2NsdXN0ZXJfc2l6ZSAmbHQ7IGZvbGlvX3NpemUoZm9saW8pKSB7Ci0JCQkJZG93bl93cml0ZSgmYW1wO25pLSZndDtydW5saXN0LmxvY2spOwotCQkJCXJsID0gbnRmc19hdHRyX3Zjbl90b19ybChuaSwgdmNuX29mZiwgJmFtcDtsY24pOwotCQkJCXVwX3dyaXRlKCZhbXA7bmktJmd0O3J1bmxpc3QubG9jayk7Ci0JCQkJaWYgKElTX0VSUihybCkgfHwgbGNuICZsdDsgMCkgewotCQkJCQllcnIgPSAtRUlPOwotCQkJCQlnb3RvIHVubV9kb25lOwotCQkJCX0KJiM0MzsJCQkJaWYgKHZvbC0mZ3Q7Y2x1c3Rlcl9zaXplICZsdDsgZm9saW9fc2l6ZShmb2xpbykpIHsKJiM0MzsJCQkJCXN0cnVjdCBudGZzX2lub2RlICphdHRyX2xvY2tfbmk7CiYjNDM7CQkJCQllbnVtIG50ZnNfYXR0cl9zZWFyY2hfY3R4X2xvY2tfbW9kZSBtb2RlOwomIzQzOwomIzQzOwkJCQkJbW9kZSA9IE5URlNfQVRUUl9DVFhfTE9DS19SRUFEOwomIzQzOwkJCQkJYXR0cl9sb2NrX25pID0gbnRmc19hdHRyX2xpc3RfbG9jayhuaSwgbW9kZSk7CiYjNDM7CQkJCQlkb3duX3dyaXRlKCZhbXA7bmktJmd0O3J1bmxpc3QubG9jayk7CiYjNDM7CQkJCQlybCA9IG50ZnNfYXR0cl92Y25fdG9fcmwobmksIHZjbl9vZmYsICZhbXA7bGNuKTsKJiM0MzsJCQkJCXVwX3dyaXRlKCZhbXA7bmktJmd0O3J1bmxpc3QubG9jayk7CiYjNDM7CQkJCQludGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBtb2RlKTsKJiM0MzsJCQkJCWlmIChJU19FUlIocmwpIHx8IGxjbiAmbHQ7IDApIHsKJiM0MzsJCQkJCQllcnIgPSAtRUlPOwomIzQzOwkJCQkJCWdvdG8gdW5tX2RvbmU7CiYjNDM7CQkJCQl9CiAKIAkJCQlpZiAoYmlvICZhbXA7JmFtcDsKIAkJCQkgICAoYmlvX2VuZF9zZWN0b3IoYmlvKSAmZ3Q7Jmd0OyAodm9sLSZndDtjbHVzdGVyX3NpemVfYml0cyAtIDkpKSAhPQpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9uYW1laS5jIGIvZnMvbnRmcy9uYW1laS5jCmluZGV4IGExOTYyNmExMzViZDdmLi43M2QwODdiNzc4YzA0MyAxMDA2NDQKLS0tIGEvZnMvbnRmcy9uYW1laS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL250ZnMvbmFtZWkuYwpAQCAtMjY2LDcgJiM0MzsyNjYsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbnRmc19sb29rdXAoc3RydWN0IGlub2RlICpkaXJfaW5vLCBzdHJ1Y3QgZGVudHJ5ICpkZW50LAogCQkJCWN0eCA9IE5VTEw7CiAJCQkJZ290byBlcnJfb3V0OwogCQkJfQotCQkJY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBtKTsKJiM0MzsJCQljdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIG0sIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTsKIAkJCWlmICh1bmxpa2VseSghY3R4KSkgewogCQkJCWVyciA9IC1FTk9NRU07CiAJCQkJZ290byBlcnJfb3V0OwpAQCAtODU4LDcgJiM0Mzs4NTgsNyBAQCBzdGF0aWMgaW50IG50ZnNfZGVsZXRlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgc3RydWN0IG50ZnNfaW5vZGUgKmRpcl9uaSwKIAkgKiBJZiBmaWxlbmFtZSBpbiBET1Mgb3IgaW4gV0lOMzIgbmFtZXNwYWNlLCB0aGVuIHJlbW92ZSBET1MgbmFtZSBmaXJzdCwKIAkgKiBvbmx5IHRoZW4gcmVtb3ZlIFdJTjMyIG5hbWUuCiAJICovCi0JYWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCk7CiYjNDM7CWFjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7CiAJaWYgKCFhY3R4KSB7CiAJCW50ZnNfZXJyb3Ioc2IsICYjMzQ7JXMsIEZhaWxlZCB0byBnZXQgc2VhcmNoIGNvbnRleHQmIzM0OywgX19mdW5jX18pOwogCQlpZiAobmVlZF9sb2NrKSB7CkBAIC0xNjA2LDcgJiM0MzsxNjA2LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKm50ZnNfZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpjaGlsZF9kZW50KQogCWlmIChJU19FUlIobXJlYykpCiAJCXJldHVybiBFUlJfQ0FTVChtcmVjKTsKIAkvKiBGaW5kIHRoZSBmaXJzdCBmaWxlIG5hbWUgYXR0cmlidXRlIGluIHRoZSBtZnQgcmVjb3JkLiAqLwotCWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgbXJlYyk7CiYjNDM7CWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgbXJlYywgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpOwogCWlmICh1bmxpa2VseSghY3R4KSkgewogCQl1bm1hcF9tZnRfcmVjb3JkKG5pKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CmRpZmYgLS1naXQgYS9mcy9udGZzL3N1cGVyLmMgYi9mcy9udGZzL3N1cGVyLmMKaW5kZXggOGFiZTdiZWU0YzBkOWIuLjZhZjI0ZmJlYjkxOGRmIDEwMDY0NAotLS0gYS9mcy9udGZzL3N1cGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmcy9zdXBlci5jCkBAIC0zODAsNyAmIzQzOzM4MCw3IEBAIHN0YXRpYyBpbnQgbnRmc193cml0ZV92b2x1bWVfZmxhZ3Moc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsIGNvbnN0IF9fbGUxNiBmbGFncykKIAlpZiAodm9sLSZndDt2b2xfZmxhZ3MgPT0gZmxhZ3MpCiAJCWdvdG8gZG9uZTsKIAotCWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCk7CiYjNDM7CWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpOwogCWlmICghY3R4KSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gcHV0X3VubV9lcnJfb3V0OwpAQCAtNDc2LDcgJiM0Mzs0NzYsNyBAQCBpbnQgbnRmc193cml0ZV92b2x1bWVfbGFiZWwoc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsIGNoYXIgKmxhYmVsKQogCX0KIAogCW11dGV4X2xvY2soJmFtcDt2b2xfbmktJmd0O21yZWNfbG9jayk7Ci0JY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KHZvbF9uaSwgTlVMTCk7CiYjNDM7CWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eCh2b2xfbmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7CiAJaWYgKCFjdHgpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CkBAIC0xNDgxLDcgJiM0MzsxNDgxLDcgQEAgc3RhdGljIGJvb2wgbG9hZF9zeXN0ZW1fZmlsZXMoc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpCiAJCWdvdG8gdm9sdW1lX2ZhaWxlZDsKIAl9CiAKLQljdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoTlRGU19JKHZvbC0mZ3Q7dm9sX2lubyksIG0pOwomIzQzOwljdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoTlRGU19JKHZvbC0mZ3Q7dm9sX2lubyksIG0sIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTsKIAlpZiAoIWN0eCkgewogCQludGZzX2Vycm9yKHNiLCAmIzM0O0ZhaWxlZCB0byBnZXQgYXR0cmlidXRlIHNlYXJjaCBjb250ZXh0LiYjMzQ7KTsKIAkJZ290byBnZXRfY3R4X3ZvbF9mYWlsZWQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NjYyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIHRvIHRoZSBOVEZTIEZpbGVzeXN0ZW0qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0YXJnZXRzIHRoZSBgZnMvbnRmcy9gIGRpcmVjdG9yeS4gUmlnaHQgYXdheSwgdGhpcyBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0IHNlZW1zIGxpa2UgYSBjb3JlIG1vZGlmaWNhdGlvbiB0byB0aGUgTlRGUyBmaWxlc3lzdGVtLiBUaGUgcGF0Y2ggdG91Y2hlcyBhIHNpZ25pZmljYW50IG51bWJlciBvZiBmaWxlcyB3aXRoaW4gYGZzL250ZnMvYDogYGFvcHMuY2AsIGBhdHRyaWIuY2AsIGBhdHRyaWIuaGAsIGBhdHRybGlzdC5jYCwgYGNvbXByZXNzLmNgLCBgZGlyLmNgLCBgZWEuY2AsIGBmaWxlLmNgLCBgaW5kZXguY2AsIGBpbm9kZS5jYCwgYGlub2RlLmhgLCBgaW9tYXAuY2AsIGBsb2dmaWxlLmNgLCBgbWZ0LmNgLCBgbmFtZWkuY2AsIGFuZCBgc3VwZXIuY2AuIFRoYXQmIzM5O3MgYSBwcmV0dHkgYnJvYWQgc2NvcGU7IHRoaXMgaXMgbW9yZSB0aGFuIGp1c3QgYSBtaW5vciB0d2Vhay4KClRoZSBoZWFydCBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgbG9ja2luZyBhcm91bmQgYXR0cmlidXRlIGxpc3RzLiBJdCBpbnRyb2R1Y2VzIG5ldyBsb2NraW5nIHByaW1pdGl2ZXM6IGBudGZzX2F0dHJfbGlzdF9sb2NrYCwgYG50ZnNfYXR0cl9saXN0X3VubG9ja2AsIGBudGZzX2F0dHJfbG9ja19zZWFyY2hfY3R4YCwgYW5kIGBudGZzX2F0dHJfdW5sb2NrX3NlYXJjaF9jdHhgLiBBbmQgaXQgYWRkcyBhIGBhdHRyX2xpc3RfbG9ja2Agcndfc2VtYXBob3JlIHRvIGBzdHJ1Y3QgbnRmc19pbm9kZWAuIEFsc28sIHRoZSBmdW5jdGlvbiBgbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4YCBub3cgdGFrZXMgYSBsb2NrIG1vZGUuIFBsdXMsIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG1hbnkgJiMzNDtfbm9sb2NrJiMzNDsgdmFyaWFudHMgb2YgY29yZSBmdW5jdGlvbnMuIFRoYXQgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGludm9sdmluZyBhdHRyaWJ1dGUgbGlzdCBsb2NraW5nLCB3aGljaCBpcyBpbnRlcmVzdGluZy4KClRoaXMgaXMgY2xlYXJseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGNvcmUgbW9kaWZpY2F0aW9uIGluIHRoZSBOVEZTIHN1YnN5c3RlbS4gTGV0IG1lIHNlZSwgaXMgTlRGUyBzdGlsbCByZWFjaGFibGU/IE9mIGNvdXJzZSwgdGhyb3VnaCBtb3VudHMgYW5kIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucywgaXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBzeXN0ZW0uIFRoZW4gaXQgaGl0cyBtZSwgYW0gSSBsb29raW5nIGF0IHRoZSAqb2xkKiBOVEZTIGRyaXZlciwgb3IgdGhlICpuZXcqIG9uZT8gV2FzIGl0IG1pZ3JhdGVkIHRvIGBmcy9udGZzMy9gPyBMZXQgbWUgY2hlY2sgcXVpY2tseS4gWWVzLCB0aGUgcGF0Y2ggZXhwbGljaXRseSB0YXJnZXRzIGBmcy9udGZzL2AsIHNvIGl0JiMzOTtzIHRoZSBvbGRlciBkcml2ZXIuIE5vdyBJJiMzOTtkIGJldHRlciBjb25maXJtIHRoYXQgYENPTkZJR19OVEZTX0ZTYCBpcyB0aGUgY29uZmlnIG9wdGlvbiB0aGF0IGVuYWJsZXMgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlRGU19GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL250ZnMvS2NvbmZpZzoyOmNvbmZpZyBOVEZTX0ZTXG5mcy9udGZzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O05URlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL250ZnMvS2NvbmZpZz0xMz1jb25maWcgTlRGU19ERUJVR1xuLS1cbmZzL250ZnMvS2NvbmZpZy0zNC1cbmZzL250ZnMvS2NvbmZpZzozNTpjb25maWcgTlRGU19GU19QT1NJWF9BQ0xcbmZzL250ZnMvS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7TlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NzgzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgoqKk5URlMgRHJpdmVyIENoZWNrKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIE5URlMgY29uZmlndXJhdGlvbiwgYW5kIEkmIzM5O20gcHJldHR5IHN1cmUgaXQmIzM5O3MgYENPTkZJR19OVEZTX0ZTYC4gQnV0LCBob2xkIG9uIGEgc2Vjb25kLi4uIExldCBtZSBkb3VibGUtY2hlY2suIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIElzIHRoYXQgb2xkIGBmcy9udGZzL2AgZGlyZWN0b3J5IHN0aWxsIGhhbmdpbmcgYXJvdW5kIGluIHRoZSBrZXJuZWw/IFl1cCwgc2VlbXMgdG8gYmUuIEFuZCB0aGF0IGNvbmZpcm1zIGl0OiBgQ09ORklHX05URlNfRlNgIGlzIHRoZSBmbGFnIGZvciB0aGUgYmFzZSBOVEZTIGRyaXZlci4gQW5kIHRoZXJlIGl0IGlzLCBgQ09ORklHX05URlNfUldgLCBmb3Igd3JpdGUgc3VwcG9ydCwgYXMgZXhwZWN0ZWQuIENsYXNzaWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlRGU19SVyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcwMjcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIHF1ZXN0aW9uOgoKKipDaGVja2luZyBgZnMvbnRmcy9LY29uZmlnYCBmb3IgUmVhZC9Xcml0ZSBTdXBwb3J0KioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEJlZm9yZSBJIGp1bXAgdG8gYW55IGNvbmNsdXNpb25zLCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgb25lIHJlbGF0ZWQgdG8gdGhlIE5URlMgZmlsZXN5c3RlbS4gSSBuZWVkIHRvIHZlcmlmeSB3aGF0IG9wdGlvbnMgYXJlIGFjdHVhbGx5IGF2YWlsYWJsZSB3aXRoaW4gdGhlIE5URlMgaW1wbGVtZW50YXRpb24gaXRzZWxmLiBUaGUgbG9jYXRpb24gYGZzL250ZnMvS2NvbmZpZ2AgaXMgd2hlcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIE5URlMgYXJlIGxpa2VseSBkZWZpbmVkLiBJIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciByZWFkLXdyaXRlIHN1cHBvcnQgKGBSV2ApIHRoYXQmIzM5O3MgZXhwb3NlZCB0byB0aGUgdXNlci4gVGhpcyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RlcDsgSSYjMzk7bSBhc3N1bWluZyB0aGVyZSYjMzk7cyBhIHJlYXNvbiB0aGUgcXVlc3Rpb24gd2FzIGFza2VkIGFuZCBJIHdhbnQgdG8gZWxpbWluYXRlIHRoZSBzaW1wbGUgcG9zc2liaWxpdGllcyBmaXJzdCBiZWZvcmUgSSBkaXZlIGludG8gbW9yZSBjb21wbGV4IGV4cGxhbmF0aW9ucy4gVGhpcyBoZWxwcyBtZSBuYXJyb3cgZG93biB0aGUgcmVhbCBpc3N1ZSBhdCBoYW5kLiBVbmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2lsbCBhbHNvIGltcGFjdCBpZiB0aGlzIGlzIGEgZHJpdmVyL2tlcm5lbCBpc3N1ZSwgb3IgcGVyaGFwcyBhIHVzZXJsYW5kIHV0aWxpdHkgbmVlZGluZyBjb25maWd1cmVkIG9yIHVwZ3JhZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVEZTXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL250ZnMvS2NvbmZpZzoyOmNvbmZpZyBOVEZTX0ZTXG5mcy9udGZzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O05URlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL250ZnMvS2NvbmZpZy0xMi1cbmZzL250ZnMvS2NvbmZpZzoxMzpjb25maWcgTlRGU19ERUJVR1xuZnMvbnRmcy9LY29uZmlnLTE0LVx0Ym9vbCBcJiMzNDtOVEZTIGRlYnVnZ2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvbnRmcy9LY29uZmlnLTM0LVxuZnMvbnRmcy9LY29uZmlnOjM1OmNvbmZpZyBOVEZTX0ZTX1BPU0lYX0FDTFxuZnMvbnRmcy9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtOVEZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc0NjcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgTlRGUyBMYW5kc2NhcGUqKgoKUmlnaHQsIHNvIGBDT05GSUdfTlRGU19SV2AuLi4gdGhhdCByaW5ncyBhIGJlbGwuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gZGlnZ2luZyBpbiB0aGUgZmlsZXN5c3RlbSBzb3VyY2UsIHNwZWNpZmljYWxseSBgZnMvbnRmcy9LY29uZmlnYC4gTGV0JiMzOTtzIGdldCB0aGF0IGZpbGUgb3BlbiBhbmQgc2VlIHdoYXQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYWN0dWFsbHkgKnNheXMqIGFib3V0IHRoYXQuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgYW5kIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyB3cml0ZSBzdXBwb3J0LiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgbmV3IGNvbnNpZGVyYXRpb25zIHNpbmNlIHRoZSBsYXN0IHRpbWUgSSBsb29rZWQgYXQgaXQuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgZmlsZXN5c3RlbSBmZWF0dXJlcyBvciBzZWN1cml0eSBzZXR0aW5ncyB0aGF0IG1pZ2h0IGJlIGFmZmVjdGVkLiBNeSBnb2FsIGhlcmUgaXMgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoYXQgcGFydGljdWxhciBjb25maWcgb3B0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9udGZzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIE5URlNfRlNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O05URlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuICAgNDpcdFx0c2VsZWN0IE5MU1xuICAgNTpcdFx0c2VsZWN0IEZTX0lPTUFQXG4gICA2Olx0XHRoZWxwXG4gICA3Olx0XHQgIE5URlMgaXMgdGhlIGZpbGUgc3lzdGVtIG9mIE1pY3Jvc29mdCBXaW5kb3dzIE5ULCAyMDAwLCBYUCBhbmQgMjAwMy5cbiAgIDg6XHRcdCAgVGhpcyBhbGxvd3MgeW91IHRvIG1vdW50IGRldmljZXMgZm9ybWF0dGVkIHdpdGggdGhlIG50ZnMgZmlsZSBzeXN0ZW0uXG4gICA5Olx0XG4gIDEwOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZFxuICAxMTpcdFx0ICBudGZzLlxuICAxMjpcdFxuICAxMzpcdGNvbmZpZyBOVEZTX0RFQlVHXG4gIDE0Olx0XHRib29sIFwmIzM0O05URlMgZGVidWdnaW5nIHN1cHBvcnRcJiMzNDtcbiAgMTU6XHRcdGRlcGVuZHMgb24gTlRGU19GU1xuICAxNjpcdFx0aGVscFxuICAxNzpcdFx0ICBJZiB5b3UgYXJlIGV4cGVyaWVuY2luZyBhbnkgcHJvYmxlbXMgd2l0aCB0aGUgTlRGUyBmaWxlIHN5c3RlbSwgc2F5XG4gIDE4Olx0XHQgIFkgaGVyZS4gIFRoaXMgd2lsbCByZXN1bHQgaW4gYWRkaXRpb25hbCBjb25zaXN0ZW5jeSBjaGVja3MgdG8gYmVcbiAgMTk6XHRcdCAgcGVyZm9ybWVkIGJ5IHRoZSBkcml2ZXIgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIGRlYnVnZ2luZyBtZXNzYWdlcyB0b1xuICAyMDpcdFx0ICBiZSB3cml0dGVuIHRvIHRoZSBzeXN0ZW0gbG9nLiAgTm90ZSB0aGF0IGRlYnVnZ2luZyBtZXNzYWdlcyBhcmVcbiAgMjE6XHRcdCAgZGlzYWJsZWQgYnkgZGVmYXVsdC4gIFRvIGVuYWJsZSB0aGVtLCBzdXBwbHkgdGhlIG9wdGlvbiBkZWJ1Z19tc2dzPTFcbiAgMjI6XHRcdCAgYXQgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgd2hlbiBib290aW5nIHRoZSBrZXJuZWwgb3IgYXMgYW4gb3B0aW9uXG4gIDIzOlx0XHQgIHRvIGluc21vZCB3aGVuIGxvYWRpbmcgdGhlIG50ZnMgbW9kdWxlLiAgT25jZSB0aGUgZHJpdmVyIGlzIGFjdGl2ZSxcbiAgMjQ6XHRcdCAgeW91IGNhbiBlbmFibGUgZGVidWdnaW5nIG1lc3NhZ2VzIGJ5IGRvaW5nIChhcyByb290KTpcbiAgMjU6XHRcdCAgZWNobyAxIFx1MDAzZSAvcHJvYy9zeXMvZnMvbnRmcy1kZWJ1Z1xuICAyNjpcdFx0ICBSZXBsYWNpbmcgdGhlIFwmIzM0OzFcJiMzNDsgd2l0aCBcJiMzNDswXCYjMzQ7IHdvdWxkIGRpc2FibGUgZGVidWcgbWVzc2FnZXMuXG4gIDI3Olx0XG4gIDI4Olx0XHQgIElmIHlvdSBsZWF2ZSBkZWJ1Z2dpbmcgbWVzc2FnZXMgZGlzYWJsZWQsIHRoaXMgcmVzdWx0cyBpbiBsaXR0bGVcbiAgMjk6XHRcdCAgb3ZlcmhlYWQsIGJ1dCBlbmFibGluZyBkZWJ1ZyBtZXNzYWdlcyByZXN1bHRzIGluIHZlcnkgc2lnbmlmaWNhbnRcbiAgMzA6XHRcdCAgc2xvd2Rvd24gb2YgdGhlIHN5c3RlbS5cbiAgMzE6XHRcbiAgMzI6XHRcdCAgV2hlbiByZXBvcnRpbmcgYnVncywgcGxlYXNlIHRyeSB0byBoYXZlIGF2YWlsYWJsZSBhIGZ1bGwgZHVtcCBvZlxuICAzMzpcdFx0ICBkZWJ1Z2dpbmcgbWVzc2FnZXMgd2hpbGUgdGhlIG1pc2JlaGF2aW91ciB3YXMgb2NjdXJyaW5nLlxuICAzNDpcdFxuICAzNTpcdGNvbmZpZyBOVEZTX0ZTX1BPU0lYX0FDTFxuICAzNjpcdFx0Ym9vbCBcJiMzNDtOVEZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4gIDM3Olx0XHRkZXBlbmRzIG9uIE5URlNfRlNcbiAgMzg6XHRcdHNlbGVjdCBGU19QT1NJWF9BQ0xcbiAgMzk6XHRcdGhlbHBcbiAgNDA6XHRcdCAgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMgKEFDTHMpIHN1cHBvcnQgYWRkaXRpb25hbCBhY2Nlc3MgcmlnaHRzXG4gIDQxOlx0XHQgIGZvciB1c2VycyBhbmQgZ3JvdXBzIGJleW9uZCB0aGUgc3RhbmRhcmQgb3duZXIvZ3JvdXAvd29ybGQgc2NoZW1lLlxuICA0MjpcdFxuICA0MzpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIEFDTCBzdXBwb3J0IGZvciBudGZzLCBwcm92aWRpbmcgZnVuY3Rpb25hbCBwYXJpdHlcbiAgNDQ6XHRcdCAgd2l0aCBudGZzMyBkcml2aWVyLlxuICA0NTpcdFxuICA0NjpcdFx0ICBOT1RFOiB0aGlzIGlzIGxpbnV4IG9ubHkgZmVhdHVyZS4gV2luZG93cyB3aWxsIGlnbm9yZSB0aGVzZSBBQ0xzLlxuICA0NzpcdFxuICA0ODpcdFx0ICBJZiB5b3UgZG9uJiMzOTt0IGtub3cgd2hhdCBBY2Nlc3MgQ29udHJvbCBMaXN0cyBhcmUsIHNheSBOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODQzMwoJCQkJCQkJb3V0cHV0OiAyNTIKCQkJCQkJCXRob3VnaHRzOiA4MjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOVEZTIFdyaXRlIFN1cHBvcnQgYW5kIEF0dHJpYnV0ZSBMb2NraW5nIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtXaGVyZSYjMzk7cyB0aGUgYENPTkZJR19OVEZTX1JXYCBmbGFnPyBEaWQgdGhleSBnZXQgcmlkIG9mIGl0LCBvciBpcyBpdCBhbHdheXMgZW5hYmxlZCBub3c/JiMzNDsgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB3cml0ZSBzdXBwb3J0IGlzIHN0aWxsIHByZXNlbnQuIEEgcXVpY2sgc2NhbiBvZiBgZnMvbnRmcy9gIHdpbGwgbGlrZWx5IHJldmVhbCB0aGUgcmVsZXZhbnQgd3JpdGUtcmVsYXRlZCBmdW5jdGlvbnMuIEFoLCB5ZXMsIHRoZXJlIGFyZSBtb2RpZmljYXRpb25zIHRvIGBudGZzX3dyaXRlX2lub2RlYCwgYG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlyc2AsIGBudGZzX2F0dHJfbWFrZV9ub25fcmVzaWRlbnRgLCBhbmQgc28gb24uIEdvb2QsIHdyaXRlIHN1cHBvcnQgaXMgZGVmaW5pdGVseSBwcmVzZW50LgoKTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgYENPTkZJR19OVEZTX0ZTYCBpcyBlbmFibGVkLCBhbmQgbWF5YmUgYENPTkZJR19OVEZTX0RFQlVHYCBqdXN0IGluIGNhc2UuCgpBbHJpZ2h0LCB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGNlbnRlciBhcm91bmQgdGhlIG5ldyBsb2NraW5nIG1lY2hhbmlzbXMuIEkgc2VlIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYG50ZnNfYXR0cl9saXN0X2xvY2tgLCBgbnRmc19hdHRyX2xpc3RfdW5sb2NrYCwgYG50ZnNfYXR0cl9sb2NrX3NlYXJjaF9jdHhgLCBhbmQgYG50ZnNfYXR0cl91bmxvY2tfc2VhcmNoX2N0eGAuIFRoaXMgaXMgYSBjbGVhciBpbmRpY2F0b3IgdGhhdCBhdHRyaWJ1dGUgbGlzdCBhY2Nlc3MgaXMgYmVjb21pbmcgbW9yZSB0aWdodGx5IGNvbnRyb2xsZWQuCgpJIG5lZWQgdG8gZm9jdXMgb24gdGhpcyBuZXcgbG9ja2luZyBzY2hlbWUuIFRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGltcGxpY2F0aW9ucywgSSYjMzk7bGwgbGlzdCBzb21lIG9mIHRoZSBpbXBhY3RlZCBmdW5jdGlvbnM6IGBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHhgLCBgbnRmc19hdHRyX3B1dF9zZWFyY2hfY3R4YCwgYG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdGAsIGBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNgLCBgbnRmc19pbm9kZV9hdHRhY2hfYWxsX2V4dGVudHNgLCBgbnRmc19pbm9kZV9hZGRfYXR0cmxpc3RgLCBhbmQgYG50ZnNfaW5vZGVfZnJlZV9zcGFjZWAsIGFtb25nIG90aGVycy4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgYW5kIHZlcmlmeSB0aGF0IGl0IGRvZXNuJiMzOTt0IGJyZWFrIG90aGVyIGZlYXR1cmVzLCBhcyB3ZWxsIGFzIHRlc3QgaWYgdGhlIGltcGxlbWVudGF0aW9uIGl0c2VsZiBpcyByb2J1c3QuCgpMZXQmIzM5O3MgcGljayBhIGZldyBvZiB0aGUgbW9yZSBjcml0aWNhbCBvbmVzIGZvciBmdXJ0aGVyIGluc3BlY3Rpb246IGBudGZzX2F0dHJfbGlzdF9sb2NrYCwgYG50ZnNfYXR0cl9saXN0X3VubG9ja2AsIGBudGZzX2F0dHJfbG9ja19zZWFyY2hfY3R4YCwgYG50ZnNfYXR0cl91bmxvY2tfc2VhcmNoX2N0eGAsIGBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHhgLCBgbnRmc19hdHRyX3B1dF9zZWFyY2hfY3R4YCwgYG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdGAsIGBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNgLCBgbnRmc19pbm9kZV9hZGRfYXR0cmxpc3RgLCBhbmQgYG50ZnNfaW5vZGVfZnJlZV9zcGFjZWAuCgpGb3IgY29uZmlndXJhdGlvbiwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBOVEZTX0ZTYCBpcyBzZXQuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGludHJvZHVjaW5nIGEgcmVhZC13cml0ZSBzZW1hcGhvcmUsIGBhdHRyX2xpc3RfbG9ja2AsIHRvIGBzdHJ1Y3QgbnRmc19pbm9kZWAuIFRoaXMgc2VtYXBob3JlIGlzIHVzZWQgdG8gc2VyaWFsaXplIGF0dHJpYnV0ZSBsaXN0IHBvaW50ZXIgdXBkYXRlcyBhbmQgbG9va3VwcyBhY3Jvc3MgdGhlIE5URlMgZHJpdmVyLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgYXJjaGl0ZWN0dXJhbCBjaGFuZ2UgdG8gaG93IE5URlMgaGFuZGxlcyBsb2NraW5nLCBhZmZlY3RpbmcgY29yZSBvcGVyYXRpb25zIGxpa2UgYXR0cmlidXRlIGxvb2t1cCwgbWFwcGluZyB1cGRhdGVzLCBhbmQgZXh0ZW50IGF0dGFjaG1lbnQuIFRoaXMgbWVhbnMgaXQgaXMgdmVyeSBpbXBvcnRhbnQgdG8gZG8gcmlnb3JvdXMgZnV6emluZyB0byBsb29rIGZvciBkZWFkbG9ja3Mgb3IgcmFjZSBjb25kaXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGRldmVsb3Agc3BlY2lmaWMgZnV6emluZyB0YXJnZXRzIGFpbWVkIGF0IGV4ZXJjaXNpbmcgdGhlc2UgbmV3IGxvY2tpbmcgcHJpbWl0aXZlcyB1bmRlciBjb25jdXJyZW50IHdvcmtsb2Fkcy4gVGhpcyBjaGFuZ2UgbmVlZHMgdG8gYmUgdmFsaWRhdGVkIHZlcnkgdGhvcm91Z2hseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGZzX2F0dHJfbGlzdF9sb2NrJiMzNDssCiAgICAmIzM0O250ZnNfYXR0cl9saXN0X3VubG9jayYjMzQ7LAogICAgJiMzNDtudGZzX2F0dHJfbG9ja19zZWFyY2hfY3R4JiMzNDssCiAgICAmIzM0O250ZnNfYXR0cl91bmxvY2tfc2VhcmNoX2N0eCYjMzQ7LAogICAgJiMzNDtudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgmIzM0OywKICAgICYjMzQ7bnRmc19hdHRyX3B1dF9zZWFyY2hfY3R4JiMzNDssCiAgICAmIzM0O250ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdCYjMzQ7LAogICAgJiMzNDtudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMmIzM0OywKICAgICYjMzQ7bnRmc19pbm9kZV9hZGRfYXR0cmxpc3QmIzM0OywKICAgICYjMzQ7bnRmc19pbm9kZV9mcmVlX3NwYWNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgcmVhZC13cml0ZSBzZW1hcGhvcmUgKGBhdHRyX2xpc3RfbG9ja2ApIHRvIGBzdHJ1Y3QgbnRmc19pbm9kZWAgYW5kIHVzZXMgaXQgdG8gc2VyaWFsaXplIGF0dHJpYnV0ZSBsaXN0IHBvaW50ZXIgdXBkYXRlcyB3aXRoIGxvb2t1cHMgYWNyb3NzIHRoZSBOVEZTIGRyaXZlci4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBsb2NraW5nIHNjaGVtZSBvZiB0aGUgTlRGUyBmaWxlc3lzdGVtLCBhZmZlY3RpbmcgbWFueSBjb3JlIG9wZXJhdGlvbnMgbGlrZSBhdHRyaWJ1dGUgbG9va3VwLCBtYXBwaW5nIHBhaXJzIHVwZGF0ZXMsIGFuZCBleHRlbnQgYXR0YWNobWVudC4gRnV6emluZyBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBuZXcgbG9ja2luZyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgZGVhZGxvY2tzIG9yIHJhY2UgY29uZGl0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlRGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O250ZnNfYXR0cl9saXN0X2xvY2smIzM0OywKICAgICYjMzQ7bnRmc19hdHRyX2xpc3RfdW5sb2NrJiMzNDssCiAgICAmIzM0O250ZnNfYXR0cl9sb2NrX3NlYXJjaF9jdHgmIzM0OywKICAgICYjMzQ7bnRmc19hdHRyX3VubG9ja19zZWFyY2hfY3R4JiMzNDssCiAgICAmIzM0O250ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eCYjMzQ7LAogICAgJiMzNDtudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgmIzM0OywKICAgICYjMzQ7bnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0JiMzNDssCiAgICAmIzM0O250ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyYjMzQ7LAogICAgJiMzNDtudGZzX2lub2RlX2FkZF9hdHRybGlzdCYjMzQ7LAogICAgJiMzNDtudGZzX2lub2RlX2ZyZWVfc3BhY2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyByZWFkLXdyaXRlIHNlbWFwaG9yZSAoYGF0dHJfbGlzdF9sb2NrYCkgdG8gYHN0cnVjdCBudGZzX2lub2RlYCBhbmQgdXNlcyBpdCB0byBzZXJpYWxpemUgYXR0cmlidXRlIGxpc3QgcG9pbnRlciB1cGRhdGVzIHdpdGggbG9va3VwcyBhY3Jvc3MgdGhlIE5URlMgZHJpdmVyLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGxvY2tpbmcgc2NoZW1lIG9mIHRoZSBOVEZTIGZpbGVzeXN0ZW0sIGFmZmVjdGluZyBtYW55IGNvcmUgb3BlcmF0aW9ucyBsaWtlIGF0dHJpYnV0ZSBsb29rdXAsIG1hcHBpbmcgcGFpcnMgdXBkYXRlcywgYW5kIGV4dGVudCBhdHRhY2htZW50LiBGdXp6aW5nIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIG5ldyBsb2NraW5nIGRvZXNuJiMzOTt0IGludHJvZHVjZSBkZWFkbG9ja3Mgb3IgcmFjZSBjb25kaXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTU6NTAuNTk3NzkyNjA1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMyMTQ3Nzk3NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlRGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm50ZnNfYXR0cl9saXN0X2xvY2tcIixcbiAgICBcIm50ZnNfYXR0cl9saXN0X3VubG9ja1wiLFxuICAgIFwibnRmc19hdHRyX2xvY2tfc2VhcmNoX2N0eFwiLFxuICAgIFwibnRmc19hdHRyX3VubG9ja19zZWFyY2hfY3R4XCIsXG4gICAgXCJudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHhcIixcbiAgICBcIm50ZnNfYXR0cl9wdXRfc2VhcmNoX2N0eFwiLFxuICAgIFwibnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0XCIsXG4gICAgXCJudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNcIixcbiAgICBcIm50ZnNfaW5vZGVfYWRkX2F0dHJsaXN0XCIsXG4gICAgXCJudGZzX2lub2RlX2ZyZWVfc3BhY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHJlYWQtd3JpdGUgc2VtYXBob3JlIChgYXR0cl9saXN0X2xvY2tgKSB0byBgc3RydWN0IG50ZnNfaW5vZGVgIGFuZCB1c2VzIGl0IHRvIHNlcmlhbGl6ZSBhdHRyaWJ1dGUgbGlzdCBwb2ludGVyIHVwZGF0ZXMgd2l0aCBsb29rdXBzIGFjcm9zcyB0aGUgTlRGUyBkcml2ZXIuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgbG9ja2luZyBzY2hlbWUgb2YgdGhlIE5URlMgZmlsZXN5c3RlbSwgYWZmZWN0aW5nIG1hbnkgY29yZSBvcGVyYXRpb25zIGxpa2UgYXR0cmlidXRlIGxvb2t1cCwgbWFwcGluZyBwYWlycyB1cGRhdGVzLCBhbmQgZXh0ZW50IGF0dGFjaG1lbnQuIEZ1enppbmcgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgbmV3IGxvY2tpbmcgZG9lc24ndCBpbnRyb2R1Y2UgZGVhZGxvY2tzIG9yIHJhY2UgY29uZGl0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTU6NTAuNTk3Nzk4Mjc1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTM0MTQ3NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwNzMzMDdkMTg3ZjkyNjgxYjIxNWU5YTQ2NDI0Mzc1NzExMDdkOGMzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDIgMTg6MTU6NDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9hb3BzLmMgYi9mcy9udGZzL2FvcHMuY1xcbmluZGV4IDFmYmY4MzJhZDE2NTQwLi45ODE3NzdmZjI0Mjc5NyAxMDA2NDRcXG4tLS0gYS9mcy9udGZzL2FvcHMuY1xcbisrKyBiL2ZzL250ZnMvYW9wcy5jXFxuQEAgLTEzMSw2ICsxMzEsNyBAQCBzdGF0aWMgc2VjdG9yX3QgbnRmc19ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibG9jaylcXG4gXFx0czY0IGxjbjtcXG4gXFx0dW5zaWduZWQgbG9uZyBibG9ja3NpemUsIGZsYWdzO1xcbiBcXHRzdHJ1Y3QgbnRmc19pbm9kZSAqbmkgPSBOVEZTX0kobWFwcGluZy1cXHUwMDNlaG9zdCk7XFxuK1xcdHN0cnVjdCBudGZzX2lub2RlICphdHRyX2xvY2tfbmk7XFxuIFxcdHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sID0gbmktXFx1MDAzZXZvbDtcXG4gXFx0dW5zaWduZWQgaW50IGRlbHRhO1xcbiBcXHR1bnNpZ25lZCBjaGFyIGJsb2Nrc2l6ZV9iaXRzO1xcbkBAIC0xNjAsMTAgKzE2MSwxMiBAQCBzdGF0aWMgc2VjdG9yX3QgbnRmc19ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibG9jaylcXG4gXFx0ICovXFxuIFxcdGlmICh1bmxpa2VseShvZnMgXFx1MDAzZT0gc2l6ZSB8fCAob2ZzICsgYmxvY2tzaXplIFxcdTAwM2Ugc2l6ZSBcXHUwMDI2XFx1MDAyNiBzaXplIFxcdTAwM2MgaV9zaXplKSkpXFxuIFxcdFxcdGdvdG8gaG9sZTtcXG4rXFx0YXR0cl9sb2NrX25pID0gbnRmc19hdHRyX2xpc3RfbG9jayhuaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xcbiBcXHRkb3duX3JlYWQoXFx1MDAyNm5pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbiBcXHRsY24gPSBudGZzX2F0dHJfdmNuX3RvX2xjbl9ub2xvY2sobmksIG50ZnNfYnl0ZXNfdG9fY2x1c3Rlcih2b2wsIG9mcyksXFxuIFxcdFxcdFxcdGZhbHNlKTtcXG4gXFx0dXBfcmVhZChcXHUwMDI2bmktXFx1MDAzZXJ1bmxpc3QubG9jayk7XFxuK1xcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcXG4gXFx0aWYgKHVubGlrZWx5KGxjbiBcXHUwMDNjIExDTl9IT0xFKSkge1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBTdGVwIGRvd24gdG8gYW4gaW50ZWdlciB0byBhdm9pZCBnY2MgZG9pbmcgYSBsb25nIGxvbmdcXG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9hdHRyaWIuYyBiL2ZzL250ZnMvYXR0cmliLmNcXG5pbmRleCBkZDg4MjgwOTg1MTE4My4uOTA5NmE1NDg2NTM1NTkgMTAwNjQ0XFxuLS0tIGEvZnMvbnRmcy9hdHRyaWIuY1xcbisrKyBiL2ZzL250ZnMvYXR0cmliLmNcXG5AQCAtMTA4LDcgKzEwOCw3IEBAIGludCBudGZzX21hcF9ydW5saXN0X25vbG9jayhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCB2Y24sIHN0cnVjdCBudGZzX2F0dHJfc2VhXFxuIFxcdFxcdG0gPSBtYXBfbWZ0X3JlY29yZChiYXNlX25pKTtcXG4gXFx0XFx0aWYgKElTX0VSUihtKSlcXG4gXFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIobSk7XFxuLVxcdFxcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChiYXNlX25pLCBtKTtcXG4rXFx0XFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KGJhc2VfbmksIG0sIE5URlNfQVRUUl9DVFhfTE9DS19OT05FKTtcXG4gXFx0XFx0aWYgKHVubGlrZWx5KCFjdHgpKSB7XFxuIFxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuIFxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG5AQCAtMzAwLDE0ICszMDAsMTcgQEAgaW50IG50ZnNfbWFwX3J1bmxpc3Rfbm9sb2NrKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IHZjbiwgc3RydWN0IG50ZnNfYXR0cl9zZWFcXG4gICovXFxuIGludCBudGZzX21hcF9ydW5saXN0KHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IHZjbilcXG4ge1xcbitcXHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pO1xcbiBcXHRpbnQgZXJyID0gMDtcXG4gXFxuK1xcdGF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcXG4gXFx0ZG93bl93cml0ZShcXHUwMDI2bmktXFx1MDAzZXJ1bmxpc3QubG9jayk7XFxuIFxcdC8qIE1ha2Ugc3VyZSBzb21lb25lIGVsc2UgZGlkbid0IGRvIHRoZSB3b3JrIHdoaWxlIHdlIHdlcmUgc2xlZXBpbmcuICovXFxuIFxcdGlmIChsaWtlbHkobnRmc19ybF92Y25fdG9fbGNuKG5pLVxcdTAwM2VydW5saXN0LnJsLCB2Y24pIFxcdTAwM2M9XFxuIFxcdFxcdFxcdExDTl9STF9OT1RfTUFQUEVEKSlcXG4gXFx0XFx0ZXJyID0gbnRmc19tYXBfcnVubGlzdF9ub2xvY2sobmksIHZjbiwgTlVMTCk7XFxuIFxcdHVwX3dyaXRlKFxcdTAwMjZuaS1cXHUwMDNlcnVubGlzdC5sb2NrKTtcXG4rXFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbkBAIC0zMTgsNyArMzIxLDcgQEAgc3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqbnRmc19hdHRyX3Zjbl90b19ybChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCB2Y24sIHM2NFxcbiBcXHRib29sIGlzX3JldHJ5ID0gZmFsc2U7XFxuIFxcbiBcXHRpZiAoIXJsKSB7XFxuLVxcdFxcdGVyciA9IG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdChuaSk7XFxuK1xcdFxcdGVyciA9IG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdF9ub2xvY2sobmkpO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcXG4gXFx0XFx0cmwgPSBuaS1cXHUwMDNlcnVubGlzdC5ybDtcXG5AQCAtMTU3OSw2ICsxNTgyLDkzIEBAIGludCBudGZzX2F0dHJfbG9va3VwKGNvbnN0IF9fbGUzMiB0eXBlLCBjb25zdCBfX2xlMTYgKm5hbWUsXFxuIFxcdFxcdFxcdHZhbCwgdmFsX2xlbiwgY3R4KTtcXG4gfVxcbiBcXG4rc3RhdGljIHN0cnVjdCBudGZzX2lub2RlICpudGZzX2F0dHJfc2VhcmNoX2xvY2tfaW5vZGUoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxcbit7XFxuK1xcdGlmICghbmkpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHRpZiAoTklub0F0dHIobmkpKSB7XFxuK1xcdFxcdGlmIChuaS1cXHUwMDNldHlwZSA9PSBBVF9BVFRSSUJVVEVfTElTVClcXG4rXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdFxcdHJldHVybiBuaS1cXHUwMDNlZXh0LmJhc2VfbnRmc19pbm87XFxuK1xcdH1cXG4rXFx0cmV0dXJuIG5pO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBudGZzX2F0dHJfbGlzdF9hc3NlcnRfaGVsZChzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuK3tcXG4rXFx0c3RydWN0IG50ZnNfaW5vZGUgKmxvY2tfbmkgPSBudGZzX2F0dHJfc2VhcmNoX2xvY2tfaW5vZGUobmkpO1xcbitcXG4rXFx0aWYgKGxvY2tfbmkpXFxuK1xcdFxcdHJ3c2VtX2Fzc2VydF9oZWxkKFxcdTAwMjZsb2NrX25pLVxcdTAwM2VhdHRyX2xpc3RfbG9jayk7XFxuK31cXG4rXFxuK3N0cnVjdCBudGZzX2lub2RlICpudGZzX2F0dHJfbGlzdF9sb2NrKHN0cnVjdCBudGZzX2lub2RlICpuaSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGVudW0gbnRmc19hdHRyX3NlYXJjaF9jdHhfbG9ja19tb2RlIGxvY2tfbW9kZSlcXG4re1xcbitcXHRzdHJ1Y3QgbnRmc19pbm9kZSAqbG9ja19uaTtcXG4rXFxuK1xcdGlmIChsb2NrX21vZGUgPT0gTlRGU19BVFRSX0NUWF9MT0NLX05PTkUpIHtcXG4rXFx0XFx0bnRmc19hdHRyX2xpc3RfYXNzZXJ0X2hlbGQobmkpO1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbitcXG4rXFx0bG9ja19uaSA9IG50ZnNfYXR0cl9zZWFyY2hfbG9ja19pbm9kZShuaSk7XFxuK1xcdGlmICghbG9ja19uaSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRpZiAobG9ja19tb2RlID09IE5URlNfQVRUUl9DVFhfTE9DS19XUklURSlcXG4rXFx0XFx0ZG93bl93cml0ZShcXHUwMDI2bG9ja19uaS1cXHUwMDNlYXR0cl9saXN0X2xvY2spO1xcbitcXHRlbHNlXFxuK1xcdFxcdGRvd25fcmVhZChcXHUwMDI2bG9ja19uaS1cXHUwMDNlYXR0cl9saXN0X2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIGxvY2tfbmk7XFxuK31cXG4rXFxuK3ZvaWQgbnRmc19hdHRyX2xpc3RfdW5sb2NrKHN0cnVjdCBudGZzX2lub2RlICpsb2NrX25pLFxcbitcXHRcXHRcXHQgICBlbnVtIG50ZnNfYXR0cl9zZWFyY2hfY3R4X2xvY2tfbW9kZSBsb2NrX21vZGUpXFxuK3tcXG4rXFx0aWYgKCFsb2NrX25pIHx8IGxvY2tfbW9kZSA9PSBOVEZTX0FUVFJfQ1RYX0xPQ0tfTk9ORSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKGxvY2tfbW9kZSA9PSBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpXFxuK1xcdFxcdHVwX3dyaXRlKFxcdTAwMjZsb2NrX25pLVxcdTAwM2VhdHRyX2xpc3RfbG9jayk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0dXBfcmVhZChcXHUwMDI2bG9ja19uaS1cXHUwMDNlYXR0cl9saXN0X2xvY2spO1xcbit9XFxuK1xcbit2b2lkIG50ZnNfYXR0cl9sb2NrX3NlYXJjaF9jdHgoc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXFxuK1xcdFxcdFxcdCAgICAgICBlbnVtIG50ZnNfYXR0cl9zZWFyY2hfY3R4X2xvY2tfbW9kZSBsb2NrX21vZGUpXFxuK3tcXG4rXFx0c3RydWN0IG50ZnNfaW5vZGUgKmxvY2tfbmk7XFxuK1xcbitcXHRjdHgtXFx1MDAzZWF0dHJfbGlzdF9sb2NrX25pID0gTlVMTDtcXG4rXFx0Y3R4LVxcdTAwM2VhdHRyX2xpc3RfbG9ja19tb2RlID0gTlRGU19BVFRSX0NUWF9MT0NLX05PTkU7XFxuK1xcbitcXHRpZiAobG9ja19tb2RlID09IE5URlNfQVRUUl9DVFhfTE9DS19OT05FKSB7XFxuK1xcdFxcdG50ZnNfYXR0cl9saXN0X2Fzc2VydF9oZWxkKG5pKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRsb2NrX25pID0gbnRmc19hdHRyX2xpc3RfbG9jayhuaSwgbG9ja19tb2RlKTtcXG4rXFx0aWYgKCFsb2NrX25pKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRjdHgtXFx1MDAzZWF0dHJfbGlzdF9sb2NrX25pID0gbG9ja19uaTtcXG4rXFx0Y3R4LVxcdTAwM2VhdHRyX2xpc3RfbG9ja19tb2RlID0gbG9ja19tb2RlO1xcbit9XFxuK1xcbit2b2lkIG50ZnNfYXR0cl91bmxvY2tfc2VhcmNoX2N0eChzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eClcXG4re1xcbitcXHRpZiAoIWN0eC1cXHUwMDNlYXR0cl9saXN0X2xvY2tfbmkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdG50ZnNfYXR0cl9saXN0X3VubG9jayhjdHgtXFx1MDAzZWF0dHJfbGlzdF9sb2NrX25pLCBjdHgtXFx1MDAzZWF0dHJfbGlzdF9sb2NrX21vZGUpO1xcbitcXG4rXFx0Y3R4LVxcdTAwM2VhdHRyX2xpc3RfbG9ja19uaSA9IE5VTEw7XFxuK1xcdGN0eC1cXHUwMDNlYXR0cl9saXN0X2xvY2tfbW9kZSA9IE5URlNfQVRUUl9DVFhfTE9DS19OT05FO1xcbit9XFxuK1xcbiAvKipcXG4gICogbnRmc19hdHRyX2luaXRfc2VhcmNoX2N0eCAtIGluaXRpYWxpemUgYW4gYXR0cmlidXRlIHNlYXJjaCBjb250ZXh0XFxuICAqIEBjdHg6ICAgICAgICBhdHRyaWJ1dGUgc2VhcmNoIGNvbnRleHQgdG8gaW5pdGlhbGl6ZVxcbkBAIC0xNjA5LDYgKzE2OTksOCBAQCBzdGF0aWMgYm9vbCBudGZzX2F0dHJfaW5pdF9zZWFyY2hfY3R4KHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4LFxcbiBcXHRjdHgtXFx1MDAzZWJhc2VfbXJlYyA9IE5VTEw7XFxuIFxcdGN0eC1cXHUwMDNlYmFzZV9hdHRyID0gTlVMTDtcXG4gXFx0Y3R4LVxcdTAwM2VtYXBwZWRfYmFzZV9tcmVjID0gZmFsc2U7XFxuK1xcdGN0eC1cXHUwMDNlYXR0cl9saXN0X2xvY2tfbmkgPSBOVUxMO1xcbitcXHRjdHgtXFx1MDAzZWF0dHJfbGlzdF9sb2NrX21vZGUgPSBOVEZTX0FUVFJfQ1RYX0xPQ0tfTk9ORTtcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuQEAgLTE2MjQsNiArMTcxNiw5IEBAIHN0YXRpYyBib29sIG50ZnNfYXR0cl9pbml0X3NlYXJjaF9jdHgoc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgsXFxuICAqL1xcbiB2b2lkIG50ZnNfYXR0cl9yZWluaXRfc2VhcmNoX2N0eChzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eClcXG4ge1xcbitcXHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9saXN0X2xvY2tfbmkgPSBjdHgtXFx1MDAzZWF0dHJfbGlzdF9sb2NrX25pO1xcbitcXHRlbnVtIG50ZnNfYXR0cl9zZWFyY2hfY3R4X2xvY2tfbW9kZSBhdHRyX2xpc3RfbG9ja19tb2RlID1cXG4rXFx0XFx0Y3R4LVxcdTAwM2VhdHRyX2xpc3RfbG9ja19tb2RlO1xcbiBcXHRib29sIG1hcHBlZF9tcmVjO1xcbiBcXG4gXFx0aWYgKGxpa2VseSghY3R4LVxcdTAwM2ViYXNlX250ZnNfaW5vKSkge1xcbkBAIC0xNjQ1LDYgKzE3NDAsOCBAQCB2b2lkIG50ZnNfYXR0cl9yZWluaXRfc2VhcmNoX2N0eChzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eClcXG4gXFx0bWFwcGVkX21yZWMgPSBjdHgtXFx1MDAzZW1hcHBlZF9iYXNlX21yZWM7XFxuIFxcdG50ZnNfYXR0cl9pbml0X3NlYXJjaF9jdHgoY3R4LCBjdHgtXFx1MDAzZWJhc2VfbnRmc19pbm8sIGN0eC1cXHUwMDNlYmFzZV9tcmVjKTtcXG4gXFx0Y3R4LVxcdTAwM2VtYXBwZWRfbXJlYyA9IG1hcHBlZF9tcmVjO1xcbitcXHRjdHgtXFx1MDAzZWF0dHJfbGlzdF9sb2NrX25pID0gYXR0cl9saXN0X2xvY2tfbmk7XFxuK1xcdGN0eC1cXHUwMDNlYXR0cl9saXN0X2xvY2tfbW9kZSA9IGF0dHJfbGlzdF9sb2NrX21vZGU7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTE2NTYsNyArMTc1Myw4IEBAIHZvaWQgbnRmc19hdHRyX3JlaW5pdF9zZWFyY2hfY3R4KHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4KVxcbiAgKiBhbmQgcmV0dXJuIGl0LiBSZXR1cm4gTlVMTCBpZiBhbGxvY2F0aW9uIGZhaWxlZC5cXG4gICovXFxuIHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KHN0cnVjdCBudGZzX2lub2RlICpuaSxcXG4tXFx0XFx0c3RydWN0IG1mdF9yZWNvcmQgKm1yZWMpXFxuK1xcdFxcdHN0cnVjdCBtZnRfcmVjb3JkICptcmVjLFxcbitcXHRcXHRlbnVtIG50ZnNfYXR0cl9zZWFyY2hfY3R4X2xvY2tfbW9kZSBsb2NrX21vZGUpXFxuIHtcXG4gXFx0c3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHg7XFxuIFxcdGJvb2wgaW5pdDtcXG5AQCAtMTY2Nyw2ICsxNzY1LDggQEAgc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxcbiBcXHRcXHRpZiAoaW5pdCA9PSBmYWxzZSkge1xcbiBcXHRcXHRcXHRrbWVtX2NhY2hlX2ZyZWUobnRmc19hdHRyX2N0eF9jYWNoZSwgY3R4KTtcXG4gXFx0XFx0XFx0Y3R4ID0gTlVMTDtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0bnRmc19hdHRyX2xvY2tfc2VhcmNoX2N0eChjdHgsIG5pLCBsb2NrX21vZGUpO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuQEAgLTE2ODIsNiArMTc4Miw4IEBAIHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KHN0cnVjdCBudGZzX2lub2RlICpuaSxcXG4gICovXFxuIHZvaWQgbnRmc19hdHRyX3B1dF9zZWFyY2hfY3R4KHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4KVxcbiB7XFxuK1xcdG50ZnNfYXR0cl91bmxvY2tfc2VhcmNoX2N0eChjdHgpO1xcbitcXG4gXFx0aWYgKGN0eC1cXHUwMDNlbWFwcGVkX21yZWMpXFxuIFxcdFxcdHVubWFwX21mdF9yZWNvcmQoY3R4LVxcdTAwM2VudGZzX2lubyk7XFxuIFxcbkBAIC0xOTA1LDcgKzIwMDcsOCBAQCBpbnQgbnRmc19yZXNpZGVudF9hdHRyX3ZhbHVlX3Jlc2l6ZShzdHJ1Y3QgbWZ0X3JlY29yZCAqbSwgc3RydWN0IGF0dHJfcmVjb3JkICphLFxcbiAgKiBpbm9kZSBpX3NpemUgaXMgdGhhdCB0aGlzIGlzIG5vdCBuZWNlc3NhcmlseSB1cHRvZGF0ZS4gIFRoaXMgaGFwcGVucyB3aGVuXFxuICAqIG50ZnNfYXR0cl9tYWtlX25vbl9yZXNpZGVudCgpIGlzIGNhbGxlZCBpbiB0aGUgLVxcdTAwM2V0cnVuY2F0ZSBjYWxsIHBhdGgocykuXFxuICAqL1xcbi1pbnQgbnRmc19hdHRyX21ha2Vfbm9uX3Jlc2lkZW50KHN0cnVjdCBudGZzX2lub2RlICpuaSwgY29uc3QgdTMyIGRhdGFfc2l6ZSlcXG4rc3RhdGljIGludCBfX250ZnNfYXR0cl9tYWtlX25vbl9yZXNpZGVudChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHUzMiBkYXRhX3NpemUsXFxuK1xcdFxcdFxcdFxcdFxcdCBlbnVtIG50ZnNfYXR0cl9zZWFyY2hfY3R4X2xvY2tfbW9kZSBsb2NrX21vZGUpXFxuIHtcXG4gXFx0czY0IG5ld19zaXplO1xcbiBcXHRzdHJ1Y3QgaW5vZGUgKnZpID0gVkZTX0kobmkpO1xcbkBAIC0xOTUxLDcgKzIwNTQsNyBAQCBpbnQgbnRmc19hdHRyX21ha2Vfbm9uX3Jlc2lkZW50KHN0cnVjdCBudGZzX2lub2RlICpuaSwgY29uc3QgdTMyIGRhdGFfc2l6ZSlcXG4gXFx0XFx0Y3R4ID0gTlVMTDtcXG4gXFx0XFx0Z290byBlcnJfb3V0O1xcbiBcXHR9XFxuLVxcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChiYXNlX25pLCBtKTtcXG4rXFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KGJhc2VfbmksIG0sIGxvY2tfbW9kZSk7XFxuIFxcdGlmICh1bmxpa2VseSghY3R4KSkge1xcbiBcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiBcXHRcXHRnb3RvIGVycl9vdXQ7XFxuQEAgLTIyMjUsNiArMjMyOCwxMiBAQCBpbnQgbnRmc19hdHRyX21ha2Vfbm9uX3Jlc2lkZW50KHN0cnVjdCBudGZzX2lub2RlICpuaSwgY29uc3QgdTMyIGRhdGFfc2l6ZSlcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4raW50IG50ZnNfYXR0cl9tYWtlX25vbl9yZXNpZGVudChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGNvbnN0IHUzMiBkYXRhX3NpemUpXFxuK3tcXG4rXFx0cmV0dXJuIF9fbnRmc19hdHRyX21ha2Vfbm9uX3Jlc2lkZW50KG5pLCBkYXRhX3NpemUsXFxuK1xcdFxcdFxcdE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcXG4rfVxcbitcXG4gLypcXG4gICogbnRmc19hdHRyX3NldCAtIGZpbGwgKGEgcGFydCBvZikgYW4gYXR0cmlidXRlIHdpdGggYSBieXRlXFxuICAqIEBuaTpcXHRcXHRudGZzIGlub2RlIGRlc2NyaWJpbmcgdGhlIGF0dHJpYnV0ZSB0byBmaWxsXFxuQEAgLTIyOTAsNyArMjM5OSw3IEBAIGludCBudGZzX2F0dHJfc2V0X2luaXRpYWxpemVkX3NpemUoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBsb2ZmX3QgbmV3X3NpemUpXFxuIFxcdGlmICghTklub05vblJlc2lkZW50KG5pKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwpO1xcbitcXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcXG4gXFx0aWYgKCFjdHgpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5AQCAtMjM5MCw3ICsyNDk5LDcgQEAgaW50IG50ZnNfcmVzaWRlbnRfYXR0cl9yZWNvcmRfYWRkKHN0cnVjdCBudGZzX2lub2RlICpuaSwgX19sZTMyIHR5cGUsXFxuIFxcdH1cXG4gXFxuIFxcdC8qIExvY2F0ZSBwbGFjZSB3aGVyZSByZWNvcmQgc2hvdWxkIGJlLiAqL1xcbi1cXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwpO1xcbitcXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19OT05FKTtcXG4gXFx0aWYgKCFjdHgpIHtcXG4gXFx0XFx0bnRmc19lcnJvcihuaS1cXHUwMDNldm9sLVxcdTAwM2VzYiwgXFxcIiVzOiBGYWlsZWQgdG8gZ2V0IHNlYXJjaCBjb250ZXh0XFxcIixcXG4gXFx0XFx0XFx0XFx0X19mdW5jX18pO1xcbkBAIC0yNTEyLDcgKzI2MjEsNyBAQCBzdGF0aWMgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfcmVjb3JkX2FkZChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIF9fbGUzMiB0eXBlLFxcbiBcXHR9XFxuIFxcbiBcXHQvKiBMb2NhdGUgcGxhY2Ugd2hlcmUgcmVjb3JkIHNob3VsZCBiZS4gKi9cXG4tXFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTtcXG4rXFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfTk9ORSk7XFxuIFxcdGlmICghY3R4KSB7XFxuIFxcdFxcdHByX2VycihcXFwiJXM6IEZhaWxlZCB0byBnZXQgc2VhcmNoIGNvbnRleHRcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuQEAgLTI2MjIsNiArMjczMSw3IEBAIHN0YXRpYyBpbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9yZWNvcmRfYWRkKHN0cnVjdCBudGZzX2lub2RlICpuaSwgX19sZTMyIHR5cGUsXFxuIGludCBudGZzX2F0dHJfcmVjb3JkX3JtKHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4KVxcbiB7XFxuIFxcdHN0cnVjdCBudGZzX2lub2RlICpiYXNlX25pLCAqbmk7XFxuK1xcdHU4ICpvbGRfYWwgPSBOVUxMO1xcbiBcXHRfX2xlMzIgdHlwZTtcXG4gXFx0aW50IGVycjtcXG4gXFxuQEAgLTI2NjAsOSArMjc3MCwxMSBAQCBpbnQgbnRmc19hdHRyX3JlY29yZF9ybShzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eClcXG4gXFx0LyogUG9zdCAkQVRUUklCVVRFX0xJU1QgZGVsZXRlIHNldHVwLiAqL1xcbiBcXHRpZiAodHlwZSA9PSBBVF9BVFRSSUJVVEVfTElTVCkge1xcbiBcXHRcXHRpZiAoTklub0F0dHJMaXN0KGJhc2VfbmkpIFxcdTAwMjZcXHUwMDI2IGJhc2VfbmktXFx1MDAzZWF0dHJfbGlzdClcXG4tXFx0XFx0XFx0a3ZmcmVlKGJhc2VfbmktXFx1MDAzZWF0dHJfbGlzdCk7XFxuK1xcdFxcdFxcdG9sZF9hbCA9IGJhc2VfbmktXFx1MDAzZWF0dHJfbGlzdDtcXG4gXFx0XFx0YmFzZV9uaS1cXHUwMDNlYXR0cl9saXN0ID0gTlVMTDtcXG4rXFx0XFx0YmFzZV9uaS1cXHUwMDNlYXR0cl9saXN0X3NpemUgPSAwO1xcbiBcXHRcXHROSW5vQ2xlYXJBdHRyTGlzdChiYXNlX25pKTtcXG4rXFx0XFx0a3ZmcmVlKG9sZF9hbCk7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIEZyZWUgTUZUIHJlY29yZCwgaWYgaXQgZG9lc24ndCBjb250YWluIGF0dHJpYnV0ZXMuICovXFxuQEAgLTMwODcsNyArMzE5OSw3IEBAIGludCBudGZzX2F0dHJfb3BlbihzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGNvbnN0IF9fbGUzMiB0eXBlLFxcbiBcXHRcXHRuZXduYW1lID0gbmFtZTtcXG4gXFx0fVxcbiBcXG4tXFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KGJhc2VfbmksIE5VTEwpO1xcbitcXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoYmFzZV9uaSwgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xcbiBcXHRpZiAoIWN0eCkge1xcbiBcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiBcXHRcXHRwcl9lcnIoXFxcIiVzOiBGYWlsZWQgdG8gZ2V0IHNlYXJjaCBjb250ZXh0XFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuQEAgLTMyMzksNyArMzM1MSw3IEBAIHZvaWQgbnRmc19hdHRyX2Nsb3NlKHN0cnVjdCBudGZzX2lub2RlICpuaSlcXG4gICogd2lsbCBtYXAgdGhlIHJ1bmxpc3QgZnJhZ21lbnRzIGZyb20gZWFjaCBvZiB0aGUgZXh0ZW50cyB0aHVzIGdpdmluZyBhY2Nlc3NcXG4gICogdG8gdGhlIGVudGlyZXR5IG9mIHRoZSBkaXNrIGFsbG9jYXRpb24gb2YgYW4gYXR0cmlidXRlLlxcbiAgKi9cXG4taW50IG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdChzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuK2ludCBudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3Rfbm9sb2NrKHN0cnVjdCBudGZzX2lub2RlICpuaSlcXG4ge1xcbiBcXHRzNjQgbmV4dF92Y24sIGxhc3RfdmNuLCBoaWdoZXN0X3ZjbjtcXG4gXFx0c3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHg7XFxuQEAgLTMyNjIsNyArMzM3NCw3IEBAIGludCBudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3Qoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxcbiBcXHRlbHNlXFxuIFxcdFxcdGJhc2VfbmkgPSBuaTtcXG4gXFxuLVxcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChiYXNlX25pLCBOVUxMKTtcXG4rXFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KGJhc2VfbmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19OT05FKTtcXG4gXFx0aWYgKCFjdHgpIHtcXG4gXFx0XFx0bnRmc19lcnJvcihzYiwgXFxcIiVzOiBGYWlsZWQgdG8gZ2V0IHNlYXJjaCBjb250ZXh0XFxcIiwgX19mdW5jX18pO1xcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5AQCAtMzM1NCw2ICszNDY2LDE4IEBAIGludCBudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3Qoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbitpbnQgbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0KHN0cnVjdCBudGZzX2lub2RlICpuaSlcXG4re1xcbitcXHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0YXR0cl9sb2NrX25pID0gbnRmc19hdHRyX2xpc3RfbG9jayhuaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xcbitcXHRlcnIgPSBudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3Rfbm9sb2NrKG5pKTtcXG4rXFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4gLypcXG4gICogbnRmc19hdHRyX3JlY29yZF9tb3ZlX3RvIC0gbW92ZSBhdHRyaWJ1dGUgcmVjb3JkIHRvIHRhcmdldCBpbm9kZVxcbiAgKiBAY3R4OlxcdGF0dHJpYnV0ZSBzZWFyY2ggY29udGV4dCBkZXNjcmliaW5nIHRoZSBhdHRyaWJ1dGUgcmVjb3JkXFxuQEAgLTMzODgsNyArMzUxMiw3IEBAIGludCBudGZzX2F0dHJfcmVjb3JkX21vdmVfdG8oc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgsIHN0cnVjdCBudGZzX2lub2RlXFxuIFxcbiBcXHQvKiBGaW5kIHBsYWNlIGluIE1GVCByZWNvcmQgd2hlcmUgYXR0cmlidXRlIHdpbGwgYmUgbW92ZWQuICovXFxuIFxcdGEgPSBjdHgtXFx1MDAzZWF0dHI7XFxuLVxcdG5jdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwpO1xcbitcXHRuY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfTk9ORSk7XFxuIFxcdGlmICghbmN0eCkge1xcbiBcXHRcXHRudGZzX2Vycm9yKHNiLCBcXFwiJXM6IEZhaWxlZCB0byBnZXQgc2VhcmNoIGNvbnRleHRcXFwiLCBfX2Z1bmNfXyk7XFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbkBAIC0zNDc1LDcgKzM1OTksNyBAQCBpbnQgbnRmc19hdHRyX3JlY29yZF9tb3ZlX2F3YXkoc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgsIGludCBleHRyYSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuLVxcdGVyciA9IG50ZnNfaW5vZGVfYXR0YWNoX2FsbF9leHRlbnRzKGN0eC1cXHUwMDNlbnRmc19pbm8pO1xcbitcXHRlcnIgPSBudGZzX2lub2RlX2F0dGFjaF9hbGxfZXh0ZW50c19ub2xvY2soY3R4LVxcdTAwM2VudGZzX2lubyk7XFxuIFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0bnRmc19lcnJvcihzYiwgXFxcIkNvdWxkbid0IGF0dGFjaCBleHRlbnRzLCBpbm9kZT0lbGx1XFxcIixcXG4gXFx0XFx0XFx0KHVuc2lnbmVkIGxvbmcgbG9uZyliYXNlX25pLVxcdTAwM2VtZnRfbm8pO1xcbkBAIC0zNTc0LDkgKzM2OTgsOCBAQCBzdGF0aWMgaW50IG50ZnNfYXR0cl91cGRhdGVfbWV0YShzdHJ1Y3QgYXR0cl9yZWNvcmQgKmEsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcXG4gXFx0XFx0aWYgKChsZTMyX3RvX2NwdShhLVxcdTAwM2VsZW5ndGgpIC1cXG4gXFx0XFx0ICAgICBsZTE2X3RvX2NwdShhLVxcdTAwM2VkYXRhLm5vbl9yZXNpZGVudC5tYXBwaW5nX3BhaXJzX29mZnNldCkgPT0gOCkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICEobGUzMl90b19jcHUobS1cXHUwMDNlYnl0ZXNfYWxsb2NhdGVkKSAtIGxlMzJfdG9fY3B1KG0tXFx1MDAzZWJ5dGVzX2luX3VzZSkpKSB7XFxuLVxcbiBcXHRcXHRcXHRpZiAoIU5Jbm9BdHRyTGlzdChiYXNlX25pKSkge1xcbi1cXHRcXHRcXHRcXHRlcnIgPSBudGZzX2lub2RlX2FkZF9hdHRybGlzdChiYXNlX25pKTtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gbnRmc19pbm9kZV9hZGRfYXR0cmxpc3Rfbm9sb2NrKGJhc2VfbmkpO1xcbiBcXHRcXHRcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0XFx0XFx0ZXJyID0gLUVBR0FJTjtcXG5AQCAtMzY3Nyw3ICszODAwLDcgQEAgc3RhdGljIGludCBudGZzX2F0dHJfdXBkYXRlX21ldGEoc3RydWN0IGF0dHJfcmVjb3JkICphLCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXFxuICAqIGNhbGwgdG8gdGhpcyBmdW5jdGlvbi4gVmljZS12ZXJzYSBAbmEtXFx1MDAzZWNvbXByZXNzZWRfc2l6ZSB3aWxsIGJlIGNhbGN1bGF0ZWQgYW5kXFxuICAqIHNldCB0byBjb3JyZWN0IHZhbHVlIGR1cmluZyB0aGlzIGZ1bmN0aW9uLlxcbiAgKi9cXG4taW50IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBmcm9tX3ZjbilcXG4rc3RhdGljIGludCBfX250ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBmcm9tX3ZjbilcXG4ge1xcbiBcXHRzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eDtcXG4gXFx0c3RydWN0IG50ZnNfaW5vZGUgKmJhc2Vfbmk7XFxuQEAgLTM3MDksNyArMzgzMiw3IEBAIGludCBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgZnJvbV92Y24pXFxuIFxcdGVsc2VcXG4gXFx0XFx0YmFzZV9uaSA9IG5pO1xcbiBcXG4tXFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KGJhc2VfbmksIE5VTEwpO1xcbitcXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoYmFzZV9uaSwgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX05PTkUpO1xcbiBcXHRpZiAoIWN0eCkge1xcbiBcXHRcXHRudGZzX2Vycm9yKHNiLCBcXFwiJXM6IEZhaWxlZCB0byBnZXQgc2VhcmNoIGNvbnRleHRcXFwiLCBfX2Z1bmNfXyk7XFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbkBAIC0zODA5LDggKzM5MzIsOCBAQCBpbnQgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IGZyb21fdmNuKVxcbiBcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0aWYgKG5pLVxcdTAwM2V0eXBlID09IEFUX0FUVFJJQlVURV9MSVNUKSB7XFxuIFxcdFxcdFxcdFxcdG50ZnNfYXR0cl9wdXRfc2VhcmNoX2N0eChjdHgpO1xcbi1cXHRcXHRcXHRcXHRpZiAobnRmc19pbm9kZV9mcmVlX3NwYWNlKGJhc2VfbmksIG1wX3NpemUgLVxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRjdXJfbWF4X21wX3NpemUpKSB7XFxuK1xcdFxcdFxcdFxcdGlmIChudGZzX2lub2RlX2ZyZWVfc3BhY2Vfbm9sb2NrKGJhc2VfbmksIG1wX3NpemUgLVxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRjdXJfbWF4X21wX3NpemUpKSB7XFxuIFxcdFxcdFxcdFxcdFxcdG50ZnNfZGVidWcoXFxcIkF0dHJpYnV0ZSBsaXN0IGlzIHRvbyBiaWcuIERlZnJhZ21lbnQgdGhlIHZvbHVtZVxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdFxcdFxcdHJldHVybiAtRU5PU1BDO1xcbiBcXHRcXHRcXHRcXHR9XFxuQEAgLTM4MjIsNyArMzk0NSw3IEBAIGludCBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgZnJvbV92Y24pXFxuIFxcdFxcdFxcdC8qIEFkZCBhdHRyaWJ1dGUgbGlzdCBpZiBpdCBpc24ndCBwcmVzZW50LCBhbmQgcmV0cnkuICovXFxuIFxcdFxcdFxcdGlmICghTklub0F0dHJMaXN0KGJhc2VfbmkpKSB7XFxuIFxcdFxcdFxcdFxcdG50ZnNfYXR0cl9wdXRfc2VhcmNoX2N0eChjdHgpO1xcbi1cXHRcXHRcXHRcXHRpZiAobnRmc19pbm9kZV9hZGRfYXR0cmxpc3QoYmFzZV9uaSkpIHtcXG4rXFx0XFx0XFx0XFx0aWYgKG50ZnNfaW5vZGVfYWRkX2F0dHJsaXN0X25vbG9jayhiYXNlX25pKSkge1xcbiBcXHRcXHRcXHRcXHRcXHRudGZzX2Vycm9yKHNiLCBcXFwiQ2FuIG5vdCBhZGQgYXR0cmxpc3RcXFwiKTtcXG4gXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcdFxcdFxcdFxcdH1cXG5AQCAtNDAyNiw2ICs0MTQ5LDIzIEBAIGludCBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgZnJvbV92Y24pXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuK2ludCBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgZnJvbV92Y24pXFxuK3tcXG4rXFx0c3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XFxuK1xcdGVyciA9IF9fbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG5pLCBmcm9tX3Zjbik7XFxuK1xcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitpbnQgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzX25vbG9jayhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBmcm9tX3ZjbilcXG4re1xcbitcXHRyZXR1cm4gX19udGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIGZyb21fdmNuKTtcXG4rfVxcbitcXG4gLypcXG4gICogbnRmc19hdHRyX21ha2VfcmVzaWRlbnQgLSBjb252ZXJ0IGEgbm9uLXJlc2lkZW50IHRvIGEgcmVzaWRlbnQgYXR0cmlidXRlXFxuICAqIEBuaTpcXHRcXHRvcGVuIG50ZnMgYXR0cmlidXRlIHRvIG1ha2UgcmVzaWRlbnRcXG5AQCAtNDA4Myw3ICs0MjIzLDcgQEAgc3RhdGljIGludCBudGZzX2F0dHJfbWFrZV9yZXNpZGVudChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHN0cnVjdCBudGZzX2F0dHJfc2VhcmNcXG4gXFx0fVxcbiBcXG4gXFx0LyogUmVhZCBhbmQgY2FjaGUgdGhlIHdob2xlIHJ1bmxpc3QgaWYgbm90IGFscmVhZHkgZG9uZS4gKi9cXG4tXFx0ZXJyID0gbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0KG5pKTtcXG4rXFx0ZXJyID0gbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0X25vbG9jayhuaSk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbkBAIC00MjIwLDcgKzQzNjAsNyBAQCBzdGF0aWMgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfc2hyaW5rKHN0cnVjdCBudGZzX2lub2RlICpuaSwgY29uc3QgczY0IG5ld3NpelxcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwpO1xcbitcXHRcXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcXG4gXFx0XFx0aWYgKCFjdHgpIHtcXG4gXFx0XFx0XFx0bnRmc19lcnJvcih2b2wtXFx1MDAzZXNiLCBcXFwiJXM6IEZhaWxlZCB0byBnZXQgc2VhcmNoIGNvbnRleHRcXFwiLCBfX2Z1bmNfXyk7XFxuIFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbkBAIC00MjY4LDcgKzQ0MDgsNyBAQCBzdGF0aWMgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfc2hyaW5rKHN0cnVjdCBudGZzX2lub2RlICpuaSwgY29uc3QgczY0IG5ld3NpelxcbiBcXHR9XFxuIFxcbiBcXHQvKiBHZXQgdGhlIGZpcnN0IGF0dHJpYnV0ZSByZWNvcmQuICovXFxuLVxcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChiYXNlX25pLCBOVUxMKTtcXG4rXFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KGJhc2VfbmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcXG4gXFx0aWYgKCFjdHgpIHtcXG4gXFx0XFx0bnRmc19lcnJvcih2b2wtXFx1MDAzZXNiLCBcXFwiJXM6IEZhaWxlZCB0byBnZXQgc2VhcmNoIGNvbnRleHRcXFwiLCBfX2Z1bmNfXyk7XFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbkBAIC00MzgwLDcgKzQ1MjAsOCBAQCBzdGF0aWMgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfZXhwYW5kKHN0cnVjdCBudGZzX2lub2RlICpuaSwgY29uc3QgczY0IG5ld3NpelxcbiBcXHQgKiBjbHVzdGVycyBpZiB0aGVyZSBpcyBhIGNoYW5nZS5cXG4gXFx0ICovXFxuIFxcdGlmIChudGZzX2J5dGVzX3RvX2NsdXN0ZXIodm9sLCBuaS1cXHUwMDNlYWxsb2NhdGVkX3NpemUpIFxcdTAwM2MgZmlyc3RfZnJlZV92Y24pIHtcXG4tXFx0XFx0ZXJyID0gbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0KG5pKTtcXG4rXFx0XFx0ZXJyID0gbmVlZF9sb2NrID8gbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0KG5pKSA6XFxuK1xcdFxcdFxcdFxcdG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdF9ub2xvY2sobmkpO1xcbiBcXHRcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdFxcdG50ZnNfZXJyb3Ioc2IsIFxcXCJudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3QgZmFpbGVkXFxcIik7XFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuQEAgLTQ0OTksMTQgKzQ2NDAsMTUgQEAgc3RhdGljIGludCBudGZzX25vbl9yZXNpZGVudF9hdHRyX2V4cGFuZChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGNvbnN0IHM2NCBuZXdzaXpcXG4gXFxuIFxcdFxcdC8qIFByZXBhcmUgdG8gbWFwcGluZyBwYWlycyB1cGRhdGUuICovXFxuIFxcdFxcdG5pLVxcdTAwM2VhbGxvY2F0ZWRfc2l6ZSA9IG50ZnNfY2x1c3Rlcl90b19ieXRlcyh2b2wsIGZpcnN0X2ZyZWVfdmNuKTtcXG4tXFx0XFx0ZXJyID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG5pLCAwKTtcXG4rXFx0XFx0ZXJyID0gbmVlZF9sb2NrID8gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG5pLCAwKSA6XFxuK1xcdFxcdFxcdFxcdG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlyc19ub2xvY2sobmksIDApO1xcbiBcXHRcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdFxcdG50ZnNfZGVidWcoXFxcIk1hcHBpbmcgcGFpcnMgdXBkYXRlIGZhaWxlZFxcXCIpO1xcbiBcXHRcXHRcXHRnb3RvIHJvbGxiYWNrO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChiYXNlX25pLCBOVUxMKTtcXG4rXFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KGJhc2VfbmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcXG4gXFx0aWYgKCFjdHgpIHtcXG4gXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gXFx0XFx0aWYgKG5pLVxcdTAwM2VhbGxvY2F0ZWRfc2l6ZSA9PSBvcmdfYWxsb2Nfc2l6ZSlcXG5AQCAtNDU1NywxNiArNDY5OSwyMiBAQCBzdGF0aWMgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfZXhwYW5kKHN0cnVjdCBudGZzX2lub2RlICpuaSwgY29uc3QgczY0IG5ld3NpelxcbiBcXHRcXHRrdmZyZWUobmktXFx1MDAzZXJ1bmxpc3QucmwpO1xcbiBcXHRcXHRuaS1cXHUwMDNlcnVubGlzdC5ybCA9IE5VTEw7XFxuIFxcdFxcdG50ZnNfZXJyb3Ioc2IsIFxcXCJDb3VsZG4ndCB0cnVuY2F0ZSBydW5saXN0LiBSb2xsYmFjayBmYWlsZWRcXFwiKTtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0LyogUHJlcGFyZSB0byBtYXBwaW5nIHBhaXJzIHVwZGF0ZS4gKi9cXG4tXFx0XFx0bmktXFx1MDAzZWFsbG9jYXRlZF9zaXplID0gb3JnX2FsbG9jX3NpemU7XFxuLVxcdFxcdC8qIFJlc3RvcmUgbWFwcGluZyBwYWlycy4gKi9cXG4tXFx0XFx0aWYgKG5lZWRfbG9jaylcXG4tXFx0XFx0XFx0ZG93bl9yZWFkKFxcdTAwMjZuaS1cXHUwMDNlcnVubGlzdC5sb2NrKTtcXG4tXFx0XFx0aWYgKG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhuaSwgMCkpXFxuLVxcdFxcdFxcdG50ZnNfZXJyb3Ioc2IsIFxcXCJGYWlsZWQgdG8gcmVzdG9yZSBvbGQgbWFwcGluZyBwYWlyc1xcXCIpO1xcbi1cXHRcXHRpZiAobmVlZF9sb2NrKVxcbi1cXHRcXHRcXHR1cF9yZWFkKFxcdTAwMjZuaS1cXHUwMDNlcnVubGlzdC5sb2NrKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0LyogUHJlcGFyZSB0byBtYXBwaW5nIHBhaXJzIHVwZGF0ZS4gKi9cXG4rXFx0XFx0XFx0bmktXFx1MDAzZWFsbG9jYXRlZF9zaXplID0gb3JnX2FsbG9jX3NpemU7XFxuK1xcdFxcdFxcdC8qIFJlc3RvcmUgbWFwcGluZyBwYWlycy4gKi9cXG4rXFx0XFx0XFx0aWYgKG5lZWRfbG9jaykge1xcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pO1xcbitcXG4rXFx0XFx0XFx0XFx0YXR0cl9sb2NrX25pID0gbnRmc19hdHRyX2xpc3RfbG9jayhuaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcXG4rXFx0XFx0XFx0XFx0ZG93bl9yZWFkKFxcdTAwMjZuaS1cXHUwMDNlcnVubGlzdC5sb2NrKTtcXG4rXFx0XFx0XFx0XFx0aWYgKG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlyc19ub2xvY2sobmksIDApKVxcbitcXHRcXHRcXHRcXHRcXHRudGZzX2Vycm9yKHNiLCBcXFwiRmFpbGVkIHRvIHJlc3RvcmUgb2xkIG1hcHBpbmcgcGFpcnNcXFwiKTtcXG4rXFx0XFx0XFx0XFx0dXBfcmVhZChcXHUwMDI2bmktXFx1MDAzZXJ1bmxpc3QubG9jayk7XFxuK1xcdFxcdFxcdFxcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XFxuK1xcdFxcdFxcdH0gZWxzZSBpZiAobnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzX25vbG9jayhuaSwgMCkpIHtcXG4rXFx0XFx0XFx0XFx0bnRmc19lcnJvcihzYiwgXFxcIkZhaWxlZCB0byByZXN0b3JlIG9sZCBtYXBwaW5nIHBhaXJzXFxcIik7XFxuK1xcdFxcdFxcdH1cXG4gXFxuIFxcdFxcdGlmIChOSW5vU3BhcnNlKG5pKSB8fCBOSW5vQ29tcHJlc3NlZChuaSkpIHtcXG4gXFx0XFx0XFx0bmktXFx1MDAzZWl0eXBlLmNvbXByZXNzZWQuc2l6ZSA9ICBvcmdfY29tcHJlc3NlZF9zaXplO1xcbkBAIC00NjAwLDYgKzQ3NDgsNyBAQCBzdGF0aWMgaW50IG50ZnNfcmVzaWRlbnRfYXR0cl9yZXNpemUoc3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbmksIGNvbnN0IHM2NCBuZXdzaVxcbiBcXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gdm9sLVxcdTAwM2VzYjtcXG4gXFx0aW50IGVyciA9IC1FSU87XFxuIFxcdHN0cnVjdCBudGZzX2lub2RlICpiYXNlX25pLCAqZXh0X25pID0gTlVMTDtcXG4rXFx0dTMyIHJlc2lkZW50X3ZhbHVlX2xlbjtcXG4gXFxuIGF0dHJfcmVzaXplX2FnYWluOlxcbiBcXHRudGZzX2RlYnVnKFxcXCJJbm9kZSAweCVsbHggYXR0ciAweCV4IG5ldyBzaXplICVsbGRcXFxcblxcXCIsXFxuQEAgLTQ2MTIsNyArNDc2MSw3IEBAIHN0YXRpYyBpbnQgbnRmc19yZXNpZGVudF9hdHRyX3Jlc2l6ZShzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9uaSwgY29uc3QgczY0IG5ld3NpXFxuIFxcdFxcdGJhc2VfbmkgPSBhdHRyX25pO1xcbiBcXG4gXFx0LyogR2V0IHRoZSBhdHRyaWJ1dGUgcmVjb3JkIHRoYXQgbmVlZHMgbW9kaWZpY2F0aW9uLiAqL1xcbi1cXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoYmFzZV9uaSwgTlVMTCk7XFxuK1xcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChiYXNlX25pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XFxuIFxcdGlmICghY3R4KSB7XFxuIFxcdFxcdG50ZnNfZXJyb3Ioc2IsIFxcXCIlczogRmFpbGVkIHRvIGdldCBzZWFyY2ggY29udGV4dFxcXCIsIF9fZnVuY19fKTtcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuQEAgLTQ2NjQsOCArNDgxMyw5IEBAIHN0YXRpYyBpbnQgbnRmc19yZXNpZGVudF9hdHRyX3Jlc2l6ZShzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9uaSwgY29uc3QgczY0IG5ld3NpXFxuIFxcdC8qIFRoZXJlIGlzIG5vdCBlbm91Z2ggc3BhY2UgaW4gdGhlIG1mdCByZWNvcmQgdG8gcGVyZm9ybSB0aGUgcmVzaXplLiAqL1xcbiBcXG4gXFx0LyogTWFrZSB0aGUgYXR0cmlidXRlIG5vbi1yZXNpZGVudCBpZiBwb3NzaWJsZS4gKi9cXG4tXFx0ZXJyID0gbnRmc19hdHRyX21ha2Vfbm9uX3Jlc2lkZW50KGF0dHJfbmksXFxuLVxcdFxcdFxcdGxlMzJfdG9fY3B1KGN0eC1cXHUwMDNlYXR0ci1cXHUwMDNlZGF0YS5yZXNpZGVudC52YWx1ZV9sZW5ndGgpKTtcXG4rXFx0cmVzaWRlbnRfdmFsdWVfbGVuID0gbGUzMl90b19jcHUoY3R4LVxcdTAwM2VhdHRyLVxcdTAwM2VkYXRhLnJlc2lkZW50LnZhbHVlX2xlbmd0aCk7XFxuK1xcdGVyciA9IF9fbnRmc19hdHRyX21ha2Vfbm9uX3Jlc2lkZW50KGF0dHJfbmksIHJlc2lkZW50X3ZhbHVlX2xlbixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIE5URlNfQVRUUl9DVFhfTE9DS19OT05FKTtcXG4gXFx0aWYgKCFlcnIpIHtcXG4gXFx0XFx0bWFya19tZnRfcmVjb3JkX2RpcnR5KGN0eC1cXHUwMDNlbnRmc19pbm8pO1xcbiBcXHRcXHRudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoY3R4KTtcXG5AQCAtNDcxMiw3ICs0ODYyLDggQEAgc3RhdGljIGludCBudGZzX3Jlc2lkZW50X2F0dHJfcmVzaXplKHN0cnVjdCBudGZzX2lub2RlICphdHRyX25pLCBjb25zdCBzNjQgbmV3c2lcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGlmIChudGZzX2F0dHJfbWFrZV9ub25fcmVzaWRlbnQoTlRGU19JKHR2aSksIHZhbHVlX2xlbikpIHtcXG4rXFx0XFx0aWYgKF9fbnRmc19hdHRyX21ha2Vfbm9uX3Jlc2lkZW50KE5URlNfSSh0dmkpLCB2YWx1ZV9sZW4sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgTlRGU19BVFRSX0NUWF9MT0NLX05PTkUpKSB7XFxuIFxcdFxcdFxcdGlwdXQodHZpKTtcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG5AQCAtNDg0NCwxMiArNDk5NSwxNiBAQCBpbnQgX19udGZzX2F0dHJfdHJ1bmNhdGVfdmZzKHN0cnVjdCBudGZzX2lub2RlICpuaSwgY29uc3QgczY0IG5ld3NpemUsXFxuIFxcbiBcXHRpZiAoTklub05vblJlc2lkZW50KG5pKSkge1xcbiBcXHRcXHRpZiAobmV3c2l6ZSBcXHUwMDNlIGlfc2l6ZSkge1xcbitcXHRcXHRcXHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pO1xcbitcXG4rXFx0XFx0XFx0YXR0cl9sb2NrX25pID0gbnRmc19hdHRyX2xpc3RfbG9jayhuaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcXG4gXFx0XFx0XFx0ZG93bl93cml0ZShcXHUwMDI2bmktXFx1MDAzZXJ1bmxpc3QubG9jayk7XFxuIFxcdFxcdFxcdGVyciA9IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfZXhwYW5kKG5pLCBuZXdzaXplLCAwLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgTlZvbERpc2FibGVTcGFyc2UobmktXFx1MDAzZXZvbCkgP1xcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgSE9MRVNfTk8gOiBIT0xFU19PSyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGZhbHNlKTtcXG4gXFx0XFx0XFx0dXBfd3JpdGUoXFx1MDAyNm5pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbitcXHRcXHRcXHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xcbiBcXHRcXHR9IGVsc2VcXG4gXFx0XFx0XFx0ZXJyID0gbnRmc19ub25fcmVzaWRlbnRfYXR0cl9zaHJpbmsobmksIG5ld3NpemUpO1xcbiBcXHR9IGVsc2VcXG5AQCAtNDk3OSwxNCArNTEzNCwxNyBAQCBpbnQgbnRmc19hdHRyX21hcF9jbHVzdGVyKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IHZjbl9zdGFydCwgczY0ICpsY25fc3RhcnQsXFxuIFxcdGludCBlcnIgPSAwO1xcbiBcXHRzaXplX3QgbmV3X3JsX2NvdW50O1xcbiBcXG4tXFx0ZXJyID0gbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0KG5pKTtcXG4rXFx0ZXJyID0gbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0X25vbG9jayhuaSk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbi1cXHRpZiAoTklub0F0dHIobmkpKVxcbi1cXHRcXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmktXFx1MDAzZWV4dC5iYXNlX250ZnNfaW5vLCBOVUxMKTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwpO1xcbitcXHRpZiAoTklub0F0dHIobmkpKSB7XFxuK1xcdFxcdHN0cnVjdCBudGZzX2lub2RlICpiYXNlX25pID0gbmktXFx1MDAzZWV4dC5iYXNlX250ZnNfaW5vO1xcbitcXG4rXFx0XFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KGJhc2VfbmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19OT05FKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfTk9ORSk7XFxuK1xcdH1cXG4gXFx0aWYgKCFjdHgpIHtcXG4gXFx0XFx0bnRmc19lcnJvcih2b2wtXFx1MDAzZXNiLCBcXFwiJXM6IEZhaWxlZCB0byBnZXQgc2VhcmNoIGNvbnRleHRcXFwiLCBfX2Z1bmNfXyk7XFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbkBAIC01MDkzLDcgKzUyNTEsNyBAQCBpbnQgbnRmc19hdHRyX21hcF9jbHVzdGVyKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IHZjbl9zdGFydCwgczY0ICpsY25fc3RhcnQsXFxuIFxcbiBcXHRpZiAodXBkYXRlX21wKSB7XFxuIFxcdFxcdG50ZnNfYXR0cl9yZWluaXRfc2VhcmNoX2N0eChjdHgpO1xcbi1cXHRcXHRlcnIgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIDApO1xcbitcXHRcXHRlcnIgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNfbm9sb2NrKG5pLCAwKTtcXG4gXFx0XFx0aWYgKGVycikge1xcbiBcXHRcXHRcXHRpbnQgZXJyMjtcXG4gXFxuQEAgLTUxNDYsNyArNTMwNCw3IEBAIGludCBudGZzX2F0dHJfcm0oc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxcbiBcXHRcXHRlcnIgPSBudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3QobmkpO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbi1cXHRcXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwpO1xcbitcXHRcXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcXG4gXFx0XFx0aWYgKCFjdHgpIHtcXG4gXFx0XFx0XFx0bnRmc19lcnJvcihzYiwgXFxcIiVzOiBGYWlsZWQgdG8gZ2V0IHNlYXJjaCBjb250ZXh0XFxcIiwgX19mdW5jX18pO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5AQCAtNTE2MCw3ICs1MzE4LDcgQEAgaW50IG50ZnNfYXR0cl9ybShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuIFxcdH1cXG4gXFxuIFxcdC8qIFNlYXJjaCBmb3IgYXR0cmlidXRlIGV4dGVudHMgYW5kIHJlbW92ZSB0aGVtIGFsbC4gKi9cXG4tXFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KGJhc2VfbmksIE5VTEwpO1xcbitcXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoYmFzZV9uaSwgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcXG4gXFx0aWYgKCFjdHgpIHtcXG4gXFx0XFx0bnRmc19lcnJvcihzYiwgXFxcIiVzOiBGYWlsZWQgdG8gZ2V0IHNlYXJjaCBjb250ZXh0XFxcIiwgX19mdW5jX18pO1xcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5AQCAtNTE5Miw3ICs1MzUwLDcgQEAgaW50IG50ZnNfYXR0cl9leGlzdChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGNvbnN0IF9fbGUzMiB0eXBlLCBfX2xlMTYgKm5hbWUsXFxuIFxcbiBcXHRudGZzX2RlYnVnKFxcXCJFbnRlcmluZ1xcXFxuXFxcIik7XFxuIFxcbi1cXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwpO1xcbitcXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcXG4gXFx0aWYgKCFjdHgpIHtcXG4gXFx0XFx0bnRmc19lcnJvcihuaS1cXHUwMDNldm9sLVxcdTAwM2VzYiwgXFxcIiVzOiBGYWlsZWQgdG8gZ2V0IHNlYXJjaCBjb250ZXh0XFxcIixcXG4gXFx0XFx0XFx0XFx0X19mdW5jX18pO1xcbkBAIC01MzAxLDYgKzU0NTksNyBAQCB2b2lkICpudGZzX2F0dHJfcmVhZGFsbChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGNvbnN0IF9fbGUzMiB0eXBlLFxcbiBpbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9pbnNlcnRfcmFuZ2Uoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgc3RhcnRfdmNuLCBzNjQgbGVuKVxcbiB7XFxuIFxcdHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sID0gbmktXFx1MDAzZXZvbDtcXG4rXFx0c3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTtcXG4gXFx0c3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqaG9sZV9ybCwgKnJsO1xcbiBcXHRzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eDtcXG4gXFx0aW50IHJldDtcXG5AQCAtNTMyMSwxNiArNTQ4MCwxOSBAQCBpbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9pbnNlcnRfcmFuZ2Uoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgc3RhcnRfdmNuLCBzNlxcbiBcXHRob2xlX3JsWzFdLmxjbiA9IExDTl9FTk9FTlQ7XFxuIFxcdGhvbGVfcmxbMV0ubGVuZ3RoID0gMDtcXG4gXFxuK1xcdGF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XFxuIFxcdGRvd25fd3JpdGUoXFx1MDAyNm5pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbi1cXHRyZXQgPSBudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3QobmkpO1xcbitcXHRyZXQgPSBudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3Rfbm9sb2NrKG5pKTtcXG4gXFx0aWYgKHJldCkge1xcbiBcXHRcXHR1cF93cml0ZShcXHUwMDI2bmktXFx1MDAzZXJ1bmxpc3QubG9jayk7XFxuK1xcdFxcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdH1cXG4gXFxuIFxcdHJsID0gbnRmc19ybF9maW5kX3Zjbl9ub2xvY2sobmktXFx1MDAzZXJ1bmxpc3QucmwsIHN0YXJ0X3Zjbik7XFxuIFxcdGlmICghcmwpIHtcXG4gXFx0XFx0dXBfd3JpdGUoXFx1MDAyNm5pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbitcXHRcXHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xcbiBcXHRcXHRrZnJlZShob2xlX3JsKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcdH1cXG5AQCAtNTMzOSw2ICs1NTAxLDcgQEAgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfaW5zZXJ0X3JhbmdlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IHN0YXJ0X3ZjbiwgczZcXG4gXFx0XFx0XFx0XFx0ICBob2xlX3JsLCAxLCBcXHUwMDI2bmV3X3JsX2NvdW50KTtcXG4gXFx0aWYgKElTX0VSUihybCkpIHtcXG4gXFx0XFx0dXBfd3JpdGUoXFx1MDAyNm5pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbitcXHRcXHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xcbiBcXHRcXHRrZnJlZShob2xlX3JsKTtcXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIocmwpO1xcbiBcXHR9XFxuQEAgLTUzNDksMTIgKzU1MTIsMTMgQEAgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfaW5zZXJ0X3JhbmdlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IHN0YXJ0X3ZjbiwgczZcXG4gXFx0bmktXFx1MDAzZWRhdGFfc2l6ZSArPSBudGZzX2NsdXN0ZXJfdG9fYnl0ZXModm9sLCBsZW4pO1xcbiBcXHRpZiAobnRmc19jbHVzdGVyX3RvX2J5dGVzKHZvbCwgc3RhcnRfdmNuKSBcXHUwMDNjIG5pLVxcdTAwM2Vpbml0aWFsaXplZF9zaXplKVxcbiBcXHRcXHRuaS1cXHUwMDNlaW5pdGlhbGl6ZWRfc2l6ZSArPSBudGZzX2NsdXN0ZXJfdG9fYnl0ZXModm9sLCBsZW4pO1xcbi1cXHRyZXQgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIDApO1xcbitcXHRyZXQgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNfbm9sb2NrKG5pLCAwKTtcXG4gXFx0dXBfd3JpdGUoXFx1MDAyNm5pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbitcXHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTtcXG4rXFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XFxuIFxcdGlmICghY3R4KSB7XFxuIFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIFxcdFxcdHJldHVybiByZXQ7XFxuQEAgLTUzNzksNiArNTU0Myw3IEBAIGludCBudGZzX25vbl9yZXNpZGVudF9hdHRyX2luc2VydF9yYW5nZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBzdGFydF92Y24sIHM2XFxuIGludCBudGZzX25vbl9yZXNpZGVudF9hdHRyX2NvbGxhcHNlX3JhbmdlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IHN0YXJ0X3ZjbiwgczY0IGxlbilcXG4ge1xcbiBcXHRzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCA9IG5pLVxcdTAwM2V2b2w7XFxuK1xcdHN0cnVjdCBudGZzX2lub2RlICphdHRyX2xvY2tfbmk7XFxuIFxcdHN0cnVjdCBydW5saXN0X2VsZW1lbnQgKnB1bmNoX3JsLCAqcmw7XFxuIFxcdHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4ID0gTlVMTDtcXG4gXFx0czY0IGVuZF92Y247XFxuQEAgLTUzOTMsMTAgKzU1NTgsMTIgQEAgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfY29sbGFwc2VfcmFuZ2Uoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgc3RhcnRfdmNuLFxcbiBcXHRpZiAoc3RhcnRfdmNuIFxcdTAwM2U9IGVuZF92Y24pXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4rXFx0YXR0cl9sb2NrX25pID0gbnRmc19hdHRyX2xpc3RfbG9jayhuaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcXG4gXFx0ZG93bl93cml0ZShcXHUwMDI2bmktXFx1MDAzZXJ1bmxpc3QubG9jayk7XFxuLVxcdHJldCA9IG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdChuaSk7XFxuK1xcdHJldCA9IG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdF9ub2xvY2sobmkpO1xcbiBcXHRpZiAocmV0KSB7XFxuIFxcdFxcdHVwX3dyaXRlKFxcdTAwMjZuaS1cXHUwMDNlcnVubGlzdC5sb2NrKTtcXG4rXFx0XFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG5AQCAtNTQwNiw2ICs1NTczLDcgQEAgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfY29sbGFwc2VfcmFuZ2Uoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgc3RhcnRfdmNuLFxcbiBcXHRybCA9IG50ZnNfcmxfZmluZF92Y25fbm9sb2NrKG5pLVxcdTAwM2VydW5saXN0LnJsLCBzdGFydF92Y24pO1xcbiBcXHRpZiAoIXJsKSB7XFxuIFxcdFxcdHVwX3dyaXRlKFxcdTAwMjZuaS1cXHUwMDNlcnVubGlzdC5sb2NrKTtcXG4rXFx0XFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcdH1cXG4gXFxuQEAgLTU0MTMsNiArNTU4MSw3IEBAIGludCBudGZzX25vbl9yZXNpZGVudF9hdHRyX2NvbGxhcHNlX3JhbmdlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IHN0YXJ0X3ZjbixcXG4gXFx0XFx0XFx0XFx0ICAgIHN0YXJ0X3ZjbiwgbGVuLCBcXHUwMDI2cHVuY2hfcmwsIFxcdTAwMjZuZXdfcmxfY250KTtcXG4gXFx0aWYgKElTX0VSUihybCkpIHtcXG4gXFx0XFx0dXBfd3JpdGUoXFx1MDAyNm5pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbitcXHRcXHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xcbiBcXHRcXHRyZXR1cm4gUFRSX0VSUihybCk7XFxuIFxcdH1cXG4gXFx0bmktXFx1MDAzZXJ1bmxpc3QucmwgPSBybDtcXG5AQCAtNTQzNCwxNSArNTYwMywxNyBAQCBpbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9jb2xsYXBzZV9yYW5nZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBzdGFydF92Y24sXFxuIFxcdH1cXG4gXFxuIFxcdGlmIChuaS1cXHUwMDNlYWxsb2NhdGVkX3NpemUgXFx1MDAzZSAwKSB7XFxuLVxcdFxcdHJldCA9IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhuaSwgMCk7XFxuK1xcdFxcdHJldCA9IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlyc19ub2xvY2sobmksIDApO1xcbiBcXHRcXHRpZiAocmV0KSB7XFxuIFxcdFxcdFxcdHVwX3dyaXRlKFxcdTAwMjZuaS1cXHUwMDNlcnVubGlzdC5sb2NrKTtcXG4rXFx0XFx0XFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcXG4gXFx0XFx0XFx0Z290byBvdXRfcmw7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXHR1cF93cml0ZShcXHUwMDI2bmktXFx1MDAzZXJ1bmxpc3QubG9jayk7XFxuK1xcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XFxuIFxcbi1cXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwpO1xcbitcXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcXG4gXFx0aWYgKCFjdHgpIHtcXG4gXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gXFx0XFx0Z290byBvdXRfcmw7XFxuQEAgLTU0NzQsNiArNTY0NSw3IEBAIGludCBudGZzX25vbl9yZXNpZGVudF9hdHRyX2NvbGxhcHNlX3JhbmdlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IHN0YXJ0X3ZjbixcXG4gaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfcHVuY2hfaG9sZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBzdGFydF92Y24sIHM2NCBsZW4pXFxuIHtcXG4gXFx0c3RydWN0IG50ZnNfdm9sdW1lICp2b2wgPSBuaS1cXHUwMDNldm9sO1xcbitcXHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pO1xcbiBcXHRzdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpwdW5jaF9ybCwgKnJsO1xcbiBcXHRzNjQgZW5kX3ZjbjtcXG4gXFx0aW50IGRzdF9jbnQ7XFxuQEAgLTU0ODcsMTAgKzU2NTksMTIgQEAgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfcHVuY2hfaG9sZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBzdGFydF92Y24sIHM2NFxcbiBcXHRpZiAoc3RhcnRfdmNuIFxcdTAwM2U9IGVuZF92Y24pXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4rXFx0YXR0cl9sb2NrX25pID0gbnRmc19hdHRyX2xpc3RfbG9jayhuaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcXG4gXFx0ZG93bl93cml0ZShcXHUwMDI2bmktXFx1MDAzZXJ1bmxpc3QubG9jayk7XFxuLVxcdHJldCA9IG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdChuaSk7XFxuK1xcdHJldCA9IG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdF9ub2xvY2sobmkpO1xcbiBcXHRpZiAocmV0KSB7XFxuIFxcdFxcdHVwX3dyaXRlKFxcdTAwMjZuaS1cXHUwMDNlcnVubGlzdC5sb2NrKTtcXG4rXFx0XFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG5AQCAtNTUwMCw2ICs1Njc0LDcgQEAgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfcHVuY2hfaG9sZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBzdGFydF92Y24sIHM2NFxcbiBcXHRybCA9IG50ZnNfcmxfZmluZF92Y25fbm9sb2NrKG5pLVxcdTAwM2VydW5saXN0LnJsLCBzdGFydF92Y24pO1xcbiBcXHRpZiAoIXJsKSB7XFxuIFxcdFxcdHVwX3dyaXRlKFxcdTAwMjZuaS1cXHUwMDNlcnVubGlzdC5sb2NrKTtcXG4rXFx0XFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcdH1cXG4gXFxuQEAgLTU1MDcsMTMgKzU2ODIsMTUgQEAgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfcHVuY2hfaG9sZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBzdGFydF92Y24sIHM2NFxcbiBcXHRcXHRcXHRcXHRzdGFydF92Y24sIGxlbiwgXFx1MDAyNnB1bmNoX3JsLCBcXHUwMDI2bmV3X3JsX2NvdW50KTtcXG4gXFx0aWYgKElTX0VSUihybCkpIHtcXG4gXFx0XFx0dXBfd3JpdGUoXFx1MDAyNm5pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbitcXHRcXHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xcbiBcXHRcXHRyZXR1cm4gUFRSX0VSUihybCk7XFxuIFxcdH1cXG4gXFx0bmktXFx1MDAzZXJ1bmxpc3QucmwgPSBybDtcXG4gXFx0bmktXFx1MDAzZXJ1bmxpc3QuY291bnQgPSBuZXdfcmxfY291bnQ7XFxuIFxcbi1cXHRyZXQgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIDApO1xcbitcXHRyZXQgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNfbm9sb2NrKG5pLCAwKTtcXG4gXFx0dXBfd3JpdGUoXFx1MDAyNm5pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbitcXHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xcbiBcXHRpZiAocmV0KSB7XFxuIFxcdFxcdGt2ZnJlZShwdW5jaF9ybCk7XFxuIFxcdFxcdHJldHVybiByZXQ7XFxuQEAgLTU1NDQsOSArNTcyMSwxMyBAQCBpbnQgbnRmc19hdHRyX2ZhbGxvY2F0ZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGxvZmZfdCBzdGFydCwgbG9mZl90IGJ5dGVfbGVuLCBib1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdGlmIChOSW5vTm9uUmVzaWRlbnQobmkpIFxcdTAwMjZcXHUwMDI2ICFOSW5vRnVsbHlNYXBwZWQobmkpKSB7XFxuK1xcdFxcdHN0cnVjdCBudGZzX2lub2RlICphdHRyX2xvY2tfbmk7XFxuK1xcbitcXHRcXHRhdHRyX2xvY2tfbmkgPSBudGZzX2F0dHJfbGlzdF9sb2NrKG5pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XFxuIFxcdFxcdGRvd25fd3JpdGUoXFx1MDAyNm5pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbi1cXHRcXHRlcnIgPSBudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3QobmkpO1xcbitcXHRcXHRlcnIgPSBudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3Rfbm9sb2NrKG5pKTtcXG4gXFx0XFx0dXBfd3JpdGUoXFx1MDAyNm5pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbitcXHRcXHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG5AQCAtNTU1OCw3ICs1NzM5LDcgQEAgaW50IG50ZnNfYXR0cl9mYWxsb2NhdGUoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBieXRlX2xlbiwgYm9cXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIobXJlYyk7XFxuIFxcdH1cXG4gXFxuLVxcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgbXJlYyk7XFxuK1xcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgbXJlYywgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xcbiBcXHRpZiAoIWN0eCkge1xcbiBcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiBcXHRcXHRnb3RvIG91dF91bm1hcDtcXG5AQCAtNTYzMywxMSArNTgxNCwxNSBAQCBpbnQgbnRmc19hdHRyX2ZhbGxvY2F0ZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGxvZmZfdCBzdGFydCwgbG9mZl90IGJ5dGVfbGVuLCBib1xcbiBcXHRcXHRcXHR9XFxuIFxcbiBcXHRcXHRcXHR3aGlsZSAodHJ5X2FsbG9jX2NudCBcXHUwMDNlIDApIHtcXG4rXFx0XFx0XFx0XFx0c3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTtcXG4rXFxuIFxcdFxcdFxcdFxcdG11dGV4X2xvY2tfbmVzdGVkKFxcdTAwMjZuaS1cXHUwMDNlbXJlY19sb2NrLCBOVEZTX0lOT0RFX01VVEVYX05PUk1BTCk7XFxuK1xcdFxcdFxcdFxcdGF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XFxuIFxcdFxcdFxcdFxcdGRvd25fd3JpdGUoXFx1MDAyNm5pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbiBcXHRcXHRcXHRcXHRlcnIgPSBudGZzX2F0dHJfbWFwX2NsdXN0ZXIobmksIHZjbiwgXFx1MDAyNmxjbiwgXFx1MDAyNmFsbG9jX2NudCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHRyeV9hbGxvY19jbnQsIFxcdTAwMjZiYWxsb2MsIGZhbHNlLCBmYWxzZSk7XFxuIFxcdFxcdFxcdFxcdHVwX3dyaXRlKFxcdTAwMjZuaS1cXHUwMDNlcnVubGlzdC5sb2NrKTtcXG4rXFx0XFx0XFx0XFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcXG4gXFx0XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuaS1cXHUwMDNlbXJlY19sb2NrKTtcXG4gXFx0XFx0XFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuQEAgLTU2NjMsMTEgKzU4NDgsMTUgQEAgaW50IG50ZnNfYXR0cl9mYWxsb2NhdGUoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBieXRlX2xlbiwgYm9cXG4gXFx0LyogYWxsb2NhdGUgY2x1c3RlcnMgb3V0c2lkZSBvZiBpbml0aWFsaXplZF9zaXplICovXFxuIFxcdHRyeV9hbGxvY19jbnQgPSB2Y25fZW5kIC0gdmNuO1xcbiBcXHR3aGlsZSAodHJ5X2FsbG9jX2NudCBcXHUwMDNlIDApIHtcXG4rXFx0XFx0c3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTtcXG4rXFxuIFxcdFxcdG11dGV4X2xvY2tfbmVzdGVkKFxcdTAwMjZuaS1cXHUwMDNlbXJlY19sb2NrLCBOVEZTX0lOT0RFX01VVEVYX05PUk1BTCk7XFxuK1xcdFxcdGF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XFxuIFxcdFxcdGRvd25fd3JpdGUoXFx1MDAyNm5pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbiBcXHRcXHRlcnIgPSBudGZzX2F0dHJfbWFwX2NsdXN0ZXIobmksIHZjbiwgXFx1MDAyNmxjbiwgXFx1MDAyNmFsbG9jX2NudCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIHRyeV9hbGxvY19jbnQsIFxcdTAwMjZiYWxsb2MsIGZhbHNlLCBmYWxzZSk7XFxuIFxcdFxcdHVwX3dyaXRlKFxcdTAwMjZuaS1cXHUwMDNlcnVubGlzdC5sb2NrKTtcXG4rXFx0XFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcXG4gXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuaS1cXHUwMDNlbXJlY19sb2NrKTtcXG4gXFx0XFx0aWYgKGVyciB8fCBzaWduYWxfcGVuZGluZyhjdXJyZW50KSlcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuQEAgLTU2NzgsMTQgKzU4NjcsMTggQEAgaW50IG50ZnNfYXR0cl9mYWxsb2NhdGUoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBieXRlX2xlbiwgYm9cXG4gXFx0fVxcbiBcXG4gXFx0aWYgKE5Jbm9SdW5saXN0RGlydHkobmkpKSB7XFxuK1xcdFxcdHN0cnVjdCBudGZzX2lub2RlICphdHRyX2xvY2tfbmk7XFxuK1xcbiBcXHRcXHRtdXRleF9sb2NrX25lc3RlZChcXHUwMDI2bmktXFx1MDAzZW1yZWNfbG9jaywgTlRGU19JTk9ERV9NVVRFWF9OT1JNQUwpO1xcbitcXHRcXHRhdHRyX2xvY2tfbmkgPSBudGZzX2F0dHJfbGlzdF9sb2NrKG5pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xcbiBcXHRcXHRkb3duX3dyaXRlKFxcdTAwMjZuaS1cXHUwMDNlcnVubGlzdC5sb2NrKTtcXG4tXFx0XFx0ZXJyID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG5pLCAwKTtcXG4rXFx0XFx0ZXJyID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzX25vbG9jayhuaSwgMCk7XFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdG50ZnNfZXJyb3IobmktXFx1MDAzZXZvbC1cXHUwMDNlc2IsIFxcXCJVcGRhdGluZyBtYXBwaW5nIHBhaXJzIGZhaWxlZFxcXCIpO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdE5Jbm9DbGVhclJ1bmxpc3REaXJ0eShuaSk7XFxuIFxcdFxcdHVwX3dyaXRlKFxcdTAwMjZuaS1cXHUwMDNlcnVubGlzdC5sb2NrKTtcXG4rXFx0XFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcXG4gXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuaS1cXHUwMDNlbXJlY19sb2NrKTtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gZXJyO1xcbmRpZmYgLS1naXQgYS9mcy9udGZzL2F0dHJpYi5oIGIvZnMvbnRmcy9hdHRyaWIuaFxcbmluZGV4IGUyMjI0ZmJmYWFiZTk1Li42ZjE2NzE5NGFmYjg5OCAxMDA2NDRcXG4tLS0gYS9mcy9udGZzL2F0dHJpYi5oXFxuKysrIGIvZnMvbnRmcy9hdHRyaWIuaFxcbkBAIC0yNiw2ICsyNiw4IEBAIGV4dGVybiBfX2xlMTYgQVRfVU5OQU1FRFtdO1xcbiAgKiBAYmFzZV9udGZzX2lubzogQmFzZSBpbm9kZVxcbiAgKiBAbWFwcGVkX2Jhc2VfbXJlYzogdHJ1ZSBpZiBAYmFzZV9tcmVjIHdhcyBtYXBwZWQgYnkgdGhlIHNlYXJjaFxcbiAgKiBAYmFzZV9hdHRyOiBCYXNlIGF0dHJpYnV0ZSByZWNvcmQgcG9pbnRlclxcbisgKiBAYXR0cl9saXN0X2xvY2tfbmk6IEJhc2UgaW5vZGUgd2hvc2UgYXR0cl9saXN0X2xvY2sgaXMgaGVsZFxcbisgKiBAYXR0cl9saXN0X2xvY2tfbW9kZTogYXR0cl9saXN0X2xvY2sgbW9kZSBoZWxkIGJ5IHRoaXMgY29udGV4dFxcbiAgKlxcbiAgKiBTdHJ1Y3R1cmUgbXVzdCBiZSBpbml0aWFsaXplZCB0byB6ZXJvIGJlZm9yZSB0aGUgZmlyc3QgY2FsbCB0byBvbmUgb2YgdGhlXFxuICAqIGF0dHJpYnV0ZSBzZWFyY2ggZnVuY3Rpb25zLiBJbml0aWFsaXplIEBtcmVjIHRvIHBvaW50IHRvIHRoZSBtZnQgcmVjb3JkIHRvXFxuQEAgLTM5LDYgKzQxLDEyIEBAIGV4dGVybiBfX2xlMTYgQVRfVU5OQU1FRFtdO1xcbiAgKiBhbnkgbW9kaWZpY2F0aW9uIG9mIHRoZSBzZWFyY2ggY29udGV4dCwgdG8gYXV0b21hZ2ljYWxseSBnZXQgdGhlIG5leHRcXG4gICogbWF0Y2hpbmcgYXR0cmlidXRlLlxcbiAgKi9cXG4rZW51bSBudGZzX2F0dHJfc2VhcmNoX2N0eF9sb2NrX21vZGUge1xcbitcXHROVEZTX0FUVFJfQ1RYX0xPQ0tfTk9ORSxcXG4rXFx0TlRGU19BVFRSX0NUWF9MT0NLX1JFQUQsXFxuK1xcdE5URlNfQVRUUl9DVFhfTE9DS19XUklURSxcXG4rfTtcXG4rXFxuIHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCB7XFxuIFxcdHN0cnVjdCBtZnRfcmVjb3JkICptcmVjO1xcbiBcXHRib29sIG1hcHBlZF9tcmVjO1xcbkBAIC01MCw2ICs1OCw4IEBAIHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCB7XFxuIFxcdHN0cnVjdCBtZnRfcmVjb3JkICpiYXNlX21yZWM7XFxuIFxcdGJvb2wgbWFwcGVkX2Jhc2VfbXJlYztcXG4gXFx0c3RydWN0IGF0dHJfcmVjb3JkICpiYXNlX2F0dHI7XFxuK1xcdHN0cnVjdCBudGZzX2lub2RlICphdHRyX2xpc3RfbG9ja19uaTtcXG4rXFx0ZW51bSBudGZzX2F0dHJfc2VhcmNoX2N0eF9sb2NrX21vZGUgYXR0cl9saXN0X2xvY2tfbW9kZTtcXG4gfTtcXG4gXFxuIGVudW0geyAgICAgICAgICAgICAgICAgIC8qIHdheXMgb2YgcHJvY2Vzc2luZyBob2xlcyB3aGVuIGV4cGFuZGluZyAqL1xcbkBAIC02Niw2ICs3Niw3IEBAIHN0cnVjdCBydW5saXN0X2VsZW1lbnQgKm50ZnNfYXR0cl9maW5kX3Zjbl9ub2xvY2soc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxcbiBcXHRcXHRjb25zdCBzNjQgdmNuLCBzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eCk7XFxuIHN0cnVjdCBydW5saXN0X2VsZW1lbnQgKl9fbnRmc19hdHRyX2ZpbmRfdmNuX25vbG9jayhzdHJ1Y3QgcnVubGlzdCAqcnVubGlzdCxcXG4gXFx0XFx0Y29uc3QgczY0IHZjbik7XFxuK2ludCBudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3Rfbm9sb2NrKHN0cnVjdCBudGZzX2lub2RlICpuaSk7XFxuIGludCBudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3Qoc3RydWN0IG50ZnNfaW5vZGUgKm5pKTtcXG4gaW50IG50ZnNfYXR0cl9sb29rdXAoY29uc3QgX19sZTMyIHR5cGUsIGNvbnN0IF9fbGUxNiAqbmFtZSxcXG4gXFx0XFx0Y29uc3QgdTMyIG5hbWVfbGVuLCBjb25zdCB1MzIgaWMsXFxuQEAgLTg3LDcgKzk4LDE2IEBAIHN0YXRpYyBpbmxpbmUgczY0IG50ZnNfYXR0cl9zaXplKGNvbnN0IHN0cnVjdCBhdHRyX3JlY29yZCAqYSlcXG4gXFxuIHZvaWQgbnRmc19hdHRyX3JlaW5pdF9zZWFyY2hfY3R4KHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4KTtcXG4gc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxcbi1cXHRcXHRzdHJ1Y3QgbWZ0X3JlY29yZCAqbXJlYyk7XFxuK1xcdFxcdHN0cnVjdCBtZnRfcmVjb3JkICptcmVjLFxcbitcXHRcXHRlbnVtIG50ZnNfYXR0cl9zZWFyY2hfY3R4X2xvY2tfbW9kZSBsb2NrX21vZGUpO1xcbitzdHJ1Y3QgbnRmc19pbm9kZSAqbnRmc19hdHRyX2xpc3RfbG9jayhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXFxuK1xcdFxcdFxcdFxcdCAgICAgICBlbnVtIG50ZnNfYXR0cl9zZWFyY2hfY3R4X2xvY2tfbW9kZSBsb2NrX21vZGUpO1xcbit2b2lkIG50ZnNfYXR0cl9saXN0X3VubG9jayhzdHJ1Y3QgbnRmc19pbm9kZSAqbG9ja19uaSxcXG4rXFx0XFx0XFx0ICAgZW51bSBudGZzX2F0dHJfc2VhcmNoX2N0eF9sb2NrX21vZGUgbG9ja19tb2RlKTtcXG4rdm9pZCBudGZzX2F0dHJfbG9ja19zZWFyY2hfY3R4KHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4LFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxcbitcXHRcXHRcXHQgICAgICAgZW51bSBudGZzX2F0dHJfc2VhcmNoX2N0eF9sb2NrX21vZGUgbG9ja19tb2RlKTtcXG4rdm9pZCBudGZzX2F0dHJfdW5sb2NrX3NlYXJjaF9jdHgoc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpO1xcbiB2b2lkIG50ZnNfYXR0cl9wdXRfc2VhcmNoX2N0eChzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eCk7XFxuIGludCBudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2soY29uc3Qgc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsXFxuIFxcdFxcdGNvbnN0IF9fbGUzMiB0eXBlLCBjb25zdCBzNjQgc2l6ZSk7XFxuQEAgLTEzMyw2ICsxNTMsNyBAQCBpbnQgbnRmc19yZXNpZGVudF9hdHRyX3JlY29yZF9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBfX2xlMzIgdHlwZSxcXG4gXFx0XFx0X19sZTE2ICpuYW1lLCB1OCBuYW1lX2xlbiwgdTggKnZhbCwgdTMyIHNpemUsXFxuIFxcdFxcdF9fbGUxNiBmbGFncyk7XFxuIGludCBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgZnJvbV92Y24pO1xcbitpbnQgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzX25vbG9jayhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBmcm9tX3Zjbik7XFxuIHN0cnVjdCBydW5saXN0X2VsZW1lbnQgKm50ZnNfYXR0cl92Y25fdG9fcmwoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgdmNuLCBzNjQgKmxjbik7XFxuIFxcbiAvKlxcbkBAIC0xNDgsNyArMTY5LDkgQEAgc3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqbnRmc19hdHRyX3Zjbl90b19ybChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCB2Y24sIHM2NFxcbiAgKlxcdCAgICBAbmksIHlvdSBjYW4gc2ltcGx5IGRvOlxcbiAgKlxcbiAgKlxcdGludCBlcnI7XFxuLSAqXFx0c3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwpO1xcbisgKlxcdHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4O1xcbisgKlxcbisgKlxcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xcbiAgKlxcdGlmICghY3R4KVxcbiAgKlxcdFxcdC8vIEVycm9yIGNvZGUgaXMgaW4gZXJybm8uIEhhbmRsZSB0aGlzIGNhc2UuXFxuICAqXFx0d2hpbGUgKCEoZXJyID0gbnRmc19hdHRyc193YWxrKGN0eCkpKSB7XFxuZGlmZiAtLWdpdCBhL2ZzL250ZnMvYXR0cmxpc3QuYyBiL2ZzL250ZnMvYXR0cmxpc3QuY1xcbmluZGV4IGFmYjEzMDM4YmE0MjVmLi5mZDVlYWMwNjEyNzg0YiAxMDA2NDRcXG4tLS0gYS9mcy9udGZzL2F0dHJsaXN0LmNcXG4rKysgYi9mcy9udGZzL2F0dHJsaXN0LmNcXG5AQCAtMTUzLDcgKzE1Myw3IEBAIGludCBudGZzX2F0dHJsaXN0X2VudHJ5X2FkZChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHN0cnVjdCBhdHRyX3JlY29yZCAqYXR0cilcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbiBcXHQvKiBGaW5kIHBsYWNlIGZvciB0aGUgbmV3IGVudHJ5LiAqL1xcbi1cXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwpO1xcbitcXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XFxuIFxcdGlmICghY3R4KSB7XFxuIFxcdFxcdGVyciA9IC1FTk9NRU07XFxuIFxcdFxcdG50ZnNfZXJyb3IobmktXFx1MDAzZXZvbC1cXHUwMDNlc2IsIFxcXCJGYWlsZWQgdG8gZ2V0IHNlYXJjaCBjb250ZXh0XFxcIik7XFxuQEAgLTE3Niw3ICsxNzYsNiBAQCBpbnQgbnRmc19hdHRybGlzdF9lbnRyeV9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzdHJ1Y3QgYXR0cl9yZWNvcmQgKmF0dHIpXFxuIFxcdFxcdGlmIChjdHgtXFx1MDAzZWFsX2VudHJ5LVxcdTAwM2Vsb3dlc3RfdmNuID09IGxvd2VzdF92Y24pIHtcXG4gXFx0XFx0XFx0ZXJyID0gLUVFWElTVDtcXG4gXFx0XFx0XFx0bnRmc19kZWJ1ZyhcXFwiU3VjaCBhdHRyaWJ1dGUgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBhdHRyaWJ1dGUgbGlzdC5cXFxcblxcXCIpO1xcbi1cXHRcXHRcXHRudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoY3R4KTtcXG4gXFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbiBcXHRcXHR9XFxuIFxcdFxcdC8qIEFkZCBuZXcgZW50cnkgYWZ0ZXIgdGhpcyBleHRlbnQuICovXFxuQEAgLTE4NiwxNSArMTg1LDExIEBAIGludCBudGZzX2F0dHJsaXN0X2VudHJ5X2FkZChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHN0cnVjdCBhdHRyX3JlY29yZCAqYXR0cilcXG4gXFx0XFx0LyogQ2hlY2sgZm9yIHJlYWwgZXJyb3JzLiAqL1xcbiBcXHRcXHRpZiAoZXJyICE9IC1FTk9FTlQpIHtcXG4gXFx0XFx0XFx0bnRmc19kZWJ1ZyhcXFwiQXR0cmlidXRlIGxvb2t1cCBmYWlsZWQuXFxcXG5cXFwiKTtcXG4tXFx0XFx0XFx0bnRmc19hdHRyX3B1dF9zZWFyY2hfY3R4KGN0eCk7XFxuIFxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gXFx0XFx0fVxcbiBcXHRcXHQvKiBObyBwcmV2aW91cyBleHRlbnRzIGZvdW5kLiAqL1xcbiBcXHRcXHRhbGUgPSBjdHgtXFx1MDAzZWFsX2VudHJ5O1xcbiBcXHR9XFxuLVxcdC8qIERvbid0IG5lZWQgaXQgYW55bW9yZSwgQGN0eC1cXHUwMDNlYWxfZW50cnkgcG9pbnRzIHRvIEBuaS1cXHUwMDNlYXR0cl9saXN0LiAqL1xcbi1cXHRudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoY3R4KTtcXG4tXFxuIFxcdC8qIERldGVybWluZSBuZXcgZW50cnkgb2Zmc2V0LiAqL1xcbiBcXHRlbnRyeV9vZmZzZXQgPSAoKHU4ICopYWxlIC0gbmktXFx1MDAzZWF0dHJfbGlzdCk7XFxuIFxcdC8qIFNldCBwb2ludGVyIHRvIG5ldyBlbnRyeS4gKi9cXG5AQCAtMjIzLDE2ICsyMTgsMjIgQEAgaW50IG50ZnNfYXR0cmxpc3RfZW50cnlfYWRkKHN0cnVjdCBudGZzX2lub2RlICpuaSwgc3RydWN0IGF0dHJfcmVjb3JkICphdHRyKVxcbiBcXHRvbGRfYWwgPSBuaS1cXHUwMDNlYXR0cl9saXN0O1xcbiBcXHRuaS1cXHUwMDNlYXR0cl9saXN0ID0gbmV3X2FsO1xcbiBcXHRuaS1cXHUwMDNlYXR0cl9saXN0X3NpemUgPSBuaS1cXHUwMDNlYXR0cl9saXN0X3NpemUgKyBlbnRyeV9sZW47XFxuK1xcdG50ZnNfYXR0cl9wdXRfc2VhcmNoX2N0eChjdHgpO1xcbitcXHRjdHggPSBOVUxMO1xcbiBcXG4gXFx0ZXJyID0gbnRmc19hdHRybGlzdF91cGRhdGUobmkpO1xcbiBcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGRvd25fd3JpdGUoXFx1MDAyNm5pLVxcdTAwM2VhdHRyX2xpc3RfbG9jayk7XFxuIFxcdFxcdG5pLVxcdTAwM2VhdHRyX2xpc3QgPSBvbGRfYWw7XFxuIFxcdFxcdG5pLVxcdTAwM2VhdHRyX2xpc3Rfc2l6ZSAtPSBlbnRyeV9sZW47XFxuK1xcdFxcdHVwX3dyaXRlKFxcdTAwMjZuaS1cXHUwMDNlYXR0cl9saXN0X2xvY2spO1xcbiBcXHRcXHRnb3RvIGVycl9vdXQ7XFxuIFxcdH1cXG4gXFx0a3ZmcmVlKG9sZF9hbCk7XFxuIFxcdHJldHVybiAwO1xcbiBlcnJfb3V0OlxcbitcXHRpZiAoY3R4KVxcbitcXHRcXHRudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoY3R4KTtcXG4gXFx0a3ZmcmVlKG5ld19hbCk7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG5AQCAtMjQ4LDkgKzI0OSwxMiBAQCBpbnQgbnRmc19hdHRybGlzdF9lbnRyeV9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzdHJ1Y3QgYXR0cl9yZWNvcmQgKmF0dHIpXFxuIGludCBudGZzX2F0dHJsaXN0X2VudHJ5X3JtKHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4KVxcbiB7XFxuIFxcdHU4ICpuZXdfYWw7XFxuLVxcdGludCBuZXdfYWxfbGVuO1xcbitcXHRpbnQgZXJyLCBuZXdfYWxfbGVuO1xcbiBcXHRzdHJ1Y3QgbnRmc19pbm9kZSAqYmFzZV9uaTtcXG4gXFx0c3RydWN0IGF0dHJfbGlzdF9lbnRyeSAqYWxlO1xcbitcXHRlbnVtIG50ZnNfYXR0cl9zZWFyY2hfY3R4X2xvY2tfbW9kZSBsb2NrX21vZGU7XFxuK1xcdGJvb2wgY3R4X2xvY2tlZDtcXG4rXFx0dTggKm9sZF9hbDtcXG4gXFxuIFxcdGlmICghY3R4IHx8ICFjdHgtXFx1MDAzZW50ZnNfaW5vIHx8ICFjdHgtXFx1MDAzZWFsX2VudHJ5KSB7XFxuIFxcdFxcdG50ZnNfZGVidWcoXFxcIkludmFsaWQgYXJndW1lbnRzLlxcXFxuXFxcIik7XFxuQEAgLTI4NSw5ICsyODksMTcgQEAgaW50IG50ZnNfYXR0cmxpc3RfZW50cnlfcm0oc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpXFxuIFxcdFxcdFxcdFxcdGFsZS1cXHUwMDNlbGVuZ3RoKSwgbmV3X2FsX2xlbiAtICgodTggKilhbGUgLSBiYXNlX25pLVxcdTAwM2VhdHRyX2xpc3QpKTtcXG4gXFxuIFxcdC8qIFNldCBuZXcgcnVubGlzdC4gKi9cXG4tXFx0a3ZmcmVlKGJhc2VfbmktXFx1MDAzZWF0dHJfbGlzdCk7XFxuK1xcdG9sZF9hbCA9IGJhc2VfbmktXFx1MDAzZWF0dHJfbGlzdDtcXG4gXFx0YmFzZV9uaS1cXHUwMDNlYXR0cl9saXN0ID0gbmV3X2FsO1xcbiBcXHRiYXNlX25pLVxcdTAwM2VhdHRyX2xpc3Rfc2l6ZSA9IG5ld19hbF9sZW47XFxuK1xcdGt2ZnJlZShvbGRfYWwpO1xcbiBcXG4tXFx0cmV0dXJuIG50ZnNfYXR0cmxpc3RfdXBkYXRlKGJhc2VfbmkpO1xcbitcXHRjdHhfbG9ja2VkID0gY3R4LVxcdTAwM2VhdHRyX2xpc3RfbG9ja19uaTtcXG4rXFx0bG9ja19tb2RlID0gY3R4LVxcdTAwM2VhdHRyX2xpc3RfbG9ja19tb2RlO1xcbitcXHRpZiAoY3R4X2xvY2tlZClcXG4rXFx0XFx0bnRmc19hdHRyX3VubG9ja19zZWFyY2hfY3R4KGN0eCk7XFxuK1xcdGVyciA9IG50ZnNfYXR0cmxpc3RfdXBkYXRlKGJhc2VfbmkpO1xcbitcXHRpZiAoY3R4X2xvY2tlZClcXG4rXFx0XFx0bnRmc19hdHRyX2xvY2tfc2VhcmNoX2N0eChjdHgsIGJhc2VfbmksIGxvY2tfbW9kZSk7XFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9jb21wcmVzcy5jIGIvZnMvbnRmcy9jb21wcmVzcy5jXFxuaW5kZXggNzZiZDgwNmI0MWVkZDkuLmJhYzZiMzIwNjk0NzUzIDEwMDY0NFxcbi0tLSBhL2ZzL250ZnMvY29tcHJlc3MuY1xcbisrKyBiL2ZzL250ZnMvY29tcHJlc3MuY1xcbkBAIC0xMjg3LDYgKzEyODcsNyBAQCBzdGF0aWMgaW50IG50ZnNfd3JpdGVfY2Ioc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBsb2ZmX3QgcG9zLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxcbiBcXHQvKiBtb3JlIGNvbXByZXNzZWQgemVyb2VzLCB0byBiZSBmb2xsb3dlZCBieSBzb21lIGNvdW50ICovXFxuIFxcdHN0YXRpYyBjaGFyIG1vcmV6ZXJvZXNbXSA9IHsweDAzLCAweGIwLCAweDAyLCAweDAwfTtcXG4gXFx0c3RydWN0IHBhZ2UgKipwYWdlc19kaXNrID0gTlVMTCwgKnBnO1xcbitcXHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pO1xcbiBcXHRzNjQgYmlvX2xjbjtcXG4gXFx0c3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqcmxjLCAqcmw7XFxuIFxcdGludCBpLCBlcnI7XFxuQEAgLTEzOTAsMTAgKzEzOTEsMTIgQEAgc3RhdGljIGludCBudGZzX3dyaXRlX2NiKHN0cnVjdCBudGZzX2lub2RlICpuaSwgbG9mZl90IHBvcywgc3RydWN0IHBhZ2UgKipwYWdlcyxcXG4gXFx0fVxcbiBcXG4gXFx0YmlvX2xjbiA9IHJsYy1cXHUwMDNlbGNuO1xcbitcXHRhdHRyX2xvY2tfbmkgPSBudGZzX2F0dHJfbGlzdF9sb2NrKG5pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xcbiBcXHRkb3duX3dyaXRlKFxcdTAwMjZuaS1cXHUwMDNlcnVubGlzdC5sb2NrKTtcXG4gXFx0cmwgPSBudGZzX3J1bmxpc3RzX21lcmdlKFxcdTAwMjZuaS1cXHUwMDNlcnVubGlzdCwgcmxjLCAwLCBcXHUwMDI2bmV3X3JsX2NvdW50KTtcXG4gXFx0aWYgKElTX0VSUihybCkpIHtcXG4gXFx0XFx0dXBfd3JpdGUoXFx1MDAyNm5pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbitcXHRcXHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xcbiBcXHRcXHRudGZzX2Vycm9yKHZvbC1cXHUwMDNlc2IsIFxcXCJGYWlsZWQgdG8gbWVyZ2UgcnVubGlzdHNcXFwiKTtcXG4gXFx0XFx0ZXJyID0gUFRSX0VSUihybCk7XFxuIFxcdFxcdGlmIChudGZzX2NsdXN0ZXJfZnJlZV9mcm9tX3JsKHZvbCwgcmxjKSlcXG5AQCAtMTQwNSw4ICsxNDA4LDkgQEAgc3RhdGljIGludCBudGZzX3dyaXRlX2NiKHN0cnVjdCBudGZzX2lub2RlICpuaSwgbG9mZl90IHBvcywgc3RydWN0IHBhZ2UgKipwYWdlcyxcXG4gXFx0bmktXFx1MDAzZXJ1bmxpc3QuY291bnQgPSBuZXdfcmxfY291bnQ7XFxuIFxcdG5pLVxcdTAwM2VydW5saXN0LnJsID0gcmw7XFxuIFxcbi1cXHRlcnIgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIDApO1xcbitcXHRlcnIgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNfbm9sb2NrKG5pLCAwKTtcXG4gXFx0dXBfd3JpdGUoXFx1MDAyNm5pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbitcXHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xcbiBcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdGVyciA9IC1FSU87XFxuIFxcdFxcdGdvdG8gb3V0O1xcbmRpZmYgLS1naXQgYS9mcy9udGZzL2Rpci5jIGIvZnMvbnRmcy9kaXIuY1xcbmluZGV4IDRiNmJkNWYzMGM2NWVhLi4xNjU1MDNkMDU5YzZkZSAxMDA2NDRcXG4tLS0gYS9mcy9udGZzL2Rpci5jXFxuKysrIGIvZnMvbnRmcy9kaXIuY1xcbkBAIC05MSw3ICs5MSw3IEBAIHU2NCBudGZzX2xvb2t1cF9pbm9kZV9ieV9uYW1lKHN0cnVjdCBudGZzX2lub2RlICpkaXJfbmksIGNvbnN0IF9fbGUxNiAqdW5hbWUsXFxuIFxcdFxcdFxcdFxcdC1QVFJfRVJSKG0pKTtcXG4gXFx0XFx0cmV0dXJuIEVSUl9NUkVGKFBUUl9FUlIobSkpO1xcbiBcXHR9XFxuLVxcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChkaXJfbmksIG0pO1xcbitcXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoZGlyX25pLCBtLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XFxuIFxcdGlmICh1bmxpa2VseSghY3R4KSkge1xcbiBcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiBcXHRcXHRnb3RvIGVycl9vdXQ7XFxuQEAgLTgxNCw3ICs4MTQsNyBAQCBzdGF0aWMgaW50IG50ZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRpcl9jb250ZXh0ICphY3RvcilcXG4gXFx0XFx0ZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhID0gcHJpdmF0ZTtcXG4gXFx0fVxcbiBcXG4tXFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5kaXIsIE5VTEwpO1xcbitcXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmRpciwgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xcbiBcXHRpZiAoIWN0eCkge1xcbiBcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiBcXHRcXHRnb3RvIG91dDtcXG5AQCAtMTAxNSw3ICsxMDE1LDcgQEAgaW50IG50ZnNfY2hlY2tfZW1wdHlfZGlyKHN0cnVjdCBudGZzX2lub2RlICpuaSwgc3RydWN0IG1mdF9yZWNvcmQgKm5pX21yZWMpXFxuIFxcdGlmICghKG5pX21yZWMtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTUZUX1JFQ09SRF9JU19ESVJFQ1RPUlkpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCk7XFxuK1xcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xcbiBcXHRpZiAoIWN0eCkge1xcbiBcXHRcXHRudGZzX2Vycm9yKG5pLVxcdTAwM2V2b2wtXFx1MDAzZXNiLCBcXFwiRmFpbGVkIHRvIGdldCBzZWFyY2ggY29udGV4dFxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5AQCAtMTExNiw3ICsxMTE2LDcgQEAgc3RhdGljIGludCBudGZzX2Rpcl9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlscCwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxcbiBcXHRpZiAoTlZvbFNodXRkb3duKHZvbCkpXFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXG4tXFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTtcXG4rXFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XFxuIFxcdGlmICghY3R4KVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL250ZnMvZWEuYyBiL2ZzL250ZnMvZWEuY1xcbmluZGV4IDBjZDE5Mjc1MmI3Y2Q3Li4yODRjOTg1ODA3YTZlNiAxMDA2NDRcXG4tLS0gYS9mcy9udGZzL2VhLmNcXG4rKysgYi9mcy9udGZzL2VhLmNcXG5AQCAtNTg3LDcgKzU4Nyw3IEBAIHN0YXRpYyBpbnQgbnRmc19uZXdfYXR0cl9mbGFncyhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIF9fbGUzMiBmYXR0cilcXG4gXFx0aWYgKElTX0VSUihtKSlcXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIobSk7XFxuIFxcbi1cXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIG0pO1xcbitcXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIG0sIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcXG4gXFx0aWYgKCFjdHgpIHtcXG4gXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gXFx0XFx0Z290byBlcnJfb3V0O1xcbmRpZmYgLS1naXQgYS9mcy9udGZzL2ZpbGUuYyBiL2ZzL250ZnMvZmlsZS5jXFxuaW5kZXggNmE3YjYzOGU1MjNkOTEuLmRjYjU1NTRmZjFiNzE3IDEwMDY0NFxcbi0tLSBhL2ZzL250ZnMvZmlsZS5jXFxuKysrIGIvZnMvbnRmcy9maWxlLmNcXG5AQCAtMjMsNiArMjMsNyBAQFxcbiAjaW5jbHVkZSBcXFwiaW9tYXAuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImJpdG1hcC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidm9sdW1lLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJhdHRyaWIuaFxcXCJcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9maWxlbG9jay5oXFx1MDAzZVxcbiBcXG5AQCAtNzksNiArODAsNyBAQCBzdGF0aWMgaW50IG50ZnNfdHJpbV9wcmVhbGxvYyhzdHJ1Y3QgaW5vZGUgKnZpKVxcbiB7XFxuIFxcdHN0cnVjdCBudGZzX2lub2RlICpuaSA9IE5URlNfSSh2aSk7XFxuIFxcdHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sID0gbmktXFx1MDAzZXZvbDtcXG4rXFx0c3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTtcXG4gXFx0c3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqcmw7XFxuIFxcdHM2NCBhbGlnbmVkX2RhdGFfc2l6ZTtcXG4gXFx0czY0IHZjbl9kcywgdmNuX3RyO1xcbkBAIC04Nyw2ICs4OSw3IEBAIHN0YXRpYyBpbnQgbnRmc190cmltX3ByZWFsbG9jKHN0cnVjdCBpbm9kZSAqdmkpXFxuIFxcbiBcXHRpbm9kZV9sb2NrKHZpKTtcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2bmktXFx1MDAzZW1yZWNfbG9jayk7XFxuK1xcdGF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XFxuIFxcdGRvd25fd3JpdGUoXFx1MDAyNm5pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbiBcXG4gXFx0YWxpZ25lZF9kYXRhX3NpemUgPSByb3VuZF91cChuaS1cXHUwMDNlZGF0YV9zaXplLCB2b2wtXFx1MDAzZWNsdXN0ZXJfc2l6ZSk7XFxuQEAgLTExMSw3ICsxMTQsNyBAQCBzdGF0aWMgaW50IG50ZnNfdHJpbV9wcmVhbGxvYyhzdHJ1Y3QgaW5vZGUgKnZpKVxcbiBcXHRcXHRcXHRudGZzX2Vycm9yKHZvbC1cXHUwMDNlc2IsIFxcXCJQcmVhbGxvY2F0ZWQgYmxvY2sgcm9sbGJhY2sgZmFpbGVkXFxcIik7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdG5pLVxcdTAwM2VhbGxvY2F0ZWRfc2l6ZSA9IG50ZnNfY2x1c3Rlcl90b19ieXRlcyh2b2wsIHZjbl90cik7XFxuLVxcdFxcdFxcdGVyciA9IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhuaSwgMCk7XFxuK1xcdFxcdFxcdGVyciA9IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlyc19ub2xvY2sobmksIDApO1xcbiBcXHRcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRcXHRudGZzX2Vycm9yKHZvbC1cXHUwMDNlc2IsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIFxcXCJGYWlsZWQgdG8gcm9sbGJhY2sgbWFwcGluZyBwYWlycyBmb3IgcHJlYWxsb2NcXFwiKTtcXG5AQCAtMTIwLDYgKzEyMyw3IEBAIHN0YXRpYyBpbnQgbnRmc190cmltX3ByZWFsbG9jKHN0cnVjdCBpbm9kZSAqdmkpXFxuIFxcbiBvdXRfdW5sb2NrOlxcbiBcXHR1cF93cml0ZShcXHUwMDI2bmktXFx1MDAzZXJ1bmxpc3QubG9jayk7XFxuK1xcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2bmktXFx1MDAzZW1yZWNfbG9jayk7XFxuIFxcdGlub2RlX3VubG9jayh2aSk7XFxuIFxcbkBAIC0xNzcsNyArMTgxLDcgQEAgc3RhdGljIGludCBudGZzX2ZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbHAsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcXG4gXFx0XFx0cmV0ID0gX19udGZzX3dyaXRlX2lub2RlKHZpLCAxKTtcXG4gXFx0d3JpdGVfaW5vZGVfbm93KHZpLCAhZGF0YXN5bmMpO1xcbiBcXG4tXFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTtcXG4rXFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XFxuIFxcdGlmICghY3R4KVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuQEAgLTEwNTcsNiArMTA2MSw3IEBAIHN0YXRpYyBsb25nIG50ZnNfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlXFxuIFxcdHN0cnVjdCBpbm9kZSAqdmkgPSBmaWxlX2lub2RlKGZpbGUpO1xcbiBcXHRzdHJ1Y3QgbnRmc19pbm9kZSAqbmkgPSBOVEZTX0kodmkpO1xcbiBcXHRzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCA9IG5pLVxcdTAwM2V2b2w7XFxuK1xcdHN0cnVjdCBudGZzX2lub2RlICphdHRyX2xvY2tfbmk7XFxuIFxcdGludCBlcnIgPSAwO1xcbiBcXHRsb2ZmX3Qgb2xkX3NpemU7XFxuIFxcdGJvb2wgbWFwX2xvY2tlZCA9IGZhbHNlO1xcbkBAIC0xMDcxLDkgKzEwNzYsMTEgQEAgc3RhdGljIGxvbmcgbnRmc19mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVcXG4gXFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuIFxcbiBcXHRpZiAoTklub05vblJlc2lkZW50KG5pKSBcXHUwMDI2XFx1MDAyNiAhTklub0Z1bGx5TWFwcGVkKG5pKSkge1xcbitcXHRcXHRhdHRyX2xvY2tfbmkgPSBudGZzX2F0dHJfbGlzdF9sb2NrKG5pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XFxuIFxcdFxcdGRvd25fd3JpdGUoXFx1MDAyNm5pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbi1cXHRcXHRlcnIgPSBudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3QobmkpO1xcbitcXHRcXHRlcnIgPSBudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3Rfbm9sb2NrKG5pKTtcXG4gXFx0XFx0dXBfd3JpdGUoXFx1MDAyNm5pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbitcXHRcXHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9pbmRleC5jIGIvZnMvbnRmcy9pbmRleC5jXFxuaW5kZXggYzVmMmNmNzViNzUwZTkuLjM2YTcwYWFhOWUyZGU3IDEwMDY0NFxcbi0tLSBhL2ZzL250ZnMvaW5kZXguY1xcbisrKyBiL2ZzL250ZnMvaW5kZXguY1xcbkBAIC01NzUsNyArNTc1LDcgQEAgc3RhdGljIHN0cnVjdCBpbmRleF9yb290ICpudGZzX2lyX2xvb2t1cChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIF9fbGUxNiAqbmFtZSxcXG4gXFx0c3RydWN0IGluZGV4X3Jvb3QgKmlyID0gTlVMTDtcXG4gXFxuIFxcdG50ZnNfZGVidWcoXFxcIkVudGVyaW5nXFxcXG5cXFwiKTtcXG4tXFx0KmN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCk7XFxuK1xcdCpjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XFxuIFxcdGlmICghKmN0eCkge1xcbiBcXHRcXHRudGZzX2Vycm9yKG5pLVxcdTAwM2V2b2wtXFx1MDAzZXNiLCBcXFwiJXMsIEZhaWxlZCB0byBnZXQgc2VhcmNoIGNvbnRleHRcXFwiLCBfX2Z1bmNfXyk7XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbkBAIC0xMzMyLDcgKzEzMzIsOCBAQCBzdGF0aWMgaW50IG50ZnNfaXJfcmVwYXJlbnQoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4KVxcbiBcXHQgKiBXaGVuIHRoZXJlIGlzIG5vIHNwYWNlIHRvIGJ1aWxkIGEgbm9uLXJlc2lkZW50XFxuIFxcdCAqIGluZGV4LCB3ZSBtYXkgaGF2ZSB0byBtb3ZlIHRoZSByb290IHRvIGFuIGV4dGVudFxcbiBcXHQgKi9cXG4tXFx0aWYgKChyZXQgPT0gLUVOT1NQQykgXFx1MDAyNlxcdTAwMjYgKGN0eC1cXHUwMDNlYWxfZW50cnkgfHwgIW50ZnNfaW5vZGVfYWRkX2F0dHJsaXN0KGljeC1cXHUwMDNlaWR4X25pKSkpIHtcXG4rXFx0aWYgKChyZXQgPT0gLUVOT1NQQykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIChjdHgtXFx1MDAzZWFsX2VudHJ5IHx8ICFudGZzX2lub2RlX2FkZF9hdHRybGlzdF9ub2xvY2soaWN4LVxcdTAwM2VpZHhfbmkpKSkge1xcbiBcXHRcXHRudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoY3R4KTtcXG4gXFx0XFx0Y3R4ID0gTlVMTDtcXG4gXFx0XFx0aXIgPSBudGZzX2lyX2xvb2t1cChpY3gtXFx1MDAzZWlkeF9uaSwgaWN4LVxcdTAwM2VuYW1lLCBpY3gtXFx1MDAzZW5hbWVfbGVuLCBcXHUwMDI2Y3R4KTtcXG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9pbm9kZS5jIGIvZnMvbnRmcy9pbm9kZS5jXFxuaW5kZXggYzI3MTU1MjFlNTYyODYuLjhlZDZjYjViOWM0MmY4IDEwMDY0NFxcbi0tLSBhL2ZzL250ZnMvaW5vZGUuY1xcbisrKyBiL2ZzL250ZnMvaW5vZGUuY1xcbkBAIC0zMjYsNyArMzI2LDcgQEAgc3RhdGljIGludCBudGZzX25vbl9yZXNpZGVudF9kZWFsbG9jX2NsdXN0ZXJzKHN0cnVjdCBudGZzX2lub2RlICpuaSlcXG4gXFx0c3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICphY3R4O1xcbiBcXHRpbnQgZXJyID0gMDtcXG4gXFxuLVxcdGFjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwpO1xcbitcXHRhY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XFxuIFxcdGlmICghYWN0eClcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdFdBUk5fT04oYWN0eC1cXHUwMDNlbXJlYy1cXHUwMDNlbGlua19jb3VudCAhPSAwKTtcXG5AQCAtNDc1LDYgKzQ3NSw3IEBAIHZvaWQgX19udGZzX2luaXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxcbiBcXHRuaS1cXHUwMDNlZm9saW8gPSBOVUxMO1xcbiBcXHRuaS1cXHUwMDNlZm9saW9fb2ZzID0gMDtcXG4gXFx0bmktXFx1MDAzZW1yZWMgPSBOVUxMO1xcbitcXHRpbml0X3J3c2VtKFxcdTAwMjZuaS1cXHUwMDNlYXR0cl9saXN0X2xvY2spO1xcbiBcXHRuaS1cXHUwMDNlYXR0cl9saXN0X3NpemUgPSAwO1xcbiBcXHRuaS1cXHUwMDNlYXR0cl9saXN0ID0gTlVMTDtcXG4gXFx0bmktXFx1MDAzZWl0eXBlLmluZGV4LmJsb2NrX3NpemUgPSAwO1xcbkBAIC03MTMsNyArNzE0LDcgQEAgc3RhdGljIGludCBudGZzX3JlYWRfbG9ja2VkX2lub2RlKHN0cnVjdCBpbm9kZSAqdmkpXFxuIFxcdFxcdGdvdG8gZXJyX291dDtcXG4gXFx0fVxcbiBcXG4tXFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBtKTtcXG4rXFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBtLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XFxuIFxcdGlmICghY3R4KSB7XFxuIFxcdFxcdGVyciA9IC1FTk9NRU07XFxuIFxcdFxcdGdvdG8gdW5tX2Vycl9vdXQ7XFxuQEAgLTEyODAsNyArMTI4MSw3IEBAIHN0YXRpYyBpbnQgbnRmc19yZWFkX2xvY2tlZF9hdHRyX2lub2RlKHN0cnVjdCBpbm9kZSAqYmFzZV92aSwgc3RydWN0IGlub2RlICp2aSlcXG4gXFx0XFx0ZXJyID0gUFRSX0VSUihtKTtcXG4gXFx0XFx0Z290byBlcnJfb3V0O1xcbiBcXHR9XFxuLVxcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChiYXNlX25pLCBtKTtcXG4rXFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KGJhc2VfbmksIG0sIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcXG4gXFx0aWYgKCFjdHgpIHtcXG4gXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gXFx0XFx0Z290byB1bm1fZXJyX291dDtcXG5AQCAtMTUyMCw3ICsxNTIxLDcgQEAgc3RhdGljIGludCBudGZzX3JlYWRfbG9ja2VkX2luZGV4X2lub2RlKHN0cnVjdCBpbm9kZSAqYmFzZV92aSwgc3RydWN0IGlub2RlICp2aSlcXG4gXFx0XFx0ZXJyID0gUFRSX0VSUihtKTtcXG4gXFx0XFx0Z290byBlcnJfb3V0O1xcbiBcXHR9XFxuLVxcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChiYXNlX25pLCBtKTtcXG4rXFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KGJhc2VfbmksIG0sIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcXG4gXFx0aWYgKCFjdHgpIHtcXG4gXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gXFx0XFx0Z290byB1bm1fZXJyX291dDtcXG5AQCAtMTkxMSw3ICsxOTEyLDcgQEAgaW50IG50ZnNfcmVhZF9pbm9kZV9tb3VudChzdHJ1Y3QgaW5vZGUgKnZpKVxcbiBcXHQvKiBQcm92aWRlcyByZWFkX2ZvbGlvKCkgZm9yIG1hcF9tZnRfcmVjb3JkKCkuICovXFxuIFxcdHZpLVxcdTAwM2VpX21hcHBpbmctXFx1MDAzZWFfb3BzID0gXFx1MDAyNm50ZnNfbWZ0X2FvcHM7XFxuIFxcbi1cXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIG0pO1xcbitcXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIG0sIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcXG4gXFx0aWYgKCFjdHgpIHtcXG4gXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gXFx0XFx0Z290byBlcnJfb3V0O1xcbkBAIC0yNDY2LDcgKzI0NjcsNyBAQCBzdGF0aWMgaW50IG50ZnNfaW5vZGVfc3luY19zdGFuZGFyZF9pbmZvcm1hdGlvbihzdHJ1Y3QgaW5vZGUgKnZpLCBzdHJ1Y3QgbWZ0X3JlY1xcbiBcXHRib29sIG1vZGlmaWVkID0gZmFsc2U7XFxuIFxcbiBcXHQvKiBVcGRhdGUgdGhlIGFjY2VzcyB0aW1lcyBpbiB0aGUgc3RhbmRhcmQgaW5mb3JtYXRpb24gYXR0cmlidXRlLiAqL1xcbi1cXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIG0pO1xcbitcXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIG0sIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcXG4gXFx0aWYgKHVubGlrZWx5KCFjdHgpKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0ZXJyID0gbnRmc19hdHRyX2xvb2t1cChBVF9TVEFOREFSRF9JTkZPUk1BVElPTiwgTlVMTCwgMCxcXG5AQCAtMjU2Nyw3ICsyNTY4LDcgQEAgaW50IG50ZnNfaW5vZGVfc3luY19maWxlbmFtZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuIFxcbiBcXHRudGZzX2RlYnVnKFxcXCJFbnRlcmluZyBmb3IgaW5vZGUgJWxsdVxcXFxuXFxcIiwgbmktXFx1MDAzZW1mdF9ubyk7XFxuIFxcbi1cXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwpO1xcbitcXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcXG4gXFx0aWYgKCFjdHgpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5AQCAtMjc1OSwxMSArMjc2MCwxNSBAQCBpbnQgX19udGZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqdmksIGludCBzeW5jKVxcbiBcXHR9XFxuIFxcbiBcXHRpZiAoTklub05vblJlc2lkZW50KG5pKSBcXHUwMDI2XFx1MDAyNiBOSW5vUnVubGlzdERpcnR5KG5pKSkge1xcbitcXHRcXHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pO1xcbitcXG4rXFx0XFx0YXR0cl9sb2NrX25pID0gbnRmc19hdHRyX2xpc3RfbG9jayhuaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcXG4gXFx0XFx0ZG93bl93cml0ZShcXHUwMDI2bmktXFx1MDAzZXJ1bmxpc3QubG9jayk7XFxuLVxcdFxcdGVyciA9IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhuaSwgMCk7XFxuK1xcdFxcdGVyciA9IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlyc19ub2xvY2sobmksIDApO1xcbiBcXHRcXHRpZiAoIWVycilcXG4gXFx0XFx0XFx0Tklub0NsZWFyUnVubGlzdERpcnR5KG5pKTtcXG4gXFx0XFx0dXBfd3JpdGUoXFx1MDAyNm5pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbitcXHRcXHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xcbiBcXHR9XFxuIFxcbiBcXHRlcnIgPSBudGZzX2lub2RlX3N5bmNfc3RhbmRhcmRfaW5mb3JtYXRpb24odmksIG0pO1xcbkBAIC0yOTgyLDcgKzI5ODcsNyBAQCBzdGF0aWMgc3RydWN0IG50ZnNfaW5vZGUgKm50ZnNfZXh0ZW50X2lub2RlX29wZW4oc3RydWN0IG50ZnNfaW5vZGUgKmJhc2VfbmksXFxuICAqXFxuICAqIFJldHVybiAwIG9uIHN1Y2Nlc3MgYW5kIGVycm9yLlxcbiAgKi9cXG4taW50IG50ZnNfaW5vZGVfYXR0YWNoX2FsbF9leHRlbnRzKHN0cnVjdCBudGZzX2lub2RlICpuaSlcXG4raW50IG50ZnNfaW5vZGVfYXR0YWNoX2FsbF9leHRlbnRzX25vbG9jayhzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuIHtcXG4gXFx0c3RydWN0IGF0dHJfbGlzdF9lbnRyeSAqYWxlO1xcbiBcXHR1NjQgcHJldl9hdHRhY2hlZCA9IDA7XFxuQEAgLTMwMjIsMTMgKzMwMjcsMjUgQEAgaW50IG50ZnNfaW5vZGVfYXR0YWNoX2FsbF9leHRlbnRzKHN0cnVjdCBudGZzX2lub2RlICpuaSlcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK2ludCBudGZzX2lub2RlX2F0dGFjaF9hbGxfZXh0ZW50cyhzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuK3tcXG4rXFx0c3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcXG4rXFx0ZXJyID0gbnRmc19pbm9kZV9hdHRhY2hfYWxsX2V4dGVudHNfbm9sb2NrKG5pKTtcXG4rXFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4gLypcXG4gICogbnRmc19pbm9kZV9hZGRfYXR0cmxpc3QgLSBhZGQgYXR0cmlidXRlIGxpc3QgdG8gaW5vZGUgYW5kIGZpbGwgaXRcXG4gICogQG5pOiBvcGVuZWQgbnRmcyBpbm9kZSB0byB3aGljaCBhZGQgYXR0cmlidXRlIGxpc3RcXG4gICpcXG4gICogUmV0dXJuIDAgb24gc3VjY2VzcyBvciBlcnJvci5cXG4gICovXFxuLWludCBudGZzX2lub2RlX2FkZF9hdHRybGlzdChzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuK2ludCBudGZzX2lub2RlX2FkZF9hdHRybGlzdF9ub2xvY2soc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxcbiB7XFxuIFxcdGludCBlcnI7XFxuIFxcdHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4O1xcbkBAIC0zMDUzLDcgKzMwNzAsNyBAQCBpbnQgbnRmc19pbm9kZV9hZGRfYXR0cmxpc3Qoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxcbiBcXHRcXHRyZXR1cm4gLUVJTztcXG4gXFxuIFxcdC8qIEZvcm0gYXR0cmlidXRlIGxpc3QuICovXFxuLVxcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgbmlfbXJlYyk7XFxuK1xcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgbmlfbXJlYywgTlRGU19BVFRSX0NUWF9MT0NLX05PTkUpO1xcbiBcXHRpZiAoIWN0eCkge1xcbiBcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiBcXHRcXHRnb3RvIGVycl9vdXQ7XFxuQEAgLTMxMTEsNyArMzEyOCw2IEBAIGludCBudGZzX2lub2RlX2FkZF9hdHRybGlzdChzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuIFxcdFxcdGdvdG8gcHV0X2Vycl9vdXQ7XFxuIFxcdH1cXG4gXFxuLVxcdC8qIFNldCBpbi1tZW1vcnkgYXR0cmlidXRlIGxpc3QuICovXFxuIFxcdG5pLVxcdTAwM2VhdHRyX2xpc3QgPSBhbDtcXG4gXFx0bmktXFx1MDAzZWF0dHJfbGlzdF9zaXplID0gYWxfbGVuO1xcbiBcXHROSW5vU2V0QXR0ckxpc3QobmkpO1xcbkBAIC0zMTIxLDcgKzMxMzcsNyBAQCBpbnQgbnRmc19pbm9kZV9hZGRfYXR0cmxpc3Qoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxcbiBcXHQvKiBGcmVlIHNwYWNlIGlmIHRoZXJlIGlzIG5vdCBlbm91Z2ggaXQgZm9yICRBVFRSSUJVVEVfTElTVC4gKi9cXG4gXFx0aWYgKGxlMzJfdG9fY3B1KG5pX21yZWMtXFx1MDAzZWJ5dGVzX2FsbG9jYXRlZCkgLVxcbiBcXHRcXHRcXHRsZTMyX3RvX2NwdShuaV9tcmVjLVxcdTAwM2VieXRlc19pbl91c2UpIFxcdTAwM2MgYXR0cl9hbF9sZW4pIHtcXG4tXFx0XFx0aWYgKG50ZnNfaW5vZGVfZnJlZV9zcGFjZShuaSwgKGludClhdHRyX2FsX2xlbikpIHtcXG4rXFx0XFx0aWYgKG50ZnNfaW5vZGVfZnJlZV9zcGFjZV9ub2xvY2sobmksIChpbnQpYXR0cl9hbF9sZW4pKSB7XFxuIFxcdFxcdFxcdC8qIEZhaWxlZCB0byBmcmVlIHNwYWNlLiAqL1xcbiBcXHRcXHRcXHRlcnIgPSAtRU5PU1BDO1xcbiBcXHRcXHRcXHRudGZzX2Vycm9yKG5pLVxcdTAwM2V2b2wtXFx1MDAzZXNiLCBcXFwiRmFpbGVkIHRvIGZyZWUgc3BhY2UgZm9yIGF0dHJsaXN0XFxcIik7XFxuQEAgLTMxNDgsNiArMzE2NCw3IEBAIGludCBudGZzX2lub2RlX2FkZF9hdHRybGlzdChzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuIHJlbW92ZV9hdHRybGlzdF9yZWNvcmQ6XFxuIFxcdC8qIFByZXZlbnQgbnRmc19hdHRyX3JlY29ybV9ybSBmcm9tIGZyZWVpbmcgYXR0cmlidXRlIGxpc3QuICovXFxuIFxcdG5pLVxcdTAwM2VhdHRyX2xpc3QgPSBOVUxMO1xcbitcXHRuaS1cXHUwMDNlYXR0cl9saXN0X3NpemUgPSAwO1xcbiBcXHROSW5vQ2xlYXJBdHRyTGlzdChuaSk7XFxuIFxcdC8qIFJlbW92ZSAkQVRUUklCVVRFX0xJU1QgcmVjb3JkLiAqL1xcbiBcXHRudGZzX2F0dHJfcmVpbml0X3NlYXJjaF9jdHgoY3R4KTtcXG5AQCAtMzIwMSw2ICszMjE4LDE4IEBAIGludCBudGZzX2lub2RlX2FkZF9hdHRybGlzdChzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuK2ludCBudGZzX2lub2RlX2FkZF9hdHRybGlzdChzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuK3tcXG4rXFx0c3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XFxuK1xcdGVyciA9IG50ZnNfaW5vZGVfYWRkX2F0dHJsaXN0X25vbG9jayhuaSk7XFxuK1xcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBudGZzX2lub2RlX2Nsb3NlIC0gY2xvc2UgYW4gbnRmcyBpbm9kZSBhbmQgZnJlZSBhbGwgYXNzb2NpYXRlZCBtZW1vcnlcXG4gICogQG5pOlxcdFxcdG50ZnMgaW5vZGUgdG8gY2xvc2VcXG5AQCAtMzM0NCw3ICszMzczLDggQEAgc3RhdGljIGludCBudGZzX2F0dHJfcG9zaXRpb24oX19sZTMyIHR5cGUsIHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4KVxcbiAgKlxcbiAgKiBSZXR1cm4gMCBvbiBzdWNjZXNzIG9yIGVycm9yLlxcbiAgKi9cXG4taW50IG50ZnNfaW5vZGVfZnJlZV9zcGFjZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGludCBzaXplKVxcbitzdGF0aWMgaW50IF9fbnRmc19pbm9kZV9mcmVlX3NwYWNlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgaW50IHNpemUsXFxuK1xcdFxcdFxcdFxcdCAgIGVudW0gbnRmc19hdHRyX3NlYXJjaF9jdHhfbG9ja19tb2RlIGxvY2tfbW9kZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eDtcXG4gXFx0aW50IGZyZWVkLCBlcnI7XFxuQEAgLTMzNjgsNyArMzM5OCw3IEBAIGludCBudGZzX2lub2RlX2ZyZWVfc3BhY2Uoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBpbnQgc2l6ZSlcXG4gXFx0aWYgKHNpemUgXFx1MDAzYz0gZnJlZWQpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTtcXG4rXFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMLCBsb2NrX21vZGUpO1xcbiBcXHRpZiAoIWN0eCkge1xcbiBcXHRcXHRudGZzX2Vycm9yKHNiLCBcXFwiJXMsIEZhaWxlZCB0byBnZXQgc2VhcmNoIGNvbnRleHRcXFwiLCBfX2Z1bmNfXyk7XFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbkBAIC0zNDU0LDYgKzM0ODQsMjMgQEAgaW50IG50ZnNfaW5vZGVfZnJlZV9zcGFjZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGludCBzaXplKVxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbitpbnQgbnRmc19pbm9kZV9mcmVlX3NwYWNlX25vbG9jayhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGludCBzaXplKVxcbit7XFxuK1xcdHJldHVybiBfX250ZnNfaW5vZGVfZnJlZV9zcGFjZShuaSwgc2l6ZSwgTlRGU19BVFRSX0NUWF9MT0NLX05PTkUpO1xcbit9XFxuK1xcbitpbnQgbnRmc19pbm9kZV9mcmVlX3NwYWNlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgaW50IHNpemUpXFxuK3tcXG4rXFx0c3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XFxuK1xcdGVyciA9IF9fbnRmc19pbm9kZV9mcmVlX3NwYWNlKG5pLCBzaXplLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfTk9ORSk7XFxuK1xcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbiBzNjQgbnRmc19pbm9kZV9hdHRyX3ByZWFkKHN0cnVjdCBpbm9kZSAqdmksIHM2NCBwb3MsIHM2NCBjb3VudCwgdTggKmJ1ZilcXG4ge1xcbiBcXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHZpLVxcdTAwM2VpX21hcHBpbmc7XFxuQEAgLTM0NzgsMTAgKzM1MjUsMTEgQEAgczY0IG50ZnNfaW5vZGVfYXR0cl9wcmVhZChzdHJ1Y3QgaW5vZGUgKnZpLCBzNjQgcG9zLCBzNjQgY291bnQsIHU4ICpidWYpXFxuIFxcdFxcdGNvdW50ID0gaXNpemUgLSBwb3M7XFxuIFxcbiBcXHRpZiAoIU5Jbm9Ob25SZXNpZGVudChuaSkpIHtcXG4rXFx0XFx0c3RydWN0IG50ZnNfaW5vZGUgKmJhc2VfbmkgPSBuaS1cXHUwMDNlZXh0LmJhc2VfbnRmc19pbm87XFxuIFxcdFxcdHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4O1xcbiBcXHRcXHR1OCAqYXR0cjtcXG4gXFxuLVxcdFxcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaS1cXHUwMDNlZXh0LmJhc2VfbnRmc19pbm8sIE5VTEwpO1xcbitcXHRcXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoYmFzZV9uaSwgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xcbiBcXHRcXHRpZiAoIWN0eCkge1xcbiBcXHRcXHRcXHRudGZzX2Vycm9yKHZpLVxcdTAwM2VpX3NiLCBcXFwiRmFpbGVkIHRvIGdldCBhdHRyIHNlYXJjaCBjdHhcXFwiKTtcXG4gXFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG5AQCAtMzY2OSw2ICszNzE3LDggQEAgc3RhdGljIHM2NCBfX250ZnNfaW5vZGVfbm9uX3Jlc2lkZW50X2F0dHJfcHdyaXRlKHN0cnVjdCBpbm9kZSAqdmksXFxuIFxcbiBcXHRcXHRpZiAoc3luYykge1xcbiBcXHRcXHRcXHRzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCA9IG5pLVxcdTAwM2V2b2w7XFxuK1xcdFxcdFxcdHN0cnVjdCBudGZzX2lub2RlICphdHRyX2xvY2tfbmk7XFxuK1xcdFxcdFxcdGVudW0gbnRmc19hdHRyX3NlYXJjaF9jdHhfbG9ja19tb2RlIG1vZGU7XFxuIFxcdFxcdFxcdHM2NCBsY24sIGxjbl9jb3VudDtcXG4gXFx0XFx0XFx0dW5zaWduZWQgaW50IGxjbl9mb2xpb19vZmYgPSAwO1xcbiBcXHRcXHRcXHRzdHJ1Y3QgYmlvICpiaW87XFxuQEAgLTM2NzgsMTMgKzM3MjgsMTYgQEAgc3RhdGljIHM2NCBfX250ZnNfaW5vZGVfbm9uX3Jlc2lkZW50X2F0dHJfcHdyaXRlKHN0cnVjdCBpbm9kZSAqdmksXFxuIFxcbiBcXHRcXHRcXHRsY25fY291bnQgPSBtYXhfdChzNjQsIDEsIG50ZnNfYnl0ZXNfdG9fY2x1c3Rlcih2b2wsIGF0dHJfbGVuKSk7XFxuIFxcdFxcdFxcdHZjbiA9IG50ZnNfcGlkeF90b19jbHVzdGVyKHZvbCwgZm9saW8tXFx1MDAzZWluZGV4KTtcXG4rXFx0XFx0XFx0bW9kZSA9IE5URlNfQVRUUl9DVFhfTE9DS19SRUFEO1xcbiBcXG4gXFx0XFx0XFx0ZG8ge1xcbitcXHRcXHRcXHRcXHRhdHRyX2xvY2tfbmkgPSBudGZzX2F0dHJfbGlzdF9sb2NrKG5pLCBtb2RlKTtcXG4gXFx0XFx0XFx0XFx0ZG93bl93cml0ZShcXHUwMDI2bmktXFx1MDAzZXJ1bmxpc3QubG9jayk7XFxuIFxcdFxcdFxcdFxcdHJsID0gbnRmc19hdHRyX3Zjbl90b19ybChuaSwgdmNuLCBcXHUwMDI2bGNuKTtcXG4gXFx0XFx0XFx0XFx0aWYgKElTX0VSUihybCkpIHtcXG4gXFx0XFx0XFx0XFx0XFx0cmV0ID0gUFRSX0VSUihybCk7XFxuIFxcdFxcdFxcdFxcdFxcdHVwX3dyaXRlKFxcdTAwMjZuaS1cXHUwMDNlcnVubGlzdC5sb2NrKTtcXG4rXFx0XFx0XFx0XFx0XFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgbW9kZSk7XFxuIFxcdFxcdFxcdFxcdFxcdGdvdG8gZXJyX3VubG9ja19mb2xpbztcXG4gXFx0XFx0XFx0XFx0fVxcbiBcXG5AQCAtMzY5Niw2ICszNzQ5LDcgQEAgc3RhdGljIHM2NCBfX250ZnNfaW5vZGVfbm9uX3Jlc2lkZW50X2F0dHJfcHdyaXRlKHN0cnVjdCBpbm9kZSAqdmksXFxuIFxcdFxcdFxcdFxcdFxcdGxjbl9jb3VudCA9IDA7XFxuIFxcdFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0XFx0dXBfd3JpdGUoXFx1MDAyNm5pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbitcXHRcXHRcXHRcXHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBtb2RlKTtcXG4gXFxuIFxcdFxcdFxcdFxcdGlmICh2b2wtXFx1MDAzZWNsdXN0ZXJfc2l6ZV9iaXRzIFxcdTAwM2UgUEFHRV9TSElGVCkge1xcbiBcXHRcXHRcXHRcXHRcXHRsY25fZm9saW9fb2ZmID0gZm9saW8tXFx1MDAzZWluZGV4IFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQ7XFxuQEAgLTM3NTYsNyArMzgxMCw3IEBAIHM2NCBudGZzX2lub2RlX2F0dHJfcHdyaXRlKHN0cnVjdCBpbm9kZSAqdmksIHM2NCBwb3MsIHM2NCBjb3VudCwgdTggKmJ1ZiwgYm9vbCBzXFxuIFxcbiBcXHRXQVJOX09OKCFOSW5vQXR0cihuaSkpO1xcbiBcXG4tXFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLVxcdTAwM2VleHQuYmFzZV9udGZzX2lubywgTlVMTCk7XFxuK1xcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaS1cXHUwMDNlZXh0LmJhc2VfbnRmc19pbm8sIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcXG4gXFx0aWYgKCFjdHgpIHtcXG4gXFx0XFx0bnRmc19lcnJvcih2aS1cXHUwMDNlaV9zYiwgXFxcIkZhaWxlZCB0byBnZXQgYXR0ciBzZWFyY2ggY3R4XFxcIik7XFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbmRpZmYgLS1naXQgYS9mcy9udGZzL2lub2RlLmggYi9mcy9udGZzL2lub2RlLmhcXG5pbmRleCA5YWFjZDU3ODdmZmVhMC4uNGQwZmJkNTNlMWM0YWMgMTAwNjQ0XFxuLS0tIGEvZnMvbnRmcy9pbm9kZS5oXFxuKysrIGIvZnMvbnRmcy9pbm9kZS5oXFxuQEAgLTEwLDYgKzEwLDggQEBcXG4gI2lmbmRlZiBfTElOVVhfTlRGU19JTk9ERV9IXFxuICNkZWZpbmUgX0xJTlVYX05URlNfSU5PREVfSFxcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3J3c2VtLmhcXHUwMDNlXFxuK1xcbiAjaW5jbHVkZSBcXFwiZGVidWcuaFxcXCJcXG4gXFxuIGVudW0gbnRmc19pbm9kZV9tdXRleF9sb2NrX2NsYXNzIHtcXG5AQCAtNjYsNiArNjgsNyBAQCBlbnVtIG50ZnNfaW5vZGVfbXV0ZXhfbG9ja19jbGFzcyB7XFxuICAqIEF0dHJpYnV0ZSBsaXN0IHN1cHBvcnQgKG9ubHkgZm9yIHVzZSBieSB0aGUgYXR0cmlidXRlIGxvb2t1cFxcbiAgKiBmdW5jdGlvbnMpLiBTZXR1cCBkdXJpbmcgcmVhZF9pbm9kZSBmb3IgYWxsIGlub2RlcyB3aXRoIGF0dHJpYnV0ZVxcbiAgKiBsaXN0cy4gT25seSB2YWxpZCBpZiBOSV9BdHRyTGlzdCBpcyBzZXQgaW4gc3RhdGUuXFxuKyAqIEBhdHRyX2xpc3RfbG9jazogU2VyaWFsaXplcyBhdHRyaWJ1dGUgbGlzdCBwb2ludGVyIHVwZGF0ZXMgd2l0aCBsb29rdXBzLlxcbiAgKiBAYXR0cl9saXN0X3NpemU6IExlbmd0aCBvZiBhdHRyaWJ1dGUgbGlzdCB2YWx1ZSBpbiBieXRlcy5cXG4gICogQGF0dHJfbGlzdDogQXR0cmlidXRlIGxpc3QgdmFsdWUgaXRzZWxmLlxcbiAgKlxcbkBAIC0xMTgsNiArMTIxLDcgQEAgc3RydWN0IG50ZnNfaW5vZGUge1xcbiBcXHRpbnQgZm9saW9fb2ZzO1xcbiBcXHRzNjQgbWZ0X2xjblsyXTtcXG4gXFx0dW5zaWduZWQgaW50IG1mdF9sY25fY291bnQ7XFxuK1xcdHN0cnVjdCByd19zZW1hcGhvcmUgYXR0cl9saXN0X2xvY2s7XFxuIFxcdHUzMiBhdHRyX2xpc3Rfc2l6ZTtcXG4gXFx0dTggKmF0dHJfbGlzdDtcXG4gXFx0dW5pb24ge1xcbkBAIC0zMzYsOSArMzQwLDEyIEBAIGludCBudGZzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLFxcbiBcXG4gaW50IG50ZnNfZ2V0X2Jsb2NrX21mdF9yZWNvcmQoc3RydWN0IG50ZnNfaW5vZGUgKm1mdF9uaSwgc3RydWN0IG50ZnNfaW5vZGUgKm5pKTtcXG4gaW50IF9fbnRmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKnZpLCBpbnQgc3luYyk7XFxuK2ludCBudGZzX2lub2RlX2F0dGFjaF9hbGxfZXh0ZW50c19ub2xvY2soc3RydWN0IG50ZnNfaW5vZGUgKm5pKTtcXG4gaW50IG50ZnNfaW5vZGVfYXR0YWNoX2FsbF9leHRlbnRzKHN0cnVjdCBudGZzX2lub2RlICpuaSk7XFxuK2ludCBudGZzX2lub2RlX2FkZF9hdHRybGlzdF9ub2xvY2soc3RydWN0IG50ZnNfaW5vZGUgKm5pKTtcXG4gaW50IG50ZnNfaW5vZGVfYWRkX2F0dHJsaXN0KHN0cnVjdCBudGZzX2lub2RlICpuaSk7XFxuIHZvaWQgbnRmc19kZXN0cm95X2V4dF9pbm9kZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpO1xcbitpbnQgbnRmc19pbm9kZV9mcmVlX3NwYWNlX25vbG9jayhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGludCBzaXplKTtcXG4gaW50IG50ZnNfaW5vZGVfZnJlZV9zcGFjZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGludCBzaXplKTtcXG4gczY0IG50ZnNfaW5vZGVfYXR0cl9wcmVhZChzdHJ1Y3QgaW5vZGUgKnZpLCBzNjQgcG9zLCBzNjQgY291bnQsIHU4ICpidWYpO1xcbiBzNjQgbnRmc19pbm9kZV9hdHRyX3B3cml0ZShzdHJ1Y3QgaW5vZGUgKnZpLCBzNjQgcG9zLCBzNjQgY291bnQsIHU4ICpidWYsXFxuZGlmZiAtLWdpdCBhL2ZzL250ZnMvaW9tYXAuYyBiL2ZzL250ZnMvaW9tYXAuY1xcbmluZGV4IDUyZWVjZjVjYjI1NmFhLi4zYWYyYzZkMzJiMGY3MCAxMDA2NDRcXG4tLS0gYS9mcy9udGZzL2lvbWFwLmNcXG4rKysgYi9mcy9udGZzL2lvbWFwLmNcXG5AQCAtOTUsNyArOTUsNyBAQCBzdGF0aWMgaW50IG50ZnNfcmVhZF9pb21hcF9iZWdpbl9yZXNpZGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb1xcbiBcXHRlbHNlXFxuIFxcdFxcdGJhc2VfbmkgPSBuaTtcXG4gXFxuLVxcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChiYXNlX25pLCBOVUxMKTtcXG4rXFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KGJhc2VfbmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcXG4gXFx0aWYgKCFjdHgpIHtcXG4gXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuQEAgLTE4Nyw2ICsxODcsNyBAQCBzdGF0aWMgaW50IG50ZnNfcmVhZF9pb21hcF9iZWdpbl9ub25fcmVzaWRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldFxcbiBcXHRcXHRib29sIG5lZWRfdW53cml0dGVuKVxcbiB7XFxuIFxcdHN0cnVjdCBudGZzX2lub2RlICpuaSA9IE5URlNfSShpbm9kZSk7XFxuK1xcdHN0cnVjdCBudGZzX2lub2RlICphdHRyX2xvY2tfbmk7XFxuIFxcdHM2NCB2Y247XFxuIFxcdHM2NCBsY247XFxuIFxcdHN0cnVjdCBydW5saXN0X2VsZW1lbnQgKnJsO1xcbkBAIC0xOTcsMjAgKzE5OCwyNCBAQCBzdGF0aWMgaW50IG50ZnNfcmVhZF9pb21hcF9iZWdpbl9ub25fcmVzaWRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldFxcbiBcXHR2Y24gPSBudGZzX2J5dGVzX3RvX2NsdXN0ZXIodm9sLCBvZmZzZXQpO1xcbiBcXHR2Y25fb2ZzID0gbnRmc19ieXRlc190b19jbHVzdGVyX29mZih2b2wsIG9mZnNldCk7XFxuIFxcbitcXHRhdHRyX2xvY2tfbmkgPSBudGZzX2F0dHJfbGlzdF9sb2NrKG5pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XFxuIFxcdGRvd25fd3JpdGUoXFx1MDAyNm5pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbiBcXHRybCA9IG50ZnNfYXR0cl92Y25fdG9fcmwobmksIHZjbiwgXFx1MDAyNmxjbik7XFxuIFxcdGlmIChJU19FUlIocmwpKSB7XFxuIFxcdFxcdHVwX3dyaXRlKFxcdTAwMjZuaS1cXHUwMDNlcnVubGlzdC5sb2NrKTtcXG4rXFx0XFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xcbiBcXHRcXHRyZXR1cm4gUFRSX0VSUihybCk7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChmbGFncyBcXHUwMDI2IElPTUFQX1JFUE9SVCkge1xcbiBcXHRcXHRpZiAobGNuIFxcdTAwM2MgTENOX0hPTEUpIHtcXG4gXFx0XFx0XFx0dXBfd3JpdGUoXFx1MDAyNm5pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbitcXHRcXHRcXHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XFxuIFxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiBcXHRcXHR9XFxuIFxcdH0gZWxzZSBpZiAobGNuIFxcdTAwM2MgTENOX0VOT0VOVCkge1xcbiBcXHRcXHR1cF93cml0ZShcXHUwMDI2bmktXFx1MDAzZXJ1bmxpc3QubG9jayk7XFxuK1xcdFxcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuQEAgLTIzOCw2ICsyNDMsNyBAQCBzdGF0aWMgaW50IG50ZnNfcmVhZF9pb21hcF9iZWdpbl9ub25fcmVzaWRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldFxcbiBcXHRcXHRcXHRcXHRcXFwicnVubGlzdCh2Y24gOiAlbGxkLCBsZW5ndGggOiAlbGxkLCBsY24gOiAlbGxkKSBpcyBjb3JydXB0ZWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdHJsLVxcdTAwM2V2Y24sIHJsLVxcdTAwM2VsZW5ndGgsIHJsLVxcdTAwM2VsY24pO1xcbiBcXHRcXHR1cF93cml0ZShcXHUwMDI2bmktXFx1MDAzZXJ1bmxpc3QubG9jayk7XFxuK1xcdFxcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcdH1cXG4gXFxuQEAgLTI0Niw2ICsyNTIsNyBAQCBzdGF0aWMgaW50IG50ZnNfcmVhZF9pb21hcF9iZWdpbl9ub25fcmVzaWRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldFxcbiBcXHRlbHNlXFxuIFxcdFxcdGlvbWFwLVxcdTAwM2VsZW5ndGggPSBsZW5ndGg7XFxuIFxcdHVwX3dyaXRlKFxcdTAwMjZuaS1cXHUwMDNlcnVubGlzdC5sb2NrKTtcXG4rXFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xcbiBcXG4gXFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBJT01BUF9aRVJPKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHRpb21hcC1cXHUwMDNldHlwZSA9PSBJT01BUF9NQVBQRUQgXFx1MDAyNlxcdTAwMjZcXG5AQCAtMzY1LDYgKzM3Miw3IEBAIHN0YXRpYyBpbnQgbnRmc193cml0ZV9zaW1wbGVfaW9tYXBfYmVnaW5fbm9uX3Jlc2lkZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfXFxuIHtcXG4gXFx0c3RydWN0IG50ZnNfaW5vZGUgKm5pID0gTlRGU19JKGlub2RlKTtcXG4gXFx0c3RydWN0IG50ZnNfdm9sdW1lICp2b2wgPSBuaS1cXHUwMDNldm9sO1xcbitcXHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pO1xcbiBcXHRsb2ZmX3QgdmNuX29mcywgcmxfbGVuZ3RoO1xcbiBcXHRzdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpybCwgKnJsYztcXG4gXFx0Ym9vbCBpc19yZXRyeSA9IGZhbHNlO1xcbkBAIC0zOTAsMTIgKzM5OCwxNCBAQCBzdGF0aWMgaW50IG50ZnNfd3JpdGVfc2ltcGxlX2lvbWFwX2JlZ2luX25vbl9yZXNpZGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX1xcbiBcXHR9XFxuIFxcdHVwX3JlYWQoXFx1MDAyNm5pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbiBcXG4rXFx0YXR0cl9sb2NrX25pID0gbnRmc19hdHRyX2xpc3RfbG9jayhuaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xcbiBcXHRkb3duX3dyaXRlKFxcdTAwMjZuaS1cXHUwMDNlcnVubGlzdC5sb2NrKTtcXG4gcmVtYXBfcmw6XFxuIFxcdC8qIFNlZWsgdG8gZWxlbWVudCBjb250YWluaW5nIHRhcmdldCB2Y24uICovXFxuIFxcdHJsID0gX19udGZzX2F0dHJfZmluZF92Y25fbm9sb2NrKFxcdTAwMjZuaS1cXHUwMDNlcnVubGlzdCwgdmNuKTtcXG4gXFx0aWYgKElTX0VSUihybCkpIHtcXG4gXFx0XFx0dXBfd3JpdGUoXFx1MDAyNm5pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbitcXHRcXHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XFxuIFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bmktXFx1MDAzZW1yZWNfbG9jayk7XFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXHR9XFxuQEAgLTQxNSw2ICs0MjUsNyBAQCBzdGF0aWMgaW50IG50ZnNfd3JpdGVfc2ltcGxlX2lvbWFwX2JlZ2luX25vbl9yZXNpZGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX1xcbiBcXHRcXHRcXHRcXHRcXFwicnVubGlzdCh2Y24gOiAlbGxkLCBsZW5ndGggOiAlbGxkKSBpcyBjb3JydXB0ZWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdHJsLVxcdTAwM2V2Y24sIHJsLVxcdTAwM2VsZW5ndGgpO1xcbiBcXHRcXHR1cF93cml0ZShcXHUwMDI2bmktXFx1MDAzZXJ1bmxpc3QubG9jayk7XFxuK1xcdFxcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcXG4gXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuaS1cXHUwMDNlbXJlY19sb2NrKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcdH1cXG5AQCAtNDI5LDYgKzQ0MCw3IEBAIHN0YXRpYyBpbnQgbnRmc193cml0ZV9zaW1wbGVfaW9tYXBfYmVnaW5fbm9uX3Jlc2lkZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfXFxuIFxcdFxcdFxcdGlmIChtYXhfY2x1X2NvdW50IFxcdTAwM2MgMCkge1xcbiBcXHRcXHRcXHRcXHRlcnIgPSBtYXhfY2x1X2NvdW50O1xcbiBcXHRcXHRcXHRcXHR1cF93cml0ZShcXHUwMDI2bmktXFx1MDAzZXJ1bmxpc3QubG9jayk7XFxuK1xcdFxcdFxcdFxcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcXG4gXFx0XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuaS1cXHUwMDNlbXJlY19sb2NrKTtcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0XFx0fVxcbkBAIC00NDQsNiArNDU2LDcgQEAgc3RhdGljIGludCBudGZzX3dyaXRlX3NpbXBsZV9pb21hcF9iZWdpbl9ub25fcmVzaWRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl9cXG4gXFx0XFx0XFx0XFx0XFx0R0ZQX05PRlMpO1xcbiBcXHRcXHRcXHRpZiAoIXJsYykge1xcbiBcXHRcXHRcXHRcXHR1cF93cml0ZShcXHUwMDI2bmktXFx1MDAzZXJ1bmxpc3QubG9jayk7XFxuK1xcdFxcdFxcdFxcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcXG4gXFx0XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuaS1cXHUwMDNlbXJlY19sb2NrKTtcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdFxcdFxcdH1cXG5AQCAtNDYxLDYgKzQ3NCw3IEBAIHN0YXRpYyBpbnQgbnRmc193cml0ZV9zaW1wbGVfaW9tYXBfYmVnaW5fbm9uX3Jlc2lkZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfXFxuIFxcdFxcdFxcdGlmIChJU19FUlIocmwpKSB7XFxuIFxcdFxcdFxcdFxcdG50ZnNfZXJyb3Iodm9sLVxcdTAwM2VzYiwgXFxcIkZhaWxlZCB0byBtZXJnZSBydW5saXN0c1xcXCIpO1xcbiBcXHRcXHRcXHRcXHR1cF93cml0ZShcXHUwMDI2bmktXFx1MDAzZXJ1bmxpc3QubG9jayk7XFxuK1xcdFxcdFxcdFxcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcXG4gXFx0XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuaS1cXHUwMDNlbXJlY19sb2NrKTtcXG4gXFx0XFx0XFx0XFx0a3ZmcmVlKHJsYyk7XFxuIFxcdFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHJsKTtcXG5AQCAtNDcxLDYgKzQ4NSw3IEBAIHN0YXRpYyBpbnQgbnRmc193cml0ZV9zaW1wbGVfaW9tYXBfYmVnaW5fbm9uX3Jlc2lkZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfXFxuIFxcdFxcdFxcdG5pLVxcdTAwM2VpX2RlYWxsb2NfY2x1c3RlcnMgKz0gbWF4X2NsdV9jb3VudDtcXG4gXFx0XFx0fVxcbiBcXHRcXHR1cF93cml0ZShcXHUwMDI2bmktXFx1MDAzZXJ1bmxpc3QubG9jayk7XFxuK1xcdFxcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcXG4gXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuaS1cXHUwMDNlbXJlY19sb2NrKTtcXG4gXFxuIFxcdFxcdGlmIChsY24gXFx1MDAzYyBMQ05fREVMQUxMT0MpXFxuQEAgLTUyMyw2ICs1MzgsNyBAQCBzdGF0aWMgaW50IG50ZnNfd3JpdGVfc2ltcGxlX2lvbWFwX2JlZ2luX25vbl9yZXNpZGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX1xcbiBcXHRcXHR9XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHVwX3dyaXRlKFxcdTAwMjZuaS1cXHUwMDNlcnVubGlzdC5sb2NrKTtcXG4rXFx0XFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xcbiBcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm5pLVxcdTAwM2VtcmVjX2xvY2spO1xcbiBcXG4gXFx0XFx0aW9tYXAtXFx1MDAzZXR5cGUgPSBJT01BUF9NQVBQRUQ7XFxuQEAgLTU0OSw2ICs1NjUsNyBAQCBzdGF0aWMgaW50IG50ZnNfd3JpdGVfZGFfaW9tYXBfYmVnaW5fbm9uX3Jlc2lkZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIHtcXG4gXFx0c3RydWN0IG50ZnNfaW5vZGUgKm5pID0gTlRGU19JKGlub2RlKTtcXG4gXFx0c3RydWN0IG50ZnNfdm9sdW1lICp2b2wgPSBuaS1cXHUwMDNldm9sO1xcbitcXHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pO1xcbiBcXHRsb2ZmX3QgdmNuX29mcywgcmxfbGVuZ3RoO1xcbiBcXHRzNjQgdmNuLCBzdGFydF9sY24sIGxjbl9jb3VudDtcXG4gXFx0Ym9vbCBiYWxsb2MgPSBmYWxzZSwgdXBkYXRlX21wO1xcbkBAIC01NjEsMTEgKzU3OCwxMyBAQCBzdGF0aWMgaW50IG50ZnNfd3JpdGVfZGFfaW9tYXBfYmVnaW5fbm9uX3Jlc2lkZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcbiBcXHR1cGRhdGVfbXAgPSBudGZzX2lvbWFwX2ZsYWdzIFxcdTAwMjYgKE5URlNfSU9NQVBfRkxBR1NfRElPIHwgTlRGU19JT01BUF9GTEFHU19NS1dSSVRFKSB8fFxcbiBcXHRcXHRcXHROSW5vQXR0cihuaSkgfHwgbmktXFx1MDAzZW1mdF9ubyBcXHUwMDNjIEZJTEVfZmlyc3RfdXNlcjtcXG4rXFx0YXR0cl9sb2NrX25pID0gbnRmc19hdHRyX2xpc3RfbG9jayhuaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcXG4gXFx0ZG93bl93cml0ZShcXHUwMDI2bmktXFx1MDAzZXJ1bmxpc3QubG9jayk7XFxuIFxcdGVyciA9IG50ZnNfYXR0cl9tYXBfY2x1c3RlcihuaSwgdmNuLCBcXHUwMDI2c3RhcnRfbGNuLCBcXHUwMDI2bGNuX2NvdW50LFxcbiBcXHRcXHRcXHRtYXhfY2x1X2NvdW50LCBcXHUwMDI2YmFsbG9jLCB1cGRhdGVfbXAsXFxuIFxcdFxcdFxcdG50ZnNfaW9tYXBfZmxhZ3MgXFx1MDAyNiBOVEZTX0lPTUFQX0ZMQUdTX1dSSVRFQkFDSyk7XFxuIFxcdHVwX3dyaXRlKFxcdTAwMjZuaS1cXHUwMDNlcnVubGlzdC5sb2NrKTtcXG4rXFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuaS1cXHUwMDNlbXJlY19sb2NrKTtcXG4gXFx0aWYgKGVycikge1xcbiBcXHRcXHRuaS1cXHUwMDNlaV9kZWFsbG9jX2NsdXN0ZXJzID0gMDtcXG5AQCAtNjM3LDcgKzY1Niw3IEBAIHN0YXRpYyBpbnQgbnRmc193cml0ZV9pb21hcF9iZWdpbl9yZXNpZGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LFxcbiBcXHRpbnQgZXJyID0gMDtcXG4gXFx0Y2hhciAqa2F0dHI7XFxuIFxcbi1cXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwpO1xcbitcXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcXG4gXFx0aWYgKCFjdHgpIHtcXG4gXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuZGlmZiAtLWdpdCBhL2ZzL250ZnMvbG9nZmlsZS5jIGIvZnMvbnRmcy9sb2dmaWxlLmNcXG5pbmRleCAwMjRkZGVlNDJkYzhmNi4uYmY5NjdlZjhhYjY4YzkgMTAwNjQ0XFxuLS0tIGEvZnMvbnRmcy9sb2dmaWxlLmNcXG4rKysgYi9mcy9udGZzL2xvZ2ZpbGUuY1xcbkBAIC02NDMsNiArNjQzLDcgQEAgYm9vbCBudGZzX2VtcHR5X2xvZ2ZpbGUoc3RydWN0IGlub2RlICpsb2dfdmkpXFxuIFxcdHN0cnVjdCBudGZzX2lub2RlICpsb2dfbmkgPSBOVEZTX0kobG9nX3ZpKTtcXG4gXFx0c3RydWN0IG50ZnNfdm9sdW1lICp2b2wgPSBsb2dfbmktXFx1MDAzZXZvbDtcXG4gXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHZvbC1cXHUwMDNlc2I7XFxuK1xcdHN0cnVjdCBudGZzX2lub2RlICphdHRyX2xvY2tfbmk7XFxuIFxcdHN0cnVjdCBydW5saXN0X2VsZW1lbnQgKnJsO1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXHRpbnQgZXJyO1xcbkBAIC02NjksNiArNjcwLDcgQEAgYm9vbCBudGZzX2VtcHR5X2xvZ2ZpbGUoc3RydWN0IGlub2RlICpsb2dfdmkpXFxuIFxcdFxcdFxcdHZvbC1cXHUwMDNlY2x1c3Rlcl9zaXplX2JpdHM7XFxuIFxcdHJlYWRfdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmxvZ19uaS1cXHUwMDNlc2l6ZV9sb2NrLCBmbGFncyk7XFxuIFxcdHRydW5jYXRlX2lub2RlX3BhZ2VzKGxvZ192aS1cXHUwMDNlaV9tYXBwaW5nLCAwKTtcXG4rXFx0YXR0cl9sb2NrX25pID0gbnRmc19hdHRyX2xpc3RfbG9jayhsb2dfbmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcXG4gXFx0ZG93bl93cml0ZShcXHUwMDI2bG9nX25pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbiBcXHRybCA9IGxvZ19uaS1cXHUwMDNlcnVubGlzdC5ybDtcXG4gXFx0aWYgKHVubGlrZWx5KCFybCB8fCB2Y24gXFx1MDAzYyBybC1cXHUwMDNldmNuIHx8ICFybC1cXHUwMDNlbGVuZ3RoKSkge1xcbkBAIC03NTUsNiArNzU3LDcgQEAgYm9vbCBudGZzX2VtcHR5X2xvZ2ZpbGUoc3RydWN0IGlub2RlICpsb2dfdmkpXFxuIFxcdFxcdH0gd2hpbGUgKHN0YXJ0IFxcdTAwM2MgZW5kKTtcXG4gXFx0fSB3aGlsZSAoKCsrcmwpLVxcdTAwM2V2Y24gXFx1MDAzYyBlbmRfdmNuKTtcXG4gXFx0dXBfd3JpdGUoXFx1MDAyNmxvZ19uaS1cXHUwMDNlcnVubGlzdC5sb2NrKTtcXG4rXFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xcbiBcXHRrdmZyZWUoZW1wdHlfYnVmKTtcXG4gXFx0a2ZyZWUocmEpO1xcbiBcXHR0cnVuY2F0ZV9pbm9kZV9wYWdlcyhsb2dfdmktXFx1MDAzZWlfbWFwcGluZywgMCk7XFxuQEAgLTc3NCw2ICs3NzcsNyBAQCBib29sIG50ZnNfZW1wdHlfbG9nZmlsZShzdHJ1Y3QgaW5vZGUgKmxvZ192aSlcXG4gXFx0a3ZmcmVlKGVtcHR5X2J1Zik7XFxuIFxcdGtmcmVlKHJhKTtcXG4gXFx0dXBfd3JpdGUoXFx1MDAyNmxvZ19uaS1cXHUwMDNlcnVubGlzdC5sb2NrKTtcXG4rXFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xcbiBcXHRudGZzX2Vycm9yKHNiLCBcXFwiRmFpbGVkIHRvIGZpbGwgTG9nRmlsZSB3aXRoIDB4ZmYgYnl0ZXMgKGVycm9yICVkKS5cXFwiLFxcbiBcXHRcXHRcXHQtZXJyKTtcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbmRpZmYgLS1naXQgYS9mcy9udGZzL21mdC5jIGIvZnMvbnRmcy9tZnQuY1xcbmluZGV4IGE1MDE5ZTgwOTUxYjg0Li5mM2UyNzAyMzI1MGNiOSAxMDA2NDRcXG4tLS0gYS9mcy9udGZzL21mdC5jXFxuKysrIGIvZnMvbnRmcy9tZnQuY1xcbkBAIC0xMiw2ICsxMiw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaW8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvbWFwLmhcXHUwMDNlXFxuIFxcbisjaW5jbHVkZSBcXFwiYXR0cmliLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJiaXRtYXAuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImxjbmFsbG9jLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJtZnQuaFxcXCJcXG5AQCAtMTAxNSw3ICsxMDE2LDcgQEAgc3RhdGljIGludCBudGZzX21mdF9hdHRyX2V4dGVuZChzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuIFxcdFxcdGJhc2VfbmkgPSBuaTtcXG4gXFxuIFxcdGlmICghTklub0F0dHJMaXN0KGJhc2VfbmkpKSB7XFxuLVxcdFxcdHJldCA9IG50ZnNfaW5vZGVfYWRkX2F0dHJsaXN0KGJhc2VfbmkpO1xcbitcXHRcXHRyZXQgPSBudGZzX2lub2RlX2FkZF9hdHRybGlzdF9ub2xvY2soYmFzZV9uaSk7XFxuIFxcdFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0XFx0cHJfZXJyKFxcXCJDYW4gbm90IGFkZCBhdHRybGlzdFxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbkBAIC0xMDI1LDcgKzEwMjYsNyBAQCBzdGF0aWMgaW50IG50ZnNfbWZ0X2F0dHJfZXh0ZW5kKHN0cnVjdCBudGZzX2lub2RlICpuaSlcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRyZXQgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIDApO1xcbitcXHRyZXQgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNfbm9sb2NrKG5pLCAwKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cHJfZXJyKFxcXCJNUCB1cGRhdGUgZmFpbGVkXFxcXG5cXFwiKTtcXG4gXFxuQEAgLTEwNTcsNiArMTA1OCw3IEBAIHN0YXRpYyBpbnQgbnRmc19tZnRfYml0bWFwX2V4dGVuZF9hbGxvY2F0aW9uX25vbG9jayhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbClcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4gXFx0c3RydWN0IG50ZnNfaW5vZGUgKm1mdF9uaSwgKm1mdGJtcF9uaTtcXG4rXFx0c3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTtcXG4gXFx0c3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqcmwsICpybDIgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eCA9IE5VTEw7XFxuIFxcdHN0cnVjdCBtZnRfcmVjb3JkICptcmVjO1xcbkBAIC0xMDc1LDYgKzEwNzcsNyBAQCBzdGF0aWMgaW50IG50ZnNfbWZ0X2JpdG1hcF9leHRlbmRfYWxsb2NhdGlvbl9ub2xvY2soc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpXFxuIFxcdG50ZnNfZGVidWcoXFxcIkV4dGVuZGluZyBtZnQgYml0bWFwIGFsbG9jYXRpb24uXFxcIik7XFxuIFxcdG1mdF9uaSA9IE5URlNfSSh2b2wtXFx1MDAzZW1mdF9pbm8pO1xcbiBcXHRtZnRibXBfbmkgPSBOVEZTX0kodm9sLVxcdTAwM2VtZnRibXBfaW5vKTtcXG4rXFx0YXR0cl9sb2NrX25pID0gbnRmc19hdHRyX2xpc3RfbG9jayhtZnRibXBfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XFxuIFxcdC8qXFxuIFxcdCAqIERldGVybWluZSB0aGUgbGFzdCBsY24gb2YgdGhlIG1mdCBiaXRtYXAuICBUaGUgYWxsb2NhdGVkIHNpemUgb2YgdGhlXFxuIFxcdCAqIG1mdCBiaXRtYXAgY2Fubm90IGJlIHplcm8gc28gd2UgYXJlIG9rIHRvIGRvIHRoaXMuXFxuQEAgLTEwODcsNiArMTA5MCw3IEBAIHN0YXRpYyBpbnQgbnRmc19tZnRfYml0bWFwX2V4dGVuZF9hbGxvY2F0aW9uX25vbG9jayhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbClcXG4gXFx0XFx0XFx0TlRGU19CX1RPX0NMVSh2b2wsIGxsIC0gMSksIE5VTEwpO1xcbiBcXHRpZiAoSVNfRVJSKHJsKSB8fCB1bmxpa2VseSghcmwtXFx1MDAzZWxlbmd0aCB8fCBybC1cXHUwMDNlbGNuIFxcdTAwM2MgMCkpIHtcXG4gXFx0XFx0dXBfd3JpdGUoXFx1MDAyNm1mdGJtcF9uaS1cXHUwMDNlcnVubGlzdC5sb2NrKTtcXG4rXFx0XFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcXG4gXFx0XFx0bnRmc19lcnJvcih2b2wtXFx1MDAzZXNiLFxcbiBcXHRcXHRcXHRcXFwiRmFpbGVkIHRvIGRldGVybWluZSBsYXN0IGFsbG9jYXRlZCBjbHVzdGVyIG9mIG1mdCBiaXRtYXAgYXR0cmlidXRlLlxcXCIpO1xcbiBcXHRcXHRpZiAoIUlTX0VSUihybCkpXFxuQEAgLTExMDgsNiArMTExMiw3IEBAIHN0YXRpYyBpbnQgbnRmc19tZnRfYml0bWFwX2V4dGVuZF9hbGxvY2F0aW9uX25vbG9jayhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbClcXG4gXFx0XFx0XFx0bGwgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCwgTlVMTCk7XFxuIFxcdGlmIChJU19FUlIoZm9saW8pKSB7XFxuIFxcdFxcdHVwX3dyaXRlKFxcdTAwMjZtZnRibXBfbmktXFx1MDAzZXJ1bmxpc3QubG9jayk7XFxuK1xcdFxcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XFxuIFxcdFxcdG50ZnNfZXJyb3Iodm9sLVxcdTAwM2VzYiwgXFxcIkZhaWxlZCB0byByZWFkIGZyb20gbGNuIGJpdG1hcC5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIoZm9saW8pO1xcbiBcXHR9XFxuQEAgLTExMzksNiArMTE0NCw3IEBAIHN0YXRpYyBpbnQgbnRmc19tZnRfYml0bWFwX2V4dGVuZF9hbGxvY2F0aW9uX25vbG9jayhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbClcXG4gXFx0XFx0XFx0XFx0dHJ1ZSwgZmFsc2UsIGZhbHNlKTtcXG4gXFx0XFx0aWYgKElTX0VSUihybDIpKSB7XFxuIFxcdFxcdFxcdHVwX3dyaXRlKFxcdTAwMjZtZnRibXBfbmktXFx1MDAzZXJ1bmxpc3QubG9jayk7XFxuK1xcdFxcdFxcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XFxuIFxcdFxcdFxcdG50ZnNfZXJyb3Iodm9sLVxcdTAwM2VzYixcXG4gXFx0XFx0XFx0XFx0XFx0XFxcIkZhaWxlZCB0byBhbGxvY2F0ZSBhIGNsdXN0ZXIgZm9yIHRoZSBtZnQgYml0bWFwLlxcXCIpO1xcbiBcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihybDIpO1xcbkBAIC0xMTQ2LDYgKzExNTIsNyBAQCBzdGF0aWMgaW50IG50ZnNfbWZ0X2JpdG1hcF9leHRlbmRfYWxsb2NhdGlvbl9ub2xvY2soc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpXFxuIFxcdFxcdHJsID0gbnRmc19ydW5saXN0c19tZXJnZShcXHUwMDI2bWZ0Ym1wX25pLVxcdTAwM2VydW5saXN0LCBybDIsIDAsIFxcdTAwMjZuZXdfcmxfY291bnQpO1xcbiBcXHRcXHRpZiAoSVNfRVJSKHJsKSkge1xcbiBcXHRcXHRcXHR1cF93cml0ZShcXHUwMDI2bWZ0Ym1wX25pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbitcXHRcXHRcXHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xcbiBcXHRcXHRcXHRudGZzX2Vycm9yKHZvbC1cXHUwMDNlc2IsIFxcXCJGYWlsZWQgdG8gbWVyZ2UgcnVubGlzdHMgZm9yIG1mdCBiaXRtYXAuXFxcIik7XFxuIFxcdFxcdFxcdGlmIChudGZzX2NsdXN0ZXJfZnJlZV9mcm9tX3JsKHZvbCwgcmwyKSkge1xcbiBcXHRcXHRcXHRcXHRudGZzX2Vycm9yKHZvbC1cXHUwMDNlc2IsIFxcXCJGYWlsZWQgdG8gZGVhbGxvY2F0ZSBhbGxvY2F0ZWQgY2x1c3Rlci4lc1xcXCIsXFxuQEAgLTExNzMsNyArMTE4MCw3IEBAIHN0YXRpYyBpbnQgbnRmc19tZnRfYml0bWFwX2V4dGVuZF9hbGxvY2F0aW9uX25vbG9jayhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbClcXG4gXFx0XFx0cmV0ID0gUFRSX0VSUihtcmVjKTtcXG4gXFx0XFx0Z290byB1bmRvX2FsbG9jO1xcbiBcXHR9XFxuLVxcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChtZnRfbmksIG1yZWMpO1xcbitcXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobWZ0X25pLCBtcmVjLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfTk9ORSk7XFxuIFxcdGlmICh1bmxpa2VseSghY3R4KSkge1xcbiBcXHRcXHRudGZzX2Vycm9yKHZvbC1cXHUwMDNlc2IsIFxcXCJGYWlsZWQgdG8gZ2V0IHNlYXJjaCBjb250ZXh0LlxcXCIpO1xcbiBcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbkBAIC0xMjY1LDYgKzEyNzIsNyBAQCBzdGF0aWMgaW50IG50ZnNfbWZ0X2JpdG1hcF9leHRlbmRfYWxsb2NhdGlvbl9ub2xvY2soc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpXFxuIFxcdG50ZnNfYXR0cl9wdXRfc2VhcmNoX2N0eChjdHgpO1xcbiBcXHR1bm1hcF9tZnRfcmVjb3JkKG1mdF9uaSk7XFxuIFxcdHVwX3dyaXRlKFxcdTAwMjZtZnRibXBfbmktXFx1MDAzZXJ1bmxpc3QubG9jayk7XFxuK1xcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XFxuIFxcdG50ZnNfZGVidWcoXFxcIkRvbmUuXFxcIik7XFxuIFxcdHJldHVybiAwO1xcbiBcXG5AQCAtMTI4MSw2ICsxMjg5LDcgQEAgc3RhdGljIGludCBudGZzX21mdF9iaXRtYXBfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxcbiBcXHRcXHRudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoY3R4KTtcXG4gXFx0XFx0dW5tYXBfbWZ0X3JlY29yZChtZnRfbmkpO1xcbiBcXHRcXHR1cF93cml0ZShcXHUwMDI2bWZ0Ym1wX25pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbitcXHRcXHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBUaGUgb25seSB0aGluZyB0aGF0IGlzIG5vdyB3cm9uZyBpcyAtXFx1MDAzZWFsbG9jYXRlZF9zaXplIG9mIHRoZVxcbiBcXHRcXHQgKiBiYXNlIGF0dHJpYnV0ZSBleHRlbnQgd2hpY2ggY2hrZHNrIHNob3VsZCBiZSBhYmxlIHRvIGZpeC5cXG5AQCAtMTMyNCw3ICsxMzMzLDggQEAgc3RhdGljIGludCBudGZzX21mdF9iaXRtYXBfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxcbiBcXHRcXHRcXHROVm9sU2V0RXJyb3JzKHZvbCk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0bWFya19tZnRfcmVjb3JkX2RpcnR5KGN0eC1cXHUwMDNlbnRmc19pbm8pO1xcbi1cXHR9IGVsc2UgaWYgKHN0YXR1cy5tcF9leHRlbmRlZCBcXHUwMDI2XFx1MDAyNiBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobWZ0Ym1wX25pLCAwKSkge1xcbitcXHR9IGVsc2UgaWYgKHN0YXR1cy5tcF9leHRlbmRlZCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNfbm9sb2NrKG1mdGJtcF9uaSwgMCkpIHtcXG4gXFx0XFx0bnRmc19lcnJvcih2b2wtXFx1MDAzZXNiLCBcXFwiRmFpbGVkIHRvIHJlc3RvcmUgbWFwcGluZyBwYWlycy4lc1xcXCIsIGVzKTtcXG4gXFx0XFx0TlZvbFNldEVycm9ycyh2b2wpO1xcbiBcXHR9XFxuQEAgLTEzMzMsNiArMTM0Myw3IEBAIHN0YXRpYyBpbnQgbnRmc19tZnRfYml0bWFwX2V4dGVuZF9hbGxvY2F0aW9uX25vbG9jayhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbClcXG4gXFx0aWYgKCFJU19FUlIobXJlYykpXFxuIFxcdFxcdHVubWFwX21mdF9yZWNvcmQobWZ0X25pKTtcXG4gXFx0dXBfd3JpdGUoXFx1MDAyNm1mdGJtcF9uaS1cXHUwMDNlcnVubGlzdC5sb2NrKTtcXG4rXFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5AQCAtMTM3MSw3ICsxMzgyLDcgQEAgc3RhdGljIGludCBudGZzX21mdF9iaXRtYXBfZXh0ZW5kX2luaXRpYWxpemVkX25vbG9jayhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbClcXG4gXFx0XFx0bnRmc19lcnJvcih2b2wtXFx1MDAzZXNiLCBcXFwiRmFpbGVkIHRvIG1hcCBtZnQgcmVjb3JkLlxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gUFRSX0VSUihtcmVjKTtcXG4gXFx0fVxcbi1cXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobWZ0X25pLCBtcmVjKTtcXG4rXFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG1mdF9uaSwgbXJlYywgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xcbiBcXHRpZiAodW5saWtlbHkoIWN0eCkpIHtcXG4gXFx0XFx0bnRmc19lcnJvcih2b2wtXFx1MDAzZXNiLCBcXFwiRmFpbGVkIHRvIGdldCBzZWFyY2ggY29udGV4dC5cXFwiKTtcXG4gXFx0XFx0cmV0ID0gLUVOT01FTTtcXG5AQCAtMTQyMyw3ICsxNDM0LDcgQEAgc3RhdGljIGludCBudGZzX21mdF9iaXRtYXBfZXh0ZW5kX2luaXRpYWxpemVkX25vbG9jayhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbClcXG4gXFx0XFx0TlZvbFNldEVycm9ycyh2b2wpO1xcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuLVxcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChtZnRfbmksIG1yZWMpO1xcbitcXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobWZ0X25pLCBtcmVjLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XFxuIFxcdGlmICh1bmxpa2VseSghY3R4KSkge1xcbiBcXHRcXHRudGZzX2Vycm9yKHZvbC1cXHUwMDNlc2IsIFxcXCJGYWlsZWQgdG8gZ2V0IHNlYXJjaCBjb250ZXh0LiVzXFxcIiwgZXMpO1xcbiBcXHRcXHROVm9sU2V0RXJyb3JzKHZvbCk7XFxuQEAgLTE0OTAsNiArMTUwMSw3IEBAIHN0YXRpYyBpbnQgbnRmc19tZnRfZGF0YV9leHRlbmRfYWxsb2NhdGlvbl9ub2xvY2soc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpXFxuIFxcdHM2NCBtaW5fbnIsIG5yLCBsbDtcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0c3RydWN0IG50ZnNfaW5vZGUgKm1mdF9uaTtcXG4rXFx0c3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTtcXG4gXFx0c3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqcmwsICpybDI7XFxuIFxcdHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4ID0gTlVMTDtcXG4gXFx0c3RydWN0IG1mdF9yZWNvcmQgKm1yZWM7XFxuQEAgLTE1MDEsNiArMTUxMyw3IEBAIHN0YXRpYyBpbnQgbnRmc19tZnRfZGF0YV9leHRlbmRfYWxsb2NhdGlvbl9ub2xvY2soc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpXFxuIFxcbiBcXHRudGZzX2RlYnVnKFxcXCJFeHRlbmRpbmcgbWZ0IGRhdGEgYWxsb2NhdGlvbi5cXFwiKTtcXG4gXFx0bWZ0X25pID0gTlRGU19JKHZvbC1cXHUwMDNlbWZ0X2lubyk7XFxuK1xcdGF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobWZ0X25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xcbiBcXHQvKlxcbiBcXHQgKiBEZXRlcm1pbmUgdGhlIHByZWZlcnJlZCBhbGxvY2F0aW9uIGxvY2F0aW9uLCBpLmUuIHRoZSBsYXN0IGxjbiBvZlxcbiBcXHQgKiB0aGUgbWZ0IGRhdGEgYXR0cmlidXRlLiAgVGhlIGFsbG9jYXRlZCBzaXplIG9mIHRoZSBtZnQgZGF0YVxcbkBAIC0xNTE0LDYgKzE1MjcsNyBAQCBzdGF0aWMgaW50IG50ZnNfbWZ0X2RhdGFfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxcbiBcXHRcXHRcXHROVEZTX0JfVE9fQ0xVKHZvbCwgbGwgLSAxKSwgTlVMTCk7XFxuIFxcdGlmIChJU19FUlIocmwpIHx8IHVubGlrZWx5KCFybC1cXHUwMDNlbGVuZ3RoIHx8IHJsLVxcdTAwM2VsY24gXFx1MDAzYyAwKSkge1xcbiBcXHRcXHR1cF93cml0ZShcXHUwMDI2bWZ0X25pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbitcXHRcXHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xcbiBcXHRcXHRudGZzX2Vycm9yKHZvbC1cXHUwMDNlc2IsXFxuIFxcdFxcdFxcdFxcXCJGYWlsZWQgdG8gZGV0ZXJtaW5lIGxhc3QgYWxsb2NhdGVkIGNsdXN0ZXIgb2YgbWZ0IGRhdGEgYXR0cmlidXRlLlxcXCIpO1xcbiBcXHRcXHRpZiAoIUlTX0VSUihybCkpXFxuQEAgLTE1NDQsNiArMTU1OCw3IEBAIHN0YXRpYyBpbnQgbnRmc19tZnRfZGF0YV9leHRlbmRfYWxsb2NhdGlvbl9ub2xvY2soc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpXFxuIFxcdFxcdFxcdG50ZnNfd2FybmluZyh2b2wtXFx1MDAzZXNiLFxcbiBcXHRcXHRcXHRcXHRcXFwiQ2Fubm90IGFsbG9jYXRlIG1mdCByZWNvcmQgYmVjYXVzZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgaW5vZGVzICgyXjMyKSBoYXMgYWxyZWFkeSBiZWVuIHJlYWNoZWQuXFxcIik7XFxuIFxcdFxcdFxcdHVwX3dyaXRlKFxcdTAwMjZtZnRfbmktXFx1MDAzZXJ1bmxpc3QubG9jayk7XFxuK1xcdFxcdFxcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XFxuIFxcdFxcdFxcdHJldHVybiAtRU5PU1BDO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG5AQCAtMTU2OCw2ICsxNTgzLDcgQEAgc3RhdGljIGludCBudGZzX21mdF9kYXRhX2V4dGVuZF9hbGxvY2F0aW9uX25vbG9jayhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbClcXG4gXFx0XFx0XFx0bnRmc19lcnJvcih2b2wtXFx1MDAzZXNiLFxcbiBcXHRcXHRcXHRcXHRcXFwiRmFpbGVkIHRvIGFsbG9jYXRlIHRoZSBtaW5pbWFsIG51bWJlciBvZiBjbHVzdGVycyAoJWxsaSkgZm9yIHRoZSBtZnQgZGF0YSBhdHRyaWJ1dGUuXFxcIixcXG4gXFx0XFx0XFx0XFx0bnIpO1xcbitcXHRcXHRcXHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xcbiBcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihybDIpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdC8qXFxuQEAgLTE1ODMsNiArMTU5OSw3IEBAIHN0YXRpYyBpbnQgbnRmc19tZnRfZGF0YV9leHRlbmRfYWxsb2NhdGlvbl9ub2xvY2soc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpXFxuIFxcdHJsID0gbnRmc19ydW5saXN0c19tZXJnZShcXHUwMDI2bWZ0X25pLVxcdTAwM2VydW5saXN0LCBybDIsIDAsIFxcdTAwMjZuZXdfcmxfY291bnQpO1xcbiBcXHRpZiAoSVNfRVJSKHJsKSkge1xcbiBcXHRcXHR1cF93cml0ZShcXHUwMDI2bWZ0X25pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbitcXHRcXHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xcbiBcXHRcXHRudGZzX2Vycm9yKHZvbC1cXHUwMDNlc2IsIFxcXCJGYWlsZWQgdG8gbWVyZ2UgcnVubGlzdHMgZm9yIG1mdCBkYXRhIGF0dHJpYnV0ZS5cXFwiKTtcXG4gXFx0XFx0aWYgKG50ZnNfY2x1c3Rlcl9mcmVlX2Zyb21fcmwodm9sLCBybDIpKSB7XFxuIFxcdFxcdFxcdG50ZnNfZXJyb3Iodm9sLVxcdTAwM2VzYixcXG5AQCAtMTYwOCw3ICsxNjI1LDcgQEAgc3RhdGljIGludCBudGZzX21mdF9kYXRhX2V4dGVuZF9hbGxvY2F0aW9uX25vbG9jayhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbClcXG4gXFx0XFx0ZG93bl93cml0ZShcXHUwMDI2bWZ0X25pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbiBcXHRcXHRnb3RvIHVuZG9fYWxsb2M7XFxuIFxcdH1cXG4tXFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG1mdF9uaSwgbXJlYyk7XFxuK1xcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChtZnRfbmksIG1yZWMsIE5URlNfQVRUUl9DVFhfTE9DS19OT05FKTtcXG4gXFx0aWYgKHVubGlrZWx5KCFjdHgpKSB7XFxuIFxcdFxcdG50ZnNfZXJyb3Iodm9sLVxcdTAwM2VzYiwgXFxcIkZhaWxlZCB0byBnZXQgc2VhcmNoIGNvbnRleHQuXFxcIik7XFxuIFxcdFxcdHJldCA9IC1FTk9NRU07XFxuQEAgLTE3MDQsNiArMTcyMSw3IEBAIHN0YXRpYyBpbnQgbnRmc19tZnRfZGF0YV9leHRlbmRfYWxsb2NhdGlvbl9ub2xvY2soc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpXFxuIFxcdG50ZnNfYXR0cl9wdXRfc2VhcmNoX2N0eChjdHgpO1xcbiBcXHR1bm1hcF9tZnRfcmVjb3JkKG1mdF9uaSk7XFxuIFxcdG50ZnNfZGVidWcoXFxcIkRvbmUuXFxcIik7XFxuK1xcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XFxuIFxcdHJldHVybiAwO1xcbiByZXN0b3JlX3VuZG9fYWxsb2M6XFxuIFxcdG50ZnNfYXR0cl9yZWluaXRfc2VhcmNoX2N0eChjdHgpO1xcbkBAIC0xNzE3LDYgKzE3MzUsNyBAQCBzdGF0aWMgaW50IG50ZnNfbWZ0X2RhdGFfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxcbiBcXHRcXHRudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoY3R4KTtcXG4gXFx0XFx0dW5tYXBfbWZ0X3JlY29yZChtZnRfbmkpO1xcbiBcXHRcXHR1cF93cml0ZShcXHUwMDI2bWZ0X25pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbitcXHRcXHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBUaGUgb25seSB0aGluZyB0aGF0IGlzIG5vdyB3cm9uZyBpcyAtXFx1MDAzZWFsbG9jYXRlZF9zaXplIG9mIHRoZVxcbiBcXHRcXHQgKiBiYXNlIGF0dHJpYnV0ZSBleHRlbnQgd2hpY2ggY2hrZHNrIHNob3VsZCBiZSBhYmxlIHRvIGZpeC5cXG5AQCAtMTczNiw3ICsxNzU1LDcgQEAgc3RhdGljIGludCBudGZzX21mdF9kYXRhX2V4dGVuZF9hbGxvY2F0aW9uX25vbG9jayhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbClcXG4gXFx0XFx0bnRmc19lcnJvcih2b2wtXFx1MDAzZXNiLCBcXFwiRmFpbGVkIHRvIHRydW5jYXRlIG1mdCBkYXRhIGF0dHJpYnV0ZSBydW5saXN0LiVzXFxcIiwgZXMpO1xcbiBcXHRcXHROVm9sU2V0RXJyb3JzKHZvbCk7XFxuIFxcdH1cXG4tXFx0aWYgKG1wX2V4dGVuZGVkIFxcdTAwMjZcXHUwMDI2IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhtZnRfbmksIDApKSB7XFxuK1xcdGlmIChtcF9leHRlbmRlZCBcXHUwMDI2XFx1MDAyNiBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNfbm9sb2NrKG1mdF9uaSwgMCkpIHtcXG4gXFx0XFx0bnRmc19lcnJvcih2b2wtXFx1MDAzZXNiLCBcXFwiRmFpbGVkIHRvIHJlc3RvcmUgbWFwcGluZyBwYWlycy4lc1xcXCIsXFxuIFxcdFxcdFxcdCAgIGVzKTtcXG4gXFx0XFx0TlZvbFNldEVycm9ycyh2b2wpO1xcbkBAIC0xNzY1LDYgKzE3ODQsNyBAQCBzdGF0aWMgaW50IG50ZnNfbWZ0X2RhdGFfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxcbiBcXHR9XFxuIFxcdGlmICghSVNfRVJSKG1yZWMpKVxcbiBcXHRcXHR1bm1hcF9tZnRfcmVjb3JkKG1mdF9uaSk7XFxuK1xcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuQEAgLTIyNDgsNyArMjI2OCw3IEBAIGludCBudGZzX21mdF9yZWNvcmRfYWxsb2Moc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsIGNvbnN0IGludCBtb2RlLFxcbiBcXHRcXHRlcnIgPSBQVFJfRVJSKG0pO1xcbiBcXHRcXHRnb3RvIHVuZG9fZGF0YV9pbml0O1xcbiBcXHR9XFxuLVxcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChtZnRfbmksIG0pO1xcbitcXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobWZ0X25pLCBtLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XFxuIFxcdGlmICh1bmxpa2VseSghY3R4KSkge1xcbiBcXHRcXHRudGZzX2Vycm9yKHZvbC1cXHUwMDNlc2IsIFxcXCJGYWlsZWQgdG8gZ2V0IHNlYXJjaCBjb250ZXh0LlxcXCIpO1xcbiBcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbkBAIC0yNTkzLDE0ICsyNjEzLDE3IEBAIGludCBudGZzX21mdF9yZWNvcmRfZnJlZShzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxcbiBzdGF0aWMgczY0IGxjbl9mcm9tX2luZGV4KHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgaW5kZXgpXFxuIHtcXG4rXFx0c3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTtcXG4gXFx0czY0IHZjbjtcXG4gXFx0czY0IGxjbjtcXG4gXFxuIFxcdHZjbiA9IG50ZnNfcGlkeF90b19jbHVzdGVyKHZvbCwgaW5kZXgpO1xcbiBcXG4rXFx0YXR0cl9sb2NrX25pID0gbnRmc19hdHRyX2xpc3RfbG9jayhuaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xcbiBcXHRkb3duX3JlYWQoXFx1MDAyNm5pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbiBcXHRsY24gPSBudGZzX2F0dHJfdmNuX3RvX2xjbl9ub2xvY2sobmksIHZjbiwgZmFsc2UpO1xcbiBcXHR1cF9yZWFkKFxcdTAwMjZuaS1cXHUwMDNlcnVubGlzdC5sb2NrKTtcXG4rXFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xcbiBcXG4gXFx0cmV0dXJuIGxjbjtcXG4gfVxcbkBAIC0yNzAwLDE0ICsyNzIzLDIwIEBAIHN0YXRpYyBpbnQgbnRmc193cml0ZV9tZnRfYmxvY2soc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3XFxuIFxcdFxcdFxcdFxcdGJpbyA9IE5VTEw7XFxuIFxcdFxcdFxcdH1cXG4gXFxuLVxcdFxcdFxcdGlmICh2b2wtXFx1MDAzZWNsdXN0ZXJfc2l6ZSBcXHUwMDNjIGZvbGlvX3NpemUoZm9saW8pKSB7XFxuLVxcdFxcdFxcdFxcdGRvd25fd3JpdGUoXFx1MDAyNm5pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbi1cXHRcXHRcXHRcXHRybCA9IG50ZnNfYXR0cl92Y25fdG9fcmwobmksIHZjbl9vZmYsIFxcdTAwMjZsY24pO1xcbi1cXHRcXHRcXHRcXHR1cF93cml0ZShcXHUwMDI2bmktXFx1MDAzZXJ1bmxpc3QubG9jayk7XFxuLVxcdFxcdFxcdFxcdGlmIChJU19FUlIocmwpIHx8IGxjbiBcXHUwMDNjIDApIHtcXG4tXFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVJTztcXG4tXFx0XFx0XFx0XFx0XFx0Z290byB1bm1fZG9uZTtcXG4tXFx0XFx0XFx0XFx0fVxcbitcXHRcXHRcXHRcXHRpZiAodm9sLVxcdTAwM2VjbHVzdGVyX3NpemUgXFx1MDAzYyBmb2xpb19zaXplKGZvbGlvKSkge1xcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pO1xcbitcXHRcXHRcXHRcXHRcXHRlbnVtIG50ZnNfYXR0cl9zZWFyY2hfY3R4X2xvY2tfbW9kZSBtb2RlO1xcbitcXG4rXFx0XFx0XFx0XFx0XFx0bW9kZSA9IE5URlNfQVRUUl9DVFhfTE9DS19SRUFEO1xcbitcXHRcXHRcXHRcXHRcXHRhdHRyX2xvY2tfbmkgPSBudGZzX2F0dHJfbGlzdF9sb2NrKG5pLCBtb2RlKTtcXG4rXFx0XFx0XFx0XFx0XFx0ZG93bl93cml0ZShcXHUwMDI2bmktXFx1MDAzZXJ1bmxpc3QubG9jayk7XFxuK1xcdFxcdFxcdFxcdFxcdHJsID0gbnRmc19hdHRyX3Zjbl90b19ybChuaSwgdmNuX29mZiwgXFx1MDAyNmxjbik7XFxuK1xcdFxcdFxcdFxcdFxcdHVwX3dyaXRlKFxcdTAwMjZuaS1cXHUwMDNlcnVubGlzdC5sb2NrKTtcXG4rXFx0XFx0XFx0XFx0XFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgbW9kZSk7XFxuK1xcdFxcdFxcdFxcdFxcdGlmIChJU19FUlIocmwpIHx8IGxjbiBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVJTztcXG4rXFx0XFx0XFx0XFx0XFx0XFx0Z290byB1bm1fZG9uZTtcXG4rXFx0XFx0XFx0XFx0XFx0fVxcbiBcXG4gXFx0XFx0XFx0XFx0aWYgKGJpbyBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHRcXHQgICAoYmlvX2VuZF9zZWN0b3IoYmlvKSBcXHUwMDNlXFx1MDAzZSAodm9sLVxcdTAwM2VjbHVzdGVyX3NpemVfYml0cyAtIDkpKSAhPVxcbmRpZmYgLS1naXQgYS9mcy9udGZzL25hbWVpLmMgYi9mcy9udGZzL25hbWVpLmNcXG5pbmRleCBhMTk2MjZhMTM1YmQ3Zi4uNzNkMDg3Yjc3OGMwNDMgMTAwNjQ0XFxuLS0tIGEvZnMvbnRmcy9uYW1laS5jXFxuKysrIGIvZnMvbnRmcy9uYW1laS5jXFxuQEAgLTI2Niw3ICsyNjYsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbnRmc19sb29rdXAoc3RydWN0IGlub2RlICpkaXJfaW5vLCBzdHJ1Y3QgZGVudHJ5ICpkZW50LFxcbiBcXHRcXHRcXHRcXHRjdHggPSBOVUxMO1xcbiBcXHRcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuIFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBtKTtcXG4rXFx0XFx0XFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBtLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XFxuIFxcdFxcdFxcdGlmICh1bmxpa2VseSghY3R4KSkge1xcbiBcXHRcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiBcXHRcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuQEAgLTg1OCw3ICs4NTgsNyBAQCBzdGF0aWMgaW50IG50ZnNfZGVsZXRlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgc3RydWN0IG50ZnNfaW5vZGUgKmRpcl9uaSxcXG4gXFx0ICogSWYgZmlsZW5hbWUgaW4gRE9TIG9yIGluIFdJTjMyIG5hbWVzcGFjZSwgdGhlbiByZW1vdmUgRE9TIG5hbWUgZmlyc3QsXFxuIFxcdCAqIG9ubHkgdGhlbiByZW1vdmUgV0lOMzIgbmFtZS5cXG4gXFx0ICovXFxuLVxcdGFjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwpO1xcbitcXHRhY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xcbiBcXHRpZiAoIWFjdHgpIHtcXG4gXFx0XFx0bnRmc19lcnJvcihzYiwgXFxcIiVzLCBGYWlsZWQgdG8gZ2V0IHNlYXJjaCBjb250ZXh0XFxcIiwgX19mdW5jX18pO1xcbiBcXHRcXHRpZiAobmVlZF9sb2NrKSB7XFxuQEAgLTE2MDYsNyArMTYwNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpudGZzX2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqY2hpbGRfZGVudClcXG4gXFx0aWYgKElTX0VSUihtcmVjKSlcXG4gXFx0XFx0cmV0dXJuIEVSUl9DQVNUKG1yZWMpO1xcbiBcXHQvKiBGaW5kIHRoZSBmaXJzdCBmaWxlIG5hbWUgYXR0cmlidXRlIGluIHRoZSBtZnQgcmVjb3JkLiAqL1xcbi1cXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIG1yZWMpO1xcbitcXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIG1yZWMsIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcXG4gXFx0aWYgKHVubGlrZWx5KCFjdHgpKSB7XFxuIFxcdFxcdHVubWFwX21mdF9yZWNvcmQobmkpO1xcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9zdXBlci5jIGIvZnMvbnRmcy9zdXBlci5jXFxuaW5kZXggOGFiZTdiZWU0YzBkOWIuLjZhZjI0ZmJlYjkxOGRmIDEwMDY0NFxcbi0tLSBhL2ZzL250ZnMvc3VwZXIuY1xcbisrKyBiL2ZzL250ZnMvc3VwZXIuY1xcbkBAIC0zODAsNyArMzgwLDcgQEAgc3RhdGljIGludCBudGZzX3dyaXRlX3ZvbHVtZV9mbGFncyhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwgY29uc3QgX19sZTE2IGZsYWdzKVxcbiBcXHRpZiAodm9sLVxcdTAwM2V2b2xfZmxhZ3MgPT0gZmxhZ3MpXFxuIFxcdFxcdGdvdG8gZG9uZTtcXG4gXFxuLVxcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCk7XFxuK1xcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xcbiBcXHRpZiAoIWN0eCkge1xcbiBcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiBcXHRcXHRnb3RvIHB1dF91bm1fZXJyX291dDtcXG5AQCAtNDc2LDcgKzQ3Niw3IEBAIGludCBudGZzX3dyaXRlX3ZvbHVtZV9sYWJlbChzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwgY2hhciAqbGFiZWwpXFxuIFxcdH1cXG4gXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNnZvbF9uaS1cXHUwMDNlbXJlY19sb2NrKTtcXG4tXFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KHZvbF9uaSwgTlVMTCk7XFxuK1xcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eCh2b2xfbmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XFxuIFxcdGlmICghY3R4KSB7XFxuIFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIFxcdFxcdGdvdG8gb3V0O1xcbkBAIC0xNDgxLDcgKzE0ODEsNyBAQCBzdGF0aWMgYm9vbCBsb2FkX3N5c3RlbV9maWxlcyhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbClcXG4gXFx0XFx0Z290byB2b2x1bWVfZmFpbGVkO1xcbiBcXHR9XFxuIFxcbi1cXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoTlRGU19JKHZvbC1cXHUwMDNldm9sX2lubyksIG0pO1xcbitcXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoTlRGU19JKHZvbC1cXHUwMDNldm9sX2lubyksIG0sIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcXG4gXFx0aWYgKCFjdHgpIHtcXG4gXFx0XFx0bnRmc19lcnJvcihzYiwgXFxcIkZhaWxlZCB0byBnZXQgYXR0cmlidXRlIHNlYXJjaCBjb250ZXh0LlxcXCIpO1xcbiBcXHRcXHRnb3RvIGdldF9jdHhfdm9sX2ZhaWxlZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTU6NTEuNDkyMjM4OTAxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjMyMDMyMjAxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnRmc19hdHRyX2xpc3RfbG9ja1wiLFxuICAgIFwibnRmc19hdHRyX2xpc3RfdW5sb2NrXCIsXG4gICAgXCJudGZzX2F0dHJfbG9ja19zZWFyY2hfY3R4XCIsXG4gICAgXCJudGZzX2F0dHJfdW5sb2NrX3NlYXJjaF9jdHhcIixcbiAgICBcIm50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eFwiLFxuICAgIFwibnRmc19hdHRyX3B1dF9zZWFyY2hfY3R4XCIsXG4gICAgXCJudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3RcIixcbiAgICBcIm50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlyc1wiLFxuICAgIFwibnRmc19pbm9kZV9hZGRfYXR0cmxpc3RcIixcbiAgICBcIm50ZnNfaW5vZGVfZnJlZV9zcGFjZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgcmVhZC13cml0ZSBzZW1hcGhvcmUgKGBhdHRyX2xpc3RfbG9ja2ApIHRvIGBzdHJ1Y3QgbnRmc19pbm9kZWAgYW5kIHVzZXMgaXQgdG8gc2VyaWFsaXplIGF0dHJpYnV0ZSBsaXN0IHBvaW50ZXIgdXBkYXRlcyB3aXRoIGxvb2t1cHMgYWNyb3NzIHRoZSBOVEZTIGRyaXZlci4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBsb2NraW5nIHNjaGVtZSBvZiB0aGUgTlRGUyBmaWxlc3lzdGVtLCBhZmZlY3RpbmcgbWFueSBjb3JlIG9wZXJhdGlvbnMgbGlrZSBhdHRyaWJ1dGUgbG9va3VwLCBtYXBwaW5nIHBhaXJzIHVwZGF0ZXMsIGFuZCBleHRlbnQgYXR0YWNobWVudC4gRnV6emluZyBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBuZXcgbG9ja2luZyBkb2Vzbid0IGludHJvZHVjZSBkZWFkbG9ja3Mgb3IgcmFjZSBjb25kaXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA3MzMwN2QxODdmOTI2ODFiMjE1ZTlhNDY0MjQzNzU3MTEwN2Q4YzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyIDE4OjE1OjQ4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9hb3BzLmMgYi9mcy9udGZzL2FvcHMuY1xuaW5kZXggMWZiZjgzMmFkMTY1NDAuLjk4MTc3N2ZmMjQyNzk3IDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9hb3BzLmNcbisrKyBiL2ZzL250ZnMvYW9wcy5jXG5AQCAtMTMxLDYgKzEzMSw3IEBAIHN0YXRpYyBzZWN0b3JfdCBudGZzX2JtYXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHNlY3Rvcl90IGJsb2NrKVxuIFx0czY0IGxjbjtcbiBcdHVuc2lnbmVkIGxvbmcgYmxvY2tzaXplLCBmbGFncztcbiBcdHN0cnVjdCBudGZzX2lub2RlICpuaSA9IE5URlNfSShtYXBwaW5nLVx1MDAzZWhvc3QpO1xuK1x0c3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTtcbiBcdHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sID0gbmktXHUwMDNldm9sO1xuIFx0dW5zaWduZWQgaW50IGRlbHRhO1xuIFx0dW5zaWduZWQgY2hhciBibG9ja3NpemVfYml0cztcbkBAIC0xNjAsMTAgKzE2MSwxMiBAQCBzdGF0aWMgc2VjdG9yX3QgbnRmc19ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibG9jaylcbiBcdCAqL1xuIFx0aWYgKHVubGlrZWx5KG9mcyBcdTAwM2U9IHNpemUgfHwgKG9mcyArIGJsb2Nrc2l6ZSBcdTAwM2Ugc2l6ZSBcdTAwMjZcdTAwMjYgc2l6ZSBcdTAwM2MgaV9zaXplKSkpXG4gXHRcdGdvdG8gaG9sZTtcbitcdGF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdGRvd25fcmVhZChcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuIFx0bGNuID0gbnRmc19hdHRyX3Zjbl90b19sY25fbm9sb2NrKG5pLCBudGZzX2J5dGVzX3RvX2NsdXN0ZXIodm9sLCBvZnMpLFxuIFx0XHRcdGZhbHNlKTtcbiBcdHVwX3JlYWQoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbitcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdGlmICh1bmxpa2VseShsY24gXHUwMDNjIExDTl9IT0xFKSkge1xuIFx0XHQvKlxuIFx0XHQgKiBTdGVwIGRvd24gdG8gYW4gaW50ZWdlciB0byBhdm9pZCBnY2MgZG9pbmcgYSBsb25nIGxvbmdcbmRpZmYgLS1naXQgYS9mcy9udGZzL2F0dHJpYi5jIGIvZnMvbnRmcy9hdHRyaWIuY1xuaW5kZXggZGQ4ODI4MDk4NTExODMuLjkwOTZhNTQ4NjUzNTU5IDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9hdHRyaWIuY1xuKysrIGIvZnMvbnRmcy9hdHRyaWIuY1xuQEAgLTEwOCw3ICsxMDgsNyBAQCBpbnQgbnRmc19tYXBfcnVubGlzdF9ub2xvY2soc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgdmNuLCBzdHJ1Y3QgbnRmc19hdHRyX3NlYVxuIFx0XHRtID0gbWFwX21mdF9yZWNvcmQoYmFzZV9uaSk7XG4gXHRcdGlmIChJU19FUlIobSkpXG4gXHRcdFx0cmV0dXJuIFBUUl9FUlIobSk7XG4tXHRcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChiYXNlX25pLCBtKTtcbitcdFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KGJhc2VfbmksIG0sIE5URlNfQVRUUl9DVFhfTE9DS19OT05FKTtcbiBcdFx0aWYgKHVubGlrZWx5KCFjdHgpKSB7XG4gXHRcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0XHRnb3RvIGVycl9vdXQ7XG5AQCAtMzAwLDE0ICszMDAsMTcgQEAgaW50IG50ZnNfbWFwX3J1bmxpc3Rfbm9sb2NrKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IHZjbiwgc3RydWN0IG50ZnNfYXR0cl9zZWFcbiAgKi9cbiBpbnQgbnRmc19tYXBfcnVubGlzdChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCB2Y24pXG4ge1xuK1x0c3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTtcbiBcdGludCBlcnIgPSAwO1xuIFxuK1x0YXR0cl9sb2NrX25pID0gbnRmc19hdHRyX2xpc3RfbG9jayhuaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0ZG93bl93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuIFx0LyogTWFrZSBzdXJlIHNvbWVvbmUgZWxzZSBkaWRuJ3QgZG8gdGhlIHdvcmsgd2hpbGUgd2Ugd2VyZSBzbGVlcGluZy4gKi9cbiBcdGlmIChsaWtlbHkobnRmc19ybF92Y25fdG9fbGNuKG5pLVx1MDAzZXJ1bmxpc3QucmwsIHZjbikgXHUwMDNjPVxuIFx0XHRcdExDTl9STF9OT1RfTUFQUEVEKSlcbiBcdFx0ZXJyID0gbnRmc19tYXBfcnVubGlzdF9ub2xvY2sobmksIHZjbiwgTlVMTCk7XG4gXHR1cF93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuK1x0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtMzE4LDcgKzMyMSw3IEBAIHN0cnVjdCBydW5saXN0X2VsZW1lbnQgKm50ZnNfYXR0cl92Y25fdG9fcmwoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgdmNuLCBzNjRcbiBcdGJvb2wgaXNfcmV0cnkgPSBmYWxzZTtcbiBcbiBcdGlmICghcmwpIHtcbi1cdFx0ZXJyID0gbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0KG5pKTtcbitcdFx0ZXJyID0gbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0X25vbG9jayhuaSk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XG4gXHRcdHJsID0gbmktXHUwMDNlcnVubGlzdC5ybDtcbkBAIC0xNTc5LDYgKzE1ODIsOTMgQEAgaW50IG50ZnNfYXR0cl9sb29rdXAoY29uc3QgX19sZTMyIHR5cGUsIGNvbnN0IF9fbGUxNiAqbmFtZSxcbiBcdFx0XHR2YWwsIHZhbF9sZW4sIGN0eCk7XG4gfVxuIFxuK3N0YXRpYyBzdHJ1Y3QgbnRmc19pbm9kZSAqbnRmc19hdHRyX3NlYXJjaF9sb2NrX2lub2RlKHN0cnVjdCBudGZzX2lub2RlICpuaSlcbit7XG4rXHRpZiAoIW5pKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcdGlmIChOSW5vQXR0cihuaSkpIHtcbitcdFx0aWYgKG5pLVx1MDAzZXR5cGUgPT0gQVRfQVRUUklCVVRFX0xJU1QpXG4rXHRcdFx0cmV0dXJuIE5VTEw7XG4rXHRcdHJldHVybiBuaS1cdTAwM2VleHQuYmFzZV9udGZzX2lubztcbitcdH1cbitcdHJldHVybiBuaTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbnRmc19hdHRyX2xpc3RfYXNzZXJ0X2hlbGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxuK3tcbitcdHN0cnVjdCBudGZzX2lub2RlICpsb2NrX25pID0gbnRmc19hdHRyX3NlYXJjaF9sb2NrX2lub2RlKG5pKTtcbitcbitcdGlmIChsb2NrX25pKVxuK1x0XHRyd3NlbV9hc3NlcnRfaGVsZChcdTAwMjZsb2NrX25pLVx1MDAzZWF0dHJfbGlzdF9sb2NrKTtcbit9XG4rXG4rc3RydWN0IG50ZnNfaW5vZGUgKm50ZnNfYXR0cl9saXN0X2xvY2soc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxuK1x0XHRcdFx0ICAgICAgIGVudW0gbnRmc19hdHRyX3NlYXJjaF9jdHhfbG9ja19tb2RlIGxvY2tfbW9kZSlcbit7XG4rXHRzdHJ1Y3QgbnRmc19pbm9kZSAqbG9ja19uaTtcbitcbitcdGlmIChsb2NrX21vZGUgPT0gTlRGU19BVFRSX0NUWF9MT0NLX05PTkUpIHtcbitcdFx0bnRmc19hdHRyX2xpc3RfYXNzZXJ0X2hlbGQobmkpO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbitcdGxvY2tfbmkgPSBudGZzX2F0dHJfc2VhcmNoX2xvY2tfaW5vZGUobmkpO1xuK1x0aWYgKCFsb2NrX25pKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdGlmIChsb2NrX21vZGUgPT0gTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKVxuK1x0XHRkb3duX3dyaXRlKFx1MDAyNmxvY2tfbmktXHUwMDNlYXR0cl9saXN0X2xvY2spO1xuK1x0ZWxzZVxuK1x0XHRkb3duX3JlYWQoXHUwMDI2bG9ja19uaS1cdTAwM2VhdHRyX2xpc3RfbG9jayk7XG4rXG4rXHRyZXR1cm4gbG9ja19uaTtcbit9XG4rXG4rdm9pZCBudGZzX2F0dHJfbGlzdF91bmxvY2soc3RydWN0IG50ZnNfaW5vZGUgKmxvY2tfbmksXG4rXHRcdFx0ICAgZW51bSBudGZzX2F0dHJfc2VhcmNoX2N0eF9sb2NrX21vZGUgbG9ja19tb2RlKVxuK3tcbitcdGlmICghbG9ja19uaSB8fCBsb2NrX21vZGUgPT0gTlRGU19BVFRSX0NUWF9MT0NLX05PTkUpXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChsb2NrX21vZGUgPT0gTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKVxuK1x0XHR1cF93cml0ZShcdTAwMjZsb2NrX25pLVx1MDAzZWF0dHJfbGlzdF9sb2NrKTtcbitcdGVsc2VcbitcdFx0dXBfcmVhZChcdTAwMjZsb2NrX25pLVx1MDAzZWF0dHJfbGlzdF9sb2NrKTtcbit9XG4rXG4rdm9pZCBudGZzX2F0dHJfbG9ja19zZWFyY2hfY3R4KHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4LFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXG4rXHRcdFx0ICAgICAgIGVudW0gbnRmc19hdHRyX3NlYXJjaF9jdHhfbG9ja19tb2RlIGxvY2tfbW9kZSlcbit7XG4rXHRzdHJ1Y3QgbnRmc19pbm9kZSAqbG9ja19uaTtcbitcbitcdGN0eC1cdTAwM2VhdHRyX2xpc3RfbG9ja19uaSA9IE5VTEw7XG4rXHRjdHgtXHUwMDNlYXR0cl9saXN0X2xvY2tfbW9kZSA9IE5URlNfQVRUUl9DVFhfTE9DS19OT05FO1xuK1xuK1x0aWYgKGxvY2tfbW9kZSA9PSBOVEZTX0FUVFJfQ1RYX0xPQ0tfTk9ORSkge1xuK1x0XHRudGZzX2F0dHJfbGlzdF9hc3NlcnRfaGVsZChuaSk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGxvY2tfbmkgPSBudGZzX2F0dHJfbGlzdF9sb2NrKG5pLCBsb2NrX21vZGUpO1xuK1x0aWYgKCFsb2NrX25pKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRjdHgtXHUwMDNlYXR0cl9saXN0X2xvY2tfbmkgPSBsb2NrX25pO1xuK1x0Y3R4LVx1MDAzZWF0dHJfbGlzdF9sb2NrX21vZGUgPSBsb2NrX21vZGU7XG4rfVxuK1xuK3ZvaWQgbnRmc19hdHRyX3VubG9ja19zZWFyY2hfY3R4KHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4KVxuK3tcbitcdGlmICghY3R4LVx1MDAzZWF0dHJfbGlzdF9sb2NrX25pKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRudGZzX2F0dHJfbGlzdF91bmxvY2soY3R4LVx1MDAzZWF0dHJfbGlzdF9sb2NrX25pLCBjdHgtXHUwMDNlYXR0cl9saXN0X2xvY2tfbW9kZSk7XG4rXG4rXHRjdHgtXHUwMDNlYXR0cl9saXN0X2xvY2tfbmkgPSBOVUxMO1xuK1x0Y3R4LVx1MDAzZWF0dHJfbGlzdF9sb2NrX21vZGUgPSBOVEZTX0FUVFJfQ1RYX0xPQ0tfTk9ORTtcbit9XG4rXG4gLyoqXG4gICogbnRmc19hdHRyX2luaXRfc2VhcmNoX2N0eCAtIGluaXRpYWxpemUgYW4gYXR0cmlidXRlIHNlYXJjaCBjb250ZXh0XG4gICogQGN0eDogICAgICAgIGF0dHJpYnV0ZSBzZWFyY2ggY29udGV4dCB0byBpbml0aWFsaXplXG5AQCAtMTYwOSw2ICsxNjk5LDggQEAgc3RhdGljIGJvb2wgbnRmc19hdHRyX2luaXRfc2VhcmNoX2N0eChzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eCxcbiBcdGN0eC1cdTAwM2ViYXNlX21yZWMgPSBOVUxMO1xuIFx0Y3R4LVx1MDAzZWJhc2VfYXR0ciA9IE5VTEw7XG4gXHRjdHgtXHUwMDNlbWFwcGVkX2Jhc2VfbXJlYyA9IGZhbHNlO1xuK1x0Y3R4LVx1MDAzZWF0dHJfbGlzdF9sb2NrX25pID0gTlVMTDtcbitcdGN0eC1cdTAwM2VhdHRyX2xpc3RfbG9ja19tb2RlID0gTlRGU19BVFRSX0NUWF9MT0NLX05PTkU7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG5AQCAtMTYyNCw2ICsxNzE2LDkgQEAgc3RhdGljIGJvb2wgbnRmc19hdHRyX2luaXRfc2VhcmNoX2N0eChzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eCxcbiAgKi9cbiB2b2lkIG50ZnNfYXR0cl9yZWluaXRfc2VhcmNoX2N0eChzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eClcbiB7XG4rXHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9saXN0X2xvY2tfbmkgPSBjdHgtXHUwMDNlYXR0cl9saXN0X2xvY2tfbmk7XG4rXHRlbnVtIG50ZnNfYXR0cl9zZWFyY2hfY3R4X2xvY2tfbW9kZSBhdHRyX2xpc3RfbG9ja19tb2RlID1cbitcdFx0Y3R4LVx1MDAzZWF0dHJfbGlzdF9sb2NrX21vZGU7XG4gXHRib29sIG1hcHBlZF9tcmVjO1xuIFxuIFx0aWYgKGxpa2VseSghY3R4LVx1MDAzZWJhc2VfbnRmc19pbm8pKSB7XG5AQCAtMTY0NSw2ICsxNzQwLDggQEAgdm9pZCBudGZzX2F0dHJfcmVpbml0X3NlYXJjaF9jdHgoc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpXG4gXHRtYXBwZWRfbXJlYyA9IGN0eC1cdTAwM2VtYXBwZWRfYmFzZV9tcmVjO1xuIFx0bnRmc19hdHRyX2luaXRfc2VhcmNoX2N0eChjdHgsIGN0eC1cdTAwM2ViYXNlX250ZnNfaW5vLCBjdHgtXHUwMDNlYmFzZV9tcmVjKTtcbiBcdGN0eC1cdTAwM2VtYXBwZWRfbXJlYyA9IG1hcHBlZF9tcmVjO1xuK1x0Y3R4LVx1MDAzZWF0dHJfbGlzdF9sb2NrX25pID0gYXR0cl9saXN0X2xvY2tfbmk7XG4rXHRjdHgtXHUwMDNlYXR0cl9saXN0X2xvY2tfbW9kZSA9IGF0dHJfbGlzdF9sb2NrX21vZGU7XG4gfVxuIFxuIC8qXG5AQCAtMTY1Niw3ICsxNzUzLDggQEAgdm9pZCBudGZzX2F0dHJfcmVpbml0X3NlYXJjaF9jdHgoc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpXG4gICogYW5kIHJldHVybiBpdC4gUmV0dXJuIE5VTEwgaWYgYWxsb2NhdGlvbiBmYWlsZWQuXG4gICovXG4gc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxuLVx0XHRzdHJ1Y3QgbWZ0X3JlY29yZCAqbXJlYylcbitcdFx0c3RydWN0IG1mdF9yZWNvcmQgKm1yZWMsXG4rXHRcdGVudW0gbnRmc19hdHRyX3NlYXJjaF9jdHhfbG9ja19tb2RlIGxvY2tfbW9kZSlcbiB7XG4gXHRzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eDtcbiBcdGJvb2wgaW5pdDtcbkBAIC0xNjY3LDYgKzE3NjUsOCBAQCBzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKm50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXG4gXHRcdGlmIChpbml0ID09IGZhbHNlKSB7XG4gXHRcdFx0a21lbV9jYWNoZV9mcmVlKG50ZnNfYXR0cl9jdHhfY2FjaGUsIGN0eCk7XG4gXHRcdFx0Y3R4ID0gTlVMTDtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRudGZzX2F0dHJfbG9ja19zZWFyY2hfY3R4KGN0eCwgbmksIGxvY2tfbW9kZSk7XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC0xNjgyLDYgKzE3ODIsOCBAQCBzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKm50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXG4gICovXG4gdm9pZCBudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpXG4ge1xuK1x0bnRmc19hdHRyX3VubG9ja19zZWFyY2hfY3R4KGN0eCk7XG4rXG4gXHRpZiAoY3R4LVx1MDAzZW1hcHBlZF9tcmVjKVxuIFx0XHR1bm1hcF9tZnRfcmVjb3JkKGN0eC1cdTAwM2VudGZzX2lubyk7XG4gXG5AQCAtMTkwNSw3ICsyMDA3LDggQEAgaW50IG50ZnNfcmVzaWRlbnRfYXR0cl92YWx1ZV9yZXNpemUoc3RydWN0IG1mdF9yZWNvcmQgKm0sIHN0cnVjdCBhdHRyX3JlY29yZCAqYSxcbiAgKiBpbm9kZSBpX3NpemUgaXMgdGhhdCB0aGlzIGlzIG5vdCBuZWNlc3NhcmlseSB1cHRvZGF0ZS4gIFRoaXMgaGFwcGVucyB3aGVuXG4gICogbnRmc19hdHRyX21ha2Vfbm9uX3Jlc2lkZW50KCkgaXMgY2FsbGVkIGluIHRoZSAtXHUwMDNldHJ1bmNhdGUgY2FsbCBwYXRoKHMpLlxuICAqL1xuLWludCBudGZzX2F0dHJfbWFrZV9ub25fcmVzaWRlbnQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBjb25zdCB1MzIgZGF0YV9zaXplKVxuK3N0YXRpYyBpbnQgX19udGZzX2F0dHJfbWFrZV9ub25fcmVzaWRlbnQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCB1MzIgZGF0YV9zaXplLFxuK1x0XHRcdFx0XHQgZW51bSBudGZzX2F0dHJfc2VhcmNoX2N0eF9sb2NrX21vZGUgbG9ja19tb2RlKVxuIHtcbiBcdHM2NCBuZXdfc2l6ZTtcbiBcdHN0cnVjdCBpbm9kZSAqdmkgPSBWRlNfSShuaSk7XG5AQCAtMTk1MSw3ICsyMDU0LDcgQEAgaW50IG50ZnNfYXR0cl9tYWtlX25vbl9yZXNpZGVudChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGNvbnN0IHUzMiBkYXRhX3NpemUpXG4gXHRcdGN0eCA9IE5VTEw7XG4gXHRcdGdvdG8gZXJyX291dDtcbiBcdH1cbi1cdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChiYXNlX25pLCBtKTtcbitcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChiYXNlX25pLCBtLCBsb2NrX21vZGUpO1xuIFx0aWYgKHVubGlrZWx5KCFjdHgpKSB7XG4gXHRcdGVyciA9IC1FTk9NRU07XG4gXHRcdGdvdG8gZXJyX291dDtcbkBAIC0yMjI1LDYgKzIzMjgsMTIgQEAgaW50IG50ZnNfYXR0cl9tYWtlX25vbl9yZXNpZGVudChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGNvbnN0IHUzMiBkYXRhX3NpemUpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbitpbnQgbnRmc19hdHRyX21ha2Vfbm9uX3Jlc2lkZW50KHN0cnVjdCBudGZzX2lub2RlICpuaSwgY29uc3QgdTMyIGRhdGFfc2l6ZSlcbit7XG4rXHRyZXR1cm4gX19udGZzX2F0dHJfbWFrZV9ub25fcmVzaWRlbnQobmksIGRhdGFfc2l6ZSxcbitcdFx0XHROVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4rfVxuK1xuIC8qXG4gICogbnRmc19hdHRyX3NldCAtIGZpbGwgKGEgcGFydCBvZikgYW4gYXR0cmlidXRlIHdpdGggYSBieXRlXG4gICogQG5pOlx0XHRudGZzIGlub2RlIGRlc2NyaWJpbmcgdGhlIGF0dHJpYnV0ZSB0byBmaWxsXG5AQCAtMjI5MCw3ICsyMzk5LDcgQEAgaW50IG50ZnNfYXR0cl9zZXRfaW5pdGlhbGl6ZWRfc2l6ZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGxvZmZfdCBuZXdfc2l6ZSlcbiBcdGlmICghTklub05vblJlc2lkZW50KG5pKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwpO1xuK1x0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4gXHRpZiAoIWN0eClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMjM5MCw3ICsyNDk5LDcgQEAgaW50IG50ZnNfcmVzaWRlbnRfYXR0cl9yZWNvcmRfYWRkKHN0cnVjdCBudGZzX2lub2RlICpuaSwgX19sZTMyIHR5cGUsXG4gXHR9XG4gXG4gXHQvKiBMb2NhdGUgcGxhY2Ugd2hlcmUgcmVjb3JkIHNob3VsZCBiZS4gKi9cbi1cdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCk7XG4rXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19OT05FKTtcbiBcdGlmICghY3R4KSB7XG4gXHRcdG50ZnNfZXJyb3IobmktXHUwMDNldm9sLVx1MDAzZXNiLCBcIiVzOiBGYWlsZWQgdG8gZ2V0IHNlYXJjaCBjb250ZXh0XCIsXG4gXHRcdFx0XHRfX2Z1bmNfXyk7XG5AQCAtMjUxMiw3ICsyNjIxLDcgQEAgc3RhdGljIGludCBudGZzX25vbl9yZXNpZGVudF9hdHRyX3JlY29yZF9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBfX2xlMzIgdHlwZSxcbiBcdH1cbiBcbiBcdC8qIExvY2F0ZSBwbGFjZSB3aGVyZSByZWNvcmQgc2hvdWxkIGJlLiAqL1xuLVx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTtcbitcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX05PTkUpO1xuIFx0aWYgKCFjdHgpIHtcbiBcdFx0cHJfZXJyKFwiJXM6IEZhaWxlZCB0byBnZXQgc2VhcmNoIGNvbnRleHRcXG5cIiwgX19mdW5jX18pO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbkBAIC0yNjIyLDYgKzI3MzEsNyBAQCBzdGF0aWMgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfcmVjb3JkX2FkZChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIF9fbGUzMiB0eXBlLFxuIGludCBudGZzX2F0dHJfcmVjb3JkX3JtKHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4KVxuIHtcbiBcdHN0cnVjdCBudGZzX2lub2RlICpiYXNlX25pLCAqbmk7XG4rXHR1OCAqb2xkX2FsID0gTlVMTDtcbiBcdF9fbGUzMiB0eXBlO1xuIFx0aW50IGVycjtcbiBcbkBAIC0yNjYwLDkgKzI3NzAsMTEgQEAgaW50IG50ZnNfYXR0cl9yZWNvcmRfcm0oc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpXG4gXHQvKiBQb3N0ICRBVFRSSUJVVEVfTElTVCBkZWxldGUgc2V0dXAuICovXG4gXHRpZiAodHlwZSA9PSBBVF9BVFRSSUJVVEVfTElTVCkge1xuIFx0XHRpZiAoTklub0F0dHJMaXN0KGJhc2VfbmkpIFx1MDAyNlx1MDAyNiBiYXNlX25pLVx1MDAzZWF0dHJfbGlzdClcbi1cdFx0XHRrdmZyZWUoYmFzZV9uaS1cdTAwM2VhdHRyX2xpc3QpO1xuK1x0XHRcdG9sZF9hbCA9IGJhc2VfbmktXHUwMDNlYXR0cl9saXN0O1xuIFx0XHRiYXNlX25pLVx1MDAzZWF0dHJfbGlzdCA9IE5VTEw7XG4rXHRcdGJhc2VfbmktXHUwMDNlYXR0cl9saXN0X3NpemUgPSAwO1xuIFx0XHROSW5vQ2xlYXJBdHRyTGlzdChiYXNlX25pKTtcbitcdFx0a3ZmcmVlKG9sZF9hbCk7XG4gXHR9XG4gXG4gXHQvKiBGcmVlIE1GVCByZWNvcmQsIGlmIGl0IGRvZXNuJ3QgY29udGFpbiBhdHRyaWJ1dGVzLiAqL1xuQEAgLTMwODcsNyArMzE5OSw3IEBAIGludCBudGZzX2F0dHJfb3BlbihzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGNvbnN0IF9fbGUzMiB0eXBlLFxuIFx0XHRuZXduYW1lID0gbmFtZTtcbiBcdH1cbiBcbi1cdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChiYXNlX25pLCBOVUxMKTtcbitcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChiYXNlX25pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4gXHRpZiAoIWN0eCkge1xuIFx0XHRlcnIgPSAtRU5PTUVNO1xuIFx0XHRwcl9lcnIoXCIlczogRmFpbGVkIHRvIGdldCBzZWFyY2ggY29udGV4dFxcblwiLCBfX2Z1bmNfXyk7XG5AQCAtMzIzOSw3ICszMzUxLDcgQEAgdm9pZCBudGZzX2F0dHJfY2xvc2Uoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxuICAqIHdpbGwgbWFwIHRoZSBydW5saXN0IGZyYWdtZW50cyBmcm9tIGVhY2ggb2YgdGhlIGV4dGVudHMgdGh1cyBnaXZpbmcgYWNjZXNzXG4gICogdG8gdGhlIGVudGlyZXR5IG9mIHRoZSBkaXNrIGFsbG9jYXRpb24gb2YgYW4gYXR0cmlidXRlLlxuICAqL1xuLWludCBudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3Qoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxuK2ludCBudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3Rfbm9sb2NrKHN0cnVjdCBudGZzX2lub2RlICpuaSlcbiB7XG4gXHRzNjQgbmV4dF92Y24sIGxhc3RfdmNuLCBoaWdoZXN0X3ZjbjtcbiBcdHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4O1xuQEAgLTMyNjIsNyArMzM3NCw3IEBAIGludCBudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3Qoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxuIFx0ZWxzZVxuIFx0XHRiYXNlX25pID0gbmk7XG4gXG4tXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoYmFzZV9uaSwgTlVMTCk7XG4rXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoYmFzZV9uaSwgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX05PTkUpO1xuIFx0aWYgKCFjdHgpIHtcbiBcdFx0bnRmc19lcnJvcihzYiwgXCIlczogRmFpbGVkIHRvIGdldCBzZWFyY2ggY29udGV4dFwiLCBfX2Z1bmNfXyk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTMzNTQsNiArMzQ2NiwxOCBAQCBpbnQgbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0KHN0cnVjdCBudGZzX2lub2RlICpuaSlcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuK2ludCBudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3Qoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxuK3tcbitcdHN0cnVjdCBudGZzX2lub2RlICphdHRyX2xvY2tfbmk7XG4rXHRpbnQgZXJyO1xuK1xuK1x0YXR0cl9sb2NrX25pID0gbnRmc19hdHRyX2xpc3RfbG9jayhuaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuK1x0ZXJyID0gbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0X25vbG9jayhuaSk7XG4rXHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbiAvKlxuICAqIG50ZnNfYXR0cl9yZWNvcmRfbW92ZV90byAtIG1vdmUgYXR0cmlidXRlIHJlY29yZCB0byB0YXJnZXQgaW5vZGVcbiAgKiBAY3R4Olx0YXR0cmlidXRlIHNlYXJjaCBjb250ZXh0IGRlc2NyaWJpbmcgdGhlIGF0dHJpYnV0ZSByZWNvcmRcbkBAIC0zMzg4LDcgKzM1MTIsNyBAQCBpbnQgbnRmc19hdHRyX3JlY29yZF9tb3ZlX3RvKHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4LCBzdHJ1Y3QgbnRmc19pbm9kZVxuIFxuIFx0LyogRmluZCBwbGFjZSBpbiBNRlQgcmVjb3JkIHdoZXJlIGF0dHJpYnV0ZSB3aWxsIGJlIG1vdmVkLiAqL1xuIFx0YSA9IGN0eC1cdTAwM2VhdHRyO1xuLVx0bmN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCk7XG4rXHRuY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfTk9ORSk7XG4gXHRpZiAoIW5jdHgpIHtcbiBcdFx0bnRmc19lcnJvcihzYiwgXCIlczogRmFpbGVkIHRvIGdldCBzZWFyY2ggY29udGV4dFwiLCBfX2Z1bmNfXyk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTM0NzUsNyArMzU5OSw3IEBAIGludCBudGZzX2F0dHJfcmVjb3JkX21vdmVfYXdheShzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eCwgaW50IGV4dHJhKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbi1cdGVyciA9IG50ZnNfaW5vZGVfYXR0YWNoX2FsbF9leHRlbnRzKGN0eC1cdTAwM2VudGZzX2lubyk7XG4rXHRlcnIgPSBudGZzX2lub2RlX2F0dGFjaF9hbGxfZXh0ZW50c19ub2xvY2soY3R4LVx1MDAzZW50ZnNfaW5vKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0bnRmc19lcnJvcihzYiwgXCJDb3VsZG4ndCBhdHRhY2ggZXh0ZW50cywgaW5vZGU9JWxsdVwiLFxuIFx0XHRcdCh1bnNpZ25lZCBsb25nIGxvbmcpYmFzZV9uaS1cdTAwM2VtZnRfbm8pO1xuQEAgLTM1NzQsOSArMzY5OCw4IEBAIHN0YXRpYyBpbnQgbnRmc19hdHRyX3VwZGF0ZV9tZXRhKHN0cnVjdCBhdHRyX3JlY29yZCAqYSwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxuIFx0XHRpZiAoKGxlMzJfdG9fY3B1KGEtXHUwMDNlbGVuZ3RoKSAtXG4gXHRcdCAgICAgbGUxNl90b19jcHUoYS1cdTAwM2VkYXRhLm5vbl9yZXNpZGVudC5tYXBwaW5nX3BhaXJzX29mZnNldCkgPT0gOCkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAhKGxlMzJfdG9fY3B1KG0tXHUwMDNlYnl0ZXNfYWxsb2NhdGVkKSAtIGxlMzJfdG9fY3B1KG0tXHUwMDNlYnl0ZXNfaW5fdXNlKSkpIHtcbi1cbiBcdFx0XHRpZiAoIU5Jbm9BdHRyTGlzdChiYXNlX25pKSkge1xuLVx0XHRcdFx0ZXJyID0gbnRmc19pbm9kZV9hZGRfYXR0cmxpc3QoYmFzZV9uaSk7XG4rXHRcdFx0XHRlcnIgPSBudGZzX2lub2RlX2FkZF9hdHRybGlzdF9ub2xvY2soYmFzZV9uaSk7XG4gXHRcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0XHRnb3RvIG91dDtcbiBcdFx0XHRcdGVyciA9IC1FQUdBSU47XG5AQCAtMzY3Nyw3ICszODAwLDcgQEAgc3RhdGljIGludCBudGZzX2F0dHJfdXBkYXRlX21ldGEoc3RydWN0IGF0dHJfcmVjb3JkICphLCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXG4gICogY2FsbCB0byB0aGlzIGZ1bmN0aW9uLiBWaWNlLXZlcnNhIEBuYS1cdTAwM2Vjb21wcmVzc2VkX3NpemUgd2lsbCBiZSBjYWxjdWxhdGVkIGFuZFxuICAqIHNldCB0byBjb3JyZWN0IHZhbHVlIGR1cmluZyB0aGlzIGZ1bmN0aW9uLlxuICAqL1xuLWludCBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgZnJvbV92Y24pXG4rc3RhdGljIGludCBfX250ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBmcm9tX3ZjbilcbiB7XG4gXHRzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eDtcbiBcdHN0cnVjdCBudGZzX2lub2RlICpiYXNlX25pO1xuQEAgLTM3MDksNyArMzgzMiw3IEBAIGludCBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgZnJvbV92Y24pXG4gXHRlbHNlXG4gXHRcdGJhc2VfbmkgPSBuaTtcbiBcbi1cdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChiYXNlX25pLCBOVUxMKTtcbitcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChiYXNlX25pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfTk9ORSk7XG4gXHRpZiAoIWN0eCkge1xuIFx0XHRudGZzX2Vycm9yKHNiLCBcIiVzOiBGYWlsZWQgdG8gZ2V0IHNlYXJjaCBjb250ZXh0XCIsIF9fZnVuY19fKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtMzgwOSw4ICszOTMyLDggQEAgaW50IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBmcm9tX3ZjbilcbiBcdFx0XHQgKi9cbiBcdFx0XHRpZiAobmktXHUwMDNldHlwZSA9PSBBVF9BVFRSSUJVVEVfTElTVCkge1xuIFx0XHRcdFx0bnRmc19hdHRyX3B1dF9zZWFyY2hfY3R4KGN0eCk7XG4tXHRcdFx0XHRpZiAobnRmc19pbm9kZV9mcmVlX3NwYWNlKGJhc2VfbmksIG1wX3NpemUgLVxuLVx0XHRcdFx0XHRcdFx0Y3VyX21heF9tcF9zaXplKSkge1xuK1x0XHRcdFx0aWYgKG50ZnNfaW5vZGVfZnJlZV9zcGFjZV9ub2xvY2soYmFzZV9uaSwgbXBfc2l6ZSAtXG4rXHRcdFx0XHRcdFx0XHRcdGN1cl9tYXhfbXBfc2l6ZSkpIHtcbiBcdFx0XHRcdFx0bnRmc19kZWJ1ZyhcIkF0dHJpYnV0ZSBsaXN0IGlzIHRvbyBiaWcuIERlZnJhZ21lbnQgdGhlIHZvbHVtZVxcblwiKTtcbiBcdFx0XHRcdFx0cmV0dXJuIC1FTk9TUEM7XG4gXHRcdFx0XHR9XG5AQCAtMzgyMiw3ICszOTQ1LDcgQEAgaW50IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBmcm9tX3ZjbilcbiBcdFx0XHQvKiBBZGQgYXR0cmlidXRlIGxpc3QgaWYgaXQgaXNuJ3QgcHJlc2VudCwgYW5kIHJldHJ5LiAqL1xuIFx0XHRcdGlmICghTklub0F0dHJMaXN0KGJhc2VfbmkpKSB7XG4gXHRcdFx0XHRudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoY3R4KTtcbi1cdFx0XHRcdGlmIChudGZzX2lub2RlX2FkZF9hdHRybGlzdChiYXNlX25pKSkge1xuK1x0XHRcdFx0aWYgKG50ZnNfaW5vZGVfYWRkX2F0dHJsaXN0X25vbG9jayhiYXNlX25pKSkge1xuIFx0XHRcdFx0XHRudGZzX2Vycm9yKHNiLCBcIkNhbiBub3QgYWRkIGF0dHJsaXN0XCIpO1xuIFx0XHRcdFx0XHRyZXR1cm4gLUVJTztcbiBcdFx0XHRcdH1cbkBAIC00MDI2LDYgKzQxNDksMjMgQEAgaW50IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBmcm9tX3ZjbilcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuK2ludCBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgZnJvbV92Y24pXG4re1xuK1x0c3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTtcbitcdGludCBlcnI7XG4rXG4rXHRhdHRyX2xvY2tfbmkgPSBudGZzX2F0dHJfbGlzdF9sb2NrKG5pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuK1x0ZXJyID0gX19udGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIGZyb21fdmNuKTtcbitcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitpbnQgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzX25vbG9jayhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBmcm9tX3Zjbilcbit7XG4rXHRyZXR1cm4gX19udGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIGZyb21fdmNuKTtcbit9XG4rXG4gLypcbiAgKiBudGZzX2F0dHJfbWFrZV9yZXNpZGVudCAtIGNvbnZlcnQgYSBub24tcmVzaWRlbnQgdG8gYSByZXNpZGVudCBhdHRyaWJ1dGVcbiAgKiBAbmk6XHRcdG9wZW4gbnRmcyBhdHRyaWJ1dGUgdG8gbWFrZSByZXNpZGVudFxuQEAgLTQwODMsNyArNDIyMyw3IEBAIHN0YXRpYyBpbnQgbnRmc19hdHRyX21ha2VfcmVzaWRlbnQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjXG4gXHR9XG4gXG4gXHQvKiBSZWFkIGFuZCBjYWNoZSB0aGUgd2hvbGUgcnVubGlzdCBpZiBub3QgYWxyZWFkeSBkb25lLiAqL1xuLVx0ZXJyID0gbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0KG5pKTtcbitcdGVyciA9IG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdF9ub2xvY2sobmkpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbkBAIC00MjIwLDcgKzQzNjAsNyBAQCBzdGF0aWMgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfc2hyaW5rKHN0cnVjdCBudGZzX2lub2RlICpuaSwgY29uc3QgczY0IG5ld3NpelxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbiBcbi1cdFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTtcbitcdFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4gXHRcdGlmICghY3R4KSB7XG4gXHRcdFx0bnRmc19lcnJvcih2b2wtXHUwMDNlc2IsIFwiJXM6IEZhaWxlZCB0byBnZXQgc2VhcmNoIGNvbnRleHRcIiwgX19mdW5jX18pO1xuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTQyNjgsNyArNDQwOCw3IEBAIHN0YXRpYyBpbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9zaHJpbmsoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBjb25zdCBzNjQgbmV3c2l6XG4gXHR9XG4gXG4gXHQvKiBHZXQgdGhlIGZpcnN0IGF0dHJpYnV0ZSByZWNvcmQuICovXG4tXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoYmFzZV9uaSwgTlVMTCk7XG4rXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoYmFzZV9uaSwgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0aWYgKCFjdHgpIHtcbiBcdFx0bnRmc19lcnJvcih2b2wtXHUwMDNlc2IsIFwiJXM6IEZhaWxlZCB0byBnZXQgc2VhcmNoIGNvbnRleHRcIiwgX19mdW5jX18pO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbkBAIC00MzgwLDcgKzQ1MjAsOCBAQCBzdGF0aWMgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfZXhwYW5kKHN0cnVjdCBudGZzX2lub2RlICpuaSwgY29uc3QgczY0IG5ld3NpelxuIFx0ICogY2x1c3RlcnMgaWYgdGhlcmUgaXMgYSBjaGFuZ2UuXG4gXHQgKi9cbiBcdGlmIChudGZzX2J5dGVzX3RvX2NsdXN0ZXIodm9sLCBuaS1cdTAwM2VhbGxvY2F0ZWRfc2l6ZSkgXHUwMDNjIGZpcnN0X2ZyZWVfdmNuKSB7XG4tXHRcdGVyciA9IG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdChuaSk7XG4rXHRcdGVyciA9IG5lZWRfbG9jayA/IG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdChuaSkgOlxuK1x0XHRcdFx0bnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0X25vbG9jayhuaSk7XG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHRudGZzX2Vycm9yKHNiLCBcIm50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdCBmYWlsZWRcIik7XG4gXHRcdFx0cmV0dXJuIGVycjtcbkBAIC00NDk5LDE0ICs0NjQwLDE1IEBAIHN0YXRpYyBpbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9leHBhbmQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBjb25zdCBzNjQgbmV3c2l6XG4gXG4gXHRcdC8qIFByZXBhcmUgdG8gbWFwcGluZyBwYWlycyB1cGRhdGUuICovXG4gXHRcdG5pLVx1MDAzZWFsbG9jYXRlZF9zaXplID0gbnRmc19jbHVzdGVyX3RvX2J5dGVzKHZvbCwgZmlyc3RfZnJlZV92Y24pO1xuLVx0XHRlcnIgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIDApO1xuK1x0XHRlcnIgPSBuZWVkX2xvY2sgPyBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIDApIDpcbitcdFx0XHRcdG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlyc19ub2xvY2sobmksIDApO1xuIFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0bnRmc19kZWJ1ZyhcIk1hcHBpbmcgcGFpcnMgdXBkYXRlIGZhaWxlZFwiKTtcbiBcdFx0XHRnb3RvIHJvbGxiYWNrO1xuIFx0XHR9XG4gXHR9XG4gXG4tXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoYmFzZV9uaSwgTlVMTCk7XG4rXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoYmFzZV9uaSwgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0aWYgKCFjdHgpIHtcbiBcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0aWYgKG5pLVx1MDAzZWFsbG9jYXRlZF9zaXplID09IG9yZ19hbGxvY19zaXplKVxuQEAgLTQ1NTcsMTYgKzQ2OTksMjIgQEAgc3RhdGljIGludCBudGZzX25vbl9yZXNpZGVudF9hdHRyX2V4cGFuZChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGNvbnN0IHM2NCBuZXdzaXpcbiBcdFx0a3ZmcmVlKG5pLVx1MDAzZXJ1bmxpc3QucmwpO1xuIFx0XHRuaS1cdTAwM2VydW5saXN0LnJsID0gTlVMTDtcbiBcdFx0bnRmc19lcnJvcihzYiwgXCJDb3VsZG4ndCB0cnVuY2F0ZSBydW5saXN0LiBSb2xsYmFjayBmYWlsZWRcIik7XG4tXHR9IGVsc2Uge1xuLVx0XHQvKiBQcmVwYXJlIHRvIG1hcHBpbmcgcGFpcnMgdXBkYXRlLiAqL1xuLVx0XHRuaS1cdTAwM2VhbGxvY2F0ZWRfc2l6ZSA9IG9yZ19hbGxvY19zaXplO1xuLVx0XHQvKiBSZXN0b3JlIG1hcHBpbmcgcGFpcnMuICovXG4tXHRcdGlmIChuZWVkX2xvY2spXG4tXHRcdFx0ZG93bl9yZWFkKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4tXHRcdGlmIChudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIDApKVxuLVx0XHRcdG50ZnNfZXJyb3Ioc2IsIFwiRmFpbGVkIHRvIHJlc3RvcmUgb2xkIG1hcHBpbmcgcGFpcnNcIik7XG4tXHRcdGlmIChuZWVkX2xvY2spXG4tXHRcdFx0dXBfcmVhZChcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdC8qIFByZXBhcmUgdG8gbWFwcGluZyBwYWlycyB1cGRhdGUuICovXG4rXHRcdFx0bmktXHUwMDNlYWxsb2NhdGVkX3NpemUgPSBvcmdfYWxsb2Nfc2l6ZTtcbitcdFx0XHQvKiBSZXN0b3JlIG1hcHBpbmcgcGFpcnMuICovXG4rXHRcdFx0aWYgKG5lZWRfbG9jaykge1xuK1x0XHRcdFx0c3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTtcbitcbitcdFx0XHRcdGF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4rXHRcdFx0XHRkb3duX3JlYWQoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbitcdFx0XHRcdGlmIChudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNfbm9sb2NrKG5pLCAwKSlcbitcdFx0XHRcdFx0bnRmc19lcnJvcihzYiwgXCJGYWlsZWQgdG8gcmVzdG9yZSBvbGQgbWFwcGluZyBwYWlyc1wiKTtcbitcdFx0XHRcdHVwX3JlYWQoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbitcdFx0XHRcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4rXHRcdFx0fSBlbHNlIGlmIChudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNfbm9sb2NrKG5pLCAwKSkge1xuK1x0XHRcdFx0bnRmc19lcnJvcihzYiwgXCJGYWlsZWQgdG8gcmVzdG9yZSBvbGQgbWFwcGluZyBwYWlyc1wiKTtcbitcdFx0XHR9XG4gXG4gXHRcdGlmIChOSW5vU3BhcnNlKG5pKSB8fCBOSW5vQ29tcHJlc3NlZChuaSkpIHtcbiBcdFx0XHRuaS1cdTAwM2VpdHlwZS5jb21wcmVzc2VkLnNpemUgPSAgb3JnX2NvbXByZXNzZWRfc2l6ZTtcbkBAIC00NjAwLDYgKzQ3NDgsNyBAQCBzdGF0aWMgaW50IG50ZnNfcmVzaWRlbnRfYXR0cl9yZXNpemUoc3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbmksIGNvbnN0IHM2NCBuZXdzaVxuIFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHZvbC1cdTAwM2VzYjtcbiBcdGludCBlcnIgPSAtRUlPO1xuIFx0c3RydWN0IG50ZnNfaW5vZGUgKmJhc2VfbmksICpleHRfbmkgPSBOVUxMO1xuK1x0dTMyIHJlc2lkZW50X3ZhbHVlX2xlbjtcbiBcbiBhdHRyX3Jlc2l6ZV9hZ2FpbjpcbiBcdG50ZnNfZGVidWcoXCJJbm9kZSAweCVsbHggYXR0ciAweCV4IG5ldyBzaXplICVsbGRcXG5cIixcbkBAIC00NjEyLDcgKzQ3NjEsNyBAQCBzdGF0aWMgaW50IG50ZnNfcmVzaWRlbnRfYXR0cl9yZXNpemUoc3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbmksIGNvbnN0IHM2NCBuZXdzaVxuIFx0XHRiYXNlX25pID0gYXR0cl9uaTtcbiBcbiBcdC8qIEdldCB0aGUgYXR0cmlidXRlIHJlY29yZCB0aGF0IG5lZWRzIG1vZGlmaWNhdGlvbi4gKi9cbi1cdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChiYXNlX25pLCBOVUxMKTtcbitcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChiYXNlX25pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4gXHRpZiAoIWN0eCkge1xuIFx0XHRudGZzX2Vycm9yKHNiLCBcIiVzOiBGYWlsZWQgdG8gZ2V0IHNlYXJjaCBjb250ZXh0XCIsIF9fZnVuY19fKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtNDY2NCw4ICs0ODEzLDkgQEAgc3RhdGljIGludCBudGZzX3Jlc2lkZW50X2F0dHJfcmVzaXplKHN0cnVjdCBudGZzX2lub2RlICphdHRyX25pLCBjb25zdCBzNjQgbmV3c2lcbiBcdC8qIFRoZXJlIGlzIG5vdCBlbm91Z2ggc3BhY2UgaW4gdGhlIG1mdCByZWNvcmQgdG8gcGVyZm9ybSB0aGUgcmVzaXplLiAqL1xuIFxuIFx0LyogTWFrZSB0aGUgYXR0cmlidXRlIG5vbi1yZXNpZGVudCBpZiBwb3NzaWJsZS4gKi9cbi1cdGVyciA9IG50ZnNfYXR0cl9tYWtlX25vbl9yZXNpZGVudChhdHRyX25pLFxuLVx0XHRcdGxlMzJfdG9fY3B1KGN0eC1cdTAwM2VhdHRyLVx1MDAzZWRhdGEucmVzaWRlbnQudmFsdWVfbGVuZ3RoKSk7XG4rXHRyZXNpZGVudF92YWx1ZV9sZW4gPSBsZTMyX3RvX2NwdShjdHgtXHUwMDNlYXR0ci1cdTAwM2VkYXRhLnJlc2lkZW50LnZhbHVlX2xlbmd0aCk7XG4rXHRlcnIgPSBfX250ZnNfYXR0cl9tYWtlX25vbl9yZXNpZGVudChhdHRyX25pLCByZXNpZGVudF92YWx1ZV9sZW4sXG4rXHRcdFx0XHRcdCAgICBOVEZTX0FUVFJfQ1RYX0xPQ0tfTk9ORSk7XG4gXHRpZiAoIWVycikge1xuIFx0XHRtYXJrX21mdF9yZWNvcmRfZGlydHkoY3R4LVx1MDAzZW50ZnNfaW5vKTtcbiBcdFx0bnRmc19hdHRyX3B1dF9zZWFyY2hfY3R4KGN0eCk7XG5AQCAtNDcxMiw3ICs0ODYyLDggQEAgc3RhdGljIGludCBudGZzX3Jlc2lkZW50X2F0dHJfcmVzaXplKHN0cnVjdCBudGZzX2lub2RlICphdHRyX25pLCBjb25zdCBzNjQgbmV3c2lcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuLVx0XHRpZiAobnRmc19hdHRyX21ha2Vfbm9uX3Jlc2lkZW50KE5URlNfSSh0dmkpLCB2YWx1ZV9sZW4pKSB7XG4rXHRcdGlmIChfX250ZnNfYXR0cl9tYWtlX25vbl9yZXNpZGVudChOVEZTX0kodHZpKSwgdmFsdWVfbGVuLFxuK1x0XHRcdFx0XHRcdCAgTlRGU19BVFRSX0NUWF9MT0NLX05PTkUpKSB7XG4gXHRcdFx0aXB1dCh0dmkpO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG5AQCAtNDg0NCwxMiArNDk5NSwxNiBAQCBpbnQgX19udGZzX2F0dHJfdHJ1bmNhdGVfdmZzKHN0cnVjdCBudGZzX2lub2RlICpuaSwgY29uc3QgczY0IG5ld3NpemUsXG4gXG4gXHRpZiAoTklub05vblJlc2lkZW50KG5pKSkge1xuIFx0XHRpZiAobmV3c2l6ZSBcdTAwM2UgaV9zaXplKSB7XG4rXHRcdFx0c3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTtcbitcbitcdFx0XHRhdHRyX2xvY2tfbmkgPSBudGZzX2F0dHJfbGlzdF9sb2NrKG5pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuIFx0XHRcdGRvd25fd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbiBcdFx0XHRlcnIgPSBudGZzX25vbl9yZXNpZGVudF9hdHRyX2V4cGFuZChuaSwgbmV3c2l6ZSwgMCxcbiBcdFx0XHRcdFx0XHRcdCAgICBOVm9sRGlzYWJsZVNwYXJzZShuaS1cdTAwM2V2b2wpID9cbiBcdFx0XHRcdFx0XHRcdCAgICBIT0xFU19OTyA6IEhPTEVTX09LLFxuIFx0XHRcdFx0XHRcdFx0ICAgIGZhbHNlKTtcbiBcdFx0XHR1cF93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuK1x0XHRcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4gXHRcdH0gZWxzZVxuIFx0XHRcdGVyciA9IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfc2hyaW5rKG5pLCBuZXdzaXplKTtcbiBcdH0gZWxzZVxuQEAgLTQ5NzksMTQgKzUxMzQsMTcgQEAgaW50IG50ZnNfYXR0cl9tYXBfY2x1c3RlcihzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCB2Y25fc3RhcnQsIHM2NCAqbGNuX3N0YXJ0LFxuIFx0aW50IGVyciA9IDA7XG4gXHRzaXplX3QgbmV3X3JsX2NvdW50O1xuIFxuLVx0ZXJyID0gbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0KG5pKTtcbitcdGVyciA9IG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdF9ub2xvY2sobmkpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdGlmIChOSW5vQXR0cihuaSkpXG4tXHRcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaS1cdTAwM2VleHQuYmFzZV9udGZzX2lubywgTlVMTCk7XG4tXHRlbHNlXG4tXHRcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCk7XG4rXHRpZiAoTklub0F0dHIobmkpKSB7XG4rXHRcdHN0cnVjdCBudGZzX2lub2RlICpiYXNlX25pID0gbmktXHUwMDNlZXh0LmJhc2VfbnRmc19pbm87XG4rXG4rXHRcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChiYXNlX25pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfTk9ORSk7XG4rXHR9IGVsc2Uge1xuK1x0XHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19OT05FKTtcbitcdH1cbiBcdGlmICghY3R4KSB7XG4gXHRcdG50ZnNfZXJyb3Iodm9sLVx1MDAzZXNiLCBcIiVzOiBGYWlsZWQgdG8gZ2V0IHNlYXJjaCBjb250ZXh0XCIsIF9fZnVuY19fKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtNTA5Myw3ICs1MjUxLDcgQEAgaW50IG50ZnNfYXR0cl9tYXBfY2x1c3RlcihzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCB2Y25fc3RhcnQsIHM2NCAqbGNuX3N0YXJ0LFxuIFxuIFx0aWYgKHVwZGF0ZV9tcCkge1xuIFx0XHRudGZzX2F0dHJfcmVpbml0X3NlYXJjaF9jdHgoY3R4KTtcbi1cdFx0ZXJyID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG5pLCAwKTtcbitcdFx0ZXJyID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzX25vbG9jayhuaSwgMCk7XG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHRpbnQgZXJyMjtcbiBcbkBAIC01MTQ2LDcgKzUzMDQsNyBAQCBpbnQgbnRmc19hdHRyX3JtKHN0cnVjdCBudGZzX2lub2RlICpuaSlcbiBcdFx0ZXJyID0gbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0KG5pKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuLVx0XHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwpO1xuK1x0XHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdFx0aWYgKCFjdHgpIHtcbiBcdFx0XHRudGZzX2Vycm9yKHNiLCBcIiVzOiBGYWlsZWQgdG8gZ2V0IHNlYXJjaCBjb250ZXh0XCIsIF9fZnVuY19fKTtcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbkBAIC01MTYwLDcgKzUzMTgsNyBAQCBpbnQgbnRmc19hdHRyX3JtKHN0cnVjdCBudGZzX2lub2RlICpuaSlcbiBcdH1cbiBcbiBcdC8qIFNlYXJjaCBmb3IgYXR0cmlidXRlIGV4dGVudHMgYW5kIHJlbW92ZSB0aGVtIGFsbC4gKi9cbi1cdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChiYXNlX25pLCBOVUxMKTtcbitcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChiYXNlX25pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuIFx0aWYgKCFjdHgpIHtcbiBcdFx0bnRmc19lcnJvcihzYiwgXCIlczogRmFpbGVkIHRvIGdldCBzZWFyY2ggY29udGV4dFwiLCBfX2Z1bmNfXyk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTUxOTIsNyArNTM1MCw3IEBAIGludCBudGZzX2F0dHJfZXhpc3Qoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBjb25zdCBfX2xlMzIgdHlwZSwgX19sZTE2ICpuYW1lLFxuIFxuIFx0bnRmc19kZWJ1ZyhcIkVudGVyaW5nXFxuXCIpO1xuIFxuLVx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTtcbitcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0aWYgKCFjdHgpIHtcbiBcdFx0bnRmc19lcnJvcihuaS1cdTAwM2V2b2wtXHUwMDNlc2IsIFwiJXM6IEZhaWxlZCB0byBnZXQgc2VhcmNoIGNvbnRleHRcIixcbiBcdFx0XHRcdF9fZnVuY19fKTtcbkBAIC01MzAxLDYgKzU0NTksNyBAQCB2b2lkICpudGZzX2F0dHJfcmVhZGFsbChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGNvbnN0IF9fbGUzMiB0eXBlLFxuIGludCBudGZzX25vbl9yZXNpZGVudF9hdHRyX2luc2VydF9yYW5nZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBzdGFydF92Y24sIHM2NCBsZW4pXG4ge1xuIFx0c3RydWN0IG50ZnNfdm9sdW1lICp2b2wgPSBuaS1cdTAwM2V2b2w7XG4rXHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pO1xuIFx0c3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqaG9sZV9ybCwgKnJsO1xuIFx0c3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHg7XG4gXHRpbnQgcmV0O1xuQEAgLTUzMjEsMTYgKzU0ODAsMTkgQEAgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfaW5zZXJ0X3JhbmdlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IHN0YXJ0X3ZjbiwgczZcbiBcdGhvbGVfcmxbMV0ubGNuID0gTENOX0VOT0VOVDtcbiBcdGhvbGVfcmxbMV0ubGVuZ3RoID0gMDtcbiBcbitcdGF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4gXHRkb3duX3dyaXRlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4tXHRyZXQgPSBudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3QobmkpO1xuK1x0cmV0ID0gbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0X25vbG9jayhuaSk7XG4gXHRpZiAocmV0KSB7XG4gXHRcdHVwX3dyaXRlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4rXHRcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4gXHRybCA9IG50ZnNfcmxfZmluZF92Y25fbm9sb2NrKG5pLVx1MDAzZXJ1bmxpc3QucmwsIHN0YXJ0X3Zjbik7XG4gXHRpZiAoIXJsKSB7XG4gXHRcdHVwX3dyaXRlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4rXHRcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4gXHRcdGtmcmVlKGhvbGVfcmwpO1xuIFx0XHRyZXR1cm4gLUVJTztcbiBcdH1cbkBAIC01MzM5LDYgKzU1MDEsNyBAQCBpbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9pbnNlcnRfcmFuZ2Uoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgc3RhcnRfdmNuLCBzNlxuIFx0XHRcdFx0ICBob2xlX3JsLCAxLCBcdTAwMjZuZXdfcmxfY291bnQpO1xuIFx0aWYgKElTX0VSUihybCkpIHtcbiBcdFx0dXBfd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbitcdFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcbiBcdFx0a2ZyZWUoaG9sZV9ybCk7XG4gXHRcdHJldHVybiBQVFJfRVJSKHJsKTtcbiBcdH1cbkBAIC01MzQ5LDEyICs1NTEyLDEzIEBAIGludCBudGZzX25vbl9yZXNpZGVudF9hdHRyX2luc2VydF9yYW5nZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBzdGFydF92Y24sIHM2XG4gXHRuaS1cdTAwM2VkYXRhX3NpemUgKz0gbnRmc19jbHVzdGVyX3RvX2J5dGVzKHZvbCwgbGVuKTtcbiBcdGlmIChudGZzX2NsdXN0ZXJfdG9fYnl0ZXModm9sLCBzdGFydF92Y24pIFx1MDAzYyBuaS1cdTAwM2Vpbml0aWFsaXplZF9zaXplKVxuIFx0XHRuaS1cdTAwM2Vpbml0aWFsaXplZF9zaXplICs9IG50ZnNfY2x1c3Rlcl90b19ieXRlcyh2b2wsIGxlbik7XG4tXHRyZXQgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIDApO1xuK1x0cmV0ID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzX25vbG9jayhuaSwgMCk7XG4gXHR1cF93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuK1x0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwpO1xuK1x0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4gXHRpZiAoIWN0eCkge1xuIFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRyZXR1cm4gcmV0O1xuQEAgLTUzNzksNiArNTU0Myw3IEBAIGludCBudGZzX25vbl9yZXNpZGVudF9hdHRyX2luc2VydF9yYW5nZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBzdGFydF92Y24sIHM2XG4gaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfY29sbGFwc2VfcmFuZ2Uoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgc3RhcnRfdmNuLCBzNjQgbGVuKVxuIHtcbiBcdHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sID0gbmktXHUwMDNldm9sO1xuK1x0c3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTtcbiBcdHN0cnVjdCBydW5saXN0X2VsZW1lbnQgKnB1bmNoX3JsLCAqcmw7XG4gXHRzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eCA9IE5VTEw7XG4gXHRzNjQgZW5kX3ZjbjtcbkBAIC01MzkzLDEwICs1NTU4LDEyIEBAIGludCBudGZzX25vbl9yZXNpZGVudF9hdHRyX2NvbGxhcHNlX3JhbmdlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IHN0YXJ0X3ZjbixcbiBcdGlmIChzdGFydF92Y24gXHUwMDNlPSBlbmRfdmNuKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbitcdGF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4gXHRkb3duX3dyaXRlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4tXHRyZXQgPSBudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3QobmkpO1xuK1x0cmV0ID0gbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0X25vbG9jayhuaSk7XG4gXHRpZiAocmV0KSB7XG4gXHRcdHVwX3dyaXRlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4rXHRcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG5AQCAtNTQwNiw2ICs1NTczLDcgQEAgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfY29sbGFwc2VfcmFuZ2Uoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgc3RhcnRfdmNuLFxuIFx0cmwgPSBudGZzX3JsX2ZpbmRfdmNuX25vbG9jayhuaS1cdTAwM2VydW5saXN0LnJsLCBzdGFydF92Y24pO1xuIFx0aWYgKCFybCkge1xuIFx0XHR1cF93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuK1x0XHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuIFx0XHRyZXR1cm4gLUVJTztcbiBcdH1cbiBcbkBAIC01NDEzLDYgKzU1ODEsNyBAQCBpbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9jb2xsYXBzZV9yYW5nZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBzdGFydF92Y24sXG4gXHRcdFx0XHQgICAgc3RhcnRfdmNuLCBsZW4sIFx1MDAyNnB1bmNoX3JsLCBcdTAwMjZuZXdfcmxfY250KTtcbiBcdGlmIChJU19FUlIocmwpKSB7XG4gXHRcdHVwX3dyaXRlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4rXHRcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4gXHRcdHJldHVybiBQVFJfRVJSKHJsKTtcbiBcdH1cbiBcdG5pLVx1MDAzZXJ1bmxpc3QucmwgPSBybDtcbkBAIC01NDM0LDE1ICs1NjAzLDE3IEBAIGludCBudGZzX25vbl9yZXNpZGVudF9hdHRyX2NvbGxhcHNlX3JhbmdlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IHN0YXJ0X3ZjbixcbiBcdH1cbiBcbiBcdGlmIChuaS1cdTAwM2VhbGxvY2F0ZWRfc2l6ZSBcdTAwM2UgMCkge1xuLVx0XHRyZXQgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIDApO1xuK1x0XHRyZXQgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNfbm9sb2NrKG5pLCAwKTtcbiBcdFx0aWYgKHJldCkge1xuIFx0XHRcdHVwX3dyaXRlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4rXHRcdFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcbiBcdFx0XHRnb3RvIG91dF9ybDtcbiBcdFx0fVxuIFx0fVxuIFx0dXBfd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbitcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4gXG4tXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwpO1xuK1x0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4gXHRpZiAoIWN0eCkge1xuIFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIG91dF9ybDtcbkBAIC01NDc0LDYgKzU2NDUsNyBAQCBpbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9jb2xsYXBzZV9yYW5nZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBzdGFydF92Y24sXG4gaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfcHVuY2hfaG9sZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBzdGFydF92Y24sIHM2NCBsZW4pXG4ge1xuIFx0c3RydWN0IG50ZnNfdm9sdW1lICp2b2wgPSBuaS1cdTAwM2V2b2w7XG4rXHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pO1xuIFx0c3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqcHVuY2hfcmwsICpybDtcbiBcdHM2NCBlbmRfdmNuO1xuIFx0aW50IGRzdF9jbnQ7XG5AQCAtNTQ4NywxMCArNTY1OSwxMiBAQCBpbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9wdW5jaF9ob2xlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IHN0YXJ0X3ZjbiwgczY0XG4gXHRpZiAoc3RhcnRfdmNuIFx1MDAzZT0gZW5kX3ZjbilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4rXHRhdHRyX2xvY2tfbmkgPSBudGZzX2F0dHJfbGlzdF9sb2NrKG5pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuIFx0ZG93bl93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuLVx0cmV0ID0gbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0KG5pKTtcbitcdHJldCA9IG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdF9ub2xvY2sobmkpO1xuIFx0aWYgKHJldCkge1xuIFx0XHR1cF93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuK1x0XHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuQEAgLTU1MDAsNiArNTY3NCw3IEBAIGludCBudGZzX25vbl9yZXNpZGVudF9hdHRyX3B1bmNoX2hvbGUoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgc3RhcnRfdmNuLCBzNjRcbiBcdHJsID0gbnRmc19ybF9maW5kX3Zjbl9ub2xvY2sobmktXHUwMDNlcnVubGlzdC5ybCwgc3RhcnRfdmNuKTtcbiBcdGlmICghcmwpIHtcbiBcdFx0dXBfd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbitcdFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcbiBcdFx0cmV0dXJuIC1FSU87XG4gXHR9XG4gXG5AQCAtNTUwNywxMyArNTY4MiwxNSBAQCBpbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9wdW5jaF9ob2xlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IHN0YXJ0X3ZjbiwgczY0XG4gXHRcdFx0XHRzdGFydF92Y24sIGxlbiwgXHUwMDI2cHVuY2hfcmwsIFx1MDAyNm5ld19ybF9jb3VudCk7XG4gXHRpZiAoSVNfRVJSKHJsKSkge1xuIFx0XHR1cF93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuK1x0XHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuIFx0XHRyZXR1cm4gUFRSX0VSUihybCk7XG4gXHR9XG4gXHRuaS1cdTAwM2VydW5saXN0LnJsID0gcmw7XG4gXHRuaS1cdTAwM2VydW5saXN0LmNvdW50ID0gbmV3X3JsX2NvdW50O1xuIFxuLVx0cmV0ID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG5pLCAwKTtcbitcdHJldCA9IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlyc19ub2xvY2sobmksIDApO1xuIFx0dXBfd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbitcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4gXHRpZiAocmV0KSB7XG4gXHRcdGt2ZnJlZShwdW5jaF9ybCk7XG4gXHRcdHJldHVybiByZXQ7XG5AQCAtNTU0NCw5ICs1NzIxLDEzIEBAIGludCBudGZzX2F0dHJfZmFsbG9jYXRlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgYnl0ZV9sZW4sIGJvXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aWYgKE5Jbm9Ob25SZXNpZGVudChuaSkgXHUwMDI2XHUwMDI2ICFOSW5vRnVsbHlNYXBwZWQobmkpKSB7XG4rXHRcdHN0cnVjdCBudGZzX2lub2RlICphdHRyX2xvY2tfbmk7XG4rXG4rXHRcdGF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdFx0ZG93bl93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuLVx0XHRlcnIgPSBudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3QobmkpO1xuK1x0XHRlcnIgPSBudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3Rfbm9sb2NrKG5pKTtcbiBcdFx0dXBfd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbitcdFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHR9XG5AQCAtNTU1OCw3ICs1NzM5LDcgQEAgaW50IG50ZnNfYXR0cl9mYWxsb2NhdGUoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBieXRlX2xlbiwgYm9cbiBcdFx0cmV0dXJuIFBUUl9FUlIobXJlYyk7XG4gXHR9XG4gXG4tXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIG1yZWMpO1xuK1x0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBtcmVjLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4gXHRpZiAoIWN0eCkge1xuIFx0XHRlcnIgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIG91dF91bm1hcDtcbkBAIC01NjMzLDExICs1ODE0LDE1IEBAIGludCBudGZzX2F0dHJfZmFsbG9jYXRlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgYnl0ZV9sZW4sIGJvXG4gXHRcdFx0fVxuIFxuIFx0XHRcdHdoaWxlICh0cnlfYWxsb2NfY250IFx1MDAzZSAwKSB7XG4rXHRcdFx0XHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pO1xuK1xuIFx0XHRcdFx0bXV0ZXhfbG9ja19uZXN0ZWQoXHUwMDI2bmktXHUwMDNlbXJlY19sb2NrLCBOVEZTX0lOT0RFX01VVEVYX05PUk1BTCk7XG4rXHRcdFx0XHRhdHRyX2xvY2tfbmkgPSBudGZzX2F0dHJfbGlzdF9sb2NrKG5pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuIFx0XHRcdFx0ZG93bl93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuIFx0XHRcdFx0ZXJyID0gbnRmc19hdHRyX21hcF9jbHVzdGVyKG5pLCB2Y24sIFx1MDAyNmxjbiwgXHUwMDI2YWxsb2NfY250LFxuIFx0XHRcdFx0XHRcdFx0ICAgIHRyeV9hbGxvY19jbnQsIFx1MDAyNmJhbGxvYywgZmFsc2UsIGZhbHNlKTtcbiBcdFx0XHRcdHVwX3dyaXRlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4rXHRcdFx0XHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuIFx0XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5pLVx1MDAzZW1yZWNfbG9jayk7XG4gXHRcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0XHRnb3RvIG91dDtcbkBAIC01NjYzLDExICs1ODQ4LDE1IEBAIGludCBudGZzX2F0dHJfZmFsbG9jYXRlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgYnl0ZV9sZW4sIGJvXG4gXHQvKiBhbGxvY2F0ZSBjbHVzdGVycyBvdXRzaWRlIG9mIGluaXRpYWxpemVkX3NpemUgKi9cbiBcdHRyeV9hbGxvY19jbnQgPSB2Y25fZW5kIC0gdmNuO1xuIFx0d2hpbGUgKHRyeV9hbGxvY19jbnQgXHUwMDNlIDApIHtcbitcdFx0c3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTtcbitcbiBcdFx0bXV0ZXhfbG9ja19uZXN0ZWQoXHUwMDI2bmktXHUwMDNlbXJlY19sb2NrLCBOVEZTX0lOT0RFX01VVEVYX05PUk1BTCk7XG4rXHRcdGF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4gXHRcdGRvd25fd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbiBcdFx0ZXJyID0gbnRmc19hdHRyX21hcF9jbHVzdGVyKG5pLCB2Y24sIFx1MDAyNmxjbiwgXHUwMDI2YWxsb2NfY250LFxuIFx0XHRcdFx0XHQgICAgdHJ5X2FsbG9jX2NudCwgXHUwMDI2YmFsbG9jLCBmYWxzZSwgZmFsc2UpO1xuIFx0XHR1cF93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuK1x0XHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2bmktXHUwMDNlbXJlY19sb2NrKTtcbiBcdFx0aWYgKGVyciB8fCBzaWduYWxfcGVuZGluZyhjdXJyZW50KSlcbiBcdFx0XHRnb3RvIG91dDtcbkBAIC01Njc4LDE0ICs1ODY3LDE4IEBAIGludCBudGZzX2F0dHJfZmFsbG9jYXRlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgYnl0ZV9sZW4sIGJvXG4gXHR9XG4gXG4gXHRpZiAoTklub1J1bmxpc3REaXJ0eShuaSkpIHtcbitcdFx0c3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTtcbitcbiBcdFx0bXV0ZXhfbG9ja19uZXN0ZWQoXHUwMDI2bmktXHUwMDNlbXJlY19sb2NrLCBOVEZTX0lOT0RFX01VVEVYX05PUk1BTCk7XG4rXHRcdGF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4gXHRcdGRvd25fd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbi1cdFx0ZXJyID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG5pLCAwKTtcbitcdFx0ZXJyID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzX25vbG9jayhuaSwgMCk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0bnRmc19lcnJvcihuaS1cdTAwM2V2b2wtXHUwMDNlc2IsIFwiVXBkYXRpbmcgbWFwcGluZyBwYWlycyBmYWlsZWRcIik7XG4gXHRcdGVsc2VcbiBcdFx0XHROSW5vQ2xlYXJSdW5saXN0RGlydHkobmkpO1xuIFx0XHR1cF93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuK1x0XHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2bmktXHUwMDNlbXJlY19sb2NrKTtcbiBcdH1cbiBcdHJldHVybiBlcnI7XG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9hdHRyaWIuaCBiL2ZzL250ZnMvYXR0cmliLmhcbmluZGV4IGUyMjI0ZmJmYWFiZTk1Li42ZjE2NzE5NGFmYjg5OCAxMDA2NDRcbi0tLSBhL2ZzL250ZnMvYXR0cmliLmhcbisrKyBiL2ZzL250ZnMvYXR0cmliLmhcbkBAIC0yNiw2ICsyNiw4IEBAIGV4dGVybiBfX2xlMTYgQVRfVU5OQU1FRFtdO1xuICAqIEBiYXNlX250ZnNfaW5vOiBCYXNlIGlub2RlXG4gICogQG1hcHBlZF9iYXNlX21yZWM6IHRydWUgaWYgQGJhc2VfbXJlYyB3YXMgbWFwcGVkIGJ5IHRoZSBzZWFyY2hcbiAgKiBAYmFzZV9hdHRyOiBCYXNlIGF0dHJpYnV0ZSByZWNvcmQgcG9pbnRlclxuKyAqIEBhdHRyX2xpc3RfbG9ja19uaTogQmFzZSBpbm9kZSB3aG9zZSBhdHRyX2xpc3RfbG9jayBpcyBoZWxkXG4rICogQGF0dHJfbGlzdF9sb2NrX21vZGU6IGF0dHJfbGlzdF9sb2NrIG1vZGUgaGVsZCBieSB0aGlzIGNvbnRleHRcbiAgKlxuICAqIFN0cnVjdHVyZSBtdXN0IGJlIGluaXRpYWxpemVkIHRvIHplcm8gYmVmb3JlIHRoZSBmaXJzdCBjYWxsIHRvIG9uZSBvZiB0aGVcbiAgKiBhdHRyaWJ1dGUgc2VhcmNoIGZ1bmN0aW9ucy4gSW5pdGlhbGl6ZSBAbXJlYyB0byBwb2ludCB0byB0aGUgbWZ0IHJlY29yZCB0b1xuQEAgLTM5LDYgKzQxLDEyIEBAIGV4dGVybiBfX2xlMTYgQVRfVU5OQU1FRFtdO1xuICAqIGFueSBtb2RpZmljYXRpb24gb2YgdGhlIHNlYXJjaCBjb250ZXh0LCB0byBhdXRvbWFnaWNhbGx5IGdldCB0aGUgbmV4dFxuICAqIG1hdGNoaW5nIGF0dHJpYnV0ZS5cbiAgKi9cbitlbnVtIG50ZnNfYXR0cl9zZWFyY2hfY3R4X2xvY2tfbW9kZSB7XG4rXHROVEZTX0FUVFJfQ1RYX0xPQ0tfTk9ORSxcbitcdE5URlNfQVRUUl9DVFhfTE9DS19SRUFELFxuK1x0TlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFLFxuK307XG4rXG4gc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4IHtcbiBcdHN0cnVjdCBtZnRfcmVjb3JkICptcmVjO1xuIFx0Ym9vbCBtYXBwZWRfbXJlYztcbkBAIC01MCw2ICs1OCw4IEBAIHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCB7XG4gXHRzdHJ1Y3QgbWZ0X3JlY29yZCAqYmFzZV9tcmVjO1xuIFx0Ym9vbCBtYXBwZWRfYmFzZV9tcmVjO1xuIFx0c3RydWN0IGF0dHJfcmVjb3JkICpiYXNlX2F0dHI7XG4rXHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9saXN0X2xvY2tfbmk7XG4rXHRlbnVtIG50ZnNfYXR0cl9zZWFyY2hfY3R4X2xvY2tfbW9kZSBhdHRyX2xpc3RfbG9ja19tb2RlO1xuIH07XG4gXG4gZW51bSB7ICAgICAgICAgICAgICAgICAgLyogd2F5cyBvZiBwcm9jZXNzaW5nIGhvbGVzIHdoZW4gZXhwYW5kaW5nICovXG5AQCAtNjYsNiArNzYsNyBAQCBzdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpudGZzX2F0dHJfZmluZF92Y25fbm9sb2NrKHN0cnVjdCBudGZzX2lub2RlICpuaSxcbiBcdFx0Y29uc3QgczY0IHZjbiwgc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpO1xuIHN0cnVjdCBydW5saXN0X2VsZW1lbnQgKl9fbnRmc19hdHRyX2ZpbmRfdmNuX25vbG9jayhzdHJ1Y3QgcnVubGlzdCAqcnVubGlzdCxcbiBcdFx0Y29uc3QgczY0IHZjbik7XG4raW50IG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdF9ub2xvY2soc3RydWN0IG50ZnNfaW5vZGUgKm5pKTtcbiBpbnQgbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0KHN0cnVjdCBudGZzX2lub2RlICpuaSk7XG4gaW50IG50ZnNfYXR0cl9sb29rdXAoY29uc3QgX19sZTMyIHR5cGUsIGNvbnN0IF9fbGUxNiAqbmFtZSxcbiBcdFx0Y29uc3QgdTMyIG5hbWVfbGVuLCBjb25zdCB1MzIgaWMsXG5AQCAtODcsNyArOTgsMTYgQEAgc3RhdGljIGlubGluZSBzNjQgbnRmc19hdHRyX3NpemUoY29uc3Qgc3RydWN0IGF0dHJfcmVjb3JkICphKVxuIFxuIHZvaWQgbnRmc19hdHRyX3JlaW5pdF9zZWFyY2hfY3R4KHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4KTtcbiBzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKm50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXG4tXHRcdHN0cnVjdCBtZnRfcmVjb3JkICptcmVjKTtcbitcdFx0c3RydWN0IG1mdF9yZWNvcmQgKm1yZWMsXG4rXHRcdGVudW0gbnRmc19hdHRyX3NlYXJjaF9jdHhfbG9ja19tb2RlIGxvY2tfbW9kZSk7XG4rc3RydWN0IG50ZnNfaW5vZGUgKm50ZnNfYXR0cl9saXN0X2xvY2soc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxuK1x0XHRcdFx0ICAgICAgIGVudW0gbnRmc19hdHRyX3NlYXJjaF9jdHhfbG9ja19tb2RlIGxvY2tfbW9kZSk7XG4rdm9pZCBudGZzX2F0dHJfbGlzdF91bmxvY2soc3RydWN0IG50ZnNfaW5vZGUgKmxvY2tfbmksXG4rXHRcdFx0ICAgZW51bSBudGZzX2F0dHJfc2VhcmNoX2N0eF9sb2NrX21vZGUgbG9ja19tb2RlKTtcbit2b2lkIG50ZnNfYXR0cl9sb2NrX3NlYXJjaF9jdHgoc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBudGZzX2lub2RlICpuaSxcbitcdFx0XHQgICAgICAgZW51bSBudGZzX2F0dHJfc2VhcmNoX2N0eF9sb2NrX21vZGUgbG9ja19tb2RlKTtcbit2b2lkIG50ZnNfYXR0cl91bmxvY2tfc2VhcmNoX2N0eChzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eCk7XG4gdm9pZCBudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpO1xuIGludCBudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2soY29uc3Qgc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsXG4gXHRcdGNvbnN0IF9fbGUzMiB0eXBlLCBjb25zdCBzNjQgc2l6ZSk7XG5AQCAtMTMzLDYgKzE1Myw3IEBAIGludCBudGZzX3Jlc2lkZW50X2F0dHJfcmVjb3JkX2FkZChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIF9fbGUzMiB0eXBlLFxuIFx0XHRfX2xlMTYgKm5hbWUsIHU4IG5hbWVfbGVuLCB1OCAqdmFsLCB1MzIgc2l6ZSxcbiBcdFx0X19sZTE2IGZsYWdzKTtcbiBpbnQgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IGZyb21fdmNuKTtcbitpbnQgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzX25vbG9jayhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBmcm9tX3Zjbik7XG4gc3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqbnRmc19hdHRyX3Zjbl90b19ybChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCB2Y24sIHM2NCAqbGNuKTtcbiBcbiAvKlxuQEAgLTE0OCw3ICsxNjksOSBAQCBzdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpudGZzX2F0dHJfdmNuX3RvX3JsKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IHZjbiwgczY0XG4gICpcdCAgICBAbmksIHlvdSBjYW4gc2ltcGx5IGRvOlxuICAqXG4gICpcdGludCBlcnI7XG4tICpcdHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTtcbisgKlx0c3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHg7XG4rICpcbisgKlx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4gICpcdGlmICghY3R4KVxuICAqXHRcdC8vIEVycm9yIGNvZGUgaXMgaW4gZXJybm8uIEhhbmRsZSB0aGlzIGNhc2UuXG4gICpcdHdoaWxlICghKGVyciA9IG50ZnNfYXR0cnNfd2FsayhjdHgpKSkge1xuZGlmZiAtLWdpdCBhL2ZzL250ZnMvYXR0cmxpc3QuYyBiL2ZzL250ZnMvYXR0cmxpc3QuY1xuaW5kZXggYWZiMTMwMzhiYTQyNWYuLmZkNWVhYzA2MTI3ODRiIDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9hdHRybGlzdC5jXG4rKysgYi9mcy9udGZzL2F0dHJsaXN0LmNcbkBAIC0xNTMsNyArMTUzLDcgQEAgaW50IG50ZnNfYXR0cmxpc3RfZW50cnlfYWRkKHN0cnVjdCBudGZzX2lub2RlICpuaSwgc3RydWN0IGF0dHJfcmVjb3JkICphdHRyKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdC8qIEZpbmQgcGxhY2UgZm9yIHRoZSBuZXcgZW50cnkuICovXG4tXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwpO1xuK1x0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuIFx0aWYgKCFjdHgpIHtcbiBcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0bnRmc19lcnJvcihuaS1cdTAwM2V2b2wtXHUwMDNlc2IsIFwiRmFpbGVkIHRvIGdldCBzZWFyY2ggY29udGV4dFwiKTtcbkBAIC0xNzYsNyArMTc2LDYgQEAgaW50IG50ZnNfYXR0cmxpc3RfZW50cnlfYWRkKHN0cnVjdCBudGZzX2lub2RlICpuaSwgc3RydWN0IGF0dHJfcmVjb3JkICphdHRyKVxuIFx0XHRpZiAoY3R4LVx1MDAzZWFsX2VudHJ5LVx1MDAzZWxvd2VzdF92Y24gPT0gbG93ZXN0X3Zjbikge1xuIFx0XHRcdGVyciA9IC1FRVhJU1Q7XG4gXHRcdFx0bnRmc19kZWJ1ZyhcIlN1Y2ggYXR0cmlidXRlIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgYXR0cmlidXRlIGxpc3QuXFxuXCIpO1xuLVx0XHRcdG50ZnNfYXR0cl9wdXRfc2VhcmNoX2N0eChjdHgpO1xuIFx0XHRcdGdvdG8gZXJyX291dDtcbiBcdFx0fVxuIFx0XHQvKiBBZGQgbmV3IGVudHJ5IGFmdGVyIHRoaXMgZXh0ZW50LiAqL1xuQEAgLTE4NiwxNSArMTg1LDExIEBAIGludCBudGZzX2F0dHJsaXN0X2VudHJ5X2FkZChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHN0cnVjdCBhdHRyX3JlY29yZCAqYXR0cilcbiBcdFx0LyogQ2hlY2sgZm9yIHJlYWwgZXJyb3JzLiAqL1xuIFx0XHRpZiAoZXJyICE9IC1FTk9FTlQpIHtcbiBcdFx0XHRudGZzX2RlYnVnKFwiQXR0cmlidXRlIGxvb2t1cCBmYWlsZWQuXFxuXCIpO1xuLVx0XHRcdG50ZnNfYXR0cl9wdXRfc2VhcmNoX2N0eChjdHgpO1xuIFx0XHRcdGdvdG8gZXJyX291dDtcbiBcdFx0fVxuIFx0XHQvKiBObyBwcmV2aW91cyBleHRlbnRzIGZvdW5kLiAqL1xuIFx0XHRhbGUgPSBjdHgtXHUwMDNlYWxfZW50cnk7XG4gXHR9XG4tXHQvKiBEb24ndCBuZWVkIGl0IGFueW1vcmUsIEBjdHgtXHUwMDNlYWxfZW50cnkgcG9pbnRzIHRvIEBuaS1cdTAwM2VhdHRyX2xpc3QuICovXG4tXHRudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoY3R4KTtcbi1cbiBcdC8qIERldGVybWluZSBuZXcgZW50cnkgb2Zmc2V0LiAqL1xuIFx0ZW50cnlfb2Zmc2V0ID0gKCh1OCAqKWFsZSAtIG5pLVx1MDAzZWF0dHJfbGlzdCk7XG4gXHQvKiBTZXQgcG9pbnRlciB0byBuZXcgZW50cnkuICovXG5AQCAtMjIzLDE2ICsyMTgsMjIgQEAgaW50IG50ZnNfYXR0cmxpc3RfZW50cnlfYWRkKHN0cnVjdCBudGZzX2lub2RlICpuaSwgc3RydWN0IGF0dHJfcmVjb3JkICphdHRyKVxuIFx0b2xkX2FsID0gbmktXHUwMDNlYXR0cl9saXN0O1xuIFx0bmktXHUwMDNlYXR0cl9saXN0ID0gbmV3X2FsO1xuIFx0bmktXHUwMDNlYXR0cl9saXN0X3NpemUgPSBuaS1cdTAwM2VhdHRyX2xpc3Rfc2l6ZSArIGVudHJ5X2xlbjtcbitcdG50ZnNfYXR0cl9wdXRfc2VhcmNoX2N0eChjdHgpO1xuK1x0Y3R4ID0gTlVMTDtcbiBcbiBcdGVyciA9IG50ZnNfYXR0cmxpc3RfdXBkYXRlKG5pKTtcbiBcdGlmIChlcnIpIHtcbitcdFx0ZG93bl93cml0ZShcdTAwMjZuaS1cdTAwM2VhdHRyX2xpc3RfbG9jayk7XG4gXHRcdG5pLVx1MDAzZWF0dHJfbGlzdCA9IG9sZF9hbDtcbiBcdFx0bmktXHUwMDNlYXR0cl9saXN0X3NpemUgLT0gZW50cnlfbGVuO1xuK1x0XHR1cF93cml0ZShcdTAwMjZuaS1cdTAwM2VhdHRyX2xpc3RfbG9jayk7XG4gXHRcdGdvdG8gZXJyX291dDtcbiBcdH1cbiBcdGt2ZnJlZShvbGRfYWwpO1xuIFx0cmV0dXJuIDA7XG4gZXJyX291dDpcbitcdGlmIChjdHgpXG4rXHRcdG50ZnNfYXR0cl9wdXRfc2VhcmNoX2N0eChjdHgpO1xuIFx0a3ZmcmVlKG5ld19hbCk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbkBAIC0yNDgsOSArMjQ5LDEyIEBAIGludCBudGZzX2F0dHJsaXN0X2VudHJ5X2FkZChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHN0cnVjdCBhdHRyX3JlY29yZCAqYXR0cilcbiBpbnQgbnRmc19hdHRybGlzdF9lbnRyeV9ybShzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eClcbiB7XG4gXHR1OCAqbmV3X2FsO1xuLVx0aW50IG5ld19hbF9sZW47XG4rXHRpbnQgZXJyLCBuZXdfYWxfbGVuO1xuIFx0c3RydWN0IG50ZnNfaW5vZGUgKmJhc2Vfbmk7XG4gXHRzdHJ1Y3QgYXR0cl9saXN0X2VudHJ5ICphbGU7XG4rXHRlbnVtIG50ZnNfYXR0cl9zZWFyY2hfY3R4X2xvY2tfbW9kZSBsb2NrX21vZGU7XG4rXHRib29sIGN0eF9sb2NrZWQ7XG4rXHR1OCAqb2xkX2FsO1xuIFxuIFx0aWYgKCFjdHggfHwgIWN0eC1cdTAwM2VudGZzX2lubyB8fCAhY3R4LVx1MDAzZWFsX2VudHJ5KSB7XG4gXHRcdG50ZnNfZGVidWcoXCJJbnZhbGlkIGFyZ3VtZW50cy5cXG5cIik7XG5AQCAtMjg1LDkgKzI4OSwxNyBAQCBpbnQgbnRmc19hdHRybGlzdF9lbnRyeV9ybShzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eClcbiBcdFx0XHRcdGFsZS1cdTAwM2VsZW5ndGgpLCBuZXdfYWxfbGVuIC0gKCh1OCAqKWFsZSAtIGJhc2VfbmktXHUwMDNlYXR0cl9saXN0KSk7XG4gXG4gXHQvKiBTZXQgbmV3IHJ1bmxpc3QuICovXG4tXHRrdmZyZWUoYmFzZV9uaS1cdTAwM2VhdHRyX2xpc3QpO1xuK1x0b2xkX2FsID0gYmFzZV9uaS1cdTAwM2VhdHRyX2xpc3Q7XG4gXHRiYXNlX25pLVx1MDAzZWF0dHJfbGlzdCA9IG5ld19hbDtcbiBcdGJhc2VfbmktXHUwMDNlYXR0cl9saXN0X3NpemUgPSBuZXdfYWxfbGVuO1xuK1x0a3ZmcmVlKG9sZF9hbCk7XG4gXG4tXHRyZXR1cm4gbnRmc19hdHRybGlzdF91cGRhdGUoYmFzZV9uaSk7XG4rXHRjdHhfbG9ja2VkID0gY3R4LVx1MDAzZWF0dHJfbGlzdF9sb2NrX25pO1xuK1x0bG9ja19tb2RlID0gY3R4LVx1MDAzZWF0dHJfbGlzdF9sb2NrX21vZGU7XG4rXHRpZiAoY3R4X2xvY2tlZClcbitcdFx0bnRmc19hdHRyX3VubG9ja19zZWFyY2hfY3R4KGN0eCk7XG4rXHRlcnIgPSBudGZzX2F0dHJsaXN0X3VwZGF0ZShiYXNlX25pKTtcbitcdGlmIChjdHhfbG9ja2VkKVxuK1x0XHRudGZzX2F0dHJfbG9ja19zZWFyY2hfY3R4KGN0eCwgYmFzZV9uaSwgbG9ja19tb2RlKTtcbitcdHJldHVybiBlcnI7XG4gfVxuZGlmZiAtLWdpdCBhL2ZzL250ZnMvY29tcHJlc3MuYyBiL2ZzL250ZnMvY29tcHJlc3MuY1xuaW5kZXggNzZiZDgwNmI0MWVkZDkuLmJhYzZiMzIwNjk0NzUzIDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9jb21wcmVzcy5jXG4rKysgYi9mcy9udGZzL2NvbXByZXNzLmNcbkBAIC0xMjg3LDYgKzEyODcsNyBAQCBzdGF0aWMgaW50IG50ZnNfd3JpdGVfY2Ioc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBsb2ZmX3QgcG9zLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxuIFx0LyogbW9yZSBjb21wcmVzc2VkIHplcm9lcywgdG8gYmUgZm9sbG93ZWQgYnkgc29tZSBjb3VudCAqL1xuIFx0c3RhdGljIGNoYXIgbW9yZXplcm9lc1tdID0gezB4MDMsIDB4YjAsIDB4MDIsIDB4MDB9O1xuIFx0c3RydWN0IHBhZ2UgKipwYWdlc19kaXNrID0gTlVMTCwgKnBnO1xuK1x0c3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTtcbiBcdHM2NCBiaW9fbGNuO1xuIFx0c3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqcmxjLCAqcmw7XG4gXHRpbnQgaSwgZXJyO1xuQEAgLTEzOTAsMTAgKzEzOTEsMTIgQEAgc3RhdGljIGludCBudGZzX3dyaXRlX2NiKHN0cnVjdCBudGZzX2lub2RlICpuaSwgbG9mZl90IHBvcywgc3RydWN0IHBhZ2UgKipwYWdlcyxcbiBcdH1cbiBcbiBcdGJpb19sY24gPSBybGMtXHUwMDNlbGNuO1xuK1x0YXR0cl9sb2NrX25pID0gbnRmc19hdHRyX2xpc3RfbG9jayhuaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcbiBcdGRvd25fd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbiBcdHJsID0gbnRmc19ydW5saXN0c19tZXJnZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LCBybGMsIDAsIFx1MDAyNm5ld19ybF9jb3VudCk7XG4gXHRpZiAoSVNfRVJSKHJsKSkge1xuIFx0XHR1cF93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuK1x0XHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuIFx0XHRudGZzX2Vycm9yKHZvbC1cdTAwM2VzYiwgXCJGYWlsZWQgdG8gbWVyZ2UgcnVubGlzdHNcIik7XG4gXHRcdGVyciA9IFBUUl9FUlIocmwpO1xuIFx0XHRpZiAobnRmc19jbHVzdGVyX2ZyZWVfZnJvbV9ybCh2b2wsIHJsYykpXG5AQCAtMTQwNSw4ICsxNDA4LDkgQEAgc3RhdGljIGludCBudGZzX3dyaXRlX2NiKHN0cnVjdCBudGZzX2lub2RlICpuaSwgbG9mZl90IHBvcywgc3RydWN0IHBhZ2UgKipwYWdlcyxcbiBcdG5pLVx1MDAzZXJ1bmxpc3QuY291bnQgPSBuZXdfcmxfY291bnQ7XG4gXHRuaS1cdTAwM2VydW5saXN0LnJsID0gcmw7XG4gXG4tXHRlcnIgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIDApO1xuK1x0ZXJyID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzX25vbG9jayhuaSwgMCk7XG4gXHR1cF93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuK1x0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0ZXJyID0gLUVJTztcbiBcdFx0Z290byBvdXQ7XG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9kaXIuYyBiL2ZzL250ZnMvZGlyLmNcbmluZGV4IDRiNmJkNWYzMGM2NWVhLi4xNjU1MDNkMDU5YzZkZSAxMDA2NDRcbi0tLSBhL2ZzL250ZnMvZGlyLmNcbisrKyBiL2ZzL250ZnMvZGlyLmNcbkBAIC05MSw3ICs5MSw3IEBAIHU2NCBudGZzX2xvb2t1cF9pbm9kZV9ieV9uYW1lKHN0cnVjdCBudGZzX2lub2RlICpkaXJfbmksIGNvbnN0IF9fbGUxNiAqdW5hbWUsXG4gXHRcdFx0XHQtUFRSX0VSUihtKSk7XG4gXHRcdHJldHVybiBFUlJfTVJFRihQVFJfRVJSKG0pKTtcbiBcdH1cbi1cdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChkaXJfbmksIG0pO1xuK1x0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KGRpcl9uaSwgbSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0aWYgKHVubGlrZWx5KCFjdHgpKSB7XG4gXHRcdGVyciA9IC1FTk9NRU07XG4gXHRcdGdvdG8gZXJyX291dDtcbkBAIC04MTQsNyArODE0LDcgQEAgc3RhdGljIGludCBudGZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkaXJfY29udGV4dCAqYWN0b3IpXG4gXHRcdGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhID0gcHJpdmF0ZTtcbiBcdH1cbiBcbi1cdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuZGlyLCBOVUxMKTtcbitcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuZGlyLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4gXHRpZiAoIWN0eCkge1xuIFx0XHRlcnIgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIG91dDtcbkBAIC0xMDE1LDcgKzEwMTUsNyBAQCBpbnQgbnRmc19jaGVja19lbXB0eV9kaXIoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzdHJ1Y3QgbWZ0X3JlY29yZCAqbmlfbXJlYylcbiBcdGlmICghKG5pX21yZWMtXHUwMDNlZmxhZ3MgXHUwMDI2IE1GVF9SRUNPUkRfSVNfRElSRUNUT1JZKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwpO1xuK1x0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4gXHRpZiAoIWN0eCkge1xuIFx0XHRudGZzX2Vycm9yKG5pLVx1MDAzZXZvbC1cdTAwM2VzYiwgXCJGYWlsZWQgdG8gZ2V0IHNlYXJjaCBjb250ZXh0XCIpO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbkBAIC0xMTE2LDcgKzExMTYsNyBAQCBzdGF0aWMgaW50IG50ZnNfZGlyX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxwLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG4gXHRpZiAoTlZvbFNodXRkb3duKHZvbCkpXG4gXHRcdHJldHVybiAtRUlPO1xuIFxuLVx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTtcbitcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0aWYgKCFjdHgpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL250ZnMvZWEuYyBiL2ZzL250ZnMvZWEuY1xuaW5kZXggMGNkMTkyNzUyYjdjZDcuLjI4NGM5ODU4MDdhNmU2IDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9lYS5jXG4rKysgYi9mcy9udGZzL2VhLmNcbkBAIC01ODcsNyArNTg3LDcgQEAgc3RhdGljIGludCBudGZzX25ld19hdHRyX2ZsYWdzKHN0cnVjdCBudGZzX2lub2RlICpuaSwgX19sZTMyIGZhdHRyKVxuIFx0aWYgKElTX0VSUihtKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIobSk7XG4gXG4tXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIG0pO1xuK1x0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBtLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4gXHRpZiAoIWN0eCkge1xuIFx0XHRlcnIgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIGVycl9vdXQ7XG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9maWxlLmMgYi9mcy9udGZzL2ZpbGUuY1xuaW5kZXggNmE3YjYzOGU1MjNkOTEuLmRjYjU1NTRmZjFiNzE3IDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9maWxlLmNcbisrKyBiL2ZzL250ZnMvZmlsZS5jXG5AQCAtMjMsNiArMjMsNyBAQFxuICNpbmNsdWRlIFwiaW9tYXAuaFwiXG4gI2luY2x1ZGUgXCJiaXRtYXAuaFwiXG4gI2luY2x1ZGUgXCJ2b2x1bWUuaFwiXG4rI2luY2x1ZGUgXCJhdHRyaWIuaFwiXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmlsZWxvY2suaFx1MDAzZVxuIFxuQEAgLTc5LDYgKzgwLDcgQEAgc3RhdGljIGludCBudGZzX3RyaW1fcHJlYWxsb2Moc3RydWN0IGlub2RlICp2aSlcbiB7XG4gXHRzdHJ1Y3QgbnRmc19pbm9kZSAqbmkgPSBOVEZTX0kodmkpO1xuIFx0c3RydWN0IG50ZnNfdm9sdW1lICp2b2wgPSBuaS1cdTAwM2V2b2w7XG4rXHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pO1xuIFx0c3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqcmw7XG4gXHRzNjQgYWxpZ25lZF9kYXRhX3NpemU7XG4gXHRzNjQgdmNuX2RzLCB2Y25fdHI7XG5AQCAtODcsNiArODksNyBAQCBzdGF0aWMgaW50IG50ZnNfdHJpbV9wcmVhbGxvYyhzdHJ1Y3QgaW5vZGUgKnZpKVxuIFxuIFx0aW5vZGVfbG9jayh2aSk7XG4gXHRtdXRleF9sb2NrKFx1MDAyNm5pLVx1MDAzZW1yZWNfbG9jayk7XG4rXHRhdHRyX2xvY2tfbmkgPSBudGZzX2F0dHJfbGlzdF9sb2NrKG5pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuIFx0ZG93bl93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuIFxuIFx0YWxpZ25lZF9kYXRhX3NpemUgPSByb3VuZF91cChuaS1cdTAwM2VkYXRhX3NpemUsIHZvbC1cdTAwM2VjbHVzdGVyX3NpemUpO1xuQEAgLTExMSw3ICsxMTQsNyBAQCBzdGF0aWMgaW50IG50ZnNfdHJpbV9wcmVhbGxvYyhzdHJ1Y3QgaW5vZGUgKnZpKVxuIFx0XHRcdG50ZnNfZXJyb3Iodm9sLVx1MDAzZXNiLCBcIlByZWFsbG9jYXRlZCBibG9jayByb2xsYmFjayBmYWlsZWRcIik7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0bmktXHUwMDNlYWxsb2NhdGVkX3NpemUgPSBudGZzX2NsdXN0ZXJfdG9fYnl0ZXModm9sLCB2Y25fdHIpO1xuLVx0XHRcdGVyciA9IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhuaSwgMCk7XG4rXHRcdFx0ZXJyID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzX25vbG9jayhuaSwgMCk7XG4gXHRcdFx0aWYgKGVycilcbiBcdFx0XHRcdG50ZnNfZXJyb3Iodm9sLVx1MDAzZXNiLFxuIFx0XHRcdFx0XHQgICBcIkZhaWxlZCB0byByb2xsYmFjayBtYXBwaW5nIHBhaXJzIGZvciBwcmVhbGxvY1wiKTtcbkBAIC0xMjAsNiArMTIzLDcgQEAgc3RhdGljIGludCBudGZzX3RyaW1fcHJlYWxsb2Moc3RydWN0IGlub2RlICp2aSlcbiBcbiBvdXRfdW5sb2NrOlxuIFx0dXBfd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbitcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2bmktXHUwMDNlbXJlY19sb2NrKTtcbiBcdGlub2RlX3VubG9jayh2aSk7XG4gXG5AQCAtMTc3LDcgKzE4MSw3IEBAIHN0YXRpYyBpbnQgbnRmc19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxwLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG4gXHRcdHJldCA9IF9fbnRmc193cml0ZV9pbm9kZSh2aSwgMSk7XG4gXHR3cml0ZV9pbm9kZV9ub3codmksICFkYXRhc3luYyk7XG4gXG4tXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwpO1xuK1x0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4gXHRpZiAoIWN0eClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMTA1Nyw2ICsxMDYxLDcgQEAgc3RhdGljIGxvbmcgbnRmc19mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVcbiBcdHN0cnVjdCBpbm9kZSAqdmkgPSBmaWxlX2lub2RlKGZpbGUpO1xuIFx0c3RydWN0IG50ZnNfaW5vZGUgKm5pID0gTlRGU19JKHZpKTtcbiBcdHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sID0gbmktXHUwMDNldm9sO1xuK1x0c3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTtcbiBcdGludCBlcnIgPSAwO1xuIFx0bG9mZl90IG9sZF9zaXplO1xuIFx0Ym9vbCBtYXBfbG9ja2VkID0gZmFsc2U7XG5AQCAtMTA3MSw5ICsxMDc2LDExIEBAIHN0YXRpYyBsb25nIG50ZnNfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlXG4gXHRcdHJldHVybiAtRU5PU1BDO1xuIFxuIFx0aWYgKE5Jbm9Ob25SZXNpZGVudChuaSkgXHUwMDI2XHUwMDI2ICFOSW5vRnVsbHlNYXBwZWQobmkpKSB7XG4rXHRcdGF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdFx0ZG93bl93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuLVx0XHRlcnIgPSBudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3QobmkpO1xuK1x0XHRlcnIgPSBudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3Rfbm9sb2NrKG5pKTtcbiBcdFx0dXBfd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbitcdFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9pbmRleC5jIGIvZnMvbnRmcy9pbmRleC5jXG5pbmRleCBjNWYyY2Y3NWI3NTBlOS4uMzZhNzBhYWE5ZTJkZTcgMTAwNjQ0XG4tLS0gYS9mcy9udGZzL2luZGV4LmNcbisrKyBiL2ZzL250ZnMvaW5kZXguY1xuQEAgLTU3NSw3ICs1NzUsNyBAQCBzdGF0aWMgc3RydWN0IGluZGV4X3Jvb3QgKm50ZnNfaXJfbG9va3VwKHN0cnVjdCBudGZzX2lub2RlICpuaSwgX19sZTE2ICpuYW1lLFxuIFx0c3RydWN0IGluZGV4X3Jvb3QgKmlyID0gTlVMTDtcbiBcbiBcdG50ZnNfZGVidWcoXCJFbnRlcmluZ1xcblwiKTtcbi1cdCpjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwpO1xuK1x0KmN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcbiBcdGlmICghKmN0eCkge1xuIFx0XHRudGZzX2Vycm9yKG5pLVx1MDAzZXZvbC1cdTAwM2VzYiwgXCIlcywgRmFpbGVkIHRvIGdldCBzZWFyY2ggY29udGV4dFwiLCBfX2Z1bmNfXyk7XG4gXHRcdHJldHVybiBOVUxMO1xuQEAgLTEzMzIsNyArMTMzMiw4IEBAIHN0YXRpYyBpbnQgbnRmc19pcl9yZXBhcmVudChzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gpXG4gXHQgKiBXaGVuIHRoZXJlIGlzIG5vIHNwYWNlIHRvIGJ1aWxkIGEgbm9uLXJlc2lkZW50XG4gXHQgKiBpbmRleCwgd2UgbWF5IGhhdmUgdG8gbW92ZSB0aGUgcm9vdCB0byBhbiBleHRlbnRcbiBcdCAqL1xuLVx0aWYgKChyZXQgPT0gLUVOT1NQQykgXHUwMDI2XHUwMDI2IChjdHgtXHUwMDNlYWxfZW50cnkgfHwgIW50ZnNfaW5vZGVfYWRkX2F0dHJsaXN0KGljeC1cdTAwM2VpZHhfbmkpKSkge1xuK1x0aWYgKChyZXQgPT0gLUVOT1NQQykgXHUwMDI2XHUwMDI2XG4rXHQgICAgKGN0eC1cdTAwM2VhbF9lbnRyeSB8fCAhbnRmc19pbm9kZV9hZGRfYXR0cmxpc3Rfbm9sb2NrKGljeC1cdTAwM2VpZHhfbmkpKSkge1xuIFx0XHRudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoY3R4KTtcbiBcdFx0Y3R4ID0gTlVMTDtcbiBcdFx0aXIgPSBudGZzX2lyX2xvb2t1cChpY3gtXHUwMDNlaWR4X25pLCBpY3gtXHUwMDNlbmFtZSwgaWN4LVx1MDAzZW5hbWVfbGVuLCBcdTAwMjZjdHgpO1xuZGlmZiAtLWdpdCBhL2ZzL250ZnMvaW5vZGUuYyBiL2ZzL250ZnMvaW5vZGUuY1xuaW5kZXggYzI3MTU1MjFlNTYyODYuLjhlZDZjYjViOWM0MmY4IDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9pbm9kZS5jXG4rKysgYi9mcy9udGZzL2lub2RlLmNcbkBAIC0zMjYsNyArMzI2LDcgQEAgc3RhdGljIGludCBudGZzX25vbl9yZXNpZGVudF9kZWFsbG9jX2NsdXN0ZXJzKHN0cnVjdCBudGZzX2lub2RlICpuaSlcbiBcdHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqYWN0eDtcbiBcdGludCBlcnIgPSAwO1xuIFxuLVx0YWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCk7XG4rXHRhY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4gXHRpZiAoIWFjdHgpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0V0FSTl9PTihhY3R4LVx1MDAzZW1yZWMtXHUwMDNlbGlua19jb3VudCAhPSAwKTtcbkBAIC00NzUsNiArNDc1LDcgQEAgdm9pZCBfX250ZnNfaW5pdF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXG4gXHRuaS1cdTAwM2Vmb2xpbyA9IE5VTEw7XG4gXHRuaS1cdTAwM2Vmb2xpb19vZnMgPSAwO1xuIFx0bmktXHUwMDNlbXJlYyA9IE5VTEw7XG4rXHRpbml0X3J3c2VtKFx1MDAyNm5pLVx1MDAzZWF0dHJfbGlzdF9sb2NrKTtcbiBcdG5pLVx1MDAzZWF0dHJfbGlzdF9zaXplID0gMDtcbiBcdG5pLVx1MDAzZWF0dHJfbGlzdCA9IE5VTEw7XG4gXHRuaS1cdTAwM2VpdHlwZS5pbmRleC5ibG9ja19zaXplID0gMDtcbkBAIC03MTMsNyArNzE0LDcgQEAgc3RhdGljIGludCBudGZzX3JlYWRfbG9ja2VkX2lub2RlKHN0cnVjdCBpbm9kZSAqdmkpXG4gXHRcdGdvdG8gZXJyX291dDtcbiBcdH1cbiBcbi1cdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgbSk7XG4rXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIG0sIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdGlmICghY3R4KSB7XG4gXHRcdGVyciA9IC1FTk9NRU07XG4gXHRcdGdvdG8gdW5tX2Vycl9vdXQ7XG5AQCAtMTI4MCw3ICsxMjgxLDcgQEAgc3RhdGljIGludCBudGZzX3JlYWRfbG9ja2VkX2F0dHJfaW5vZGUoc3RydWN0IGlub2RlICpiYXNlX3ZpLCBzdHJ1Y3QgaW5vZGUgKnZpKVxuIFx0XHRlcnIgPSBQVFJfRVJSKG0pO1xuIFx0XHRnb3RvIGVycl9vdXQ7XG4gXHR9XG4tXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoYmFzZV9uaSwgbSk7XG4rXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoYmFzZV9uaSwgbSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0aWYgKCFjdHgpIHtcbiBcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0Z290byB1bm1fZXJyX291dDtcbkBAIC0xNTIwLDcgKzE1MjEsNyBAQCBzdGF0aWMgaW50IG50ZnNfcmVhZF9sb2NrZWRfaW5kZXhfaW5vZGUoc3RydWN0IGlub2RlICpiYXNlX3ZpLCBzdHJ1Y3QgaW5vZGUgKnZpKVxuIFx0XHRlcnIgPSBQVFJfRVJSKG0pO1xuIFx0XHRnb3RvIGVycl9vdXQ7XG4gXHR9XG4tXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoYmFzZV9uaSwgbSk7XG4rXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoYmFzZV9uaSwgbSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0aWYgKCFjdHgpIHtcbiBcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0Z290byB1bm1fZXJyX291dDtcbkBAIC0xOTExLDcgKzE5MTIsNyBAQCBpbnQgbnRmc19yZWFkX2lub2RlX21vdW50KHN0cnVjdCBpbm9kZSAqdmkpXG4gXHQvKiBQcm92aWRlcyByZWFkX2ZvbGlvKCkgZm9yIG1hcF9tZnRfcmVjb3JkKCkuICovXG4gXHR2aS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHMgPSBcdTAwMjZudGZzX21mdF9hb3BzO1xuIFxuLVx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBtKTtcbitcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgbSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0aWYgKCFjdHgpIHtcbiBcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0Z290byBlcnJfb3V0O1xuQEAgLTI0NjYsNyArMjQ2Nyw3IEBAIHN0YXRpYyBpbnQgbnRmc19pbm9kZV9zeW5jX3N0YW5kYXJkX2luZm9ybWF0aW9uKHN0cnVjdCBpbm9kZSAqdmksIHN0cnVjdCBtZnRfcmVjXG4gXHRib29sIG1vZGlmaWVkID0gZmFsc2U7XG4gXG4gXHQvKiBVcGRhdGUgdGhlIGFjY2VzcyB0aW1lcyBpbiB0aGUgc3RhbmRhcmQgaW5mb3JtYXRpb24gYXR0cmlidXRlLiAqL1xuLVx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBtKTtcbitcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgbSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0aWYgKHVubGlrZWx5KCFjdHgpKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdGVyciA9IG50ZnNfYXR0cl9sb29rdXAoQVRfU1RBTkRBUkRfSU5GT1JNQVRJT04sIE5VTEwsIDAsXG5AQCAtMjU2Nyw3ICsyNTY4LDcgQEAgaW50IG50ZnNfaW5vZGVfc3luY19maWxlbmFtZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXG4gXG4gXHRudGZzX2RlYnVnKFwiRW50ZXJpbmcgZm9yIGlub2RlICVsbHVcXG5cIiwgbmktXHUwMDNlbWZ0X25vKTtcbiBcbi1cdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCk7XG4rXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdGlmICghY3R4KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0yNzU5LDExICsyNzYwLDE1IEBAIGludCBfX250ZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICp2aSwgaW50IHN5bmMpXG4gXHR9XG4gXG4gXHRpZiAoTklub05vblJlc2lkZW50KG5pKSBcdTAwMjZcdTAwMjYgTklub1J1bmxpc3REaXJ0eShuaSkpIHtcbitcdFx0c3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTtcbitcbitcdFx0YXR0cl9sb2NrX25pID0gbnRmc19hdHRyX2xpc3RfbG9jayhuaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcbiBcdFx0ZG93bl93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuLVx0XHRlcnIgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIDApO1xuK1x0XHRlcnIgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNfbm9sb2NrKG5pLCAwKTtcbiBcdFx0aWYgKCFlcnIpXG4gXHRcdFx0Tklub0NsZWFyUnVubGlzdERpcnR5KG5pKTtcbiBcdFx0dXBfd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbitcdFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcbiBcdH1cbiBcbiBcdGVyciA9IG50ZnNfaW5vZGVfc3luY19zdGFuZGFyZF9pbmZvcm1hdGlvbih2aSwgbSk7XG5AQCAtMjk4Miw3ICsyOTg3LDcgQEAgc3RhdGljIHN0cnVjdCBudGZzX2lub2RlICpudGZzX2V4dGVudF9pbm9kZV9vcGVuKHN0cnVjdCBudGZzX2lub2RlICpiYXNlX25pLFxuICAqXG4gICogUmV0dXJuIDAgb24gc3VjY2VzcyBhbmQgZXJyb3IuXG4gICovXG4taW50IG50ZnNfaW5vZGVfYXR0YWNoX2FsbF9leHRlbnRzKHN0cnVjdCBudGZzX2lub2RlICpuaSlcbitpbnQgbnRmc19pbm9kZV9hdHRhY2hfYWxsX2V4dGVudHNfbm9sb2NrKHN0cnVjdCBudGZzX2lub2RlICpuaSlcbiB7XG4gXHRzdHJ1Y3QgYXR0cl9saXN0X2VudHJ5ICphbGU7XG4gXHR1NjQgcHJldl9hdHRhY2hlZCA9IDA7XG5AQCAtMzAyMiwxMyArMzAyNywyNSBAQCBpbnQgbnRmc19pbm9kZV9hdHRhY2hfYWxsX2V4dGVudHMoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK2ludCBudGZzX2lub2RlX2F0dGFjaF9hbGxfZXh0ZW50cyhzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXG4re1xuK1x0c3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTtcbitcdGludCBlcnI7XG4rXG4rXHRhdHRyX2xvY2tfbmkgPSBudGZzX2F0dHJfbGlzdF9sb2NrKG5pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4rXHRlcnIgPSBudGZzX2lub2RlX2F0dGFjaF9hbGxfZXh0ZW50c19ub2xvY2sobmkpO1xuK1x0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4gLypcbiAgKiBudGZzX2lub2RlX2FkZF9hdHRybGlzdCAtIGFkZCBhdHRyaWJ1dGUgbGlzdCB0byBpbm9kZSBhbmQgZmlsbCBpdFxuICAqIEBuaTogb3BlbmVkIG50ZnMgaW5vZGUgdG8gd2hpY2ggYWRkIGF0dHJpYnV0ZSBsaXN0XG4gICpcbiAgKiBSZXR1cm4gMCBvbiBzdWNjZXNzIG9yIGVycm9yLlxuICAqL1xuLWludCBudGZzX2lub2RlX2FkZF9hdHRybGlzdChzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXG4raW50IG50ZnNfaW5vZGVfYWRkX2F0dHJsaXN0X25vbG9jayhzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXG4ge1xuIFx0aW50IGVycjtcbiBcdHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4O1xuQEAgLTMwNTMsNyArMzA3MCw3IEBAIGludCBudGZzX2lub2RlX2FkZF9hdHRybGlzdChzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXG4gXHRcdHJldHVybiAtRUlPO1xuIFxuIFx0LyogRm9ybSBhdHRyaWJ1dGUgbGlzdC4gKi9cbi1cdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgbmlfbXJlYyk7XG4rXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIG5pX21yZWMsIE5URlNfQVRUUl9DVFhfTE9DS19OT05FKTtcbiBcdGlmICghY3R4KSB7XG4gXHRcdGVyciA9IC1FTk9NRU07XG4gXHRcdGdvdG8gZXJyX291dDtcbkBAIC0zMTExLDcgKzMxMjgsNiBAQCBpbnQgbnRmc19pbm9kZV9hZGRfYXR0cmxpc3Qoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxuIFx0XHRnb3RvIHB1dF9lcnJfb3V0O1xuIFx0fVxuIFxuLVx0LyogU2V0IGluLW1lbW9yeSBhdHRyaWJ1dGUgbGlzdC4gKi9cbiBcdG5pLVx1MDAzZWF0dHJfbGlzdCA9IGFsO1xuIFx0bmktXHUwMDNlYXR0cl9saXN0X3NpemUgPSBhbF9sZW47XG4gXHROSW5vU2V0QXR0ckxpc3QobmkpO1xuQEAgLTMxMjEsNyArMzEzNyw3IEBAIGludCBudGZzX2lub2RlX2FkZF9hdHRybGlzdChzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXG4gXHQvKiBGcmVlIHNwYWNlIGlmIHRoZXJlIGlzIG5vdCBlbm91Z2ggaXQgZm9yICRBVFRSSUJVVEVfTElTVC4gKi9cbiBcdGlmIChsZTMyX3RvX2NwdShuaV9tcmVjLVx1MDAzZWJ5dGVzX2FsbG9jYXRlZCkgLVxuIFx0XHRcdGxlMzJfdG9fY3B1KG5pX21yZWMtXHUwMDNlYnl0ZXNfaW5fdXNlKSBcdTAwM2MgYXR0cl9hbF9sZW4pIHtcbi1cdFx0aWYgKG50ZnNfaW5vZGVfZnJlZV9zcGFjZShuaSwgKGludClhdHRyX2FsX2xlbikpIHtcbitcdFx0aWYgKG50ZnNfaW5vZGVfZnJlZV9zcGFjZV9ub2xvY2sobmksIChpbnQpYXR0cl9hbF9sZW4pKSB7XG4gXHRcdFx0LyogRmFpbGVkIHRvIGZyZWUgc3BhY2UuICovXG4gXHRcdFx0ZXJyID0gLUVOT1NQQztcbiBcdFx0XHRudGZzX2Vycm9yKG5pLVx1MDAzZXZvbC1cdTAwM2VzYiwgXCJGYWlsZWQgdG8gZnJlZSBzcGFjZSBmb3IgYXR0cmxpc3RcIik7XG5AQCAtMzE0OCw2ICszMTY0LDcgQEAgaW50IG50ZnNfaW5vZGVfYWRkX2F0dHJsaXN0KHN0cnVjdCBudGZzX2lub2RlICpuaSlcbiByZW1vdmVfYXR0cmxpc3RfcmVjb3JkOlxuIFx0LyogUHJldmVudCBudGZzX2F0dHJfcmVjb3JtX3JtIGZyb20gZnJlZWluZyBhdHRyaWJ1dGUgbGlzdC4gKi9cbiBcdG5pLVx1MDAzZWF0dHJfbGlzdCA9IE5VTEw7XG4rXHRuaS1cdTAwM2VhdHRyX2xpc3Rfc2l6ZSA9IDA7XG4gXHROSW5vQ2xlYXJBdHRyTGlzdChuaSk7XG4gXHQvKiBSZW1vdmUgJEFUVFJJQlVURV9MSVNUIHJlY29yZC4gKi9cbiBcdG50ZnNfYXR0cl9yZWluaXRfc2VhcmNoX2N0eChjdHgpO1xuQEAgLTMyMDEsNiArMzIxOCwxOCBAQCBpbnQgbnRmc19pbm9kZV9hZGRfYXR0cmxpc3Qoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4raW50IG50ZnNfaW5vZGVfYWRkX2F0dHJsaXN0KHN0cnVjdCBudGZzX2lub2RlICpuaSlcbit7XG4rXHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pO1xuK1x0aW50IGVycjtcbitcbitcdGF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4rXHRlcnIgPSBudGZzX2lub2RlX2FkZF9hdHRybGlzdF9ub2xvY2sobmkpO1xuK1x0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuIC8qXG4gICogbnRmc19pbm9kZV9jbG9zZSAtIGNsb3NlIGFuIG50ZnMgaW5vZGUgYW5kIGZyZWUgYWxsIGFzc29jaWF0ZWQgbWVtb3J5XG4gICogQG5pOlx0XHRudGZzIGlub2RlIHRvIGNsb3NlXG5AQCAtMzM0NCw3ICszMzczLDggQEAgc3RhdGljIGludCBudGZzX2F0dHJfcG9zaXRpb24oX19sZTMyIHR5cGUsIHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4KVxuICAqXG4gICogUmV0dXJuIDAgb24gc3VjY2VzcyBvciBlcnJvci5cbiAgKi9cbi1pbnQgbnRmc19pbm9kZV9mcmVlX3NwYWNlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgaW50IHNpemUpXG4rc3RhdGljIGludCBfX250ZnNfaW5vZGVfZnJlZV9zcGFjZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGludCBzaXplLFxuK1x0XHRcdFx0ICAgZW51bSBudGZzX2F0dHJfc2VhcmNoX2N0eF9sb2NrX21vZGUgbG9ja19tb2RlKVxuIHtcbiBcdHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4O1xuIFx0aW50IGZyZWVkLCBlcnI7XG5AQCAtMzM2OCw3ICszMzk4LDcgQEAgaW50IG50ZnNfaW5vZGVfZnJlZV9zcGFjZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGludCBzaXplKVxuIFx0aWYgKHNpemUgXHUwMDNjPSBmcmVlZClcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwpO1xuK1x0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMLCBsb2NrX21vZGUpO1xuIFx0aWYgKCFjdHgpIHtcbiBcdFx0bnRmc19lcnJvcihzYiwgXCIlcywgRmFpbGVkIHRvIGdldCBzZWFyY2ggY29udGV4dFwiLCBfX2Z1bmNfXyk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTM0NTQsNiArMzQ4NCwyMyBAQCBpbnQgbnRmc19pbm9kZV9mcmVlX3NwYWNlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgaW50IHNpemUpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbitpbnQgbnRmc19pbm9kZV9mcmVlX3NwYWNlX25vbG9jayhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGludCBzaXplKVxuK3tcbitcdHJldHVybiBfX250ZnNfaW5vZGVfZnJlZV9zcGFjZShuaSwgc2l6ZSwgTlRGU19BVFRSX0NUWF9MT0NLX05PTkUpO1xuK31cbitcbitpbnQgbnRmc19pbm9kZV9mcmVlX3NwYWNlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgaW50IHNpemUpXG4re1xuK1x0c3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTtcbitcdGludCBlcnI7XG4rXG4rXHRhdHRyX2xvY2tfbmkgPSBudGZzX2F0dHJfbGlzdF9sb2NrKG5pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuK1x0ZXJyID0gX19udGZzX2lub2RlX2ZyZWVfc3BhY2UobmksIHNpemUsIE5URlNfQVRUUl9DVFhfTE9DS19OT05FKTtcbitcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbiBzNjQgbnRmc19pbm9kZV9hdHRyX3ByZWFkKHN0cnVjdCBpbm9kZSAqdmksIHM2NCBwb3MsIHM2NCBjb3VudCwgdTggKmJ1ZilcbiB7XG4gXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHZpLVx1MDAzZWlfbWFwcGluZztcbkBAIC0zNDc4LDEwICszNTI1LDExIEBAIHM2NCBudGZzX2lub2RlX2F0dHJfcHJlYWQoc3RydWN0IGlub2RlICp2aSwgczY0IHBvcywgczY0IGNvdW50LCB1OCAqYnVmKVxuIFx0XHRjb3VudCA9IGlzaXplIC0gcG9zO1xuIFxuIFx0aWYgKCFOSW5vTm9uUmVzaWRlbnQobmkpKSB7XG4rXHRcdHN0cnVjdCBudGZzX2lub2RlICpiYXNlX25pID0gbmktXHUwMDNlZXh0LmJhc2VfbnRmc19pbm87XG4gXHRcdHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4O1xuIFx0XHR1OCAqYXR0cjtcbiBcbi1cdFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLVx1MDAzZWV4dC5iYXNlX250ZnNfaW5vLCBOVUxMKTtcbitcdFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KGJhc2VfbmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdFx0aWYgKCFjdHgpIHtcbiBcdFx0XHRudGZzX2Vycm9yKHZpLVx1MDAzZWlfc2IsIFwiRmFpbGVkIHRvIGdldCBhdHRyIHNlYXJjaCBjdHhcIik7XG4gXHRcdFx0ZXJyID0gLUVOT01FTTtcbkBAIC0zNjY5LDYgKzM3MTcsOCBAQCBzdGF0aWMgczY0IF9fbnRmc19pbm9kZV9ub25fcmVzaWRlbnRfYXR0cl9wd3JpdGUoc3RydWN0IGlub2RlICp2aSxcbiBcbiBcdFx0aWYgKHN5bmMpIHtcbiBcdFx0XHRzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCA9IG5pLVx1MDAzZXZvbDtcbitcdFx0XHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pO1xuK1x0XHRcdGVudW0gbnRmc19hdHRyX3NlYXJjaF9jdHhfbG9ja19tb2RlIG1vZGU7XG4gXHRcdFx0czY0IGxjbiwgbGNuX2NvdW50O1xuIFx0XHRcdHVuc2lnbmVkIGludCBsY25fZm9saW9fb2ZmID0gMDtcbiBcdFx0XHRzdHJ1Y3QgYmlvICpiaW87XG5AQCAtMzY3OCwxMyArMzcyOCwxNiBAQCBzdGF0aWMgczY0IF9fbnRmc19pbm9kZV9ub25fcmVzaWRlbnRfYXR0cl9wd3JpdGUoc3RydWN0IGlub2RlICp2aSxcbiBcbiBcdFx0XHRsY25fY291bnQgPSBtYXhfdChzNjQsIDEsIG50ZnNfYnl0ZXNfdG9fY2x1c3Rlcih2b2wsIGF0dHJfbGVuKSk7XG4gXHRcdFx0dmNuID0gbnRmc19waWR4X3RvX2NsdXN0ZXIodm9sLCBmb2xpby1cdTAwM2VpbmRleCk7XG4rXHRcdFx0bW9kZSA9IE5URlNfQVRUUl9DVFhfTE9DS19SRUFEO1xuIFxuIFx0XHRcdGRvIHtcbitcdFx0XHRcdGF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIG1vZGUpO1xuIFx0XHRcdFx0ZG93bl93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuIFx0XHRcdFx0cmwgPSBudGZzX2F0dHJfdmNuX3RvX3JsKG5pLCB2Y24sIFx1MDAyNmxjbik7XG4gXHRcdFx0XHRpZiAoSVNfRVJSKHJsKSkge1xuIFx0XHRcdFx0XHRyZXQgPSBQVFJfRVJSKHJsKTtcbiBcdFx0XHRcdFx0dXBfd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbitcdFx0XHRcdFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgbW9kZSk7XG4gXHRcdFx0XHRcdGdvdG8gZXJyX3VubG9ja19mb2xpbztcbiBcdFx0XHRcdH1cbiBcbkBAIC0zNjk2LDYgKzM3NDksNyBAQCBzdGF0aWMgczY0IF9fbnRmc19pbm9kZV9ub25fcmVzaWRlbnRfYXR0cl9wd3JpdGUoc3RydWN0IGlub2RlICp2aSxcbiBcdFx0XHRcdFx0bGNuX2NvdW50ID0gMDtcbiBcdFx0XHRcdH1cbiBcdFx0XHRcdHVwX3dyaXRlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4rXHRcdFx0XHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBtb2RlKTtcbiBcbiBcdFx0XHRcdGlmICh2b2wtXHUwMDNlY2x1c3Rlcl9zaXplX2JpdHMgXHUwMDNlIFBBR0VfU0hJRlQpIHtcbiBcdFx0XHRcdFx0bGNuX2ZvbGlvX29mZiA9IGZvbGlvLVx1MDAzZWluZGV4IFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUO1xuQEAgLTM3NTYsNyArMzgxMCw3IEBAIHM2NCBudGZzX2lub2RlX2F0dHJfcHdyaXRlKHN0cnVjdCBpbm9kZSAqdmksIHM2NCBwb3MsIHM2NCBjb3VudCwgdTggKmJ1ZiwgYm9vbCBzXG4gXG4gXHRXQVJOX09OKCFOSW5vQXR0cihuaSkpO1xuIFxuLVx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLVx1MDAzZWV4dC5iYXNlX250ZnNfaW5vLCBOVUxMKTtcbitcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaS1cdTAwM2VleHQuYmFzZV9udGZzX2lubywgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0aWYgKCFjdHgpIHtcbiBcdFx0bnRmc19lcnJvcih2aS1cdTAwM2VpX3NiLCBcIkZhaWxlZCB0byBnZXQgYXR0ciBzZWFyY2ggY3R4XCIpO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbmRpZmYgLS1naXQgYS9mcy9udGZzL2lub2RlLmggYi9mcy9udGZzL2lub2RlLmhcbmluZGV4IDlhYWNkNTc4N2ZmZWEwLi40ZDBmYmQ1M2UxYzRhYyAxMDA2NDRcbi0tLSBhL2ZzL250ZnMvaW5vZGUuaFxuKysrIGIvZnMvbnRmcy9pbm9kZS5oXG5AQCAtMTAsNiArMTAsOCBAQFxuICNpZm5kZWYgX0xJTlVYX05URlNfSU5PREVfSFxuICNkZWZpbmUgX0xJTlVYX05URlNfSU5PREVfSFxuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3J3c2VtLmhcdTAwM2VcbitcbiAjaW5jbHVkZSBcImRlYnVnLmhcIlxuIFxuIGVudW0gbnRmc19pbm9kZV9tdXRleF9sb2NrX2NsYXNzIHtcbkBAIC02Niw2ICs2OCw3IEBAIGVudW0gbnRmc19pbm9kZV9tdXRleF9sb2NrX2NsYXNzIHtcbiAgKiBBdHRyaWJ1dGUgbGlzdCBzdXBwb3J0IChvbmx5IGZvciB1c2UgYnkgdGhlIGF0dHJpYnV0ZSBsb29rdXBcbiAgKiBmdW5jdGlvbnMpLiBTZXR1cCBkdXJpbmcgcmVhZF9pbm9kZSBmb3IgYWxsIGlub2RlcyB3aXRoIGF0dHJpYnV0ZVxuICAqIGxpc3RzLiBPbmx5IHZhbGlkIGlmIE5JX0F0dHJMaXN0IGlzIHNldCBpbiBzdGF0ZS5cbisgKiBAYXR0cl9saXN0X2xvY2s6IFNlcmlhbGl6ZXMgYXR0cmlidXRlIGxpc3QgcG9pbnRlciB1cGRhdGVzIHdpdGggbG9va3Vwcy5cbiAgKiBAYXR0cl9saXN0X3NpemU6IExlbmd0aCBvZiBhdHRyaWJ1dGUgbGlzdCB2YWx1ZSBpbiBieXRlcy5cbiAgKiBAYXR0cl9saXN0OiBBdHRyaWJ1dGUgbGlzdCB2YWx1ZSBpdHNlbGYuXG4gICpcbkBAIC0xMTgsNiArMTIxLDcgQEAgc3RydWN0IG50ZnNfaW5vZGUge1xuIFx0aW50IGZvbGlvX29mcztcbiBcdHM2NCBtZnRfbGNuWzJdO1xuIFx0dW5zaWduZWQgaW50IG1mdF9sY25fY291bnQ7XG4rXHRzdHJ1Y3Qgcndfc2VtYXBob3JlIGF0dHJfbGlzdF9sb2NrO1xuIFx0dTMyIGF0dHJfbGlzdF9zaXplO1xuIFx0dTggKmF0dHJfbGlzdDtcbiBcdHVuaW9uIHtcbkBAIC0zMzYsOSArMzQwLDEyIEBAIGludCBudGZzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLFxuIFxuIGludCBudGZzX2dldF9ibG9ja19tZnRfcmVjb3JkKHN0cnVjdCBudGZzX2lub2RlICptZnRfbmksIHN0cnVjdCBudGZzX2lub2RlICpuaSk7XG4gaW50IF9fbnRmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKnZpLCBpbnQgc3luYyk7XG4raW50IG50ZnNfaW5vZGVfYXR0YWNoX2FsbF9leHRlbnRzX25vbG9jayhzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpO1xuIGludCBudGZzX2lub2RlX2F0dGFjaF9hbGxfZXh0ZW50cyhzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpO1xuK2ludCBudGZzX2lub2RlX2FkZF9hdHRybGlzdF9ub2xvY2soc3RydWN0IG50ZnNfaW5vZGUgKm5pKTtcbiBpbnQgbnRmc19pbm9kZV9hZGRfYXR0cmxpc3Qoc3RydWN0IG50ZnNfaW5vZGUgKm5pKTtcbiB2b2lkIG50ZnNfZGVzdHJveV9leHRfaW5vZGUoc3RydWN0IG50ZnNfaW5vZGUgKm5pKTtcbitpbnQgbnRmc19pbm9kZV9mcmVlX3NwYWNlX25vbG9jayhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGludCBzaXplKTtcbiBpbnQgbnRmc19pbm9kZV9mcmVlX3NwYWNlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgaW50IHNpemUpO1xuIHM2NCBudGZzX2lub2RlX2F0dHJfcHJlYWQoc3RydWN0IGlub2RlICp2aSwgczY0IHBvcywgczY0IGNvdW50LCB1OCAqYnVmKTtcbiBzNjQgbnRmc19pbm9kZV9hdHRyX3B3cml0ZShzdHJ1Y3QgaW5vZGUgKnZpLCBzNjQgcG9zLCBzNjQgY291bnQsIHU4ICpidWYsXG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9pb21hcC5jIGIvZnMvbnRmcy9pb21hcC5jXG5pbmRleCA1MmVlY2Y1Y2IyNTZhYS4uM2FmMmM2ZDMyYjBmNzAgMTAwNjQ0XG4tLS0gYS9mcy9udGZzL2lvbWFwLmNcbisrKyBiL2ZzL250ZnMvaW9tYXAuY1xuQEAgLTk1LDcgKzk1LDcgQEAgc3RhdGljIGludCBudGZzX3JlYWRfaW9tYXBfYmVnaW5fcmVzaWRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9cbiBcdGVsc2VcbiBcdFx0YmFzZV9uaSA9IG5pO1xuIFxuLVx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KGJhc2VfbmksIE5VTEwpO1xuK1x0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KGJhc2VfbmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdGlmICghY3R4KSB7XG4gXHRcdGVyciA9IC1FTk9NRU07XG4gXHRcdGdvdG8gb3V0O1xuQEAgLTE4Nyw2ICsxODcsNyBAQCBzdGF0aWMgaW50IG50ZnNfcmVhZF9pb21hcF9iZWdpbl9ub25fcmVzaWRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldFxuIFx0XHRib29sIG5lZWRfdW53cml0dGVuKVxuIHtcbiBcdHN0cnVjdCBudGZzX2lub2RlICpuaSA9IE5URlNfSShpbm9kZSk7XG4rXHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pO1xuIFx0czY0IHZjbjtcbiBcdHM2NCBsY247XG4gXHRzdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpybDtcbkBAIC0xOTcsMjAgKzE5OCwyNCBAQCBzdGF0aWMgaW50IG50ZnNfcmVhZF9pb21hcF9iZWdpbl9ub25fcmVzaWRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldFxuIFx0dmNuID0gbnRmc19ieXRlc190b19jbHVzdGVyKHZvbCwgb2Zmc2V0KTtcbiBcdHZjbl9vZnMgPSBudGZzX2J5dGVzX3RvX2NsdXN0ZXJfb2ZmKHZvbCwgb2Zmc2V0KTtcbiBcbitcdGF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdGRvd25fd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbiBcdHJsID0gbnRmc19hdHRyX3Zjbl90b19ybChuaSwgdmNuLCBcdTAwMjZsY24pO1xuIFx0aWYgKElTX0VSUihybCkpIHtcbiBcdFx0dXBfd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbitcdFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0XHRyZXR1cm4gUFRSX0VSUihybCk7XG4gXHR9XG4gXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IElPTUFQX1JFUE9SVCkge1xuIFx0XHRpZiAobGNuIFx1MDAzYyBMQ05fSE9MRSkge1xuIFx0XHRcdHVwX3dyaXRlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4rXHRcdFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0XHRcdHJldHVybiAtRU5PRU5UO1xuIFx0XHR9XG4gXHR9IGVsc2UgaWYgKGxjbiBcdTAwM2MgTENOX0VOT0VOVCkge1xuIFx0XHR1cF93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuK1x0XHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuQEAgLTIzOCw2ICsyNDMsNyBAQCBzdGF0aWMgaW50IG50ZnNfcmVhZF9pb21hcF9iZWdpbl9ub25fcmVzaWRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldFxuIFx0XHRcdFx0XCJydW5saXN0KHZjbiA6ICVsbGQsIGxlbmd0aCA6ICVsbGQsIGxjbiA6ICVsbGQpIGlzIGNvcnJ1cHRlZFxcblwiLFxuIFx0XHRcdFx0cmwtXHUwMDNldmNuLCBybC1cdTAwM2VsZW5ndGgsIHJsLVx1MDAzZWxjbik7XG4gXHRcdHVwX3dyaXRlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4rXHRcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdFx0cmV0dXJuIC1FSU87XG4gXHR9XG4gXG5AQCAtMjQ2LDYgKzI1Miw3IEBAIHN0YXRpYyBpbnQgbnRmc19yZWFkX2lvbWFwX2JlZ2luX25vbl9yZXNpZGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0XG4gXHRlbHNlXG4gXHRcdGlvbWFwLVx1MDAzZWxlbmd0aCA9IGxlbmd0aDtcbiBcdHVwX3dyaXRlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4rXHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4gXG4gXHRpZiAoIShmbGFncyBcdTAwMjYgSU9NQVBfWkVSTykgXHUwMDI2XHUwMDI2XG4gXHRcdFx0aW9tYXAtXHUwMDNldHlwZSA9PSBJT01BUF9NQVBQRUQgXHUwMDI2XHUwMDI2XG5AQCAtMzY1LDYgKzM3Miw3IEBAIHN0YXRpYyBpbnQgbnRmc193cml0ZV9zaW1wbGVfaW9tYXBfYmVnaW5fbm9uX3Jlc2lkZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfXG4ge1xuIFx0c3RydWN0IG50ZnNfaW5vZGUgKm5pID0gTlRGU19JKGlub2RlKTtcbiBcdHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sID0gbmktXHUwMDNldm9sO1xuK1x0c3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTtcbiBcdGxvZmZfdCB2Y25fb2ZzLCBybF9sZW5ndGg7XG4gXHRzdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpybCwgKnJsYztcbiBcdGJvb2wgaXNfcmV0cnkgPSBmYWxzZTtcbkBAIC0zOTAsMTIgKzM5OCwxNCBAQCBzdGF0aWMgaW50IG50ZnNfd3JpdGVfc2ltcGxlX2lvbWFwX2JlZ2luX25vbl9yZXNpZGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX1xuIFx0fVxuIFx0dXBfcmVhZChcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuIFxuK1x0YXR0cl9sb2NrX25pID0gbnRmc19hdHRyX2xpc3RfbG9jayhuaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0ZG93bl93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuIHJlbWFwX3JsOlxuIFx0LyogU2VlayB0byBlbGVtZW50IGNvbnRhaW5pbmcgdGFyZ2V0IHZjbi4gKi9cbiBcdHJsID0gX19udGZzX2F0dHJfZmluZF92Y25fbm9sb2NrKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QsIHZjbik7XG4gXHRpZiAoSVNfRVJSKHJsKSkge1xuIFx0XHR1cF93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuK1x0XHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZuaS1cdTAwM2VtcmVjX2xvY2spO1xuIFx0XHRyZXR1cm4gLUVJTztcbiBcdH1cbkBAIC00MTUsNiArNDI1LDcgQEAgc3RhdGljIGludCBudGZzX3dyaXRlX3NpbXBsZV9pb21hcF9iZWdpbl9ub25fcmVzaWRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl9cbiBcdFx0XHRcdFwicnVubGlzdCh2Y24gOiAlbGxkLCBsZW5ndGggOiAlbGxkKSBpcyBjb3JydXB0ZWRcXG5cIixcbiBcdFx0XHRcdHJsLVx1MDAzZXZjbiwgcmwtXHUwMDNlbGVuZ3RoKTtcbiBcdFx0dXBfd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbitcdFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2bmktXHUwMDNlbXJlY19sb2NrKTtcbiBcdFx0cmV0dXJuIC1FSU87XG4gXHR9XG5AQCAtNDI5LDYgKzQ0MCw3IEBAIHN0YXRpYyBpbnQgbnRmc193cml0ZV9zaW1wbGVfaW9tYXBfYmVnaW5fbm9uX3Jlc2lkZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfXG4gXHRcdFx0aWYgKG1heF9jbHVfY291bnQgXHUwMDNjIDApIHtcbiBcdFx0XHRcdGVyciA9IG1heF9jbHVfY291bnQ7XG4gXHRcdFx0XHR1cF93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuK1x0XHRcdFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5pLVx1MDAzZW1yZWNfbG9jayk7XG4gXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHRcdH1cbkBAIC00NDQsNiArNDU2LDcgQEAgc3RhdGljIGludCBudGZzX3dyaXRlX3NpbXBsZV9pb21hcF9iZWdpbl9ub25fcmVzaWRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl9cbiBcdFx0XHRcdFx0R0ZQX05PRlMpO1xuIFx0XHRcdGlmICghcmxjKSB7XG4gXHRcdFx0XHR1cF93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuK1x0XHRcdFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5pLVx1MDAzZW1yZWNfbG9jayk7XG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdFx0XHR9XG5AQCAtNDYxLDYgKzQ3NCw3IEBAIHN0YXRpYyBpbnQgbnRmc193cml0ZV9zaW1wbGVfaW9tYXBfYmVnaW5fbm9uX3Jlc2lkZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfXG4gXHRcdFx0aWYgKElTX0VSUihybCkpIHtcbiBcdFx0XHRcdG50ZnNfZXJyb3Iodm9sLVx1MDAzZXNiLCBcIkZhaWxlZCB0byBtZXJnZSBydW5saXN0c1wiKTtcbiBcdFx0XHRcdHVwX3dyaXRlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4rXHRcdFx0XHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4gXHRcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bmktXHUwMDNlbXJlY19sb2NrKTtcbiBcdFx0XHRcdGt2ZnJlZShybGMpO1xuIFx0XHRcdFx0cmV0dXJuIFBUUl9FUlIocmwpO1xuQEAgLTQ3MSw2ICs0ODUsNyBAQCBzdGF0aWMgaW50IG50ZnNfd3JpdGVfc2ltcGxlX2lvbWFwX2JlZ2luX25vbl9yZXNpZGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX1xuIFx0XHRcdG5pLVx1MDAzZWlfZGVhbGxvY19jbHVzdGVycyArPSBtYXhfY2x1X2NvdW50O1xuIFx0XHR9XG4gXHRcdHVwX3dyaXRlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4rXHRcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5pLVx1MDAzZW1yZWNfbG9jayk7XG4gXG4gXHRcdGlmIChsY24gXHUwMDNjIExDTl9ERUxBTExPQylcbkBAIC01MjMsNiArNTM4LDcgQEAgc3RhdGljIGludCBudGZzX3dyaXRlX3NpbXBsZV9pb21hcF9iZWdpbl9ub25fcmVzaWRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl9cbiBcdFx0fVxuIFx0fSBlbHNlIHtcbiBcdFx0dXBfd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbitcdFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2bmktXHUwMDNlbXJlY19sb2NrKTtcbiBcbiBcdFx0aW9tYXAtXHUwMDNldHlwZSA9IElPTUFQX01BUFBFRDtcbkBAIC01NDksNiArNTY1LDcgQEAgc3RhdGljIGludCBudGZzX3dyaXRlX2RhX2lvbWFwX2JlZ2luX25vbl9yZXNpZGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIHtcbiBcdHN0cnVjdCBudGZzX2lub2RlICpuaSA9IE5URlNfSShpbm9kZSk7XG4gXHRzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCA9IG5pLVx1MDAzZXZvbDtcbitcdHN0cnVjdCBudGZzX2lub2RlICphdHRyX2xvY2tfbmk7XG4gXHRsb2ZmX3QgdmNuX29mcywgcmxfbGVuZ3RoO1xuIFx0czY0IHZjbiwgc3RhcnRfbGNuLCBsY25fY291bnQ7XG4gXHRib29sIGJhbGxvYyA9IGZhbHNlLCB1cGRhdGVfbXA7XG5AQCAtNTYxLDExICs1NzgsMTMgQEAgc3RhdGljIGludCBudGZzX3dyaXRlX2RhX2lvbWFwX2JlZ2luX25vbl9yZXNpZGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFxuIFx0dXBkYXRlX21wID0gbnRmc19pb21hcF9mbGFncyBcdTAwMjYgKE5URlNfSU9NQVBfRkxBR1NfRElPIHwgTlRGU19JT01BUF9GTEFHU19NS1dSSVRFKSB8fFxuIFx0XHRcdE5Jbm9BdHRyKG5pKSB8fCBuaS1cdTAwM2VtZnRfbm8gXHUwMDNjIEZJTEVfZmlyc3RfdXNlcjtcbitcdGF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4gXHRkb3duX3dyaXRlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4gXHRlcnIgPSBudGZzX2F0dHJfbWFwX2NsdXN0ZXIobmksIHZjbiwgXHUwMDI2c3RhcnRfbGNuLCBcdTAwMjZsY25fY291bnQsXG4gXHRcdFx0bWF4X2NsdV9jb3VudCwgXHUwMDI2YmFsbG9jLCB1cGRhdGVfbXAsXG4gXHRcdFx0bnRmc19pb21hcF9mbGFncyBcdTAwMjYgTlRGU19JT01BUF9GTEFHU19XUklURUJBQ0spO1xuIFx0dXBfd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbitcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2bmktXHUwMDNlbXJlY19sb2NrKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0bmktXHUwMDNlaV9kZWFsbG9jX2NsdXN0ZXJzID0gMDtcbkBAIC02MzcsNyArNjU2LDcgQEAgc3RhdGljIGludCBudGZzX3dyaXRlX2lvbWFwX2JlZ2luX3Jlc2lkZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4gXHRpbnQgZXJyID0gMDtcbiBcdGNoYXIgKmthdHRyO1xuIFxuLVx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTtcbitcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0aWYgKCFjdHgpIHtcbiBcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0Z290byBvdXQ7XG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9sb2dmaWxlLmMgYi9mcy9udGZzL2xvZ2ZpbGUuY1xuaW5kZXggMDI0ZGRlZTQyZGM4ZjYuLmJmOTY3ZWY4YWI2OGM5IDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9sb2dmaWxlLmNcbisrKyBiL2ZzL250ZnMvbG9nZmlsZS5jXG5AQCAtNjQzLDYgKzY0Myw3IEBAIGJvb2wgbnRmc19lbXB0eV9sb2dmaWxlKHN0cnVjdCBpbm9kZSAqbG9nX3ZpKVxuIFx0c3RydWN0IG50ZnNfaW5vZGUgKmxvZ19uaSA9IE5URlNfSShsb2dfdmkpO1xuIFx0c3RydWN0IG50ZnNfdm9sdW1lICp2b2wgPSBsb2dfbmktXHUwMDNldm9sO1xuIFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHZvbC1cdTAwM2VzYjtcbitcdHN0cnVjdCBudGZzX2lub2RlICphdHRyX2xvY2tfbmk7XG4gXHRzdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpybDtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRpbnQgZXJyO1xuQEAgLTY2OSw2ICs2NzAsNyBAQCBib29sIG50ZnNfZW1wdHlfbG9nZmlsZShzdHJ1Y3QgaW5vZGUgKmxvZ192aSlcbiBcdFx0XHR2b2wtXHUwMDNlY2x1c3Rlcl9zaXplX2JpdHM7XG4gXHRyZWFkX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmxvZ19uaS1cdTAwM2VzaXplX2xvY2ssIGZsYWdzKTtcbiBcdHRydW5jYXRlX2lub2RlX3BhZ2VzKGxvZ192aS1cdTAwM2VpX21hcHBpbmcsIDApO1xuK1x0YXR0cl9sb2NrX25pID0gbnRmc19hdHRyX2xpc3RfbG9jayhsb2dfbmksIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdGRvd25fd3JpdGUoXHUwMDI2bG9nX25pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4gXHRybCA9IGxvZ19uaS1cdTAwM2VydW5saXN0LnJsO1xuIFx0aWYgKHVubGlrZWx5KCFybCB8fCB2Y24gXHUwMDNjIHJsLVx1MDAzZXZjbiB8fCAhcmwtXHUwMDNlbGVuZ3RoKSkge1xuQEAgLTc1NSw2ICs3NTcsNyBAQCBib29sIG50ZnNfZW1wdHlfbG9nZmlsZShzdHJ1Y3QgaW5vZGUgKmxvZ192aSlcbiBcdFx0fSB3aGlsZSAoc3RhcnQgXHUwMDNjIGVuZCk7XG4gXHR9IHdoaWxlICgoKytybCktXHUwMDNldmNuIFx1MDAzYyBlbmRfdmNuKTtcbiBcdHVwX3dyaXRlKFx1MDAyNmxvZ19uaS1cdTAwM2VydW5saXN0LmxvY2spO1xuK1x0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0a3ZmcmVlKGVtcHR5X2J1Zik7XG4gXHRrZnJlZShyYSk7XG4gXHR0cnVuY2F0ZV9pbm9kZV9wYWdlcyhsb2dfdmktXHUwMDNlaV9tYXBwaW5nLCAwKTtcbkBAIC03NzQsNiArNzc3LDcgQEAgYm9vbCBudGZzX2VtcHR5X2xvZ2ZpbGUoc3RydWN0IGlub2RlICpsb2dfdmkpXG4gXHRrdmZyZWUoZW1wdHlfYnVmKTtcbiBcdGtmcmVlKHJhKTtcbiBcdHVwX3dyaXRlKFx1MDAyNmxvZ19uaS1cdTAwM2VydW5saXN0LmxvY2spO1xuK1x0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0bnRmc19lcnJvcihzYiwgXCJGYWlsZWQgdG8gZmlsbCBMb2dGaWxlIHdpdGggMHhmZiBieXRlcyAoZXJyb3IgJWQpLlwiLFxuIFx0XHRcdC1lcnIpO1xuIFx0cmV0dXJuIGZhbHNlO1xuZGlmZiAtLWdpdCBhL2ZzL250ZnMvbWZ0LmMgYi9mcy9udGZzL21mdC5jXG5pbmRleCBhNTAxOWU4MDk1MWI4NC4uZjNlMjcwMjMyNTBjYjkgMTAwNjQ0XG4tLS0gYS9mcy9udGZzL21mdC5jXG4rKysgYi9mcy9udGZzL21mdC5jXG5AQCAtMTIsNiArMTIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9tYXAuaFx1MDAzZVxuIFxuKyNpbmNsdWRlIFwiYXR0cmliLmhcIlxuICNpbmNsdWRlIFwiYml0bWFwLmhcIlxuICNpbmNsdWRlIFwibGNuYWxsb2MuaFwiXG4gI2luY2x1ZGUgXCJtZnQuaFwiXG5AQCAtMTAxNSw3ICsxMDE2LDcgQEAgc3RhdGljIGludCBudGZzX21mdF9hdHRyX2V4dGVuZChzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXG4gXHRcdGJhc2VfbmkgPSBuaTtcbiBcbiBcdGlmICghTklub0F0dHJMaXN0KGJhc2VfbmkpKSB7XG4tXHRcdHJldCA9IG50ZnNfaW5vZGVfYWRkX2F0dHJsaXN0KGJhc2VfbmkpO1xuK1x0XHRyZXQgPSBudGZzX2lub2RlX2FkZF9hdHRybGlzdF9ub2xvY2soYmFzZV9uaSk7XG4gXHRcdGlmIChyZXQpIHtcbiBcdFx0XHRwcl9lcnIoXCJDYW4gbm90IGFkZCBhdHRybGlzdFxcblwiKTtcbiBcdFx0XHRnb3RvIG91dDtcbkBAIC0xMDI1LDcgKzEwMjYsNyBAQCBzdGF0aWMgaW50IG50ZnNfbWZ0X2F0dHJfZXh0ZW5kKHN0cnVjdCBudGZzX2lub2RlICpuaSlcbiBcdFx0fVxuIFx0fVxuIFxuLVx0cmV0ID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG5pLCAwKTtcbitcdHJldCA9IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlyc19ub2xvY2sobmksIDApO1xuIFx0aWYgKHJldClcbiBcdFx0cHJfZXJyKFwiTVAgdXBkYXRlIGZhaWxlZFxcblwiKTtcbiBcbkBAIC0xMDU3LDYgKzEwNTgsNyBAQCBzdGF0aWMgaW50IG50ZnNfbWZ0X2JpdG1hcF9leHRlbmRfYWxsb2NhdGlvbl9ub2xvY2soc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpXG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcdHN0cnVjdCBudGZzX2lub2RlICptZnRfbmksICptZnRibXBfbmk7XG4rXHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pO1xuIFx0c3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqcmwsICpybDIgPSBOVUxMO1xuIFx0c3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHggPSBOVUxMO1xuIFx0c3RydWN0IG1mdF9yZWNvcmQgKm1yZWM7XG5AQCAtMTA3NSw2ICsxMDc3LDcgQEAgc3RhdGljIGludCBudGZzX21mdF9iaXRtYXBfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxuIFx0bnRmc19kZWJ1ZyhcIkV4dGVuZGluZyBtZnQgYml0bWFwIGFsbG9jYXRpb24uXCIpO1xuIFx0bWZ0X25pID0gTlRGU19JKHZvbC1cdTAwM2VtZnRfaW5vKTtcbiBcdG1mdGJtcF9uaSA9IE5URlNfSSh2b2wtXHUwMDNlbWZ0Ym1wX2lubyk7XG4rXHRhdHRyX2xvY2tfbmkgPSBudGZzX2F0dHJfbGlzdF9sb2NrKG1mdGJtcF9uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcbiBcdC8qXG4gXHQgKiBEZXRlcm1pbmUgdGhlIGxhc3QgbGNuIG9mIHRoZSBtZnQgYml0bWFwLiAgVGhlIGFsbG9jYXRlZCBzaXplIG9mIHRoZVxuIFx0ICogbWZ0IGJpdG1hcCBjYW5ub3QgYmUgemVybyBzbyB3ZSBhcmUgb2sgdG8gZG8gdGhpcy5cbkBAIC0xMDg3LDYgKzEwOTAsNyBAQCBzdGF0aWMgaW50IG50ZnNfbWZ0X2JpdG1hcF9leHRlbmRfYWxsb2NhdGlvbl9ub2xvY2soc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpXG4gXHRcdFx0TlRGU19CX1RPX0NMVSh2b2wsIGxsIC0gMSksIE5VTEwpO1xuIFx0aWYgKElTX0VSUihybCkgfHwgdW5saWtlbHkoIXJsLVx1MDAzZWxlbmd0aCB8fCBybC1cdTAwM2VsY24gXHUwMDNjIDApKSB7XG4gXHRcdHVwX3dyaXRlKFx1MDAyNm1mdGJtcF9uaS1cdTAwM2VydW5saXN0LmxvY2spO1xuK1x0XHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuIFx0XHRudGZzX2Vycm9yKHZvbC1cdTAwM2VzYixcbiBcdFx0XHRcIkZhaWxlZCB0byBkZXRlcm1pbmUgbGFzdCBhbGxvY2F0ZWQgY2x1c3RlciBvZiBtZnQgYml0bWFwIGF0dHJpYnV0ZS5cIik7XG4gXHRcdGlmICghSVNfRVJSKHJsKSlcbkBAIC0xMTA4LDYgKzExMTIsNyBAQCBzdGF0aWMgaW50IG50ZnNfbWZ0X2JpdG1hcF9leHRlbmRfYWxsb2NhdGlvbl9ub2xvY2soc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpXG4gXHRcdFx0bGwgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsIE5VTEwpO1xuIFx0aWYgKElTX0VSUihmb2xpbykpIHtcbiBcdFx0dXBfd3JpdGUoXHUwMDI2bWZ0Ym1wX25pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4rXHRcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4gXHRcdG50ZnNfZXJyb3Iodm9sLVx1MDAzZXNiLCBcIkZhaWxlZCB0byByZWFkIGZyb20gbGNuIGJpdG1hcC5cIik7XG4gXHRcdHJldHVybiBQVFJfRVJSKGZvbGlvKTtcbiBcdH1cbkBAIC0xMTM5LDYgKzExNDQsNyBAQCBzdGF0aWMgaW50IG50ZnNfbWZ0X2JpdG1hcF9leHRlbmRfYWxsb2NhdGlvbl9ub2xvY2soc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpXG4gXHRcdFx0XHR0cnVlLCBmYWxzZSwgZmFsc2UpO1xuIFx0XHRpZiAoSVNfRVJSKHJsMikpIHtcbiBcdFx0XHR1cF93cml0ZShcdTAwMjZtZnRibXBfbmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbitcdFx0XHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuIFx0XHRcdG50ZnNfZXJyb3Iodm9sLVx1MDAzZXNiLFxuIFx0XHRcdFx0XHRcIkZhaWxlZCB0byBhbGxvY2F0ZSBhIGNsdXN0ZXIgZm9yIHRoZSBtZnQgYml0bWFwLlwiKTtcbiBcdFx0XHRyZXR1cm4gUFRSX0VSUihybDIpO1xuQEAgLTExNDYsNiArMTE1Miw3IEBAIHN0YXRpYyBpbnQgbnRmc19tZnRfYml0bWFwX2V4dGVuZF9hbGxvY2F0aW9uX25vbG9jayhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbClcbiBcdFx0cmwgPSBudGZzX3J1bmxpc3RzX21lcmdlKFx1MDAyNm1mdGJtcF9uaS1cdTAwM2VydW5saXN0LCBybDIsIDAsIFx1MDAyNm5ld19ybF9jb3VudCk7XG4gXHRcdGlmIChJU19FUlIocmwpKSB7XG4gXHRcdFx0dXBfd3JpdGUoXHUwMDI2bWZ0Ym1wX25pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4rXHRcdFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcbiBcdFx0XHRudGZzX2Vycm9yKHZvbC1cdTAwM2VzYiwgXCJGYWlsZWQgdG8gbWVyZ2UgcnVubGlzdHMgZm9yIG1mdCBiaXRtYXAuXCIpO1xuIFx0XHRcdGlmIChudGZzX2NsdXN0ZXJfZnJlZV9mcm9tX3JsKHZvbCwgcmwyKSkge1xuIFx0XHRcdFx0bnRmc19lcnJvcih2b2wtXHUwMDNlc2IsIFwiRmFpbGVkIHRvIGRlYWxsb2NhdGUgYWxsb2NhdGVkIGNsdXN0ZXIuJXNcIixcbkBAIC0xMTczLDcgKzExODAsNyBAQCBzdGF0aWMgaW50IG50ZnNfbWZ0X2JpdG1hcF9leHRlbmRfYWxsb2NhdGlvbl9ub2xvY2soc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpXG4gXHRcdHJldCA9IFBUUl9FUlIobXJlYyk7XG4gXHRcdGdvdG8gdW5kb19hbGxvYztcbiBcdH1cbi1cdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChtZnRfbmksIG1yZWMpO1xuK1x0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG1mdF9uaSwgbXJlYywgTlRGU19BVFRSX0NUWF9MT0NLX05PTkUpO1xuIFx0aWYgKHVubGlrZWx5KCFjdHgpKSB7XG4gXHRcdG50ZnNfZXJyb3Iodm9sLVx1MDAzZXNiLCBcIkZhaWxlZCB0byBnZXQgc2VhcmNoIGNvbnRleHQuXCIpO1xuIFx0XHRyZXQgPSAtRU5PTUVNO1xuQEAgLTEyNjUsNiArMTI3Miw3IEBAIHN0YXRpYyBpbnQgbnRmc19tZnRfYml0bWFwX2V4dGVuZF9hbGxvY2F0aW9uX25vbG9jayhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbClcbiBcdG50ZnNfYXR0cl9wdXRfc2VhcmNoX2N0eChjdHgpO1xuIFx0dW5tYXBfbWZ0X3JlY29yZChtZnRfbmkpO1xuIFx0dXBfd3JpdGUoXHUwMDI2bWZ0Ym1wX25pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4rXHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuIFx0bnRmc19kZWJ1ZyhcIkRvbmUuXCIpO1xuIFx0cmV0dXJuIDA7XG4gXG5AQCAtMTI4MSw2ICsxMjg5LDcgQEAgc3RhdGljIGludCBudGZzX21mdF9iaXRtYXBfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxuIFx0XHRudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoY3R4KTtcbiBcdFx0dW5tYXBfbWZ0X3JlY29yZChtZnRfbmkpO1xuIFx0XHR1cF93cml0ZShcdTAwMjZtZnRibXBfbmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbitcdFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcbiBcdFx0LypcbiBcdFx0ICogVGhlIG9ubHkgdGhpbmcgdGhhdCBpcyBub3cgd3JvbmcgaXMgLVx1MDAzZWFsbG9jYXRlZF9zaXplIG9mIHRoZVxuIFx0XHQgKiBiYXNlIGF0dHJpYnV0ZSBleHRlbnQgd2hpY2ggY2hrZHNrIHNob3VsZCBiZSBhYmxlIHRvIGZpeC5cbkBAIC0xMzI0LDcgKzEzMzMsOCBAQCBzdGF0aWMgaW50IG50ZnNfbWZ0X2JpdG1hcF9leHRlbmRfYWxsb2NhdGlvbl9ub2xvY2soc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpXG4gXHRcdFx0TlZvbFNldEVycm9ycyh2b2wpO1xuIFx0XHR9XG4gXHRcdG1hcmtfbWZ0X3JlY29yZF9kaXJ0eShjdHgtXHUwMDNlbnRmc19pbm8pO1xuLVx0fSBlbHNlIGlmIChzdGF0dXMubXBfZXh0ZW5kZWQgXHUwMDI2XHUwMDI2IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhtZnRibXBfbmksIDApKSB7XG4rXHR9IGVsc2UgaWYgKHN0YXR1cy5tcF9leHRlbmRlZCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzX25vbG9jayhtZnRibXBfbmksIDApKSB7XG4gXHRcdG50ZnNfZXJyb3Iodm9sLVx1MDAzZXNiLCBcIkZhaWxlZCB0byByZXN0b3JlIG1hcHBpbmcgcGFpcnMuJXNcIiwgZXMpO1xuIFx0XHROVm9sU2V0RXJyb3JzKHZvbCk7XG4gXHR9XG5AQCAtMTMzMyw2ICsxMzQzLDcgQEAgc3RhdGljIGludCBudGZzX21mdF9iaXRtYXBfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxuIFx0aWYgKCFJU19FUlIobXJlYykpXG4gXHRcdHVubWFwX21mdF9yZWNvcmQobWZ0X25pKTtcbiBcdHVwX3dyaXRlKFx1MDAyNm1mdGJtcF9uaS1cdTAwM2VydW5saXN0LmxvY2spO1xuK1x0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTEzNzEsNyArMTM4Miw3IEBAIHN0YXRpYyBpbnQgbnRmc19tZnRfYml0bWFwX2V4dGVuZF9pbml0aWFsaXplZF9ub2xvY2soc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpXG4gXHRcdG50ZnNfZXJyb3Iodm9sLVx1MDAzZXNiLCBcIkZhaWxlZCB0byBtYXAgbWZ0IHJlY29yZC5cIik7XG4gXHRcdHJldHVybiBQVFJfRVJSKG1yZWMpO1xuIFx0fVxuLVx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG1mdF9uaSwgbXJlYyk7XG4rXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobWZ0X25pLCBtcmVjLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4gXHRpZiAodW5saWtlbHkoIWN0eCkpIHtcbiBcdFx0bnRmc19lcnJvcih2b2wtXHUwMDNlc2IsIFwiRmFpbGVkIHRvIGdldCBzZWFyY2ggY29udGV4dC5cIik7XG4gXHRcdHJldCA9IC1FTk9NRU07XG5AQCAtMTQyMyw3ICsxNDM0LDcgQEAgc3RhdGljIGludCBudGZzX21mdF9iaXRtYXBfZXh0ZW5kX2luaXRpYWxpemVkX25vbG9jayhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbClcbiBcdFx0TlZvbFNldEVycm9ycyh2b2wpO1xuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuLVx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG1mdF9uaSwgbXJlYyk7XG4rXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobWZ0X25pLCBtcmVjLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4gXHRpZiAodW5saWtlbHkoIWN0eCkpIHtcbiBcdFx0bnRmc19lcnJvcih2b2wtXHUwMDNlc2IsIFwiRmFpbGVkIHRvIGdldCBzZWFyY2ggY29udGV4dC4lc1wiLCBlcyk7XG4gXHRcdE5Wb2xTZXRFcnJvcnModm9sKTtcbkBAIC0xNDkwLDYgKzE1MDEsNyBAQCBzdGF0aWMgaW50IG50ZnNfbWZ0X2RhdGFfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxuIFx0czY0IG1pbl9uciwgbnIsIGxsO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHN0cnVjdCBudGZzX2lub2RlICptZnRfbmk7XG4rXHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pO1xuIFx0c3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqcmwsICpybDI7XG4gXHRzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eCA9IE5VTEw7XG4gXHRzdHJ1Y3QgbWZ0X3JlY29yZCAqbXJlYztcbkBAIC0xNTAxLDYgKzE1MTMsNyBAQCBzdGF0aWMgaW50IG50ZnNfbWZ0X2RhdGFfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxuIFxuIFx0bnRmc19kZWJ1ZyhcIkV4dGVuZGluZyBtZnQgZGF0YSBhbGxvY2F0aW9uLlwiKTtcbiBcdG1mdF9uaSA9IE5URlNfSSh2b2wtXHUwMDNlbWZ0X2lubyk7XG4rXHRhdHRyX2xvY2tfbmkgPSBudGZzX2F0dHJfbGlzdF9sb2NrKG1mdF9uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcbiBcdC8qXG4gXHQgKiBEZXRlcm1pbmUgdGhlIHByZWZlcnJlZCBhbGxvY2F0aW9uIGxvY2F0aW9uLCBpLmUuIHRoZSBsYXN0IGxjbiBvZlxuIFx0ICogdGhlIG1mdCBkYXRhIGF0dHJpYnV0ZS4gIFRoZSBhbGxvY2F0ZWQgc2l6ZSBvZiB0aGUgbWZ0IGRhdGFcbkBAIC0xNTE0LDYgKzE1MjcsNyBAQCBzdGF0aWMgaW50IG50ZnNfbWZ0X2RhdGFfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxuIFx0XHRcdE5URlNfQl9UT19DTFUodm9sLCBsbCAtIDEpLCBOVUxMKTtcbiBcdGlmIChJU19FUlIocmwpIHx8IHVubGlrZWx5KCFybC1cdTAwM2VsZW5ndGggfHwgcmwtXHUwMDNlbGNuIFx1MDAzYyAwKSkge1xuIFx0XHR1cF93cml0ZShcdTAwMjZtZnRfbmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbitcdFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcbiBcdFx0bnRmc19lcnJvcih2b2wtXHUwMDNlc2IsXG4gXHRcdFx0XCJGYWlsZWQgdG8gZGV0ZXJtaW5lIGxhc3QgYWxsb2NhdGVkIGNsdXN0ZXIgb2YgbWZ0IGRhdGEgYXR0cmlidXRlLlwiKTtcbiBcdFx0aWYgKCFJU19FUlIocmwpKVxuQEAgLTE1NDQsNiArMTU1OCw3IEBAIHN0YXRpYyBpbnQgbnRmc19tZnRfZGF0YV9leHRlbmRfYWxsb2NhdGlvbl9ub2xvY2soc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpXG4gXHRcdFx0bnRmc193YXJuaW5nKHZvbC1cdTAwM2VzYixcbiBcdFx0XHRcdFwiQ2Fubm90IGFsbG9jYXRlIG1mdCByZWNvcmQgYmVjYXVzZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgaW5vZGVzICgyXjMyKSBoYXMgYWxyZWFkeSBiZWVuIHJlYWNoZWQuXCIpO1xuIFx0XHRcdHVwX3dyaXRlKFx1MDAyNm1mdF9uaS1cdTAwM2VydW5saXN0LmxvY2spO1xuK1x0XHRcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4gXHRcdFx0cmV0dXJuIC1FTk9TUEM7XG4gXHRcdH1cbiBcdH1cbkBAIC0xNTY4LDYgKzE1ODMsNyBAQCBzdGF0aWMgaW50IG50ZnNfbWZ0X2RhdGFfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxuIFx0XHRcdG50ZnNfZXJyb3Iodm9sLVx1MDAzZXNiLFxuIFx0XHRcdFx0XCJGYWlsZWQgdG8gYWxsb2NhdGUgdGhlIG1pbmltYWwgbnVtYmVyIG9mIGNsdXN0ZXJzICglbGxpKSBmb3IgdGhlIG1mdCBkYXRhIGF0dHJpYnV0ZS5cIixcbiBcdFx0XHRcdG5yKTtcbitcdFx0XHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuIFx0XHRcdHJldHVybiBQVFJfRVJSKHJsMik7XG4gXHRcdH1cbiBcdFx0LypcbkBAIC0xNTgzLDYgKzE1OTksNyBAQCBzdGF0aWMgaW50IG50ZnNfbWZ0X2RhdGFfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxuIFx0cmwgPSBudGZzX3J1bmxpc3RzX21lcmdlKFx1MDAyNm1mdF9uaS1cdTAwM2VydW5saXN0LCBybDIsIDAsIFx1MDAyNm5ld19ybF9jb3VudCk7XG4gXHRpZiAoSVNfRVJSKHJsKSkge1xuIFx0XHR1cF93cml0ZShcdTAwMjZtZnRfbmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbitcdFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcbiBcdFx0bnRmc19lcnJvcih2b2wtXHUwMDNlc2IsIFwiRmFpbGVkIHRvIG1lcmdlIHJ1bmxpc3RzIGZvciBtZnQgZGF0YSBhdHRyaWJ1dGUuXCIpO1xuIFx0XHRpZiAobnRmc19jbHVzdGVyX2ZyZWVfZnJvbV9ybCh2b2wsIHJsMikpIHtcbiBcdFx0XHRudGZzX2Vycm9yKHZvbC1cdTAwM2VzYixcbkBAIC0xNjA4LDcgKzE2MjUsNyBAQCBzdGF0aWMgaW50IG50ZnNfbWZ0X2RhdGFfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxuIFx0XHRkb3duX3dyaXRlKFx1MDAyNm1mdF9uaS1cdTAwM2VydW5saXN0LmxvY2spO1xuIFx0XHRnb3RvIHVuZG9fYWxsb2M7XG4gXHR9XG4tXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobWZ0X25pLCBtcmVjKTtcbitcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChtZnRfbmksIG1yZWMsIE5URlNfQVRUUl9DVFhfTE9DS19OT05FKTtcbiBcdGlmICh1bmxpa2VseSghY3R4KSkge1xuIFx0XHRudGZzX2Vycm9yKHZvbC1cdTAwM2VzYiwgXCJGYWlsZWQgdG8gZ2V0IHNlYXJjaCBjb250ZXh0LlwiKTtcbiBcdFx0cmV0ID0gLUVOT01FTTtcbkBAIC0xNzA0LDYgKzE3MjEsNyBAQCBzdGF0aWMgaW50IG50ZnNfbWZ0X2RhdGFfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxuIFx0bnRmc19hdHRyX3B1dF9zZWFyY2hfY3R4KGN0eCk7XG4gXHR1bm1hcF9tZnRfcmVjb3JkKG1mdF9uaSk7XG4gXHRudGZzX2RlYnVnKFwiRG9uZS5cIik7XG4rXHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfV1JJVEUpO1xuIFx0cmV0dXJuIDA7XG4gcmVzdG9yZV91bmRvX2FsbG9jOlxuIFx0bnRmc19hdHRyX3JlaW5pdF9zZWFyY2hfY3R4KGN0eCk7XG5AQCAtMTcxNyw2ICsxNzM1LDcgQEAgc3RhdGljIGludCBudGZzX21mdF9kYXRhX2V4dGVuZF9hbGxvY2F0aW9uX25vbG9jayhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbClcbiBcdFx0bnRmc19hdHRyX3B1dF9zZWFyY2hfY3R4KGN0eCk7XG4gXHRcdHVubWFwX21mdF9yZWNvcmQobWZ0X25pKTtcbiBcdFx0dXBfd3JpdGUoXHUwMDI2bWZ0X25pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4rXHRcdG50ZnNfYXR0cl9saXN0X3VubG9jayhhdHRyX2xvY2tfbmksIE5URlNfQVRUUl9DVFhfTE9DS19XUklURSk7XG4gXHRcdC8qXG4gXHRcdCAqIFRoZSBvbmx5IHRoaW5nIHRoYXQgaXMgbm93IHdyb25nIGlzIC1cdTAwM2VhbGxvY2F0ZWRfc2l6ZSBvZiB0aGVcbiBcdFx0ICogYmFzZSBhdHRyaWJ1dGUgZXh0ZW50IHdoaWNoIGNoa2RzayBzaG91bGQgYmUgYWJsZSB0byBmaXguXG5AQCAtMTczNiw3ICsxNzU1LDcgQEAgc3RhdGljIGludCBudGZzX21mdF9kYXRhX2V4dGVuZF9hbGxvY2F0aW9uX25vbG9jayhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbClcbiBcdFx0bnRmc19lcnJvcih2b2wtXHUwMDNlc2IsIFwiRmFpbGVkIHRvIHRydW5jYXRlIG1mdCBkYXRhIGF0dHJpYnV0ZSBydW5saXN0LiVzXCIsIGVzKTtcbiBcdFx0TlZvbFNldEVycm9ycyh2b2wpO1xuIFx0fVxuLVx0aWYgKG1wX2V4dGVuZGVkIFx1MDAyNlx1MDAyNiBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobWZ0X25pLCAwKSkge1xuK1x0aWYgKG1wX2V4dGVuZGVkIFx1MDAyNlx1MDAyNiBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNfbm9sb2NrKG1mdF9uaSwgMCkpIHtcbiBcdFx0bnRmc19lcnJvcih2b2wtXHUwMDNlc2IsIFwiRmFpbGVkIHRvIHJlc3RvcmUgbWFwcGluZyBwYWlycy4lc1wiLFxuIFx0XHRcdCAgIGVzKTtcbiBcdFx0TlZvbFNldEVycm9ycyh2b2wpO1xuQEAgLTE3NjUsNiArMTc4NCw3IEBAIHN0YXRpYyBpbnQgbnRmc19tZnRfZGF0YV9leHRlbmRfYWxsb2NhdGlvbl9ub2xvY2soc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpXG4gXHR9XG4gXHRpZiAoIUlTX0VSUihtcmVjKSlcbiBcdFx0dW5tYXBfbWZ0X3JlY29yZChtZnRfbmkpO1xuK1x0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTIyNDgsNyArMjI2OCw3IEBAIGludCBudGZzX21mdF9yZWNvcmRfYWxsb2Moc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsIGNvbnN0IGludCBtb2RlLFxuIFx0XHRlcnIgPSBQVFJfRVJSKG0pO1xuIFx0XHRnb3RvIHVuZG9fZGF0YV9pbml0O1xuIFx0fVxuLVx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG1mdF9uaSwgbSk7XG4rXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobWZ0X25pLCBtLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4gXHRpZiAodW5saWtlbHkoIWN0eCkpIHtcbiBcdFx0bnRmc19lcnJvcih2b2wtXHUwMDNlc2IsIFwiRmFpbGVkIHRvIGdldCBzZWFyY2ggY29udGV4dC5cIik7XG4gXHRcdGVyciA9IC1FTk9NRU07XG5AQCAtMjU5MywxNCArMjYxMywxNyBAQCBpbnQgbnRmc19tZnRfcmVjb3JkX2ZyZWUoc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsIHN0cnVjdCBudGZzX2lub2RlICpuaSlcbiBzdGF0aWMgczY0IGxjbl9mcm9tX2luZGV4KHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXG4gXHRcdHVuc2lnbmVkIGxvbmcgaW5kZXgpXG4ge1xuK1x0c3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbG9ja19uaTtcbiBcdHM2NCB2Y247XG4gXHRzNjQgbGNuO1xuIFxuIFx0dmNuID0gbnRmc19waWR4X3RvX2NsdXN0ZXIodm9sLCBpbmRleCk7XG4gXG4rXHRhdHRyX2xvY2tfbmkgPSBudGZzX2F0dHJfbGlzdF9sb2NrKG5pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4gXHRkb3duX3JlYWQoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbiBcdGxjbiA9IG50ZnNfYXR0cl92Y25fdG9fbGNuX25vbG9jayhuaSwgdmNuLCBmYWxzZSk7XG4gXHR1cF9yZWFkKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4rXHRudGZzX2F0dHJfbGlzdF91bmxvY2soYXR0cl9sb2NrX25pLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4gXG4gXHRyZXR1cm4gbGNuO1xuIH1cbkBAIC0yNzAwLDE0ICsyNzIzLDIwIEBAIHN0YXRpYyBpbnQgbnRmc193cml0ZV9tZnRfYmxvY2soc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3XG4gXHRcdFx0XHRiaW8gPSBOVUxMO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHRpZiAodm9sLVx1MDAzZWNsdXN0ZXJfc2l6ZSBcdTAwM2MgZm9saW9fc2l6ZShmb2xpbykpIHtcbi1cdFx0XHRcdGRvd25fd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbi1cdFx0XHRcdHJsID0gbnRmc19hdHRyX3Zjbl90b19ybChuaSwgdmNuX29mZiwgXHUwMDI2bGNuKTtcbi1cdFx0XHRcdHVwX3dyaXRlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4tXHRcdFx0XHRpZiAoSVNfRVJSKHJsKSB8fCBsY24gXHUwMDNjIDApIHtcbi1cdFx0XHRcdFx0ZXJyID0gLUVJTztcbi1cdFx0XHRcdFx0Z290byB1bm1fZG9uZTtcbi1cdFx0XHRcdH1cbitcdFx0XHRcdGlmICh2b2wtXHUwMDNlY2x1c3Rlcl9zaXplIFx1MDAzYyBmb2xpb19zaXplKGZvbGlvKSkge1xuK1x0XHRcdFx0XHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9sb2NrX25pO1xuK1x0XHRcdFx0XHRlbnVtIG50ZnNfYXR0cl9zZWFyY2hfY3R4X2xvY2tfbW9kZSBtb2RlO1xuK1xuK1x0XHRcdFx0XHRtb2RlID0gTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQ7XG4rXHRcdFx0XHRcdGF0dHJfbG9ja19uaSA9IG50ZnNfYXR0cl9saXN0X2xvY2sobmksIG1vZGUpO1xuK1x0XHRcdFx0XHRkb3duX3dyaXRlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4rXHRcdFx0XHRcdHJsID0gbnRmc19hdHRyX3Zjbl90b19ybChuaSwgdmNuX29mZiwgXHUwMDI2bGNuKTtcbitcdFx0XHRcdFx0dXBfd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbitcdFx0XHRcdFx0bnRmc19hdHRyX2xpc3RfdW5sb2NrKGF0dHJfbG9ja19uaSwgbW9kZSk7XG4rXHRcdFx0XHRcdGlmIChJU19FUlIocmwpIHx8IGxjbiBcdTAwM2MgMCkge1xuK1x0XHRcdFx0XHRcdGVyciA9IC1FSU87XG4rXHRcdFx0XHRcdFx0Z290byB1bm1fZG9uZTtcbitcdFx0XHRcdFx0fVxuIFxuIFx0XHRcdFx0aWYgKGJpbyBcdTAwMjZcdTAwMjZcbiBcdFx0XHRcdCAgIChiaW9fZW5kX3NlY3RvcihiaW8pIFx1MDAzZVx1MDAzZSAodm9sLVx1MDAzZWNsdXN0ZXJfc2l6ZV9iaXRzIC0gOSkpICE9XG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9uYW1laS5jIGIvZnMvbnRmcy9uYW1laS5jXG5pbmRleCBhMTk2MjZhMTM1YmQ3Zi4uNzNkMDg3Yjc3OGMwNDMgMTAwNjQ0XG4tLS0gYS9mcy9udGZzL25hbWVpLmNcbisrKyBiL2ZzL250ZnMvbmFtZWkuY1xuQEAgLTI2Niw3ICsyNjYsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbnRmc19sb29rdXAoc3RydWN0IGlub2RlICpkaXJfaW5vLCBzdHJ1Y3QgZGVudHJ5ICpkZW50LFxuIFx0XHRcdFx0Y3R4ID0gTlVMTDtcbiBcdFx0XHRcdGdvdG8gZXJyX291dDtcbiBcdFx0XHR9XG4tXHRcdFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBtKTtcbitcdFx0XHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIG0sIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdFx0XHRpZiAodW5saWtlbHkoIWN0eCkpIHtcbiBcdFx0XHRcdGVyciA9IC1FTk9NRU07XG4gXHRcdFx0XHRnb3RvIGVycl9vdXQ7XG5AQCAtODU4LDcgKzg1OCw3IEBAIHN0YXRpYyBpbnQgbnRmc19kZWxldGUoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzdHJ1Y3QgbnRmc19pbm9kZSAqZGlyX25pLFxuIFx0ICogSWYgZmlsZW5hbWUgaW4gRE9TIG9yIGluIFdJTjMyIG5hbWVzcGFjZSwgdGhlbiByZW1vdmUgRE9TIG5hbWUgZmlyc3QsXG4gXHQgKiBvbmx5IHRoZW4gcmVtb3ZlIFdJTjMyIG5hbWUuXG4gXHQgKi9cbi1cdGFjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwpO1xuK1x0YWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcbiBcdGlmICghYWN0eCkge1xuIFx0XHRudGZzX2Vycm9yKHNiLCBcIiVzLCBGYWlsZWQgdG8gZ2V0IHNlYXJjaCBjb250ZXh0XCIsIF9fZnVuY19fKTtcbiBcdFx0aWYgKG5lZWRfbG9jaykge1xuQEAgLTE2MDYsNyArMTYwNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpudGZzX2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqY2hpbGRfZGVudClcbiBcdGlmIChJU19FUlIobXJlYykpXG4gXHRcdHJldHVybiBFUlJfQ0FTVChtcmVjKTtcbiBcdC8qIEZpbmQgdGhlIGZpcnN0IGZpbGUgbmFtZSBhdHRyaWJ1dGUgaW4gdGhlIG1mdCByZWNvcmQuICovXG4tXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIG1yZWMpO1xuK1x0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBtcmVjLCBOVEZTX0FUVFJfQ1RYX0xPQ0tfUkVBRCk7XG4gXHRpZiAodW5saWtlbHkoIWN0eCkpIHtcbiBcdFx0dW5tYXBfbWZ0X3JlY29yZChuaSk7XG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuZGlmZiAtLWdpdCBhL2ZzL250ZnMvc3VwZXIuYyBiL2ZzL250ZnMvc3VwZXIuY1xuaW5kZXggOGFiZTdiZWU0YzBkOWIuLjZhZjI0ZmJlYjkxOGRmIDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9zdXBlci5jXG4rKysgYi9mcy9udGZzL3N1cGVyLmNcbkBAIC0zODAsNyArMzgwLDcgQEAgc3RhdGljIGludCBudGZzX3dyaXRlX3ZvbHVtZV9mbGFncyhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwgY29uc3QgX19sZTE2IGZsYWdzKVxuIFx0aWYgKHZvbC1cdTAwM2V2b2xfZmxhZ3MgPT0gZmxhZ3MpXG4gXHRcdGdvdG8gZG9uZTtcbiBcbi1cdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCk7XG4rXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwsIE5URlNfQVRUUl9DVFhfTE9DS19SRUFEKTtcbiBcdGlmICghY3R4KSB7XG4gXHRcdGVyciA9IC1FTk9NRU07XG4gXHRcdGdvdG8gcHV0X3VubV9lcnJfb3V0O1xuQEAgLTQ3Niw3ICs0NzYsNyBAQCBpbnQgbnRmc193cml0ZV92b2x1bWVfbGFiZWwoc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsIGNoYXIgKmxhYmVsKVxuIFx0fVxuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZ2b2xfbmktXHUwMDNlbXJlY19sb2NrKTtcbi1cdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eCh2b2xfbmksIE5VTEwpO1xuK1x0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KHZvbF9uaSwgTlVMTCwgTlRGU19BVFRSX0NUWF9MT0NLX1dSSVRFKTtcbiBcdGlmICghY3R4KSB7XG4gXHRcdHJldCA9IC1FTk9NRU07XG4gXHRcdGdvdG8gb3V0O1xuQEAgLTE0ODEsNyArMTQ4MSw3IEBAIHN0YXRpYyBib29sIGxvYWRfc3lzdGVtX2ZpbGVzKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxuIFx0XHRnb3RvIHZvbHVtZV9mYWlsZWQ7XG4gXHR9XG4gXG4tXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoTlRGU19JKHZvbC1cdTAwM2V2b2xfaW5vKSwgbSk7XG4rXHRjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgoTlRGU19JKHZvbC1cdTAwM2V2b2xfaW5vKSwgbSwgTlRGU19BVFRSX0NUWF9MT0NLX1JFQUQpO1xuIFx0aWYgKCFjdHgpIHtcbiBcdFx0bnRmc19lcnJvcihzYiwgXCJGYWlsZWQgdG8gZ2V0IGF0dHJpYnV0ZSBzZWFyY2ggY29udGV4dC5cIik7XG4gXHRcdGdvdG8gZ2V0X2N0eF92b2xfZmFpbGVkO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTU6NTEuNDkyMjQxNDgxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk5MzM1NjUwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCB0byB0aGUgTlRGUyBGaWxlc3lzdGVtKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRhcmdldHMgdGhlIGBmcy9udGZzL2AgZGlyZWN0b3J5LiBSaWdodCBhd2F5LCB0aGlzIHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgc2VlbXMgbGlrZSBhIGNvcmUgbW9kaWZpY2F0aW9uIHRvIHRoZSBOVEZTIGZpbGVzeXN0ZW0uIFRoZSBwYXRjaCB0b3VjaGVzIGEgc2lnbmlmaWNhbnQgbnVtYmVyIG9mIGZpbGVzIHdpdGhpbiBgZnMvbnRmcy9gOiBgYW9wcy5jYCwgYGF0dHJpYi5jYCwgYGF0dHJpYi5oYCwgYGF0dHJsaXN0LmNgLCBgY29tcHJlc3MuY2AsIGBkaXIuY2AsIGBlYS5jYCwgYGZpbGUuY2AsIGBpbmRleC5jYCwgYGlub2RlLmNgLCBgaW5vZGUuaGAsIGBpb21hcC5jYCwgYGxvZ2ZpbGUuY2AsIGBtZnQuY2AsIGBuYW1laS5jYCwgYW5kIGBzdXBlci5jYC4gVGhhdCdzIGEgcHJldHR5IGJyb2FkIHNjb3BlOyB0aGlzIGlzIG1vcmUgdGhhbiBqdXN0IGEgbWlub3IgdHdlYWsuXG5cblRoZSBoZWFydCBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgbG9ja2luZyBhcm91bmQgYXR0cmlidXRlIGxpc3RzLiBJdCBpbnRyb2R1Y2VzIG5ldyBsb2NraW5nIHByaW1pdGl2ZXM6IGBudGZzX2F0dHJfbGlzdF9sb2NrYCwgYG50ZnNfYXR0cl9saXN0X3VubG9ja2AsIGBudGZzX2F0dHJfbG9ja19zZWFyY2hfY3R4YCwgYW5kIGBudGZzX2F0dHJfdW5sb2NrX3NlYXJjaF9jdHhgLiBBbmQgaXQgYWRkcyBhIGBhdHRyX2xpc3RfbG9ja2Agcndfc2VtYXBob3JlIHRvIGBzdHJ1Y3QgbnRmc19pbm9kZWAuIEFsc28sIHRoZSBmdW5jdGlvbiBgbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4YCBub3cgdGFrZXMgYSBsb2NrIG1vZGUuIFBsdXMsIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG1hbnkgXCJfbm9sb2NrXCIgdmFyaWFudHMgb2YgY29yZSBmdW5jdGlvbnMuIFRoYXQgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGludm9sdmluZyBhdHRyaWJ1dGUgbGlzdCBsb2NraW5nLCB3aGljaCBpcyBpbnRlcmVzdGluZy5cblxuVGhpcyBpcyBjbGVhcmx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgY29yZSBtb2RpZmljYXRpb24gaW4gdGhlIE5URlMgc3Vic3lzdGVtLiBMZXQgbWUgc2VlLCBpcyBOVEZTIHN0aWxsIHJlYWNoYWJsZT8gT2YgY291cnNlLCB0aHJvdWdoIG1vdW50cyBhbmQgZmlsZXN5c3RlbSBvcGVyYXRpb25zLCBpdCdzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgc3lzdGVtLiBUaGVuIGl0IGhpdHMgbWUsIGFtIEkgbG9va2luZyBhdCB0aGUgKm9sZCogTlRGUyBkcml2ZXIsIG9yIHRoZSAqbmV3KiBvbmU/IFdhcyBpdCBtaWdyYXRlZCB0byBgZnMvbnRmczMvYD8gTGV0IG1lIGNoZWNrIHF1aWNrbHkuIFllcywgdGhlIHBhdGNoIGV4cGxpY2l0bHkgdGFyZ2V0cyBgZnMvbnRmcy9gLCBzbyBpdCdzIHRoZSBvbGRlciBkcml2ZXIuIE5vdyBJJ2QgYmV0dGVyIGNvbmZpcm0gdGhhdCBgQ09ORklHX05URlNfRlNgIGlzIHRoZSBjb25maWcgb3B0aW9uIHRoYXQgZW5hYmxlcyB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTY2MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE1OjU5LjQ4NTYwMTY2OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzQwNTY3NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5URlNfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL250ZnMvS2NvbmZpZzoyOmNvbmZpZyBOVEZTX0ZTXFxuZnMvbnRmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk5URlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL250ZnMvS2NvbmZpZz0xMz1jb25maWcgTlRGU19ERUJVR1xcbi0tXFxuZnMvbnRmcy9LY29uZmlnLTM0LVxcbmZzL250ZnMvS2NvbmZpZzozNTpjb25maWcgTlRGU19GU19QT1NJWF9BQ0xcXG5mcy9udGZzL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiTlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTU6NTkuNzE5NjY0MTgxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU2OTA4Mjc1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipOVEZTIERyaXZlciBDaGVjayoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgTlRGUyBjb25maWd1cmF0aW9uLCBhbmQgSSdtIHByZXR0eSBzdXJlIGl0J3MgYENPTkZJR19OVEZTX0ZTYC4gQnV0LCBob2xkIG9uIGEgc2Vjb25kLi4uIExldCBtZSBkb3VibGUtY2hlY2suIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIElzIHRoYXQgb2xkIGBmcy9udGZzL2AgZGlyZWN0b3J5IHN0aWxsIGhhbmdpbmcgYXJvdW5kIGluIHRoZSBrZXJuZWw/IFl1cCwgc2VlbXMgdG8gYmUuIEFuZCB0aGF0IGNvbmZpcm1zIGl0OiBgQ09ORklHX05URlNfRlNgIGlzIHRoZSBmbGFnIGZvciB0aGUgYmFzZSBOVEZTIGRyaXZlci4gQW5kIHRoZXJlIGl0IGlzLCBgQ09ORklHX05URlNfUldgLCBmb3Igd3JpdGUgc3VwcG9ydCwgYXMgZXhwZWN0ZWQuIENsYXNzaWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NzgzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTY6MDMuMjg4NzUxNDU2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMzIzNzU1MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5URlNfUldcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxNjowMy44MDE5OTg2NzZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzc2ODM4MDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBxdWVzdGlvbjpcblxuKipDaGVja2luZyBgZnMvbnRmcy9LY29uZmlnYCBmb3IgUmVhZC9Xcml0ZSBTdXBwb3J0KipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gQmVmb3JlIEkganVtcCB0byBhbnkgY29uY2x1c2lvbnMsIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIG9uZSByZWxhdGVkIHRvIHRoZSBOVEZTIGZpbGVzeXN0ZW0uIEkgbmVlZCB0byB2ZXJpZnkgd2hhdCBvcHRpb25zIGFyZSBhY3R1YWxseSBhdmFpbGFibGUgd2l0aGluIHRoZSBOVEZTIGltcGxlbWVudGF0aW9uIGl0c2VsZi4gVGhlIGxvY2F0aW9uIGBmcy9udGZzL0tjb25maWdgIGlzIHdoZXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBOVEZTIGFyZSBsaWtlbHkgZGVmaW5lZC4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUncyBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciByZWFkLXdyaXRlIHN1cHBvcnQgKGBSV2ApIHRoYXQncyBleHBvc2VkIHRvIHRoZSB1c2VyLiBUaGlzIGlzIGEgY3J1Y2lhbCBmaXJzdCBzdGVwOyBJJ20gYXNzdW1pbmcgdGhlcmUncyBhIHJlYXNvbiB0aGUgcXVlc3Rpb24gd2FzIGFza2VkIGFuZCBJIHdhbnQgdG8gZWxpbWluYXRlIHRoZSBzaW1wbGUgcG9zc2liaWxpdGllcyBmaXJzdCBiZWZvcmUgSSBkaXZlIGludG8gbW9yZSBjb21wbGV4IGV4cGxhbmF0aW9ucy4gVGhpcyBoZWxwcyBtZSBuYXJyb3cgZG93biB0aGUgcmVhbCBpc3N1ZSBhdCBoYW5kLiBVbmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2lsbCBhbHNvIGltcGFjdCBpZiB0aGlzIGlzIGEgZHJpdmVyL2tlcm5lbCBpc3N1ZSwgb3IgcGVyaGFwcyBhIHVzZXJsYW5kIHV0aWxpdHkgbmVlZGluZyBjb25maWd1cmVkIG9yIHVwZ3JhZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzAyNywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE2OjA3LjE3ODg0MDAwOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjk3Njc0MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5URlNfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9udGZzL0tjb25maWc6Mjpjb25maWcgTlRGU19GU1xcbmZzL250ZnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJOVEZTIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9udGZzL0tjb25maWctMTItXFxuZnMvbnRmcy9LY29uZmlnOjEzOmNvbmZpZyBOVEZTX0RFQlVHXFxuZnMvbnRmcy9LY29uZmlnLTE0LVxcdGJvb2wgXFxcIk5URlMgZGVidWdnaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9udGZzL0tjb25maWctMzQtXFxuZnMvbnRmcy9LY29uZmlnOjM1OmNvbmZpZyBOVEZTX0ZTX1BPU0lYX0FDTFxcbmZzL250ZnMvS2NvbmZpZy0zNi1cXHRib29sIFxcXCJOVEZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxNjowNy41NDg2MTgwNTVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzA4NzQ3MzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgTlRGUyBMYW5kc2NhcGUqKlxuXG5SaWdodCwgc28gYENPTkZJR19OVEZTX1JXYC4uLiB0aGF0IHJpbmdzIGEgYmVsbC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBkaWdnaW5nIGluIHRoZSBmaWxlc3lzdGVtIHNvdXJjZSwgc3BlY2lmaWNhbGx5IGBmcy9udGZzL0tjb25maWdgLiBMZXQncyBnZXQgdGhhdCBmaWxlIG9wZW4gYW5kIHNlZSB3aGF0IHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGFjdHVhbGx5ICpzYXlzKiBhYm91dCB0aGF0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZXMsIGFuZCBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgd3JpdGUgc3VwcG9ydC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgbmV3IGNvbnNpZGVyYXRpb25zIHNpbmNlIHRoZSBsYXN0IHRpbWUgSSBsb29rZWQgYXQgaXQuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgZmlsZXN5c3RlbSBmZWF0dXJlcyBvciBzZWN1cml0eSBzZXR0aW5ncyB0aGF0IG1pZ2h0IGJlIGFmZmVjdGVkLiBNeSBnb2FsIGhlcmUgaXMgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoYXQgcGFydGljdWxhciBjb25maWcgb3B0aW9uLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NDY3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTY6MTEuODU3MzY4MTEyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9udGZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTlRGU19GU1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIk5URlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4gICA0OlxcdFxcdHNlbGVjdCBOTFNcXG4gICA1OlxcdFxcdHNlbGVjdCBGU19JT01BUFxcbiAgIDY6XFx0XFx0aGVscFxcbiAgIDc6XFx0XFx0ICBOVEZTIGlzIHRoZSBmaWxlIHN5c3RlbSBvZiBNaWNyb3NvZnQgV2luZG93cyBOVCwgMjAwMCwgWFAgYW5kIDIwMDMuXFxuICAgODpcXHRcXHQgIFRoaXMgYWxsb3dzIHlvdSB0byBtb3VudCBkZXZpY2VzIGZvcm1hdHRlZCB3aXRoIHRoZSBudGZzIGZpbGUgc3lzdGVtLlxcbiAgIDk6XFx0XFxuICAxMDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZFxcbiAgMTE6XFx0XFx0ICBudGZzLlxcbiAgMTI6XFx0XFxuICAxMzpcXHRjb25maWcgTlRGU19ERUJVR1xcbiAgMTQ6XFx0XFx0Ym9vbCBcXFwiTlRGUyBkZWJ1Z2dpbmcgc3VwcG9ydFxcXCJcXG4gIDE1OlxcdFxcdGRlcGVuZHMgb24gTlRGU19GU1xcbiAgMTY6XFx0XFx0aGVscFxcbiAgMTc6XFx0XFx0ICBJZiB5b3UgYXJlIGV4cGVyaWVuY2luZyBhbnkgcHJvYmxlbXMgd2l0aCB0aGUgTlRGUyBmaWxlIHN5c3RlbSwgc2F5XFxuICAxODpcXHRcXHQgIFkgaGVyZS4gIFRoaXMgd2lsbCByZXN1bHQgaW4gYWRkaXRpb25hbCBjb25zaXN0ZW5jeSBjaGVja3MgdG8gYmVcXG4gIDE5OlxcdFxcdCAgcGVyZm9ybWVkIGJ5IHRoZSBkcml2ZXIgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIGRlYnVnZ2luZyBtZXNzYWdlcyB0b1xcbiAgMjA6XFx0XFx0ICBiZSB3cml0dGVuIHRvIHRoZSBzeXN0ZW0gbG9nLiAgTm90ZSB0aGF0IGRlYnVnZ2luZyBtZXNzYWdlcyBhcmVcXG4gIDIxOlxcdFxcdCAgZGlzYWJsZWQgYnkgZGVmYXVsdC4gIFRvIGVuYWJsZSB0aGVtLCBzdXBwbHkgdGhlIG9wdGlvbiBkZWJ1Z19tc2dzPTFcXG4gIDIyOlxcdFxcdCAgYXQgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgd2hlbiBib290aW5nIHRoZSBrZXJuZWwgb3IgYXMgYW4gb3B0aW9uXFxuICAyMzpcXHRcXHQgIHRvIGluc21vZCB3aGVuIGxvYWRpbmcgdGhlIG50ZnMgbW9kdWxlLiAgT25jZSB0aGUgZHJpdmVyIGlzIGFjdGl2ZSxcXG4gIDI0OlxcdFxcdCAgeW91IGNhbiBlbmFibGUgZGVidWdnaW5nIG1lc3NhZ2VzIGJ5IGRvaW5nIChhcyByb290KTpcXG4gIDI1OlxcdFxcdCAgZWNobyAxIFxcdTAwM2UgL3Byb2Mvc3lzL2ZzL250ZnMtZGVidWdcXG4gIDI2OlxcdFxcdCAgUmVwbGFjaW5nIHRoZSBcXFwiMVxcXCIgd2l0aCBcXFwiMFxcXCIgd291bGQgZGlzYWJsZSBkZWJ1ZyBtZXNzYWdlcy5cXG4gIDI3OlxcdFxcbiAgMjg6XFx0XFx0ICBJZiB5b3UgbGVhdmUgZGVidWdnaW5nIG1lc3NhZ2VzIGRpc2FibGVkLCB0aGlzIHJlc3VsdHMgaW4gbGl0dGxlXFxuICAyOTpcXHRcXHQgIG92ZXJoZWFkLCBidXQgZW5hYmxpbmcgZGVidWcgbWVzc2FnZXMgcmVzdWx0cyBpbiB2ZXJ5IHNpZ25pZmljYW50XFxuICAzMDpcXHRcXHQgIHNsb3dkb3duIG9mIHRoZSBzeXN0ZW0uXFxuICAzMTpcXHRcXG4gIDMyOlxcdFxcdCAgV2hlbiByZXBvcnRpbmcgYnVncywgcGxlYXNlIHRyeSB0byBoYXZlIGF2YWlsYWJsZSBhIGZ1bGwgZHVtcCBvZlxcbiAgMzM6XFx0XFx0ICBkZWJ1Z2dpbmcgbWVzc2FnZXMgd2hpbGUgdGhlIG1pc2JlaGF2aW91ciB3YXMgb2NjdXJyaW5nLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgTlRGU19GU19QT1NJWF9BQ0xcXG4gIDM2OlxcdFxcdGJvb2wgXFxcIk5URlMgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuICAzNzpcXHRcXHRkZXBlbmRzIG9uIE5URlNfRlNcXG4gIDM4OlxcdFxcdHNlbGVjdCBGU19QT1NJWF9BQ0xcXG4gIDM5OlxcdFxcdGhlbHBcXG4gIDQwOlxcdFxcdCAgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMgKEFDTHMpIHN1cHBvcnQgYWRkaXRpb25hbCBhY2Nlc3MgcmlnaHRzXFxuICA0MTpcXHRcXHQgIGZvciB1c2VycyBhbmQgZ3JvdXBzIGJleW9uZCB0aGUgc3RhbmRhcmQgb3duZXIvZ3JvdXAvd29ybGQgc2NoZW1lLlxcbiAgNDI6XFx0XFxuICA0MzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgQUNMIHN1cHBvcnQgZm9yIG50ZnMsIHByb3ZpZGluZyBmdW5jdGlvbmFsIHBhcml0eVxcbiAgNDQ6XFx0XFx0ICB3aXRoIG50ZnMzIGRyaXZpZXIuXFxuICA0NTpcXHRcXG4gIDQ2OlxcdFxcdCAgTk9URTogdGhpcyBpcyBsaW51eCBvbmx5IGZlYXR1cmUuIFdpbmRvd3Mgd2lsbCBpZ25vcmUgdGhlc2UgQUNMcy5cXG4gIDQ3OlxcdFxcbiAgNDg6XFx0XFx0ICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IEFjY2VzcyBDb250cm9sIExpc3RzIGFyZSwgc2F5IE4uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE2OjExLjg1NzU0NDQ4MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTY0NDc0NDExMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5URlMgV3JpdGUgU3VwcG9ydCBhbmQgQXR0cmlidXRlIExvY2tpbmcgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJXaGVyZSdzIHRoZSBgQ09ORklHX05URlNfUldgIGZsYWc/IERpZCB0aGV5IGdldCByaWQgb2YgaXQsIG9yIGlzIGl0IGFsd2F5cyBlbmFibGVkIG5vdz9cIiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHdyaXRlIHN1cHBvcnQgaXMgc3RpbGwgcHJlc2VudC4gQSBxdWljayBzY2FuIG9mIGBmcy9udGZzL2Agd2lsbCBsaWtlbHkgcmV2ZWFsIHRoZSByZWxldmFudCB3cml0ZS1yZWxhdGVkIGZ1bmN0aW9ucy4gQWgsIHllcywgdGhlcmUgYXJlIG1vZGlmaWNhdGlvbnMgdG8gYG50ZnNfd3JpdGVfaW5vZGVgLCBgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzYCwgYG50ZnNfYXR0cl9tYWtlX25vbl9yZXNpZGVudGAsIGFuZCBzbyBvbi4gR29vZCwgd3JpdGUgc3VwcG9ydCBpcyBkZWZpbml0ZWx5IHByZXNlbnQuXG5cbk5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgYENPTkZJR19OVEZTX0ZTYCBpcyBlbmFibGVkLCBhbmQgbWF5YmUgYENPTkZJR19OVEZTX0RFQlVHYCBqdXN0IGluIGNhc2UuXG5cbkFscmlnaHQsIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gY2VudGVyIGFyb3VuZCB0aGUgbmV3IGxvY2tpbmcgbWVjaGFuaXNtcy4gSSBzZWUgdGhlIGludHJvZHVjdGlvbiBvZiBgbnRmc19hdHRyX2xpc3RfbG9ja2AsIGBudGZzX2F0dHJfbGlzdF91bmxvY2tgLCBgbnRmc19hdHRyX2xvY2tfc2VhcmNoX2N0eGAsIGFuZCBgbnRmc19hdHRyX3VubG9ja19zZWFyY2hfY3R4YC4gVGhpcyBpcyBhIGNsZWFyIGluZGljYXRvciB0aGF0IGF0dHJpYnV0ZSBsaXN0IGFjY2VzcyBpcyBiZWNvbWluZyBtb3JlIHRpZ2h0bHkgY29udHJvbGxlZC5cblxuSSBuZWVkIHRvIGZvY3VzIG9uIHRoaXMgbmV3IGxvY2tpbmcgc2NoZW1lLiBUbyBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBpbXBsaWNhdGlvbnMsIEknbGwgbGlzdCBzb21lIG9mIHRoZSBpbXBhY3RlZCBmdW5jdGlvbnM6IGBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHhgLCBgbnRmc19hdHRyX3B1dF9zZWFyY2hfY3R4YCwgYG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdGAsIGBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNgLCBgbnRmc19pbm9kZV9hdHRhY2hfYWxsX2V4dGVudHNgLCBgbnRmc19pbm9kZV9hZGRfYXR0cmxpc3RgLCBhbmQgYG50ZnNfaW5vZGVfZnJlZV9zcGFjZWAsIGFtb25nIG90aGVycy4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgYW5kIHZlcmlmeSB0aGF0IGl0IGRvZXNuJ3QgYnJlYWsgb3RoZXIgZmVhdHVyZXMsIGFzIHdlbGwgYXMgdGVzdCBpZiB0aGUgaW1wbGVtZW50YXRpb24gaXRzZWxmIGlzIHJvYnVzdC5cblxuTGV0J3MgcGljayBhIGZldyBvZiB0aGUgbW9yZSBjcml0aWNhbCBvbmVzIGZvciBmdXJ0aGVyIGluc3BlY3Rpb246IGBudGZzX2F0dHJfbGlzdF9sb2NrYCwgYG50ZnNfYXR0cl9saXN0X3VubG9ja2AsIGBudGZzX2F0dHJfbG9ja19zZWFyY2hfY3R4YCwgYG50ZnNfYXR0cl91bmxvY2tfc2VhcmNoX2N0eGAsIGBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHhgLCBgbnRmc19hdHRyX3B1dF9zZWFyY2hfY3R4YCwgYG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdGAsIGBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNgLCBgbnRmc19pbm9kZV9hZGRfYXR0cmxpc3RgLCBhbmQgYG50ZnNfaW5vZGVfZnJlZV9zcGFjZWAuXG5cbkZvciBjb25maWd1cmF0aW9uLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYE5URlNfRlNgIGlzIHNldC5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBhIHJlYWQtd3JpdGUgc2VtYXBob3JlLCBgYXR0cl9saXN0X2xvY2tgLCB0byBgc3RydWN0IG50ZnNfaW5vZGVgLiBUaGlzIHNlbWFwaG9yZSBpcyB1c2VkIHRvIHNlcmlhbGl6ZSBhdHRyaWJ1dGUgbGlzdCBwb2ludGVyIHVwZGF0ZXMgYW5kIGxvb2t1cHMgYWNyb3NzIHRoZSBOVEZTIGRyaXZlci4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGFyY2hpdGVjdHVyYWwgY2hhbmdlIHRvIGhvdyBOVEZTIGhhbmRsZXMgbG9ja2luZywgYWZmZWN0aW5nIGNvcmUgb3BlcmF0aW9ucyBsaWtlIGF0dHJpYnV0ZSBsb29rdXAsIG1hcHBpbmcgdXBkYXRlcywgYW5kIGV4dGVudCBhdHRhY2htZW50LiBUaGlzIG1lYW5zIGl0IGlzIHZlcnkgaW1wb3J0YW50IHRvIGRvIHJpZ29yb3VzIGZ1enppbmcgdG8gbG9vayBmb3IgZGVhZGxvY2tzIG9yIHJhY2UgY29uZGl0aW9ucy4gSSdsbCBuZWVkIHRvIGRldmVsb3Agc3BlY2lmaWMgZnV6emluZyB0YXJnZXRzIGFpbWVkIGF0IGV4ZXJjaXNpbmcgdGhlc2UgbmV3IGxvY2tpbmcgcHJpbWl0aXZlcyB1bmRlciBjb25jdXJyZW50IHdvcmtsb2Fkcy4gVGhpcyBjaGFuZ2UgbmVlZHMgdG8gYmUgdmFsaWRhdGVkIHZlcnkgdGhvcm91Z2hseS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg0MzMsIk91dHB1dFRva2VucyI6MjUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTY6MjMuNTAyMjkzMDEyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEwMjU4MzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnRmc19hdHRyX2xpc3RfbG9ja1wiLFxuICAgIFwibnRmc19hdHRyX2xpc3RfdW5sb2NrXCIsXG4gICAgXCJudGZzX2F0dHJfbG9ja19zZWFyY2hfY3R4XCIsXG4gICAgXCJudGZzX2F0dHJfdW5sb2NrX3NlYXJjaF9jdHhcIixcbiAgICBcIm50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eFwiLFxuICAgIFwibnRmc19hdHRyX3B1dF9zZWFyY2hfY3R4XCIsXG4gICAgXCJudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3RcIixcbiAgICBcIm50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlyc1wiLFxuICAgIFwibnRmc19pbm9kZV9hZGRfYXR0cmxpc3RcIixcbiAgICBcIm50ZnNfaW5vZGVfZnJlZV9zcGFjZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgcmVhZC13cml0ZSBzZW1hcGhvcmUgKGBhdHRyX2xpc3RfbG9ja2ApIHRvIGBzdHJ1Y3QgbnRmc19pbm9kZWAgYW5kIHVzZXMgaXQgdG8gc2VyaWFsaXplIGF0dHJpYnV0ZSBsaXN0IHBvaW50ZXIgdXBkYXRlcyB3aXRoIGxvb2t1cHMgYWNyb3NzIHRoZSBOVEZTIGRyaXZlci4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBsb2NraW5nIHNjaGVtZSBvZiB0aGUgTlRGUyBmaWxlc3lzdGVtLCBhZmZlY3RpbmcgbWFueSBjb3JlIG9wZXJhdGlvbnMgbGlrZSBhdHRyaWJ1dGUgbG9va3VwLCBtYXBwaW5nIHBhaXJzIHVwZGF0ZXMsIGFuZCBleHRlbnQgYXR0YWNobWVudC4gRnV6emluZyBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBuZXcgbG9ja2luZyBkb2Vzbid0IGludHJvZHVjZSBkZWFkbG9ja3Mgb3IgcmFjZSBjb25kaXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5URlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJudGZzX2F0dHJfbGlzdF9sb2NrXCIsXG4gICAgXCJudGZzX2F0dHJfbGlzdF91bmxvY2tcIixcbiAgICBcIm50ZnNfYXR0cl9sb2NrX3NlYXJjaF9jdHhcIixcbiAgICBcIm50ZnNfYXR0cl91bmxvY2tfc2VhcmNoX2N0eFwiLFxuICAgIFwibnRmc19hdHRyX2dldF9zZWFyY2hfY3R4XCIsXG4gICAgXCJudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHhcIixcbiAgICBcIm50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdFwiLFxuICAgIFwibnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzXCIsXG4gICAgXCJudGZzX2lub2RlX2FkZF9hdHRybGlzdFwiLFxuICAgIFwibnRmc19pbm9kZV9mcmVlX3NwYWNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyByZWFkLXdyaXRlIHNlbWFwaG9yZSAoYGF0dHJfbGlzdF9sb2NrYCkgdG8gYHN0cnVjdCBudGZzX2lub2RlYCBhbmQgdXNlcyBpdCB0byBzZXJpYWxpemUgYXR0cmlidXRlIGxpc3QgcG9pbnRlciB1cGRhdGVzIHdpdGggbG9va3VwcyBhY3Jvc3MgdGhlIE5URlMgZHJpdmVyLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGxvY2tpbmcgc2NoZW1lIG9mIHRoZSBOVEZTIGZpbGVzeXN0ZW0sIGFmZmVjdGluZyBtYW55IGNvcmUgb3BlcmF0aW9ucyBsaWtlIGF0dHJpYnV0ZSBsb29rdXAsIG1hcHBpbmcgcGFpcnMgdXBkYXRlcywgYW5kIGV4dGVudCBhdHRhY2htZW50LiBGdXp6aW5nIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIG5ldyBsb2NraW5nIGRvZXNuJ3QgaW50cm9kdWNlIGRlYWRsb2NrcyBvciByYWNlIGNvbmRpdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}