Name: series-workflowdzb62 Phase: Succeeded StartedAt: 2026-07-15 15:40:20 +0000 UTC FinishedAt: 2026-07-15 20:49:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzb62[0] Phase: Succeeded StartedAt: 2026-07-15 15:40:20 +0000 UTC FinishedAt: 2026-07-15 16:09:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzb62[0].run-triage Phase: Succeeded StartedAt: 2026-07-15 15:40:20 +0000 UTC FinishedAt: 2026-07-15 16:09:35 +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": "58717b2a1365d06c8c64b72aa948541b53fe31eb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EROFS_FS", "OVERLAY_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "58717b2a1365d06c8c64b72aa948541b53fe31eb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EROFS_FS", "OVERLAY_FS" ], "series_id": "fbf79ea3-3496-493e-8366-7cd78f0c8229" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "metafs_get_root", "metafs_create_root", "metafs_root_lookup", "metafs_mount_lookup", "metafs_options_lookup", "metafs_option_values_lookup", "metafs_get_option_values", "metafs_get_link", "metafs_readlink", "mnt_show_options", "sb_add_option", "sb_add_option_path", "ovl_get_options", "erofs_get_options" ], "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+CgkJCTx0ZD4yMDI2LzA3LzE1IDE2OjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VST0ZTX0ZTJiMzNDssCiAgICAmIzM0O09WRVJMQVlfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZXRhZnNfZ2V0X3Jvb3QmIzM0OywKICAgICYjMzQ7bWV0YWZzX2NyZWF0ZV9yb290JiMzNDssCiAgICAmIzM0O21ldGFmc19yb290X2xvb2t1cCYjMzQ7LAogICAgJiMzNDttZXRhZnNfbW91bnRfbG9va3VwJiMzNDssCiAgICAmIzM0O21ldGFmc19vcHRpb25zX2xvb2t1cCYjMzQ7LAogICAgJiMzNDttZXRhZnNfb3B0aW9uX3ZhbHVlc19sb29rdXAmIzM0OywKICAgICYjMzQ7bWV0YWZzX2dldF9vcHRpb25fdmFsdWVzJiMzNDssCiAgICAmIzM0O21ldGFmc19nZXRfbGluayYjMzQ7LAogICAgJiMzNDttZXRhZnNfcmVhZGxpbmsmIzM0OywKICAgICYjMzQ7bW50X3Nob3dfb3B0aW9ucyYjMzQ7LAogICAgJiMzNDtzYl9hZGRfb3B0aW9uJiMzNDssCiAgICAmIzM0O3NiX2FkZF9vcHRpb25fcGF0aCYjMzQ7LAogICAgJiMzNDtvdmxfZ2V0X29wdGlvbnMmIzM0OywKICAgICYjMzQ7ZXJvZnNfZ2V0X29wdGlvbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyB2aXJ0dWFsIGZpbGVzeXN0ZW0gYG1ldGFmc2AgdGhhdCBleHBvc2VzIG1ldGFkYXRhIGFib3V0IGZpbGVzIGFuZCBmaWxlc3lzdGVtcyB2aWEgdGhlIGBPX0FMVGAgZmxhZy4gSXQgYWxzbyBpbnRyb2R1Y2VzIGEgbmV3IGBnZXRfb3B0aW9uc2Agc3VwZXIgb3BlcmF0aW9uLCBpbXBsZW1lbnRlZCBieSBgZXJvZnNgIGFuZCBgb3ZlcmxheWZzYC4gVGhlc2UgYXJlIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgVkZTIGFuZCBzcGVjaWZpYyBmaWxlc3lzdGVtcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMTY6MDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3OGM4ZDllOTM0Y2U4YTliYzFhZTBjOTk0ZjQ2Mzg1NGJkMmY5ODExXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMTUgMTY6MDg6MjIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0XG5pbmRleCA3Yzc1MzE0OGFmODg4My4uM2RjNDMxYjZjZGJiMGIgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxuQEAgLTMxNCw3ICYjNDM7MzE0LDcgQEAgb3IgYm90dG9tIGhhbGYpLlxuIGBgc2hvd19kZXZuYW1lYGBcbiBcdE9wdGlvbmFsLiBDYWxsZWQgYnkgdGhlIFZGUyB0byBzaG93IGRldmljZSBuYW1lIGZvclxuIFx0L3Byb2MvXHUwMDNjcGlkXHUwMDNlL3ttb3VudHMsbW91bnRpbmZvLG1vdW50c3RhdHN9LiBJZiBub3QgcHJvdmlkZWQgdGhlblxuLVx0JiMzOTsoc3RydWN0IG1vdW50KS5tbnRfZGV2bmFtZSYjMzk7IHdpbGwgYmUgdXNlZC5cbiYjNDM7XHQmIzM5OyhzdHJ1Y3Qgc3VwZXJfYmxvY2spLnNfZGV2bmFtZSYjMzk7IHdpbGwgYmUgdXNlZC5cbiBcbiBgYHNob3dfcGF0aGBgXG4gXHRPcHRpb25hbC4gQ2FsbGVkIGJ5IHRoZSBWRlMgKGZvciAvcHJvYy9cdTAwM2NwaWRcdTAwM2UvbW91bnRpbmZvKSB0byBzaG93XG5kaWZmIC0tZ2l0IGEvZnMvTWFrZWZpbGUgYi9mcy9NYWtlZmlsZVxuaW5kZXggODlhOGE5ZDIwN2QxYzUuLjg3YTRjMjNkNWEwOGRlIDEwMDY0NFxuLS0tIGEvZnMvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL01ha2VmaWxlXG5AQCAtNTgsNiAmIzQzOzU4LDggQEAgb2JqLSQoQ09ORklHX0NPTkZJR0ZTX0ZTKVx0JiM0Mzs9IGNvbmZpZ2ZzL1xuIG9iai15XHRcdFx0XHQmIzQzOz0gZGV2cHRzL1xuIFxuIG9iai0kKENPTkZJR19ETE0pXHRcdCYjNDM7PSBkbG0vXG4mIzQzO1xuJiM0MztvYmoteVx0XHRcdFx0JiM0Mzs9IG1ldGFmcy9cbiAgXG4gIyBEbyBub3QgYWRkIGFueSBmaWxlc3lzdGVtcyBiZWZvcmUgdGhpcyBsaW5lXG4gb2JqLSQoQ09ORklHX05FVEZTX1NVUFBPUlQpXHQmIzQzOz0gbmV0ZnMvXG5kaWZmIC0tZ2l0IGEvZnMvZXJvZnMvc3VwZXIuYyBiL2ZzL2Vyb2ZzL3N1cGVyLmNcbmluZGV4IDg2ZmE1YzZhMGM3MDg3Li4yNTc1MTdjMjhlMWQzOCAxMDA2NDRcbi0tLSBhL2ZzL2Vyb2ZzL3N1cGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Vyb2ZzL3N1cGVyLmNcbkBAIC0xMDI4LDI5ICYjNDM7MTAyOCwzNCBAQCBzdGF0aWMgaW50IGVyb2ZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBlcm9mc19zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBkZW50cnkgKnJvb3QpXG4mIzQzO3N0YXRpYyBpbnQgZXJvZnNfZ2V0X29wdGlvbnMoc3RydWN0IHNiX29wdF9jdHggKmN0eCwgc3RydWN0IGRlbnRyeSAqcm9vdClcbiB7XG4gXHRzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gRVJPRlNfU0Iocm9vdC1cdTAwM2VkX3NiKTtcbiBcdHN0cnVjdCBlcm9mc19tb3VudF9vcHRzICpvcHQgPSBcdTAwMjZzYmktXHUwMDNlb3B0O1xuIFxuJiM0MztcdGlmIChzYmktXHUwMDNlZGlmMC5maWxlKVxuJiM0MztcdFx0c2JfYWRkX29wdGlvbl9wYXRoKGN0eCwgXCYjMzQ7c291cmNlXCYjMzQ7LCBOVUxMLCBcdTAwMjZzYmktXHUwMDNlZGlmMC5maWxlLVx1MDAzZWZfcGF0aCk7XG4mIzQzO1xuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX1hBVFRSKSlcbi1cdFx0c2VxX3B1dHMoc2VxLCB0ZXN0X29wdChvcHQsIFhBVFRSX1VTRVIpID9cbi1cdFx0XHRcdFwmIzM0Oyx1c2VyX3hhdHRyXCYjMzQ7IDogXCYjMzQ7LG5vdXNlcl94YXR0clwmIzM0Oyk7XG4mIzQzO1x0XHRzYl9hZGRfb3B0aW9uKGN0eCwgdGVzdF9vcHQob3B0LCBYQVRUUl9VU0VSKSA/XG4mIzQzO1x0XHRcdCAgICAgIFwmIzM0O3VzZXJfeGF0dHJcJiMzNDsgOiBcJiMzNDtub3VzZXJfeGF0dHJcJiMzNDssIE5VTEwpO1xuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX1BPU0lYX0FDTCkpXG4tXHRcdHNlcV9wdXRzKHNlcSwgdGVzdF9vcHQob3B0LCBQT1NJWF9BQ0wpID8gXCYjMzQ7LGFjbFwmIzM0OyA6IFwmIzM0Oyxub2FjbFwmIzM0Oyk7XG4mIzQzO1x0XHRzYl9hZGRfb3B0aW9uKGN0eCwgdGVzdF9vcHQob3B0LCBQT1NJWF9BQ0wpID8gXCYjMzQ7YWNsXCYjMzQ7IDogXCYjMzQ7bm9hY2xcJiMzNDssIE5VTEwpO1xuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX1pJUCkpXG4tXHRcdHNlcV9wcmludGYoc2VxLCBcJiMzNDssY2FjaGVfc3RyYXRlZ3k9JXNcJiMzNDssXG4mIzQzO1x0XHRzYl9hZGRfb3B0aW9uKGN0eCwgXCYjMzQ7Y2FjaGVfc3RyYXRlZ3lcJiMzNDssXG4gXHRcdFx0ICBlcm9mc19wYXJhbV9jYWNoZV9zdHJhdGVneVtvcHQtXHUwMDNlY2FjaGVfc3RyYXRlZ3ldLm5hbWUpO1xuIFx0aWYgKHRlc3Rfb3B0KG9wdCwgREFYX0FMV0FZUykpXG4tXHRcdHNlcV9wdXRzKHNlcSwgXCYjMzQ7LGRheD1hbHdheXNcJiMzNDspO1xuJiM0MztcdFx0c2JfYWRkX29wdGlvbihjdHgsIFwmIzM0O2RheFwmIzM0OywgXCYjMzQ7YWx3YXlzXCYjMzQ7KTtcbiBcdGlmICh0ZXN0X29wdChvcHQsIERBWF9ORVZFUikpXG4tXHRcdHNlcV9wdXRzKHNlcSwgXCYjMzQ7LGRheD1uZXZlclwmIzM0Oyk7XG4mIzQzO1x0XHRzYl9hZGRfb3B0aW9uKGN0eCwgXCYjMzQ7ZGF4XCYjMzQ7LCBcJiMzNDtuZXZlclwmIzM0Oyk7XG4gXHRpZiAoZXJvZnNfaXNfZmlsZWlvX21vZGUoc2JpKSBcdTAwMjZcdTAwMjYgdGVzdF9vcHQob3B0LCBESVJFQ1RfSU8pKVxuLVx0XHRzZXFfcHV0cyhzZXEsIFwmIzM0OyxkaXJlY3Rpb1wmIzM0Oyk7XG4tXHRpZiAoc2JpLVx1MDAzZWRpZjAuZnNvZmYpXG4tXHRcdHNlcV9wcmludGYoc2VxLCBcJiMzNDssZnNvZmZzZXQ9JWxsdVwmIzM0Oywgc2JpLVx1MDAzZWRpZjAuZnNvZmYpO1xuJiM0MztcdFx0c2JfYWRkX29wdGlvbihjdHgsIFwmIzM0O2RpcmVjdGlvXCYjMzQ7LCBOVUxMKTtcbiYjNDM7XHRpZiAoc2JpLVx1MDAzZWRpZjAuZnNvZmYpIHtcbiYjNDM7XHRcdGNoYXIgKnZhbCBfX2ZyZWUoa2ZyZWUpID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsIFwmIzM0OyVsbHVcJiMzNDssIHNiaS1cdTAwM2VkaWYwLmZzb2ZmKTtcbiYjNDM7XHRcdHNiX2FkZF9vcHRpb24oY3R4LCBcJiMzNDtmc29mZnNldFwmIzM0OywgdmFsKTtcbiYjNDM7XHR9XG4gXHRpZiAodGVzdF9vcHQob3B0LCBJTk9ERV9TSEFSRSkpXG4tXHRcdHNlcV9wdXRzKHNlcSwgXCYjMzQ7LGlub2RlX3NoYXJlXCYjMzQ7KTtcbiYjNDM7XHRcdHNiX2FkZF9vcHRpb24oY3R4LCBcJiMzNDtpbm9kZV9zaGFyZVwmIzM0OywgTlVMTCk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTA2OSw3ICYjNDM7MTA3NCw3IEBAIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGVyb2ZzX3NvcHMgPSB7XG4gXHQuZnJlZV9pbm9kZSA9IGVyb2ZzX2ZyZWVfaW5vZGUsXG4gXHQuZXZpY3RfaW5vZGUgPSBlcm9mc19ldmljdF9pbm9kZSxcbiBcdC5zdGF0ZnMgPSBlcm9mc19zdGF0ZnMsXG4tXHQuc2hvd19vcHRpb25zID0gZXJvZnNfc2hvd19vcHRpb25zLFxuJiM0MztcdC5nZXRfb3B0aW9ucyA9IGVyb2ZzX2dldF9vcHRpb25zLFxuIH07XG4gXG4gbW9kdWxlX2luaXQoZXJvZnNfbW9kdWxlX2luaXQpO1xuZGlmZiAtLWdpdCBhL2ZzL2ZjbnRsLmMgYi9mcy9mY250bC5jXG5pbmRleCBjMTU4ZjA4MmYxZGE0Zi4uMDFiNzY1Y2ZhYzg0NzkgMTAwNjQ0XG4tLS0gYS9mcy9mY250bC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9mY250bC5jXG5AQCAtMTE2OSw3ICYjNDM7MTE2OSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGZjbnRsX2luaXQodm9pZClcbiBcdCAqIEV4Y2VwdGlvbnM6IE9fTk9OQkxPQ0sgaXMgYSB0d28gYml0IGRlZmluZSBvbiBwYXJpc2M7IE9fTkRFTEFZXG4gXHQgKiBpcyBkZWZpbmVkIGFzIE9fTk9OQkxPQ0sgb24gc29tZSBwbGF0Zm9ybXMgYW5kIG5vdCBvbiBvdGhlcnMuXG4gXHQgKi9cbi1cdEJVSUxEX0JVR19PTigyMiAtIDEgLyogZm9yIE9fUkRPTkxZIGJlaW5nIDAgKi8gIT1cbiYjNDM7XHRCVUlMRF9CVUdfT04oMjMgLSAxIC8qIGZvciBPX1JET05MWSBiZWluZyAwICovICE9XG4gXHRcdEhXRUlHSFQzMihcbiBcdFx0XHQoVkFMSURfT1BFTl9GTEFHUyBcdTAwMjYgfihPX05PTkJMT0NLIHwgT19OREVMQVkpKSB8XG4gXHRcdFx0X19GTU9ERV9FWEVDIHwgX19PX1JFR1VMQVIpKTtcbmRpZmYgLS1naXQgYS9mcy9pbnRlcm5hbC5oIGIvZnMvaW50ZXJuYWwuaFxuaW5kZXggMzU1ZDkzZjkyMjA4NjEuLmU3M2E1YzFkNWI0ZWUxIDEwMDY0NFxuLS0tIGEvZnMvaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaW50ZXJuYWwuaFxuQEAgLTk1LDYgJiM0Mzs5NSw3IEBAIGludCBwYXRoX3Vtb3VudChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IGZsYWdzKTtcbiBpbnQgcGF0aF9waXZvdF9yb290KHN0cnVjdCBwYXRoICpuZXcsIHN0cnVjdCBwYXRoICpvbGQpO1xuIFxuIGludCBzaG93X3BhdGgoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpyb290KTtcbiYjNDM7aW50IG1udF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCB2ZnNtb3VudCAqbW50KTtcbiBcbiAvKlxuICAqIGZzX3N0cnVjdC5jXG5kaWZmIC0tZ2l0IGEvZnMvbWV0YWZzL01ha2VmaWxlIGIvZnMvbWV0YWZzL01ha2VmaWxlXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmY4NTViNDhkOWMyYjkwXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9tZXRhZnMvTWFrZWZpbGVcbkBAIC0wLDAgJiM0MzsxLDYgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOyNcbiYjNDM7IyBNYWtlZmlsZSBmb3IgbWV0YSBmaWxlc3lzdGVtXG4mIzQzOyNcbiYjNDM7XG4mIzQzO29iai15IDo9IG1ldGFmcy5vXG5kaWZmIC0tZ2l0IGEvZnMvbWV0YWZzL21ldGFmcy5jIGIvZnMvbWV0YWZzL21ldGFmcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjE1ZWMwYjYwNjRkYTM4XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9tZXRhZnMvbWV0YWZzLmNcbkBAIC0wLDAgJiM0MzsxLDU3MiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKlxuJiM0MzsgKiBtZXRhZnMgLSB2aXJ0dWFsIGZpbGVzeXN0ZW0gZm9yIG1ldGFkYXRhIGFjY2Vzc1xuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIHByb3ZpZGVzIGEgd2F5IHRvIGFjY2VzcyBtZXRhZGF0YSBhYm91dCBmaWxlcyBhbmQgZmlsZXN5c3RlbXNcbiYjNDM7ICogdGhyb3VnaCBPX0FMVCBmaWxlIGRlc2NyaXB0b3JzLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21hZ2ljLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbW91bnQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9uYW1laS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kY2FjaGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wc2V1ZG9fZnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy9zdXBlci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O21ldGFmcy5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBtZXRhZnMgc3VwZXJibG9jayBhbmQgbW91bnRcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKm1ldGFmc19tbnQgX19yb19hZnRlcl9pbml0O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIG1ldGFmc19vcHMgPSB7XG4mIzQzO1x0LnN0YXRmc1x0XHQ9IHNpbXBsZV9zdGF0ZnMsXG4mIzQzO1x0LmRyb3BfaW5vZGVcdD0gaW5vZGVfanVzdF9kcm9wLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBtZXRhZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwc2V1ZG9fZnNfY29udGV4dCAqY3R4ID0gaW5pdF9wc2V1ZG8oZmMsIDB4NGQ0NTU0NDEpOyAvKiAmIzM5O01FVEEmIzM5OyAqL1xuJiM0MztcdGlmICghY3R4KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0Y3R4LVx1MDAzZW9wcyA9IFx1MDAyNm1ldGFmc19vcHM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBtZXRhZnNfdHlwZSA9IHtcbiYjNDM7XHQubmFtZSA9IFwmIzM0O21ldGFmc1wmIzM0OyxcbiYjNDM7XHQuaW5pdF9mc19jb250ZXh0ID0gbWV0YWZzX2luaXRfZnNfY29udGV4dCxcbiYjNDM7XHQua2lsbF9zYiA9IGtpbGxfYW5vbl9zdXBlcixcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIE1vdW50IG9wdGlvbiBjb2xsZWN0aW9uIHN0cnVjdHVyZXNcbiYjNDM7ICovXG4mIzQzO2VudW0gbWV0YWZzX2RlbnRyeV90eXBlIHtcbiYjNDM7XHRNRVRBRlNfUk9PVCxcbiYjNDM7XHRNRVRBRlNfT1BUSU9OX1ZBTFVFUyxcbiYjNDM7XHRNRVRBRlNfU1lNTElOSyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBtZXRhZnNfb3B0aW9uX2VudHJ5IHtcbiYjNDM7XHRjaGFyICp2YWx1ZTtcbiYjNDM7XHRzdHJ1Y3QgcGF0aCBwYXRoO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IG1ldGFmc19kZW50cnlfaW5mbyB7XG4mIzQzO1x0ZW51bSBtZXRhZnNfZGVudHJ5X3R5cGUgdHlwZTtcbiYjNDM7XHR1bmlvbiB7XG4mIzQzO1x0XHRzdHJ1Y3Qge1xuJiM0MztcdFx0XHRzdHJ1Y3QgZmlsZSAqYmFzZTtcbiYjNDM7XHRcdH0gcm9vdDtcbiYjNDM7XHRcdHN0cnVjdCB7XG4mIzQzO1x0XHRcdHN0cnVjdCBtZXRhZnNfb3B0aW9uX2VudHJ5ICplbnRyaWVzO1xuJiM0MztcdFx0XHRpbnQgY291bnQ7XG4mIzQzO1x0XHR9IG9wdF92YWx1ZXM7XG4mIzQzO1x0XHRzdHJ1Y3QgbWV0YWZzX29wdGlvbl9lbnRyeSBzeW1saW5rO1xuJiM0MztcdH07XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgbWV0YWZzX2NvbGxlY3RfY3R4IHtcbiYjNDM7XHRzdHJ1Y3Qgc2Jfb3B0X2N0eCBjdHg7XG4mIzQzO1x0Y29uc3QgY2hhciAqdGFyZ2V0X25hbWU7XG4mIzQzO1x0c3RydWN0IHN1cGVyX2Jsb2NrICpzYjtcbiYjNDM7XHRzdHJ1Y3QgbWV0YWZzX29wdGlvbl9lbnRyeSAqZW50cmllcztcbiYjNDM7XHRpbnQgY291bnQ7XG4mIzQzO1x0aW50IHNpemU7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XHRib29sIGlzX3NvdXJjZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIENvbGxlY3Qgc3BlY2lmaWMgbW91bnQgb3B0aW9uIHZhbHVlcyBmcm9tIHRoZSBiYXNlIGZpbGVzeXN0ZW1cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIG1ldGFmc19jb2xsZWN0X29wdGlvbihzdHJ1Y3Qgc2Jfb3B0X2N0eCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLFxuJiM0MztcdFx0XHRcdCAgY29uc3QgY2hhciAqdmFsdWUsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1ldGFmc19jb2xsZWN0X2N0eCAqY29sbGVjdF9jdHggPSBjdHgtXHUwMDNlZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgbWV0YWZzX29wdGlvbl9lbnRyeSAqZW50cnk7XG4mIzQzO1xuJiM0MztcdGlmIChzdHJjbXAobmFtZSwgY29sbGVjdF9jdHgtXHUwMDNldGFyZ2V0X25hbWUpICE9IDApXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmICghdmFsdWUgXHUwMDI2XHUwMDI2IGNvbGxlY3RfY3R4LVx1MDAzZWlzX3NvdXJjZSlcbiYjNDM7XHRcdHZhbHVlID0gY29sbGVjdF9jdHgtXHUwMDNlc2ItXHUwMDNlc19kZXZuYW1lO1xuJiM0MztcbiYjNDM7XHRpZiAoY29sbGVjdF9jdHgtXHUwMDNlY291bnQgXHUwMDNlPSBjb2xsZWN0X2N0eC1cdTAwM2VzaXplKSB7XG4mIzQzO1x0XHRpbnQgbmV3X3NpemUgPSBjb2xsZWN0X2N0eC1cdTAwM2VzaXplID8gY29sbGVjdF9jdHgtXHUwMDNlc2l6ZSAqIDIgOiA0O1xuJiM0MztcdFx0c3RydWN0IG1ldGFmc19vcHRpb25fZW50cnkgKm5ld19lbnRyaWVzO1xuJiM0MztcbiYjNDM7XHRcdG5ld19lbnRyaWVzID0ga3JlYWxsb2NfYXJyYXkoY29sbGVjdF9jdHgtXHUwMDNlZW50cmllcywgbmV3X3NpemUsIHNpemVvZigqbmV3X2VudHJpZXMpLFxuJiM0MztcdFx0XHRcdFx0ICAgICBHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdGlmICghbmV3X2VudHJpZXMpIHtcbiYjNDM7XHRcdFx0Y29sbGVjdF9jdHgtXHUwMDNlZXJyID0gLUVOT01FTTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0Y29sbGVjdF9jdHgtXHUwMDNlZW50cmllcyA9IG5ld19lbnRyaWVzO1xuJiM0MztcdFx0Y29sbGVjdF9jdHgtXHUwMDNlc2l6ZSA9IG5ld19zaXplO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZW50cnkgPSBcdTAwMjZjb2xsZWN0X2N0eC1cdTAwM2VlbnRyaWVzW2NvbGxlY3RfY3R4LVx1MDAzZWNvdW50XTtcbiYjNDM7XHRlbnRyeS1cdTAwM2V2YWx1ZSA9IHZhbHVlID8ga3N0cmR1cCh2YWx1ZSwgR0ZQX0tFUk5FTCkgOiBOVUxMO1xuJiM0MztcdGlmICghZW50cnktXHUwMDNldmFsdWUgXHUwMDI2XHUwMDI2IHZhbHVlKSB7XG4mIzQzO1x0XHRjb2xsZWN0X2N0eC1cdTAwM2VlcnIgPSAtRU5PTUVNO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAocGF0aCkge1xuJiM0MztcdFx0ZW50cnktXHUwMDNlcGF0aCA9ICpwYXRoO1xuJiM0MztcdFx0cGF0aF9nZXQoXHUwMDI2ZW50cnktXHUwMDNlcGF0aCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdG1lbXNldChcdTAwMjZlbnRyeS1cdTAwM2VwYXRoLCAwLCBzaXplb2YoZW50cnktXHUwMDNlcGF0aCkpO1xuJiM0MztcdH1cbiYjNDM7XHRjb2xsZWN0X2N0eC1cdTAwM2Vjb3VudCYjNDM7JiM0Mzs7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1ldGFmc19mcmVlX2VudHJpZXMoc3RydWN0IG1ldGFmc19vcHRpb25fZW50cnkgKmVudHJpZXMsIGludCBjb3VudClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb3VudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGtmcmVlKGVudHJpZXNbaV0udmFsdWUpO1xuJiM0MztcdFx0aWYgKGVudHJpZXNbaV0ucGF0aC5tbnQpXG4mIzQzO1x0XHRcdHBhdGhfcHV0KFx1MDAyNmVudHJpZXNbaV0ucGF0aCk7XG4mIzQzO1x0fVxuJiM0MztcdGtmcmVlKGVudHJpZXMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG1ldGFmc19nZXRfb3B0aW9uX3ZhbHVlcyhzdHJ1Y3QgZmlsZSAqYmFzZSwgY29uc3QgY2hhciAqb3B0aW9uX25hbWUsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBtZXRhZnNfb3B0aW9uX2VudHJ5ICoqZW50cmllc19vdXQsXG4mIzQzO1x0XHRcdFx0ICAgIGludCAqY291bnRfb3V0KVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHBhdGggKnBhdGggPSBcdTAwMjZiYXNlLVx1MDAzZWZfcGF0aDtcbiYjNDM7XHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gcGF0aC1cdTAwM2VtbnQtXHUwMDNlbW50X3NiO1xuJiM0MztcdHN0cnVjdCBtZXRhZnNfY29sbGVjdF9jdHggY29sbGVjdF9jdHggPSB7XG4mIzQzO1x0XHQuY3R4LmRhdGEgPSBcdTAwMjZjb2xsZWN0X2N0eCxcbiYjNDM7XHRcdC5jdHguYWN0b3IgPSBtZXRhZnNfY29sbGVjdF9vcHRpb24sXG4mIzQzO1x0XHQudGFyZ2V0X25hbWUgPSBvcHRpb25fbmFtZSxcbiYjNDM7XHRcdC5zYiA9IHNiLFxuJiM0MztcdFx0LmlzX3NvdXJjZSA9ICFzdHJjbXAob3B0aW9uX25hbWUsIFwmIzM0O3NvdXJjZVwmIzM0OyksXG4mIzQzO1x0fTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoc2ItXHUwMDNlc19vcC1cdTAwM2VnZXRfb3B0aW9ucykge1xuJiM0MztcdFx0cmV0ID0gc2ItXHUwMDNlc19vcC1cdTAwM2VnZXRfb3B0aW9ucyhcdTAwMjZjb2xsZWN0X2N0eC5jdHgsIHBhdGgtXHUwMDNlbW50LVx1MDAzZW1udF9yb290KTtcbiYjNDM7XHRcdGlmIChyZXQgfHwgY29sbGVjdF9jdHguZXJyKSB7XG4mIzQzO1x0XHRcdG1ldGFmc19mcmVlX2VudHJpZXMoY29sbGVjdF9jdHguZW50cmllcywgY29sbGVjdF9jdHguY291bnQpO1xuJiM0MztcdFx0XHRyZXR1cm4gcmV0ID86IGNvbGxlY3RfY3R4LmVycjtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIHNwZWNpYWwgY2FzZTogYWRkIFwmIzM0O3NvdXJjZVwmIzM0OyBvcHRpb24gaWYgZmlsZXN5c3RlbSBkaWRuJiMzOTt0IGFkZCBvbmUqL1xuJiM0MztcdGlmICghY29sbGVjdF9jdHguY291bnQgXHUwMDI2XHUwMDI2IGNvbGxlY3RfY3R4LmlzX3NvdXJjZSkge1xuJiM0MztcdFx0c3RydWN0IG1ldGFmc19vcHRpb25fZW50cnkgKmVudCBfX2ZyZWUoa2ZyZWUpID0ga3phbGxvY19vYmooKmVudCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFlbnQpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRcdGVudC1cdTAwM2V2YWx1ZSA9IGtzdHJkdXAoc2ItXHUwMDNlc19kZXZuYW1lLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdGlmICghZW50LVx1MDAzZXZhbHVlKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0XHRjb2xsZWN0X2N0eC5lbnRyaWVzID0gbm9fZnJlZV9wdHIoZW50KTtcbiYjNDM7XHRcdGNvbGxlY3RfY3R4LmNvdW50ID0gMTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdCplbnRyaWVzX291dCA9IGNvbGxlY3RfY3R4LmVudHJpZXM7XG4mIzQzO1x0KmNvdW50X291dCA9IGNvbGxlY3RfY3R4LmNvdW50O1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBtZXRhZnMgc3ltbGluayBvcGVyYXRpb25zXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciAqbWV0YWZzX2dldF9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgZGVsYXllZF9jYWxsICpkb25lKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1ldGFmc19kZW50cnlfaW5mbyAqaW5mbztcbiYjNDM7XG4mIzQzO1x0aWYgKCFkZW50cnkpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRUNISUxEKTtcbiYjNDM7XG4mIzQzO1x0aW5mbyA9IGRlbnRyeS1cdTAwM2VkX2ZzZGF0YTtcbiYjNDM7XHRpZiAoaW5mby1cdTAwM2VzeW1saW5rLnBhdGgubW50KSB7XG4mIzQzO1x0XHRpbnQgZXJyb3I7XG4mIzQzO1xuJiM0MztcdFx0cGF0aF9nZXQoXHUwMDI2aW5mby1cdTAwM2VzeW1saW5rLnBhdGgpO1xuJiM0MztcdFx0ZXJyb3IgPSBuZF9qdW1wX2xpbmsoXHUwMDI2aW5mby1cdTAwM2VzeW1saW5rLnBhdGgpO1xuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoZXJyb3IpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIEVSUl9QVFIoLUVMT09QKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBtZXRhZnNfcmVhZGxpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuJiM0MztcdFx0XHQgICBpbnQgYnVmbGVuKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1ldGFmc19kZW50cnlfaW5mbyAqaW5mbyA9IGRlbnRyeS1cdTAwM2VkX2ZzZGF0YTtcbiYjNDM7XHRjb25zdCBjaGFyICp2YWx1ZSA9IGluZm8tXHUwMDNlc3ltbGluay52YWx1ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKCF2YWx1ZSlcbiYjNDM7XHRcdHZhbHVlID0gXCYjMzQ7XCYjMzQ7O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmVhZGxpbmtfY29weShidWZmZXIsIGJ1ZmxlbiwgdmFsdWUsIHN0cmxlbih2YWx1ZSkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWV0YWZzX3N5bWxpbmtfaW9wcyA9IHtcbiYjNDM7XHQuZ2V0X2xpbmtcdD0gbWV0YWZzX2dldF9saW5rLFxuJiM0MztcdC5yZWFkbGlua1x0PSBtZXRhZnNfcmVhZGxpbmssXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBEZW50cnkgb3BlcmF0aW9ucyAtIGNsZWFudXBcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIG1ldGFmc19kX3JlbGVhc2Uoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1ldGFmc19kZW50cnlfaW5mbyAqaW5mbyA9IGRlbnRyeS1cdTAwM2VkX2ZzZGF0YTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFpbmZvKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGluZm8tXHUwMDNldHlwZSkge1xuJiM0MztcdGNhc2UgTUVUQUZTX1JPT1Q6XG4mIzQzO1x0XHRmcHV0KGluZm8tXHUwMDNlcm9vdC5iYXNlKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTUVUQUZTX09QVElPTl9WQUxVRVM6XG4mIzQzO1x0XHRtZXRhZnNfZnJlZV9lbnRyaWVzKGluZm8tXHUwMDNlb3B0X3ZhbHVlcy5lbnRyaWVzLFxuJiM0MztcdFx0XHRcdCAgICBpbmZvLVx1MDAzZW9wdF92YWx1ZXMuY291bnQpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBNRVRBRlNfU1lNTElOSzpcbiYjNDM7XHRcdGtmcmVlKGluZm8tXHUwMDNlc3ltbGluay52YWx1ZSk7XG4mIzQzO1x0XHRpZiAoaW5mby1cdTAwM2VzeW1saW5rLnBhdGgubW50KVxuJiM0MztcdFx0XHRwYXRoX3B1dChcdTAwMjZpbmZvLVx1MDAzZXN5bWxpbmsucGF0aCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0V0FSTl9PTigxKTtcbiYjNDM7XHR9XG4mIzQzO1x0a2ZyZWUoaW5mbyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgbWV0YWZzX2RlbnRyeV9vcHMgPSB7XG4mIzQzO1x0LmRfcmVsZWFzZSA9IG1ldGFmc19kX3JlbGVhc2UsXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBtZXRhZnMgZGlyZWN0b3J5IG9wZXJhdGlvbnMgLSBmb3J3YXJkIGRlY2xhcmF0aW9uc1xuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHN0cnVjdCBmaWxlICptZXRhZnNfZ2V0X2Jhc2VfZmlsZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuJiM0MztzdGF0aWMgc3RydWN0IGRlbnRyeSAqbWV0YWZzX3Jvb3RfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4mIzQzO1x0XHRcdFx0XHQgdW5zaWduZWQgaW50IGZsYWdzKTtcbiYjNDM7c3RhdGljIHN0cnVjdCBkZW50cnkgKm1ldGFmc19tb3VudF9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiYjNDM7XHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IGZsYWdzKTtcbiYjNDM7c3RhdGljIHN0cnVjdCBkZW50cnkgKm1ldGFmc19vcHRpb25zX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuJiM0MztcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBmbGFncyk7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICptZXRhZnNfb3B0aW9uX3ZhbHVlc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiYjNDM7XHRcdFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1ldGFmc19yb290X2Rpcl9pb3BzID0ge1xuJiM0MztcdC5sb29rdXBcdFx0PSBtZXRhZnNfcm9vdF9sb29rdXAsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWV0YWZzX21vdW50X2Rpcl9pb3BzID0ge1xuJiM0MztcdC5sb29rdXBcdFx0PSBtZXRhZnNfbW91bnRfbG9va3VwLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1ldGFmc19vcHRpb25zX2Rpcl9pb3BzID0ge1xuJiM0MztcdC5sb29rdXBcdFx0PSBtZXRhZnNfb3B0aW9uc19sb29rdXAsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWV0YWZzX29wdGlvbl92YWx1ZXNfZGlyX2lvcHMgPSB7XG4mIzQzO1x0Lmxvb2t1cFx0XHQ9IG1ldGFmc19vcHRpb25fdmFsdWVzX2xvb2t1cCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIENyZWF0ZSBhIG5ldyBpbm9kZSBpbiBtZXRhZnNcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgaW5vZGUgKm1ldGFmc19nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW1vZGVfdCBtb2RlLFxuJiM0MztcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zICppb3BzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZSA9IG5ld19pbm9kZShzYik7XG4mIzQzO1xuJiM0MztcdGlmICghaW5vZGUpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0aW5vZGUtXHUwMDNlaV9pbm8gPSBnZXRfbmV4dF9pbm8oKTtcbiYjNDM7XHRpbm9kZS1cdTAwM2VpX21vZGUgPSBtb2RlO1xuJiM0MztcdHNpbXBsZV9pbm9kZV9pbml0X3RzKGlub2RlKTtcbiYjNDM7XG4mIzQzO1x0aWYgKFNfSVNESVIobW9kZSkpIHtcbiYjNDM7XHRcdGlub2RlLVx1MDAzZWlfb3AgPSBpb3BzO1xuJiM0MztcdFx0aW5jX25saW5rKGlub2RlKTtcbiYjNDM7XHR9IGVsc2UgaWYgKFNfSVNMTksobW9kZSkpIHtcbiYjNDM7XHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZtZXRhZnNfc3ltbGlua19pb3BzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGlub2RlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBMb29rdXAgaW4gcm9vdCBkaXJlY3RvcnkgKC8pXG4mIzQzOyAqIE9ubHkgXCYjMzQ7bW91bnRcJiMzNDsgaXMgdmFsaWQgaGVyZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHN0cnVjdCBkZW50cnkgKm1ldGFmc19yb290X2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuJiM0MztcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBmbGFncylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IGNoYXIgKm5hbWUgPSBkZW50cnktXHUwMDNlZF9uYW1lLm5hbWU7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHN0cmNtcChuYW1lLCBcJiMzNDttb3VudFwmIzM0OykgIT0gMClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuJiM0MztcbiYjNDM7XHRpbm9kZSA9IG1ldGFmc19nZXRfaW5vZGUoZGlyLVx1MDAzZWlfc2IsIFNfSUZESVIgfCAwNTU1LCBcdTAwMjZtZXRhZnNfbW91bnRfZGlyX2lvcHMpO1xuJiM0MztcdGlmICghaW5vZGUpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiYjNDM7XG4mIzQzO1x0ZF9hZGQoZGVudHJ5LCBpbm9kZSk7XG4mIzQzO1x0ZF9tYXJrX2RvbnRjYWNoZShpbm9kZSk7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIExvb2t1cCBpbiAvbW91bnQgZGlyZWN0b3J5XG4mIzQzOyAqIE9ubHkgXCYjMzQ7b3B0aW9uc1wmIzM0OyBpcyB2YWxpZCBoZXJlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgc3RydWN0IGRlbnRyeSAqbWV0YWZzX21vdW50X2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuJiM0MztcdFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBjaGFyICpuYW1lID0gZGVudHJ5LVx1MDAzZWRfbmFtZS5uYW1lO1xuJiM0MztcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4mIzQzO1xuJiM0MztcdGlmIChzdHJjbXAobmFtZSwgXCYjMzQ7b3B0aW9uc1wmIzM0OykgIT0gMClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuJiM0MztcbiYjNDM7XHRpbm9kZSA9IG1ldGFmc19nZXRfaW5vZGUoZGlyLVx1MDAzZWlfc2IsIFNfSUZESVIgfCAwNTU1LCBcdTAwMjZtZXRhZnNfb3B0aW9uc19kaXJfaW9wcyk7XG4mIzQzO1x0aWYgKCFpbm9kZSlcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcbiYjNDM7XHRkX2FkZChkZW50cnksIGlub2RlKTtcbiYjNDM7XHRkX21hcmtfZG9udGNhY2hlKGlub2RlKTtcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogTG9va3VwIGluIC9tb3VudC9vcHRpb25zIGRpcmVjdG9yeVxuJiM0MzsgKiBDb2xsZWN0IHZhbHVlcyBmb3IgdGhlIHJlcXVlc3RlZCBvcHRpb24gbmFtZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHN0cnVjdCBkZW50cnkgKm1ldGFmc19vcHRpb25zX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuJiM0MztcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBmbGFncylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IGNoYXIgKnRhcmdldF9uYW1lID0gZGVudHJ5LVx1MDAzZWRfbmFtZS5uYW1lO1xuJiM0MztcdHN0cnVjdCBmaWxlICpiYXNlO1xuJiM0MztcdHN0cnVjdCBtZXRhZnNfZGVudHJ5X2luZm8gKmluZm87XG4mIzQzO1x0c3RydWN0IG1ldGFmc19vcHRpb25fZW50cnkgKmVudHJpZXMgPSBOVUxMO1xuJiM0MztcdGludCBjb3VudCA9IDA7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRiYXNlID0gbWV0YWZzX2dldF9iYXNlX2ZpbGUoZGVudHJ5LVx1MDAzZWRfcGFyZW50KTtcbiYjNDM7XHRpZiAoIWJhc2UpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gbWV0YWZzX2dldF9vcHRpb25fdmFsdWVzKGJhc2UsIHRhcmdldF9uYW1lLCBcdTAwMjZlbnRyaWVzLCBcdTAwMjZjb3VudCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4mIzQzO1xuJiM0MztcdGlmIChjb3VudCA9PSAwKSB7XG4mIzQzO1x0XHRrZnJlZShlbnRyaWVzKTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFpbmZvKSB7XG4mIzQzO1x0XHRtZXRhZnNfZnJlZV9lbnRyaWVzKGVudHJpZXMsIGNvdW50KTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aW5mby1cdTAwM2V0eXBlID0gTUVUQUZTX09QVElPTl9WQUxVRVM7XG4mIzQzO1x0aW5mby1cdTAwM2VvcHRfdmFsdWVzLmVudHJpZXMgPSBlbnRyaWVzO1xuJiM0MztcdGluZm8tXHUwMDNlb3B0X3ZhbHVlcy5jb3VudCA9IGNvdW50O1xuJiM0MztcbiYjNDM7XHRpbm9kZSA9IG1ldGFmc19nZXRfaW5vZGUoZGlyLVx1MDAzZWlfc2IsIFNfSUZESVIgfCAwNTU1LCBcdTAwMjZtZXRhZnNfb3B0aW9uX3ZhbHVlc19kaXJfaW9wcyk7XG4mIzQzO1x0aWYgKCFpbm9kZSkge1xuJiM0MztcdFx0bWV0YWZzX2ZyZWVfZW50cmllcyhlbnRyaWVzLCBjb3VudCk7XG4mIzQzO1x0XHRrZnJlZShpbmZvKTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZGVudHJ5LVx1MDAzZWRfZnNkYXRhID0gaW5mbztcbiYjNDM7XHRkX2FkZChkZW50cnksIGlub2RlKTtcbiYjNDM7XHRkX21hcmtfZG9udGNhY2hlKGlub2RlKTtcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogTG9va3VwIGluIG9wdGlvbi1zcGVjaWZpYyBkaXJlY3RvcnkgKGUuZy4sIC9tb3VudC9vcHRpb25zL2xvd2VyZGlyLylcbiYjNDM7ICogUmV0dXJuIG51bWJlcmVkIGVudHJpZXMgKDAsIDEsIDIsIC4uLikgYXMgc3ltbGlua3NcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICptZXRhZnNfb3B0aW9uX3ZhbHVlc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdFx0XHRcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuJiM0MztcdFx0XHRcdFx0XHQgIHVuc2lnbmVkIGludCBmbGFncylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IGNoYXIgKnRhcmdldF9uYW1lID0gZGVudHJ5LVx1MDAzZWRfbmFtZS5uYW1lO1xuJiM0MztcdHN0cnVjdCBtZXRhZnNfZGVudHJ5X2luZm8gKnBhcmVudF9pbmZvLCAqaW5mbztcbiYjNDM7XHRzdHJ1Y3QgbWV0YWZzX29wdGlvbl9lbnRyeSAqZW50cnk7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGluZGV4O1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdHBhcmVudF9pbmZvID0gZGVudHJ5LVx1MDAzZWRfcGFyZW50LVx1MDAzZWRfZnNkYXRhO1xuJiM0MztcdGlmIChXQVJOX09OKCFwYXJlbnRfaW5mbyB8fCBwYXJlbnRfaW5mby1cdTAwM2V0eXBlICE9IE1FVEFGU19PUFRJT05fVkFMVUVTKSlcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuJiM0MztcbiYjNDM7XHRpZiAodGFyZ2V0X25hbWVbMF0gPT0gJiMzOTswJiMzOTsgXHUwMDI2XHUwMDI2IHRhcmdldF9uYW1lWzFdKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGtzdHJ0b3VsKHRhcmdldF9uYW1lLCAxMCwgXHUwMDI2aW5kZXgpO1xuJiM0MztcdGlmIChlcnIgfHwgaW5kZXggXHUwMDNlPSBwYXJlbnRfaW5mby1cdTAwM2VvcHRfdmFsdWVzLmNvdW50KVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XG4mIzQzO1xuJiM0MztcdGVudHJ5ID0gXHUwMDI2cGFyZW50X2luZm8tXHUwMDNlb3B0X3ZhbHVlcy5lbnRyaWVzW2luZGV4XTtcbiYjNDM7XG4mIzQzO1x0aW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFpbmZvKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1xuJiM0MztcdGluZm8tXHUwMDNldHlwZSA9IE1FVEFGU19TWU1MSU5LO1xuJiM0MztcdGlmIChlbnRyeS1cdTAwM2V2YWx1ZSkge1xuJiM0MztcdFx0aW5mby1cdTAwM2VzeW1saW5rLnZhbHVlID0ga3N0cmR1cChlbnRyeS1cdTAwM2V2YWx1ZSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHRpZiAoIWluZm8tXHUwMDNlc3ltbGluay52YWx1ZSkge1xuJiM0MztcdFx0XHRrZnJlZShpbmZvKTtcbiYjNDM7XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdGlmIChlbnRyeS1cdTAwM2VwYXRoLm1udCkge1xuJiM0MztcdFx0aW5mby1cdTAwM2VzeW1saW5rLnBhdGggPSBlbnRyeS1cdTAwM2VwYXRoO1xuJiM0MztcdFx0cGF0aF9nZXQoXHUwMDI2aW5mby1cdTAwM2VzeW1saW5rLnBhdGgpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aW5vZGUgPSBtZXRhZnNfZ2V0X2lub2RlKGRpci1cdTAwM2VpX3NiLCBTX0lGTE5LIHwgMDc3NywgTlVMTCk7XG4mIzQzO1x0aWYgKCFpbm9kZSkge1xuJiM0MztcdFx0a2ZyZWUoaW5mby1cdTAwM2VzeW1saW5rLnZhbHVlKTtcbiYjNDM7XHRcdGlmIChpbmZvLVx1MDAzZXN5bWxpbmsucGF0aC5tbnQpXG4mIzQzO1x0XHRcdHBhdGhfcHV0KFx1MDAyNmluZm8tXHUwMDNlc3ltbGluay5wYXRoKTtcbiYjNDM7XHRcdGtmcmVlKGluZm8pO1xuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkZW50cnktXHUwMDNlZF9mc2RhdGEgPSBpbmZvO1xuJiM0MztcdGRfYWRkKGRlbnRyeSwgaW5vZGUpO1xuJiM0MztcdGRfbWFya19kb250Y2FjaGUoaW5vZGUpO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBIZWxwZXIgdG8gZ2V0IGJhc2UgZmlsZSBmcm9tIGFueSBtZXRhZnMgZGVudHJ5XG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgc3RydWN0IGZpbGUgKm1ldGFmc19nZXRfYmFzZV9maWxlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiYjNDM7e1xuJiM0MztcdHdoaWxlIChkZW50cnkpIHtcbiYjNDM7XHRcdHN0cnVjdCBtZXRhZnNfZGVudHJ5X2luZm8gKmluZm8gPSBkZW50cnktXHUwMDNlZF9mc2RhdGE7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGluZm8gXHUwMDI2XHUwMDI2IGluZm8tXHUwMDNldHlwZSA9PSBNRVRBRlNfUk9PVClcbiYjNDM7XHRcdFx0cmV0dXJuIGluZm8tXHUwMDNlcm9vdC5iYXNlO1xuJiM0MztcdFx0aWYgKGRlbnRyeSA9PSBkZW50cnktXHUwMDNlZF9wYXJlbnQpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0ZGVudHJ5ID0gZGVudHJ5LVx1MDAzZWRfcGFyZW50O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQ3JlYXRlIHRoZSByb290IGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9yIGEgbWV0YWRhdGEgb3BlblxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHN0cnVjdCBkZW50cnkgKm1ldGFmc19jcmVhdGVfcm9vdChzdHJ1Y3QgZmlsZSAqYmFzZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4mIzQzO1x0c3RydWN0IGRlbnRyeSAqcm9vdDtcbiYjNDM7XHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gbWV0YWZzX21udC1cdTAwM2VtbnRfc2I7XG4mIzQzO1x0c3RydWN0IG1ldGFmc19kZW50cnlfaW5mbyAqaW5mbztcbiYjNDM7XG4mIzQzO1x0aW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFpbmZvKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1xuJiM0MztcdGluZm8tXHUwMDNldHlwZSA9IE1FVEFGU19ST09UO1xuJiM0MztcdGluZm8tXHUwMDNlcm9vdC5iYXNlID0gZ2V0X2ZpbGUoYmFzZSk7XG4mIzQzO1xuJiM0MztcdGlub2RlID0gbWV0YWZzX2dldF9pbm9kZShzYiwgU19JRkRJUiB8IDA1NTUsIFx1MDAyNm1ldGFmc19yb290X2Rpcl9pb3BzKTtcbiYjNDM7XHRpZiAoIWlub2RlKSB7XG4mIzQzO1x0XHRmcHV0KGluZm8tXHUwMDNlcm9vdC5iYXNlKTtcbiYjNDM7XHRcdGtmcmVlKGluZm8pO1xuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyb290ID0gZF9hbGxvY19hbm9uKHNiKTtcbiYjNDM7XHRpZiAoIXJvb3QpIHtcbiYjNDM7XHRcdGlwdXQoaW5vZGUpO1xuJiM0MztcdFx0ZnB1dChpbmZvLVx1MDAzZXJvb3QuYmFzZSk7XG4mIzQzO1x0XHRrZnJlZShpbmZvKTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogU3RvcmUgdGhlIGluZm8gaW4gZF9mc2RhdGEgYmVmb3JlIGluc3RhbnRpYXRpbmcgKi9cbiYjNDM7XHRyb290LVx1MDAzZWRfZnNkYXRhID0gaW5mbztcbiYjNDM7XHRkX2luc3RhbnRpYXRlKHJvb3QsIGlub2RlKTtcbiYjNDM7XHRkX21hcmtfZG9udGNhY2hlKGlub2RlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJvb3Q7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEdldCBtZXRhZGF0YSByb290IHBhdGggZm9yIGEgYmFzZSBmaWxlLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGlzIGNhbGxlZCBmcm9tIHBhdGhfaW5pdCgpIHdoZW4gT19BTFQgaXMgdXNlZC5cbiYjNDM7ICogSXQgcmV0dXJucyBhIHBhdGggaW4gdGhlIG1ldGFmcyB0aGF0IHNlcnZlcyBhcyB0aGUgcm9vdFxuJiM0MzsgKiBmb3IgdGhlIG1ldGFkYXRhIGxvb2t1cC5cbiYjNDM7ICovXG4mIzQzO2ludCBtZXRhZnNfZ2V0X3Jvb3Qoc3RydWN0IGZpbGUgKmJhc2UsIHN0cnVjdCBwYXRoICpwYXRoKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRlbnRyeSAqcm9vdDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFiYXNlKVxuJiM0MztcdFx0cmV0dXJuIC1FQkFERjtcbiYjNDM7XG4mIzQzO1x0LyogQ3JlYXRlIHRoZSBtZXRhZGF0YSByb290IGZvciB0aGlzIGJhc2UgZmlsZSAqL1xuJiM0MztcdHJvb3QgPSBtZXRhZnNfY3JlYXRlX3Jvb3QoYmFzZSk7XG4mIzQzO1x0aWYgKElTX0VSUihyb290KSlcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKHJvb3QpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJldHVybiB0aGUgcGF0aCB0byB0aGUgbWV0YWRhdGEgcm9vdC5cbiYjNDM7XHQgKiBOb3JtYWwgVkZTIGxvb2t1cCB3aWxsIHRha2Ugb3ZlciBmcm9tIGhlcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0cGF0aC1cdTAwM2VtbnQgPSBtbnRnZXQobWV0YWZzX21udCk7XG4mIzQzO1x0cGF0aC1cdTAwM2VkZW50cnkgPSByb290O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtZXRhZnNfZ2V0X3Jvb3QpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX2luaXQgbWV0YWZzX2luaXQodm9pZClcbiYjNDM7e1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oXHUwMDI2bWV0YWZzX3R5cGUpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRtZXRhZnNfbW50ID0ga2Vybl9tb3VudChcdTAwMjZtZXRhZnNfdHlwZSk7XG4mIzQzO1x0aWYgKElTX0VSUihtZXRhZnNfbW50KSkge1xuJiM0MztcdFx0ZXJyID0gUFRSX0VSUihtZXRhZnNfbW50KTtcbiYjNDM7XHRcdHVucmVnaXN0ZXJfZmlsZXN5c3RlbShcdTAwMjZtZXRhZnNfdHlwZSk7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XHRzZXRfZGVmYXVsdF9kX29wKG1ldGFmc19tbnQtXHUwMDNlbW50X3NiLCBcdTAwMjZtZXRhZnNfZGVudHJ5X29wcyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztmc19pbml0Y2FsbChtZXRhZnNfaW5pdCk7XG5kaWZmIC0tZ2l0IGEvZnMvbWV0YWZzL21ldGFmcy5oIGIvZnMvbWV0YWZzL21ldGFmcy5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmQyNTc3MTQyNjBhN2ZiXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9tZXRhZnMvbWV0YWZzLmhcbkBAIC0wLDAgJiM0MzsxLDE1IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4mIzQzOyNpZm5kZWYgX0xJTlVYX01FVEFGU19IXG4mIzQzOyNkZWZpbmUgX0xJTlVYX01FVEFGU19IXG4mIzQzO1xuJiM0MztzdHJ1Y3QgcGF0aDtcbiYjNDM7c3RydWN0IGZpbGU7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBHZXQgbWV0YWRhdGEgcm9vdCBwYXRoIGZvciBhIGJhc2UgZmlsZS5cbiYjNDM7ICogQ2FsbGVkIGZyb20gcGF0aF9pbml0KCkgd2hlbiBPX0FMVCBmbGFnIGlzIHVzZWQuXG4mIzQzOyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIHdpdGggcGF0aCBmaWxsZWQgaW4sIC1lcnJubyBvbiBlcnJvci5cbiYjNDM7ICovXG4mIzQzO2ludCBtZXRhZnNfZ2V0X3Jvb3Qoc3RydWN0IGZpbGUgKmJhc2UsIHN0cnVjdCBwYXRoICpwYXRoKTtcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfTElOVVhfTUVUQUZTX0ggKi9cbmRpZmYgLS1naXQgYS9mcy9tb3VudC5oIGIvZnMvbW91bnQuaFxuaW5kZXggOTRmY2MzMDZkMjFlN2QuLjY5YTk1M2JjMTEyYjM2IDEwMDY0NFxuLS0tIGEvZnMvbW91bnQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbW91bnQuaFxuQEAgLTY1LDcgJiM0Mzs2NSw2IEBAIHN0cnVjdCBtb3VudCB7XG4gXHRzdHJ1Y3QgbW91bnQgKiBfX2FsaWduZWQoMSkgKm1udF9wcHJldl9mb3Jfc2I7XG4gXHRcdFx0XHRcdC8qIGV4Y2VwdCB0aGF0IExTQiBvZiBwcHJldiBpcyBzdG9sZW4gKi9cbiAjZGVmaW5lIFdSSVRFX0hPTEQgMVx0XHRcdC8qIC4uLiBmb3IgdXNlIGJ5IG1udF9ob2xkX3dyaXRlcnMoKSAqL1xuLVx0Y29uc3QgY2hhciAqbW50X2Rldm5hbWU7XHQvKiBOYW1lIG9mIGRldmljZSBlLmcuIC9kZXYvZHNrL2hkYTEgKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgbW50X2xpc3Q7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIG1udF9leHBpcmU7XHQvKiBsaW5rIGluIGZzLXNwZWNpZmljIGV4cGlyeSBsaXN0ICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIG1udF9zaGFyZTtcdC8qIGNpcmN1bGFyIGxpc3Qgb2Ygc2hhcmVkIG1vdW50cyAqL1xuZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jXG5pbmRleCAxOWNlNDNjOWE2ZTY2Mi4uNDM3YTE0YzQzMmU2N2IgMTAwNjQ0XG4tLS0gYS9mcy9uYW1laS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9uYW1laS5jXG5AQCAtNDUsNiAmIzQzOzQ1LDcgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7bW91bnQuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDttZXRhZnMvbWV0YWZzLmhcJiMzNDtcbiBcbiAvKiBbRmViLTE5OTcgVC4gU2Nob2ViZWwtVGhldWVyXVxuICAqIEZ1bmRhbWVudGFsIGNoYW5nZXMgaW4gdGhlIHBhdGhuYW1lIGxvb2t1cCBtZWNoYW5pc21zIChuYW1laSlcbkBAIC0yNzUzLDYgJiM0MzsyNzU0LDIxIEBAIHN0YXRpYyBjb25zdCBjaGFyICpwYXRoX2luaXQoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHVuc2lnbmVkIGZsYWdzKVxuIFx0XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XG4gXHRcdH1cbiBcbiYjNDM7XHRcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgTE9PS1VQX0FMVCkpIHtcbiYjNDM7XHRcdFx0aWYgKGZsYWdzIFx1MDAyNiBMT09LVVBfUkNVKVxuJiM0MztcdFx0XHRcdHJldHVybiBFUlJfUFRSKC1FQ0hJTEQpO1xuJiM0MztcbiYjNDM7XHRcdFx0LyogSGFuZGxlIE9fQUxUOiBqdW1wIHRvIG1ldGFmcyByb290ICovXG4mIzQzO1x0XHRcdGVycm9yID0gbWV0YWZzX2dldF9yb290KGZkX2ZpbGUoZiksIFx1MDAyNm5kLVx1MDAzZXBhdGgpO1xuJiM0MztcdFx0XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyb3IpO1xuJiM0MztcbiYjNDM7XHRcdFx0bmQtXHUwMDNlaW5vZGUgPSBuZC1cdTAwM2VwYXRoLmRlbnRyeS1cdTAwM2VkX2lub2RlO1xuJiM0MztcdFx0XHRuZC1cdTAwM2VzdGF0ZSB8PSBORF9KVU1QRUQ7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXR1cm4gcztcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdGRlbnRyeSA9IGZkX2ZpbGUoZiktXHUwMDNlZl9wYXRoLmRlbnRyeTtcbiBcbiBcdFx0aWYgKCpzIFx1MDAyNlx1MDAyNiB1bmxpa2VseSghZF9jYW5fbG9va3VwKGRlbnRyeSkpKVxuZGlmZiAtLWdpdCBhL2ZzL25hbWVzcGFjZS5jIGIvZnMvbmFtZXNwYWNlLmNcbmluZGV4IDNkNWNkNWJmM2IwNTM3Li42MmNjNzFjNDAxYTJhYyAxMDA2NDRcbi0tLSBhL2ZzL25hbWVzcGFjZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9uYW1lc3BhY2UuY1xuQEAgLTI4Miw3ICYjNDM7MjgyLDcgQEAgaW50IG1udF9nZXRfY291bnQoc3RydWN0IG1vdW50ICptbnQpXG4gI2VuZGlmXG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgbW91bnQgKmFsbG9jX3Zmc21udChjb25zdCBjaGFyICpuYW1lKVxuJiM0MztzdGF0aWMgc3RydWN0IG1vdW50ICphbGxvY192ZnNtbnQodm9pZClcbiB7XG4gXHRzdHJ1Y3QgbW91bnQgKm1udCA9IGttZW1fY2FjaGVfemFsbG9jKG1udF9jYWNoZSwgR0ZQX0tFUk5FTCk7XG4gXHRpZiAobW50KSB7XG5AQCAtMjkyLDE4ICYjNDM7MjkyLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgbW91bnQgKmFsbG9jX3Zmc21udChjb25zdCBjaGFyICpuYW1lKVxuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gb3V0X2ZyZWVfY2FjaGU7XG4gXG4tXHRcdGlmIChuYW1lKVxuLVx0XHRcdG1udC1cdTAwM2VtbnRfZGV2bmFtZSA9IGtzdHJkdXBfY29uc3QobmFtZSxcbi1cdFx0XHRcdFx0XHRcdCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLVx0XHRlbHNlXG4tXHRcdFx0bW50LVx1MDAzZW1udF9kZXZuYW1lID0gXCYjMzQ7bm9uZVwmIzM0Oztcbi1cdFx0aWYgKCFtbnQtXHUwMDNlbW50X2Rldm5hbWUpXG4tXHRcdFx0Z290byBvdXRfZnJlZV9pZDtcbi1cbiAjaWZkZWYgQ09ORklHX1NNUFxuIFx0XHRtbnQtXHUwMDNlbW50X3BjcCA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgbW50X3BjcCk7XG4gXHRcdGlmICghbW50LVx1MDAzZW1udF9wY3ApXG4tXHRcdFx0Z290byBvdXRfZnJlZV9kZXZuYW1lO1xuJiM0MztcdFx0XHRnb3RvIG91dF9mcmVlX2lkO1xuIFxuIFx0XHR0aGlzX2NwdV9hZGQobW50LVx1MDAzZW1udF9wY3AtXHUwMDNlbW50X2NvdW50LCAxKTtcbiAjZWxzZVxuQEAgLTMyOCwxMSAmIzQzOzMyMCw5IEBAIHN0YXRpYyBzdHJ1Y3QgbW91bnQgKmFsbG9jX3Zmc21udChjb25zdCBjaGFyICpuYW1lKVxuIFx0cmV0dXJuIG1udDtcbiBcbiAjaWZkZWYgQ09ORklHX1NNUFxuLW91dF9mcmVlX2Rldm5hbWU6XG4tXHRrZnJlZV9jb25zdChtbnQtXHUwMDNlbW50X2Rldm5hbWUpO1xuLSNlbmRpZlxuIG91dF9mcmVlX2lkOlxuIFx0bW50X2ZyZWVfaWQobW50KTtcbiYjNDM7I2VuZGlmXG4gb3V0X2ZyZWVfY2FjaGU6XG4gXHRrbWVtX2NhY2hlX2ZyZWUobW50X2NhY2hlLCBtbnQpO1xuIFx0cmV0dXJuIE5VTEw7XG5AQCAtNzI1LDcgJiM0Mzs3MTUsNiBAQCBpbnQgc2JfcHJlcGFyZV9yZW1vdW50X3JlYWRvbmx5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gc3RhdGljIHZvaWQgZnJlZV92ZnNtbnQoc3RydWN0IG1vdW50ICptbnQpXG4ge1xuIFx0bW50X2lkbWFwX3B1dChtbnRfaWRtYXAoXHUwMDI2bW50LVx1MDAzZW1udCkpO1xuLVx0a2ZyZWVfY29uc3QobW50LVx1MDAzZW1udF9kZXZuYW1lKTtcbiAjaWZkZWYgQ09ORklHX1NNUFxuIFx0ZnJlZV9wZXJjcHUobW50LVx1MDAzZW1udF9wY3ApO1xuICNlbmRpZlxuQEAgLTExODAsNyAmIzQzOzExNjksNyBAQCBzdHJ1Y3QgdmZzbW91bnQgKnZmc19jcmVhdGVfbW91bnQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIFx0aWYgKCFmYy1cdTAwM2Vyb290KVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiBcbi1cdG1udCA9IGFsbG9jX3Zmc21udChmYy1cdTAwM2Vzb3VyY2UpO1xuJiM0MztcdG1udCA9IGFsbG9jX3Zmc21udCgpO1xuIFx0aWYgKCFtbnQpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIFxuQEAgLTEyNDgsNyAmIzQzOzEyMzcsNyBAQCBzdGF0aWMgc3RydWN0IG1vdW50ICpjbG9uZV9tbnQoc3RydWN0IG1vdW50ICpvbGQsIHN0cnVjdCBkZW50cnkgKnJvb3QsXG4gXHRzdHJ1Y3QgbW91bnQgKm1udDtcbiBcdGludCBlcnI7XG4gXG4tXHRtbnQgPSBhbGxvY192ZnNtbnQob2xkLVx1MDAzZW1udF9kZXZuYW1lKTtcbiYjNDM7XHRtbnQgPSBhbGxvY192ZnNtbnQoKTtcbiBcdGlmICghbW50KVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcbkBAIC0yOTU3LDE2ICYjNDM7Mjk0NiwxMiBAQCBzdGF0aWMgaW50IGRvX2NoYW5nZV90eXBlKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgbXNfZmxhZ3MpXG4gc3RhdGljIGlubGluZSBib29sIG1heV9jb3B5X3RyZWUoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXG4ge1xuIFx0c3RydWN0IG1vdW50ICptbnQgPSByZWFsX21vdW50KHBhdGgtXHUwMDNlbW50KTtcbi1cdGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyAqZF9vcDtcbiBcbiBcdGlmIChjaGVja19tbnQobW50KSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRkX29wID0gcGF0aC1cdTAwM2VkZW50cnktXHUwMDNlZF9vcDtcbi1cdGlmIChkX29wID09IFx1MDAyNm5zX2RlbnRyeV9vcGVyYXRpb25zKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbi1cbi1cdGlmIChkX29wID09IFx1MDAyNnBpZGZzX2RlbnRyeV9vcGVyYXRpb25zKVxuJiM0MztcdC8qIE1ha2UgYW4gZXhjZXB0aW9uIGZvciBpbnRlcm5hbCBtb3VudHMgZXhwbGljaXRseSBtYXJrZWQgYXMgY2xvbmFibGUgKi9cbiYjNDM7XHRpZiAobW50LVx1MDAzZW1udF9ucyA9PSBNTlRfTlNfSU5URVJOQUwgXHUwMDI2XHUwMDI2IG1udC1cdTAwM2VtbnQubW50X2ZsYWdzIFx1MDAyNiBNTlRfQ0xPTkFCTEUpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0aWYgKCFpc19tb3VudGVkKHBhdGgtXHUwMDNlbW50KSlcbkBAIC0zMjAxLDcgJiM0MzszMTg2LDcgQEAgc3RhdGljIHN0cnVjdCBmaWxlICp2ZnNfb3Blbl90cmVlKGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwgdW5zaWduZWRcbiBcbiBcdGlmIChmbGFncyBcdTAwMjYgfihBVF9FTVBUWV9QQVRIIHwgQVRfTk9fQVVUT01PVU5UIHwgQVRfUkVDVVJTSVZFIHxcbiBcdFx0ICAgICAgQVRfU1lNTElOS19OT0ZPTExPVyB8IE9QRU5fVFJFRV9DTE9ORSB8XG4tXHRcdCAgICAgIE9QRU5fVFJFRV9DTE9FWEVDIHwgT1BFTl9UUkVFX05BTUVTUEFDRSkpXG4mIzQzO1x0XHQgICAgICBPUEVOX1RSRUVfQ0xPRVhFQyB8IE9QRU5fVFJFRV9OQU1FU1BBQ0UgfCBPUEVOX1RSRUVfQUxUKSlcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gXG4gXHRpZiAoKGZsYWdzIFx1MDAyNiAoQVRfUkVDVVJTSVZFIHwgT1BFTl9UUkVFX0NMT05FIHwgT1BFTl9UUkVFX05BTUVTUEFDRSkpID09XG5AQCAtMzIxNSw2ICYjNDM7MzIwMCw4IEBAIHN0YXRpYyBzdHJ1Y3QgZmlsZSAqdmZzX29wZW5fdHJlZShpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsIHVuc2lnbmVkXG4gXHRcdGxvb2t1cF9mbGFncyBcdTAwMjY9IH5MT09LVVBfQVVUT01PVU5UO1xuIFx0aWYgKGZsYWdzIFx1MDAyNiBBVF9TWU1MSU5LX05PRk9MTE9XKVxuIFx0XHRsb29rdXBfZmxhZ3MgXHUwMDI2PSB+TE9PS1VQX0ZPTExPVztcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IE9QRU5fVFJFRV9BTFQpXG4mIzQzO1x0XHRsb29rdXBfZmxhZ3MgfD0gTE9PS1VQX0FMVDtcbiBcbiBcdC8qXG4gXHQgKiBJZiB3ZSBjcmVhdGUgYSBuZXcgbW91bnQgbmFtZXNwYWNlIHdpdGggdGhlIGNsb25lZCBtb3VudCB0cmVlIHdlXG5AQCAtNTM4Nyw3ICYjNDM7NTM3NCw2IEBAIHN0YXRpYyB2b2lkIHN0YXRtb3VudF9mc19zdWJ0eXBlKHN0cnVjdCBrc3RhdG1vdW50ICpzLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSlcbiBzdGF0aWMgaW50IHN0YXRtb3VudF9zYl9zb3VyY2Uoc3RydWN0IGtzdGF0bW91bnQgKnMsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxuIHtcbiBcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBzLVx1MDAzZW1udC1cdTAwM2VtbnRfc2I7XG4tXHRzdHJ1Y3QgbW91bnQgKnIgPSByZWFsX21vdW50KHMtXHUwMDNlbW50KTtcbiBcbiBcdGlmIChzYi1cdTAwM2VzX29wLVx1MDAzZXNob3dfZGV2bmFtZSkge1xuIFx0XHRzaXplX3Qgc3RhcnQgPSBzZXEtXHUwMDNlY291bnQ7XG5AQCAtNTQwNSw3ICYjNDM7NTM5MSw3IEBAIHN0YXRpYyBpbnQgc3RhdG1vdW50X3NiX3NvdXJjZShzdHJ1Y3Qga3N0YXRtb3VudCAqcywgc3RydWN0IHNlcV9maWxlICpzZXEpXG4gXHRcdHNlcS1cdTAwM2Vjb3VudCA9IHN0YXJ0O1xuIFx0XHRzZXFfY29tbWl0KHNlcSwgc3RyaW5nX3VuZXNjYXBlX2lucGxhY2Uoc2VxLVx1MDAzZWJ1ZiAmIzQzOyBzdGFydCwgVU5FU0NBUEVfT0NUQUwpKTtcbiBcdH0gZWxzZSB7XG4tXHRcdHNlcV9wdXRzKHNlcSwgci1cdTAwM2VtbnRfZGV2bmFtZSk7XG4mIzQzO1x0XHRzZXFfcHV0cyhzZXEsIHNiLVx1MDAzZXNfZGV2bmFtZSk7XG4gXHR9XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNTQxNiw2ICYjNDM7NTQwMiw0MCBAQCBzdGF0aWMgdm9pZCBzdGF0bW91bnRfbW50X25zX2lkKHN0cnVjdCBrc3RhdG1vdW50ICpzLCBzdHJ1Y3QgbW50X25hbWVzcGFjZSAqbnMpXG4gXHRzLVx1MDAzZXNtLm1udF9uc19pZCA9IG5zLVx1MDAzZW5zLm5zX2lkO1xuIH1cbiBcbiYjNDM7dm9pZCBzYl9hZGRfb3B0aW9uKHN0cnVjdCBzYl9vcHRfY3R4ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0c2JfYWRkX29wdGlvbl9wYXRoKGN0eCwgbmFtZSwgdmFsdWUsIE5VTEwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHNiX2FkZF9vcHRpb25fcGF0aChzdHJ1Y3Qgc2Jfb3B0X2N0eCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSxcbiYjNDM7XHRcdFx0Y29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXG4mIzQzO3tcbiYjNDM7XHRjdHgtXHUwMDNlYWN0b3IoY3R4LCBuYW1lLCB2YWx1ZSwgcGF0aCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGRvX3Nob3dfb3B0aW9uKHN0cnVjdCBzYl9vcHRfY3R4ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlLFxuJiM0MztcdFx0XHQgICBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aClcbiYjNDM7e1xuJiM0MztcdGlmIChzdHJjbXAobmFtZSwgXCYjMzQ7c291cmNlXCYjMzQ7KSAhPSAwKVxuJiM0MztcdFx0c2VxX3Nob3dfb3B0aW9uKGN0eC1cdTAwM2VkYXRhLCBuYW1lLCB2YWx1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBtbnRfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgdmZzbW91bnQgKm1udClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBtbnQtXHUwMDNlbW50X3NiO1xuJiM0MztcbiYjNDM7XHRpZiAoc2ItXHUwMDNlc19vcC1cdTAwM2VzaG93X29wdGlvbnMpXG4mIzQzO1x0XHRyZXR1cm4gc2ItXHUwMDNlc19vcC1cdTAwM2VzaG93X29wdGlvbnMoc2VxLCBtbnQtXHUwMDNlbW50X3Jvb3QpO1xuJiM0MztcbiYjNDM7XHRpZiAoc2ItXHUwMDNlc19vcC1cdTAwM2VnZXRfb3B0aW9ucykge1xuJiM0MztcdFx0c3RydWN0IHNiX29wdF9jdHggY3R4ID0geyAuZGF0YSA9IHNlcSwgLmFjdG9yID0gZG9fc2hvd19vcHRpb24gfTtcbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm4gc2ItXHUwMDNlc19vcC1cdTAwM2VnZXRfb3B0aW9ucyhcdTAwMjZjdHgsIG1udC1cdTAwM2VtbnRfcm9vdCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHN0YXRtb3VudF9tbnRfb3B0cyhzdHJ1Y3Qga3N0YXRtb3VudCAqcywgc3RydWN0IHNlcV9maWxlICpzZXEpXG4ge1xuIFx0c3RydWN0IHZmc21vdW50ICptbnQgPSBzLVx1MDAzZW1udDtcbkBAIC01NDI3LDExICYjNDM7NTQ0Nyw5IEBAIHN0YXRpYyBpbnQgc3RhdG1vdW50X21udF9vcHRzKHN0cnVjdCBrc3RhdG1vdW50ICpzLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSlcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRpZiAoc2ItXHUwMDNlc19vcC1cdTAwM2VzaG93X29wdGlvbnMpIHtcbi1cdFx0ZXJyID0gc2ItXHUwMDNlc19vcC1cdTAwM2VzaG93X29wdGlvbnMoc2VxLCBtbnQtXHUwMDNlbW50X3Jvb3QpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdHJldHVybiBlcnI7XG4tXHR9XG4mIzQzO1x0ZXJyID0gbW50X3Nob3dfb3B0aW9ucyhzZXEsIG1udCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4gXG4gXHRpZiAodW5saWtlbHkoc2VxX2hhc19vdmVyZmxvd2VkKHNlcSkpKVxuIFx0XHRyZXR1cm4gLUVBR0FJTjtcbkBAIC01NDc5LDE0ICYjNDM7NTQ5NywxMCBAQCBzdGF0aWMgaW5saW5lIGludCBzdGF0bW91bnRfb3B0X3Byb2Nlc3Moc3RydWN0IHNlcV9maWxlICpzZXEsIHNpemVfdCBzdGFydClcbiBzdGF0aWMgaW50IHN0YXRtb3VudF9vcHRfYXJyYXkoc3RydWN0IGtzdGF0bW91bnQgKnMsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxuIHtcbiBcdHN0cnVjdCB2ZnNtb3VudCAqbW50ID0gcy1cdTAwM2VtbnQ7XG4tXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gbW50LVx1MDAzZW1udF9zYjtcbiBcdHNpemVfdCBzdGFydCA9IHNlcS1cdTAwM2Vjb3VudDtcbiBcdGludCBlcnI7XG4gXG4tXHRpZiAoIXNiLVx1MDAzZXNfb3AtXHUwMDNlc2hvd19vcHRpb25zKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdGVyciA9IHNiLVx1MDAzZXNfb3AtXHUwMDNlc2hvd19vcHRpb25zKHNlcSwgbW50LVx1MDAzZW1udF9yb290KTtcbiYjNDM7XHRlcnIgPSBtbnRfc2hvd19vcHRpb25zKHNlcSwgbW50KTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvbnNmcy5jIGIvZnMvbnNmcy5jXG5pbmRleCBjM2I2YWU3NjU5NGE4MS4uZTExMDEzMGQwNzYwZTUgMTAwNjQ0XG4tLS0gYS9mcy9uc2ZzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25zZnMuY1xuQEAgLTY4NCw2ICYjNDM7Njg0LDcgQEAgdm9pZCBfX2luaXQgbnNmc19pbml0KHZvaWQpXG4gXHRpZiAoSVNfRVJSKG5zZnNfbW50KSlcbiBcdFx0cGFuaWMoXCYjMzQ7Y2FuJiMzOTt0IHNldCBuc2ZzIHVwXFxuXCYjMzQ7KTtcbiBcdG5zZnNfbW50LVx1MDAzZW1udF9zYi1cdTAwM2VzX2ZsYWdzIFx1MDAyNj0gflNCX05PVVNFUjtcbiYjNDM7XHRuc2ZzX21udC1cdTAwM2VtbnRfZmxhZ3MgfD0gTU5UX0NMT05BQkxFO1xuIFx0bnNmc19yb290X3BhdGgubW50ID0gbnNmc19tbnQ7XG4gXHRuc2ZzX3Jvb3RfcGF0aC5kZW50cnkgPSBuc2ZzX21udC1cdTAwM2VtbnRfcm9vdDtcbiB9XG5kaWZmIC0tZ2l0IGEvZnMvb3Blbi5jIGIvZnMvb3Blbi5jXG5pbmRleCA0MDg5MjVkN2JkMGI3Ny4uM2EwODFhOWUzMDYyNDMgMTAwNjQ0XG4tLS0gYS9mcy9vcGVuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29wZW4uY1xuQEAgLTExMzEsNyAmIzQzOzExMzEsOCBAQCBzdHJ1Y3QgZmlsZSAqa2VybmVsX2ZpbGVfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IGZsYWdzLFxuIEVYUE9SVF9TWU1CT0xfR1BMKGtlcm5lbF9maWxlX29wZW4pO1xuIFxuICNkZWZpbmUgV0lMTF9DUkVBVEUoZmxhZ3MpXHQoZmxhZ3MgXHUwMDI2IChPX0NSRUFUIHwgX19PX1RNUEZJTEUpKVxuLSNkZWZpbmUgT19QQVRIX0ZMQUdTXHRcdChPX0RJUkVDVE9SWSB8IE9fTk9GT0xMT1cgfCBPX1BBVEggfCBPX0NMT0VYRUMgfCBPX0VNUFRZUEFUSClcbiYjNDM7I2RlZmluZSBPX1BBVEhfRkxBR1NcdFx0KE9fRElSRUNUT1JZIHwgT19OT0ZPTExPVyB8IE9fUEFUSCB8IE9fQ0xPRVhFQyB8IE9fRU1QVFlQQVRIIHwgXFxcbiYjNDM7XHRcdFx0XHQgT19BTFQpXG4gXG4gaW5saW5lIHN0cnVjdCBvcGVuX2hvdyBidWlsZF9vcGVuX2hvdyhpbnQgZmxhZ3MsIHVtb2RlX3QgbW9kZSlcbiB7XG5AQCAtMTI4Myw2ICYjNDM7MTI4NCw4IEBAIGlubGluZSBpbnQgYnVpbGRfb3Blbl9mbGFncyhjb25zdCBzdHJ1Y3Qgb3Blbl9ob3cgKmhvdywgc3RydWN0IG9wZW5fZmxhZ3MgKm9wKVxuIFx0XHRsb29rdXBfZmxhZ3MgfD0gTE9PS1VQX0ZPTExPVztcbiBcdGlmIChmbGFncyBcdTAwMjYgT19FTVBUWVBBVEgpXG4gXHRcdGxvb2t1cF9mbGFncyB8PSBMT09LVVBfRU1QVFk7XG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiBPX0FMVClcbiYjNDM7XHRcdGxvb2t1cF9mbGFncyB8PSBMT09LVVBfQUxUO1xuIFxuIFx0aWYgKGhvdy1cdTAwM2VyZXNvbHZlIFx1MDAyNiBSRVNPTFZFX05PX1hERVYpXG4gXHRcdGxvb2t1cF9mbGFncyB8PSBMT09LVVBfTk9fWERFVjtcbmRpZmYgLS1naXQgYS9mcy9vdmVybGF5ZnMvcGFyYW1zLmMgYi9mcy9vdmVybGF5ZnMvcGFyYW1zLmNcbmluZGV4IGM5M2ZjYWE0NWQ0YTM2Li5jNWE5ZTg1OGUzNjY1ZSAxMDA2NDRcbi0tLSBhL2ZzL292ZXJsYXlmcy9wYXJhbXMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvb3ZlcmxheWZzL3BhcmFtcy5jXG5AQCAtMTA0NiwxMCAmIzQzOzEwNDYsMTEgQEAgaW50IG92bF9mc19wYXJhbXNfdmVyaWZ5KGNvbnN0IHN0cnVjdCBvdmxfZnNfY29udGV4dCAqY3R4LFxuICAqIFByaW50cyB0aGUgbW91bnQgb3B0aW9ucyBmb3IgYSBnaXZlbiBzdXBlcmJsb2NrLlxuICAqIFJldHVybnMgemVybzsgZG9lcyBub3QgZmFpbC5cbiAgKi9cbi1pbnQgb3ZsX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiYjNDM7aW50IG92bF9nZXRfb3B0aW9ucyhzdHJ1Y3Qgc2Jfb3B0X2N0eCAqY3R4LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4ge1xuIFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRlbnRyeS1cdTAwM2VkX3NiO1xuIFx0c3RydWN0IG92bF9mcyAqb2ZzID0gT1ZMX0ZTKHNiKTtcbiYjNDM7XHRzdHJ1Y3QgcGF0aCB1cHBlcnBhdGg7XG4gXHRzaXplX3QgbnIsIG5yX21lcmdlZF9sb3dlciwgbnJfbG93ZXIgPSAwO1xuIFx0Y2hhciAqKmxvd2VyZGlycyA9IG9mcy1cdTAwM2Vjb25maWcubG93ZXJkaXJzO1xuIFxuQEAgLTEwNjIsNDMgJiM0MzsxMDYzLDQ3IEBAIGludCBvdmxfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0ICogd2l0aCB0aGUgbmV3IGxvd2VyZGlyJiM0MzsgYW5kIGRhdGFkaXImIzQzOyBtb3VudCBvcHRpb25zLlxuIFx0ICovXG4gXHRpZiAobG93ZXJkaXJzWzBdKSB7XG4tXHRcdHNlcV9zaG93X29wdGlvbihtLCBcJiMzNDtsb3dlcmRpclwmIzM0OywgbG93ZXJkaXJzWzBdKTtcbiYjNDM7XHRcdHNiX2FkZF9vcHRpb24oY3R4LCBcJiMzNDtsb3dlcmRpclwmIzM0OywgbG93ZXJkaXJzWzBdKTtcbiBcdH0gZWxzZSB7XG4gXHRcdG5yX2xvd2VyID0gb2ZzLVx1MDAzZW51bWxheWVyO1xuIFx0XHRucl9tZXJnZWRfbG93ZXIgPSBucl9sb3dlciAtIG9mcy1cdTAwM2VudW1kYXRhbGF5ZXI7XG4gXHR9XG4gXHRmb3IgKG5yID0gMTsgbnIgXHUwMDNjIG5yX2xvd2VyOyBuciYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBwYXRoIGxvd2VycGF0aCA9IHtcbiYjNDM7XHRcdFx0Lm1udCA9IG9mcy1cdTAwM2VsYXllcnNbbnJdLm1udCxcbiYjNDM7XHRcdFx0LmRlbnRyeSA9IG9mcy1cdTAwM2VsYXllcnNbbnJdLm1udC1cdTAwM2VtbnRfcm9vdCxcbiYjNDM7XHRcdH07XG4gXHRcdGlmIChuciBcdTAwM2MgbnJfbWVyZ2VkX2xvd2VyKVxuLVx0XHRcdHNlcV9zaG93X29wdGlvbihtLCBcJiMzNDtsb3dlcmRpciYjNDM7XCYjMzQ7LCBsb3dlcmRpcnNbbnJdKTtcbiYjNDM7XHRcdFx0c2JfYWRkX29wdGlvbl9wYXRoKGN0eCwgXCYjMzQ7bG93ZXJkaXImIzQzO1wmIzM0OywgbG93ZXJkaXJzW25yXSxcbiYjNDM7XHRcdFx0XHRcdCAgIFx1MDAyNmxvd2VycGF0aCk7XG4gXHRcdGVsc2Vcbi1cdFx0XHRzZXFfc2hvd19vcHRpb24obSwgXCYjMzQ7ZGF0YWRpciYjNDM7XCYjMzQ7LCBsb3dlcmRpcnNbbnJdKTtcbiYjNDM7XHRcdFx0c2JfYWRkX29wdGlvbl9wYXRoKGN0eCwgXCYjMzQ7ZGF0YWRpciYjNDM7XCYjMzQ7LCBsb3dlcmRpcnNbbnJdLFxuJiM0MztcdFx0XHRcdFx0ICAgXHUwMDI2bG93ZXJwYXRoKTtcbiBcdH1cbiBcdGlmIChvZnMtXHUwMDNlY29uZmlnLnVwcGVyZGlyKSB7XG4tXHRcdHNlcV9zaG93X29wdGlvbihtLCBcJiMzNDt1cHBlcmRpclwmIzM0Oywgb2ZzLVx1MDAzZWNvbmZpZy51cHBlcmRpcik7XG4tXHRcdHNlcV9zaG93X29wdGlvbihtLCBcJiMzNDt3b3JrZGlyXCYjMzQ7LCBvZnMtXHUwMDNlY29uZmlnLndvcmtkaXIpO1xuJiM0MztcdFx0b3ZsX3BhdGhfdXBwZXIoc2ItXHUwMDNlc19yb290LCBcdTAwMjZ1cHBlcnBhdGgpO1xuJiM0MztcdFx0c2JfYWRkX29wdGlvbl9wYXRoKGN0eCwgXCYjMzQ7dXBwZXJkaXJcJiMzNDssIG9mcy1cdTAwM2Vjb25maWcudXBwZXJkaXIsIFx1MDAyNnVwcGVycGF0aCk7XG4mIzQzO1x0XHRzYl9hZGRfb3B0aW9uKGN0eCwgXCYjMzQ7d29ya2RpclwmIzM0Oywgb2ZzLVx1MDAzZWNvbmZpZy53b3JrZGlyKTtcbiBcdH1cbiBcdGlmIChvZnMtXHUwMDNlY29uZmlnLmRlZmF1bHRfcGVybWlzc2lvbnMpXG4tXHRcdHNlcV9wdXRzKG0sIFwmIzM0OyxkZWZhdWx0X3Blcm1pc3Npb25zXCYjMzQ7KTtcbiYjNDM7XHRcdHNiX2FkZF9vcHRpb24oY3R4LCBcJiMzNDtkZWZhdWx0X3Blcm1pc3Npb25zXCYjMzQ7LCBOVUxMKTtcbiBcdGlmIChvZnMtXHUwMDNlY29uZmlnLnJlZGlyZWN0X21vZGUgIT0gb3ZsX3JlZGlyZWN0X21vZGVfZGVmKCkpXG4tXHRcdHNlcV9wcmludGYobSwgXCYjMzQ7LHJlZGlyZWN0X2Rpcj0lc1wmIzM0Oyxcbi1cdFx0XHQgICBvdmxfcmVkaXJlY3RfbW9kZShcdTAwMjZvZnMtXHUwMDNlY29uZmlnKSk7XG4mIzQzO1x0XHRzYl9hZGRfb3B0aW9uKGN0eCwgXCYjMzQ7cmVkaXJlY3RfZGlyXCYjMzQ7LCBvdmxfcmVkaXJlY3RfbW9kZShcdTAwMjZvZnMtXHUwMDNlY29uZmlnKSk7XG4gXHRpZiAob2ZzLVx1MDAzZWNvbmZpZy5pbmRleCAhPSBvdmxfaW5kZXhfZGVmKVxuLVx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyxpbmRleD0lc1wmIzM0Oywgc3RyX29uX29mZihvZnMtXHUwMDNlY29uZmlnLmluZGV4KSk7XG4mIzQzO1x0XHRzYl9hZGRfb3B0aW9uKGN0eCwgXCYjMzQ7aW5kZXhcJiMzNDssIHN0cl9vbl9vZmYob2ZzLVx1MDAzZWNvbmZpZy5pbmRleCkpO1xuIFx0aWYgKG9mcy1cdTAwM2Vjb25maWcudXVpZCAhPSBvdmxfdXVpZF9kZWYoKSlcbi1cdFx0c2VxX3ByaW50ZihtLCBcJiMzNDssdXVpZD0lc1wmIzM0Oywgb3ZsX3V1aWRfbW9kZShcdTAwMjZvZnMtXHUwMDNlY29uZmlnKSk7XG4mIzQzO1x0XHRzYl9hZGRfb3B0aW9uKGN0eCwgXCYjMzQ7dXVpZFwmIzM0Oywgb3ZsX3V1aWRfbW9kZShcdTAwMjZvZnMtXHUwMDNlY29uZmlnKSk7XG4gXHRpZiAob2ZzLVx1MDAzZWNvbmZpZy5uZnNfZXhwb3J0ICE9IG92bF9uZnNfZXhwb3J0X2RlZilcbi1cdFx0c2VxX3ByaW50ZihtLCBcJiMzNDssbmZzX2V4cG9ydD0lc1wmIzM0Oyxcbi1cdFx0XHQgICBzdHJfb25fb2ZmKG9mcy1cdTAwM2Vjb25maWcubmZzX2V4cG9ydCkpO1xuJiM0MztcdFx0c2JfYWRkX29wdGlvbihjdHgsIFwmIzM0O25mc19leHBvcnRcJiMzNDssIHN0cl9vbl9vZmYob2ZzLVx1MDAzZWNvbmZpZy5uZnNfZXhwb3J0KSk7XG4gXHRpZiAob2ZzLVx1MDAzZWNvbmZpZy54aW5vICE9IG92bF94aW5vX2RlZigpIFx1MDAyNlx1MDAyNiAhb3ZsX3NhbWVfZnMob2ZzKSlcbi1cdFx0c2VxX3ByaW50ZihtLCBcJiMzNDsseGlubz0lc1wmIzM0Oywgb3ZsX3hpbm9fbW9kZShcdTAwMjZvZnMtXHUwMDNlY29uZmlnKSk7XG4mIzQzO1x0XHRzYl9hZGRfb3B0aW9uKGN0eCwgXCYjMzQ7eGlub1wmIzM0Oywgb3ZsX3hpbm9fbW9kZShcdTAwMjZvZnMtXHUwMDNlY29uZmlnKSk7XG4gXHRpZiAob2ZzLVx1MDAzZWNvbmZpZy5tZXRhY29weSAhPSBvdmxfbWV0YWNvcHlfZGVmKVxuLVx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyxtZXRhY29weT0lc1wmIzM0Oywgc3RyX29uX29mZihvZnMtXHUwMDNlY29uZmlnLm1ldGFjb3B5KSk7XG4mIzQzO1x0XHRzYl9hZGRfb3B0aW9uKGN0eCwgXCYjMzQ7bWV0YWNvcHlcJiMzNDssIHN0cl9vbl9vZmYob2ZzLVx1MDAzZWNvbmZpZy5tZXRhY29weSkpO1xuIFx0aWYgKG9mcy1cdTAwM2Vjb25maWcuZnN5bmNfbW9kZSAhPSBvdmxfZnN5bmNfbW9kZV9kZWYoKSlcbi1cdFx0c2VxX3ByaW50ZihtLCBcJiMzNDssZnN5bmM9JXNcJiMzNDssIG92bF9mc3luY19tb2RlKFx1MDAyNm9mcy1cdTAwM2Vjb25maWcpKTtcbiYjNDM7XHRcdHNiX2FkZF9vcHRpb24oY3R4LCBcJiMzNDtmc3luY1wmIzM0Oywgb3ZsX2ZzeW5jX21vZGUoXHUwMDI2b2ZzLVx1MDAzZWNvbmZpZykpO1xuIFx0aWYgKG9mcy1cdTAwM2Vjb25maWcudXNlcnhhdHRyKVxuLVx0XHRzZXFfcHV0cyhtLCBcJiMzNDssdXNlcnhhdHRyXCYjMzQ7KTtcbiYjNDM7XHRcdHNiX2FkZF9vcHRpb24oY3R4LCBcJiMzNDt1c2VyeGF0dHJcJiMzNDssIE5VTEwpO1xuIFx0aWYgKG9mcy1cdTAwM2Vjb25maWcudmVyaXR5X21vZGUgIT0gb3ZsX3Zlcml0eV9tb2RlX2RlZigpKVxuLVx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0Oyx2ZXJpdHk9JXNcJiMzNDssXG4tXHRcdFx0ICAgb3ZsX3Zlcml0eV9tb2RlKFx1MDAyNm9mcy1cdTAwM2Vjb25maWcpKTtcbiYjNDM7XHRcdHNiX2FkZF9vcHRpb24oY3R4LCBcJiMzNDt2ZXJpdHlcJiMzNDssIG92bF92ZXJpdHlfbW9kZShcdTAwMjZvZnMtXHUwMDNlY29uZmlnKSk7XG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvZnMvb3ZlcmxheWZzL3BhcmFtcy5oIGIvZnMvb3ZlcmxheWZzL3BhcmFtcy5oXG5pbmRleCBmZmQ1M2NkZDg0ODI3Yy4uMmNmOWM0ZjE4OGE5Y2IgMTAwNjQ0XG4tLS0gYS9mcy9vdmVybGF5ZnMvcGFyYW1zLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL292ZXJsYXlmcy9wYXJhbXMuaFxuQEAgLTQwLDUgJiM0Mzs0MCw1IEBAIGludCBvdmxfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYyk7XG4gdm9pZCBvdmxfZnJlZV9mcyhzdHJ1Y3Qgb3ZsX2ZzICpvZnMpO1xuIGludCBvdmxfZnNfcGFyYW1zX3ZlcmlmeShjb25zdCBzdHJ1Y3Qgb3ZsX2ZzX2NvbnRleHQgKmN0eCxcbiBcdFx0XHQgc3RydWN0IG92bF9jb25maWcgKmNvbmZpZyk7XG4taW50IG92bF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuJiM0MztpbnQgb3ZsX2dldF9vcHRpb25zKHN0cnVjdCBzYl9vcHRfY3R4ICpjdHgsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG4gY29uc3QgY2hhciAqb3ZsX3hpbm9fbW9kZShzdHJ1Y3Qgb3ZsX2NvbmZpZyAqY29uZmlnKTtcbmRpZmYgLS1naXQgYS9mcy9vdmVybGF5ZnMvc3VwZXIuYyBiL2ZzL292ZXJsYXlmcy9zdXBlci5jXG5pbmRleCA2MGYwYjdjZWVmMGE2ZC4uNGI1N2IyZGIwODUyMjUgMTAwNjQ0XG4tLS0gYS9mcy9vdmVybGF5ZnMvc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvb3ZlcmxheWZzL3N1cGVyLmNcbkBAIC0zMDIsNyAmIzQzOzMwMiw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBvdmxfc3VwZXJfb3BlcmF0aW9ucyA9IHtcbiBcdC5wdXRfc3VwZXJcdD0gb3ZsX3B1dF9zdXBlcixcbiBcdC5zeW5jX2ZzXHQ9IG92bF9zeW5jX2ZzLFxuIFx0LnN0YXRmc1x0XHQ9IG92bF9zdGF0ZnMsXG4tXHQuc2hvd19vcHRpb25zXHQ9IG92bF9zaG93X29wdGlvbnMsXG4mIzQzO1x0LmdldF9vcHRpb25zXHQ9IG92bF9nZXRfb3B0aW9ucyxcbiB9O1xuIFxuICNkZWZpbmUgT1ZMX1dPUktESVJfTkFNRSBcJiMzNDt3b3JrXCYjMzQ7XG5AQCAtNTI5LDYgJiM0Mzs1MjksNyBAQCBzdGF0aWMgaW50IG92bF9nZXRfdXBwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IG92bF9mcyAqb2ZzLFxuIFxuIFx0LyogRG9uJiMzOTt0IGluaGVyaXQgYXRpbWUgZmxhZ3MgKi9cbiBcdHVwcGVyX21udC1cdTAwM2VtbnRfZmxhZ3MgXHUwMDI2PSB+KE1OVF9OT0FUSU1FIHwgTU5UX05PRElSQVRJTUUgfCBNTlRfUkVMQVRJTUUpO1xuJiM0MztcdHVwcGVyX21udC1cdTAwM2VtbnRfZmxhZ3MgfD0gTU5UX0NMT05BQkxFO1xuIFx0dXBwZXJfbGF5ZXItXHUwMDNlbW50ID0gdXBwZXJfbW50O1xuIFx0dXBwZXJfbGF5ZXItXHUwMDNlaWR4ID0gMDtcbiBcdHVwcGVyX2xheWVyLVx1MDAzZWZzaWQgPSAwO1xuQEAgLTExMDUsNyAmIzQzOzExMDYsNyBAQCBzdGF0aWMgaW50IG92bF9nZXRfbGF5ZXJzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBvdmxfZnMgKm9mcyxcbiBcdFx0ICogTWFrZSBsb3dlciBsYXllcnMgUi9PLiAgVGhhdCB3YXkgZmNobW9kL2ZjaG93biBvbiBsb3dlciBmaWxlXG4gXHRcdCAqIHdpbGwgZmFpbCBpbnN0ZWFkIG9mIG1vZGlmeWluZyBsb3dlciBmcy5cbiBcdFx0ICovXG4tXHRcdG1udC1cdTAwM2VtbnRfZmxhZ3MgfD0gTU5UX1JFQURPTkxZIHwgTU5UX05PQVRJTUU7XG4mIzQzO1x0XHRtbnQtXHUwMDNlbW50X2ZsYWdzIHw9IE1OVF9SRUFET05MWSB8IE1OVF9OT0FUSU1FIHwgTU5UX0NMT05BQkxFO1xuIFxuIFx0XHRsYXllcnNbb2ZzLVx1MDAzZW51bWxheWVyXS50cmFwID0gdHJhcDtcbiBcdFx0bGF5ZXJzW29mcy1cdTAwM2VudW1sYXllcl0ubW50ID0gbW50O1xuZGlmZiAtLWdpdCBhL2ZzL3BpZGZzLmMgYi9mcy9waWRmcy5jXG5pbmRleCBhYWE2MDlkZGFiMDQ0My4uMzg0M2FjZDY1OTRkZTAgMTAwNjQ0XG4tLS0gYS9mcy9waWRmcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9waWRmcy5jXG5AQCAtODQwLDcgJiM0Mzs4NDAsNyBAQCBzdGF0aWMgY2hhciAqcGlkZnNfZG5hbWUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpidWZmZXIsIGludCBidWZsZW4pXG4gXHRyZXR1cm4gZHluYW1pY19kbmFtZShidWZmZXIsIGJ1ZmxlbiwgXCYjMzQ7YW5vbl9pbm9kZTpbcGlkZmRdXCYjMzQ7KTtcbiB9XG4gXG4tY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHBpZGZzX2RlbnRyeV9vcGVyYXRpb25zID0ge1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHBpZGZzX2RlbnRyeV9vcGVyYXRpb25zID0ge1xuIFx0LmRfZG5hbWVcdD0gcGlkZnNfZG5hbWUsXG4gXHQuZF9wcnVuZVx0PSBzdGFzaGVkX2RlbnRyeV9wcnVuZSxcbiB9O1xuQEAgLTExNTEsNiAmIzQzOzExNTEsOCBAQCB2b2lkIF9faW5pdCBwaWRmc19pbml0KHZvaWQpXG4gXHRpZiAoSVNfRVJSKHBpZGZzX21udCkpXG4gXHRcdHBhbmljKFwmIzM0O0ZhaWxlZCB0byBtb3VudCBwaWRmcyBwc2V1ZG8gZmlsZXN5c3RlbVwmIzM0Oyk7XG4gXG4mIzQzO1x0cGlkZnNfbW50LVx1MDAzZW1udF9mbGFncyB8PSBNTlRfQ0xPTkFCTEU7XG4mIzQzO1xuIFx0cGlkZnNfcm9vdF9wYXRoLm1udCA9IHBpZGZzX21udDtcbiBcdHBpZGZzX3Jvb3RfcGF0aC5kZW50cnkgPSBwaWRmc19tbnQtXHUwMDNlbW50X3Jvb3Q7XG4gfVxuZGlmZiAtLWdpdCBhL2ZzL3Byb2NfbmFtZXNwYWNlLmMgYi9mcy9wcm9jX25hbWVzcGFjZS5jXG5pbmRleCA1YzU1NWRiNjhhYTIxMi4uOTRiYzRjOWFhNDNmMTYgMTAwNjQ0XG4tLS0gYS9mcy9wcm9jX25hbWVzcGFjZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9wcm9jX25hbWVzcGFjZS5jXG5AQCAtOTgsMjEgJiM0Mzs5OCwyNyBAQCBzdGF0aWMgdm9pZCBzaG93X3R5cGUoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0fVxuIH1cbiBcbiYjNDM7c3RhdGljIGludCBzaG93X2Rldm5hbWUoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgdmZzbW91bnQgKm1udClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBtbnQtXHUwMDNlbW50X3NiO1xuJiM0MztcbiYjNDM7XHRpZiAoc2ItXHUwMDNlc19vcC1cdTAwM2VzaG93X2Rldm5hbWUpXG4mIzQzO1x0XHRyZXR1cm4gc2ItXHUwMDNlc19vcC1cdTAwM2VzaG93X2Rldm5hbWUobSwgbW50LVx1MDAzZW1udF9yb290KTtcbiYjNDM7XG4mIzQzO1x0bWFuZ2xlKG0sIHNiLVx1MDAzZXNfZGV2bmFtZSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBzaG93X3Zmc21udChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB2ZnNtb3VudCAqbW50KVxuIHtcbiBcdHN0cnVjdCBwcm9jX21vdW50cyAqcCA9IG0tXHUwMDNlcHJpdmF0ZTtcbi1cdHN0cnVjdCBtb3VudCAqciA9IHJlYWxfbW91bnQobW50KTtcbiBcdHN0cnVjdCBwYXRoIG1udF9wYXRoID0geyAuZGVudHJ5ID0gbW50LVx1MDAzZW1udF9yb290LCAubW50ID0gbW50IH07XG4gXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gbW50X3BhdGguZGVudHJ5LVx1MDAzZWRfc2I7XG4gXHRpbnQgZXJyO1xuIFxuLVx0aWYgKHNiLVx1MDAzZXNfb3AtXHUwMDNlc2hvd19kZXZuYW1lKSB7XG4tXHRcdGVyciA9IHNiLVx1MDAzZXNfb3AtXHUwMDNlc2hvd19kZXZuYW1lKG0sIG1udF9wYXRoLmRlbnRyeSk7XG4tXHRcdGlmIChlcnIpXG4tXHRcdFx0Z290byBvdXQ7XG4tXHR9IGVsc2Uge1xuLVx0XHRtYW5nbGUobSwgci1cdTAwM2VtbnRfZGV2bmFtZSk7XG4tXHR9XG4mIzQzO1x0ZXJyID0gc2hvd19kZXZuYW1lKG0sIG1udCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gb3V0O1xuIFx0c2VxX3B1dGMobSwgJiMzOTsgJiMzOTspO1xuIFx0LyogbW91bnRwb2ludHMgb3V0c2lkZSBvZiBjaHJvb3QgamFpbCB3aWxsIGdpdmUgU0VRX1NLSVAgb24gdGhpcyAqL1xuIFx0ZXJyID0gc2VxX3BhdGhfcm9vdChtLCBcdTAwMjZtbnRfcGF0aCwgXHUwMDI2cC1cdTAwM2Vyb290LCBcJiMzNDsgXFx0XFxuXFxcXFwmIzM0Oyk7XG5AQCAtMTI1LDggJiM0MzsxMzEsNyBAQCBzdGF0aWMgaW50IHNob3dfdmZzbW50KHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHZmc21vdW50ICptbnQpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIG91dDtcbiBcdHNob3dfdmZzbW50X29wdHMobSwgbW50KTtcbi1cdGlmIChzYi1cdTAwM2VzX29wLVx1MDAzZXNob3dfb3B0aW9ucylcbi1cdFx0ZXJyID0gc2ItXHUwMDNlc19vcC1cdTAwM2VzaG93X29wdGlvbnMobSwgbW50X3BhdGguZGVudHJ5KTtcbiYjNDM7XHRlcnIgPSBtbnRfc2hvd19vcHRpb25zKG0sIG1udCk7XG4gXHRzZXFfcHV0cyhtLCBcJiMzNDsgMCAwXFxuXCYjMzQ7KTtcbiBvdXQ6XG4gXHRyZXR1cm4gZXJyO1xuQEAgLTE3MiwxOSAmIzQzOzE3NywxNCBAQCBzdGF0aWMgaW50IHNob3dfbW91bnRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHZmc21vdW50ICptbnQpXG4gXHRzZXFfcHV0cyhtLCBcJiMzNDsgLSBcJiMzNDspO1xuIFx0c2hvd190eXBlKG0sIHNiKTtcbiBcdHNlcV9wdXRjKG0sICYjMzk7ICYjMzk7KTtcbi1cdGlmIChzYi1cdTAwM2VzX29wLVx1MDAzZXNob3dfZGV2bmFtZSkge1xuLVx0XHRlcnIgPSBzYi1cdTAwM2VzX29wLVx1MDAzZXNob3dfZGV2bmFtZShtLCBtbnQtXHUwMDNlbW50X3Jvb3QpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdGdvdG8gb3V0O1xuLVx0fSBlbHNlIHtcbi1cdFx0bWFuZ2xlKG0sIHItXHUwMDNlbW50X2Rldm5hbWUpO1xuLVx0fVxuJiM0MztcdGVyciA9IHNob3dfZGV2bmFtZShtLCBtbnQpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiBcdHNlcV9wdXRzKG0sIHNiX3Jkb25seShzYikgPyBcJiMzNDsgcm9cJiMzNDsgOiBcJiMzNDsgcndcJiMzNDspO1xuIFx0ZXJyID0gc2hvd19zYl9vcHRzKG0sIHNiKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gb3V0O1xuLVx0aWYgKHNiLVx1MDAzZXNfb3AtXHUwMDNlc2hvd19vcHRpb25zKVxuLVx0XHRlcnIgPSBzYi1cdTAwM2VzX29wLVx1MDAzZXNob3dfb3B0aW9ucyhtLCBtbnQtXHUwMDNlbW50X3Jvb3QpO1xuJiM0MztcdGVyciA9IG1udF9zaG93X29wdGlvbnMobSwgbW50KTtcbiBcdHNlcV9wdXRjKG0sICYjMzk7XFxuJiMzOTspO1xuIG91dDpcbiBcdHJldHVybiBlcnI7XG5AQCAtMTkzLDIxICYjNDM7MTkzLDE1IEBAIHN0YXRpYyBpbnQgc2hvd19tb3VudGluZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgdmZzbW91bnQgKm1udClcbiBzdGF0aWMgaW50IHNob3dfdmZzc3RhdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB2ZnNtb3VudCAqbW50KVxuIHtcbiBcdHN0cnVjdCBwcm9jX21vdW50cyAqcCA9IG0tXHUwMDNlcHJpdmF0ZTtcbi1cdHN0cnVjdCBtb3VudCAqciA9IHJlYWxfbW91bnQobW50KTtcbiBcdHN0cnVjdCBwYXRoIG1udF9wYXRoID0geyAuZGVudHJ5ID0gbW50LVx1MDAzZW1udF9yb290LCAubW50ID0gbW50IH07XG4gXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gbW50X3BhdGguZGVudHJ5LVx1MDAzZWRfc2I7XG4gXHRpbnQgZXJyO1xuIFxuIFx0LyogZGV2aWNlICovXG4gXHRzZXFfcHV0cyhtLCBcJiMzNDtkZXZpY2UgXCYjMzQ7KTtcbi1cdGlmIChzYi1cdTAwM2VzX29wLVx1MDAzZXNob3dfZGV2bmFtZSkge1xuLVx0XHRlcnIgPSBzYi1cdTAwM2VzX29wLVx1MDAzZXNob3dfZGV2bmFtZShtLCBtbnRfcGF0aC5kZW50cnkpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdGdvdG8gb3V0O1xuLVx0fSBlbHNlIHtcbi1cdFx0bWFuZ2xlKG0sIHItXHUwMDNlbW50X2Rldm5hbWUpO1xuLVx0fVxuLVxuJiM0MztcdGVyciA9IHNob3dfZGV2bmFtZShtLCBtbnQpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiBcdC8qIG1vdW50IHBvaW50ICovXG4gXHRzZXFfcHV0cyhtLCBcJiMzNDsgbW91bnRlZCBvbiBcJiMzNDspO1xuIFx0LyogbW91bnRwb2ludHMgb3V0c2lkZSBvZiBjaHJvb3QgamFpbCB3aWxsIGdpdmUgU0VRX1NLSVAgb24gdGhpcyAqL1xuZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jXG5pbmRleCBhOGZkNjExMzZhYWZlNS4uZTU1MzFjYjg4Zjg5MTcgMTAwNjQ0XG4tLS0gYS9mcy9zdXBlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9zdXBlci5jXG5AQCAtMjgwLDYgJiM0MzsyODAsNyBAQCBzdGF0aWMgdm9pZCBkZXN0cm95X3N1cGVyX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0c2VjdXJpdHlfc2JfZnJlZShzKTtcbiBcdHB1dF91c2VyX25zKHMtXHUwMDNlc191c2VyX25zKTtcbiBcdGtmcmVlKHMtXHUwMDNlc19zdWJ0eXBlKTtcbiYjNDM7XHRrZnJlZV9jb25zdChzLVx1MDAzZXNfZGV2bmFtZSk7XG4gXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgU0JfRlJFRVpFX0xFVkVMUzsgaSYjNDM7JiM0MzspXG4gXHRcdHBlcmNwdV9mcmVlX3J3c2VtKFx1MDAyNnMtXHUwMDNlc193cml0ZXJzLnJ3X3NlbVtpXSk7XG4gXHRrZnJlZShzKTtcbkBAIC0zMTUsNyAmIzQzOzMxNiw3IEBAIHN0YXRpYyB2b2lkIGRlc3Ryb3lfdW51c2VkX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcylcbiAgKlx0cmV0dXJucyBhIHBvaW50ZXIgbmV3IHN1cGVyYmxvY2sgb3IgJU5VTEwgaWYgYWxsb2NhdGlvbiBoYWQgZmFpbGVkLlxuICAqL1xuIHN0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmFsbG9jX3N1cGVyKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlLCBpbnQgZmxhZ3MsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zKVxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsIGNvbnN0IGNoYXIgKm5hbWUpXG4ge1xuIFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzID0ga3phbGxvY19vYmooc3RydWN0IHN1cGVyX2Jsb2NrKTtcbiBcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBkZWZhdWx0X29wO1xuQEAgLTM0NCw2ICYjNDM7MzQ1LDEzIEBAIHN0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmFsbG9jX3N1cGVyKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlLCBpbnQgZmxhZ3MsXG4gXHQgKi9cbiBcdGRvd25fd3JpdGVfbmVzdGVkKFx1MDAyNnMtXHUwMDNlc191bW91bnQsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbiBcbiYjNDM7XHRpZiAobmFtZSlcbiYjNDM7XHRcdHMtXHUwMDNlc19kZXZuYW1lID0ga3N0cmR1cF9jb25zdChuYW1lLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHMtXHUwMDNlc19kZXZuYW1lID0gXCYjMzQ7bm9uZVwmIzM0OztcbiYjNDM7XHRpZiAoIXMtXHUwMDNlc19kZXZuYW1lKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcbiBcdGlmIChzZWN1cml0eV9zYl9hbGxvYyhzKSlcbiBcdFx0Z290byBmYWlsO1xuIFxuQEAgLTc2Myw3ICYjNDM7NzcxLDcgQEAgc3RydWN0IHN1cGVyX2Jsb2NrICpzZ2V0X2ZjKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbiBcdH1cbiBcdGlmICghcykge1xuIFx0XHRzcGluX3VubG9jayhcdTAwMjZzYl9sb2NrKTtcbi1cdFx0cyA9IGFsbG9jX3N1cGVyKGZjLVx1MDAzZWZzX3R5cGUsIGZjLVx1MDAzZXNiX2ZsYWdzLCB1c2VyX25zKTtcbiYjNDM7XHRcdHMgPSBhbGxvY19zdXBlcihmYy1cdTAwM2Vmc190eXBlLCBmYy1cdTAwM2VzYl9mbGFncywgdXNlcl9ucywgZmMtXHUwMDNlc291cmNlKTtcbiBcdFx0aWYgKCFzKVxuIFx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIFx0XHRnb3RvIHJldHJ5O1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmNudGwuaCBiL2luY2x1ZGUvbGludXgvZmNudGwuaFxuaW5kZXggNmFkNmI5ZTdhMjI2YWYuLmY5NDI0MTFjOGVkN2RlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9mY250bC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZjbnRsLmhcbkBAIC0xMSw3ICYjNDM7MTEsNyBAQFxuIFx0KE9fUkRPTkxZIHwgT19XUk9OTFkgfCBPX1JEV1IgfCBPX0NSRUFUIHwgT19FWENMIHwgT19OT0NUVFkgfCBPX1RSVU5DIHwgXFxcbiBcdCBPX0FQUEVORCB8IE9fTkRFTEFZIHwgT19OT05CTE9DSyB8IF9fT19TWU5DIHwgT19EU1lOQyB8IFxcXG4gXHQgRkFTWU5DXHR8IE9fRElSRUNUIHwgT19MQVJHRUZJTEUgfCBPX0RJUkVDVE9SWSB8IE9fTk9GT0xMT1cgfCBcXFxuLVx0IE9fTk9BVElNRSB8IE9fQ0xPRVhFQyB8IE9fUEFUSCB8IF9fT19UTVBGSUxFIHwgT19FTVBUWVBBVEgpXG4mIzQzO1x0IE9fTk9BVElNRSB8IE9fQ0xPRVhFQyB8IE9fUEFUSCB8IF9fT19UTVBGSUxFIHwgT19FTVBUWVBBVEggfCBPX0FMVClcbiBcbiAvKiBMaXN0IG9mIGFsbCB2YWxpZCBmbGFncyBmb3Igb3BlbmF0MigyKSYjMzk7cyBob3ctXHUwMDNlZmxhZ3MgYXJndW1lbnQuICovXG4gI2RlZmluZSBWQUxJRF9PUEVOQVQyX0ZMQUdTXHQoVkFMSURfT1BFTl9GTEFHUyB8IE9QRU5BVDJfUkVHVUxBUilcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyLmggYi9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyLmhcbmluZGV4IDQwNTYxMjY3ODExNTFlLi42ZjBkNzc4OTQwZjkwNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZnMvc3VwZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mcy9zdXBlci5oXG5AQCAtMjM3LDQgJiM0MzsyMzcsMTQgQEAgaW50IHRoYXdfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzdXBlciwgZW51bSBmcmVlemVfaG9sZGVyIHdobyxcbiBcbiBpbnQgc2JfaW5pdF9kaW9fZG9uZV93cShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbiBcbiYjNDM7c3RydWN0IHNiX29wdF9jdHgge1xuJiM0MztcdHZvaWQgKCphY3Rvcikoc3RydWN0IHNiX29wdF9jdHggKmN0eCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUsXG4mIzQzO1x0XHQgICAgICBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCk7XG4mIzQzO1x0dm9pZCAqZGF0YTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3ZvaWQgc2JfYWRkX29wdGlvbihzdHJ1Y3Qgc2Jfb3B0X2N0eCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSk7XG4mIzQzO3ZvaWQgc2JfYWRkX29wdGlvbl9wYXRoKHN0cnVjdCBzYl9vcHRfY3R4ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlLFxuJiM0MztcdFx0XHRjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCk7XG4mIzQzO1xuICNlbmRpZiAvKiBfTElOVVhfRlNfU1VQRVJfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMvc3VwZXJfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvZnMvc3VwZXJfdHlwZXMuaFxuaW5kZXggZWY3OTQxZTlkYzc5YWMuLmYyMDU3NTlhZjFhNjMzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9mcy9zdXBlcl90eXBlcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyX3R5cGVzLmhcbkBAIC0zNiw2ICYjNDM7MzYsNyBAQCBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdDtcbiBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2w7XG4gc3RydWN0IHhhdHRyX2hhbmRsZXI7XG4gc3RydWN0IGZzZXJyb3JfZXZlbnQ7XG4mIzQzO3N0cnVjdCBzYl9vcHRfY3R4O1xuIFxuIGV4dGVybiBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmJsb2NrZGV2X3N1cGVyYmxvY2s7XG4gXG5AQCAtOTksNiAmIzQzOzEwMCw3IEBAIHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHtcbiBcdGludCAoKnN0YXRmcykoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqa3N0YXRmcyk7XG4gXHR2b2lkICgqdW1vdW50X2JlZ2luKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbiBcbiYjNDM7XHRpbnQgKCpnZXRfb3B0aW9ucykoc3RydWN0IHNiX29wdF9jdHggKmN0eCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbiBcdGludCAoKnNob3dfb3B0aW9ucykoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG4gXHRpbnQgKCpzaG93X2Rldm5hbWUpKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuIFx0aW50ICgqc2hvd19wYXRoKShzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbkBAIC0yODMsNiAmIzQzOzI4NSw4IEBAIHN0cnVjdCBzdXBlcl9ibG9jayB7XG4gXHQgKi9cbiBcdGF0b21pY190XHRcdFx0XHRzX2lzd19ucl9pbl9mbGlnaHQ7XG4gI2VuZGlmXG4mIzQzO1x0LyogTmFtZSBvZiBkZXZpY2UgZS5nLiAvZGV2L2Rzay9oZGExICovXG4mIzQzO1x0Y29uc3QgY2hhciBcdFx0XHRcdCpzX2Rldm5hbWU7XG4gfSBfX3JhbmRvbWl6ZV9sYXlvdXQ7XG4gXG4gLypcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vdW50LmggYi9pbmNsdWRlL2xpbnV4L21vdW50LmhcbmluZGV4IGFjZmU3ZWY4NmExYjNmLi5kMDcxODU1Y2E0ZWRlYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW91bnQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tb3VudC5oXG5AQCAtNDQsNiAmIzQzOzQ0LDcgQEAgZW51bSBtb3VudF9mbGFncyB7XG4gXHRNTlRfTE9DS0VEXHRcdD0gMHg4MDAwMDAsXG4gXHRNTlRfRE9PTUVEXHRcdD0gMHgxMDAwMDAwLFxuIFx0TU5UX1NZTkNfVU1PVU5UXHRcdD0gMHgyMDAwMDAwLFxuJiM0MztcdE1OVF9DTE9OQUJMRVx0XHQ9IDB4NDAwMDAwMCxcbiBcdE1OVF9VTU9VTlRcdFx0PSAweDgwMDAwMDAsXG4gXG4gXHRNTlRfVVNFUl9TRVRUQUJMRV9NQVNLICA9IE1OVF9OT1NVSUQgfCBNTlRfTk9ERVYgfCBNTlRfTk9FWEVDXG5AQCAtNTIsNyAmIzQzOzUzLDcgQEAgZW51bSBtb3VudF9mbGFncyB7XG4gXHRNTlRfQVRJTUVfTUFTSyA9IE1OVF9OT0FUSU1FIHwgTU5UX05PRElSQVRJTUUgfCBNTlRfUkVMQVRJTUUsXG4gXG4gXHRNTlRfSU5URVJOQUxfRkxBR1MgPSBNTlRfSU5URVJOQUwgfCBNTlRfRE9PTUVEIHxcbi1cdFx0XHQgICAgIE1OVF9TWU5DX1VNT1VOVCB8IE1OVF9MT0NLRURcbiYjNDM7XHRcdFx0ICAgICBNTlRfU1lOQ19VTU9VTlQgfCBNTlRfTE9DS0VEIHwgTU5UX0NMT05BQkxFXG4gfTtcbiBcbiBzdHJ1Y3QgdmZzbW91bnQge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmFtZWkuaCBiL2luY2x1ZGUvbGludXgvbmFtZWkuaFxuaW5kZXggZWJlNmUyOWY3ZTkzYmEuLmMyMWRjNjUzNjkwMGNmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uYW1laS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25hbWVpLmhcbkBAIC0yNSw3ICYjNDM7MjUsOCBAQCBlbnVtIHsgTUFYX05FU1RFRF9MSU5LUyA9IDggfTtcbiAjZGVmaW5lIExPT0tVUF9SQ1VcdFx0QklUKDgpXHQvKiBSQ1UgcGF0aHdhbGsgbW9kZTsgc2VtaS1pbnRlcm5hbCAqL1xuICNkZWZpbmUgTE9PS1VQX0NBQ0hFRFx0XHRCSVQoOSkgLyogT25seSBkbyBjYWNoZWQgbG9va3VwICovXG4gI2RlZmluZSBMT09LVVBfUEFSRU5UXHRcdEJJVCgxMClcdC8qIExvb2tpbmcgdXAgZmluYWwgcGFyZW50IGluIHBhdGggKi9cbi0vKiA1IHNwYXJlIGJpdHMgZm9yIHBhdGh3YWxrICovXG4mIzQzOyNkZWZpbmUgTE9PS1VQX0FMVFx0XHRCSVQoMTEpIC8qIExvb2sgdXAgaW4gYWx0ZXJuYXRpdmUgbmFtZXNwYWNlICovXG4mIzQzOy8qIDQgc3BhcmUgYml0cyBmb3IgcGF0aHdhbGsgKi9cbiBcbiAvKiBUaGVzZSB0ZWxsIGZpbGVzeXN0ZW0gbWV0aG9kcyB0aGF0IHdlIGFyZSBkZWFsaW5nIHdpdGggdGhlIGZpbmFsIGNvbXBvbmVudC4uLiAqL1xuICNkZWZpbmUgTE9PS1VQX09QRU5cdFx0QklUKDE2KVx0LyogLi4uIGluIG9wZW4gKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BpZGZzLmggYi9pbmNsdWRlL2xpbnV4L3BpZGZzLmhcbmluZGV4IDBhYmY3ZGE5YWIyMzZlLi5mYWI2ZjQ4ZmYyMDMzNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGlkZnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waWRmcy5oXG5AQCAtMTUsNyAmIzQzOzE1LDYgQEAgdm9pZCBwaWRmc19leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTtcbiAjaWZkZWYgQ09ORklHX0NPUkVEVU1QXG4gdm9pZCBwaWRmc19jb3JlZHVtcChjb25zdCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKTtcbiAjZW5kaWZcbi1leHRlcm4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHBpZGZzX2RlbnRyeV9vcGVyYXRpb25zO1xuIGludCBwaWRmc19yZWdpc3Rlcl9waWRfZ2ZwKHN0cnVjdCBwaWQgKnBpZCwgZ2ZwX3QgZ2ZwKTtcbiBcbiAvKipcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvZmNudGwuaCBiL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9mY250bC5oXG5pbmRleCA4ODNjZmQ3ZGUyZWZmYS4uNzBkYmJhYzFjNTIwNzggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvZmNudGwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL2ZjbnRsLmhcbkBAIC05Niw2ICYjNDM7OTYsMTAgQEBcbiAjZGVmaW5lIE9fRU1QVFlQQVRIXHQoMSBcdTAwM2NcdTAwM2MgMjYpXHQvKiBhbGxvdyBlbXB0eSBwYXRoICovXG4gI2VuZGlmXG4gXG4mIzQzOyNpZm5kZWYgT19BTFRcbiYjNDM7I2RlZmluZSBPX0FMVFx0XHQoMSBcdTAwM2NcdTAwM2MgMjcpXHQvKiBPcGVuIGluIGFsdGVybmF0aXZlIG5hbWVzcGFjZSAqL1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gLyogYSBob3JyaWQga2x1ZGdlIHRyeWluZyB0byBtYWtlIHN1cmUgdGhhdCB0aGlzIHdpbGwgZmFpbCBvbiBvbGQga2VybmVscyAqL1xuICNkZWZpbmUgT19UTVBGSUxFIChfX09fVE1QRklMRSB8IE9fRElSRUNUT1JZKVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9tb3VudC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L21vdW50LmhcbmluZGV4IDIyMDQ3MDhkYmY3YTU4Li42ZTc5NGQyMTRjZjk4MyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9tb3VudC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvbW91bnQuaFxuQEAgLTYzLDYgJiM0Mzs2Myw3IEBAXG4gICovXG4gI2RlZmluZSBPUEVOX1RSRUVfQ0xPTkVcdFx0KDEgXHUwMDNjXHUwMDNjIDApXHQvKiBDbG9uZSB0aGUgdGFyZ2V0IHRyZWUgYW5kIGF0dGFjaCB0aGUgY2xvbmUgKi9cbiAjZGVmaW5lIE9QRU5fVFJFRV9OQU1FU1BBQ0VcdCgxIFx1MDAzY1x1MDAzYyAxKVx0LyogQ2xvbmUgdGhlIHRhcmdldCB0cmVlIGludG8gYSBuZXcgbW91bnQgbmFtZXNwYWNlICovXG4mIzQzOyNkZWZpbmUgT1BFTl9UUkVFX0FMVFx0XHQoMSBcdTAwM2NcdTAwM2MgMilcdC8qIExvb2t1cCBpbiBhbHRlcm5hdGl2ZSBuYW1lc3BhY2UgKi9cbiAjZGVmaW5lIE9QRU5fVFJFRV9DTE9FWEVDXHRPX0NMT0VYRUNcdC8qIENsb3NlIHRoZSBmaWxlIG9uIGV4ZWN2ZSgpICovXG4gXG4gLypcbmRpZmYgLS1naXQgYS9zY3JpcHRzL2dkYi9saW51eC9wcm9jLnB5IGIvc2NyaXB0cy9nZGIvbGludXgvcHJvYy5weVxuaW5kZXggNjVkZDFiZDEyOTY0MWQuLjVhYWYyZGQ4ZGIwNWExIDEwMDY0NFxuLS0tIGEvc2NyaXB0cy9nZGIvbGludXgvcHJvYy5weVxuJiM0MzsmIzQzOyYjNDM7IGIvc2NyaXB0cy9nZGIvbGludXgvcHJvYy5weVxuQEAgLTE3NCw5ICYjNDM7MTc0LDYgQEAgdmFsdWVzIG9mIHRoYXQgcHJvY2VzcyBuYW1lc3BhY2VcJiMzNDtcJiMzNDtcJiMzNDtcbiAgICAgICAgICAgICAgICAgICBcJiMzNDttb3VudFwmIzM0OywgXCYjMzQ7c3VwZXJfYmxvY2tcJiMzNDssIFwmIzM0O2Rldm5hbWVcJiMzNDssIFwmIzM0O3BhdGhuYW1lXCYjMzQ7LCBcJiMzNDtmc3R5cGVcJiMzNDspKVxuIFxuICAgICAgICAgZm9yIG1udCBpbiByYnRyZWUucmJfaW5vcmRlcl9mb3JfZWFjaF9lbnRyeShuYW1lc3BhY2VbJiMzOTttb3VudHMmIzM5O10sIG1vdW50X3B0cl90eXBlLCBcJiMzNDttbnRfbm9kZVwmIzM0Oyk6XG4tICAgICAgICAgICAgZGV2bmFtZSA9IG1udFsmIzM5O21udF9kZXZuYW1lJiMzOTtdLnN0cmluZygpXG4tICAgICAgICAgICAgZGV2bmFtZSA9IGRldm5hbWUgaWYgZGV2bmFtZSBlbHNlIFwmIzM0O25vbmVcJiMzNDtcbi1cbiAgICAgICAgICAgICBwYXRobmFtZSA9IFwmIzM0O1wmIzM0O1xuICAgICAgICAgICAgIHBhcmVudCA9IG1udFxuICAgICAgICAgICAgIHdoaWxlIFRydWU6XG5AQCAtMTkwLDYgJiM0MzsxODcsOCBAQCB2YWx1ZXMgb2YgdGhhdCBwcm9jZXNzIG5hbWVzcGFjZVwmIzM0O1wmIzM0O1wmIzM0O1xuICAgICAgICAgICAgICAgICBwYXRobmFtZSA9IFwmIzM0Oy9cJiMzNDtcbiBcbiAgICAgICAgICAgICBzdXBlcmJsb2NrID0gbW50WyYjMzk7bW50JiMzOTtdWyYjMzk7bW50X3NiJiMzOTtdXG4mIzQzOyAgICAgICAgICAgIGRldm5hbWUgPSBzdXBlcmJsb2NrWyYjMzk7c19kZXZuYW1lJiMzOTtdLnN0cmluZygpXG4mIzQzOyAgICAgICAgICAgIGRldm5hbWUgPSBkZXZuYW1lIGlmIGRldm5hbWUgZWxzZSBcJiMzNDtub25lXCYjMzQ7XG4gICAgICAgICAgICAgZnN0eXBlID0gc3VwZXJibG9ja1smIzM5O3NfdHlwZSYjMzk7XVsmIzM5O25hbWUmIzM5O10uc3RyaW5nKClcbiAgICAgICAgICAgICBzX2ZsYWdzID0gaW50KHN1cGVyYmxvY2tbJiMzOTtzX2ZsYWdzJiMzOTtdKVxuICAgICAgICAgICAgIG1fZmxhZ3MgPSBpbnQobW50WyYjMzk7bW50JiMzOTtdWyYjMzk7bW50X2ZsYWdzJiMzOTtdKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDE2OjA4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VST0ZTX0ZTJiMzNDssCiAgICAmIzM0O09WRVJMQVlfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZXRhZnNfZ2V0X3Jvb3QmIzM0OywKICAgICYjMzQ7bWV0YWZzX2NyZWF0ZV9yb290JiMzNDssCiAgICAmIzM0O21ldGFmc19yb290X2xvb2t1cCYjMzQ7LAogICAgJiMzNDttZXRhZnNfbW91bnRfbG9va3VwJiMzNDssCiAgICAmIzM0O21ldGFmc19vcHRpb25zX2xvb2t1cCYjMzQ7LAogICAgJiMzNDttZXRhZnNfb3B0aW9uX3ZhbHVlc19sb29rdXAmIzM0OywKICAgICYjMzQ7bWV0YWZzX2dldF9vcHRpb25fdmFsdWVzJiMzNDssCiAgICAmIzM0O21ldGFmc19nZXRfbGluayYjMzQ7LAogICAgJiMzNDttZXRhZnNfcmVhZGxpbmsmIzM0OywKICAgICYjMzQ7bW50X3Nob3dfb3B0aW9ucyYjMzQ7LAogICAgJiMzNDtzYl9hZGRfb3B0aW9uJiMzNDssCiAgICAmIzM0O3NiX2FkZF9vcHRpb25fcGF0aCYjMzQ7LAogICAgJiMzNDtvdmxfZ2V0X29wdGlvbnMmIzM0OywKICAgICYjMzQ7ZXJvZnNfZ2V0X29wdGlvbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyB2aXJ0dWFsIGZpbGVzeXN0ZW0gYG1ldGFmc2AgdGhhdCBleHBvc2VzIG1ldGFkYXRhIGFib3V0IGZpbGVzIGFuZCBmaWxlc3lzdGVtcyB2aWEgdGhlIGBPX0FMVGAgZmxhZy4gSXQgYWxzbyBpbnRyb2R1Y2VzIGEgbmV3IGBnZXRfb3B0aW9uc2Agc3VwZXIgb3BlcmF0aW9uLCBpbXBsZW1lbnRlZCBieSBgZXJvZnNgIGFuZCBgb3ZlcmxheWZzYC4gVGhlc2UgYXJlIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgVkZTIGFuZCBzcGVjaWZpYyBmaWxlc3lzdGVtcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc4YzhkOWU5MzRjZThhOWJjMWFlMGM5OTRmNDYzODU0YmQyZjk4MTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAxNSAxNjowODoyMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdAppbmRleCA3Yzc1MzE0OGFmODg4My4uM2RjNDMxYjZjZGJiMGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QKQEAgLTMxNCw3ICYjNDM7MzE0LDcgQEAgb3IgYm90dG9tIGhhbGYpLgogYGBzaG93X2Rldm5hbWVgYAogCU9wdGlvbmFsLiBDYWxsZWQgYnkgdGhlIFZGUyB0byBzaG93IGRldmljZSBuYW1lIGZvcgogCS9wcm9jLyZsdDtwaWQmZ3Q7L3ttb3VudHMsbW91bnRpbmZvLG1vdW50c3RhdHN9LiBJZiBub3QgcHJvdmlkZWQgdGhlbgotCSYjMzk7KHN0cnVjdCBtb3VudCkubW50X2Rldm5hbWUmIzM5OyB3aWxsIGJlIHVzZWQuCiYjNDM7CSYjMzk7KHN0cnVjdCBzdXBlcl9ibG9jaykuc19kZXZuYW1lJiMzOTsgd2lsbCBiZSB1c2VkLgogCiBgYHNob3dfcGF0aGBgCiAJT3B0aW9uYWwuIENhbGxlZCBieSB0aGUgVkZTIChmb3IgL3Byb2MvJmx0O3BpZCZndDsvbW91bnRpbmZvKSB0byBzaG93CmRpZmYgLS1naXQgYS9mcy9NYWtlZmlsZSBiL2ZzL01ha2VmaWxlCmluZGV4IDg5YThhOWQyMDdkMWM1Li44N2E0YzIzZDVhMDhkZSAxMDA2NDQKLS0tIGEvZnMvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZnMvTWFrZWZpbGUKQEAgLTU4LDYgJiM0Mzs1OCw4IEBAIG9iai0kKENPTkZJR19DT05GSUdGU19GUykJJiM0Mzs9IGNvbmZpZ2ZzLwogb2JqLXkJCQkJJiM0Mzs9IGRldnB0cy8KIAogb2JqLSQoQ09ORklHX0RMTSkJCSYjNDM7PSBkbG0vCiYjNDM7CiYjNDM7b2JqLXkJCQkJJiM0Mzs9IG1ldGFmcy8KICAKICMgRG8gbm90IGFkZCBhbnkgZmlsZXN5c3RlbXMgYmVmb3JlIHRoaXMgbGluZQogb2JqLSQoQ09ORklHX05FVEZTX1NVUFBPUlQpCSYjNDM7PSBuZXRmcy8KZGlmZiAtLWdpdCBhL2ZzL2Vyb2ZzL3N1cGVyLmMgYi9mcy9lcm9mcy9zdXBlci5jCmluZGV4IDg2ZmE1YzZhMGM3MDg3Li4yNTc1MTdjMjhlMWQzOCAxMDA2NDQKLS0tIGEvZnMvZXJvZnMvc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9lcm9mcy9zdXBlci5jCkBAIC0xMDI4LDI5ICYjNDM7MTAyOCwzNCBAQCBzdGF0aWMgaW50IGVyb2ZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZXJvZnNfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgZGVudHJ5ICpyb290KQomIzQzO3N0YXRpYyBpbnQgZXJvZnNfZ2V0X29wdGlvbnMoc3RydWN0IHNiX29wdF9jdHggKmN0eCwgc3RydWN0IGRlbnRyeSAqcm9vdCkKIHsKIAlzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gRVJPRlNfU0Iocm9vdC0mZ3Q7ZF9zYik7CiAJc3RydWN0IGVyb2ZzX21vdW50X29wdHMgKm9wdCA9ICZhbXA7c2JpLSZndDtvcHQ7CiAKJiM0MzsJaWYgKHNiaS0mZ3Q7ZGlmMC5maWxlKQomIzQzOwkJc2JfYWRkX29wdGlvbl9wYXRoKGN0eCwgJiMzNDtzb3VyY2UmIzM0OywgTlVMTCwgJmFtcDtzYmktJmd0O2RpZjAuZmlsZS0mZ3Q7Zl9wYXRoKTsKJiM0MzsKIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfRVJPRlNfRlNfWEFUVFIpKQotCQlzZXFfcHV0cyhzZXEsIHRlc3Rfb3B0KG9wdCwgWEFUVFJfVVNFUikgPwotCQkJCSYjMzQ7LHVzZXJfeGF0dHImIzM0OyA6ICYjMzQ7LG5vdXNlcl94YXR0ciYjMzQ7KTsKJiM0MzsJCXNiX2FkZF9vcHRpb24oY3R4LCB0ZXN0X29wdChvcHQsIFhBVFRSX1VTRVIpID8KJiM0MzsJCQkgICAgICAmIzM0O3VzZXJfeGF0dHImIzM0OyA6ICYjMzQ7bm91c2VyX3hhdHRyJiMzNDssIE5VTEwpOwogCWlmIChJU19FTkFCTEVEKENPTkZJR19FUk9GU19GU19QT1NJWF9BQ0wpKQotCQlzZXFfcHV0cyhzZXEsIHRlc3Rfb3B0KG9wdCwgUE9TSVhfQUNMKSA/ICYjMzQ7LGFjbCYjMzQ7IDogJiMzNDssbm9hY2wmIzM0Oyk7CiYjNDM7CQlzYl9hZGRfb3B0aW9uKGN0eCwgdGVzdF9vcHQob3B0LCBQT1NJWF9BQ0wpID8gJiMzNDthY2wmIzM0OyA6ICYjMzQ7bm9hY2wmIzM0OywgTlVMTCk7CiAJaWYgKElTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX1pJUCkpCi0JCXNlcV9wcmludGYoc2VxLCAmIzM0OyxjYWNoZV9zdHJhdGVneT0lcyYjMzQ7LAomIzQzOwkJc2JfYWRkX29wdGlvbihjdHgsICYjMzQ7Y2FjaGVfc3RyYXRlZ3kmIzM0OywKIAkJCSAgZXJvZnNfcGFyYW1fY2FjaGVfc3RyYXRlZ3lbb3B0LSZndDtjYWNoZV9zdHJhdGVneV0ubmFtZSk7CiAJaWYgKHRlc3Rfb3B0KG9wdCwgREFYX0FMV0FZUykpCi0JCXNlcV9wdXRzKHNlcSwgJiMzNDssZGF4PWFsd2F5cyYjMzQ7KTsKJiM0MzsJCXNiX2FkZF9vcHRpb24oY3R4LCAmIzM0O2RheCYjMzQ7LCAmIzM0O2Fsd2F5cyYjMzQ7KTsKIAlpZiAodGVzdF9vcHQob3B0LCBEQVhfTkVWRVIpKQotCQlzZXFfcHV0cyhzZXEsICYjMzQ7LGRheD1uZXZlciYjMzQ7KTsKJiM0MzsJCXNiX2FkZF9vcHRpb24oY3R4LCAmIzM0O2RheCYjMzQ7LCAmIzM0O25ldmVyJiMzNDspOwogCWlmIChlcm9mc19pc19maWxlaW9fbW9kZShzYmkpICZhbXA7JmFtcDsgdGVzdF9vcHQob3B0LCBESVJFQ1RfSU8pKQotCQlzZXFfcHV0cyhzZXEsICYjMzQ7LGRpcmVjdGlvJiMzNDspOwotCWlmIChzYmktJmd0O2RpZjAuZnNvZmYpCi0JCXNlcV9wcmludGYoc2VxLCAmIzM0Oyxmc29mZnNldD0lbGx1JiMzNDssIHNiaS0mZ3Q7ZGlmMC5mc29mZik7CiYjNDM7CQlzYl9hZGRfb3B0aW9uKGN0eCwgJiMzNDtkaXJlY3RpbyYjMzQ7LCBOVUxMKTsKJiM0MzsJaWYgKHNiaS0mZ3Q7ZGlmMC5mc29mZikgewomIzQzOwkJY2hhciAqdmFsIF9fZnJlZShrZnJlZSkgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgJiMzNDslbGx1JiMzNDssIHNiaS0mZ3Q7ZGlmMC5mc29mZik7CiYjNDM7CQlzYl9hZGRfb3B0aW9uKGN0eCwgJiMzNDtmc29mZnNldCYjMzQ7LCB2YWwpOwomIzQzOwl9CiAJaWYgKHRlc3Rfb3B0KG9wdCwgSU5PREVfU0hBUkUpKQotCQlzZXFfcHV0cyhzZXEsICYjMzQ7LGlub2RlX3NoYXJlJiMzNDspOwomIzQzOwkJc2JfYWRkX29wdGlvbihjdHgsICYjMzQ7aW5vZGVfc2hhcmUmIzM0OywgTlVMTCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwNjksNyAmIzQzOzEwNzQsNyBAQCBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBlcm9mc19zb3BzID0gewogCS5mcmVlX2lub2RlID0gZXJvZnNfZnJlZV9pbm9kZSwKIAkuZXZpY3RfaW5vZGUgPSBlcm9mc19ldmljdF9pbm9kZSwKIAkuc3RhdGZzID0gZXJvZnNfc3RhdGZzLAotCS5zaG93X29wdGlvbnMgPSBlcm9mc19zaG93X29wdGlvbnMsCiYjNDM7CS5nZXRfb3B0aW9ucyA9IGVyb2ZzX2dldF9vcHRpb25zLAogfTsKIAogbW9kdWxlX2luaXQoZXJvZnNfbW9kdWxlX2luaXQpOwpkaWZmIC0tZ2l0IGEvZnMvZmNudGwuYyBiL2ZzL2ZjbnRsLmMKaW5kZXggYzE1OGYwODJmMWRhNGYuLjAxYjc2NWNmYWM4NDc5IDEwMDY0NAotLS0gYS9mcy9mY250bC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZjbnRsLmMKQEAgLTExNjksNyAmIzQzOzExNjksNyBAQCBzdGF0aWMgaW50IF9faW5pdCBmY250bF9pbml0KHZvaWQpCiAJICogRXhjZXB0aW9uczogT19OT05CTE9DSyBpcyBhIHR3byBiaXQgZGVmaW5lIG9uIHBhcmlzYzsgT19OREVMQVkKIAkgKiBpcyBkZWZpbmVkIGFzIE9fTk9OQkxPQ0sgb24gc29tZSBwbGF0Zm9ybXMgYW5kIG5vdCBvbiBvdGhlcnMuCiAJICovCi0JQlVJTERfQlVHX09OKDIyIC0gMSAvKiBmb3IgT19SRE9OTFkgYmVpbmcgMCAqLyAhPQomIzQzOwlCVUlMRF9CVUdfT04oMjMgLSAxIC8qIGZvciBPX1JET05MWSBiZWluZyAwICovICE9CiAJCUhXRUlHSFQzMigKIAkJCShWQUxJRF9PUEVOX0ZMQUdTICZhbXA7IH4oT19OT05CTE9DSyB8IE9fTkRFTEFZKSkgfAogCQkJX19GTU9ERV9FWEVDIHwgX19PX1JFR1VMQVIpKTsKZGlmZiAtLWdpdCBhL2ZzL2ludGVybmFsLmggYi9mcy9pbnRlcm5hbC5oCmluZGV4IDM1NWQ5M2Y5MjIwODYxLi5lNzNhNWMxZDViNGVlMSAxMDA2NDQKLS0tIGEvZnMvaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9pbnRlcm5hbC5oCkBAIC05NSw2ICYjNDM7OTUsNyBAQCBpbnQgcGF0aF91bW91bnQoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIGludCBmbGFncyk7CiBpbnQgcGF0aF9waXZvdF9yb290KHN0cnVjdCBwYXRoICpuZXcsIHN0cnVjdCBwYXRoICpvbGQpOwogCiBpbnQgc2hvd19wYXRoKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRlbnRyeSAqcm9vdCk7CiYjNDM7aW50IG1udF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCB2ZnNtb3VudCAqbW50KTsKIAogLyoKICAqIGZzX3N0cnVjdC5jCmRpZmYgLS1naXQgYS9mcy9tZXRhZnMvTWFrZWZpbGUgYi9mcy9tZXRhZnMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmY4NTViNDhkOWMyYjkwCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbWV0YWZzL01ha2VmaWxlCkBAIC0wLDAgJiM0MzsxLDYgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsjCiYjNDM7IyBNYWtlZmlsZSBmb3IgbWV0YSBmaWxlc3lzdGVtCiYjNDM7IwomIzQzOwomIzQzO29iai15IDo9IG1ldGFmcy5vCmRpZmYgLS1naXQgYS9mcy9tZXRhZnMvbWV0YWZzLmMgYi9mcy9tZXRhZnMvbWV0YWZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjE1ZWMwYjYwNjRkYTM4Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbWV0YWZzL21ldGFmcy5jCkBAIC0wLDAgJiM0MzsxLDU3MiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBtZXRhZnMgLSB2aXJ0dWFsIGZpbGVzeXN0ZW0gZm9yIG1ldGFkYXRhIGFjY2VzcwomIzQzOyAqCiYjNDM7ICogVGhpcyBwcm92aWRlcyBhIHdheSB0byBhY2Nlc3MgbWV0YWRhdGEgYWJvdXQgZmlsZXMgYW5kIGZpbGVzeXN0ZW1zCiYjNDM7ICogdGhyb3VnaCBPX0FMVCBmaWxlIGRlc2NyaXB0b3JzLgomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9mcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pbml0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tYWdpYy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tb3VudC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9uYW1laS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RjYWNoZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wc2V1ZG9fZnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZnMvc3VwZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O21ldGFmcy5oJiMzNDsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIG1ldGFmcyBzdXBlcmJsb2NrIGFuZCBtb3VudAomIzQzOyAqLwomIzQzO3N0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKm1ldGFmc19tbnQgX19yb19hZnRlcl9pbml0OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBtZXRhZnNfb3BzID0gewomIzQzOwkuc3RhdGZzCQk9IHNpbXBsZV9zdGF0ZnMsCiYjNDM7CS5kcm9wX2lub2RlCT0gaW5vZGVfanVzdF9kcm9wLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBtZXRhZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwc2V1ZG9fZnNfY29udGV4dCAqY3R4ID0gaW5pdF9wc2V1ZG8oZmMsIDB4NGQ0NTU0NDEpOyAvKiAmIzM5O01FVEEmIzM5OyAqLwomIzQzOwlpZiAoIWN0eCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwljdHgtJmd0O29wcyA9ICZhbXA7bWV0YWZzX29wczsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBtZXRhZnNfdHlwZSA9IHsKJiM0MzsJLm5hbWUgPSAmIzM0O21ldGFmcyYjMzQ7LAomIzQzOwkuaW5pdF9mc19jb250ZXh0ID0gbWV0YWZzX2luaXRfZnNfY29udGV4dCwKJiM0MzsJLmtpbGxfc2IgPSBraWxsX2Fub25fc3VwZXIsCiYjNDM7fTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIE1vdW50IG9wdGlvbiBjb2xsZWN0aW9uIHN0cnVjdHVyZXMKJiM0MzsgKi8KJiM0MztlbnVtIG1ldGFmc19kZW50cnlfdHlwZSB7CiYjNDM7CU1FVEFGU19ST09ULAomIzQzOwlNRVRBRlNfT1BUSU9OX1ZBTFVFUywKJiM0MzsJTUVUQUZTX1NZTUxJTkssCiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgbWV0YWZzX29wdGlvbl9lbnRyeSB7CiYjNDM7CWNoYXIgKnZhbHVlOwomIzQzOwlzdHJ1Y3QgcGF0aCBwYXRoOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IG1ldGFmc19kZW50cnlfaW5mbyB7CiYjNDM7CWVudW0gbWV0YWZzX2RlbnRyeV90eXBlIHR5cGU7CiYjNDM7CXVuaW9uIHsKJiM0MzsJCXN0cnVjdCB7CiYjNDM7CQkJc3RydWN0IGZpbGUgKmJhc2U7CiYjNDM7CQl9IHJvb3Q7CiYjNDM7CQlzdHJ1Y3QgewomIzQzOwkJCXN0cnVjdCBtZXRhZnNfb3B0aW9uX2VudHJ5ICplbnRyaWVzOwomIzQzOwkJCWludCBjb3VudDsKJiM0MzsJCX0gb3B0X3ZhbHVlczsKJiM0MzsJCXN0cnVjdCBtZXRhZnNfb3B0aW9uX2VudHJ5IHN5bWxpbms7CiYjNDM7CX07CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgbWV0YWZzX2NvbGxlY3RfY3R4IHsKJiM0MzsJc3RydWN0IHNiX29wdF9jdHggY3R4OwomIzQzOwljb25zdCBjaGFyICp0YXJnZXRfbmFtZTsKJiM0MzsJc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsKJiM0MzsJc3RydWN0IG1ldGFmc19vcHRpb25fZW50cnkgKmVudHJpZXM7CiYjNDM7CWludCBjb3VudDsKJiM0MzsJaW50IHNpemU7CiYjNDM7CWludCBlcnI7CiYjNDM7CWJvb2wgaXNfc291cmNlOwomIzQzO307CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDb2xsZWN0IHNwZWNpZmljIG1vdW50IG9wdGlvbiB2YWx1ZXMgZnJvbSB0aGUgYmFzZSBmaWxlc3lzdGVtCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgbWV0YWZzX2NvbGxlY3Rfb3B0aW9uKHN0cnVjdCBzYl9vcHRfY3R4ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsCiYjNDM7CQkJCSAgY29uc3QgY2hhciAqdmFsdWUsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKQomIzQzO3sKJiM0MzsJc3RydWN0IG1ldGFmc19jb2xsZWN0X2N0eCAqY29sbGVjdF9jdHggPSBjdHgtJmd0O2RhdGE7CiYjNDM7CXN0cnVjdCBtZXRhZnNfb3B0aW9uX2VudHJ5ICplbnRyeTsKJiM0MzsKJiM0MzsJaWYgKHN0cmNtcChuYW1lLCBjb2xsZWN0X2N0eC0mZ3Q7dGFyZ2V0X25hbWUpICE9IDApCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmICghdmFsdWUgJmFtcDsmYW1wOyBjb2xsZWN0X2N0eC0mZ3Q7aXNfc291cmNlKQomIzQzOwkJdmFsdWUgPSBjb2xsZWN0X2N0eC0mZ3Q7c2ItJmd0O3NfZGV2bmFtZTsKJiM0MzsKJiM0MzsJaWYgKGNvbGxlY3RfY3R4LSZndDtjb3VudCAmZ3Q7PSBjb2xsZWN0X2N0eC0mZ3Q7c2l6ZSkgewomIzQzOwkJaW50IG5ld19zaXplID0gY29sbGVjdF9jdHgtJmd0O3NpemUgPyBjb2xsZWN0X2N0eC0mZ3Q7c2l6ZSAqIDIgOiA0OwomIzQzOwkJc3RydWN0IG1ldGFmc19vcHRpb25fZW50cnkgKm5ld19lbnRyaWVzOwomIzQzOwomIzQzOwkJbmV3X2VudHJpZXMgPSBrcmVhbGxvY19hcnJheShjb2xsZWN0X2N0eC0mZ3Q7ZW50cmllcywgbmV3X3NpemUsIHNpemVvZigqbmV3X2VudHJpZXMpLAomIzQzOwkJCQkJICAgICBHRlBfS0VSTkVMKTsKJiM0MzsJCWlmICghbmV3X2VudHJpZXMpIHsKJiM0MzsJCQljb2xsZWN0X2N0eC0mZ3Q7ZXJyID0gLUVOT01FTTsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiYjNDM7CQljb2xsZWN0X2N0eC0mZ3Q7ZW50cmllcyA9IG5ld19lbnRyaWVzOwomIzQzOwkJY29sbGVjdF9jdHgtJmd0O3NpemUgPSBuZXdfc2l6ZTsKJiM0MzsJfQomIzQzOwomIzQzOwllbnRyeSA9ICZhbXA7Y29sbGVjdF9jdHgtJmd0O2VudHJpZXNbY29sbGVjdF9jdHgtJmd0O2NvdW50XTsKJiM0MzsJZW50cnktJmd0O3ZhbHVlID0gdmFsdWUgPyBrc3RyZHVwKHZhbHVlLCBHRlBfS0VSTkVMKSA6IE5VTEw7CiYjNDM7CWlmICghZW50cnktJmd0O3ZhbHVlICZhbXA7JmFtcDsgdmFsdWUpIHsKJiM0MzsJCWNvbGxlY3RfY3R4LSZndDtlcnIgPSAtRU5PTUVNOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CWlmIChwYXRoKSB7CiYjNDM7CQllbnRyeS0mZ3Q7cGF0aCA9ICpwYXRoOwomIzQzOwkJcGF0aF9nZXQoJmFtcDtlbnRyeS0mZ3Q7cGF0aCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQltZW1zZXQoJmFtcDtlbnRyeS0mZ3Q7cGF0aCwgMCwgc2l6ZW9mKGVudHJ5LSZndDtwYXRoKSk7CiYjNDM7CX0KJiM0MzsJY29sbGVjdF9jdHgtJmd0O2NvdW50JiM0MzsmIzQzOzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbWV0YWZzX2ZyZWVfZW50cmllcyhzdHJ1Y3QgbWV0YWZzX29wdGlvbl9lbnRyeSAqZW50cmllcywgaW50IGNvdW50KQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBjb3VudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWtmcmVlKGVudHJpZXNbaV0udmFsdWUpOwomIzQzOwkJaWYgKGVudHJpZXNbaV0ucGF0aC5tbnQpCiYjNDM7CQkJcGF0aF9wdXQoJmFtcDtlbnRyaWVzW2ldLnBhdGgpOwomIzQzOwl9CiYjNDM7CWtmcmVlKGVudHJpZXMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG1ldGFmc19nZXRfb3B0aW9uX3ZhbHVlcyhzdHJ1Y3QgZmlsZSAqYmFzZSwgY29uc3QgY2hhciAqb3B0aW9uX25hbWUsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgbWV0YWZzX29wdGlvbl9lbnRyeSAqKmVudHJpZXNfb3V0LAomIzQzOwkJCQkgICAgaW50ICpjb3VudF9vdXQpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCA9ICZhbXA7YmFzZS0mZ3Q7Zl9wYXRoOwomIzQzOwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gcGF0aC0mZ3Q7bW50LSZndDttbnRfc2I7CiYjNDM7CXN0cnVjdCBtZXRhZnNfY29sbGVjdF9jdHggY29sbGVjdF9jdHggPSB7CiYjNDM7CQkuY3R4LmRhdGEgPSAmYW1wO2NvbGxlY3RfY3R4LAomIzQzOwkJLmN0eC5hY3RvciA9IG1ldGFmc19jb2xsZWN0X29wdGlvbiwKJiM0MzsJCS50YXJnZXRfbmFtZSA9IG9wdGlvbl9uYW1lLAomIzQzOwkJLnNiID0gc2IsCiYjNDM7CQkuaXNfc291cmNlID0gIXN0cmNtcChvcHRpb25fbmFtZSwgJiMzNDtzb3VyY2UmIzM0OyksCiYjNDM7CX07CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChzYi0mZ3Q7c19vcC0mZ3Q7Z2V0X29wdGlvbnMpIHsKJiM0MzsJCXJldCA9IHNiLSZndDtzX29wLSZndDtnZXRfb3B0aW9ucygmYW1wO2NvbGxlY3RfY3R4LmN0eCwgcGF0aC0mZ3Q7bW50LSZndDttbnRfcm9vdCk7CiYjNDM7CQlpZiAocmV0IHx8IGNvbGxlY3RfY3R4LmVycikgewomIzQzOwkJCW1ldGFmc19mcmVlX2VudHJpZXMoY29sbGVjdF9jdHguZW50cmllcywgY29sbGVjdF9jdHguY291bnQpOwomIzQzOwkJCXJldHVybiByZXQgPzogY29sbGVjdF9jdHguZXJyOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIHNwZWNpYWwgY2FzZTogYWRkICYjMzQ7c291cmNlJiMzNDsgb3B0aW9uIGlmIGZpbGVzeXN0ZW0gZGlkbiYjMzk7dCBhZGQgb25lKi8KJiM0MzsJaWYgKCFjb2xsZWN0X2N0eC5jb3VudCAmYW1wOyZhbXA7IGNvbGxlY3RfY3R4LmlzX3NvdXJjZSkgewomIzQzOwkJc3RydWN0IG1ldGFmc19vcHRpb25fZW50cnkgKmVudCBfX2ZyZWUoa2ZyZWUpID0ga3phbGxvY19vYmooKmVudCk7CiYjNDM7CiYjNDM7CQlpZiAoIWVudCkKJiM0MzsJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJCWVudC0mZ3Q7dmFsdWUgPSBrc3RyZHVwKHNiLSZndDtzX2Rldm5hbWUsIEdGUF9LRVJORUwpOwomIzQzOwkJaWYgKCFlbnQtJmd0O3ZhbHVlKQomIzQzOwkJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwkJY29sbGVjdF9jdHguZW50cmllcyA9IG5vX2ZyZWVfcHRyKGVudCk7CiYjNDM7CQljb2xsZWN0X2N0eC5jb3VudCA9IDE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJKmVudHJpZXNfb3V0ID0gY29sbGVjdF9jdHguZW50cmllczsKJiM0MzsJKmNvdW50X291dCA9IGNvbGxlY3RfY3R4LmNvdW50OwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBtZXRhZnMgc3ltbGluayBvcGVyYXRpb25zCiYjNDM7ICovCiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKm1ldGFmc19nZXRfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkJCSAgIHN0cnVjdCBkZWxheWVkX2NhbGwgKmRvbmUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWV0YWZzX2RlbnRyeV9pbmZvICppbmZvOwomIzQzOwomIzQzOwlpZiAoIWRlbnRyeSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FQ0hJTEQpOwomIzQzOwomIzQzOwlpbmZvID0gZGVudHJ5LSZndDtkX2ZzZGF0YTsKJiM0MzsJaWYgKGluZm8tJmd0O3N5bWxpbmsucGF0aC5tbnQpIHsKJiM0MzsJCWludCBlcnJvcjsKJiM0MzsKJiM0MzsJCXBhdGhfZ2V0KCZhbXA7aW5mby0mZ3Q7c3ltbGluay5wYXRoKTsKJiM0MzsJCWVycm9yID0gbmRfanVtcF9saW5rKCZhbXA7aW5mby0mZ3Q7c3ltbGluay5wYXRoKTsKJiM0MzsJCXJldHVybiBFUlJfUFRSKGVycm9yKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gRVJSX1BUUigtRUxPT1ApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG1ldGFmc19yZWFkbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgX191c2VyICpidWZmZXIsCiYjNDM7CQkJICAgaW50IGJ1ZmxlbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtZXRhZnNfZGVudHJ5X2luZm8gKmluZm8gPSBkZW50cnktJmd0O2RfZnNkYXRhOwomIzQzOwljb25zdCBjaGFyICp2YWx1ZSA9IGluZm8tJmd0O3N5bWxpbmsudmFsdWU7CiYjNDM7CiYjNDM7CWlmICghdmFsdWUpCiYjNDM7CQl2YWx1ZSA9ICYjMzQ7JiMzNDs7CiYjNDM7CiYjNDM7CXJldHVybiByZWFkbGlua19jb3B5KGJ1ZmZlciwgYnVmbGVuLCB2YWx1ZSwgc3RybGVuKHZhbHVlKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBtZXRhZnNfc3ltbGlua19pb3BzID0gewomIzQzOwkuZ2V0X2xpbmsJPSBtZXRhZnNfZ2V0X2xpbmssCiYjNDM7CS5yZWFkbGluawk9IG1ldGFmc19yZWFkbGluaywKJiM0Mzt9OwomIzQzOwomIzQzOy8qCiYjNDM7ICogRGVudHJ5IG9wZXJhdGlvbnMgLSBjbGVhbnVwCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgbWV0YWZzX2RfcmVsZWFzZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWV0YWZzX2RlbnRyeV9pbmZvICppbmZvID0gZGVudHJ5LSZndDtkX2ZzZGF0YTsKJiM0MzsKJiM0MzsJaWYgKCFpbmZvKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzd2l0Y2ggKGluZm8tJmd0O3R5cGUpIHsKJiM0MzsJY2FzZSBNRVRBRlNfUk9PVDoKJiM0MzsJCWZwdXQoaW5mby0mZ3Q7cm9vdC5iYXNlKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIE1FVEFGU19PUFRJT05fVkFMVUVTOgomIzQzOwkJbWV0YWZzX2ZyZWVfZW50cmllcyhpbmZvLSZndDtvcHRfdmFsdWVzLmVudHJpZXMsCiYjNDM7CQkJCSAgICBpbmZvLSZndDtvcHRfdmFsdWVzLmNvdW50KTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIE1FVEFGU19TWU1MSU5LOgomIzQzOwkJa2ZyZWUoaW5mby0mZ3Q7c3ltbGluay52YWx1ZSk7CiYjNDM7CQlpZiAoaW5mby0mZ3Q7c3ltbGluay5wYXRoLm1udCkKJiM0MzsJCQlwYXRoX3B1dCgmYW1wO2luZm8tJmd0O3N5bWxpbmsucGF0aCk7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCVdBUk5fT04oMSk7CiYjNDM7CX0KJiM0MzsJa2ZyZWUoaW5mbyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgbWV0YWZzX2RlbnRyeV9vcHMgPSB7CiYjNDM7CS5kX3JlbGVhc2UgPSBtZXRhZnNfZF9yZWxlYXNlLAomIzQzO307CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBtZXRhZnMgZGlyZWN0b3J5IG9wZXJhdGlvbnMgLSBmb3J3YXJkIGRlY2xhcmF0aW9ucwomIzQzOyAqLwomIzQzO3N0YXRpYyBzdHJ1Y3QgZmlsZSAqbWV0YWZzX2dldF9iYXNlX2ZpbGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKJiM0MztzdGF0aWMgc3RydWN0IGRlbnRyeSAqbWV0YWZzX3Jvb3RfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiYjNDM7CQkJCQkgdW5zaWduZWQgaW50IGZsYWdzKTsKJiM0MztzdGF0aWMgc3RydWN0IGRlbnRyeSAqbWV0YWZzX21vdW50X2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAomIzQzOwkJCQkJICB1bnNpZ25lZCBpbnQgZmxhZ3MpOwomIzQzO3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICptZXRhZnNfb3B0aW9uc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKJiM0MzsJCQkJCSAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpOwomIzQzO3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICptZXRhZnNfb3B0aW9uX3ZhbHVlc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKJiM0MzsJCQkJCQkgIHVuc2lnbmVkIGludCBmbGFncyk7CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1ldGFmc19yb290X2Rpcl9pb3BzID0gewomIzQzOwkubG9va3VwCQk9IG1ldGFmc19yb290X2xvb2t1cCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBtZXRhZnNfbW91bnRfZGlyX2lvcHMgPSB7CiYjNDM7CS5sb29rdXAJCT0gbWV0YWZzX21vdW50X2xvb2t1cCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBtZXRhZnNfb3B0aW9uc19kaXJfaW9wcyA9IHsKJiM0MzsJLmxvb2t1cAkJPSBtZXRhZnNfb3B0aW9uc19sb29rdXAsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWV0YWZzX29wdGlvbl92YWx1ZXNfZGlyX2lvcHMgPSB7CiYjNDM7CS5sb29rdXAJCT0gbWV0YWZzX29wdGlvbl92YWx1ZXNfbG9va3VwLAomIzQzO307CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDcmVhdGUgYSBuZXcgaW5vZGUgaW4gbWV0YWZzCiYjNDM7ICovCiYjNDM7c3RhdGljIHN0cnVjdCBpbm9kZSAqbWV0YWZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bW9kZV90IG1vZGUsCiYjNDM7CQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zICppb3BzKQomIzQzO3sKJiM0MzsJc3RydWN0IGlub2RlICppbm9kZSA9IG5ld19pbm9kZShzYik7CiYjNDM7CiYjNDM7CWlmICghaW5vZGUpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJaW5vZGUtJmd0O2lfaW5vID0gZ2V0X25leHRfaW5vKCk7CiYjNDM7CWlub2RlLSZndDtpX21vZGUgPSBtb2RlOwomIzQzOwlzaW1wbGVfaW5vZGVfaW5pdF90cyhpbm9kZSk7CiYjNDM7CiYjNDM7CWlmIChTX0lTRElSKG1vZGUpKSB7CiYjNDM7CQlpbm9kZS0mZ3Q7aV9vcCA9IGlvcHM7CiYjNDM7CQlpbmNfbmxpbmsoaW5vZGUpOwomIzQzOwl9IGVsc2UgaWYgKFNfSVNMTksobW9kZSkpIHsKJiM0MzsJCWlub2RlLSZndDtpX29wID0gJmFtcDttZXRhZnNfc3ltbGlua19pb3BzOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBpbm9kZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBMb29rdXAgaW4gcm9vdCBkaXJlY3RvcnkgKC8pCiYjNDM7ICogT25seSAmIzM0O21vdW50JiMzNDsgaXMgdmFsaWQgaGVyZQomIzQzOyAqLwomIzQzO3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICptZXRhZnNfcm9vdF9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKJiM0MzsJCQkJCSB1bnNpZ25lZCBpbnQgZmxhZ3MpCiYjNDM7ewomIzQzOwljb25zdCBjaGFyICpuYW1lID0gZGVudHJ5LSZndDtkX25hbWUubmFtZTsKJiM0MzsJc3RydWN0IGlub2RlICppbm9kZTsKJiM0MzsKJiM0MzsJaWYgKHN0cmNtcChuYW1lLCAmIzM0O21vdW50JiMzNDspICE9IDApCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKJiM0MzsKJiM0MzsJaW5vZGUgPSBtZXRhZnNfZ2V0X2lub2RlKGRpci0mZ3Q7aV9zYiwgU19JRkRJUiB8IDA1NTUsICZhbXA7bWV0YWZzX21vdW50X2Rpcl9pb3BzKTsKJiM0MzsJaWYgKCFpbm9kZSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwomIzQzOwlkX2FkZChkZW50cnksIGlub2RlKTsKJiM0MzsJZF9tYXJrX2RvbnRjYWNoZShpbm9kZSk7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIExvb2t1cCBpbiAvbW91bnQgZGlyZWN0b3J5CiYjNDM7ICogT25seSAmIzM0O29wdGlvbnMmIzM0OyBpcyB2YWxpZCBoZXJlCiYjNDM7ICovCiYjNDM7c3RhdGljIHN0cnVjdCBkZW50cnkgKm1ldGFmc19tb3VudF9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKJiM0MzsJCQkJCSAgdW5zaWduZWQgaW50IGZsYWdzKQomIzQzO3sKJiM0MzsJY29uc3QgY2hhciAqbmFtZSA9IGRlbnRyeS0mZ3Q7ZF9uYW1lLm5hbWU7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGU7CiYjNDM7CiYjNDM7CWlmIChzdHJjbXAobmFtZSwgJiMzNDtvcHRpb25zJiMzNDspICE9IDApCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKJiM0MzsKJiM0MzsJaW5vZGUgPSBtZXRhZnNfZ2V0X2lub2RlKGRpci0mZ3Q7aV9zYiwgU19JRkRJUiB8IDA1NTUsICZhbXA7bWV0YWZzX29wdGlvbnNfZGlyX2lvcHMpOwomIzQzOwlpZiAoIWlub2RlKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CiYjNDM7CWRfYWRkKGRlbnRyeSwgaW5vZGUpOwomIzQzOwlkX21hcmtfZG9udGNhY2hlKGlub2RlKTsKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogTG9va3VwIGluIC9tb3VudC9vcHRpb25zIGRpcmVjdG9yeQomIzQzOyAqIENvbGxlY3QgdmFsdWVzIGZvciB0aGUgcmVxdWVzdGVkIG9wdGlvbiBuYW1lCiYjNDM7ICovCiYjNDM7c3RhdGljIHN0cnVjdCBkZW50cnkgKm1ldGFmc19vcHRpb25zX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAomIzQzOwkJCQkJICAgIHVuc2lnbmVkIGludCBmbGFncykKJiM0Mzt7CiYjNDM7CWNvbnN0IGNoYXIgKnRhcmdldF9uYW1lID0gZGVudHJ5LSZndDtkX25hbWUubmFtZTsKJiM0MzsJc3RydWN0IGZpbGUgKmJhc2U7CiYjNDM7CXN0cnVjdCBtZXRhZnNfZGVudHJ5X2luZm8gKmluZm87CiYjNDM7CXN0cnVjdCBtZXRhZnNfb3B0aW9uX2VudHJ5ICplbnRyaWVzID0gTlVMTDsKJiM0MzsJaW50IGNvdW50ID0gMDsKJiM0MzsJc3RydWN0IGlub2RlICppbm9kZTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJYmFzZSA9IG1ldGFmc19nZXRfYmFzZV9maWxlKGRlbnRyeS0mZ3Q7ZF9wYXJlbnQpOwomIzQzOwlpZiAoIWJhc2UpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKJiM0MzsKJiM0MzsJcmV0ID0gbWV0YWZzX2dldF9vcHRpb25fdmFsdWVzKGJhc2UsIHRhcmdldF9uYW1lLCAmYW1wO2VudHJpZXMsICZhbXA7Y291bnQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKJiM0MzsKJiM0MzsJaWYgKGNvdW50ID09IDApIHsKJiM0MzsJCWtmcmVlKGVudHJpZXMpOwomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghaW5mbykgewomIzQzOwkJbWV0YWZzX2ZyZWVfZW50cmllcyhlbnRyaWVzLCBjb3VudCk7CiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpbmZvLSZndDt0eXBlID0gTUVUQUZTX09QVElPTl9WQUxVRVM7CiYjNDM7CWluZm8tJmd0O29wdF92YWx1ZXMuZW50cmllcyA9IGVudHJpZXM7CiYjNDM7CWluZm8tJmd0O29wdF92YWx1ZXMuY291bnQgPSBjb3VudDsKJiM0MzsKJiM0MzsJaW5vZGUgPSBtZXRhZnNfZ2V0X2lub2RlKGRpci0mZ3Q7aV9zYiwgU19JRkRJUiB8IDA1NTUsICZhbXA7bWV0YWZzX29wdGlvbl92YWx1ZXNfZGlyX2lvcHMpOwomIzQzOwlpZiAoIWlub2RlKSB7CiYjNDM7CQltZXRhZnNfZnJlZV9lbnRyaWVzKGVudHJpZXMsIGNvdW50KTsKJiM0MzsJCWtmcmVlKGluZm8pOwomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZGVudHJ5LSZndDtkX2ZzZGF0YSA9IGluZm87CiYjNDM7CWRfYWRkKGRlbnRyeSwgaW5vZGUpOwomIzQzOwlkX21hcmtfZG9udGNhY2hlKGlub2RlKTsKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogTG9va3VwIGluIG9wdGlvbi1zcGVjaWZpYyBkaXJlY3RvcnkgKGUuZy4sIC9tb3VudC9vcHRpb25zL2xvd2VyZGlyLykKJiM0MzsgKiBSZXR1cm4gbnVtYmVyZWQgZW50cmllcyAoMCwgMSwgMiwgLi4uKSBhcyBzeW1saW5rcwomIzQzOyAqLwomIzQzO3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICptZXRhZnNfb3B0aW9uX3ZhbHVlc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJCQkJICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiYjNDM7CQkJCQkJICB1bnNpZ25lZCBpbnQgZmxhZ3MpCiYjNDM7ewomIzQzOwljb25zdCBjaGFyICp0YXJnZXRfbmFtZSA9IGRlbnRyeS0mZ3Q7ZF9uYW1lLm5hbWU7CiYjNDM7CXN0cnVjdCBtZXRhZnNfZGVudHJ5X2luZm8gKnBhcmVudF9pbmZvLCAqaW5mbzsKJiM0MzsJc3RydWN0IG1ldGFmc19vcHRpb25fZW50cnkgKmVudHJ5OwomIzQzOwlzdHJ1Y3QgaW5vZGUgKmlub2RlOwomIzQzOwl1bnNpZ25lZCBsb25nIGluZGV4OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlwYXJlbnRfaW5mbyA9IGRlbnRyeS0mZ3Q7ZF9wYXJlbnQtJmd0O2RfZnNkYXRhOwomIzQzOwlpZiAoV0FSTl9PTighcGFyZW50X2luZm8gfHwgcGFyZW50X2luZm8tJmd0O3R5cGUgIT0gTUVUQUZTX09QVElPTl9WQUxVRVMpKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CiYjNDM7CiYjNDM7CWlmICh0YXJnZXRfbmFtZVswXSA9PSAmIzM5OzAmIzM5OyAmYW1wOyZhbXA7IHRhcmdldF9uYW1lWzFdKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CiYjNDM7CiYjNDM7CWVyciA9IGtzdHJ0b3VsKHRhcmdldF9uYW1lLCAxMCwgJmFtcDtpbmRleCk7CiYjNDM7CWlmIChlcnIgfHwgaW5kZXggJmd0Oz0gcGFyZW50X2luZm8tJmd0O29wdF92YWx1ZXMuY291bnQpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKJiM0MzsKJiM0MzsJZW50cnkgPSAmYW1wO3BhcmVudF9pbmZvLSZndDtvcHRfdmFsdWVzLmVudHJpZXNbaW5kZXhdOwomIzQzOwomIzQzOwlpbmZvID0ga3phbGxvYyhzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFpbmZvKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CiYjNDM7CWluZm8tJmd0O3R5cGUgPSBNRVRBRlNfU1lNTElOSzsKJiM0MzsJaWYgKGVudHJ5LSZndDt2YWx1ZSkgewomIzQzOwkJaW5mby0mZ3Q7c3ltbGluay52YWx1ZSA9IGtzdHJkdXAoZW50cnktJmd0O3ZhbHVlLCBHRlBfS0VSTkVMKTsKJiM0MzsJCWlmICghaW5mby0mZ3Q7c3ltbGluay52YWx1ZSkgewomIzQzOwkJCWtmcmVlKGluZm8pOwomIzQzOwkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CWlmIChlbnRyeS0mZ3Q7cGF0aC5tbnQpIHsKJiM0MzsJCWluZm8tJmd0O3N5bWxpbmsucGF0aCA9IGVudHJ5LSZndDtwYXRoOwomIzQzOwkJcGF0aF9nZXQoJmFtcDtpbmZvLSZndDtzeW1saW5rLnBhdGgpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlub2RlID0gbWV0YWZzX2dldF9pbm9kZShkaXItJmd0O2lfc2IsIFNfSUZMTksgfCAwNzc3LCBOVUxMKTsKJiM0MzsJaWYgKCFpbm9kZSkgewomIzQzOwkJa2ZyZWUoaW5mby0mZ3Q7c3ltbGluay52YWx1ZSk7CiYjNDM7CQlpZiAoaW5mby0mZ3Q7c3ltbGluay5wYXRoLm1udCkKJiM0MzsJCQlwYXRoX3B1dCgmYW1wO2luZm8tJmd0O3N5bWxpbmsucGF0aCk7CiYjNDM7CQlrZnJlZShpbmZvKTsKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRlbnRyeS0mZ3Q7ZF9mc2RhdGEgPSBpbmZvOwomIzQzOwlkX2FkZChkZW50cnksIGlub2RlKTsKJiM0MzsJZF9tYXJrX2RvbnRjYWNoZShpbm9kZSk7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEhlbHBlciB0byBnZXQgYmFzZSBmaWxlIGZyb20gYW55IG1ldGFmcyBkZW50cnkKJiM0MzsgKi8KJiM0MztzdGF0aWMgc3RydWN0IGZpbGUgKm1ldGFmc19nZXRfYmFzZV9maWxlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKJiM0Mzt7CiYjNDM7CXdoaWxlIChkZW50cnkpIHsKJiM0MzsJCXN0cnVjdCBtZXRhZnNfZGVudHJ5X2luZm8gKmluZm8gPSBkZW50cnktJmd0O2RfZnNkYXRhOwomIzQzOwomIzQzOwkJaWYgKGluZm8gJmFtcDsmYW1wOyBpbmZvLSZndDt0eXBlID09IE1FVEFGU19ST09UKQomIzQzOwkJCXJldHVybiBpbmZvLSZndDtyb290LmJhc2U7CiYjNDM7CQlpZiAoZGVudHJ5ID09IGRlbnRyeS0mZ3Q7ZF9wYXJlbnQpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlkZW50cnkgPSBkZW50cnktJmd0O2RfcGFyZW50OwomIzQzOwl9CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIENyZWF0ZSB0aGUgcm9vdCBkaXJlY3Rvcnkgc3RydWN0dXJlIGZvciBhIG1ldGFkYXRhIG9wZW4KJiM0MzsgKi8KJiM0MztzdGF0aWMgc3RydWN0IGRlbnRyeSAqbWV0YWZzX2NyZWF0ZV9yb290KHN0cnVjdCBmaWxlICpiYXNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGlub2RlICppbm9kZTsKJiM0MzsJc3RydWN0IGRlbnRyeSAqcm9vdDsKJiM0MzsJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IG1ldGFmc19tbnQtJmd0O21udF9zYjsKJiM0MzsJc3RydWN0IG1ldGFmc19kZW50cnlfaW5mbyAqaW5mbzsKJiM0MzsKJiM0MzsJaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghaW5mbykKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwomIzQzOwlpbmZvLSZndDt0eXBlID0gTUVUQUZTX1JPT1Q7CiYjNDM7CWluZm8tJmd0O3Jvb3QuYmFzZSA9IGdldF9maWxlKGJhc2UpOwomIzQzOwomIzQzOwlpbm9kZSA9IG1ldGFmc19nZXRfaW5vZGUoc2IsIFNfSUZESVIgfCAwNTU1LCAmYW1wO21ldGFmc19yb290X2Rpcl9pb3BzKTsKJiM0MzsJaWYgKCFpbm9kZSkgewomIzQzOwkJZnB1dChpbmZvLSZndDtyb290LmJhc2UpOwomIzQzOwkJa2ZyZWUoaW5mbyk7CiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyb290ID0gZF9hbGxvY19hbm9uKHNiKTsKJiM0MzsJaWYgKCFyb290KSB7CiYjNDM7CQlpcHV0KGlub2RlKTsKJiM0MzsJCWZwdXQoaW5mby0mZ3Q7cm9vdC5iYXNlKTsKJiM0MzsJCWtmcmVlKGluZm8pOwomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogU3RvcmUgdGhlIGluZm8gaW4gZF9mc2RhdGEgYmVmb3JlIGluc3RhbnRpYXRpbmcgKi8KJiM0MzsJcm9vdC0mZ3Q7ZF9mc2RhdGEgPSBpbmZvOwomIzQzOwlkX2luc3RhbnRpYXRlKHJvb3QsIGlub2RlKTsKJiM0MzsJZF9tYXJrX2RvbnRjYWNoZShpbm9kZSk7CiYjNDM7CiYjNDM7CXJldHVybiByb290OwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEdldCBtZXRhZGF0YSByb290IHBhdGggZm9yIGEgYmFzZSBmaWxlLgomIzQzOyAqCiYjNDM7ICogVGhpcyBpcyBjYWxsZWQgZnJvbSBwYXRoX2luaXQoKSB3aGVuIE9fQUxUIGlzIHVzZWQuCiYjNDM7ICogSXQgcmV0dXJucyBhIHBhdGggaW4gdGhlIG1ldGFmcyB0aGF0IHNlcnZlcyBhcyB0aGUgcm9vdAomIzQzOyAqIGZvciB0aGUgbWV0YWRhdGEgbG9va3VwLgomIzQzOyAqLwomIzQzO2ludCBtZXRhZnNfZ2V0X3Jvb3Qoc3RydWN0IGZpbGUgKmJhc2UsIHN0cnVjdCBwYXRoICpwYXRoKQomIzQzO3sKJiM0MzsJc3RydWN0IGRlbnRyeSAqcm9vdDsKJiM0MzsKJiM0MzsJaWYgKCFiYXNlKQomIzQzOwkJcmV0dXJuIC1FQkFERjsKJiM0MzsKJiM0MzsJLyogQ3JlYXRlIHRoZSBtZXRhZGF0YSByb290IGZvciB0aGlzIGJhc2UgZmlsZSAqLwomIzQzOwlyb290ID0gbWV0YWZzX2NyZWF0ZV9yb290KGJhc2UpOwomIzQzOwlpZiAoSVNfRVJSKHJvb3QpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIocm9vdCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFJldHVybiB0aGUgcGF0aCB0byB0aGUgbWV0YWRhdGEgcm9vdC4KJiM0MzsJICogTm9ybWFsIFZGUyBsb29rdXAgd2lsbCB0YWtlIG92ZXIgZnJvbSBoZXJlLgomIzQzOwkgKi8KJiM0MzsJcGF0aC0mZ3Q7bW50ID0gbW50Z2V0KG1ldGFmc19tbnQpOwomIzQzOwlwYXRoLSZndDtkZW50cnkgPSByb290OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobWV0YWZzX2dldF9yb290KTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IF9faW5pdCBtZXRhZnNfaW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZXJyID0gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmYW1wO21ldGFmc190eXBlKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CW1ldGFmc19tbnQgPSBrZXJuX21vdW50KCZhbXA7bWV0YWZzX3R5cGUpOwomIzQzOwlpZiAoSVNfRVJSKG1ldGFmc19tbnQpKSB7CiYjNDM7CQllcnIgPSBQVFJfRVJSKG1ldGFmc19tbnQpOwomIzQzOwkJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZhbXA7bWV0YWZzX3R5cGUpOwomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwlzZXRfZGVmYXVsdF9kX29wKG1ldGFmc19tbnQtJmd0O21udF9zYiwgJmFtcDttZXRhZnNfZGVudHJ5X29wcyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0Mztmc19pbml0Y2FsbChtZXRhZnNfaW5pdCk7CmRpZmYgLS1naXQgYS9mcy9tZXRhZnMvbWV0YWZzLmggYi9mcy9tZXRhZnMvbWV0YWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmQyNTc3MTQyNjBhN2ZiCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbWV0YWZzL21ldGFmcy5oCkBAIC0wLDAgJiM0MzsxLDE1IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KJiM0MzsjaWZuZGVmIF9MSU5VWF9NRVRBRlNfSAomIzQzOyNkZWZpbmUgX0xJTlVYX01FVEFGU19ICiYjNDM7CiYjNDM7c3RydWN0IHBhdGg7CiYjNDM7c3RydWN0IGZpbGU7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBHZXQgbWV0YWRhdGEgcm9vdCBwYXRoIGZvciBhIGJhc2UgZmlsZS4KJiM0MzsgKiBDYWxsZWQgZnJvbSBwYXRoX2luaXQoKSB3aGVuIE9fQUxUIGZsYWcgaXMgdXNlZC4KJiM0MzsgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyB3aXRoIHBhdGggZmlsbGVkIGluLCAtZXJybm8gb24gZXJyb3IuCiYjNDM7ICovCiYjNDM7aW50IG1ldGFmc19nZXRfcm9vdChzdHJ1Y3QgZmlsZSAqYmFzZSwgc3RydWN0IHBhdGggKnBhdGgpOwomIzQzOwomIzQzOyNlbmRpZiAvKiBfTElOVVhfTUVUQUZTX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL21vdW50LmggYi9mcy9tb3VudC5oCmluZGV4IDk0ZmNjMzA2ZDIxZTdkLi42OWE5NTNiYzExMmIzNiAxMDA2NDQKLS0tIGEvZnMvbW91bnQuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9tb3VudC5oCkBAIC02NSw3ICYjNDM7NjUsNiBAQCBzdHJ1Y3QgbW91bnQgewogCXN0cnVjdCBtb3VudCAqIF9fYWxpZ25lZCgxKSAqbW50X3BwcmV2X2Zvcl9zYjsKIAkJCQkJLyogZXhjZXB0IHRoYXQgTFNCIG9mIHBwcmV2IGlzIHN0b2xlbiAqLwogI2RlZmluZSBXUklURV9IT0xEIDEJCQkvKiAuLi4gZm9yIHVzZSBieSBtbnRfaG9sZF93cml0ZXJzKCkgKi8KLQljb25zdCBjaGFyICptbnRfZGV2bmFtZTsJLyogTmFtZSBvZiBkZXZpY2UgZS5nLiAvZGV2L2Rzay9oZGExICovCiAJc3RydWN0IGxpc3RfaGVhZCBtbnRfbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG1udF9leHBpcmU7CS8qIGxpbmsgaW4gZnMtc3BlY2lmaWMgZXhwaXJ5IGxpc3QgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIG1udF9zaGFyZTsJLyogY2lyY3VsYXIgbGlzdCBvZiBzaGFyZWQgbW91bnRzICovCmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuYwppbmRleCAxOWNlNDNjOWE2ZTY2Mi4uNDM3YTE0YzQzMmU2N2IgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmFtZWkuYwpAQCAtNDUsNiAmIzQzOzQ1LDcgQEAKIAogI2luY2x1ZGUgJiMzNDtpbnRlcm5hbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7bW91bnQuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDttZXRhZnMvbWV0YWZzLmgmIzM0OwogCiAvKiBbRmViLTE5OTcgVC4gU2Nob2ViZWwtVGhldWVyXQogICogRnVuZGFtZW50YWwgY2hhbmdlcyBpbiB0aGUgcGF0aG5hbWUgbG9va3VwIG1lY2hhbmlzbXMgKG5hbWVpKQpAQCAtMjc1Myw2ICYjNDM7Mjc1NCwyMSBAQCBzdGF0aWMgY29uc3QgY2hhciAqcGF0aF9pbml0KHN0cnVjdCBuYW1laWRhdGEgKm5kLCB1bnNpZ25lZCBmbGFncykKIAkJCQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKIAkJfQogCiYjNDM7CQlpZiAodW5saWtlbHkoZmxhZ3MgJmFtcDsgTE9PS1VQX0FMVCkpIHsKJiM0MzsJCQlpZiAoZmxhZ3MgJmFtcDsgTE9PS1VQX1JDVSkKJiM0MzsJCQkJcmV0dXJuIEVSUl9QVFIoLUVDSElMRCk7CiYjNDM7CiYjNDM7CQkJLyogSGFuZGxlIE9fQUxUOiBqdW1wIHRvIG1ldGFmcyByb290ICovCiYjNDM7CQkJZXJyb3IgPSBtZXRhZnNfZ2V0X3Jvb3QoZmRfZmlsZShmKSwgJmFtcDtuZC0mZ3Q7cGF0aCk7CiYjNDM7CQkJaWYgKGVycm9yKQomIzQzOwkJCQlyZXR1cm4gRVJSX1BUUihlcnJvcik7CiYjNDM7CiYjNDM7CQkJbmQtJmd0O2lub2RlID0gbmQtJmd0O3BhdGguZGVudHJ5LSZndDtkX2lub2RlOwomIzQzOwkJCW5kLSZndDtzdGF0ZSB8PSBORF9KVU1QRUQ7CiYjNDM7CiYjNDM7CQkJcmV0dXJuIHM7CiYjNDM7CQl9CiYjNDM7CiAJCWRlbnRyeSA9IGZkX2ZpbGUoZiktJmd0O2ZfcGF0aC5kZW50cnk7CiAKIAkJaWYgKCpzICZhbXA7JmFtcDsgdW5saWtlbHkoIWRfY2FuX2xvb2t1cChkZW50cnkpKSkKZGlmZiAtLWdpdCBhL2ZzL25hbWVzcGFjZS5jIGIvZnMvbmFtZXNwYWNlLmMKaW5kZXggM2Q1Y2Q1YmYzYjA1MzcuLjYyY2M3MWM0MDFhMmFjIDEwMDY0NAotLS0gYS9mcy9uYW1lc3BhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9uYW1lc3BhY2UuYwpAQCAtMjgyLDcgJiM0MzsyODIsNyBAQCBpbnQgbW50X2dldF9jb3VudChzdHJ1Y3QgbW91bnQgKm1udCkKICNlbmRpZgogfQogCi1zdGF0aWMgc3RydWN0IG1vdW50ICphbGxvY192ZnNtbnQoY29uc3QgY2hhciAqbmFtZSkKJiM0MztzdGF0aWMgc3RydWN0IG1vdW50ICphbGxvY192ZnNtbnQodm9pZCkKIHsKIAlzdHJ1Y3QgbW91bnQgKm1udCA9IGttZW1fY2FjaGVfemFsbG9jKG1udF9jYWNoZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKG1udCkgewpAQCAtMjkyLDE4ICYjNDM7MjkyLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgbW91bnQgKmFsbG9jX3Zmc21udChjb25zdCBjaGFyICpuYW1lKQogCQlpZiAoZXJyKQogCQkJZ290byBvdXRfZnJlZV9jYWNoZTsKIAotCQlpZiAobmFtZSkKLQkJCW1udC0mZ3Q7bW50X2Rldm5hbWUgPSBrc3RyZHVwX2NvbnN0KG5hbWUsCi0JCQkJCQkJIEdGUF9LRVJORUxfQUNDT1VOVCk7Ci0JCWVsc2UKLQkJCW1udC0mZ3Q7bW50X2Rldm5hbWUgPSAmIzM0O25vbmUmIzM0OzsKLQkJaWYgKCFtbnQtJmd0O21udF9kZXZuYW1lKQotCQkJZ290byBvdXRfZnJlZV9pZDsKLQogI2lmZGVmIENPTkZJR19TTVAKIAkJbW50LSZndDttbnRfcGNwID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBtbnRfcGNwKTsKIAkJaWYgKCFtbnQtJmd0O21udF9wY3ApCi0JCQlnb3RvIG91dF9mcmVlX2Rldm5hbWU7CiYjNDM7CQkJZ290byBvdXRfZnJlZV9pZDsKIAogCQl0aGlzX2NwdV9hZGQobW50LSZndDttbnRfcGNwLSZndDttbnRfY291bnQsIDEpOwogI2Vsc2UKQEAgLTMyOCwxMSAmIzQzOzMyMCw5IEBAIHN0YXRpYyBzdHJ1Y3QgbW91bnQgKmFsbG9jX3Zmc21udChjb25zdCBjaGFyICpuYW1lKQogCXJldHVybiBtbnQ7CiAKICNpZmRlZiBDT05GSUdfU01QCi1vdXRfZnJlZV9kZXZuYW1lOgotCWtmcmVlX2NvbnN0KG1udC0mZ3Q7bW50X2Rldm5hbWUpOwotI2VuZGlmCiBvdXRfZnJlZV9pZDoKIAltbnRfZnJlZV9pZChtbnQpOwomIzQzOyNlbmRpZgogb3V0X2ZyZWVfY2FjaGU6CiAJa21lbV9jYWNoZV9mcmVlKG1udF9jYWNoZSwgbW50KTsKIAlyZXR1cm4gTlVMTDsKQEAgLTcyNSw3ICYjNDM7NzE1LDYgQEAgaW50IHNiX3ByZXBhcmVfcmVtb3VudF9yZWFkb25seShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogc3RhdGljIHZvaWQgZnJlZV92ZnNtbnQoc3RydWN0IG1vdW50ICptbnQpCiB7CiAJbW50X2lkbWFwX3B1dChtbnRfaWRtYXAoJmFtcDttbnQtJmd0O21udCkpOwotCWtmcmVlX2NvbnN0KG1udC0mZ3Q7bW50X2Rldm5hbWUpOwogI2lmZGVmIENPTkZJR19TTVAKIAlmcmVlX3BlcmNwdShtbnQtJmd0O21udF9wY3ApOwogI2VuZGlmCkBAIC0xMTgwLDcgJiM0MzsxMTY5LDcgQEAgc3RydWN0IHZmc21vdW50ICp2ZnNfY3JlYXRlX21vdW50KHN0cnVjdCBmc19jb250ZXh0ICpmYykKIAlpZiAoIWZjLSZndDtyb290KQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAotCW1udCA9IGFsbG9jX3Zmc21udChmYy0mZ3Q7c291cmNlKTsKJiM0MzsJbW50ID0gYWxsb2NfdmZzbW50KCk7CiAJaWYgKCFtbnQpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCkBAIC0xMjQ4LDcgJiM0MzsxMjM3LDcgQEAgc3RhdGljIHN0cnVjdCBtb3VudCAqY2xvbmVfbW50KHN0cnVjdCBtb3VudCAqb2xkLCBzdHJ1Y3QgZGVudHJ5ICpyb290LAogCXN0cnVjdCBtb3VudCAqbW50OwogCWludCBlcnI7CiAKLQltbnQgPSBhbGxvY192ZnNtbnQob2xkLSZndDttbnRfZGV2bmFtZSk7CiYjNDM7CW1udCA9IGFsbG9jX3Zmc21udCgpOwogCWlmICghbW50KQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIApAQCAtMjk1NywxNiAmIzQzOzI5NDYsMTIgQEAgc3RhdGljIGludCBkb19jaGFuZ2VfdHlwZShjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IG1zX2ZsYWdzKQogc3RhdGljIGlubGluZSBib29sIG1heV9jb3B5X3RyZWUoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpCiB7CiAJc3RydWN0IG1vdW50ICptbnQgPSByZWFsX21vdW50KHBhdGgtJmd0O21udCk7Ci0JY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zICpkX29wOwogCiAJaWYgKGNoZWNrX21udChtbnQpKQogCQlyZXR1cm4gdHJ1ZTsKIAotCWRfb3AgPSBwYXRoLSZndDtkZW50cnktJmd0O2Rfb3A7Ci0JaWYgKGRfb3AgPT0gJmFtcDtuc19kZW50cnlfb3BlcmF0aW9ucykKLQkJcmV0dXJuIHRydWU7Ci0KLQlpZiAoZF9vcCA9PSAmYW1wO3BpZGZzX2RlbnRyeV9vcGVyYXRpb25zKQomIzQzOwkvKiBNYWtlIGFuIGV4Y2VwdGlvbiBmb3IgaW50ZXJuYWwgbW91bnRzIGV4cGxpY2l0bHkgbWFya2VkIGFzIGNsb25hYmxlICovCiYjNDM7CWlmIChtbnQtJmd0O21udF9ucyA9PSBNTlRfTlNfSU5URVJOQUwgJmFtcDsmYW1wOyBtbnQtJmd0O21udC5tbnRfZmxhZ3MgJmFtcDsgTU5UX0NMT05BQkxFKQogCQlyZXR1cm4gdHJ1ZTsKIAogCWlmICghaXNfbW91bnRlZChwYXRoLSZndDttbnQpKQpAQCAtMzIwMSw3ICYjNDM7MzE4Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgZmlsZSAqdmZzX29wZW5fdHJlZShpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsIHVuc2lnbmVkCiAKIAlpZiAoZmxhZ3MgJmFtcDsgfihBVF9FTVBUWV9QQVRIIHwgQVRfTk9fQVVUT01PVU5UIHwgQVRfUkVDVVJTSVZFIHwKIAkJICAgICAgQVRfU1lNTElOS19OT0ZPTExPVyB8IE9QRU5fVFJFRV9DTE9ORSB8Ci0JCSAgICAgIE9QRU5fVFJFRV9DTE9FWEVDIHwgT1BFTl9UUkVFX05BTUVTUEFDRSkpCiYjNDM7CQkgICAgICBPUEVOX1RSRUVfQ0xPRVhFQyB8IE9QRU5fVFJFRV9OQU1FU1BBQ0UgfCBPUEVOX1RSRUVfQUxUKSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAKIAlpZiAoKGZsYWdzICZhbXA7IChBVF9SRUNVUlNJVkUgfCBPUEVOX1RSRUVfQ0xPTkUgfCBPUEVOX1RSRUVfTkFNRVNQQUNFKSkgPT0KQEAgLTMyMTUsNiAmIzQzOzMyMDAsOCBAQCBzdGF0aWMgc3RydWN0IGZpbGUgKnZmc19vcGVuX3RyZWUoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lLCB1bnNpZ25lZAogCQlsb29rdXBfZmxhZ3MgJmFtcDs9IH5MT09LVVBfQVVUT01PVU5UOwogCWlmIChmbGFncyAmYW1wOyBBVF9TWU1MSU5LX05PRk9MTE9XKQogCQlsb29rdXBfZmxhZ3MgJmFtcDs9IH5MT09LVVBfRk9MTE9XOwomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgT1BFTl9UUkVFX0FMVCkKJiM0MzsJCWxvb2t1cF9mbGFncyB8PSBMT09LVVBfQUxUOwogCiAJLyoKIAkgKiBJZiB3ZSBjcmVhdGUgYSBuZXcgbW91bnQgbmFtZXNwYWNlIHdpdGggdGhlIGNsb25lZCBtb3VudCB0cmVlIHdlCkBAIC01Mzg3LDcgJiM0Mzs1Mzc0LDYgQEAgc3RhdGljIHZvaWQgc3RhdG1vdW50X2ZzX3N1YnR5cGUoc3RydWN0IGtzdGF0bW91bnQgKnMsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKQogc3RhdGljIGludCBzdGF0bW91bnRfc2Jfc291cmNlKHN0cnVjdCBrc3RhdG1vdW50ICpzLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSkKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gcy0mZ3Q7bW50LSZndDttbnRfc2I7Ci0Jc3RydWN0IG1vdW50ICpyID0gcmVhbF9tb3VudChzLSZndDttbnQpOwogCiAJaWYgKHNiLSZndDtzX29wLSZndDtzaG93X2Rldm5hbWUpIHsKIAkJc2l6ZV90IHN0YXJ0ID0gc2VxLSZndDtjb3VudDsKQEAgLTU0MDUsNyAmIzQzOzUzOTEsNyBAQCBzdGF0aWMgaW50IHN0YXRtb3VudF9zYl9zb3VyY2Uoc3RydWN0IGtzdGF0bW91bnQgKnMsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKQogCQlzZXEtJmd0O2NvdW50ID0gc3RhcnQ7CiAJCXNlcV9jb21taXQoc2VxLCBzdHJpbmdfdW5lc2NhcGVfaW5wbGFjZShzZXEtJmd0O2J1ZiAmIzQzOyBzdGFydCwgVU5FU0NBUEVfT0NUQUwpKTsKIAl9IGVsc2UgewotCQlzZXFfcHV0cyhzZXEsIHItJmd0O21udF9kZXZuYW1lKTsKJiM0MzsJCXNlcV9wdXRzKHNlcSwgc2ItJmd0O3NfZGV2bmFtZSk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNTQxNiw2ICYjNDM7NTQwMiw0MCBAQCBzdGF0aWMgdm9pZCBzdGF0bW91bnRfbW50X25zX2lkKHN0cnVjdCBrc3RhdG1vdW50ICpzLCBzdHJ1Y3QgbW50X25hbWVzcGFjZSAqbnMpCiAJcy0mZ3Q7c20ubW50X25zX2lkID0gbnMtJmd0O25zLm5zX2lkOwogfQogCiYjNDM7dm9pZCBzYl9hZGRfb3B0aW9uKHN0cnVjdCBzYl9vcHRfY3R4ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQomIzQzO3sKJiM0MzsJc2JfYWRkX29wdGlvbl9wYXRoKGN0eCwgbmFtZSwgdmFsdWUsIE5VTEwpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHNiX2FkZF9vcHRpb25fcGF0aChzdHJ1Y3Qgc2Jfb3B0X2N0eCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSwKJiM0MzsJCQljb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCkKJiM0Mzt7CiYjNDM7CWN0eC0mZ3Q7YWN0b3IoY3R4LCBuYW1lLCB2YWx1ZSwgcGF0aCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGRvX3Nob3dfb3B0aW9uKHN0cnVjdCBzYl9vcHRfY3R4ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlLAomIzQzOwkJCSAgIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKQomIzQzO3sKJiM0MzsJaWYgKHN0cmNtcChuYW1lLCAmIzM0O3NvdXJjZSYjMzQ7KSAhPSAwKQomIzQzOwkJc2VxX3Nob3dfb3B0aW9uKGN0eC0mZ3Q7ZGF0YSwgbmFtZSwgdmFsdWUpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbW50X3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IHZmc21vdW50ICptbnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gbW50LSZndDttbnRfc2I7CiYjNDM7CiYjNDM7CWlmIChzYi0mZ3Q7c19vcC0mZ3Q7c2hvd19vcHRpb25zKQomIzQzOwkJcmV0dXJuIHNiLSZndDtzX29wLSZndDtzaG93X29wdGlvbnMoc2VxLCBtbnQtJmd0O21udF9yb290KTsKJiM0MzsKJiM0MzsJaWYgKHNiLSZndDtzX29wLSZndDtnZXRfb3B0aW9ucykgewomIzQzOwkJc3RydWN0IHNiX29wdF9jdHggY3R4ID0geyAuZGF0YSA9IHNlcSwgLmFjdG9yID0gZG9fc2hvd19vcHRpb24gfTsKJiM0MzsKJiM0MzsJCXJldHVybiBzYi0mZ3Q7c19vcC0mZ3Q7Z2V0X29wdGlvbnMoJmFtcDtjdHgsIG1udC0mZ3Q7bW50X3Jvb3QpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgc3RhdG1vdW50X21udF9vcHRzKHN0cnVjdCBrc3RhdG1vdW50ICpzLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSkKIHsKIAlzdHJ1Y3QgdmZzbW91bnQgKm1udCA9IHMtJmd0O21udDsKQEAgLTU0MjcsMTEgJiM0Mzs1NDQ3LDkgQEAgc3RhdGljIGludCBzdGF0bW91bnRfbW50X29wdHMoc3RydWN0IGtzdGF0bW91bnQgKnMsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKQogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlpZiAoc2ItJmd0O3Nfb3AtJmd0O3Nob3dfb3B0aW9ucykgewotCQllcnIgPSBzYi0mZ3Q7c19vcC0mZ3Q7c2hvd19vcHRpb25zKHNlcSwgbW50LSZndDttbnRfcm9vdCk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCX0KJiM0MzsJZXJyID0gbW50X3Nob3dfb3B0aW9ucyhzZXEsIG1udCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwogCiAJaWYgKHVubGlrZWx5KHNlcV9oYXNfb3ZlcmZsb3dlZChzZXEpKSkKIAkJcmV0dXJuIC1FQUdBSU47CkBAIC01NDc5LDE0ICYjNDM7NTQ5NywxMCBAQCBzdGF0aWMgaW5saW5lIGludCBzdGF0bW91bnRfb3B0X3Byb2Nlc3Moc3RydWN0IHNlcV9maWxlICpzZXEsIHNpemVfdCBzdGFydCkKIHN0YXRpYyBpbnQgc3RhdG1vdW50X29wdF9hcnJheShzdHJ1Y3Qga3N0YXRtb3VudCAqcywgc3RydWN0IHNlcV9maWxlICpzZXEpCiB7CiAJc3RydWN0IHZmc21vdW50ICptbnQgPSBzLSZndDttbnQ7Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IG1udC0mZ3Q7bW50X3NiOwogCXNpemVfdCBzdGFydCA9IHNlcS0mZ3Q7Y291bnQ7CiAJaW50IGVycjsKIAotCWlmICghc2ItJmd0O3Nfb3AtJmd0O3Nob3dfb3B0aW9ucykKLQkJcmV0dXJuIDA7Ci0KLQllcnIgPSBzYi0mZ3Q7c19vcC0mZ3Q7c2hvd19vcHRpb25zKHNlcSwgbW50LSZndDttbnRfcm9vdCk7CiYjNDM7CWVyciA9IG1udF9zaG93X29wdGlvbnMoc2VxLCBtbnQpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKZGlmZiAtLWdpdCBhL2ZzL25zZnMuYyBiL2ZzL25zZnMuYwppbmRleCBjM2I2YWU3NjU5NGE4MS4uZTExMDEzMGQwNzYwZTUgMTAwNjQ0Ci0tLSBhL2ZzL25zZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9uc2ZzLmMKQEAgLTY4NCw2ICYjNDM7Njg0LDcgQEAgdm9pZCBfX2luaXQgbnNmc19pbml0KHZvaWQpCiAJaWYgKElTX0VSUihuc2ZzX21udCkpCiAJCXBhbmljKCYjMzQ7Y2FuJiMzOTt0IHNldCBuc2ZzIHVwXG4mIzM0Oyk7CiAJbnNmc19tbnQtJmd0O21udF9zYi0mZ3Q7c19mbGFncyAmYW1wOz0gflNCX05PVVNFUjsKJiM0MzsJbnNmc19tbnQtJmd0O21udF9mbGFncyB8PSBNTlRfQ0xPTkFCTEU7CiAJbnNmc19yb290X3BhdGgubW50ID0gbnNmc19tbnQ7CiAJbnNmc19yb290X3BhdGguZGVudHJ5ID0gbnNmc19tbnQtJmd0O21udF9yb290OwogfQpkaWZmIC0tZ2l0IGEvZnMvb3Blbi5jIGIvZnMvb3Blbi5jCmluZGV4IDQwODkyNWQ3YmQwYjc3Li4zYTA4MWE5ZTMwNjI0MyAxMDA2NDQKLS0tIGEvZnMvb3Blbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29wZW4uYwpAQCAtMTEzMSw3ICYjNDM7MTEzMSw4IEBAIHN0cnVjdCBmaWxlICprZXJuZWxfZmlsZV9vcGVuKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgZmxhZ3MsCiBFWFBPUlRfU1lNQk9MX0dQTChrZXJuZWxfZmlsZV9vcGVuKTsKIAogI2RlZmluZSBXSUxMX0NSRUFURShmbGFncykJKGZsYWdzICZhbXA7IChPX0NSRUFUIHwgX19PX1RNUEZJTEUpKQotI2RlZmluZSBPX1BBVEhfRkxBR1MJCShPX0RJUkVDVE9SWSB8IE9fTk9GT0xMT1cgfCBPX1BBVEggfCBPX0NMT0VYRUMgfCBPX0VNUFRZUEFUSCkKJiM0MzsjZGVmaW5lIE9fUEFUSF9GTEFHUwkJKE9fRElSRUNUT1JZIHwgT19OT0ZPTExPVyB8IE9fUEFUSCB8IE9fQ0xPRVhFQyB8IE9fRU1QVFlQQVRIIHwgXAomIzQzOwkJCQkgT19BTFQpCiAKIGlubGluZSBzdHJ1Y3Qgb3Blbl9ob3cgYnVpbGRfb3Blbl9ob3coaW50IGZsYWdzLCB1bW9kZV90IG1vZGUpCiB7CkBAIC0xMjgzLDYgJiM0MzsxMjg0LDggQEAgaW5saW5lIGludCBidWlsZF9vcGVuX2ZsYWdzKGNvbnN0IHN0cnVjdCBvcGVuX2hvdyAqaG93LCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3ApCiAJCWxvb2t1cF9mbGFncyB8PSBMT09LVVBfRk9MTE9XOwogCWlmIChmbGFncyAmYW1wOyBPX0VNUFRZUEFUSCkKIAkJbG9va3VwX2ZsYWdzIHw9IExPT0tVUF9FTVBUWTsKJiM0MzsJaWYgKGZsYWdzICZhbXA7IE9fQUxUKQomIzQzOwkJbG9va3VwX2ZsYWdzIHw9IExPT0tVUF9BTFQ7CiAKIAlpZiAoaG93LSZndDtyZXNvbHZlICZhbXA7IFJFU09MVkVfTk9fWERFVikKIAkJbG9va3VwX2ZsYWdzIHw9IExPT0tVUF9OT19YREVWOwpkaWZmIC0tZ2l0IGEvZnMvb3ZlcmxheWZzL3BhcmFtcy5jIGIvZnMvb3ZlcmxheWZzL3BhcmFtcy5jCmluZGV4IGM5M2ZjYWE0NWQ0YTM2Li5jNWE5ZTg1OGUzNjY1ZSAxMDA2NDQKLS0tIGEvZnMvb3ZlcmxheWZzL3BhcmFtcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL292ZXJsYXlmcy9wYXJhbXMuYwpAQCAtMTA0NiwxMCAmIzQzOzEwNDYsMTEgQEAgaW50IG92bF9mc19wYXJhbXNfdmVyaWZ5KGNvbnN0IHN0cnVjdCBvdmxfZnNfY29udGV4dCAqY3R4LAogICogUHJpbnRzIHRoZSBtb3VudCBvcHRpb25zIGZvciBhIGdpdmVuIHN1cGVyYmxvY2suCiAgKiBSZXR1cm5zIHplcm87IGRvZXMgbm90IGZhaWwuCiAgKi8KLWludCBvdmxfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQomIzQzO2ludCBvdmxfZ2V0X29wdGlvbnMoc3RydWN0IHNiX29wdF9jdHggKmN0eCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkZW50cnktJmd0O2Rfc2I7CiAJc3RydWN0IG92bF9mcyAqb2ZzID0gT1ZMX0ZTKHNiKTsKJiM0MzsJc3RydWN0IHBhdGggdXBwZXJwYXRoOwogCXNpemVfdCBuciwgbnJfbWVyZ2VkX2xvd2VyLCBucl9sb3dlciA9IDA7CiAJY2hhciAqKmxvd2VyZGlycyA9IG9mcy0mZ3Q7Y29uZmlnLmxvd2VyZGlyczsKIApAQCAtMTA2Miw0MyAmIzQzOzEwNjMsNDcgQEAgaW50IG92bF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAJICogd2l0aCB0aGUgbmV3IGxvd2VyZGlyJiM0MzsgYW5kIGRhdGFkaXImIzQzOyBtb3VudCBvcHRpb25zLgogCSAqLwogCWlmIChsb3dlcmRpcnNbMF0pIHsKLQkJc2VxX3Nob3dfb3B0aW9uKG0sICYjMzQ7bG93ZXJkaXImIzM0OywgbG93ZXJkaXJzWzBdKTsKJiM0MzsJCXNiX2FkZF9vcHRpb24oY3R4LCAmIzM0O2xvd2VyZGlyJiMzNDssIGxvd2VyZGlyc1swXSk7CiAJfSBlbHNlIHsKIAkJbnJfbG93ZXIgPSBvZnMtJmd0O251bWxheWVyOwogCQlucl9tZXJnZWRfbG93ZXIgPSBucl9sb3dlciAtIG9mcy0mZ3Q7bnVtZGF0YWxheWVyOwogCX0KIAlmb3IgKG5yID0gMTsgbnIgJmx0OyBucl9sb3dlcjsgbnImIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgcGF0aCBsb3dlcnBhdGggPSB7CiYjNDM7CQkJLm1udCA9IG9mcy0mZ3Q7bGF5ZXJzW25yXS5tbnQsCiYjNDM7CQkJLmRlbnRyeSA9IG9mcy0mZ3Q7bGF5ZXJzW25yXS5tbnQtJmd0O21udF9yb290LAomIzQzOwkJfTsKIAkJaWYgKG5yICZsdDsgbnJfbWVyZ2VkX2xvd2VyKQotCQkJc2VxX3Nob3dfb3B0aW9uKG0sICYjMzQ7bG93ZXJkaXImIzQzOyYjMzQ7LCBsb3dlcmRpcnNbbnJdKTsKJiM0MzsJCQlzYl9hZGRfb3B0aW9uX3BhdGgoY3R4LCAmIzM0O2xvd2VyZGlyJiM0MzsmIzM0OywgbG93ZXJkaXJzW25yXSwKJiM0MzsJCQkJCSAgICZhbXA7bG93ZXJwYXRoKTsKIAkJZWxzZQotCQkJc2VxX3Nob3dfb3B0aW9uKG0sICYjMzQ7ZGF0YWRpciYjNDM7JiMzNDssIGxvd2VyZGlyc1tucl0pOwomIzQzOwkJCXNiX2FkZF9vcHRpb25fcGF0aChjdHgsICYjMzQ7ZGF0YWRpciYjNDM7JiMzNDssIGxvd2VyZGlyc1tucl0sCiYjNDM7CQkJCQkgICAmYW1wO2xvd2VycGF0aCk7CiAJfQogCWlmIChvZnMtJmd0O2NvbmZpZy51cHBlcmRpcikgewotCQlzZXFfc2hvd19vcHRpb24obSwgJiMzNDt1cHBlcmRpciYjMzQ7LCBvZnMtJmd0O2NvbmZpZy51cHBlcmRpcik7Ci0JCXNlcV9zaG93X29wdGlvbihtLCAmIzM0O3dvcmtkaXImIzM0Oywgb2ZzLSZndDtjb25maWcud29ya2Rpcik7CiYjNDM7CQlvdmxfcGF0aF91cHBlcihzYi0mZ3Q7c19yb290LCAmYW1wO3VwcGVycGF0aCk7CiYjNDM7CQlzYl9hZGRfb3B0aW9uX3BhdGgoY3R4LCAmIzM0O3VwcGVyZGlyJiMzNDssIG9mcy0mZ3Q7Y29uZmlnLnVwcGVyZGlyLCAmYW1wO3VwcGVycGF0aCk7CiYjNDM7CQlzYl9hZGRfb3B0aW9uKGN0eCwgJiMzNDt3b3JrZGlyJiMzNDssIG9mcy0mZ3Q7Y29uZmlnLndvcmtkaXIpOwogCX0KIAlpZiAob2ZzLSZndDtjb25maWcuZGVmYXVsdF9wZXJtaXNzaW9ucykKLQkJc2VxX3B1dHMobSwgJiMzNDssZGVmYXVsdF9wZXJtaXNzaW9ucyYjMzQ7KTsKJiM0MzsJCXNiX2FkZF9vcHRpb24oY3R4LCAmIzM0O2RlZmF1bHRfcGVybWlzc2lvbnMmIzM0OywgTlVMTCk7CiAJaWYgKG9mcy0mZ3Q7Y29uZmlnLnJlZGlyZWN0X21vZGUgIT0gb3ZsX3JlZGlyZWN0X21vZGVfZGVmKCkpCi0JCXNlcV9wcmludGYobSwgJiMzNDsscmVkaXJlY3RfZGlyPSVzJiMzNDssCi0JCQkgICBvdmxfcmVkaXJlY3RfbW9kZSgmYW1wO29mcy0mZ3Q7Y29uZmlnKSk7CiYjNDM7CQlzYl9hZGRfb3B0aW9uKGN0eCwgJiMzNDtyZWRpcmVjdF9kaXImIzM0Oywgb3ZsX3JlZGlyZWN0X21vZGUoJmFtcDtvZnMtJmd0O2NvbmZpZykpOwogCWlmIChvZnMtJmd0O2NvbmZpZy5pbmRleCAhPSBvdmxfaW5kZXhfZGVmKQotCQlzZXFfcHJpbnRmKG0sICYjMzQ7LGluZGV4PSVzJiMzNDssIHN0cl9vbl9vZmYob2ZzLSZndDtjb25maWcuaW5kZXgpKTsKJiM0MzsJCXNiX2FkZF9vcHRpb24oY3R4LCAmIzM0O2luZGV4JiMzNDssIHN0cl9vbl9vZmYob2ZzLSZndDtjb25maWcuaW5kZXgpKTsKIAlpZiAob2ZzLSZndDtjb25maWcudXVpZCAhPSBvdmxfdXVpZF9kZWYoKSkKLQkJc2VxX3ByaW50ZihtLCAmIzM0Oyx1dWlkPSVzJiMzNDssIG92bF91dWlkX21vZGUoJmFtcDtvZnMtJmd0O2NvbmZpZykpOwomIzQzOwkJc2JfYWRkX29wdGlvbihjdHgsICYjMzQ7dXVpZCYjMzQ7LCBvdmxfdXVpZF9tb2RlKCZhbXA7b2ZzLSZndDtjb25maWcpKTsKIAlpZiAob2ZzLSZndDtjb25maWcubmZzX2V4cG9ydCAhPSBvdmxfbmZzX2V4cG9ydF9kZWYpCi0JCXNlcV9wcmludGYobSwgJiMzNDssbmZzX2V4cG9ydD0lcyYjMzQ7LAotCQkJICAgc3RyX29uX29mZihvZnMtJmd0O2NvbmZpZy5uZnNfZXhwb3J0KSk7CiYjNDM7CQlzYl9hZGRfb3B0aW9uKGN0eCwgJiMzNDtuZnNfZXhwb3J0JiMzNDssIHN0cl9vbl9vZmYob2ZzLSZndDtjb25maWcubmZzX2V4cG9ydCkpOwogCWlmIChvZnMtJmd0O2NvbmZpZy54aW5vICE9IG92bF94aW5vX2RlZigpICZhbXA7JmFtcDsgIW92bF9zYW1lX2ZzKG9mcykpCi0JCXNlcV9wcmludGYobSwgJiMzNDsseGlubz0lcyYjMzQ7LCBvdmxfeGlub19tb2RlKCZhbXA7b2ZzLSZndDtjb25maWcpKTsKJiM0MzsJCXNiX2FkZF9vcHRpb24oY3R4LCAmIzM0O3hpbm8mIzM0Oywgb3ZsX3hpbm9fbW9kZSgmYW1wO29mcy0mZ3Q7Y29uZmlnKSk7CiAJaWYgKG9mcy0mZ3Q7Y29uZmlnLm1ldGFjb3B5ICE9IG92bF9tZXRhY29weV9kZWYpCi0JCXNlcV9wcmludGYobSwgJiMzNDssbWV0YWNvcHk9JXMmIzM0Oywgc3RyX29uX29mZihvZnMtJmd0O2NvbmZpZy5tZXRhY29weSkpOwomIzQzOwkJc2JfYWRkX29wdGlvbihjdHgsICYjMzQ7bWV0YWNvcHkmIzM0Oywgc3RyX29uX29mZihvZnMtJmd0O2NvbmZpZy5tZXRhY29weSkpOwogCWlmIChvZnMtJmd0O2NvbmZpZy5mc3luY19tb2RlICE9IG92bF9mc3luY19tb2RlX2RlZigpKQotCQlzZXFfcHJpbnRmKG0sICYjMzQ7LGZzeW5jPSVzJiMzNDssIG92bF9mc3luY19tb2RlKCZhbXA7b2ZzLSZndDtjb25maWcpKTsKJiM0MzsJCXNiX2FkZF9vcHRpb24oY3R4LCAmIzM0O2ZzeW5jJiMzNDssIG92bF9mc3luY19tb2RlKCZhbXA7b2ZzLSZndDtjb25maWcpKTsKIAlpZiAob2ZzLSZndDtjb25maWcudXNlcnhhdHRyKQotCQlzZXFfcHV0cyhtLCAmIzM0Oyx1c2VyeGF0dHImIzM0Oyk7CiYjNDM7CQlzYl9hZGRfb3B0aW9uKGN0eCwgJiMzNDt1c2VyeGF0dHImIzM0OywgTlVMTCk7CiAJaWYgKG9mcy0mZ3Q7Y29uZmlnLnZlcml0eV9tb2RlICE9IG92bF92ZXJpdHlfbW9kZV9kZWYoKSkKLQkJc2VxX3ByaW50ZihtLCAmIzM0Oyx2ZXJpdHk9JXMmIzM0OywKLQkJCSAgIG92bF92ZXJpdHlfbW9kZSgmYW1wO29mcy0mZ3Q7Y29uZmlnKSk7CiYjNDM7CQlzYl9hZGRfb3B0aW9uKGN0eCwgJiMzNDt2ZXJpdHkmIzM0Oywgb3ZsX3Zlcml0eV9tb2RlKCZhbXA7b2ZzLSZndDtjb25maWcpKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL292ZXJsYXlmcy9wYXJhbXMuaCBiL2ZzL292ZXJsYXlmcy9wYXJhbXMuaAppbmRleCBmZmQ1M2NkZDg0ODI3Yy4uMmNmOWM0ZjE4OGE5Y2IgMTAwNjQ0Ci0tLSBhL2ZzL292ZXJsYXlmcy9wYXJhbXMuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9vdmVybGF5ZnMvcGFyYW1zLmgKQEAgLTQwLDUgJiM0Mzs0MCw1IEBAIGludCBvdmxfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYyk7CiB2b2lkIG92bF9mcmVlX2ZzKHN0cnVjdCBvdmxfZnMgKm9mcyk7CiBpbnQgb3ZsX2ZzX3BhcmFtc192ZXJpZnkoY29uc3Qgc3RydWN0IG92bF9mc19jb250ZXh0ICpjdHgsCiAJCQkgc3RydWN0IG92bF9jb25maWcgKmNvbmZpZyk7Ci1pbnQgb3ZsX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CiYjNDM7aW50IG92bF9nZXRfb3B0aW9ucyhzdHJ1Y3Qgc2Jfb3B0X2N0eCAqY3R4LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwogY29uc3QgY2hhciAqb3ZsX3hpbm9fbW9kZShzdHJ1Y3Qgb3ZsX2NvbmZpZyAqY29uZmlnKTsKZGlmZiAtLWdpdCBhL2ZzL292ZXJsYXlmcy9zdXBlci5jIGIvZnMvb3ZlcmxheWZzL3N1cGVyLmMKaW5kZXggNjBmMGI3Y2VlZjBhNmQuLjRiNTdiMmRiMDg1MjI1IDEwMDY0NAotLS0gYS9mcy9vdmVybGF5ZnMvc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9vdmVybGF5ZnMvc3VwZXIuYwpAQCAtMzAyLDcgJiM0MzszMDIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgb3ZsX3N1cGVyX29wZXJhdGlvbnMgPSB7CiAJLnB1dF9zdXBlcgk9IG92bF9wdXRfc3VwZXIsCiAJLnN5bmNfZnMJPSBvdmxfc3luY19mcywKIAkuc3RhdGZzCQk9IG92bF9zdGF0ZnMsCi0JLnNob3dfb3B0aW9ucwk9IG92bF9zaG93X29wdGlvbnMsCiYjNDM7CS5nZXRfb3B0aW9ucwk9IG92bF9nZXRfb3B0aW9ucywKIH07CiAKICNkZWZpbmUgT1ZMX1dPUktESVJfTkFNRSAmIzM0O3dvcmsmIzM0OwpAQCAtNTI5LDYgJiM0Mzs1MjksNyBAQCBzdGF0aWMgaW50IG92bF9nZXRfdXBwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IG92bF9mcyAqb2ZzLAogCiAJLyogRG9uJiMzOTt0IGluaGVyaXQgYXRpbWUgZmxhZ3MgKi8KIAl1cHBlcl9tbnQtJmd0O21udF9mbGFncyAmYW1wOz0gfihNTlRfTk9BVElNRSB8IE1OVF9OT0RJUkFUSU1FIHwgTU5UX1JFTEFUSU1FKTsKJiM0MzsJdXBwZXJfbW50LSZndDttbnRfZmxhZ3MgfD0gTU5UX0NMT05BQkxFOwogCXVwcGVyX2xheWVyLSZndDttbnQgPSB1cHBlcl9tbnQ7CiAJdXBwZXJfbGF5ZXItJmd0O2lkeCA9IDA7CiAJdXBwZXJfbGF5ZXItJmd0O2ZzaWQgPSAwOwpAQCAtMTEwNSw3ICYjNDM7MTEwNiw3IEBAIHN0YXRpYyBpbnQgb3ZsX2dldF9sYXllcnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IG92bF9mcyAqb2ZzLAogCQkgKiBNYWtlIGxvd2VyIGxheWVycyBSL08uICBUaGF0IHdheSBmY2htb2QvZmNob3duIG9uIGxvd2VyIGZpbGUKIAkJICogd2lsbCBmYWlsIGluc3RlYWQgb2YgbW9kaWZ5aW5nIGxvd2VyIGZzLgogCQkgKi8KLQkJbW50LSZndDttbnRfZmxhZ3MgfD0gTU5UX1JFQURPTkxZIHwgTU5UX05PQVRJTUU7CiYjNDM7CQltbnQtJmd0O21udF9mbGFncyB8PSBNTlRfUkVBRE9OTFkgfCBNTlRfTk9BVElNRSB8IE1OVF9DTE9OQUJMRTsKIAogCQlsYXllcnNbb2ZzLSZndDtudW1sYXllcl0udHJhcCA9IHRyYXA7CiAJCWxheWVyc1tvZnMtJmd0O251bWxheWVyXS5tbnQgPSBtbnQ7CmRpZmYgLS1naXQgYS9mcy9waWRmcy5jIGIvZnMvcGlkZnMuYwppbmRleCBhYWE2MDlkZGFiMDQ0My4uMzg0M2FjZDY1OTRkZTAgMTAwNjQ0Ci0tLSBhL2ZzL3BpZGZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvcGlkZnMuYwpAQCAtODQwLDcgJiM0Mzs4NDAsNyBAQCBzdGF0aWMgY2hhciAqcGlkZnNfZG5hbWUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpidWZmZXIsIGludCBidWZsZW4pCiAJcmV0dXJuIGR5bmFtaWNfZG5hbWUoYnVmZmVyLCBidWZsZW4sICYjMzQ7YW5vbl9pbm9kZTpbcGlkZmRdJiMzNDspOwogfQogCi1jb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgcGlkZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBwaWRmc19kZW50cnlfb3BlcmF0aW9ucyA9IHsKIAkuZF9kbmFtZQk9IHBpZGZzX2RuYW1lLAogCS5kX3BydW5lCT0gc3Rhc2hlZF9kZW50cnlfcHJ1bmUsCiB9OwpAQCAtMTE1MSw2ICYjNDM7MTE1MSw4IEBAIHZvaWQgX19pbml0IHBpZGZzX2luaXQodm9pZCkKIAlpZiAoSVNfRVJSKHBpZGZzX21udCkpCiAJCXBhbmljKCYjMzQ7RmFpbGVkIHRvIG1vdW50IHBpZGZzIHBzZXVkbyBmaWxlc3lzdGVtJiMzNDspOwogCiYjNDM7CXBpZGZzX21udC0mZ3Q7bW50X2ZsYWdzIHw9IE1OVF9DTE9OQUJMRTsKJiM0MzsKIAlwaWRmc19yb290X3BhdGgubW50ID0gcGlkZnNfbW50OwogCXBpZGZzX3Jvb3RfcGF0aC5kZW50cnkgPSBwaWRmc19tbnQtJmd0O21udF9yb290OwogfQpkaWZmIC0tZ2l0IGEvZnMvcHJvY19uYW1lc3BhY2UuYyBiL2ZzL3Byb2NfbmFtZXNwYWNlLmMKaW5kZXggNWM1NTVkYjY4YWEyMTIuLjk0YmM0YzlhYTQzZjE2IDEwMDY0NAotLS0gYS9mcy9wcm9jX25hbWVzcGFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Byb2NfbmFtZXNwYWNlLmMKQEAgLTk4LDIxICYjNDM7OTgsMjcgQEAgc3RhdGljIHZvaWQgc2hvd190eXBlKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIAl9CiB9CiAKJiM0MztzdGF0aWMgaW50IHNob3dfZGV2bmFtZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB2ZnNtb3VudCAqbW50KQomIzQzO3sKJiM0MzsJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IG1udC0mZ3Q7bW50X3NiOwomIzQzOwomIzQzOwlpZiAoc2ItJmd0O3Nfb3AtJmd0O3Nob3dfZGV2bmFtZSkKJiM0MzsJCXJldHVybiBzYi0mZ3Q7c19vcC0mZ3Q7c2hvd19kZXZuYW1lKG0sIG1udC0mZ3Q7bW50X3Jvb3QpOwomIzQzOwomIzQzOwltYW5nbGUobSwgc2ItJmd0O3NfZGV2bmFtZSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgc2hvd192ZnNtbnQoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCkKIHsKIAlzdHJ1Y3QgcHJvY19tb3VudHMgKnAgPSBtLSZndDtwcml2YXRlOwotCXN0cnVjdCBtb3VudCAqciA9IHJlYWxfbW91bnQobW50KTsKIAlzdHJ1Y3QgcGF0aCBtbnRfcGF0aCA9IHsgLmRlbnRyeSA9IG1udC0mZ3Q7bW50X3Jvb3QsIC5tbnQgPSBtbnQgfTsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gbW50X3BhdGguZGVudHJ5LSZndDtkX3NiOwogCWludCBlcnI7CiAKLQlpZiAoc2ItJmd0O3Nfb3AtJmd0O3Nob3dfZGV2bmFtZSkgewotCQllcnIgPSBzYi0mZ3Q7c19vcC0mZ3Q7c2hvd19kZXZuYW1lKG0sIG1udF9wYXRoLmRlbnRyeSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIG91dDsKLQl9IGVsc2UgewotCQltYW5nbGUobSwgci0mZ3Q7bW50X2Rldm5hbWUpOwotCX0KJiM0MzsJZXJyID0gc2hvd19kZXZuYW1lKG0sIG1udCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIG91dDsKIAlzZXFfcHV0YyhtLCAmIzM5OyAmIzM5Oyk7CiAJLyogbW91bnRwb2ludHMgb3V0c2lkZSBvZiBjaHJvb3QgamFpbCB3aWxsIGdpdmUgU0VRX1NLSVAgb24gdGhpcyAqLwogCWVyciA9IHNlcV9wYXRoX3Jvb3QobSwgJmFtcDttbnRfcGF0aCwgJmFtcDtwLSZndDtyb290LCAmIzM0OyBcdFxuXFwmIzM0Oyk7CkBAIC0xMjUsOCAmIzQzOzEzMSw3IEBAIHN0YXRpYyBpbnQgc2hvd192ZnNtbnQoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCkKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIAlzaG93X3Zmc21udF9vcHRzKG0sIG1udCk7Ci0JaWYgKHNiLSZndDtzX29wLSZndDtzaG93X29wdGlvbnMpCi0JCWVyciA9IHNiLSZndDtzX29wLSZndDtzaG93X29wdGlvbnMobSwgbW50X3BhdGguZGVudHJ5KTsKJiM0MzsJZXJyID0gbW50X3Nob3dfb3B0aW9ucyhtLCBtbnQpOwogCXNlcV9wdXRzKG0sICYjMzQ7IDAgMFxuJiMzNDspOwogb3V0OgogCXJldHVybiBlcnI7CkBAIC0xNzIsMTkgJiM0MzsxNzcsMTQgQEAgc3RhdGljIGludCBzaG93X21vdW50aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB2ZnNtb3VudCAqbW50KQogCXNlcV9wdXRzKG0sICYjMzQ7IC0gJiMzNDspOwogCXNob3dfdHlwZShtLCBzYik7CiAJc2VxX3B1dGMobSwgJiMzOTsgJiMzOTspOwotCWlmIChzYi0mZ3Q7c19vcC0mZ3Q7c2hvd19kZXZuYW1lKSB7Ci0JCWVyciA9IHNiLSZndDtzX29wLSZndDtzaG93X2Rldm5hbWUobSwgbW50LSZndDttbnRfcm9vdCk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIG91dDsKLQl9IGVsc2UgewotCQltYW5nbGUobSwgci0mZ3Q7bW50X2Rldm5hbWUpOwotCX0KJiM0MzsJZXJyID0gc2hvd19kZXZuYW1lKG0sIG1udCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIG91dDsKIAlzZXFfcHV0cyhtLCBzYl9yZG9ubHkoc2IpID8gJiMzNDsgcm8mIzM0OyA6ICYjMzQ7IHJ3JiMzNDspOwogCWVyciA9IHNob3dfc2Jfb3B0cyhtLCBzYik7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7Ci0JaWYgKHNiLSZndDtzX29wLSZndDtzaG93X29wdGlvbnMpCi0JCWVyciA9IHNiLSZndDtzX29wLSZndDtzaG93X29wdGlvbnMobSwgbW50LSZndDttbnRfcm9vdCk7CiYjNDM7CWVyciA9IG1udF9zaG93X29wdGlvbnMobSwgbW50KTsKIAlzZXFfcHV0YyhtLCAmIzM5O1xuJiMzOTspOwogb3V0OgogCXJldHVybiBlcnI7CkBAIC0xOTMsMjEgJiM0MzsxOTMsMTUgQEAgc3RhdGljIGludCBzaG93X21vdW50aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB2ZnNtb3VudCAqbW50KQogc3RhdGljIGludCBzaG93X3Zmc3N0YXQoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCkKIHsKIAlzdHJ1Y3QgcHJvY19tb3VudHMgKnAgPSBtLSZndDtwcml2YXRlOwotCXN0cnVjdCBtb3VudCAqciA9IHJlYWxfbW91bnQobW50KTsKIAlzdHJ1Y3QgcGF0aCBtbnRfcGF0aCA9IHsgLmRlbnRyeSA9IG1udC0mZ3Q7bW50X3Jvb3QsIC5tbnQgPSBtbnQgfTsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gbW50X3BhdGguZGVudHJ5LSZndDtkX3NiOwogCWludCBlcnI7CiAKIAkvKiBkZXZpY2UgKi8KIAlzZXFfcHV0cyhtLCAmIzM0O2RldmljZSAmIzM0Oyk7Ci0JaWYgKHNiLSZndDtzX29wLSZndDtzaG93X2Rldm5hbWUpIHsKLQkJZXJyID0gc2ItJmd0O3Nfb3AtJmd0O3Nob3dfZGV2bmFtZShtLCBtbnRfcGF0aC5kZW50cnkpOwotCQlpZiAoZXJyKQotCQkJZ290byBvdXQ7Ci0JfSBlbHNlIHsKLQkJbWFuZ2xlKG0sIHItJmd0O21udF9kZXZuYW1lKTsKLQl9Ci0KJiM0MzsJZXJyID0gc2hvd19kZXZuYW1lKG0sIG1udCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIG91dDsKIAkvKiBtb3VudCBwb2ludCAqLwogCXNlcV9wdXRzKG0sICYjMzQ7IG1vdW50ZWQgb24gJiMzNDspOwogCS8qIG1vdW50cG9pbnRzIG91dHNpZGUgb2YgY2hyb290IGphaWwgd2lsbCBnaXZlIFNFUV9TS0lQIG9uIHRoaXMgKi8KZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jCmluZGV4IGE4ZmQ2MTEzNmFhZmU1Li5lNTUzMWNiODhmODkxNyAxMDA2NDQKLS0tIGEvZnMvc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9zdXBlci5jCkBAIC0yODAsNiAmIzQzOzI4MCw3IEBAIHN0YXRpYyB2b2lkIGRlc3Ryb3lfc3VwZXJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJc2VjdXJpdHlfc2JfZnJlZShzKTsKIAlwdXRfdXNlcl9ucyhzLSZndDtzX3VzZXJfbnMpOwogCWtmcmVlKHMtJmd0O3Nfc3VidHlwZSk7CiYjNDM7CWtmcmVlX2NvbnN0KHMtJmd0O3NfZGV2bmFtZSk7CiAJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBTQl9GUkVFWkVfTEVWRUxTOyBpJiM0MzsmIzQzOykKIAkJcGVyY3B1X2ZyZWVfcndzZW0oJmFtcDtzLSZndDtzX3dyaXRlcnMucndfc2VtW2ldKTsKIAlrZnJlZShzKTsKQEAgLTMxNSw3ICYjNDM7MzE2LDcgQEAgc3RhdGljIHZvaWQgZGVzdHJveV91bnVzZWRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzKQogICoJcmV0dXJucyBhIHBvaW50ZXIgbmV3IHN1cGVyYmxvY2sgb3IgJU5VTEwgaWYgYWxsb2NhdGlvbiBoYWQgZmFpbGVkLgogICovCiBzdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICphbGxvY19zdXBlcihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSwgaW50IGZsYWdzLAotCQkJCSAgICAgICBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMpCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzID0ga3phbGxvY19vYmooc3RydWN0IHN1cGVyX2Jsb2NrKTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZGVmYXVsdF9vcDsKQEAgLTM0NCw2ICYjNDM7MzQ1LDEzIEBAIHN0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmFsbG9jX3N1cGVyKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlLCBpbnQgZmxhZ3MsCiAJICovCiAJZG93bl93cml0ZV9uZXN0ZWQoJmFtcDtzLSZndDtzX3Vtb3VudCwgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwogCiYjNDM7CWlmIChuYW1lKQomIzQzOwkJcy0mZ3Q7c19kZXZuYW1lID0ga3N0cmR1cF9jb25zdChuYW1lLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwomIzQzOwllbHNlCiYjNDM7CQlzLSZndDtzX2Rldm5hbWUgPSAmIzM0O25vbmUmIzM0OzsKJiM0MzsJaWYgKCFzLSZndDtzX2Rldm5hbWUpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiAJaWYgKHNlY3VyaXR5X3NiX2FsbG9jKHMpKQogCQlnb3RvIGZhaWw7CiAKQEAgLTc2Myw3ICYjNDM7NzcxLDcgQEAgc3RydWN0IHN1cGVyX2Jsb2NrICpzZ2V0X2ZjKHN0cnVjdCBmc19jb250ZXh0ICpmYywKIAl9CiAJaWYgKCFzKSB7CiAJCXNwaW5fdW5sb2NrKCZhbXA7c2JfbG9jayk7Ci0JCXMgPSBhbGxvY19zdXBlcihmYy0mZ3Q7ZnNfdHlwZSwgZmMtJmd0O3NiX2ZsYWdzLCB1c2VyX25zKTsKJiM0MzsJCXMgPSBhbGxvY19zdXBlcihmYy0mZ3Q7ZnNfdHlwZSwgZmMtJmd0O3NiX2ZsYWdzLCB1c2VyX25zLCBmYy0mZ3Q7c291cmNlKTsKIAkJaWYgKCFzKQogCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJCWdvdG8gcmV0cnk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZjbnRsLmggYi9pbmNsdWRlL2xpbnV4L2ZjbnRsLmgKaW5kZXggNmFkNmI5ZTdhMjI2YWYuLmY5NDI0MTFjOGVkN2RlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZjbnRsLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mY250bC5oCkBAIC0xMSw3ICYjNDM7MTEsNyBAQAogCShPX1JET05MWSB8IE9fV1JPTkxZIHwgT19SRFdSIHwgT19DUkVBVCB8IE9fRVhDTCB8IE9fTk9DVFRZIHwgT19UUlVOQyB8IFwKIAkgT19BUFBFTkQgfCBPX05ERUxBWSB8IE9fTk9OQkxPQ0sgfCBfX09fU1lOQyB8IE9fRFNZTkMgfCBcCiAJIEZBU1lOQwl8IE9fRElSRUNUIHwgT19MQVJHRUZJTEUgfCBPX0RJUkVDVE9SWSB8IE9fTk9GT0xMT1cgfCBcCi0JIE9fTk9BVElNRSB8IE9fQ0xPRVhFQyB8IE9fUEFUSCB8IF9fT19UTVBGSUxFIHwgT19FTVBUWVBBVEgpCiYjNDM7CSBPX05PQVRJTUUgfCBPX0NMT0VYRUMgfCBPX1BBVEggfCBfX09fVE1QRklMRSB8IE9fRU1QVFlQQVRIIHwgT19BTFQpCiAKIC8qIExpc3Qgb2YgYWxsIHZhbGlkIGZsYWdzIGZvciBvcGVuYXQyKDIpJiMzOTtzIGhvdy0mZ3Q7ZmxhZ3MgYXJndW1lbnQuICovCiAjZGVmaW5lIFZBTElEX09QRU5BVDJfRkxBR1MJKFZBTElEX09QRU5fRkxBR1MgfCBPUEVOQVQyX1JFR1VMQVIpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyLmggYi9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyLmgKaW5kZXggNDA1NjEyNjc4MTE1MWUuLjZmMGQ3Nzg5NDBmOTA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mcy9zdXBlci5oCkBAIC0yMzcsNCAmIzQzOzIzNywxNCBAQCBpbnQgdGhhd19zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnN1cGVyLCBlbnVtIGZyZWV6ZV9ob2xkZXIgd2hvLAogCiBpbnQgc2JfaW5pdF9kaW9fZG9uZV93cShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIAomIzQzO3N0cnVjdCBzYl9vcHRfY3R4IHsKJiM0MzsJdm9pZCAoKmFjdG9yKShzdHJ1Y3Qgc2Jfb3B0X2N0eCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSwKJiM0MzsJCSAgICAgIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKTsKJiM0MzsJdm9pZCAqZGF0YTsKJiM0Mzt9OwomIzQzOwomIzQzO3ZvaWQgc2JfYWRkX29wdGlvbihzdHJ1Y3Qgc2Jfb3B0X2N0eCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSk7CiYjNDM7dm9pZCBzYl9hZGRfb3B0aW9uX3BhdGgoc3RydWN0IHNiX29wdF9jdHggKmN0eCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUsCiYjNDM7CQkJY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpOwomIzQzOwogI2VuZGlmIC8qIF9MSU5VWF9GU19TVVBFUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyX3R5cGVzLmgKaW5kZXggZWY3OTQxZTlkYzc5YWMuLmYyMDU3NTlhZjFhNjMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyX3R5cGVzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mcy9zdXBlcl90eXBlcy5oCkBAIC0zNiw2ICYjNDM7MzYsNyBAQCBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdDsKIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbDsKIHN0cnVjdCB4YXR0cl9oYW5kbGVyOwogc3RydWN0IGZzZXJyb3JfZXZlbnQ7CiYjNDM7c3RydWN0IHNiX29wdF9jdHg7CiAKIGV4dGVybiBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmJsb2NrZGV2X3N1cGVyYmxvY2s7CiAKQEAgLTk5LDYgJiM0MzsxMDAsNyBAQCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyB7CiAJaW50ICgqc3RhdGZzKShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICprc3RhdGZzKTsKIAl2b2lkICgqdW1vdW50X2JlZ2luKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIAomIzQzOwlpbnQgKCpnZXRfb3B0aW9ucykoc3RydWN0IHNiX29wdF9jdHggKmN0eCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKIAlpbnQgKCpzaG93X29wdGlvbnMpKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwogCWludCAoKnNob3dfZGV2bmFtZSkoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CiAJaW50ICgqc2hvd19wYXRoKShzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKQEAgLTI4Myw2ICYjNDM7Mjg1LDggQEAgc3RydWN0IHN1cGVyX2Jsb2NrIHsKIAkgKi8KIAlhdG9taWNfdAkJCQlzX2lzd19ucl9pbl9mbGlnaHQ7CiAjZW5kaWYKJiM0MzsJLyogTmFtZSBvZiBkZXZpY2UgZS5nLiAvZGV2L2Rzay9oZGExICovCiYjNDM7CWNvbnN0IGNoYXIgCQkJCSpzX2Rldm5hbWU7CiB9IF9fcmFuZG9taXplX2xheW91dDsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW91bnQuaCBiL2luY2x1ZGUvbGludXgvbW91bnQuaAppbmRleCBhY2ZlN2VmODZhMWIzZi4uZDA3MTg1NWNhNGVkZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW91bnQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21vdW50LmgKQEAgLTQ0LDYgJiM0Mzs0NCw3IEBAIGVudW0gbW91bnRfZmxhZ3MgewogCU1OVF9MT0NLRUQJCT0gMHg4MDAwMDAsCiAJTU5UX0RPT01FRAkJPSAweDEwMDAwMDAsCiAJTU5UX1NZTkNfVU1PVU5UCQk9IDB4MjAwMDAwMCwKJiM0MzsJTU5UX0NMT05BQkxFCQk9IDB4NDAwMDAwMCwKIAlNTlRfVU1PVU5UCQk9IDB4ODAwMDAwMCwKIAogCU1OVF9VU0VSX1NFVFRBQkxFX01BU0sgID0gTU5UX05PU1VJRCB8IE1OVF9OT0RFViB8IE1OVF9OT0VYRUMKQEAgLTUyLDcgJiM0Mzs1Myw3IEBAIGVudW0gbW91bnRfZmxhZ3MgewogCU1OVF9BVElNRV9NQVNLID0gTU5UX05PQVRJTUUgfCBNTlRfTk9ESVJBVElNRSB8IE1OVF9SRUxBVElNRSwKIAogCU1OVF9JTlRFUk5BTF9GTEFHUyA9IE1OVF9JTlRFUk5BTCB8IE1OVF9ET09NRUQgfAotCQkJICAgICBNTlRfU1lOQ19VTU9VTlQgfCBNTlRfTE9DS0VECiYjNDM7CQkJICAgICBNTlRfU1lOQ19VTU9VTlQgfCBNTlRfTE9DS0VEIHwgTU5UX0NMT05BQkxFCiB9OwogCiBzdHJ1Y3QgdmZzbW91bnQgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uYW1laS5oIGIvaW5jbHVkZS9saW51eC9uYW1laS5oCmluZGV4IGViZTZlMjlmN2U5M2JhLi5jMjFkYzY1MzY5MDBjZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uYW1laS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmFtZWkuaApAQCAtMjUsNyAmIzQzOzI1LDggQEAgZW51bSB7IE1BWF9ORVNURURfTElOS1MgPSA4IH07CiAjZGVmaW5lIExPT0tVUF9SQ1UJCUJJVCg4KQkvKiBSQ1UgcGF0aHdhbGsgbW9kZTsgc2VtaS1pbnRlcm5hbCAqLwogI2RlZmluZSBMT09LVVBfQ0FDSEVECQlCSVQoOSkgLyogT25seSBkbyBjYWNoZWQgbG9va3VwICovCiAjZGVmaW5lIExPT0tVUF9QQVJFTlQJCUJJVCgxMCkJLyogTG9va2luZyB1cCBmaW5hbCBwYXJlbnQgaW4gcGF0aCAqLwotLyogNSBzcGFyZSBiaXRzIGZvciBwYXRod2FsayAqLwomIzQzOyNkZWZpbmUgTE9PS1VQX0FMVAkJQklUKDExKSAvKiBMb29rIHVwIGluIGFsdGVybmF0aXZlIG5hbWVzcGFjZSAqLwomIzQzOy8qIDQgc3BhcmUgYml0cyBmb3IgcGF0aHdhbGsgKi8KIAogLyogVGhlc2UgdGVsbCBmaWxlc3lzdGVtIG1ldGhvZHMgdGhhdCB3ZSBhcmUgZGVhbGluZyB3aXRoIHRoZSBmaW5hbCBjb21wb25lbnQuLi4gKi8KICNkZWZpbmUgTE9PS1VQX09QRU4JCUJJVCgxNikJLyogLi4uIGluIG9wZW4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGlkZnMuaCBiL2luY2x1ZGUvbGludXgvcGlkZnMuaAppbmRleCAwYWJmN2RhOWFiMjM2ZS4uZmFiNmY0OGZmMjAzMzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGlkZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BpZGZzLmgKQEAgLTE1LDcgJiM0MzsxNSw2IEBAIHZvaWQgcGlkZnNfZXhpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CiAjaWZkZWYgQ09ORklHX0NPUkVEVU1QCiB2b2lkIHBpZGZzX2NvcmVkdW1wKGNvbnN0IHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pOwogI2VuZGlmCi1leHRlcm4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHBpZGZzX2RlbnRyeV9vcGVyYXRpb25zOwogaW50IHBpZGZzX3JlZ2lzdGVyX3BpZF9nZnAoc3RydWN0IHBpZCAqcGlkLCBnZnBfdCBnZnApOwogCiAvKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9mY250bC5oIGIvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL2ZjbnRsLmgKaW5kZXggODgzY2ZkN2RlMmVmZmEuLjcwZGJiYWMxYzUyMDc4IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvZmNudGwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvZmNudGwuaApAQCAtOTYsNiAmIzQzOzk2LDEwIEBACiAjZGVmaW5lIE9fRU1QVFlQQVRICSgxICZsdDsmbHQ7IDI2KQkvKiBhbGxvdyBlbXB0eSBwYXRoICovCiAjZW5kaWYKIAomIzQzOyNpZm5kZWYgT19BTFQKJiM0MzsjZGVmaW5lIE9fQUxUCQkoMSAmbHQ7Jmx0OyAyNykJLyogT3BlbiBpbiBhbHRlcm5hdGl2ZSBuYW1lc3BhY2UgKi8KJiM0MzsjZW5kaWYKJiM0MzsKIC8qIGEgaG9ycmlkIGtsdWRnZSB0cnlpbmcgdG8gbWFrZSBzdXJlIHRoYXQgdGhpcyB3aWxsIGZhaWwgb24gb2xkIGtlcm5lbHMgKi8KICNkZWZpbmUgT19UTVBGSUxFIChfX09fVE1QRklMRSB8IE9fRElSRUNUT1JZKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbW91bnQuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9tb3VudC5oCmluZGV4IDIyMDQ3MDhkYmY3YTU4Li42ZTc5NGQyMTRjZjk4MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L21vdW50LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L21vdW50LmgKQEAgLTYzLDYgJiM0Mzs2Myw3IEBACiAgKi8KICNkZWZpbmUgT1BFTl9UUkVFX0NMT05FCQkoMSAmbHQ7Jmx0OyAwKQkvKiBDbG9uZSB0aGUgdGFyZ2V0IHRyZWUgYW5kIGF0dGFjaCB0aGUgY2xvbmUgKi8KICNkZWZpbmUgT1BFTl9UUkVFX05BTUVTUEFDRQkoMSAmbHQ7Jmx0OyAxKQkvKiBDbG9uZSB0aGUgdGFyZ2V0IHRyZWUgaW50byBhIG5ldyBtb3VudCBuYW1lc3BhY2UgKi8KJiM0MzsjZGVmaW5lIE9QRU5fVFJFRV9BTFQJCSgxICZsdDsmbHQ7IDIpCS8qIExvb2t1cCBpbiBhbHRlcm5hdGl2ZSBuYW1lc3BhY2UgKi8KICNkZWZpbmUgT1BFTl9UUkVFX0NMT0VYRUMJT19DTE9FWEVDCS8qIENsb3NlIHRoZSBmaWxlIG9uIGV4ZWN2ZSgpICovCiAKIC8qCmRpZmYgLS1naXQgYS9zY3JpcHRzL2dkYi9saW51eC9wcm9jLnB5IGIvc2NyaXB0cy9nZGIvbGludXgvcHJvYy5weQppbmRleCA2NWRkMWJkMTI5NjQxZC4uNWFhZjJkZDhkYjA1YTEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvZ2RiL2xpbnV4L3Byb2MucHkKJiM0MzsmIzQzOyYjNDM7IGIvc2NyaXB0cy9nZGIvbGludXgvcHJvYy5weQpAQCAtMTc0LDkgJiM0MzsxNzQsNiBAQCB2YWx1ZXMgb2YgdGhhdCBwcm9jZXNzIG5hbWVzcGFjZSYjMzQ7JiMzNDsmIzM0OwogICAgICAgICAgICAgICAgICAgJiMzNDttb3VudCYjMzQ7LCAmIzM0O3N1cGVyX2Jsb2NrJiMzNDssICYjMzQ7ZGV2bmFtZSYjMzQ7LCAmIzM0O3BhdGhuYW1lJiMzNDssICYjMzQ7ZnN0eXBlJiMzNDspKQogCiAgICAgICAgIGZvciBtbnQgaW4gcmJ0cmVlLnJiX2lub3JkZXJfZm9yX2VhY2hfZW50cnkobmFtZXNwYWNlWyYjMzk7bW91bnRzJiMzOTtdLCBtb3VudF9wdHJfdHlwZSwgJiMzNDttbnRfbm9kZSYjMzQ7KToKLSAgICAgICAgICAgIGRldm5hbWUgPSBtbnRbJiMzOTttbnRfZGV2bmFtZSYjMzk7XS5zdHJpbmcoKQotICAgICAgICAgICAgZGV2bmFtZSA9IGRldm5hbWUgaWYgZGV2bmFtZSBlbHNlICYjMzQ7bm9uZSYjMzQ7Ci0KICAgICAgICAgICAgIHBhdGhuYW1lID0gJiMzNDsmIzM0OwogICAgICAgICAgICAgcGFyZW50ID0gbW50CiAgICAgICAgICAgICB3aGlsZSBUcnVlOgpAQCAtMTkwLDYgJiM0MzsxODcsOCBAQCB2YWx1ZXMgb2YgdGhhdCBwcm9jZXNzIG5hbWVzcGFjZSYjMzQ7JiMzNDsmIzM0OwogICAgICAgICAgICAgICAgIHBhdGhuYW1lID0gJiMzNDsvJiMzNDsKIAogICAgICAgICAgICAgc3VwZXJibG9jayA9IG1udFsmIzM5O21udCYjMzk7XVsmIzM5O21udF9zYiYjMzk7XQomIzQzOyAgICAgICAgICAgIGRldm5hbWUgPSBzdXBlcmJsb2NrWyYjMzk7c19kZXZuYW1lJiMzOTtdLnN0cmluZygpCiYjNDM7ICAgICAgICAgICAgZGV2bmFtZSA9IGRldm5hbWUgaWYgZGV2bmFtZSBlbHNlICYjMzQ7bm9uZSYjMzQ7CiAgICAgICAgICAgICBmc3R5cGUgPSBzdXBlcmJsb2NrWyYjMzk7c190eXBlJiMzOTtdWyYjMzk7bmFtZSYjMzk7XS5zdHJpbmcoKQogICAgICAgICAgICAgc19mbGFncyA9IGludChzdXBlcmJsb2NrWyYjMzk7c19mbGFncyYjMzk7XSkKICAgICAgICAgICAgIG1fZmxhZ3MgPSBpbnQobW50WyYjMzk7bW50JiMzOTtdWyYjMzk7bW50X2ZsYWdzJiMzOTtdKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAxNjowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDAzNQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEzNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW5pdGlhbCBBc3Nlc3NtZW50IGFuZCBTeW1ib2wgSWRlbnRpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzLiBJdCBzZWVtcyB3ZSYjMzk7dmUgZ290IGEgcHJldHR5IHN1YnN0YW50aWFsIHNldCBvZiBjaGFuZ2VzIGhlcmUg4oCTIGEgd2hvbGUgbmV3IHZpcnR1YWwgZmlsZXN5c3RlbSBjYWxsZWQgYG1ldGFmc2AgaXMgYmVpbmcgaW50cm9kdWNlZCwgYWxvbmcgd2l0aCBzb21lIG1vZGlmaWNhdGlvbnMgdG8gdGhlIFZGUyBsYXllciB0byBzdXBwb3J0IGFuIGBPX0FMVGAgZmxhZy4gVGhpcyBmbGFnIGlzIGZvciBhbHRlcm5hdGl2ZSBuYW1lc3BhY2UgbG9va3Vwcy4gVGhleSYjMzk7dmUgYWxzbyByZWppZ2dlcmVkIGhvdyBtb3VudCBkZXZpY2UgbmFtZXMgYXJlIHN0b3JlZCwgbW92aW5nIHRoZW0gZnJvbSBgc3RydWN0IG1vdW50YCB0byBgc3RydWN0IHN1cGVyX2Jsb2NrYCwgYW5kIGFkZGVkIGEgYGdldF9vcHRpb25zYCB0byBgc3VwZXJfb3BlcmF0aW9uc2AsIHdoaWNoIGlzIHJlcGxhY2luZyBgc2hvd19vcHRpb25zYC4KCkZpcnN0IHRoaW5nJiMzOTtzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMuIEkmIzM5O20gZ29pbmcgdGhyb3VnaCB0aGUgZmlsZXMsIGFuZCBpdCBsb29rcyBsaWtlOgoKKiAgIFdlIGhhdmUgYSBuZXcgZmlsZXN5c3RlbSBiZWluZyBidWlsdCAoYG1ldGFmc2ApLgoqICAgVGhlIFZGUyBsYXllciBpcyBiZWluZyB0d2Vha2VkIGZvciB0aGUgYE9fQUxUYCBmbGFnLgoqICAgTW91bnQgaW5mb3JtYXRpb24gaGFzIGJlZW4gbW92ZWQuCiogICBOZXcgYGdldF9vcHRpb25zYCBmdW5jdGlvbi4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHdoYXQgdGhlIGNvcmUgcGFydHMgb2YgdGhlc2UgY2hhbmdlcyBhcmUuCgpGcm9tIGEgcXVpY2sgc2NhbiBvZiB0aGUgY29kZSBjaGFuZ2VzLCBgbWV0YWZzYCBsb29rcyB0byBiZSB0aGUgYmlnLCBuZXcgdGhpbmcsIGFuZCB3aWxsIGxpa2VseSBuZWVkIGZ1enppbmcuIFNwZWNpZmljYWxseSwgYG1ldGFmc19pbml0X2ZzX2NvbnRleHRgLCBgbWV0YWZzX2NvbGxlY3Rfb3B0aW9uYCwgYG1ldGFmc19nZXRfb3B0aW9uX3ZhbHVlc2AsIGBtZXRhZnNfZ2V0X2xpbmtgLCBgbWV0YWZzX3JlYWRsaW5rYCwgYG1ldGFmc19kX3JlbGVhc2VgLCBgbWV0YWZzX2dldF9pbm9kZWAsIGBtZXRhZnNfcm9vdF9sb29rdXBgLCBgbWV0YWZzX21vdW50X2xvb2t1cGAsIGBtZXRhZnNfb3B0aW9uc19sb29rdXBgLCBgbWV0YWZzX29wdGlvbl92YWx1ZXNfbG9va3VwYCwgYG1ldGFmc19nZXRfYmFzZV9maWxlYCwgYG1ldGFmc19jcmVhdGVfcm9vdGAsIGFuZCBgbWV0YWZzX2dldF9yb290YCBhcmUgdGhlIGZ1bmN0aW9ucyBvZiB0aGlzIGZpbGVzeXN0ZW0gdG8gZm9jdXMgb24uCgpBbHNvLCBJIGhhdmUgdG8gYmUgYXdhcmUgb2YgdGhlIGBwYXRoX2luaXRgIGluIGBmcy9uYW1laS5jYCwgYW5kIHRoZSBgYnVpbGRfb3Blbl9mbGFnc2AgaW4gYGZzL29wZW4uY2AuIFRoZXNlIGFyZSBib3RoIGhvdCBwYXRocyBhbmQgY291bGQgcHJlc2VudCBvcHBvcnR1bml0aWVzIGZvciBleHBsb2l0YXRpb24uCgpUaGVyZSBhcmUgYWxzbyBhIGJ1bmNoIG9mIG90aGVyIGNoYW5nZXMgdGhhdCBzaG91bGQgYmUgdmVyaWZpZWQ6IGBtbnRfc2hvd19vcHRpb25zYCwgYHNiX2FkZF9vcHRpb25gLCBgc2JfYWRkX29wdGlvbl9wYXRoYCwgYG92bF9nZXRfb3B0aW9uc2AsIGFuZCBgZXJvZnNfZ2V0X29wdGlvbnNgLgoKKipGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIGBtZXRhZnNgIGlzIGJ1aWx0LWluLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gU28sIGZ1enppbmcgYG9wZW5hdDJgIG9yIGBvcGVuYCB3aXRoIHRoZSBuZXcgYE9fQUxUYCBmbGFnIHdpbGwgdHJpZ2dlciB0aGUgYG1ldGFmc19nZXRfcm9vdGAgZnVuY3Rpb24sIHNvIEkmIzM5O2xsIHdhbnQgdG8gZm9jdXMgb24gdGhhdC4gQWxzbywgdGhlIHNhbWUgaXMgdHJ1ZSBmb3IgYG9wZW5fdHJlZWAgdXNpbmcgYE9QRU5fVFJFRV9BTFRgLgoKU28gdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24gZm9yIGZ1enppbmc6CgoqICAgYG1ldGFmc19nZXRfcm9vdGAKKiAgIGBtZXRhZnNfY3JlYXRlX3Jvb3RgCiogICBgbWV0YWZzX3Jvb3RfbG9va3VwYAoqICAgYG1ldGFmc19tb3VudF9sb29rdXBgCiogICBgbWV0YWZzX29wdGlvbnNfbG9va3VwYAoqICAgYG1ldGFmc19vcHRpb25fdmFsdWVzX2xvb2t1cGAKKiAgIGBtZXRhZnNfZ2V0X29wdGlvbl92YWx1ZXNgCiogICBgbWV0YWZzX2dldF9saW5rYAoqICAgYG1ldGFmc19yZWFkbGlua2AKKiAgIGBtbnRfc2hvd19vcHRpb25zYAoqICAgYHNiX2FkZF9vcHRpb25gCiogICBgc2JfYWRkX29wdGlvbl9wYXRoYAoqICAgYG92bF9nZXRfb3B0aW9uc2AKKiAgIGBlcm9mc19nZXRfb3B0aW9uc2AKCkkgc2hvdWxkIHNjYW4gYGZzL21ldGFmcy9tZXRhZnMuY2AgYSBiaXQgY2xvc2VyIGFuZCBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IHBvdGVudGlhbCB0YXJnZXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDE2OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15zdGF0aWMuKiBtZXRhZnNfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbWV0YWZzL21ldGFmcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL21ldGFmcy9tZXRhZnMuYz0yND1zdGF0aWMgc3RydWN0IHZmc21vdW50ICptZXRhZnNfbW50IF9fcm9fYWZ0ZXJfaW5pdDtcbmZzL21ldGFmcy9tZXRhZnMuYy0yNS1cbmZzL21ldGFmcy9tZXRhZnMuYzoyNjpzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgbWV0YWZzX29wcyA9IHtcbmZzL21ldGFmcy9tZXRhZnMuYy0yNy1cdC5zdGF0ZnNcdFx0PSBzaW1wbGVfc3RhdGZzLFxuLS1cbmZzL21ldGFmcy9tZXRhZnMuYy0zMC1cbmZzL21ldGFmcy9tZXRhZnMuYzozMTpzdGF0aWMgaW50IG1ldGFmc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvbWV0YWZzL21ldGFmcy5jLTMyLXtcbi0tXG5mcy9tZXRhZnMvbWV0YWZzLmMtMzktXG5mcy9tZXRhZnMvbWV0YWZzLmM6NDA6c3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIG1ldGFmc190eXBlID0ge1xuZnMvbWV0YWZzL21ldGFmcy5jLTQxLVx0Lm5hbWUgPSBcJiMzNDttZXRhZnNcJiMzNDssXG4tLVxuZnMvbWV0YWZzL21ldGFmcy5jPTc0PXN0cnVjdCBtZXRhZnNfY29sbGVjdF9jdHgge1xuLS1cbmZzL21ldGFmcy9tZXRhZnMuYy04Ny0gKi9cbmZzL21ldGFmcy9tZXRhZnMuYzo4ODpzdGF0aWMgdm9pZCBtZXRhZnNfY29sbGVjdF9vcHRpb24oc3RydWN0IHNiX29wdF9jdHggKmN0eCwgY29uc3QgY2hhciAqbmFtZSxcbmZzL21ldGFmcy9tZXRhZnMuYy04OS1cdFx0XHRcdCAgY29uc3QgY2hhciAqdmFsdWUsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKVxuLS1cbmZzL21ldGFmcy9tZXRhZnMuYy0xMjgtXG5mcy9tZXRhZnMvbWV0YWZzLmM6MTI5OnN0YXRpYyB2b2lkIG1ldGFmc19mcmVlX2VudHJpZXMoc3RydWN0IG1ldGFmc19vcHRpb25fZW50cnkgKmVudHJpZXMsIGludCBjb3VudClcbmZzL21ldGFmcy9tZXRhZnMuYy0xMzAte1xuLS1cbmZzL21ldGFmcy9tZXRhZnMuYy0xNDAtXG5mcy9tZXRhZnMvbWV0YWZzLmM6MTQxOnN0YXRpYyBpbnQgbWV0YWZzX2dldF9vcHRpb25fdmFsdWVzKHN0cnVjdCBmaWxlICpiYXNlLCBjb25zdCBjaGFyICpvcHRpb25fbmFtZSxcbmZzL21ldGFmcy9tZXRhZnMuYy0xNDItXHRcdFx0XHQgICAgc3RydWN0IG1ldGFmc19vcHRpb25fZW50cnkgKiplbnRyaWVzX291dCxcbi0tXG5mcy9tZXRhZnMvbWV0YWZzLmM9MTg3PXN0YXRpYyBjb25zdCBjaGFyICptZXRhZnNfZ2V0X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL21ldGFmcy9tZXRhZnMuYy0yMDYtXG5mcy9tZXRhZnMvbWV0YWZzLmM6MjA3OnN0YXRpYyBpbnQgbWV0YWZzX3JlYWRsaW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbmZzL21ldGFmcy9tZXRhZnMuYy0yMDgtXHRcdFx0ICAgaW50IGJ1Zmxlbilcbi0tXG5mcy9tZXRhZnMvbWV0YWZzLmMtMjE4LVxuZnMvbWV0YWZzL21ldGFmcy5jOjIxOTpzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWV0YWZzX3N5bWxpbmtfaW9wcyA9IHtcbmZzL21ldGFmcy9tZXRhZnMuYy0yMjAtXHQuZ2V0X2xpbmtcdD0gbWV0YWZzX2dldF9saW5rLFxuLS1cbmZzL21ldGFmcy9tZXRhZnMuYy0yMjYtICovXG5mcy9tZXRhZnMvbWV0YWZzLmM6MjI3OnN0YXRpYyB2b2lkIG1ldGFmc19kX3JlbGVhc2Uoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuZnMvbWV0YWZzL21ldGFmcy5jLTIyOC17XG4tLVxuZnMvbWV0YWZzL21ldGFmcy5jLTI1Mi1cbmZzL21ldGFmcy9tZXRhZnMuYzoyNTM6c3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBtZXRhZnNfZGVudHJ5X29wcyA9IHtcbmZzL21ldGFmcy9tZXRhZnMuYy0yNTQtXHQuZF9yZWxlYXNlID0gbWV0YWZzX2RfcmVsZWFzZSxcbi0tXG5mcy9tZXRhZnMvbWV0YWZzLmM9MjY3PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICptZXRhZnNfb3B0aW9uX3ZhbHVlc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9tZXRhZnMvbWV0YWZzLmMtMjY5LVxuZnMvbWV0YWZzL21ldGFmcy5jOjI3MDpzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWV0YWZzX3Jvb3RfZGlyX2lvcHMgPSB7XG5mcy9tZXRhZnMvbWV0YWZzLmMtMjcxLVx0Lmxvb2t1cFx0XHQ9IG1ldGFmc19yb290X2xvb2t1cCxcbi0tXG5mcy9tZXRhZnMvbWV0YWZzLmMtMjczLVxuZnMvbWV0YWZzL21ldGFmcy5jOjI3NDpzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWV0YWZzX21vdW50X2Rpcl9pb3BzID0ge1xuZnMvbWV0YWZzL21ldGFmcy5jLTI3NS1cdC5sb29rdXBcdFx0PSBtZXRhZnNfbW91bnRfbG9va3VwLFxuLS1cbmZzL21ldGFmcy9tZXRhZnMuYy0yNzctXG5mcy9tZXRhZnMvbWV0YWZzLmM6Mjc4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBtZXRhZnNfb3B0aW9uc19kaXJfaW9wcyA9IHtcbmZzL21ldGFmcy9tZXRhZnMuYy0yNzktXHQubG9va3VwXHRcdD0gbWV0YWZzX29wdGlvbnNfbG9va3VwLFxuLS1cbmZzL21ldGFmcy9tZXRhZnMuYy0yODEtXG5mcy9tZXRhZnMvbWV0YWZzLmM6MjgyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBtZXRhZnNfb3B0aW9uX3ZhbHVlc19kaXJfaW9wcyA9IHtcbmZzL21ldGFmcy9tZXRhZnMuYy0yODMtXHQubG9va3VwXHRcdD0gbWV0YWZzX29wdGlvbl92YWx1ZXNfbG9va3VwLFxuLS1cbmZzL21ldGFmcy9tZXRhZnMuYz01NTE9RVhQT1JUX1NZTUJPTF9HUEwobWV0YWZzX2dldF9yb290KTtcbmZzL21ldGFmcy9tZXRhZnMuYy01NTItXG5mcy9tZXRhZnMvbWV0YWZzLmM6NTUzOnN0YXRpYyBpbnQgX19pbml0IG1ldGFmc19pbml0KHZvaWQpXG5mcy9tZXRhZnMvbWV0YWZzLmMtNTU0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAxNjowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzQ5NgoJCQkJCQkJb3V0cHV0OiA2NwoJCQkJCQkJdGhvdWdodHM6IDE2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCBGaWxlc3lzdGVtIENoYW5nZXMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHRoaXMgbmV3IGBtZXRhZnNgIHZpcnR1YWwgZmlsZXN5c3RlbSDigJMgaW50ZXJlc3RpbmcuIEl0IHNvdW5kcyBsaWtlIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGdpdmUgdXMgYSBkaXJlY3Qgd2F5IHRvIGFjY2VzcyBtZXRhZGF0YSBhYm91dCBmaWxlcyBhbmQgZmlsZXN5c3RlbXMsIHdoaWNoIGlzIHVzZWZ1bC4gSSBzZWUgaXQgdXNlcyBgT19BTFRgIGZpbGUgZGVzY3JpcHRvcnMsIHdoaWNoIGlzIGEgZ29vZCBjaG9pY2UgZm9yIHRoaXMgdHlwZSBvZiBhY2Nlc3MsIGtlZXBzIHRoaW5ncyBjbGVhbi4gUGx1cywgaXQgdG91Y2hlcyBgZXJvZnNgIGFuZCBgb3ZlcmxheWZzYCwgbW9kaWZ5aW5nIHRoZW0gdG8gc3VwcG9ydCBgZ2V0X29wdGlvbnNgLiBUaGF0JiMzOTtzIG5vdCBlbnRpcmVseSBzdXJwcmlzaW5nLCBnaXZlbiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gZmlsZXN5c3RlbXMuCgpUaGUgYG1ldGFmc2AgZmlsZXN5c3RlbSBpdHNlbGYgaXMgYWx3YXlzIGJ1aWx0LWluLCBubyBjb25maWd1cmF0aW9uIG5lZWRlZCwganVzdCBgb2JqLXkgJiM0Mzs9IG1ldGFmcy9gLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzIG9uIHRoZSB1c2VyIHNpZGUuIEhvd2V2ZXIsIEkgbmVlZCB0byBtYWtlIHN1cmUgYEVST0ZTX0ZTYCBhbmQgYE9WRVJMQVlfRlNgIGFyZSBlbmFibGVkIHRvIHRlc3QgdGhlIGBlcm9mc2AgYW5kIGBvdmVybGF5ZnNgIGNoYW5nZXMgcHJvcGVybHksIGFzIGl0IGltcGFjdHMgdGhlbS4KCk5vdywgbGV0JiMzOTtzIGp1c3QgY29uZmlybS4gSSB3YW50IHRvIGJlIHRob3JvdWdoLiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCBgZnMvZXJvZnMvS2NvbmZpZ2AgYW5kIGBmcy9vdmVybGF5ZnMvS2NvbmZpZ2AuIEkmIzM5O2xsIGNvbmZpcm0gSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBvYnZpb3VzIGluIHRoZSBjb25maWd1cmF0aW9uIHNwYWNlLCBhbmQgZG91YmxlIGNoZWNrIHRoZSBleGFjdCBjb25maWcgbmFtZXMgZm9yIHRob3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDE2OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15jb25maWcgRVJPRlNfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9lcm9mcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Vyb2ZzL0tjb25maWctMi1cbmZzL2Vyb2ZzL0tjb25maWc6Mzpjb25maWcgRVJPRlNfRlNcbmZzL2Vyb2ZzL0tjb25maWctNC1cdHRyaXN0YXRlIFwmIzM0O0VST0ZTIGZpbGVzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctNDktXG5mcy9lcm9mcy9LY29uZmlnOjUwOmNvbmZpZyBFUk9GU19GU19ERUJVR1xuZnMvZXJvZnMvS2NvbmZpZy01MS1cdGJvb2wgXCYjMzQ7RVJPRlMgZGVidWdnaW5nIGZlYXR1cmVcJiMzNDtcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTU5LVxuZnMvZXJvZnMvS2NvbmZpZzo2MDpjb25maWcgRVJPRlNfRlNfWEFUVFJcbmZzL2Vyb2ZzL0tjb25maWctNjEtXHRib29sIFwmIzM0O0VST0ZTIGV4dGVuZGVkIGF0dHJpYnV0ZXNcJiMzNDtcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTcwLVxuZnMvZXJvZnMvS2NvbmZpZzo3MTpjb25maWcgRVJPRlNfRlNfUE9TSVhfQUNMXG5mcy9lcm9mcy9LY29uZmlnLTcyLVx0Ym9vbCBcJiMzNDtFUk9GUyBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctODQtXG5mcy9lcm9mcy9LY29uZmlnOjg1OmNvbmZpZyBFUk9GU19GU19TRUNVUklUWVxuZnMvZXJvZnMvS2NvbmZpZy04Ni1cdGJvb2wgXCYjMzQ7RVJPRlMgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy05Ny1cbmZzL2Vyb2ZzL0tjb25maWc6OTg6Y29uZmlnIEVST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFXG5mcy9lcm9mcy9LY29uZmlnLTk5LVx0Ym9vbCBcJiMzNDtGaWxlLWJhY2tlZCBFUk9GUyBmaWxlc3lzdGVtIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTExMS1cbmZzL2Vyb2ZzL0tjb25maWc6MTEyOmNvbmZpZyBFUk9GU19GU19aSVBcbmZzL2Vyb2ZzL0tjb25maWctMTEzLVx0Ym9vbCBcJiMzNDtFUk9GUyBEYXRhIENvbXByZXNzaW9uIFN1cHBvcnRcJiMzNDtcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTEyMS1cbmZzL2Vyb2ZzL0tjb25maWc6MTIyOmNvbmZpZyBFUk9GU19GU19aSVBfTFpNQVxuZnMvZXJvZnMvS2NvbmZpZy0xMjMtXHRib29sIFwmIzM0O0VST0ZTIExaTUEgY29tcHJlc3NlZCBkYXRhIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTEzMy1cbmZzL2Vyb2ZzL0tjb25maWc6MTM0OmNvbmZpZyBFUk9GU19GU19aSVBfREVGTEFURVxuZnMvZXJvZnMvS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0VST0ZTIERFRkxBVEUgY29tcHJlc3NlZCBkYXRhIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTE0NC1cbmZzL2Vyb2ZzL0tjb25maWc6MTQ1OmNvbmZpZyBFUk9GU19GU19aSVBfWlNURFxuZnMvZXJvZnMvS2NvbmZpZy0xNDYtXHRib29sIFwmIzM0O0VST0ZTIFpzdGFuZGFyZCBjb21wcmVzc2VkIGRhdGEgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctMTU1LVxuZnMvZXJvZnMvS2NvbmZpZzoxNTY6Y29uZmlnIEVST0ZTX0ZTX1pJUF9BQ0NFTFxuZnMvZXJvZnMvS2NvbmZpZy0xNTctXHRib29sIFwmIzM0O0VST0ZTIGhhcmR3YXJlIGRlY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctMTY5LVxuZnMvZXJvZnMvS2NvbmZpZzoxNzA6Y29uZmlnIEVST0ZTX0ZTX1BDUFVfS1RIUkVBRFxuZnMvZXJvZnMvS2NvbmZpZy0xNzEtXHRib29sIFwmIzM0O0VST0ZTIHBlci1jcHUgZGVjb21wcmVzc2lvbiBrdGhyZWFkIHdvcmtlcnNcJiMzNDtcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTE3OC1cbmZzL2Vyb2ZzL0tjb25maWc6MTc5OmNvbmZpZyBFUk9GU19GU19QQ1BVX0tUSFJFQURfSElQUklcbmZzL2Vyb2ZzL0tjb25maWctMTgwLVx0Ym9vbCBcJiMzNDtFUk9GUyBoaWdoIHByaW9yaXR5IHBlci1DUFUga3RocmVhZCB3b3JrZXJzXCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy0xODgtXG5mcy9lcm9mcy9LY29uZmlnOjE4OTpjb25maWcgRVJPRlNfRlNfUEFHRV9DQUNIRV9TSEFSRVxuZnMvZXJvZnMvS2NvbmZpZy0xOTAtXHRib29sIFwmIzM0O0VST0ZTIHBhZ2UgY2FjaGUgc2hhcmUgc3VwcG9ydCAoZXhwZXJpbWVudGFsKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDE2OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15jb25maWcgT1ZFUkxBWV9GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL292ZXJsYXlmcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL292ZXJsYXlmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9vdmVybGF5ZnMvS2NvbmZpZzoyOmNvbmZpZyBPVkVSTEFZX0ZTXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7T3ZlcmxheSBmaWxlc3lzdGVtIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0xNC1cbmZzL292ZXJsYXlmcy9LY29uZmlnOjE1OmNvbmZpZyBPVkVSTEFZX0ZTX1JFRElSRUNUX0RJUlxuZnMvb3ZlcmxheWZzL0tjb25maWctMTYtXHRib29sIFwmIzM0O092ZXJsYXlmczogdHVybiBvbiByZWRpcmVjdCBkaXJlY3RvcnkgZmVhdHVyZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxuZnMvb3ZlcmxheWZzL0tjb25maWctMzAtXG5mcy9vdmVybGF5ZnMvS2NvbmZpZzozMTpjb25maWcgT1ZFUkxBWV9GU19SRURJUkVDVF9BTFdBWVNfRk9MTE9XXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0zMi1cdGJvb2wgXCYjMzQ7T3ZlcmxheWZzOiBmb2xsb3cgcmVkaXJlY3RzIGV2ZW4gaWYgcmVkaXJlY3RzIGFyZSB0dXJuZWQgb2ZmXCYjMzQ7XG4tLVxuZnMvb3ZlcmxheWZzL0tjb25maWctNDUtXG5mcy9vdmVybGF5ZnMvS2NvbmZpZzo0Njpjb25maWcgT1ZFUkxBWV9GU19JTkRFWFxuZnMvb3ZlcmxheWZzL0tjb25maWctNDctXHRib29sIFwmIzM0O092ZXJsYXlmczogdHVybiBvbiBpbm9kZXMgaW5kZXggZmVhdHVyZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxuZnMvb3ZlcmxheWZzL0tjb25maWctNjQtXG5mcy9vdmVybGF5ZnMvS2NvbmZpZzo2NTpjb25maWcgT1ZFUkxBWV9GU19ORlNfRVhQT1JUXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy02Ni1cdGJvb2wgXCYjMzQ7T3ZlcmxheWZzOiB0dXJuIG9uIE5GUyBleHBvcnQgZmVhdHVyZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxuZnMvb3ZlcmxheWZzL0tjb25maWctOTItXG5mcy9vdmVybGF5ZnMvS2NvbmZpZzo5Mzpjb25maWcgT1ZFUkxBWV9GU19YSU5PX0FVVE9cbmZzL292ZXJsYXlmcy9LY29uZmlnLTk0LVx0Ym9vbCBcJiMzNDtPdmVybGF5ZnM6IGF1dG8gZW5hYmxlIGlub2RlIG51bWJlciBtYXBwaW5nXCYjMzQ7XG4tLVxuZnMvb3ZlcmxheWZzL0tjb25maWctMTEwLVxuZnMvb3ZlcmxheWZzL0tjb25maWc6MTExOmNvbmZpZyBPVkVSTEFZX0ZTX01FVEFDT1BZXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0xMTItXHRib29sIFwmIzM0O092ZXJsYXlmczogdHVybiBvbiBtZXRhZGF0YSBvbmx5IGNvcHkgdXAgZmVhdHVyZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxuZnMvb3ZlcmxheWZzL0tjb25maWctMTI4LVxuZnMvb3ZlcmxheWZzL0tjb25maWc6MTI5OmNvbmZpZyBPVkVSTEFZX0ZTX0RFQlVHXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0xMzAtXHRib29sIFwmIzM0O092ZXJsYXlmczogdHVybiBvbiBleHRyYSBkZWJ1Z2dpbmcgY2hlY2tzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMTY6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUzNDYKCQkJCQkJCW91dHB1dDogMjQzCgkJCQkJCQl0aG91Z2h0czogNTY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBNZXRhRlMgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBgbWV0YWZzYCBmaWxlc3lzdGVtIGNvZGUsIGFuZCBoZXJlJiMzOTtzIHdoYXQmIzM5O3MgYnViYmxpbmcgdG8gdGhlIHN1cmZhY2UuIEl0IHNlZW1zIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFyZSB0aHJvdWdoIHRoZSBgT19BTFRgIGZsYWcgd2l0aGluIGBvcGVuYXQyYCBvciBgb3BlbmAgY2FsbHMsIGFuZCB0aGUgYE9QRU5fVFJFRV9BTFRgIGZsYWcgd2l0aGluIHRoZSBgb3Blbl90cmVlYCBmdW5jdGlvbi4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGBmcy9tZXRhZnMvbWV0YWZzLmNgLCBhbmQgdGhlIG5ldyBgZ2V0X29wdGlvbnNgIGZ1bmN0aW9ucyBzcHJpbmtsZWQgd2l0aGluIGBmcy9lcm9mcy9zdXBlci5jYCBhbmQgYGZzL292ZXJsYXlmcy9wYXJhbXMuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGFjdGlvbiBpcy4KClNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBJIHNob3VsZCBzY3J1dGluaXplIHRoZXNlIHN5bWJvbHM6IGBtZXRhZnNfZ2V0X3Jvb3RgLCBgbWV0YWZzX2NyZWF0ZV9yb290YCwgYG1ldGFmc19yb290X2xvb2t1cGAsIGBtZXRhZnNfbW91bnRfbG9va3VwYCwgYG1ldGFmc19vcHRpb25zX2xvb2t1cGAsIGBtZXRhZnNfb3B0aW9uX3ZhbHVlc19sb29rdXBgLCBgbWV0YWZzX2dldF9vcHRpb25fdmFsdWVzYCwgYG1ldGFmc19nZXRfbGlua2AsIGBtZXRhZnNfcmVhZGxpbmtgLCBhbG9uZ3NpZGUgYG1udF9zaG93X29wdGlvbnNgLCBgc2JfYWRkX29wdGlvbmAsIGBzYl9hZGRfb3B0aW9uX3BhdGhgLCBgb3ZsX2dldF9vcHRpb25zYCwgYW5kIGBlcm9mc19nZXRfb3B0aW9uc2AuIFRob3NlIHNlZW0gdG8gYmUgdGhlIGNyaXRpY2FsIHBpZWNlcy4KCkkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSByaWdodCBrZXJuZWwgY29uZmlncyBlbmFibGVkLiBJdCBsb29rcyBsaWtlIGBFUk9GU19GU2AgYW5kIGBPVkVSTEFZX0ZTYCBhcmUgZXNzZW50aWFsLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMsIGp1c3QgdG8gYmUgdGhvcm91Z2guIFJpZ2h0IG5vdywgaXQgbG9va3MgbGlrZSBgbWV0YWZzYCBpdHNlbGYgaXMgYnVpbHQtaW4uIEkgYWxzbyBub3RlZCB0aGF0IHRoZSBgT19BTFRgIGZsYWcgaXMgYWRkZWQgdG8gYE9fUEFUSF9GTEFHU2AsIGFuZCBgT1BFTl9UUkVFX0FMVGAgZmxhZyBpcyBhZGRlZCB0byBgb3Blbl90cmVlYC4gVGhlIGBNTlRfQ0xPTkFCTEVgIGZsYWcgaXMgYWRkZWQgdG8gYG5zZnNgLCBgcGlkZnNgLCBhbmQgYG92ZXJsYXlmc2AgbGF5ZXJzLgoKTm93LCBhbiBpbXBvcnRhbnQgcXVlc3Rpb24gaXMgaWYgYW55IG90aGVyIGZpbGVzeXN0ZW1zIGFyZSB1dGlsaXppbmcgdGhhdCBgZ2V0X29wdGlvbnNgIGZ1bmN0aW9uLiBUaGUgcGF0Y2ggbWVudGlvbnMgY2hhbmdlcyB0byBgZXJvZnNgIGFuZCBgb3ZlcmxheWZzYCwgYnV0IEkgc2hvdWxkIHZlcmlmeSB0aGF0JiMzOTtzIHRoZSBleHRlbnQgb2YgdGhlIGltcGFjdC4KCk9rYXksIGxldCYjMzk7cyB2ZXJpZnkgdGhhdCBgbWV0YWZzX2dldF9yb290YCBpcyBpbmRlZWQgcmVhY2hhYmxlLiBMb29raW5nIGF0IGBmcy9uYW1laS5jYCwgaW4gYHBhdGhfaW5pdGAsIHRoZXJlJiMzOTtzIGEgY29uZGl0aW9uYWw6IGlmIGBmbGFncyAmYW1wOyBMT09LVVBfQUxUYCBpcyBzZXQsIGFuZCBpdCBqdW1wcyB0byBgbWV0YWZzX2dldF9yb290YC4gT2theSwgcGVyZmVjdC4gVGhlIGBMT09LVVBfQUxUYCBmbGFnIGlzIHNldCBpbiBgYnVpbGRfb3Blbl9mbGFnc2AgaWYgYE9fQUxUYCBpcyBwcmVzZW50LiBBbmQgYE9fQUxUYCBpcyBlcXVhbCB0byBgMSAmbHQ7Jmx0OyAyN2AuIFNvLCBhbiBgb3BlbmF0KC4uLiwgT19BTFQsIC4uLilgIGNhbGwgd2lsbCBhYnNvbHV0ZWx5IHRyaWdnZXIgYG1ldGFmc19nZXRfcm9vdGAuIFRoYXQgbWFrZXMgaXQgdGVzdGFibGUgYW5kIHJlYWNoYWJsZS4gRXhjZWxsZW50ISBJIHRoaW5rIEkgaGF2ZSBhIGNsZWFyIHBpY3R1cmUuCgpOb3csIEkgdGhpbmsgSSYjMzk7bSByZWFkeSB0byBzdGFydCBwcmVwYXJpbmcgdGhlIHJlc3VsdHMgYW5kIHRoZSB0ZXN0IHN0cmF0ZWd5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDE2OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFUk9GU19GUyYjMzQ7LAogICAgJiMzNDtPVkVSTEFZX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWV0YWZzX2dldF9yb290JiMzNDssCiAgICAmIzM0O21ldGFmc19jcmVhdGVfcm9vdCYjMzQ7LAogICAgJiMzNDttZXRhZnNfcm9vdF9sb29rdXAmIzM0OywKICAgICYjMzQ7bWV0YWZzX21vdW50X2xvb2t1cCYjMzQ7LAogICAgJiMzNDttZXRhZnNfb3B0aW9uc19sb29rdXAmIzM0OywKICAgICYjMzQ7bWV0YWZzX29wdGlvbl92YWx1ZXNfbG9va3VwJiMzNDssCiAgICAmIzM0O21ldGFmc19nZXRfb3B0aW9uX3ZhbHVlcyYjMzQ7LAogICAgJiMzNDttZXRhZnNfZ2V0X2xpbmsmIzM0OywKICAgICYjMzQ7bWV0YWZzX3JlYWRsaW5rJiMzNDssCiAgICAmIzM0O21udF9zaG93X29wdGlvbnMmIzM0OywKICAgICYjMzQ7c2JfYWRkX29wdGlvbiYjMzQ7LAogICAgJiMzNDtzYl9hZGRfb3B0aW9uX3BhdGgmIzM0OywKICAgICYjMzQ7b3ZsX2dldF9vcHRpb25zJiMzNDssCiAgICAmIzM0O2Vyb2ZzX2dldF9vcHRpb25zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgdmlydHVhbCBmaWxlc3lzdGVtIGBtZXRhZnNgIHRoYXQgZXhwb3NlcyBtZXRhZGF0YSBhYm91dCBmaWxlcyBhbmQgZmlsZXN5c3RlbXMgdmlhIHRoZSBgT19BTFRgIGZsYWcuIEl0IGFsc28gaW50cm9kdWNlcyBhIG5ldyBgZ2V0X29wdGlvbnNgIHN1cGVyIG9wZXJhdGlvbiwgaW1wbGVtZW50ZWQgYnkgYGVyb2ZzYCBhbmQgYG92ZXJsYXlmc2AuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIFZGUyBhbmQgc3BlY2lmaWMgZmlsZXN5c3RlbXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFUk9GU19GUyYjMzQ7LAogICAgJiMzNDtPVkVSTEFZX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWV0YWZzX2dldF9yb290JiMzNDssCiAgICAmIzM0O21ldGFmc19jcmVhdGVfcm9vdCYjMzQ7LAogICAgJiMzNDttZXRhZnNfcm9vdF9sb29rdXAmIzM0OywKICAgICYjMzQ7bWV0YWZzX21vdW50X2xvb2t1cCYjMzQ7LAogICAgJiMzNDttZXRhZnNfb3B0aW9uc19sb29rdXAmIzM0OywKICAgICYjMzQ7bWV0YWZzX29wdGlvbl92YWx1ZXNfbG9va3VwJiMzNDssCiAgICAmIzM0O21ldGFmc19nZXRfb3B0aW9uX3ZhbHVlcyYjMzQ7LAogICAgJiMzNDttZXRhZnNfZ2V0X2xpbmsmIzM0OywKICAgICYjMzQ7bWV0YWZzX3JlYWRsaW5rJiMzNDssCiAgICAmIzM0O21udF9zaG93X29wdGlvbnMmIzM0OywKICAgICYjMzQ7c2JfYWRkX29wdGlvbiYjMzQ7LAogICAgJiMzNDtzYl9hZGRfb3B0aW9uX3BhdGgmIzM0OywKICAgICYjMzQ7b3ZsX2dldF9vcHRpb25zJiMzNDssCiAgICAmIzM0O2Vyb2ZzX2dldF9vcHRpb25zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgdmlydHVhbCBmaWxlc3lzdGVtIGBtZXRhZnNgIHRoYXQgZXhwb3NlcyBtZXRhZGF0YSBhYm91dCBmaWxlcyBhbmQgZmlsZXN5c3RlbXMgdmlhIHRoZSBgT19BTFRgIGZsYWcuIEl0IGFsc28gaW50cm9kdWNlcyBhIG5ldyBgZ2V0X29wdGlvbnNgIHN1cGVyIG9wZXJhdGlvbiwgaW1wbGVtZW50ZWQgYnkgYGVyb2ZzYCBhbmQgYG92ZXJsYXlmc2AuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIFZGUyBhbmQgc3BlY2lmaWMgZmlsZXN5c3RlbXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTVUMTY6MDg6MjQuNTAxNTg2ODk4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk4ODcxNDUzMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVJPRlNfRlNcIixcbiAgICBcIk9WRVJMQVlfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZXRhZnNfZ2V0X3Jvb3RcIixcbiAgICBcIm1ldGFmc19jcmVhdGVfcm9vdFwiLFxuICAgIFwibWV0YWZzX3Jvb3RfbG9va3VwXCIsXG4gICAgXCJtZXRhZnNfbW91bnRfbG9va3VwXCIsXG4gICAgXCJtZXRhZnNfb3B0aW9uc19sb29rdXBcIixcbiAgICBcIm1ldGFmc19vcHRpb25fdmFsdWVzX2xvb2t1cFwiLFxuICAgIFwibWV0YWZzX2dldF9vcHRpb25fdmFsdWVzXCIsXG4gICAgXCJtZXRhZnNfZ2V0X2xpbmtcIixcbiAgICBcIm1ldGFmc19yZWFkbGlua1wiLFxuICAgIFwibW50X3Nob3dfb3B0aW9uc1wiLFxuICAgIFwic2JfYWRkX29wdGlvblwiLFxuICAgIFwic2JfYWRkX29wdGlvbl9wYXRoXCIsXG4gICAgXCJvdmxfZ2V0X29wdGlvbnNcIixcbiAgICBcImVyb2ZzX2dldF9vcHRpb25zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyB2aXJ0dWFsIGZpbGVzeXN0ZW0gYG1ldGFmc2AgdGhhdCBleHBvc2VzIG1ldGFkYXRhIGFib3V0IGZpbGVzIGFuZCBmaWxlc3lzdGVtcyB2aWEgdGhlIGBPX0FMVGAgZmxhZy4gSXQgYWxzbyBpbnRyb2R1Y2VzIGEgbmV3IGBnZXRfb3B0aW9uc2Agc3VwZXIgb3BlcmF0aW9uLCBpbXBsZW1lbnRlZCBieSBgZXJvZnNgIGFuZCBgb3ZlcmxheWZzYC4gVGhlc2UgYXJlIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgVkZTIGFuZCBzcGVjaWZpYyBmaWxlc3lzdGVtcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDE2OjA4OjI0LjUwMTYwNDUwOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1MDI0NTc4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc4YzhkOWU5MzRjZThhOWJjMWFlMGM5OTRmNDYzODU0YmQyZjk4MTFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMTUgMTY6MDg6MjIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0XFxuaW5kZXggN2M3NTMxNDhhZjg4ODMuLjNkYzQzMWI2Y2RiYjBiIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxcbkBAIC0zMTQsNyArMzE0LDcgQEAgb3IgYm90dG9tIGhhbGYpLlxcbiBgYHNob3dfZGV2bmFtZWBgXFxuIFxcdE9wdGlvbmFsLiBDYWxsZWQgYnkgdGhlIFZGUyB0byBzaG93IGRldmljZSBuYW1lIGZvclxcbiBcXHQvcHJvYy9cXHUwMDNjcGlkXFx1MDAzZS97bW91bnRzLG1vdW50aW5mbyxtb3VudHN0YXRzfS4gSWYgbm90IHByb3ZpZGVkIHRoZW5cXG4tXFx0JyhzdHJ1Y3QgbW91bnQpLm1udF9kZXZuYW1lJyB3aWxsIGJlIHVzZWQuXFxuK1xcdCcoc3RydWN0IHN1cGVyX2Jsb2NrKS5zX2Rldm5hbWUnIHdpbGwgYmUgdXNlZC5cXG4gXFxuIGBgc2hvd19wYXRoYGBcXG4gXFx0T3B0aW9uYWwuIENhbGxlZCBieSB0aGUgVkZTIChmb3IgL3Byb2MvXFx1MDAzY3BpZFxcdTAwM2UvbW91bnRpbmZvKSB0byBzaG93XFxuZGlmZiAtLWdpdCBhL2ZzL01ha2VmaWxlIGIvZnMvTWFrZWZpbGVcXG5pbmRleCA4OWE4YTlkMjA3ZDFjNS4uODdhNGMyM2Q1YTA4ZGUgMTAwNjQ0XFxuLS0tIGEvZnMvTWFrZWZpbGVcXG4rKysgYi9mcy9NYWtlZmlsZVxcbkBAIC01OCw2ICs1OCw4IEBAIG9iai0kKENPTkZJR19DT05GSUdGU19GUylcXHQrPSBjb25maWdmcy9cXG4gb2JqLXlcXHRcXHRcXHRcXHQrPSBkZXZwdHMvXFxuIFxcbiBvYmotJChDT05GSUdfRExNKVxcdFxcdCs9IGRsbS9cXG4rXFxuK29iai15XFx0XFx0XFx0XFx0Kz0gbWV0YWZzL1xcbiAgXFxuICMgRG8gbm90IGFkZCBhbnkgZmlsZXN5c3RlbXMgYmVmb3JlIHRoaXMgbGluZVxcbiBvYmotJChDT05GSUdfTkVURlNfU1VQUE9SVClcXHQrPSBuZXRmcy9cXG5kaWZmIC0tZ2l0IGEvZnMvZXJvZnMvc3VwZXIuYyBiL2ZzL2Vyb2ZzL3N1cGVyLmNcXG5pbmRleCA4NmZhNWM2YTBjNzA4Ny4uMjU3NTE3YzI4ZTFkMzggMTAwNjQ0XFxuLS0tIGEvZnMvZXJvZnMvc3VwZXIuY1xcbisrKyBiL2ZzL2Vyb2ZzL3N1cGVyLmNcXG5AQCAtMTAyOCwyOSArMTAyOCwzNCBAQCBzdGF0aWMgaW50IGVyb2ZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGVyb2ZzX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGRlbnRyeSAqcm9vdClcXG4rc3RhdGljIGludCBlcm9mc19nZXRfb3B0aW9ucyhzdHJ1Y3Qgc2Jfb3B0X2N0eCAqY3R4LCBzdHJ1Y3QgZGVudHJ5ICpyb290KVxcbiB7XFxuIFxcdHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkgPSBFUk9GU19TQihyb290LVxcdTAwM2VkX3NiKTtcXG4gXFx0c3RydWN0IGVyb2ZzX21vdW50X29wdHMgKm9wdCA9IFxcdTAwMjZzYmktXFx1MDAzZW9wdDtcXG4gXFxuK1xcdGlmIChzYmktXFx1MDAzZWRpZjAuZmlsZSlcXG4rXFx0XFx0c2JfYWRkX29wdGlvbl9wYXRoKGN0eCwgXFxcInNvdXJjZVxcXCIsIE5VTEwsIFxcdTAwMjZzYmktXFx1MDAzZWRpZjAuZmlsZS1cXHUwMDNlZl9wYXRoKTtcXG4rXFxuIFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19FUk9GU19GU19YQVRUUikpXFxuLVxcdFxcdHNlcV9wdXRzKHNlcSwgdGVzdF9vcHQob3B0LCBYQVRUUl9VU0VSKSA/XFxuLVxcdFxcdFxcdFxcdFxcXCIsdXNlcl94YXR0clxcXCIgOiBcXFwiLG5vdXNlcl94YXR0clxcXCIpO1xcbitcXHRcXHRzYl9hZGRfb3B0aW9uKGN0eCwgdGVzdF9vcHQob3B0LCBYQVRUUl9VU0VSKSA/XFxuK1xcdFxcdFxcdCAgICAgIFxcXCJ1c2VyX3hhdHRyXFxcIiA6IFxcXCJub3VzZXJfeGF0dHJcXFwiLCBOVUxMKTtcXG4gXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX1BPU0lYX0FDTCkpXFxuLVxcdFxcdHNlcV9wdXRzKHNlcSwgdGVzdF9vcHQob3B0LCBQT1NJWF9BQ0wpID8gXFxcIixhY2xcXFwiIDogXFxcIixub2FjbFxcXCIpO1xcbitcXHRcXHRzYl9hZGRfb3B0aW9uKGN0eCwgdGVzdF9vcHQob3B0LCBQT1NJWF9BQ0wpID8gXFxcImFjbFxcXCIgOiBcXFwibm9hY2xcXFwiLCBOVUxMKTtcXG4gXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX1pJUCkpXFxuLVxcdFxcdHNlcV9wcmludGYoc2VxLCBcXFwiLGNhY2hlX3N0cmF0ZWd5PSVzXFxcIixcXG4rXFx0XFx0c2JfYWRkX29wdGlvbihjdHgsIFxcXCJjYWNoZV9zdHJhdGVneVxcXCIsXFxuIFxcdFxcdFxcdCAgZXJvZnNfcGFyYW1fY2FjaGVfc3RyYXRlZ3lbb3B0LVxcdTAwM2VjYWNoZV9zdHJhdGVneV0ubmFtZSk7XFxuIFxcdGlmICh0ZXN0X29wdChvcHQsIERBWF9BTFdBWVMpKVxcbi1cXHRcXHRzZXFfcHV0cyhzZXEsIFxcXCIsZGF4PWFsd2F5c1xcXCIpO1xcbitcXHRcXHRzYl9hZGRfb3B0aW9uKGN0eCwgXFxcImRheFxcXCIsIFxcXCJhbHdheXNcXFwiKTtcXG4gXFx0aWYgKHRlc3Rfb3B0KG9wdCwgREFYX05FVkVSKSlcXG4tXFx0XFx0c2VxX3B1dHMoc2VxLCBcXFwiLGRheD1uZXZlclxcXCIpO1xcbitcXHRcXHRzYl9hZGRfb3B0aW9uKGN0eCwgXFxcImRheFxcXCIsIFxcXCJuZXZlclxcXCIpO1xcbiBcXHRpZiAoZXJvZnNfaXNfZmlsZWlvX21vZGUoc2JpKSBcXHUwMDI2XFx1MDAyNiB0ZXN0X29wdChvcHQsIERJUkVDVF9JTykpXFxuLVxcdFxcdHNlcV9wdXRzKHNlcSwgXFxcIixkaXJlY3Rpb1xcXCIpO1xcbi1cXHRpZiAoc2JpLVxcdTAwM2VkaWYwLmZzb2ZmKVxcbi1cXHRcXHRzZXFfcHJpbnRmKHNlcSwgXFxcIixmc29mZnNldD0lbGx1XFxcIiwgc2JpLVxcdTAwM2VkaWYwLmZzb2ZmKTtcXG4rXFx0XFx0c2JfYWRkX29wdGlvbihjdHgsIFxcXCJkaXJlY3Rpb1xcXCIsIE5VTEwpO1xcbitcXHRpZiAoc2JpLVxcdTAwM2VkaWYwLmZzb2ZmKSB7XFxuK1xcdFxcdGNoYXIgKnZhbCBfX2ZyZWUoa2ZyZWUpID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsIFxcXCIlbGx1XFxcIiwgc2JpLVxcdTAwM2VkaWYwLmZzb2ZmKTtcXG4rXFx0XFx0c2JfYWRkX29wdGlvbihjdHgsIFxcXCJmc29mZnNldFxcXCIsIHZhbCk7XFxuK1xcdH1cXG4gXFx0aWYgKHRlc3Rfb3B0KG9wdCwgSU5PREVfU0hBUkUpKVxcbi1cXHRcXHRzZXFfcHV0cyhzZXEsIFxcXCIsaW5vZGVfc2hhcmVcXFwiKTtcXG4rXFx0XFx0c2JfYWRkX29wdGlvbihjdHgsIFxcXCJpbm9kZV9zaGFyZVxcXCIsIE5VTEwpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMTA2OSw3ICsxMDc0LDcgQEAgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZXJvZnNfc29wcyA9IHtcXG4gXFx0LmZyZWVfaW5vZGUgPSBlcm9mc19mcmVlX2lub2RlLFxcbiBcXHQuZXZpY3RfaW5vZGUgPSBlcm9mc19ldmljdF9pbm9kZSxcXG4gXFx0LnN0YXRmcyA9IGVyb2ZzX3N0YXRmcyxcXG4tXFx0LnNob3dfb3B0aW9ucyA9IGVyb2ZzX3Nob3dfb3B0aW9ucyxcXG4rXFx0LmdldF9vcHRpb25zID0gZXJvZnNfZ2V0X29wdGlvbnMsXFxuIH07XFxuIFxcbiBtb2R1bGVfaW5pdChlcm9mc19tb2R1bGVfaW5pdCk7XFxuZGlmZiAtLWdpdCBhL2ZzL2ZjbnRsLmMgYi9mcy9mY250bC5jXFxuaW5kZXggYzE1OGYwODJmMWRhNGYuLjAxYjc2NWNmYWM4NDc5IDEwMDY0NFxcbi0tLSBhL2ZzL2ZjbnRsLmNcXG4rKysgYi9mcy9mY250bC5jXFxuQEAgLTExNjksNyArMTE2OSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGZjbnRsX2luaXQodm9pZClcXG4gXFx0ICogRXhjZXB0aW9uczogT19OT05CTE9DSyBpcyBhIHR3byBiaXQgZGVmaW5lIG9uIHBhcmlzYzsgT19OREVMQVlcXG4gXFx0ICogaXMgZGVmaW5lZCBhcyBPX05PTkJMT0NLIG9uIHNvbWUgcGxhdGZvcm1zIGFuZCBub3Qgb24gb3RoZXJzLlxcbiBcXHQgKi9cXG4tXFx0QlVJTERfQlVHX09OKDIyIC0gMSAvKiBmb3IgT19SRE9OTFkgYmVpbmcgMCAqLyAhPVxcbitcXHRCVUlMRF9CVUdfT04oMjMgLSAxIC8qIGZvciBPX1JET05MWSBiZWluZyAwICovICE9XFxuIFxcdFxcdEhXRUlHSFQzMihcXG4gXFx0XFx0XFx0KFZBTElEX09QRU5fRkxBR1MgXFx1MDAyNiB+KE9fTk9OQkxPQ0sgfCBPX05ERUxBWSkpIHxcXG4gXFx0XFx0XFx0X19GTU9ERV9FWEVDIHwgX19PX1JFR1VMQVIpKTtcXG5kaWZmIC0tZ2l0IGEvZnMvaW50ZXJuYWwuaCBiL2ZzL2ludGVybmFsLmhcXG5pbmRleCAzNTVkOTNmOTIyMDg2MS4uZTczYTVjMWQ1YjRlZTEgMTAwNjQ0XFxuLS0tIGEvZnMvaW50ZXJuYWwuaFxcbisrKyBiL2ZzL2ludGVybmFsLmhcXG5AQCAtOTUsNiArOTUsNyBAQCBpbnQgcGF0aF91bW91bnQoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIGludCBmbGFncyk7XFxuIGludCBwYXRoX3Bpdm90X3Jvb3Qoc3RydWN0IHBhdGggKm5ldywgc3RydWN0IHBhdGggKm9sZCk7XFxuIFxcbiBpbnQgc2hvd19wYXRoKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRlbnRyeSAqcm9vdCk7XFxuK2ludCBtbnRfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCk7XFxuIFxcbiAvKlxcbiAgKiBmc19zdHJ1Y3QuY1xcbmRpZmYgLS1naXQgYS9mcy9tZXRhZnMvTWFrZWZpbGUgYi9mcy9tZXRhZnMvTWFrZWZpbGVcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mODU1YjQ4ZDljMmI5MFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9mcy9tZXRhZnMvTWFrZWZpbGVcXG5AQCAtMCwwICsxLDYgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKyNcXG4rIyBNYWtlZmlsZSBmb3IgbWV0YSBmaWxlc3lzdGVtXFxuKyNcXG4rXFxuK29iai15IDo9IG1ldGFmcy5vXFxuZGlmZiAtLWdpdCBhL2ZzL21ldGFmcy9tZXRhZnMuYyBiL2ZzL21ldGFmcy9tZXRhZnMuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjE1ZWMwYjYwNjRkYTM4XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2ZzL21ldGFmcy9tZXRhZnMuY1xcbkBAIC0wLDAgKzEsNTcyIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qXFxuKyAqIG1ldGFmcyAtIHZpcnR1YWwgZmlsZXN5c3RlbSBmb3IgbWV0YWRhdGEgYWNjZXNzXFxuKyAqXFxuKyAqIFRoaXMgcHJvdmlkZXMgYSB3YXkgdG8gYWNjZXNzIG1ldGFkYXRhIGFib3V0IGZpbGVzIGFuZCBmaWxlc3lzdGVtc1xcbisgKiB0aHJvdWdoIE9fQUxUIGZpbGUgZGVzY3JpcHRvcnMuXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbml0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21hZ2ljLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb3VudC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbmFtZWkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RjYWNoZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHNldWRvX2ZzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcy9zdXBlci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwibWV0YWZzLmhcXFwiXFxuK1xcbisvKlxcbisgKiBtZXRhZnMgc3VwZXJibG9jayBhbmQgbW91bnRcXG4rICovXFxuK3N0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKm1ldGFmc19tbnQgX19yb19hZnRlcl9pbml0O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIG1ldGFmc19vcHMgPSB7XFxuK1xcdC5zdGF0ZnNcXHRcXHQ9IHNpbXBsZV9zdGF0ZnMsXFxuK1xcdC5kcm9wX2lub2RlXFx0PSBpbm9kZV9qdXN0X2Ryb3AsXFxuK307XFxuK1xcbitzdGF0aWMgaW50IG1ldGFmc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbit7XFxuK1xcdHN0cnVjdCBwc2V1ZG9fZnNfY29udGV4dCAqY3R4ID0gaW5pdF9wc2V1ZG8oZmMsIDB4NGQ0NTU0NDEpOyAvKiAnTUVUQScgKi9cXG4rXFx0aWYgKCFjdHgpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRjdHgtXFx1MDAzZW9wcyA9IFxcdTAwMjZtZXRhZnNfb3BzO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIG1ldGFmc190eXBlID0ge1xcbitcXHQubmFtZSA9IFxcXCJtZXRhZnNcXFwiLFxcbitcXHQuaW5pdF9mc19jb250ZXh0ID0gbWV0YWZzX2luaXRfZnNfY29udGV4dCxcXG4rXFx0LmtpbGxfc2IgPSBraWxsX2Fub25fc3VwZXIsXFxuK307XFxuK1xcbisvKlxcbisgKiBNb3VudCBvcHRpb24gY29sbGVjdGlvbiBzdHJ1Y3R1cmVzXFxuKyAqL1xcbitlbnVtIG1ldGFmc19kZW50cnlfdHlwZSB7XFxuK1xcdE1FVEFGU19ST09ULFxcbitcXHRNRVRBRlNfT1BUSU9OX1ZBTFVFUyxcXG4rXFx0TUVUQUZTX1NZTUxJTkssXFxuK307XFxuK1xcbitzdHJ1Y3QgbWV0YWZzX29wdGlvbl9lbnRyeSB7XFxuK1xcdGNoYXIgKnZhbHVlO1xcbitcXHRzdHJ1Y3QgcGF0aCBwYXRoO1xcbit9O1xcbitcXG4rc3RydWN0IG1ldGFmc19kZW50cnlfaW5mbyB7XFxuK1xcdGVudW0gbWV0YWZzX2RlbnRyeV90eXBlIHR5cGU7XFxuK1xcdHVuaW9uIHtcXG4rXFx0XFx0c3RydWN0IHtcXG4rXFx0XFx0XFx0c3RydWN0IGZpbGUgKmJhc2U7XFxuK1xcdFxcdH0gcm9vdDtcXG4rXFx0XFx0c3RydWN0IHtcXG4rXFx0XFx0XFx0c3RydWN0IG1ldGFmc19vcHRpb25fZW50cnkgKmVudHJpZXM7XFxuK1xcdFxcdFxcdGludCBjb3VudDtcXG4rXFx0XFx0fSBvcHRfdmFsdWVzO1xcbitcXHRcXHRzdHJ1Y3QgbWV0YWZzX29wdGlvbl9lbnRyeSBzeW1saW5rO1xcbitcXHR9O1xcbit9O1xcbitcXG4rc3RydWN0IG1ldGFmc19jb2xsZWN0X2N0eCB7XFxuK1xcdHN0cnVjdCBzYl9vcHRfY3R4IGN0eDtcXG4rXFx0Y29uc3QgY2hhciAqdGFyZ2V0X25hbWU7XFxuK1xcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2I7XFxuK1xcdHN0cnVjdCBtZXRhZnNfb3B0aW9uX2VudHJ5ICplbnRyaWVzO1xcbitcXHRpbnQgY291bnQ7XFxuK1xcdGludCBzaXplO1xcbitcXHRpbnQgZXJyO1xcbitcXHRib29sIGlzX3NvdXJjZTtcXG4rfTtcXG4rXFxuKy8qXFxuKyAqIENvbGxlY3Qgc3BlY2lmaWMgbW91bnQgb3B0aW9uIHZhbHVlcyBmcm9tIHRoZSBiYXNlIGZpbGVzeXN0ZW1cXG4rICovXFxuK3N0YXRpYyB2b2lkIG1ldGFmc19jb2xsZWN0X29wdGlvbihzdHJ1Y3Qgc2Jfb3B0X2N0eCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLFxcbitcXHRcXHRcXHRcXHQgIGNvbnN0IGNoYXIgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aClcXG4re1xcbitcXHRzdHJ1Y3QgbWV0YWZzX2NvbGxlY3RfY3R4ICpjb2xsZWN0X2N0eCA9IGN0eC1cXHUwMDNlZGF0YTtcXG4rXFx0c3RydWN0IG1ldGFmc19vcHRpb25fZW50cnkgKmVudHJ5O1xcbitcXG4rXFx0aWYgKHN0cmNtcChuYW1lLCBjb2xsZWN0X2N0eC1cXHUwMDNldGFyZ2V0X25hbWUpICE9IDApXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmICghdmFsdWUgXFx1MDAyNlxcdTAwMjYgY29sbGVjdF9jdHgtXFx1MDAzZWlzX3NvdXJjZSlcXG4rXFx0XFx0dmFsdWUgPSBjb2xsZWN0X2N0eC1cXHUwMDNlc2ItXFx1MDAzZXNfZGV2bmFtZTtcXG4rXFxuK1xcdGlmIChjb2xsZWN0X2N0eC1cXHUwMDNlY291bnQgXFx1MDAzZT0gY29sbGVjdF9jdHgtXFx1MDAzZXNpemUpIHtcXG4rXFx0XFx0aW50IG5ld19zaXplID0gY29sbGVjdF9jdHgtXFx1MDAzZXNpemUgPyBjb2xsZWN0X2N0eC1cXHUwMDNlc2l6ZSAqIDIgOiA0O1xcbitcXHRcXHRzdHJ1Y3QgbWV0YWZzX29wdGlvbl9lbnRyeSAqbmV3X2VudHJpZXM7XFxuK1xcbitcXHRcXHRuZXdfZW50cmllcyA9IGtyZWFsbG9jX2FycmF5KGNvbGxlY3RfY3R4LVxcdTAwM2VlbnRyaWVzLCBuZXdfc2l6ZSwgc2l6ZW9mKCpuZXdfZW50cmllcyksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgR0ZQX0tFUk5FTCk7XFxuK1xcdFxcdGlmICghbmV3X2VudHJpZXMpIHtcXG4rXFx0XFx0XFx0Y29sbGVjdF9jdHgtXFx1MDAzZWVyciA9IC1FTk9NRU07XFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0fVxcbitcXHRcXHRjb2xsZWN0X2N0eC1cXHUwMDNlZW50cmllcyA9IG5ld19lbnRyaWVzO1xcbitcXHRcXHRjb2xsZWN0X2N0eC1cXHUwMDNlc2l6ZSA9IG5ld19zaXplO1xcbitcXHR9XFxuK1xcbitcXHRlbnRyeSA9IFxcdTAwMjZjb2xsZWN0X2N0eC1cXHUwMDNlZW50cmllc1tjb2xsZWN0X2N0eC1cXHUwMDNlY291bnRdO1xcbitcXHRlbnRyeS1cXHUwMDNldmFsdWUgPSB2YWx1ZSA/IGtzdHJkdXAodmFsdWUsIEdGUF9LRVJORUwpIDogTlVMTDtcXG4rXFx0aWYgKCFlbnRyeS1cXHUwMDNldmFsdWUgXFx1MDAyNlxcdTAwMjYgdmFsdWUpIHtcXG4rXFx0XFx0Y29sbGVjdF9jdHgtXFx1MDAzZWVyciA9IC1FTk9NRU07XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXHRpZiAocGF0aCkge1xcbitcXHRcXHRlbnRyeS1cXHUwMDNlcGF0aCA9ICpwYXRoO1xcbitcXHRcXHRwYXRoX2dldChcXHUwMDI2ZW50cnktXFx1MDAzZXBhdGgpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRtZW1zZXQoXFx1MDAyNmVudHJ5LVxcdTAwM2VwYXRoLCAwLCBzaXplb2YoZW50cnktXFx1MDAzZXBhdGgpKTtcXG4rXFx0fVxcbitcXHRjb2xsZWN0X2N0eC1cXHUwMDNlY291bnQrKztcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbWV0YWZzX2ZyZWVfZW50cmllcyhzdHJ1Y3QgbWV0YWZzX29wdGlvbl9lbnRyeSAqZW50cmllcywgaW50IGNvdW50KVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNvdW50OyBpKyspIHtcXG4rXFx0XFx0a2ZyZWUoZW50cmllc1tpXS52YWx1ZSk7XFxuK1xcdFxcdGlmIChlbnRyaWVzW2ldLnBhdGgubW50KVxcbitcXHRcXHRcXHRwYXRoX3B1dChcXHUwMDI2ZW50cmllc1tpXS5wYXRoKTtcXG4rXFx0fVxcbitcXHRrZnJlZShlbnRyaWVzKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBtZXRhZnNfZ2V0X29wdGlvbl92YWx1ZXMoc3RydWN0IGZpbGUgKmJhc2UsIGNvbnN0IGNoYXIgKm9wdGlvbl9uYW1lLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IG1ldGFmc19vcHRpb25fZW50cnkgKiplbnRyaWVzX291dCxcXG4rXFx0XFx0XFx0XFx0ICAgIGludCAqY291bnRfb3V0KVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoID0gXFx1MDAyNmJhc2UtXFx1MDAzZWZfcGF0aDtcXG4rXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHBhdGgtXFx1MDAzZW1udC1cXHUwMDNlbW50X3NiO1xcbitcXHRzdHJ1Y3QgbWV0YWZzX2NvbGxlY3RfY3R4IGNvbGxlY3RfY3R4ID0ge1xcbitcXHRcXHQuY3R4LmRhdGEgPSBcXHUwMDI2Y29sbGVjdF9jdHgsXFxuK1xcdFxcdC5jdHguYWN0b3IgPSBtZXRhZnNfY29sbGVjdF9vcHRpb24sXFxuK1xcdFxcdC50YXJnZXRfbmFtZSA9IG9wdGlvbl9uYW1lLFxcbitcXHRcXHQuc2IgPSBzYixcXG4rXFx0XFx0LmlzX3NvdXJjZSA9ICFzdHJjbXAob3B0aW9uX25hbWUsIFxcXCJzb3VyY2VcXFwiKSxcXG4rXFx0fTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChzYi1cXHUwMDNlc19vcC1cXHUwMDNlZ2V0X29wdGlvbnMpIHtcXG4rXFx0XFx0cmV0ID0gc2ItXFx1MDAzZXNfb3AtXFx1MDAzZWdldF9vcHRpb25zKFxcdTAwMjZjb2xsZWN0X2N0eC5jdHgsIHBhdGgtXFx1MDAzZW1udC1cXHUwMDNlbW50X3Jvb3QpO1xcbitcXHRcXHRpZiAocmV0IHx8IGNvbGxlY3RfY3R4LmVycikge1xcbitcXHRcXHRcXHRtZXRhZnNfZnJlZV9lbnRyaWVzKGNvbGxlY3RfY3R4LmVudHJpZXMsIGNvbGxlY3RfY3R4LmNvdW50KTtcXG4rXFx0XFx0XFx0cmV0dXJuIHJldCA/OiBjb2xsZWN0X2N0eC5lcnI7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0Lyogc3BlY2lhbCBjYXNlOiBhZGQgXFxcInNvdXJjZVxcXCIgb3B0aW9uIGlmIGZpbGVzeXN0ZW0gZGlkbid0IGFkZCBvbmUqL1xcbitcXHRpZiAoIWNvbGxlY3RfY3R4LmNvdW50IFxcdTAwMjZcXHUwMDI2IGNvbGxlY3RfY3R4LmlzX3NvdXJjZSkge1xcbitcXHRcXHRzdHJ1Y3QgbWV0YWZzX29wdGlvbl9lbnRyeSAqZW50IF9fZnJlZShrZnJlZSkgPSBremFsbG9jX29iaigqZW50KTtcXG4rXFxuK1xcdFxcdGlmICghZW50KVxcbitcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdFxcdGVudC1cXHUwMDNldmFsdWUgPSBrc3RyZHVwKHNiLVxcdTAwM2VzX2Rldm5hbWUsIEdGUF9LRVJORUwpO1xcbitcXHRcXHRpZiAoIWVudC1cXHUwMDNldmFsdWUpXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0XFx0Y29sbGVjdF9jdHguZW50cmllcyA9IG5vX2ZyZWVfcHRyKGVudCk7XFxuK1xcdFxcdGNvbGxlY3RfY3R4LmNvdW50ID0gMTtcXG4rXFx0fVxcbitcXG4rXFx0KmVudHJpZXNfb3V0ID0gY29sbGVjdF9jdHguZW50cmllcztcXG4rXFx0KmNvdW50X291dCA9IGNvbGxlY3RfY3R4LmNvdW50O1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLypcXG4rICogbWV0YWZzIHN5bWxpbmsgb3BlcmF0aW9uc1xcbisgKi9cXG4rc3RhdGljIGNvbnN0IGNoYXIgKm1ldGFmc19nZXRfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBkZWxheWVkX2NhbGwgKmRvbmUpXFxuK3tcXG4rXFx0c3RydWN0IG1ldGFmc19kZW50cnlfaW5mbyAqaW5mbztcXG4rXFxuK1xcdGlmICghZGVudHJ5KVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUNISUxEKTtcXG4rXFxuK1xcdGluZm8gPSBkZW50cnktXFx1MDAzZWRfZnNkYXRhO1xcbitcXHRpZiAoaW5mby1cXHUwMDNlc3ltbGluay5wYXRoLm1udCkge1xcbitcXHRcXHRpbnQgZXJyb3I7XFxuK1xcbitcXHRcXHRwYXRoX2dldChcXHUwMDI2aW5mby1cXHUwMDNlc3ltbGluay5wYXRoKTtcXG4rXFx0XFx0ZXJyb3IgPSBuZF9qdW1wX2xpbmsoXFx1MDAyNmluZm8tXFx1MDAzZXN5bWxpbmsucGF0aCk7XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGVycm9yKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIEVSUl9QVFIoLUVMT09QKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBtZXRhZnNfcmVhZGxpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyIF9fdXNlciAqYnVmZmVyLFxcbitcXHRcXHRcXHQgICBpbnQgYnVmbGVuKVxcbit7XFxuK1xcdHN0cnVjdCBtZXRhZnNfZGVudHJ5X2luZm8gKmluZm8gPSBkZW50cnktXFx1MDAzZWRfZnNkYXRhO1xcbitcXHRjb25zdCBjaGFyICp2YWx1ZSA9IGluZm8tXFx1MDAzZXN5bWxpbmsudmFsdWU7XFxuK1xcbitcXHRpZiAoIXZhbHVlKVxcbitcXHRcXHR2YWx1ZSA9IFxcXCJcXFwiO1xcbitcXG4rXFx0cmV0dXJuIHJlYWRsaW5rX2NvcHkoYnVmZmVyLCBidWZsZW4sIHZhbHVlLCBzdHJsZW4odmFsdWUpKTtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1ldGFmc19zeW1saW5rX2lvcHMgPSB7XFxuK1xcdC5nZXRfbGlua1xcdD0gbWV0YWZzX2dldF9saW5rLFxcbitcXHQucmVhZGxpbmtcXHQ9IG1ldGFmc19yZWFkbGluayxcXG4rfTtcXG4rXFxuKy8qXFxuKyAqIERlbnRyeSBvcGVyYXRpb25zIC0gY2xlYW51cFxcbisgKi9cXG4rc3RhdGljIHZvaWQgbWV0YWZzX2RfcmVsZWFzZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuK3tcXG4rXFx0c3RydWN0IG1ldGFmc19kZW50cnlfaW5mbyAqaW5mbyA9IGRlbnRyeS1cXHUwMDNlZF9mc2RhdGE7XFxuK1xcbitcXHRpZiAoIWluZm8pXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHN3aXRjaCAoaW5mby1cXHUwMDNldHlwZSkge1xcbitcXHRjYXNlIE1FVEFGU19ST09UOlxcbitcXHRcXHRmcHV0KGluZm8tXFx1MDAzZXJvb3QuYmFzZSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE1FVEFGU19PUFRJT05fVkFMVUVTOlxcbitcXHRcXHRtZXRhZnNfZnJlZV9lbnRyaWVzKGluZm8tXFx1MDAzZW9wdF92YWx1ZXMuZW50cmllcyxcXG4rXFx0XFx0XFx0XFx0ICAgIGluZm8tXFx1MDAzZW9wdF92YWx1ZXMuY291bnQpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBNRVRBRlNfU1lNTElOSzpcXG4rXFx0XFx0a2ZyZWUoaW5mby1cXHUwMDNlc3ltbGluay52YWx1ZSk7XFxuK1xcdFxcdGlmIChpbmZvLVxcdTAwM2VzeW1saW5rLnBhdGgubW50KVxcbitcXHRcXHRcXHRwYXRoX3B1dChcXHUwMDI2aW5mby1cXHUwMDNlc3ltbGluay5wYXRoKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdFdBUk5fT04oMSk7XFxuK1xcdH1cXG4rXFx0a2ZyZWUoaW5mbyk7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgbWV0YWZzX2RlbnRyeV9vcHMgPSB7XFxuK1xcdC5kX3JlbGVhc2UgPSBtZXRhZnNfZF9yZWxlYXNlLFxcbit9O1xcbitcXG4rLypcXG4rICogbWV0YWZzIGRpcmVjdG9yeSBvcGVyYXRpb25zIC0gZm9yd2FyZCBkZWNsYXJhdGlvbnNcXG4rICovXFxuK3N0YXRpYyBzdHJ1Y3QgZmlsZSAqbWV0YWZzX2dldF9iYXNlX2ZpbGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcXG4rc3RhdGljIHN0cnVjdCBkZW50cnkgKm1ldGFmc19yb290X2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbitcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IGZsYWdzKTtcXG4rc3RhdGljIHN0cnVjdCBkZW50cnkgKm1ldGFmc19tb3VudF9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4rXFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xcbitzdGF0aWMgc3RydWN0IGRlbnRyeSAqbWV0YWZzX29wdGlvbnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xcbitzdGF0aWMgc3RydWN0IGRlbnRyeSAqbWV0YWZzX29wdGlvbl92YWx1ZXNfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IGZsYWdzKTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBtZXRhZnNfcm9vdF9kaXJfaW9wcyA9IHtcXG4rXFx0Lmxvb2t1cFxcdFxcdD0gbWV0YWZzX3Jvb3RfbG9va3VwLFxcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1ldGFmc19tb3VudF9kaXJfaW9wcyA9IHtcXG4rXFx0Lmxvb2t1cFxcdFxcdD0gbWV0YWZzX21vdW50X2xvb2t1cCxcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBtZXRhZnNfb3B0aW9uc19kaXJfaW9wcyA9IHtcXG4rXFx0Lmxvb2t1cFxcdFxcdD0gbWV0YWZzX29wdGlvbnNfbG9va3VwLFxcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1ldGFmc19vcHRpb25fdmFsdWVzX2Rpcl9pb3BzID0ge1xcbitcXHQubG9va3VwXFx0XFx0PSBtZXRhZnNfb3B0aW9uX3ZhbHVlc19sb29rdXAsXFxuK307XFxuK1xcbisvKlxcbisgKiBDcmVhdGUgYSBuZXcgaW5vZGUgaW4gbWV0YWZzXFxuKyAqL1xcbitzdGF0aWMgc3RydWN0IGlub2RlICptZXRhZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVtb2RlX3QgbW9kZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgKmlvcHMpXFxuK3tcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZSA9IG5ld19pbm9kZShzYik7XFxuK1xcbitcXHRpZiAoIWlub2RlKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdGlub2RlLVxcdTAwM2VpX2lubyA9IGdldF9uZXh0X2lubygpO1xcbitcXHRpbm9kZS1cXHUwMDNlaV9tb2RlID0gbW9kZTtcXG4rXFx0c2ltcGxlX2lub2RlX2luaXRfdHMoaW5vZGUpO1xcbitcXG4rXFx0aWYgKFNfSVNESVIobW9kZSkpIHtcXG4rXFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBpb3BzO1xcbitcXHRcXHRpbmNfbmxpbmsoaW5vZGUpO1xcbitcXHR9IGVsc2UgaWYgKFNfSVNMTksobW9kZSkpIHtcXG4rXFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2bWV0YWZzX3N5bWxpbmtfaW9wcztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGlub2RlO1xcbit9XFxuK1xcbisvKlxcbisgKiBMb29rdXAgaW4gcm9vdCBkaXJlY3RvcnkgKC8pXFxuKyAqIE9ubHkgXFxcIm1vdW50XFxcIiBpcyB2YWxpZCBoZXJlXFxuKyAqL1xcbitzdGF0aWMgc3RydWN0IGRlbnRyeSAqbWV0YWZzX3Jvb3RfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuK1xcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuK3tcXG4rXFx0Y29uc3QgY2hhciAqbmFtZSA9IGRlbnRyeS1cXHUwMDNlZF9uYW1lLm5hbWU7XFxuK1xcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuK1xcbitcXHRpZiAoc3RyY21wKG5hbWUsIFxcXCJtb3VudFxcXCIpICE9IDApXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xcbitcXG4rXFx0aW5vZGUgPSBtZXRhZnNfZ2V0X2lub2RlKGRpci1cXHUwMDNlaV9zYiwgU19JRkRJUiB8IDA1NTUsIFxcdTAwMjZtZXRhZnNfbW91bnRfZGlyX2lvcHMpO1xcbitcXHRpZiAoIWlub2RlKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFxuK1xcdGRfYWRkKGRlbnRyeSwgaW5vZGUpO1xcbitcXHRkX21hcmtfZG9udGNhY2hlKGlub2RlKTtcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuKy8qXFxuKyAqIExvb2t1cCBpbiAvbW91bnQgZGlyZWN0b3J5XFxuKyAqIE9ubHkgXFxcIm9wdGlvbnNcXFwiIGlzIHZhbGlkIGhlcmVcXG4rICovXFxuK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICptZXRhZnNfbW91bnRfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuK1xcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IGZsYWdzKVxcbit7XFxuK1xcdGNvbnN0IGNoYXIgKm5hbWUgPSBkZW50cnktXFx1MDAzZWRfbmFtZS5uYW1lO1xcbitcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xcbitcXG4rXFx0aWYgKHN0cmNtcChuYW1lLCBcXFwib3B0aW9uc1xcXCIpICE9IDApXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xcbitcXG4rXFx0aW5vZGUgPSBtZXRhZnNfZ2V0X2lub2RlKGRpci1cXHUwMDNlaV9zYiwgU19JRkRJUiB8IDA1NTUsIFxcdTAwMjZtZXRhZnNfb3B0aW9uc19kaXJfaW9wcyk7XFxuK1xcdGlmICghaW5vZGUpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXG4rXFx0ZF9hZGQoZGVudHJ5LCBpbm9kZSk7XFxuK1xcdGRfbWFya19kb250Y2FjaGUoaW5vZGUpO1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rLypcXG4rICogTG9va3VwIGluIC9tb3VudC9vcHRpb25zIGRpcmVjdG9yeVxcbisgKiBDb2xsZWN0IHZhbHVlcyBmb3IgdGhlIHJlcXVlc3RlZCBvcHRpb24gbmFtZVxcbisgKi9cXG4rc3RhdGljIHN0cnVjdCBkZW50cnkgKm1ldGFmc19vcHRpb25zX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IGZsYWdzKVxcbit7XFxuK1xcdGNvbnN0IGNoYXIgKnRhcmdldF9uYW1lID0gZGVudHJ5LVxcdTAwM2VkX25hbWUubmFtZTtcXG4rXFx0c3RydWN0IGZpbGUgKmJhc2U7XFxuK1xcdHN0cnVjdCBtZXRhZnNfZGVudHJ5X2luZm8gKmluZm87XFxuK1xcdHN0cnVjdCBtZXRhZnNfb3B0aW9uX2VudHJ5ICplbnRyaWVzID0gTlVMTDtcXG4rXFx0aW50IGNvdW50ID0gMDtcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGJhc2UgPSBtZXRhZnNfZ2V0X2Jhc2VfZmlsZShkZW50cnktXFx1MDAzZWRfcGFyZW50KTtcXG4rXFx0aWYgKCFiYXNlKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcXG4rXFxuK1xcdHJldCA9IG1ldGFmc19nZXRfb3B0aW9uX3ZhbHVlcyhiYXNlLCB0YXJnZXRfbmFtZSwgXFx1MDAyNmVudHJpZXMsIFxcdTAwMjZjb3VudCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuK1xcbitcXHRpZiAoY291bnQgPT0gMCkge1xcbitcXHRcXHRrZnJlZShlbnRyaWVzKTtcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XFxuK1xcdH1cXG4rXFxuK1xcdGluZm8gPSBremFsbG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWluZm8pIHtcXG4rXFx0XFx0bWV0YWZzX2ZyZWVfZW50cmllcyhlbnRyaWVzLCBjb3VudCk7XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXHR9XFxuK1xcbitcXHRpbmZvLVxcdTAwM2V0eXBlID0gTUVUQUZTX09QVElPTl9WQUxVRVM7XFxuK1xcdGluZm8tXFx1MDAzZW9wdF92YWx1ZXMuZW50cmllcyA9IGVudHJpZXM7XFxuK1xcdGluZm8tXFx1MDAzZW9wdF92YWx1ZXMuY291bnQgPSBjb3VudDtcXG4rXFxuK1xcdGlub2RlID0gbWV0YWZzX2dldF9pbm9kZShkaXItXFx1MDAzZWlfc2IsIFNfSUZESVIgfCAwNTU1LCBcXHUwMDI2bWV0YWZzX29wdGlvbl92YWx1ZXNfZGlyX2lvcHMpO1xcbitcXHRpZiAoIWlub2RlKSB7XFxuK1xcdFxcdG1ldGFmc19mcmVlX2VudHJpZXMoZW50cmllcywgY291bnQpO1xcbitcXHRcXHRrZnJlZShpbmZvKTtcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuK1xcdH1cXG4rXFxuK1xcdGRlbnRyeS1cXHUwMDNlZF9mc2RhdGEgPSBpbmZvO1xcbitcXHRkX2FkZChkZW50cnksIGlub2RlKTtcXG4rXFx0ZF9tYXJrX2RvbnRjYWNoZShpbm9kZSk7XFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbisvKlxcbisgKiBMb29rdXAgaW4gb3B0aW9uLXNwZWNpZmljIGRpcmVjdG9yeSAoZS5nLiwgL21vdW50L29wdGlvbnMvbG93ZXJkaXIvKVxcbisgKiBSZXR1cm4gbnVtYmVyZWQgZW50cmllcyAoMCwgMSwgMiwgLi4uKSBhcyBzeW1saW5rc1xcbisgKi9cXG4rc3RhdGljIHN0cnVjdCBkZW50cnkgKm1ldGFmc19vcHRpb25fdmFsdWVzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IGZsYWdzKVxcbit7XFxuK1xcdGNvbnN0IGNoYXIgKnRhcmdldF9uYW1lID0gZGVudHJ5LVxcdTAwM2VkX25hbWUubmFtZTtcXG4rXFx0c3RydWN0IG1ldGFmc19kZW50cnlfaW5mbyAqcGFyZW50X2luZm8sICppbmZvO1xcbitcXHRzdHJ1Y3QgbWV0YWZzX29wdGlvbl9lbnRyeSAqZW50cnk7XFxuK1xcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuK1xcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRwYXJlbnRfaW5mbyA9IGRlbnRyeS1cXHUwMDNlZF9wYXJlbnQtXFx1MDAzZWRfZnNkYXRhO1xcbitcXHRpZiAoV0FSTl9PTighcGFyZW50X2luZm8gfHwgcGFyZW50X2luZm8tXFx1MDAzZXR5cGUgIT0gTUVUQUZTX09QVElPTl9WQUxVRVMpKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcXG4rXFxuK1xcdGlmICh0YXJnZXRfbmFtZVswXSA9PSAnMCcgXFx1MDAyNlxcdTAwMjYgdGFyZ2V0X25hbWVbMV0pXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xcbitcXG4rXFx0ZXJyID0ga3N0cnRvdWwodGFyZ2V0X25hbWUsIDEwLCBcXHUwMDI2aW5kZXgpO1xcbitcXHRpZiAoZXJyIHx8IGluZGV4IFxcdTAwM2U9IHBhcmVudF9pbmZvLVxcdTAwM2VvcHRfdmFsdWVzLmNvdW50KVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcXG4rXFxuK1xcdGVudHJ5ID0gXFx1MDAyNnBhcmVudF9pbmZvLVxcdTAwM2VvcHRfdmFsdWVzLmVudHJpZXNbaW5kZXhdO1xcbitcXG4rXFx0aW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghaW5mbylcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuK1xcbitcXHRpbmZvLVxcdTAwM2V0eXBlID0gTUVUQUZTX1NZTUxJTks7XFxuK1xcdGlmIChlbnRyeS1cXHUwMDNldmFsdWUpIHtcXG4rXFx0XFx0aW5mby1cXHUwMDNlc3ltbGluay52YWx1ZSA9IGtzdHJkdXAoZW50cnktXFx1MDAzZXZhbHVlLCBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VzeW1saW5rLnZhbHVlKSB7XFxuK1xcdFxcdFxcdGtmcmVlKGluZm8pO1xcbitcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdGlmIChlbnRyeS1cXHUwMDNlcGF0aC5tbnQpIHtcXG4rXFx0XFx0aW5mby1cXHUwMDNlc3ltbGluay5wYXRoID0gZW50cnktXFx1MDAzZXBhdGg7XFxuK1xcdFxcdHBhdGhfZ2V0KFxcdTAwMjZpbmZvLVxcdTAwM2VzeW1saW5rLnBhdGgpO1xcbitcXHR9XFxuK1xcbitcXHRpbm9kZSA9IG1ldGFmc19nZXRfaW5vZGUoZGlyLVxcdTAwM2VpX3NiLCBTX0lGTE5LIHwgMDc3NywgTlVMTCk7XFxuK1xcdGlmICghaW5vZGUpIHtcXG4rXFx0XFx0a2ZyZWUoaW5mby1cXHUwMDNlc3ltbGluay52YWx1ZSk7XFxuK1xcdFxcdGlmIChpbmZvLVxcdTAwM2VzeW1saW5rLnBhdGgubW50KVxcbitcXHRcXHRcXHRwYXRoX3B1dChcXHUwMDI2aW5mby1cXHUwMDNlc3ltbGluay5wYXRoKTtcXG4rXFx0XFx0a2ZyZWUoaW5mbyk7XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXHR9XFxuK1xcbitcXHRkZW50cnktXFx1MDAzZWRfZnNkYXRhID0gaW5mbztcXG4rXFx0ZF9hZGQoZGVudHJ5LCBpbm9kZSk7XFxuK1xcdGRfbWFya19kb250Y2FjaGUoaW5vZGUpO1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rLypcXG4rICogSGVscGVyIHRvIGdldCBiYXNlIGZpbGUgZnJvbSBhbnkgbWV0YWZzIGRlbnRyeVxcbisgKi9cXG4rc3RhdGljIHN0cnVjdCBmaWxlICptZXRhZnNfZ2V0X2Jhc2VfZmlsZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuK3tcXG4rXFx0d2hpbGUgKGRlbnRyeSkge1xcbitcXHRcXHRzdHJ1Y3QgbWV0YWZzX2RlbnRyeV9pbmZvICppbmZvID0gZGVudHJ5LVxcdTAwM2VkX2ZzZGF0YTtcXG4rXFxuK1xcdFxcdGlmIChpbmZvIFxcdTAwMjZcXHUwMDI2IGluZm8tXFx1MDAzZXR5cGUgPT0gTUVUQUZTX1JPT1QpXFxuK1xcdFxcdFxcdHJldHVybiBpbmZvLVxcdTAwM2Vyb290LmJhc2U7XFxuK1xcdFxcdGlmIChkZW50cnkgPT0gZGVudHJ5LVxcdTAwM2VkX3BhcmVudClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGRlbnRyeSA9IGRlbnRyeS1cXHUwMDNlZF9wYXJlbnQ7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuKy8qXFxuKyAqIENyZWF0ZSB0aGUgcm9vdCBkaXJlY3Rvcnkgc3RydWN0dXJlIGZvciBhIG1ldGFkYXRhIG9wZW5cXG4rICovXFxuK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICptZXRhZnNfY3JlYXRlX3Jvb3Qoc3RydWN0IGZpbGUgKmJhc2UpXFxuK3tcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZTtcXG4rXFx0c3RydWN0IGRlbnRyeSAqcm9vdDtcXG4rXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IG1ldGFmc19tbnQtXFx1MDAzZW1udF9zYjtcXG4rXFx0c3RydWN0IG1ldGFmc19kZW50cnlfaW5mbyAqaW5mbztcXG4rXFxuK1xcdGluZm8gPSBremFsbG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWluZm8pXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXG4rXFx0aW5mby1cXHUwMDNldHlwZSA9IE1FVEFGU19ST09UO1xcbitcXHRpbmZvLVxcdTAwM2Vyb290LmJhc2UgPSBnZXRfZmlsZShiYXNlKTtcXG4rXFxuK1xcdGlub2RlID0gbWV0YWZzX2dldF9pbm9kZShzYiwgU19JRkRJUiB8IDA1NTUsIFxcdTAwMjZtZXRhZnNfcm9vdF9kaXJfaW9wcyk7XFxuK1xcdGlmICghaW5vZGUpIHtcXG4rXFx0XFx0ZnB1dChpbmZvLVxcdTAwM2Vyb290LmJhc2UpO1xcbitcXHRcXHRrZnJlZShpbmZvKTtcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJvb3QgPSBkX2FsbG9jX2Fub24oc2IpO1xcbitcXHRpZiAoIXJvb3QpIHtcXG4rXFx0XFx0aXB1dChpbm9kZSk7XFxuK1xcdFxcdGZwdXQoaW5mby1cXHUwMDNlcm9vdC5iYXNlKTtcXG4rXFx0XFx0a2ZyZWUoaW5mbyk7XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXHR9XFxuK1xcbitcXHQvKiBTdG9yZSB0aGUgaW5mbyBpbiBkX2ZzZGF0YSBiZWZvcmUgaW5zdGFudGlhdGluZyAqL1xcbitcXHRyb290LVxcdTAwM2VkX2ZzZGF0YSA9IGluZm87XFxuK1xcdGRfaW5zdGFudGlhdGUocm9vdCwgaW5vZGUpO1xcbitcXHRkX21hcmtfZG9udGNhY2hlKGlub2RlKTtcXG4rXFxuK1xcdHJldHVybiByb290O1xcbit9XFxuK1xcbisvKlxcbisgKiBHZXQgbWV0YWRhdGEgcm9vdCBwYXRoIGZvciBhIGJhc2UgZmlsZS5cXG4rICpcXG4rICogVGhpcyBpcyBjYWxsZWQgZnJvbSBwYXRoX2luaXQoKSB3aGVuIE9fQUxUIGlzIHVzZWQuXFxuKyAqIEl0IHJldHVybnMgYSBwYXRoIGluIHRoZSBtZXRhZnMgdGhhdCBzZXJ2ZXMgYXMgdGhlIHJvb3RcXG4rICogZm9yIHRoZSBtZXRhZGF0YSBsb29rdXAuXFxuKyAqL1xcbitpbnQgbWV0YWZzX2dldF9yb290KHN0cnVjdCBmaWxlICpiYXNlLCBzdHJ1Y3QgcGF0aCAqcGF0aClcXG4re1xcbitcXHRzdHJ1Y3QgZGVudHJ5ICpyb290O1xcbitcXG4rXFx0aWYgKCFiYXNlKVxcbitcXHRcXHRyZXR1cm4gLUVCQURGO1xcbitcXG4rXFx0LyogQ3JlYXRlIHRoZSBtZXRhZGF0YSByb290IGZvciB0aGlzIGJhc2UgZmlsZSAqL1xcbitcXHRyb290ID0gbWV0YWZzX2NyZWF0ZV9yb290KGJhc2UpO1xcbitcXHRpZiAoSVNfRVJSKHJvb3QpKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihyb290KTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFJldHVybiB0aGUgcGF0aCB0byB0aGUgbWV0YWRhdGEgcm9vdC5cXG4rXFx0ICogTm9ybWFsIFZGUyBsb29rdXAgd2lsbCB0YWtlIG92ZXIgZnJvbSBoZXJlLlxcbitcXHQgKi9cXG4rXFx0cGF0aC1cXHUwMDNlbW50ID0gbW50Z2V0KG1ldGFmc19tbnQpO1xcbitcXHRwYXRoLVxcdTAwM2VkZW50cnkgPSByb290O1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobWV0YWZzX2dldF9yb290KTtcXG4rXFxuK3N0YXRpYyBpbnQgX19pbml0IG1ldGFmc19pbml0KHZvaWQpXFxuK3tcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGVyciA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oXFx1MDAyNm1ldGFmc190eXBlKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdG1ldGFmc19tbnQgPSBrZXJuX21vdW50KFxcdTAwMjZtZXRhZnNfdHlwZSk7XFxuK1xcdGlmIChJU19FUlIobWV0YWZzX21udCkpIHtcXG4rXFx0XFx0ZXJyID0gUFRSX0VSUihtZXRhZnNfbW50KTtcXG4rXFx0XFx0dW5yZWdpc3Rlcl9maWxlc3lzdGVtKFxcdTAwMjZtZXRhZnNfdHlwZSk7XFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFx0c2V0X2RlZmF1bHRfZF9vcChtZXRhZnNfbW50LVxcdTAwM2VtbnRfc2IsIFxcdTAwMjZtZXRhZnNfZGVudHJ5X29wcyk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rZnNfaW5pdGNhbGwobWV0YWZzX2luaXQpO1xcbmRpZmYgLS1naXQgYS9mcy9tZXRhZnMvbWV0YWZzLmggYi9mcy9tZXRhZnMvbWV0YWZzLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5kMjU3NzE0MjYwYTdmYlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9mcy9tZXRhZnMvbWV0YWZzLmhcXG5AQCAtMCwwICsxLDE1IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuKyNpZm5kZWYgX0xJTlVYX01FVEFGU19IXFxuKyNkZWZpbmUgX0xJTlVYX01FVEFGU19IXFxuK1xcbitzdHJ1Y3QgcGF0aDtcXG4rc3RydWN0IGZpbGU7XFxuK1xcbisvKlxcbisgKiBHZXQgbWV0YWRhdGEgcm9vdCBwYXRoIGZvciBhIGJhc2UgZmlsZS5cXG4rICogQ2FsbGVkIGZyb20gcGF0aF9pbml0KCkgd2hlbiBPX0FMVCBmbGFnIGlzIHVzZWQuXFxuKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIHdpdGggcGF0aCBmaWxsZWQgaW4sIC1lcnJubyBvbiBlcnJvci5cXG4rICovXFxuK2ludCBtZXRhZnNfZ2V0X3Jvb3Qoc3RydWN0IGZpbGUgKmJhc2UsIHN0cnVjdCBwYXRoICpwYXRoKTtcXG4rXFxuKyNlbmRpZiAvKiBfTElOVVhfTUVUQUZTX0ggKi9cXG5kaWZmIC0tZ2l0IGEvZnMvbW91bnQuaCBiL2ZzL21vdW50LmhcXG5pbmRleCA5NGZjYzMwNmQyMWU3ZC4uNjlhOTUzYmMxMTJiMzYgMTAwNjQ0XFxuLS0tIGEvZnMvbW91bnQuaFxcbisrKyBiL2ZzL21vdW50LmhcXG5AQCAtNjUsNyArNjUsNiBAQCBzdHJ1Y3QgbW91bnQge1xcbiBcXHRzdHJ1Y3QgbW91bnQgKiBfX2FsaWduZWQoMSkgKm1udF9wcHJldl9mb3Jfc2I7XFxuIFxcdFxcdFxcdFxcdFxcdC8qIGV4Y2VwdCB0aGF0IExTQiBvZiBwcHJldiBpcyBzdG9sZW4gKi9cXG4gI2RlZmluZSBXUklURV9IT0xEIDFcXHRcXHRcXHQvKiAuLi4gZm9yIHVzZSBieSBtbnRfaG9sZF93cml0ZXJzKCkgKi9cXG4tXFx0Y29uc3QgY2hhciAqbW50X2Rldm5hbWU7XFx0LyogTmFtZSBvZiBkZXZpY2UgZS5nLiAvZGV2L2Rzay9oZGExICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgbW50X2xpc3Q7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgbW50X2V4cGlyZTtcXHQvKiBsaW5rIGluIGZzLXNwZWNpZmljIGV4cGlyeSBsaXN0ICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgbW50X3NoYXJlO1xcdC8qIGNpcmN1bGFyIGxpc3Qgb2Ygc2hhcmVkIG1vdW50cyAqL1xcbmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuY1xcbmluZGV4IDE5Y2U0M2M5YTZlNjYyLi40MzdhMTRjNDMyZTY3YiAxMDA2NDRcXG4tLS0gYS9mcy9uYW1laS5jXFxuKysrIGIvZnMvbmFtZWkuY1xcbkBAIC00NSw2ICs0NSw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIm1vdW50LmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJtZXRhZnMvbWV0YWZzLmhcXFwiXFxuIFxcbiAvKiBbRmViLTE5OTcgVC4gU2Nob2ViZWwtVGhldWVyXVxcbiAgKiBGdW5kYW1lbnRhbCBjaGFuZ2VzIGluIHRoZSBwYXRobmFtZSBsb29rdXAgbWVjaGFuaXNtcyAobmFtZWkpXFxuQEAgLTI3NTMsNiArMjc1NCwyMSBAQCBzdGF0aWMgY29uc3QgY2hhciAqcGF0aF9pbml0KHN0cnVjdCBuYW1laWRhdGEgKm5kLCB1bnNpZ25lZCBmbGFncylcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XFxuIFxcdFxcdH1cXG4gXFxuK1xcdFxcdGlmICh1bmxpa2VseShmbGFncyBcXHUwMDI2IExPT0tVUF9BTFQpKSB7XFxuK1xcdFxcdFxcdGlmIChmbGFncyBcXHUwMDI2IExPT0tVUF9SQ1UpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FQ0hJTEQpO1xcbitcXG4rXFx0XFx0XFx0LyogSGFuZGxlIE9fQUxUOiBqdW1wIHRvIG1ldGFmcyByb290ICovXFxuK1xcdFxcdFxcdGVycm9yID0gbWV0YWZzX2dldF9yb290KGZkX2ZpbGUoZiksIFxcdTAwMjZuZC1cXHUwMDNlcGF0aCk7XFxuK1xcdFxcdFxcdGlmIChlcnJvcilcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyb3IpO1xcbitcXG4rXFx0XFx0XFx0bmQtXFx1MDAzZWlub2RlID0gbmQtXFx1MDAzZXBhdGguZGVudHJ5LVxcdTAwM2VkX2lub2RlO1xcbitcXHRcXHRcXHRuZC1cXHUwMDNlc3RhdGUgfD0gTkRfSlVNUEVEO1xcbitcXG4rXFx0XFx0XFx0cmV0dXJuIHM7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdGRlbnRyeSA9IGZkX2ZpbGUoZiktXFx1MDAzZWZfcGF0aC5kZW50cnk7XFxuIFxcbiBcXHRcXHRpZiAoKnMgXFx1MDAyNlxcdTAwMjYgdW5saWtlbHkoIWRfY2FuX2xvb2t1cChkZW50cnkpKSlcXG5kaWZmIC0tZ2l0IGEvZnMvbmFtZXNwYWNlLmMgYi9mcy9uYW1lc3BhY2UuY1xcbmluZGV4IDNkNWNkNWJmM2IwNTM3Li42MmNjNzFjNDAxYTJhYyAxMDA2NDRcXG4tLS0gYS9mcy9uYW1lc3BhY2UuY1xcbisrKyBiL2ZzL25hbWVzcGFjZS5jXFxuQEAgLTI4Miw3ICsyODIsNyBAQCBpbnQgbW50X2dldF9jb3VudChzdHJ1Y3QgbW91bnQgKm1udClcXG4gI2VuZGlmXFxuIH1cXG4gXFxuLXN0YXRpYyBzdHJ1Y3QgbW91bnQgKmFsbG9jX3Zmc21udChjb25zdCBjaGFyICpuYW1lKVxcbitzdGF0aWMgc3RydWN0IG1vdW50ICphbGxvY192ZnNtbnQodm9pZClcXG4ge1xcbiBcXHRzdHJ1Y3QgbW91bnQgKm1udCA9IGttZW1fY2FjaGVfemFsbG9jKG1udF9jYWNoZSwgR0ZQX0tFUk5FTCk7XFxuIFxcdGlmIChtbnQpIHtcXG5AQCAtMjkyLDE4ICsyOTIsMTAgQEAgc3RhdGljIHN0cnVjdCBtb3VudCAqYWxsb2NfdmZzbW50KGNvbnN0IGNoYXIgKm5hbWUpXFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdGdvdG8gb3V0X2ZyZWVfY2FjaGU7XFxuIFxcbi1cXHRcXHRpZiAobmFtZSlcXG4tXFx0XFx0XFx0bW50LVxcdTAwM2VtbnRfZGV2bmFtZSA9IGtzdHJkdXBfY29uc3QobmFtZSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0IEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuLVxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0bW50LVxcdTAwM2VtbnRfZGV2bmFtZSA9IFxcXCJub25lXFxcIjtcXG4tXFx0XFx0aWYgKCFtbnQtXFx1MDAzZW1udF9kZXZuYW1lKVxcbi1cXHRcXHRcXHRnb3RvIG91dF9mcmVlX2lkO1xcbi1cXG4gI2lmZGVmIENPTkZJR19TTVBcXG4gXFx0XFx0bW50LVxcdTAwM2VtbnRfcGNwID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBtbnRfcGNwKTtcXG4gXFx0XFx0aWYgKCFtbnQtXFx1MDAzZW1udF9wY3ApXFxuLVxcdFxcdFxcdGdvdG8gb3V0X2ZyZWVfZGV2bmFtZTtcXG4rXFx0XFx0XFx0Z290byBvdXRfZnJlZV9pZDtcXG4gXFxuIFxcdFxcdHRoaXNfY3B1X2FkZChtbnQtXFx1MDAzZW1udF9wY3AtXFx1MDAzZW1udF9jb3VudCwgMSk7XFxuICNlbHNlXFxuQEAgLTMyOCwxMSArMzIwLDkgQEAgc3RhdGljIHN0cnVjdCBtb3VudCAqYWxsb2NfdmZzbW50KGNvbnN0IGNoYXIgKm5hbWUpXFxuIFxcdHJldHVybiBtbnQ7XFxuIFxcbiAjaWZkZWYgQ09ORklHX1NNUFxcbi1vdXRfZnJlZV9kZXZuYW1lOlxcbi1cXHRrZnJlZV9jb25zdChtbnQtXFx1MDAzZW1udF9kZXZuYW1lKTtcXG4tI2VuZGlmXFxuIG91dF9mcmVlX2lkOlxcbiBcXHRtbnRfZnJlZV9pZChtbnQpO1xcbisjZW5kaWZcXG4gb3V0X2ZyZWVfY2FjaGU6XFxuIFxcdGttZW1fY2FjaGVfZnJlZShtbnRfY2FjaGUsIG1udCk7XFxuIFxcdHJldHVybiBOVUxMO1xcbkBAIC03MjUsNyArNzE1LDYgQEAgaW50IHNiX3ByZXBhcmVfcmVtb3VudF9yZWFkb25seShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiBzdGF0aWMgdm9pZCBmcmVlX3Zmc21udChzdHJ1Y3QgbW91bnQgKm1udClcXG4ge1xcbiBcXHRtbnRfaWRtYXBfcHV0KG1udF9pZG1hcChcXHUwMDI2bW50LVxcdTAwM2VtbnQpKTtcXG4tXFx0a2ZyZWVfY29uc3QobW50LVxcdTAwM2VtbnRfZGV2bmFtZSk7XFxuICNpZmRlZiBDT05GSUdfU01QXFxuIFxcdGZyZWVfcGVyY3B1KG1udC1cXHUwMDNlbW50X3BjcCk7XFxuICNlbmRpZlxcbkBAIC0xMTgwLDcgKzExNjksNyBAQCBzdHJ1Y3QgdmZzbW91bnQgKnZmc19jcmVhdGVfbW91bnQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbiBcXHRpZiAoIWZjLVxcdTAwM2Vyb290KVxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4gXFxuLVxcdG1udCA9IGFsbG9jX3Zmc21udChmYy1cXHUwMDNlc291cmNlKTtcXG4rXFx0bW50ID0gYWxsb2NfdmZzbW50KCk7XFxuIFxcdGlmICghbW50KVxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4gXFxuQEAgLTEyNDgsNyArMTIzNyw3IEBAIHN0YXRpYyBzdHJ1Y3QgbW91bnQgKmNsb25lX21udChzdHJ1Y3QgbW91bnQgKm9sZCwgc3RydWN0IGRlbnRyeSAqcm9vdCxcXG4gXFx0c3RydWN0IG1vdW50ICptbnQ7XFxuIFxcdGludCBlcnI7XFxuIFxcbi1cXHRtbnQgPSBhbGxvY192ZnNtbnQob2xkLVxcdTAwM2VtbnRfZGV2bmFtZSk7XFxuK1xcdG1udCA9IGFsbG9jX3Zmc21udCgpO1xcbiBcXHRpZiAoIW1udClcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuIFxcbkBAIC0yOTU3LDE2ICsyOTQ2LDEyIEBAIHN0YXRpYyBpbnQgZG9fY2hhbmdlX3R5cGUoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIGludCBtc19mbGFncylcXG4gc3RhdGljIGlubGluZSBib29sIG1heV9jb3B5X3RyZWUoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXFxuIHtcXG4gXFx0c3RydWN0IG1vdW50ICptbnQgPSByZWFsX21vdW50KHBhdGgtXFx1MDAzZW1udCk7XFxuLVxcdGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyAqZF9vcDtcXG4gXFxuIFxcdGlmIChjaGVja19tbnQobW50KSlcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbi1cXHRkX29wID0gcGF0aC1cXHUwMDNlZGVudHJ5LVxcdTAwM2VkX29wO1xcbi1cXHRpZiAoZF9vcCA9PSBcXHUwMDI2bnNfZGVudHJ5X29wZXJhdGlvbnMpXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbi1cXG4tXFx0aWYgKGRfb3AgPT0gXFx1MDAyNnBpZGZzX2RlbnRyeV9vcGVyYXRpb25zKVxcbitcXHQvKiBNYWtlIGFuIGV4Y2VwdGlvbiBmb3IgaW50ZXJuYWwgbW91bnRzIGV4cGxpY2l0bHkgbWFya2VkIGFzIGNsb25hYmxlICovXFxuK1xcdGlmIChtbnQtXFx1MDAzZW1udF9ucyA9PSBNTlRfTlNfSU5URVJOQUwgXFx1MDAyNlxcdTAwMjYgbW50LVxcdTAwM2VtbnQubW50X2ZsYWdzIFxcdTAwMjYgTU5UX0NMT05BQkxFKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuIFxcdGlmICghaXNfbW91bnRlZChwYXRoLVxcdTAwM2VtbnQpKVxcbkBAIC0zMjAxLDcgKzMxODYsNyBAQCBzdGF0aWMgc3RydWN0IGZpbGUgKnZmc19vcGVuX3RyZWUoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lLCB1bnNpZ25lZFxcbiBcXG4gXFx0aWYgKGZsYWdzIFxcdTAwMjYgfihBVF9FTVBUWV9QQVRIIHwgQVRfTk9fQVVUT01PVU5UIHwgQVRfUkVDVVJTSVZFIHxcXG4gXFx0XFx0ICAgICAgQVRfU1lNTElOS19OT0ZPTExPVyB8IE9QRU5fVFJFRV9DTE9ORSB8XFxuLVxcdFxcdCAgICAgIE9QRU5fVFJFRV9DTE9FWEVDIHwgT1BFTl9UUkVFX05BTUVTUEFDRSkpXFxuK1xcdFxcdCAgICAgIE9QRU5fVFJFRV9DTE9FWEVDIHwgT1BFTl9UUkVFX05BTUVTUEFDRSB8IE9QRU5fVFJFRV9BTFQpKVxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4gXFxuIFxcdGlmICgoZmxhZ3MgXFx1MDAyNiAoQVRfUkVDVVJTSVZFIHwgT1BFTl9UUkVFX0NMT05FIHwgT1BFTl9UUkVFX05BTUVTUEFDRSkpID09XFxuQEAgLTMyMTUsNiArMzIwMCw4IEBAIHN0YXRpYyBzdHJ1Y3QgZmlsZSAqdmZzX29wZW5fdHJlZShpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsIHVuc2lnbmVkXFxuIFxcdFxcdGxvb2t1cF9mbGFncyBcXHUwMDI2PSB+TE9PS1VQX0FVVE9NT1VOVDtcXG4gXFx0aWYgKGZsYWdzIFxcdTAwMjYgQVRfU1lNTElOS19OT0ZPTExPVylcXG4gXFx0XFx0bG9va3VwX2ZsYWdzIFxcdTAwMjY9IH5MT09LVVBfRk9MTE9XO1xcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiBPUEVOX1RSRUVfQUxUKVxcbitcXHRcXHRsb29rdXBfZmxhZ3MgfD0gTE9PS1VQX0FMVDtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIElmIHdlIGNyZWF0ZSBhIG5ldyBtb3VudCBuYW1lc3BhY2Ugd2l0aCB0aGUgY2xvbmVkIG1vdW50IHRyZWUgd2VcXG5AQCAtNTM4Nyw3ICs1Mzc0LDYgQEAgc3RhdGljIHZvaWQgc3RhdG1vdW50X2ZzX3N1YnR5cGUoc3RydWN0IGtzdGF0bW91bnQgKnMsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxcbiBzdGF0aWMgaW50IHN0YXRtb3VudF9zYl9zb3VyY2Uoc3RydWN0IGtzdGF0bW91bnQgKnMsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxcbiB7XFxuIFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBzLVxcdTAwM2VtbnQtXFx1MDAzZW1udF9zYjtcXG4tXFx0c3RydWN0IG1vdW50ICpyID0gcmVhbF9tb3VudChzLVxcdTAwM2VtbnQpO1xcbiBcXG4gXFx0aWYgKHNiLVxcdTAwM2VzX29wLVxcdTAwM2VzaG93X2Rldm5hbWUpIHtcXG4gXFx0XFx0c2l6ZV90IHN0YXJ0ID0gc2VxLVxcdTAwM2Vjb3VudDtcXG5AQCAtNTQwNSw3ICs1MzkxLDcgQEAgc3RhdGljIGludCBzdGF0bW91bnRfc2Jfc291cmNlKHN0cnVjdCBrc3RhdG1vdW50ICpzLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSlcXG4gXFx0XFx0c2VxLVxcdTAwM2Vjb3VudCA9IHN0YXJ0O1xcbiBcXHRcXHRzZXFfY29tbWl0KHNlcSwgc3RyaW5nX3VuZXNjYXBlX2lucGxhY2Uoc2VxLVxcdTAwM2VidWYgKyBzdGFydCwgVU5FU0NBUEVfT0NUQUwpKTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0c2VxX3B1dHMoc2VxLCByLVxcdTAwM2VtbnRfZGV2bmFtZSk7XFxuK1xcdFxcdHNlcV9wdXRzKHNlcSwgc2ItXFx1MDAzZXNfZGV2bmFtZSk7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtNTQxNiw2ICs1NDAyLDQwIEBAIHN0YXRpYyB2b2lkIHN0YXRtb3VudF9tbnRfbnNfaWQoc3RydWN0IGtzdGF0bW91bnQgKnMsIHN0cnVjdCBtbnRfbmFtZXNwYWNlICpucylcXG4gXFx0cy1cXHUwMDNlc20ubW50X25zX2lkID0gbnMtXFx1MDAzZW5zLm5zX2lkO1xcbiB9XFxuIFxcbit2b2lkIHNiX2FkZF9vcHRpb24oc3RydWN0IHNiX29wdF9jdHggKmN0eCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpXFxuK3tcXG4rXFx0c2JfYWRkX29wdGlvbl9wYXRoKGN0eCwgbmFtZSwgdmFsdWUsIE5VTEwpO1xcbit9XFxuK1xcbit2b2lkIHNiX2FkZF9vcHRpb25fcGF0aChzdHJ1Y3Qgc2Jfb3B0X2N0eCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSxcXG4rXFx0XFx0XFx0Y29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXFxuK3tcXG4rXFx0Y3R4LVxcdTAwM2VhY3RvcihjdHgsIG5hbWUsIHZhbHVlLCBwYXRoKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZG9fc2hvd19vcHRpb24oc3RydWN0IHNiX29wdF9jdHggKmN0eCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUsXFxuK1xcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKVxcbit7XFxuK1xcdGlmIChzdHJjbXAobmFtZSwgXFxcInNvdXJjZVxcXCIpICE9IDApXFxuK1xcdFxcdHNlcV9zaG93X29wdGlvbihjdHgtXFx1MDAzZWRhdGEsIG5hbWUsIHZhbHVlKTtcXG4rfVxcbitcXG4raW50IG1udF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCB2ZnNtb3VudCAqbW50KVxcbit7XFxuK1xcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBtbnQtXFx1MDAzZW1udF9zYjtcXG4rXFxuK1xcdGlmIChzYi1cXHUwMDNlc19vcC1cXHUwMDNlc2hvd19vcHRpb25zKVxcbitcXHRcXHRyZXR1cm4gc2ItXFx1MDAzZXNfb3AtXFx1MDAzZXNob3dfb3B0aW9ucyhzZXEsIG1udC1cXHUwMDNlbW50X3Jvb3QpO1xcbitcXG4rXFx0aWYgKHNiLVxcdTAwM2VzX29wLVxcdTAwM2VnZXRfb3B0aW9ucykge1xcbitcXHRcXHRzdHJ1Y3Qgc2Jfb3B0X2N0eCBjdHggPSB7IC5kYXRhID0gc2VxLCAuYWN0b3IgPSBkb19zaG93X29wdGlvbiB9O1xcbitcXG4rXFx0XFx0cmV0dXJuIHNiLVxcdTAwM2VzX29wLVxcdTAwM2VnZXRfb3B0aW9ucyhcXHUwMDI2Y3R4LCBtbnQtXFx1MDAzZW1udF9yb290KTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgc3RhdG1vdW50X21udF9vcHRzKHN0cnVjdCBrc3RhdG1vdW50ICpzLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSlcXG4ge1xcbiBcXHRzdHJ1Y3QgdmZzbW91bnQgKm1udCA9IHMtXFx1MDAzZW1udDtcXG5AQCAtNTQyNywxMSArNTQ0Nyw5IEBAIHN0YXRpYyBpbnQgc3RhdG1vdW50X21udF9vcHRzKHN0cnVjdCBrc3RhdG1vdW50ICpzLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSlcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuLVxcdGlmIChzYi1cXHUwMDNlc19vcC1cXHUwMDNlc2hvd19vcHRpb25zKSB7XFxuLVxcdFxcdGVyciA9IHNiLVxcdTAwM2VzX29wLVxcdTAwM2VzaG93X29wdGlvbnMoc2VxLCBtbnQtXFx1MDAzZW1udF9yb290KTtcXG4tXFx0XFx0aWYgKGVycilcXG4tXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4tXFx0fVxcbitcXHRlcnIgPSBtbnRfc2hvd19vcHRpb25zKHNlcSwgbW50KTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuIFxcdGlmICh1bmxpa2VseShzZXFfaGFzX292ZXJmbG93ZWQoc2VxKSkpXFxuIFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbkBAIC01NDc5LDE0ICs1NDk3LDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHN0YXRtb3VudF9vcHRfcHJvY2VzcyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc2l6ZV90IHN0YXJ0KVxcbiBzdGF0aWMgaW50IHN0YXRtb3VudF9vcHRfYXJyYXkoc3RydWN0IGtzdGF0bW91bnQgKnMsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxcbiB7XFxuIFxcdHN0cnVjdCB2ZnNtb3VudCAqbW50ID0gcy1cXHUwMDNlbW50O1xcbi1cXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gbW50LVxcdTAwM2VtbnRfc2I7XFxuIFxcdHNpemVfdCBzdGFydCA9IHNlcS1cXHUwMDNlY291bnQ7XFxuIFxcdGludCBlcnI7XFxuIFxcbi1cXHRpZiAoIXNiLVxcdTAwM2VzX29wLVxcdTAwM2VzaG93X29wdGlvbnMpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0ZXJyID0gc2ItXFx1MDAzZXNfb3AtXFx1MDAzZXNob3dfb3B0aW9ucyhzZXEsIG1udC1cXHUwMDNlbW50X3Jvb3QpO1xcbitcXHRlcnIgPSBtbnRfc2hvd19vcHRpb25zKHNlcSwgbW50KTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL25zZnMuYyBiL2ZzL25zZnMuY1xcbmluZGV4IGMzYjZhZTc2NTk0YTgxLi5lMTEwMTMwZDA3NjBlNSAxMDA2NDRcXG4tLS0gYS9mcy9uc2ZzLmNcXG4rKysgYi9mcy9uc2ZzLmNcXG5AQCAtNjg0LDYgKzY4NCw3IEBAIHZvaWQgX19pbml0IG5zZnNfaW5pdCh2b2lkKVxcbiBcXHRpZiAoSVNfRVJSKG5zZnNfbW50KSlcXG4gXFx0XFx0cGFuaWMoXFxcImNhbid0IHNldCBuc2ZzIHVwXFxcXG5cXFwiKTtcXG4gXFx0bnNmc19tbnQtXFx1MDAzZW1udF9zYi1cXHUwMDNlc19mbGFncyBcXHUwMDI2PSB+U0JfTk9VU0VSO1xcbitcXHRuc2ZzX21udC1cXHUwMDNlbW50X2ZsYWdzIHw9IE1OVF9DTE9OQUJMRTtcXG4gXFx0bnNmc19yb290X3BhdGgubW50ID0gbnNmc19tbnQ7XFxuIFxcdG5zZnNfcm9vdF9wYXRoLmRlbnRyeSA9IG5zZnNfbW50LVxcdTAwM2VtbnRfcm9vdDtcXG4gfVxcbmRpZmYgLS1naXQgYS9mcy9vcGVuLmMgYi9mcy9vcGVuLmNcXG5pbmRleCA0MDg5MjVkN2JkMGI3Ny4uM2EwODFhOWUzMDYyNDMgMTAwNjQ0XFxuLS0tIGEvZnMvb3Blbi5jXFxuKysrIGIvZnMvb3Blbi5jXFxuQEAgLTExMzEsNyArMTEzMSw4IEBAIHN0cnVjdCBmaWxlICprZXJuZWxfZmlsZV9vcGVuKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgZmxhZ3MsXFxuIEVYUE9SVF9TWU1CT0xfR1BMKGtlcm5lbF9maWxlX29wZW4pO1xcbiBcXG4gI2RlZmluZSBXSUxMX0NSRUFURShmbGFncylcXHQoZmxhZ3MgXFx1MDAyNiAoT19DUkVBVCB8IF9fT19UTVBGSUxFKSlcXG4tI2RlZmluZSBPX1BBVEhfRkxBR1NcXHRcXHQoT19ESVJFQ1RPUlkgfCBPX05PRk9MTE9XIHwgT19QQVRIIHwgT19DTE9FWEVDIHwgT19FTVBUWVBBVEgpXFxuKyNkZWZpbmUgT19QQVRIX0ZMQUdTXFx0XFx0KE9fRElSRUNUT1JZIHwgT19OT0ZPTExPVyB8IE9fUEFUSCB8IE9fQ0xPRVhFQyB8IE9fRU1QVFlQQVRIIHwgXFxcXFxcbitcXHRcXHRcXHRcXHQgT19BTFQpXFxuIFxcbiBpbmxpbmUgc3RydWN0IG9wZW5faG93IGJ1aWxkX29wZW5faG93KGludCBmbGFncywgdW1vZGVfdCBtb2RlKVxcbiB7XFxuQEAgLTEyODMsNiArMTI4NCw4IEBAIGlubGluZSBpbnQgYnVpbGRfb3Blbl9mbGFncyhjb25zdCBzdHJ1Y3Qgb3Blbl9ob3cgKmhvdywgc3RydWN0IG9wZW5fZmxhZ3MgKm9wKVxcbiBcXHRcXHRsb29rdXBfZmxhZ3MgfD0gTE9PS1VQX0ZPTExPVztcXG4gXFx0aWYgKGZsYWdzIFxcdTAwMjYgT19FTVBUWVBBVEgpXFxuIFxcdFxcdGxvb2t1cF9mbGFncyB8PSBMT09LVVBfRU1QVFk7XFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IE9fQUxUKVxcbitcXHRcXHRsb29rdXBfZmxhZ3MgfD0gTE9PS1VQX0FMVDtcXG4gXFxuIFxcdGlmIChob3ctXFx1MDAzZXJlc29sdmUgXFx1MDAyNiBSRVNPTFZFX05PX1hERVYpXFxuIFxcdFxcdGxvb2t1cF9mbGFncyB8PSBMT09LVVBfTk9fWERFVjtcXG5kaWZmIC0tZ2l0IGEvZnMvb3ZlcmxheWZzL3BhcmFtcy5jIGIvZnMvb3ZlcmxheWZzL3BhcmFtcy5jXFxuaW5kZXggYzkzZmNhYTQ1ZDRhMzYuLmM1YTllODU4ZTM2NjVlIDEwMDY0NFxcbi0tLSBhL2ZzL292ZXJsYXlmcy9wYXJhbXMuY1xcbisrKyBiL2ZzL292ZXJsYXlmcy9wYXJhbXMuY1xcbkBAIC0xMDQ2LDEwICsxMDQ2LDExIEBAIGludCBvdmxfZnNfcGFyYW1zX3ZlcmlmeShjb25zdCBzdHJ1Y3Qgb3ZsX2ZzX2NvbnRleHQgKmN0eCxcXG4gICogUHJpbnRzIHRoZSBtb3VudCBvcHRpb25zIGZvciBhIGdpdmVuIHN1cGVyYmxvY2suXFxuICAqIFJldHVybnMgemVybzsgZG9lcyBub3QgZmFpbC5cXG4gICovXFxuLWludCBvdmxfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbitpbnQgb3ZsX2dldF9vcHRpb25zKHN0cnVjdCBzYl9vcHRfY3R4ICpjdHgsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4ge1xcbiBcXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGVudHJ5LVxcdTAwM2VkX3NiO1xcbiBcXHRzdHJ1Y3Qgb3ZsX2ZzICpvZnMgPSBPVkxfRlMoc2IpO1xcbitcXHRzdHJ1Y3QgcGF0aCB1cHBlcnBhdGg7XFxuIFxcdHNpemVfdCBuciwgbnJfbWVyZ2VkX2xvd2VyLCBucl9sb3dlciA9IDA7XFxuIFxcdGNoYXIgKipsb3dlcmRpcnMgPSBvZnMtXFx1MDAzZWNvbmZpZy5sb3dlcmRpcnM7XFxuIFxcbkBAIC0xMDYyLDQzICsxMDYzLDQ3IEBAIGludCBvdmxfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbiBcXHQgKiB3aXRoIHRoZSBuZXcgbG93ZXJkaXIrIGFuZCBkYXRhZGlyKyBtb3VudCBvcHRpb25zLlxcbiBcXHQgKi9cXG4gXFx0aWYgKGxvd2VyZGlyc1swXSkge1xcbi1cXHRcXHRzZXFfc2hvd19vcHRpb24obSwgXFxcImxvd2VyZGlyXFxcIiwgbG93ZXJkaXJzWzBdKTtcXG4rXFx0XFx0c2JfYWRkX29wdGlvbihjdHgsIFxcXCJsb3dlcmRpclxcXCIsIGxvd2VyZGlyc1swXSk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdG5yX2xvd2VyID0gb2ZzLVxcdTAwM2VudW1sYXllcjtcXG4gXFx0XFx0bnJfbWVyZ2VkX2xvd2VyID0gbnJfbG93ZXIgLSBvZnMtXFx1MDAzZW51bWRhdGFsYXllcjtcXG4gXFx0fVxcbiBcXHRmb3IgKG5yID0gMTsgbnIgXFx1MDAzYyBucl9sb3dlcjsgbnIrKykge1xcbitcXHRcXHRzdHJ1Y3QgcGF0aCBsb3dlcnBhdGggPSB7XFxuK1xcdFxcdFxcdC5tbnQgPSBvZnMtXFx1MDAzZWxheWVyc1tucl0ubW50LFxcbitcXHRcXHRcXHQuZGVudHJ5ID0gb2ZzLVxcdTAwM2VsYXllcnNbbnJdLm1udC1cXHUwMDNlbW50X3Jvb3QsXFxuK1xcdFxcdH07XFxuIFxcdFxcdGlmIChuciBcXHUwMDNjIG5yX21lcmdlZF9sb3dlcilcXG4tXFx0XFx0XFx0c2VxX3Nob3dfb3B0aW9uKG0sIFxcXCJsb3dlcmRpcitcXFwiLCBsb3dlcmRpcnNbbnJdKTtcXG4rXFx0XFx0XFx0c2JfYWRkX29wdGlvbl9wYXRoKGN0eCwgXFxcImxvd2VyZGlyK1xcXCIsIGxvd2VyZGlyc1tucl0sXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZsb3dlcnBhdGgpO1xcbiBcXHRcXHRlbHNlXFxuLVxcdFxcdFxcdHNlcV9zaG93X29wdGlvbihtLCBcXFwiZGF0YWRpcitcXFwiLCBsb3dlcmRpcnNbbnJdKTtcXG4rXFx0XFx0XFx0c2JfYWRkX29wdGlvbl9wYXRoKGN0eCwgXFxcImRhdGFkaXIrXFxcIiwgbG93ZXJkaXJzW25yXSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmxvd2VycGF0aCk7XFxuIFxcdH1cXG4gXFx0aWYgKG9mcy1cXHUwMDNlY29uZmlnLnVwcGVyZGlyKSB7XFxuLVxcdFxcdHNlcV9zaG93X29wdGlvbihtLCBcXFwidXBwZXJkaXJcXFwiLCBvZnMtXFx1MDAzZWNvbmZpZy51cHBlcmRpcik7XFxuLVxcdFxcdHNlcV9zaG93X29wdGlvbihtLCBcXFwid29ya2RpclxcXCIsIG9mcy1cXHUwMDNlY29uZmlnLndvcmtkaXIpO1xcbitcXHRcXHRvdmxfcGF0aF91cHBlcihzYi1cXHUwMDNlc19yb290LCBcXHUwMDI2dXBwZXJwYXRoKTtcXG4rXFx0XFx0c2JfYWRkX29wdGlvbl9wYXRoKGN0eCwgXFxcInVwcGVyZGlyXFxcIiwgb2ZzLVxcdTAwM2Vjb25maWcudXBwZXJkaXIsIFxcdTAwMjZ1cHBlcnBhdGgpO1xcbitcXHRcXHRzYl9hZGRfb3B0aW9uKGN0eCwgXFxcIndvcmtkaXJcXFwiLCBvZnMtXFx1MDAzZWNvbmZpZy53b3JrZGlyKTtcXG4gXFx0fVxcbiBcXHRpZiAob2ZzLVxcdTAwM2Vjb25maWcuZGVmYXVsdF9wZXJtaXNzaW9ucylcXG4tXFx0XFx0c2VxX3B1dHMobSwgXFxcIixkZWZhdWx0X3Blcm1pc3Npb25zXFxcIik7XFxuK1xcdFxcdHNiX2FkZF9vcHRpb24oY3R4LCBcXFwiZGVmYXVsdF9wZXJtaXNzaW9uc1xcXCIsIE5VTEwpO1xcbiBcXHRpZiAob2ZzLVxcdTAwM2Vjb25maWcucmVkaXJlY3RfbW9kZSAhPSBvdmxfcmVkaXJlY3RfbW9kZV9kZWYoKSlcXG4tXFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiLHJlZGlyZWN0X2Rpcj0lc1xcXCIsXFxuLVxcdFxcdFxcdCAgIG92bF9yZWRpcmVjdF9tb2RlKFxcdTAwMjZvZnMtXFx1MDAzZWNvbmZpZykpO1xcbitcXHRcXHRzYl9hZGRfb3B0aW9uKGN0eCwgXFxcInJlZGlyZWN0X2RpclxcXCIsIG92bF9yZWRpcmVjdF9tb2RlKFxcdTAwMjZvZnMtXFx1MDAzZWNvbmZpZykpO1xcbiBcXHRpZiAob2ZzLVxcdTAwM2Vjb25maWcuaW5kZXggIT0gb3ZsX2luZGV4X2RlZilcXG4tXFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiLGluZGV4PSVzXFxcIiwgc3RyX29uX29mZihvZnMtXFx1MDAzZWNvbmZpZy5pbmRleCkpO1xcbitcXHRcXHRzYl9hZGRfb3B0aW9uKGN0eCwgXFxcImluZGV4XFxcIiwgc3RyX29uX29mZihvZnMtXFx1MDAzZWNvbmZpZy5pbmRleCkpO1xcbiBcXHRpZiAob2ZzLVxcdTAwM2Vjb25maWcudXVpZCAhPSBvdmxfdXVpZF9kZWYoKSlcXG4tXFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiLHV1aWQ9JXNcXFwiLCBvdmxfdXVpZF9tb2RlKFxcdTAwMjZvZnMtXFx1MDAzZWNvbmZpZykpO1xcbitcXHRcXHRzYl9hZGRfb3B0aW9uKGN0eCwgXFxcInV1aWRcXFwiLCBvdmxfdXVpZF9tb2RlKFxcdTAwMjZvZnMtXFx1MDAzZWNvbmZpZykpO1xcbiBcXHRpZiAob2ZzLVxcdTAwM2Vjb25maWcubmZzX2V4cG9ydCAhPSBvdmxfbmZzX2V4cG9ydF9kZWYpXFxuLVxcdFxcdHNlcV9wcmludGYobSwgXFxcIixuZnNfZXhwb3J0PSVzXFxcIixcXG4tXFx0XFx0XFx0ICAgc3RyX29uX29mZihvZnMtXFx1MDAzZWNvbmZpZy5uZnNfZXhwb3J0KSk7XFxuK1xcdFxcdHNiX2FkZF9vcHRpb24oY3R4LCBcXFwibmZzX2V4cG9ydFxcXCIsIHN0cl9vbl9vZmYob2ZzLVxcdTAwM2Vjb25maWcubmZzX2V4cG9ydCkpO1xcbiBcXHRpZiAob2ZzLVxcdTAwM2Vjb25maWcueGlubyAhPSBvdmxfeGlub19kZWYoKSBcXHUwMDI2XFx1MDAyNiAhb3ZsX3NhbWVfZnMob2ZzKSlcXG4tXFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiLHhpbm89JXNcXFwiLCBvdmxfeGlub19tb2RlKFxcdTAwMjZvZnMtXFx1MDAzZWNvbmZpZykpO1xcbitcXHRcXHRzYl9hZGRfb3B0aW9uKGN0eCwgXFxcInhpbm9cXFwiLCBvdmxfeGlub19tb2RlKFxcdTAwMjZvZnMtXFx1MDAzZWNvbmZpZykpO1xcbiBcXHRpZiAob2ZzLVxcdTAwM2Vjb25maWcubWV0YWNvcHkgIT0gb3ZsX21ldGFjb3B5X2RlZilcXG4tXFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiLG1ldGFjb3B5PSVzXFxcIiwgc3RyX29uX29mZihvZnMtXFx1MDAzZWNvbmZpZy5tZXRhY29weSkpO1xcbitcXHRcXHRzYl9hZGRfb3B0aW9uKGN0eCwgXFxcIm1ldGFjb3B5XFxcIiwgc3RyX29uX29mZihvZnMtXFx1MDAzZWNvbmZpZy5tZXRhY29weSkpO1xcbiBcXHRpZiAob2ZzLVxcdTAwM2Vjb25maWcuZnN5bmNfbW9kZSAhPSBvdmxfZnN5bmNfbW9kZV9kZWYoKSlcXG4tXFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiLGZzeW5jPSVzXFxcIiwgb3ZsX2ZzeW5jX21vZGUoXFx1MDAyNm9mcy1cXHUwMDNlY29uZmlnKSk7XFxuK1xcdFxcdHNiX2FkZF9vcHRpb24oY3R4LCBcXFwiZnN5bmNcXFwiLCBvdmxfZnN5bmNfbW9kZShcXHUwMDI2b2ZzLVxcdTAwM2Vjb25maWcpKTtcXG4gXFx0aWYgKG9mcy1cXHUwMDNlY29uZmlnLnVzZXJ4YXR0cilcXG4tXFx0XFx0c2VxX3B1dHMobSwgXFxcIix1c2VyeGF0dHJcXFwiKTtcXG4rXFx0XFx0c2JfYWRkX29wdGlvbihjdHgsIFxcXCJ1c2VyeGF0dHJcXFwiLCBOVUxMKTtcXG4gXFx0aWYgKG9mcy1cXHUwMDNlY29uZmlnLnZlcml0eV9tb2RlICE9IG92bF92ZXJpdHlfbW9kZV9kZWYoKSlcXG4tXFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiLHZlcml0eT0lc1xcXCIsXFxuLVxcdFxcdFxcdCAgIG92bF92ZXJpdHlfbW9kZShcXHUwMDI2b2ZzLVxcdTAwM2Vjb25maWcpKTtcXG4rXFx0XFx0c2JfYWRkX29wdGlvbihjdHgsIFxcXCJ2ZXJpdHlcXFwiLCBvdmxfdmVyaXR5X21vZGUoXFx1MDAyNm9mcy1cXHUwMDNlY29uZmlnKSk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2ZzL292ZXJsYXlmcy9wYXJhbXMuaCBiL2ZzL292ZXJsYXlmcy9wYXJhbXMuaFxcbmluZGV4IGZmZDUzY2RkODQ4MjdjLi4yY2Y5YzRmMTg4YTljYiAxMDA2NDRcXG4tLS0gYS9mcy9vdmVybGF5ZnMvcGFyYW1zLmhcXG4rKysgYi9mcy9vdmVybGF5ZnMvcGFyYW1zLmhcXG5AQCAtNDAsNSArNDAsNSBAQCBpbnQgb3ZsX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xcbiB2b2lkIG92bF9mcmVlX2ZzKHN0cnVjdCBvdmxfZnMgKm9mcyk7XFxuIGludCBvdmxfZnNfcGFyYW1zX3ZlcmlmeShjb25zdCBzdHJ1Y3Qgb3ZsX2ZzX2NvbnRleHQgKmN0eCxcXG4gXFx0XFx0XFx0IHN0cnVjdCBvdmxfY29uZmlnICpjb25maWcpO1xcbi1pbnQgb3ZsX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XFxuK2ludCBvdmxfZ2V0X29wdGlvbnMoc3RydWN0IHNiX29wdF9jdHggKmN0eCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcXG4gY29uc3QgY2hhciAqb3ZsX3hpbm9fbW9kZShzdHJ1Y3Qgb3ZsX2NvbmZpZyAqY29uZmlnKTtcXG5kaWZmIC0tZ2l0IGEvZnMvb3ZlcmxheWZzL3N1cGVyLmMgYi9mcy9vdmVybGF5ZnMvc3VwZXIuY1xcbmluZGV4IDYwZjBiN2NlZWYwYTZkLi40YjU3YjJkYjA4NTIyNSAxMDA2NDRcXG4tLS0gYS9mcy9vdmVybGF5ZnMvc3VwZXIuY1xcbisrKyBiL2ZzL292ZXJsYXlmcy9zdXBlci5jXFxuQEAgLTMwMiw3ICszMDIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgb3ZsX3N1cGVyX29wZXJhdGlvbnMgPSB7XFxuIFxcdC5wdXRfc3VwZXJcXHQ9IG92bF9wdXRfc3VwZXIsXFxuIFxcdC5zeW5jX2ZzXFx0PSBvdmxfc3luY19mcyxcXG4gXFx0LnN0YXRmc1xcdFxcdD0gb3ZsX3N0YXRmcyxcXG4tXFx0LnNob3dfb3B0aW9uc1xcdD0gb3ZsX3Nob3dfb3B0aW9ucyxcXG4rXFx0LmdldF9vcHRpb25zXFx0PSBvdmxfZ2V0X29wdGlvbnMsXFxuIH07XFxuIFxcbiAjZGVmaW5lIE9WTF9XT1JLRElSX05BTUUgXFxcIndvcmtcXFwiXFxuQEAgLTUyOSw2ICs1MjksNyBAQCBzdGF0aWMgaW50IG92bF9nZXRfdXBwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IG92bF9mcyAqb2ZzLFxcbiBcXG4gXFx0LyogRG9uJ3QgaW5oZXJpdCBhdGltZSBmbGFncyAqL1xcbiBcXHR1cHBlcl9tbnQtXFx1MDAzZW1udF9mbGFncyBcXHUwMDI2PSB+KE1OVF9OT0FUSU1FIHwgTU5UX05PRElSQVRJTUUgfCBNTlRfUkVMQVRJTUUpO1xcbitcXHR1cHBlcl9tbnQtXFx1MDAzZW1udF9mbGFncyB8PSBNTlRfQ0xPTkFCTEU7XFxuIFxcdHVwcGVyX2xheWVyLVxcdTAwM2VtbnQgPSB1cHBlcl9tbnQ7XFxuIFxcdHVwcGVyX2xheWVyLVxcdTAwM2VpZHggPSAwO1xcbiBcXHR1cHBlcl9sYXllci1cXHUwMDNlZnNpZCA9IDA7XFxuQEAgLTExMDUsNyArMTEwNiw3IEBAIHN0YXRpYyBpbnQgb3ZsX2dldF9sYXllcnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IG92bF9mcyAqb2ZzLFxcbiBcXHRcXHQgKiBNYWtlIGxvd2VyIGxheWVycyBSL08uICBUaGF0IHdheSBmY2htb2QvZmNob3duIG9uIGxvd2VyIGZpbGVcXG4gXFx0XFx0ICogd2lsbCBmYWlsIGluc3RlYWQgb2YgbW9kaWZ5aW5nIGxvd2VyIGZzLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0bW50LVxcdTAwM2VtbnRfZmxhZ3MgfD0gTU5UX1JFQURPTkxZIHwgTU5UX05PQVRJTUU7XFxuK1xcdFxcdG1udC1cXHUwMDNlbW50X2ZsYWdzIHw9IE1OVF9SRUFET05MWSB8IE1OVF9OT0FUSU1FIHwgTU5UX0NMT05BQkxFO1xcbiBcXG4gXFx0XFx0bGF5ZXJzW29mcy1cXHUwMDNlbnVtbGF5ZXJdLnRyYXAgPSB0cmFwO1xcbiBcXHRcXHRsYXllcnNbb2ZzLVxcdTAwM2VudW1sYXllcl0ubW50ID0gbW50O1xcbmRpZmYgLS1naXQgYS9mcy9waWRmcy5jIGIvZnMvcGlkZnMuY1xcbmluZGV4IGFhYTYwOWRkYWIwNDQzLi4zODQzYWNkNjU5NGRlMCAxMDA2NDRcXG4tLS0gYS9mcy9waWRmcy5jXFxuKysrIGIvZnMvcGlkZnMuY1xcbkBAIC04NDAsNyArODQwLDcgQEAgc3RhdGljIGNoYXIgKnBpZGZzX2RuYW1lKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqYnVmZmVyLCBpbnQgYnVmbGVuKVxcbiBcXHRyZXR1cm4gZHluYW1pY19kbmFtZShidWZmZXIsIGJ1ZmxlbiwgXFxcImFub25faW5vZGU6W3BpZGZkXVxcXCIpO1xcbiB9XFxuIFxcbi1jb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgcGlkZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7XFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgcGlkZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7XFxuIFxcdC5kX2RuYW1lXFx0PSBwaWRmc19kbmFtZSxcXG4gXFx0LmRfcHJ1bmVcXHQ9IHN0YXNoZWRfZGVudHJ5X3BydW5lLFxcbiB9O1xcbkBAIC0xMTUxLDYgKzExNTEsOCBAQCB2b2lkIF9faW5pdCBwaWRmc19pbml0KHZvaWQpXFxuIFxcdGlmIChJU19FUlIocGlkZnNfbW50KSlcXG4gXFx0XFx0cGFuaWMoXFxcIkZhaWxlZCB0byBtb3VudCBwaWRmcyBwc2V1ZG8gZmlsZXN5c3RlbVxcXCIpO1xcbiBcXG4rXFx0cGlkZnNfbW50LVxcdTAwM2VtbnRfZmxhZ3MgfD0gTU5UX0NMT05BQkxFO1xcbitcXG4gXFx0cGlkZnNfcm9vdF9wYXRoLm1udCA9IHBpZGZzX21udDtcXG4gXFx0cGlkZnNfcm9vdF9wYXRoLmRlbnRyeSA9IHBpZGZzX21udC1cXHUwMDNlbW50X3Jvb3Q7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZnMvcHJvY19uYW1lc3BhY2UuYyBiL2ZzL3Byb2NfbmFtZXNwYWNlLmNcXG5pbmRleCA1YzU1NWRiNjhhYTIxMi4uOTRiYzRjOWFhNDNmMTYgMTAwNjQ0XFxuLS0tIGEvZnMvcHJvY19uYW1lc3BhY2UuY1xcbisrKyBiL2ZzL3Byb2NfbmFtZXNwYWNlLmNcXG5AQCAtOTgsMjEgKzk4LDI3IEBAIHN0YXRpYyB2b2lkIHNob3dfdHlwZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIGludCBzaG93X2Rldm5hbWUoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgdmZzbW91bnQgKm1udClcXG4re1xcbitcXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gbW50LVxcdTAwM2VtbnRfc2I7XFxuK1xcbitcXHRpZiAoc2ItXFx1MDAzZXNfb3AtXFx1MDAzZXNob3dfZGV2bmFtZSlcXG4rXFx0XFx0cmV0dXJuIHNiLVxcdTAwM2VzX29wLVxcdTAwM2VzaG93X2Rldm5hbWUobSwgbW50LVxcdTAwM2VtbnRfcm9vdCk7XFxuK1xcbitcXHRtYW5nbGUobSwgc2ItXFx1MDAzZXNfZGV2bmFtZSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHNob3dfdmZzbW50KHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHZmc21vdW50ICptbnQpXFxuIHtcXG4gXFx0c3RydWN0IHByb2NfbW91bnRzICpwID0gbS1cXHUwMDNlcHJpdmF0ZTtcXG4tXFx0c3RydWN0IG1vdW50ICpyID0gcmVhbF9tb3VudChtbnQpO1xcbiBcXHRzdHJ1Y3QgcGF0aCBtbnRfcGF0aCA9IHsgLmRlbnRyeSA9IG1udC1cXHUwMDNlbW50X3Jvb3QsIC5tbnQgPSBtbnQgfTtcXG4gXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IG1udF9wYXRoLmRlbnRyeS1cXHUwMDNlZF9zYjtcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdGlmIChzYi1cXHUwMDNlc19vcC1cXHUwMDNlc2hvd19kZXZuYW1lKSB7XFxuLVxcdFxcdGVyciA9IHNiLVxcdTAwM2VzX29wLVxcdTAwM2VzaG93X2Rldm5hbWUobSwgbW50X3BhdGguZGVudHJ5KTtcXG4tXFx0XFx0aWYgKGVycilcXG4tXFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdG1hbmdsZShtLCByLVxcdTAwM2VtbnRfZGV2bmFtZSk7XFxuLVxcdH1cXG4rXFx0ZXJyID0gc2hvd19kZXZuYW1lKG0sIG1udCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbiBcXHRzZXFfcHV0YyhtLCAnICcpO1xcbiBcXHQvKiBtb3VudHBvaW50cyBvdXRzaWRlIG9mIGNocm9vdCBqYWlsIHdpbGwgZ2l2ZSBTRVFfU0tJUCBvbiB0aGlzICovXFxuIFxcdGVyciA9IHNlcV9wYXRoX3Jvb3QobSwgXFx1MDAyNm1udF9wYXRoLCBcXHUwMDI2cC1cXHUwMDNlcm9vdCwgXFxcIiBcXFxcdFxcXFxuXFxcXFxcXFxcXFwiKTtcXG5AQCAtMTI1LDggKzEzMSw3IEBAIHN0YXRpYyBpbnQgc2hvd192ZnNtbnQoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgdmZzbW91bnQgKm1udClcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdHNob3dfdmZzbW50X29wdHMobSwgbW50KTtcXG4tXFx0aWYgKHNiLVxcdTAwM2VzX29wLVxcdTAwM2VzaG93X29wdGlvbnMpXFxuLVxcdFxcdGVyciA9IHNiLVxcdTAwM2VzX29wLVxcdTAwM2VzaG93X29wdGlvbnMobSwgbW50X3BhdGguZGVudHJ5KTtcXG4rXFx0ZXJyID0gbW50X3Nob3dfb3B0aW9ucyhtLCBtbnQpO1xcbiBcXHRzZXFfcHV0cyhtLCBcXFwiIDAgMFxcXFxuXFxcIik7XFxuIG91dDpcXG4gXFx0cmV0dXJuIGVycjtcXG5AQCAtMTcyLDE5ICsxNzcsMTQgQEAgc3RhdGljIGludCBzaG93X21vdW50aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB2ZnNtb3VudCAqbW50KVxcbiBcXHRzZXFfcHV0cyhtLCBcXFwiIC0gXFxcIik7XFxuIFxcdHNob3dfdHlwZShtLCBzYik7XFxuIFxcdHNlcV9wdXRjKG0sICcgJyk7XFxuLVxcdGlmIChzYi1cXHUwMDNlc19vcC1cXHUwMDNlc2hvd19kZXZuYW1lKSB7XFxuLVxcdFxcdGVyciA9IHNiLVxcdTAwM2VzX29wLVxcdTAwM2VzaG93X2Rldm5hbWUobSwgbW50LVxcdTAwM2VtbnRfcm9vdCk7XFxuLVxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdGdvdG8gb3V0O1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRtYW5nbGUobSwgci1cXHUwMDNlbW50X2Rldm5hbWUpO1xcbi1cXHR9XFxuK1xcdGVyciA9IHNob3dfZGV2bmFtZShtLCBtbnQpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIG91dDtcXG4gXFx0c2VxX3B1dHMobSwgc2JfcmRvbmx5KHNiKSA/IFxcXCIgcm9cXFwiIDogXFxcIiByd1xcXCIpO1xcbiBcXHRlcnIgPSBzaG93X3NiX29wdHMobSwgc2IpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4tXFx0aWYgKHNiLVxcdTAwM2VzX29wLVxcdTAwM2VzaG93X29wdGlvbnMpXFxuLVxcdFxcdGVyciA9IHNiLVxcdTAwM2VzX29wLVxcdTAwM2VzaG93X29wdGlvbnMobSwgbW50LVxcdTAwM2VtbnRfcm9vdCk7XFxuK1xcdGVyciA9IG1udF9zaG93X29wdGlvbnMobSwgbW50KTtcXG4gXFx0c2VxX3B1dGMobSwgJ1xcXFxuJyk7XFxuIG91dDpcXG4gXFx0cmV0dXJuIGVycjtcXG5AQCAtMTkzLDIxICsxOTMsMTUgQEAgc3RhdGljIGludCBzaG93X21vdW50aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB2ZnNtb3VudCAqbW50KVxcbiBzdGF0aWMgaW50IHNob3dfdmZzc3RhdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB2ZnNtb3VudCAqbW50KVxcbiB7XFxuIFxcdHN0cnVjdCBwcm9jX21vdW50cyAqcCA9IG0tXFx1MDAzZXByaXZhdGU7XFxuLVxcdHN0cnVjdCBtb3VudCAqciA9IHJlYWxfbW91bnQobW50KTtcXG4gXFx0c3RydWN0IHBhdGggbW50X3BhdGggPSB7IC5kZW50cnkgPSBtbnQtXFx1MDAzZW1udF9yb290LCAubW50ID0gbW50IH07XFxuIFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBtbnRfcGF0aC5kZW50cnktXFx1MDAzZWRfc2I7XFxuIFxcdGludCBlcnI7XFxuIFxcbiBcXHQvKiBkZXZpY2UgKi9cXG4gXFx0c2VxX3B1dHMobSwgXFxcImRldmljZSBcXFwiKTtcXG4tXFx0aWYgKHNiLVxcdTAwM2VzX29wLVxcdTAwM2VzaG93X2Rldm5hbWUpIHtcXG4tXFx0XFx0ZXJyID0gc2ItXFx1MDAzZXNfb3AtXFx1MDAzZXNob3dfZGV2bmFtZShtLCBtbnRfcGF0aC5kZW50cnkpO1xcbi1cXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0bWFuZ2xlKG0sIHItXFx1MDAzZW1udF9kZXZuYW1lKTtcXG4tXFx0fVxcbi1cXG4rXFx0ZXJyID0gc2hvd19kZXZuYW1lKG0sIG1udCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbiBcXHQvKiBtb3VudCBwb2ludCAqL1xcbiBcXHRzZXFfcHV0cyhtLCBcXFwiIG1vdW50ZWQgb24gXFxcIik7XFxuIFxcdC8qIG1vdW50cG9pbnRzIG91dHNpZGUgb2YgY2hyb290IGphaWwgd2lsbCBnaXZlIFNFUV9TS0lQIG9uIHRoaXMgKi9cXG5kaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmNcXG5pbmRleCBhOGZkNjExMzZhYWZlNS4uZTU1MzFjYjg4Zjg5MTcgMTAwNjQ0XFxuLS0tIGEvZnMvc3VwZXIuY1xcbisrKyBiL2ZzL3N1cGVyLmNcXG5AQCAtMjgwLDYgKzI4MCw3IEBAIHN0YXRpYyB2b2lkIGRlc3Ryb3lfc3VwZXJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdHNlY3VyaXR5X3NiX2ZyZWUocyk7XFxuIFxcdHB1dF91c2VyX25zKHMtXFx1MDAzZXNfdXNlcl9ucyk7XFxuIFxcdGtmcmVlKHMtXFx1MDAzZXNfc3VidHlwZSk7XFxuK1xcdGtmcmVlX2NvbnN0KHMtXFx1MDAzZXNfZGV2bmFtZSk7XFxuIFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgU0JfRlJFRVpFX0xFVkVMUzsgaSsrKVxcbiBcXHRcXHRwZXJjcHVfZnJlZV9yd3NlbShcXHUwMDI2cy1cXHUwMDNlc193cml0ZXJzLnJ3X3NlbVtpXSk7XFxuIFxcdGtmcmVlKHMpO1xcbkBAIC0zMTUsNyArMzE2LDcgQEAgc3RhdGljIHZvaWQgZGVzdHJveV91bnVzZWRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzKVxcbiAgKlxcdHJldHVybnMgYSBwb2ludGVyIG5ldyBzdXBlcmJsb2NrIG9yICVOVUxMIGlmIGFsbG9jYXRpb24gaGFkIGZhaWxlZC5cXG4gICovXFxuIHN0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmFsbG9jX3N1cGVyKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlLCBpbnQgZmxhZ3MsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMpXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsIGNvbnN0IGNoYXIgKm5hbWUpXFxuIHtcXG4gXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzID0ga3phbGxvY19vYmooc3RydWN0IHN1cGVyX2Jsb2NrKTtcXG4gXFx0c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGRlZmF1bHRfb3A7XFxuQEAgLTM0NCw2ICszNDUsMTMgQEAgc3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqYWxsb2Nfc3VwZXIoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsIGludCBmbGFncyxcXG4gXFx0ICovXFxuIFxcdGRvd25fd3JpdGVfbmVzdGVkKFxcdTAwMjZzLVxcdTAwM2VzX3Vtb3VudCwgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xcbiBcXG4rXFx0aWYgKG5hbWUpXFxuK1xcdFxcdHMtXFx1MDAzZXNfZGV2bmFtZSA9IGtzdHJkdXBfY29uc3QobmFtZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRzLVxcdTAwM2VzX2Rldm5hbWUgPSBcXFwibm9uZVxcXCI7XFxuK1xcdGlmICghcy1cXHUwMDNlc19kZXZuYW1lKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcbiBcXHRpZiAoc2VjdXJpdHlfc2JfYWxsb2MocykpXFxuIFxcdFxcdGdvdG8gZmFpbDtcXG4gXFxuQEAgLTc2Myw3ICs3NzEsNyBAQCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNnZXRfZmMoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxcbiBcXHR9XFxuIFxcdGlmICghcykge1xcbiBcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2c2JfbG9jayk7XFxuLVxcdFxcdHMgPSBhbGxvY19zdXBlcihmYy1cXHUwMDNlZnNfdHlwZSwgZmMtXFx1MDAzZXNiX2ZsYWdzLCB1c2VyX25zKTtcXG4rXFx0XFx0cyA9IGFsbG9jX3N1cGVyKGZjLVxcdTAwM2Vmc190eXBlLCBmYy1cXHUwMDNlc2JfZmxhZ3MsIHVzZXJfbnMsIGZjLVxcdTAwM2Vzb3VyY2UpO1xcbiBcXHRcXHRpZiAoIXMpXFxuIFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbiBcXHRcXHRnb3RvIHJldHJ5O1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZjbnRsLmggYi9pbmNsdWRlL2xpbnV4L2ZjbnRsLmhcXG5pbmRleCA2YWQ2YjllN2EyMjZhZi4uZjk0MjQxMWM4ZWQ3ZGUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9mY250bC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9mY250bC5oXFxuQEAgLTExLDcgKzExLDcgQEBcXG4gXFx0KE9fUkRPTkxZIHwgT19XUk9OTFkgfCBPX1JEV1IgfCBPX0NSRUFUIHwgT19FWENMIHwgT19OT0NUVFkgfCBPX1RSVU5DIHwgXFxcXFxcbiBcXHQgT19BUFBFTkQgfCBPX05ERUxBWSB8IE9fTk9OQkxPQ0sgfCBfX09fU1lOQyB8IE9fRFNZTkMgfCBcXFxcXFxuIFxcdCBGQVNZTkNcXHR8IE9fRElSRUNUIHwgT19MQVJHRUZJTEUgfCBPX0RJUkVDVE9SWSB8IE9fTk9GT0xMT1cgfCBcXFxcXFxuLVxcdCBPX05PQVRJTUUgfCBPX0NMT0VYRUMgfCBPX1BBVEggfCBfX09fVE1QRklMRSB8IE9fRU1QVFlQQVRIKVxcbitcXHQgT19OT0FUSU1FIHwgT19DTE9FWEVDIHwgT19QQVRIIHwgX19PX1RNUEZJTEUgfCBPX0VNUFRZUEFUSCB8IE9fQUxUKVxcbiBcXG4gLyogTGlzdCBvZiBhbGwgdmFsaWQgZmxhZ3MgZm9yIG9wZW5hdDIoMikncyBob3ctXFx1MDAzZWZsYWdzIGFyZ3VtZW50LiAqL1xcbiAjZGVmaW5lIFZBTElEX09QRU5BVDJfRkxBR1NcXHQoVkFMSURfT1BFTl9GTEFHUyB8IE9QRU5BVDJfUkVHVUxBUilcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy9zdXBlci5oIGIvaW5jbHVkZS9saW51eC9mcy9zdXBlci5oXFxuaW5kZXggNDA1NjEyNjc4MTE1MWUuLjZmMGQ3Nzg5NDBmOTA0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZnMvc3VwZXIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZnMvc3VwZXIuaFxcbkBAIC0yMzcsNCArMjM3LDE0IEBAIGludCB0aGF3X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc3VwZXIsIGVudW0gZnJlZXplX2hvbGRlciB3aG8sXFxuIFxcbiBpbnQgc2JfaW5pdF9kaW9fZG9uZV93cShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcXG4gXFxuK3N0cnVjdCBzYl9vcHRfY3R4IHtcXG4rXFx0dm9pZCAoKmFjdG9yKShzdHJ1Y3Qgc2Jfb3B0X2N0eCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSxcXG4rXFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpO1xcbitcXHR2b2lkICpkYXRhO1xcbit9O1xcbitcXG4rdm9pZCBzYl9hZGRfb3B0aW9uKHN0cnVjdCBzYl9vcHRfY3R4ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKTtcXG4rdm9pZCBzYl9hZGRfb3B0aW9uX3BhdGgoc3RydWN0IHNiX29wdF9jdHggKmN0eCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUsXFxuK1xcdFxcdFxcdGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKTtcXG4rXFxuICNlbmRpZiAvKiBfTElOVVhfRlNfU1VQRVJfSCAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyX3R5cGVzLmhcXG5pbmRleCBlZjc5NDFlOWRjNzlhYy4uZjIwNTc1OWFmMWE2MzMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9mcy9zdXBlcl90eXBlcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9mcy9zdXBlcl90eXBlcy5oXFxuQEAgLTM2LDYgKzM2LDcgQEAgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3Q7XFxuIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbDtcXG4gc3RydWN0IHhhdHRyX2hhbmRsZXI7XFxuIHN0cnVjdCBmc2Vycm9yX2V2ZW50O1xcbitzdHJ1Y3Qgc2Jfb3B0X2N0eDtcXG4gXFxuIGV4dGVybiBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmJsb2NrZGV2X3N1cGVyYmxvY2s7XFxuIFxcbkBAIC05OSw2ICsxMDAsNyBAQCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyB7XFxuIFxcdGludCAoKnN0YXRmcykoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqa3N0YXRmcyk7XFxuIFxcdHZvaWQgKCp1bW91bnRfYmVnaW4pKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xcbiBcXG4rXFx0aW50ICgqZ2V0X29wdGlvbnMpKHN0cnVjdCBzYl9vcHRfY3R4ICpjdHgsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XFxuIFxcdGludCAoKnNob3dfb3B0aW9ucykoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XFxuIFxcdGludCAoKnNob3dfZGV2bmFtZSkoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XFxuIFxcdGludCAoKnNob3dfcGF0aCkoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XFxuQEAgLTI4Myw2ICsyODUsOCBAQCBzdHJ1Y3Qgc3VwZXJfYmxvY2sge1xcbiBcXHQgKi9cXG4gXFx0YXRvbWljX3RcXHRcXHRcXHRcXHRzX2lzd19ucl9pbl9mbGlnaHQ7XFxuICNlbmRpZlxcbitcXHQvKiBOYW1lIG9mIGRldmljZSBlLmcuIC9kZXYvZHNrL2hkYTEgKi9cXG4rXFx0Y29uc3QgY2hhciBcXHRcXHRcXHRcXHQqc19kZXZuYW1lO1xcbiB9IF9fcmFuZG9taXplX2xheW91dDtcXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW91bnQuaCBiL2luY2x1ZGUvbGludXgvbW91bnQuaFxcbmluZGV4IGFjZmU3ZWY4NmExYjNmLi5kMDcxODU1Y2E0ZWRlYyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21vdW50LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21vdW50LmhcXG5AQCAtNDQsNiArNDQsNyBAQCBlbnVtIG1vdW50X2ZsYWdzIHtcXG4gXFx0TU5UX0xPQ0tFRFxcdFxcdD0gMHg4MDAwMDAsXFxuIFxcdE1OVF9ET09NRURcXHRcXHQ9IDB4MTAwMDAwMCxcXG4gXFx0TU5UX1NZTkNfVU1PVU5UXFx0XFx0PSAweDIwMDAwMDAsXFxuK1xcdE1OVF9DTE9OQUJMRVxcdFxcdD0gMHg0MDAwMDAwLFxcbiBcXHRNTlRfVU1PVU5UXFx0XFx0PSAweDgwMDAwMDAsXFxuIFxcbiBcXHRNTlRfVVNFUl9TRVRUQUJMRV9NQVNLICA9IE1OVF9OT1NVSUQgfCBNTlRfTk9ERVYgfCBNTlRfTk9FWEVDXFxuQEAgLTUyLDcgKzUzLDcgQEAgZW51bSBtb3VudF9mbGFncyB7XFxuIFxcdE1OVF9BVElNRV9NQVNLID0gTU5UX05PQVRJTUUgfCBNTlRfTk9ESVJBVElNRSB8IE1OVF9SRUxBVElNRSxcXG4gXFxuIFxcdE1OVF9JTlRFUk5BTF9GTEFHUyA9IE1OVF9JTlRFUk5BTCB8IE1OVF9ET09NRUQgfFxcbi1cXHRcXHRcXHQgICAgIE1OVF9TWU5DX1VNT1VOVCB8IE1OVF9MT0NLRURcXG4rXFx0XFx0XFx0ICAgICBNTlRfU1lOQ19VTU9VTlQgfCBNTlRfTE9DS0VEIHwgTU5UX0NMT05BQkxFXFxuIH07XFxuIFxcbiBzdHJ1Y3QgdmZzbW91bnQge1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25hbWVpLmggYi9pbmNsdWRlL2xpbnV4L25hbWVpLmhcXG5pbmRleCBlYmU2ZTI5ZjdlOTNiYS4uYzIxZGM2NTM2OTAwY2YgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9uYW1laS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9uYW1laS5oXFxuQEAgLTI1LDcgKzI1LDggQEAgZW51bSB7IE1BWF9ORVNURURfTElOS1MgPSA4IH07XFxuICNkZWZpbmUgTE9PS1VQX1JDVVxcdFxcdEJJVCg4KVxcdC8qIFJDVSBwYXRod2FsayBtb2RlOyBzZW1pLWludGVybmFsICovXFxuICNkZWZpbmUgTE9PS1VQX0NBQ0hFRFxcdFxcdEJJVCg5KSAvKiBPbmx5IGRvIGNhY2hlZCBsb29rdXAgKi9cXG4gI2RlZmluZSBMT09LVVBfUEFSRU5UXFx0XFx0QklUKDEwKVxcdC8qIExvb2tpbmcgdXAgZmluYWwgcGFyZW50IGluIHBhdGggKi9cXG4tLyogNSBzcGFyZSBiaXRzIGZvciBwYXRod2FsayAqL1xcbisjZGVmaW5lIExPT0tVUF9BTFRcXHRcXHRCSVQoMTEpIC8qIExvb2sgdXAgaW4gYWx0ZXJuYXRpdmUgbmFtZXNwYWNlICovXFxuKy8qIDQgc3BhcmUgYml0cyBmb3IgcGF0aHdhbGsgKi9cXG4gXFxuIC8qIFRoZXNlIHRlbGwgZmlsZXN5c3RlbSBtZXRob2RzIHRoYXQgd2UgYXJlIGRlYWxpbmcgd2l0aCB0aGUgZmluYWwgY29tcG9uZW50Li4uICovXFxuICNkZWZpbmUgTE9PS1VQX09QRU5cXHRcXHRCSVQoMTYpXFx0LyogLi4uIGluIG9wZW4gKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waWRmcy5oIGIvaW5jbHVkZS9saW51eC9waWRmcy5oXFxuaW5kZXggMGFiZjdkYTlhYjIzNmUuLmZhYjZmNDhmZjIwMzM0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGlkZnMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGlkZnMuaFxcbkBAIC0xNSw3ICsxNSw2IEBAIHZvaWQgcGlkZnNfZXhpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7XFxuICNpZmRlZiBDT05GSUdfQ09SRURVTVBcXG4gdm9pZCBwaWRmc19jb3JlZHVtcChjb25zdCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKTtcXG4gI2VuZGlmXFxuLWV4dGVybiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgcGlkZnNfZGVudHJ5X29wZXJhdGlvbnM7XFxuIGludCBwaWRmc19yZWdpc3Rlcl9waWRfZ2ZwKHN0cnVjdCBwaWQgKnBpZCwgZ2ZwX3QgZ2ZwKTtcXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvZmNudGwuaCBiL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9mY250bC5oXFxuaW5kZXggODgzY2ZkN2RlMmVmZmEuLjcwZGJiYWMxYzUyMDc4IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9mY250bC5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL2ZjbnRsLmhcXG5AQCAtOTYsNiArOTYsMTAgQEBcXG4gI2RlZmluZSBPX0VNUFRZUEFUSFxcdCgxIFxcdTAwM2NcXHUwMDNjIDI2KVxcdC8qIGFsbG93IGVtcHR5IHBhdGggKi9cXG4gI2VuZGlmXFxuIFxcbisjaWZuZGVmIE9fQUxUXFxuKyNkZWZpbmUgT19BTFRcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyAyNylcXHQvKiBPcGVuIGluIGFsdGVybmF0aXZlIG5hbWVzcGFjZSAqL1xcbisjZW5kaWZcXG4rXFxuIC8qIGEgaG9ycmlkIGtsdWRnZSB0cnlpbmcgdG8gbWFrZSBzdXJlIHRoYXQgdGhpcyB3aWxsIGZhaWwgb24gb2xkIGtlcm5lbHMgKi9cXG4gI2RlZmluZSBPX1RNUEZJTEUgKF9fT19UTVBGSUxFIHwgT19ESVJFQ1RPUlkpXFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbW91bnQuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9tb3VudC5oXFxuaW5kZXggMjIwNDcwOGRiZjdhNTguLjZlNzk0ZDIxNGNmOTgzIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9tb3VudC5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L21vdW50LmhcXG5AQCAtNjMsNiArNjMsNyBAQFxcbiAgKi9cXG4gI2RlZmluZSBPUEVOX1RSRUVfQ0xPTkVcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyAwKVxcdC8qIENsb25lIHRoZSB0YXJnZXQgdHJlZSBhbmQgYXR0YWNoIHRoZSBjbG9uZSAqL1xcbiAjZGVmaW5lIE9QRU5fVFJFRV9OQU1FU1BBQ0VcXHQoMSBcXHUwMDNjXFx1MDAzYyAxKVxcdC8qIENsb25lIHRoZSB0YXJnZXQgdHJlZSBpbnRvIGEgbmV3IG1vdW50IG5hbWVzcGFjZSAqL1xcbisjZGVmaW5lIE9QRU5fVFJFRV9BTFRcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyAyKVxcdC8qIExvb2t1cCBpbiBhbHRlcm5hdGl2ZSBuYW1lc3BhY2UgKi9cXG4gI2RlZmluZSBPUEVOX1RSRUVfQ0xPRVhFQ1xcdE9fQ0xPRVhFQ1xcdC8qIENsb3NlIHRoZSBmaWxlIG9uIGV4ZWN2ZSgpICovXFxuIFxcbiAvKlxcbmRpZmYgLS1naXQgYS9zY3JpcHRzL2dkYi9saW51eC9wcm9jLnB5IGIvc2NyaXB0cy9nZGIvbGludXgvcHJvYy5weVxcbmluZGV4IDY1ZGQxYmQxMjk2NDFkLi41YWFmMmRkOGRiMDVhMSAxMDA2NDRcXG4tLS0gYS9zY3JpcHRzL2dkYi9saW51eC9wcm9jLnB5XFxuKysrIGIvc2NyaXB0cy9nZGIvbGludXgvcHJvYy5weVxcbkBAIC0xNzQsOSArMTc0LDYgQEAgdmFsdWVzIG9mIHRoYXQgcHJvY2VzcyBuYW1lc3BhY2VcXFwiXFxcIlxcXCJcXG4gICAgICAgICAgICAgICAgICAgXFxcIm1vdW50XFxcIiwgXFxcInN1cGVyX2Jsb2NrXFxcIiwgXFxcImRldm5hbWVcXFwiLCBcXFwicGF0aG5hbWVcXFwiLCBcXFwiZnN0eXBlXFxcIikpXFxuIFxcbiAgICAgICAgIGZvciBtbnQgaW4gcmJ0cmVlLnJiX2lub3JkZXJfZm9yX2VhY2hfZW50cnkobmFtZXNwYWNlWydtb3VudHMnXSwgbW91bnRfcHRyX3R5cGUsIFxcXCJtbnRfbm9kZVxcXCIpOlxcbi0gICAgICAgICAgICBkZXZuYW1lID0gbW50WydtbnRfZGV2bmFtZSddLnN0cmluZygpXFxuLSAgICAgICAgICAgIGRldm5hbWUgPSBkZXZuYW1lIGlmIGRldm5hbWUgZWxzZSBcXFwibm9uZVxcXCJcXG4tXFxuICAgICAgICAgICAgIHBhdGhuYW1lID0gXFxcIlxcXCJcXG4gICAgICAgICAgICAgcGFyZW50ID0gbW50XFxuICAgICAgICAgICAgIHdoaWxlIFRydWU6XFxuQEAgLTE5MCw2ICsxODcsOCBAQCB2YWx1ZXMgb2YgdGhhdCBwcm9jZXNzIG5hbWVzcGFjZVxcXCJcXFwiXFxcIlxcbiAgICAgICAgICAgICAgICAgcGF0aG5hbWUgPSBcXFwiL1xcXCJcXG4gXFxuICAgICAgICAgICAgIHN1cGVyYmxvY2sgPSBtbnRbJ21udCddWydtbnRfc2InXVxcbisgICAgICAgICAgICBkZXZuYW1lID0gc3VwZXJibG9ja1snc19kZXZuYW1lJ10uc3RyaW5nKClcXG4rICAgICAgICAgICAgZGV2bmFtZSA9IGRldm5hbWUgaWYgZGV2bmFtZSBlbHNlIFxcXCJub25lXFxcIlxcbiAgICAgICAgICAgICBmc3R5cGUgPSBzdXBlcmJsb2NrWydzX3R5cGUnXVsnbmFtZSddLnN0cmluZygpXFxuICAgICAgICAgICAgIHNfZmxhZ3MgPSBpbnQoc3VwZXJibG9ja1snc19mbGFncyddKVxcbiAgICAgICAgICAgICBtX2ZsYWdzID0gaW50KG1udFsnbW50J11bJ21udF9mbGFncyddKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQxNjowODoyNS42NTI4NDEzMjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4NzM1ODc0MzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVST0ZTX0ZTXCIsXG4gICAgXCJPVkVSTEFZX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWV0YWZzX2dldF9yb290XCIsXG4gICAgXCJtZXRhZnNfY3JlYXRlX3Jvb3RcIixcbiAgICBcIm1ldGFmc19yb290X2xvb2t1cFwiLFxuICAgIFwibWV0YWZzX21vdW50X2xvb2t1cFwiLFxuICAgIFwibWV0YWZzX29wdGlvbnNfbG9va3VwXCIsXG4gICAgXCJtZXRhZnNfb3B0aW9uX3ZhbHVlc19sb29rdXBcIixcbiAgICBcIm1ldGFmc19nZXRfb3B0aW9uX3ZhbHVlc1wiLFxuICAgIFwibWV0YWZzX2dldF9saW5rXCIsXG4gICAgXCJtZXRhZnNfcmVhZGxpbmtcIixcbiAgICBcIm1udF9zaG93X29wdGlvbnNcIixcbiAgICBcInNiX2FkZF9vcHRpb25cIixcbiAgICBcInNiX2FkZF9vcHRpb25fcGF0aFwiLFxuICAgIFwib3ZsX2dldF9vcHRpb25zXCIsXG4gICAgXCJlcm9mc19nZXRfb3B0aW9uc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgdmlydHVhbCBmaWxlc3lzdGVtIGBtZXRhZnNgIHRoYXQgZXhwb3NlcyBtZXRhZGF0YSBhYm91dCBmaWxlcyBhbmQgZmlsZXN5c3RlbXMgdmlhIHRoZSBgT19BTFRgIGZsYWcuIEl0IGFsc28gaW50cm9kdWNlcyBhIG5ldyBgZ2V0X29wdGlvbnNgIHN1cGVyIG9wZXJhdGlvbiwgaW1wbGVtZW50ZWQgYnkgYGVyb2ZzYCBhbmQgYG92ZXJsYXlmc2AuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIFZGUyBhbmQgc3BlY2lmaWMgZmlsZXN5c3RlbXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc4YzhkOWU5MzRjZThhOWJjMWFlMGM5OTRmNDYzODU0YmQyZjk4MTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxNSAxNjowODoyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxuaW5kZXggN2M3NTMxNDhhZjg4ODMuLjNkYzQzMWI2Y2RiYjBiIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3RcbkBAIC0zMTQsNyArMzE0LDcgQEAgb3IgYm90dG9tIGhhbGYpLlxuIGBgc2hvd19kZXZuYW1lYGBcbiBcdE9wdGlvbmFsLiBDYWxsZWQgYnkgdGhlIFZGUyB0byBzaG93IGRldmljZSBuYW1lIGZvclxuIFx0L3Byb2MvXHUwMDNjcGlkXHUwMDNlL3ttb3VudHMsbW91bnRpbmZvLG1vdW50c3RhdHN9LiBJZiBub3QgcHJvdmlkZWQgdGhlblxuLVx0JyhzdHJ1Y3QgbW91bnQpLm1udF9kZXZuYW1lJyB3aWxsIGJlIHVzZWQuXG4rXHQnKHN0cnVjdCBzdXBlcl9ibG9jaykuc19kZXZuYW1lJyB3aWxsIGJlIHVzZWQuXG4gXG4gYGBzaG93X3BhdGhgYFxuIFx0T3B0aW9uYWwuIENhbGxlZCBieSB0aGUgVkZTIChmb3IgL3Byb2MvXHUwMDNjcGlkXHUwMDNlL21vdW50aW5mbykgdG8gc2hvd1xuZGlmZiAtLWdpdCBhL2ZzL01ha2VmaWxlIGIvZnMvTWFrZWZpbGVcbmluZGV4IDg5YThhOWQyMDdkMWM1Li44N2E0YzIzZDVhMDhkZSAxMDA2NDRcbi0tLSBhL2ZzL01ha2VmaWxlXG4rKysgYi9mcy9NYWtlZmlsZVxuQEAgLTU4LDYgKzU4LDggQEAgb2JqLSQoQ09ORklHX0NPTkZJR0ZTX0ZTKVx0Kz0gY29uZmlnZnMvXG4gb2JqLXlcdFx0XHRcdCs9IGRldnB0cy9cbiBcbiBvYmotJChDT05GSUdfRExNKVx0XHQrPSBkbG0vXG4rXG4rb2JqLXlcdFx0XHRcdCs9IG1ldGFmcy9cbiAgXG4gIyBEbyBub3QgYWRkIGFueSBmaWxlc3lzdGVtcyBiZWZvcmUgdGhpcyBsaW5lXG4gb2JqLSQoQ09ORklHX05FVEZTX1NVUFBPUlQpXHQrPSBuZXRmcy9cbmRpZmYgLS1naXQgYS9mcy9lcm9mcy9zdXBlci5jIGIvZnMvZXJvZnMvc3VwZXIuY1xuaW5kZXggODZmYTVjNmEwYzcwODcuLjI1NzUxN2MyOGUxZDM4IDEwMDY0NFxuLS0tIGEvZnMvZXJvZnMvc3VwZXIuY1xuKysrIGIvZnMvZXJvZnMvc3VwZXIuY1xuQEAgLTEwMjgsMjkgKzEwMjgsMzQgQEAgc3RhdGljIGludCBlcm9mc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZXJvZnNfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgZGVudHJ5ICpyb290KVxuK3N0YXRpYyBpbnQgZXJvZnNfZ2V0X29wdGlvbnMoc3RydWN0IHNiX29wdF9jdHggKmN0eCwgc3RydWN0IGRlbnRyeSAqcm9vdClcbiB7XG4gXHRzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gRVJPRlNfU0Iocm9vdC1cdTAwM2VkX3NiKTtcbiBcdHN0cnVjdCBlcm9mc19tb3VudF9vcHRzICpvcHQgPSBcdTAwMjZzYmktXHUwMDNlb3B0O1xuIFxuK1x0aWYgKHNiaS1cdTAwM2VkaWYwLmZpbGUpXG4rXHRcdHNiX2FkZF9vcHRpb25fcGF0aChjdHgsIFwic291cmNlXCIsIE5VTEwsIFx1MDAyNnNiaS1cdTAwM2VkaWYwLmZpbGUtXHUwMDNlZl9wYXRoKTtcbitcbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19FUk9GU19GU19YQVRUUikpXG4tXHRcdHNlcV9wdXRzKHNlcSwgdGVzdF9vcHQob3B0LCBYQVRUUl9VU0VSKSA/XG4tXHRcdFx0XHRcIix1c2VyX3hhdHRyXCIgOiBcIixub3VzZXJfeGF0dHJcIik7XG4rXHRcdHNiX2FkZF9vcHRpb24oY3R4LCB0ZXN0X29wdChvcHQsIFhBVFRSX1VTRVIpID9cbitcdFx0XHQgICAgICBcInVzZXJfeGF0dHJcIiA6IFwibm91c2VyX3hhdHRyXCIsIE5VTEwpO1xuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX1BPU0lYX0FDTCkpXG4tXHRcdHNlcV9wdXRzKHNlcSwgdGVzdF9vcHQob3B0LCBQT1NJWF9BQ0wpID8gXCIsYWNsXCIgOiBcIixub2FjbFwiKTtcbitcdFx0c2JfYWRkX29wdGlvbihjdHgsIHRlc3Rfb3B0KG9wdCwgUE9TSVhfQUNMKSA/IFwiYWNsXCIgOiBcIm5vYWNsXCIsIE5VTEwpO1xuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX1pJUCkpXG4tXHRcdHNlcV9wcmludGYoc2VxLCBcIixjYWNoZV9zdHJhdGVneT0lc1wiLFxuK1x0XHRzYl9hZGRfb3B0aW9uKGN0eCwgXCJjYWNoZV9zdHJhdGVneVwiLFxuIFx0XHRcdCAgZXJvZnNfcGFyYW1fY2FjaGVfc3RyYXRlZ3lbb3B0LVx1MDAzZWNhY2hlX3N0cmF0ZWd5XS5uYW1lKTtcbiBcdGlmICh0ZXN0X29wdChvcHQsIERBWF9BTFdBWVMpKVxuLVx0XHRzZXFfcHV0cyhzZXEsIFwiLGRheD1hbHdheXNcIik7XG4rXHRcdHNiX2FkZF9vcHRpb24oY3R4LCBcImRheFwiLCBcImFsd2F5c1wiKTtcbiBcdGlmICh0ZXN0X29wdChvcHQsIERBWF9ORVZFUikpXG4tXHRcdHNlcV9wdXRzKHNlcSwgXCIsZGF4PW5ldmVyXCIpO1xuK1x0XHRzYl9hZGRfb3B0aW9uKGN0eCwgXCJkYXhcIiwgXCJuZXZlclwiKTtcbiBcdGlmIChlcm9mc19pc19maWxlaW9fbW9kZShzYmkpIFx1MDAyNlx1MDAyNiB0ZXN0X29wdChvcHQsIERJUkVDVF9JTykpXG4tXHRcdHNlcV9wdXRzKHNlcSwgXCIsZGlyZWN0aW9cIik7XG4tXHRpZiAoc2JpLVx1MDAzZWRpZjAuZnNvZmYpXG4tXHRcdHNlcV9wcmludGYoc2VxLCBcIixmc29mZnNldD0lbGx1XCIsIHNiaS1cdTAwM2VkaWYwLmZzb2ZmKTtcbitcdFx0c2JfYWRkX29wdGlvbihjdHgsIFwiZGlyZWN0aW9cIiwgTlVMTCk7XG4rXHRpZiAoc2JpLVx1MDAzZWRpZjAuZnNvZmYpIHtcbitcdFx0Y2hhciAqdmFsIF9fZnJlZShrZnJlZSkgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgXCIlbGx1XCIsIHNiaS1cdTAwM2VkaWYwLmZzb2ZmKTtcbitcdFx0c2JfYWRkX29wdGlvbihjdHgsIFwiZnNvZmZzZXRcIiwgdmFsKTtcbitcdH1cbiBcdGlmICh0ZXN0X29wdChvcHQsIElOT0RFX1NIQVJFKSlcbi1cdFx0c2VxX3B1dHMoc2VxLCBcIixpbm9kZV9zaGFyZVwiKTtcbitcdFx0c2JfYWRkX29wdGlvbihjdHgsIFwiaW5vZGVfc2hhcmVcIiwgTlVMTCk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTA2OSw3ICsxMDc0LDcgQEAgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZXJvZnNfc29wcyA9IHtcbiBcdC5mcmVlX2lub2RlID0gZXJvZnNfZnJlZV9pbm9kZSxcbiBcdC5ldmljdF9pbm9kZSA9IGVyb2ZzX2V2aWN0X2lub2RlLFxuIFx0LnN0YXRmcyA9IGVyb2ZzX3N0YXRmcyxcbi1cdC5zaG93X29wdGlvbnMgPSBlcm9mc19zaG93X29wdGlvbnMsXG4rXHQuZ2V0X29wdGlvbnMgPSBlcm9mc19nZXRfb3B0aW9ucyxcbiB9O1xuIFxuIG1vZHVsZV9pbml0KGVyb2ZzX21vZHVsZV9pbml0KTtcbmRpZmYgLS1naXQgYS9mcy9mY250bC5jIGIvZnMvZmNudGwuY1xuaW5kZXggYzE1OGYwODJmMWRhNGYuLjAxYjc2NWNmYWM4NDc5IDEwMDY0NFxuLS0tIGEvZnMvZmNudGwuY1xuKysrIGIvZnMvZmNudGwuY1xuQEAgLTExNjksNyArMTE2OSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGZjbnRsX2luaXQodm9pZClcbiBcdCAqIEV4Y2VwdGlvbnM6IE9fTk9OQkxPQ0sgaXMgYSB0d28gYml0IGRlZmluZSBvbiBwYXJpc2M7IE9fTkRFTEFZXG4gXHQgKiBpcyBkZWZpbmVkIGFzIE9fTk9OQkxPQ0sgb24gc29tZSBwbGF0Zm9ybXMgYW5kIG5vdCBvbiBvdGhlcnMuXG4gXHQgKi9cbi1cdEJVSUxEX0JVR19PTigyMiAtIDEgLyogZm9yIE9fUkRPTkxZIGJlaW5nIDAgKi8gIT1cbitcdEJVSUxEX0JVR19PTigyMyAtIDEgLyogZm9yIE9fUkRPTkxZIGJlaW5nIDAgKi8gIT1cbiBcdFx0SFdFSUdIVDMyKFxuIFx0XHRcdChWQUxJRF9PUEVOX0ZMQUdTIFx1MDAyNiB+KE9fTk9OQkxPQ0sgfCBPX05ERUxBWSkpIHxcbiBcdFx0XHRfX0ZNT0RFX0VYRUMgfCBfX09fUkVHVUxBUikpO1xuZGlmZiAtLWdpdCBhL2ZzL2ludGVybmFsLmggYi9mcy9pbnRlcm5hbC5oXG5pbmRleCAzNTVkOTNmOTIyMDg2MS4uZTczYTVjMWQ1YjRlZTEgMTAwNjQ0XG4tLS0gYS9mcy9pbnRlcm5hbC5oXG4rKysgYi9mcy9pbnRlcm5hbC5oXG5AQCAtOTUsNiArOTUsNyBAQCBpbnQgcGF0aF91bW91bnQoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIGludCBmbGFncyk7XG4gaW50IHBhdGhfcGl2b3Rfcm9vdChzdHJ1Y3QgcGF0aCAqbmV3LCBzdHJ1Y3QgcGF0aCAqb2xkKTtcbiBcbiBpbnQgc2hvd19wYXRoKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRlbnRyeSAqcm9vdCk7XG4raW50IG1udF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCB2ZnNtb3VudCAqbW50KTtcbiBcbiAvKlxuICAqIGZzX3N0cnVjdC5jXG5kaWZmIC0tZ2l0IGEvZnMvbWV0YWZzL01ha2VmaWxlIGIvZnMvbWV0YWZzL01ha2VmaWxlXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmY4NTViNDhkOWMyYjkwXG4tLS0gL2Rldi9udWxsXG4rKysgYi9mcy9tZXRhZnMvTWFrZWZpbGVcbkBAIC0wLDAgKzEsNiBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKyNcbisjIE1ha2VmaWxlIGZvciBtZXRhIGZpbGVzeXN0ZW1cbisjXG4rXG4rb2JqLXkgOj0gbWV0YWZzLm9cbmRpZmYgLS1naXQgYS9mcy9tZXRhZnMvbWV0YWZzLmMgYi9mcy9tZXRhZnMvbWV0YWZzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMTVlYzBiNjA2NGRhMzhcbi0tLSAvZGV2L251bGxcbisrKyBiL2ZzL21ldGFmcy9tZXRhZnMuY1xuQEAgLTAsMCArMSw1NzIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qXG4rICogbWV0YWZzIC0gdmlydHVhbCBmaWxlc3lzdGVtIGZvciBtZXRhZGF0YSBhY2Nlc3NcbisgKlxuKyAqIFRoaXMgcHJvdmlkZXMgYSB3YXkgdG8gYWNjZXNzIG1ldGFkYXRhIGFib3V0IGZpbGVzIGFuZCBmaWxlc3lzdGVtc1xuKyAqIHRocm91Z2ggT19BTFQgZmlsZSBkZXNjcmlwdG9ycy5cbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tYWdpYy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW91bnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25hbWVpLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kY2FjaGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzZXVkb19mcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZnMvc3VwZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFwibWV0YWZzLmhcIlxuK1xuKy8qXG4rICogbWV0YWZzIHN1cGVyYmxvY2sgYW5kIG1vdW50XG4rICovXG4rc3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqbWV0YWZzX21udCBfX3JvX2FmdGVyX2luaXQ7XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIG1ldGFmc19vcHMgPSB7XG4rXHQuc3RhdGZzXHRcdD0gc2ltcGxlX3N0YXRmcyxcbitcdC5kcm9wX2lub2RlXHQ9IGlub2RlX2p1c3RfZHJvcCxcbit9O1xuK1xuK3N0YXRpYyBpbnQgbWV0YWZzX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4re1xuK1x0c3RydWN0IHBzZXVkb19mc19jb250ZXh0ICpjdHggPSBpbml0X3BzZXVkbyhmYywgMHg0ZDQ1NTQ0MSk7IC8qICdNRVRBJyAqL1xuK1x0aWYgKCFjdHgpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0Y3R4LVx1MDAzZW9wcyA9IFx1MDAyNm1ldGFmc19vcHM7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIG1ldGFmc190eXBlID0ge1xuK1x0Lm5hbWUgPSBcIm1ldGFmc1wiLFxuK1x0LmluaXRfZnNfY29udGV4dCA9IG1ldGFmc19pbml0X2ZzX2NvbnRleHQsXG4rXHQua2lsbF9zYiA9IGtpbGxfYW5vbl9zdXBlcixcbit9O1xuK1xuKy8qXG4rICogTW91bnQgb3B0aW9uIGNvbGxlY3Rpb24gc3RydWN0dXJlc1xuKyAqL1xuK2VudW0gbWV0YWZzX2RlbnRyeV90eXBlIHtcbitcdE1FVEFGU19ST09ULFxuK1x0TUVUQUZTX09QVElPTl9WQUxVRVMsXG4rXHRNRVRBRlNfU1lNTElOSyxcbit9O1xuK1xuK3N0cnVjdCBtZXRhZnNfb3B0aW9uX2VudHJ5IHtcbitcdGNoYXIgKnZhbHVlO1xuK1x0c3RydWN0IHBhdGggcGF0aDtcbit9O1xuK1xuK3N0cnVjdCBtZXRhZnNfZGVudHJ5X2luZm8ge1xuK1x0ZW51bSBtZXRhZnNfZGVudHJ5X3R5cGUgdHlwZTtcbitcdHVuaW9uIHtcbitcdFx0c3RydWN0IHtcbitcdFx0XHRzdHJ1Y3QgZmlsZSAqYmFzZTtcbitcdFx0fSByb290O1xuK1x0XHRzdHJ1Y3Qge1xuK1x0XHRcdHN0cnVjdCBtZXRhZnNfb3B0aW9uX2VudHJ5ICplbnRyaWVzO1xuK1x0XHRcdGludCBjb3VudDtcbitcdFx0fSBvcHRfdmFsdWVzO1xuK1x0XHRzdHJ1Y3QgbWV0YWZzX29wdGlvbl9lbnRyeSBzeW1saW5rO1xuK1x0fTtcbit9O1xuK1xuK3N0cnVjdCBtZXRhZnNfY29sbGVjdF9jdHgge1xuK1x0c3RydWN0IHNiX29wdF9jdHggY3R4O1xuK1x0Y29uc3QgY2hhciAqdGFyZ2V0X25hbWU7XG4rXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiO1xuK1x0c3RydWN0IG1ldGFmc19vcHRpb25fZW50cnkgKmVudHJpZXM7XG4rXHRpbnQgY291bnQ7XG4rXHRpbnQgc2l6ZTtcbitcdGludCBlcnI7XG4rXHRib29sIGlzX3NvdXJjZTtcbit9O1xuK1xuKy8qXG4rICogQ29sbGVjdCBzcGVjaWZpYyBtb3VudCBvcHRpb24gdmFsdWVzIGZyb20gdGhlIGJhc2UgZmlsZXN5c3RlbVxuKyAqL1xuK3N0YXRpYyB2b2lkIG1ldGFmc19jb2xsZWN0X29wdGlvbihzdHJ1Y3Qgc2Jfb3B0X2N0eCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLFxuK1x0XHRcdFx0ICBjb25zdCBjaGFyICp2YWx1ZSwgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXG4re1xuK1x0c3RydWN0IG1ldGFmc19jb2xsZWN0X2N0eCAqY29sbGVjdF9jdHggPSBjdHgtXHUwMDNlZGF0YTtcbitcdHN0cnVjdCBtZXRhZnNfb3B0aW9uX2VudHJ5ICplbnRyeTtcbitcbitcdGlmIChzdHJjbXAobmFtZSwgY29sbGVjdF9jdHgtXHUwMDNldGFyZ2V0X25hbWUpICE9IDApXG4rXHRcdHJldHVybjtcbitcbitcdGlmICghdmFsdWUgXHUwMDI2XHUwMDI2IGNvbGxlY3RfY3R4LVx1MDAzZWlzX3NvdXJjZSlcbitcdFx0dmFsdWUgPSBjb2xsZWN0X2N0eC1cdTAwM2VzYi1cdTAwM2VzX2Rldm5hbWU7XG4rXG4rXHRpZiAoY29sbGVjdF9jdHgtXHUwMDNlY291bnQgXHUwMDNlPSBjb2xsZWN0X2N0eC1cdTAwM2VzaXplKSB7XG4rXHRcdGludCBuZXdfc2l6ZSA9IGNvbGxlY3RfY3R4LVx1MDAzZXNpemUgPyBjb2xsZWN0X2N0eC1cdTAwM2VzaXplICogMiA6IDQ7XG4rXHRcdHN0cnVjdCBtZXRhZnNfb3B0aW9uX2VudHJ5ICpuZXdfZW50cmllcztcbitcbitcdFx0bmV3X2VudHJpZXMgPSBrcmVhbGxvY19hcnJheShjb2xsZWN0X2N0eC1cdTAwM2VlbnRyaWVzLCBuZXdfc2l6ZSwgc2l6ZW9mKCpuZXdfZW50cmllcyksXG4rXHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4rXHRcdGlmICghbmV3X2VudHJpZXMpIHtcbitcdFx0XHRjb2xsZWN0X2N0eC1cdTAwM2VlcnIgPSAtRU5PTUVNO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1x0XHRjb2xsZWN0X2N0eC1cdTAwM2VlbnRyaWVzID0gbmV3X2VudHJpZXM7XG4rXHRcdGNvbGxlY3RfY3R4LVx1MDAzZXNpemUgPSBuZXdfc2l6ZTtcbitcdH1cbitcbitcdGVudHJ5ID0gXHUwMDI2Y29sbGVjdF9jdHgtXHUwMDNlZW50cmllc1tjb2xsZWN0X2N0eC1cdTAwM2Vjb3VudF07XG4rXHRlbnRyeS1cdTAwM2V2YWx1ZSA9IHZhbHVlID8ga3N0cmR1cCh2YWx1ZSwgR0ZQX0tFUk5FTCkgOiBOVUxMO1xuK1x0aWYgKCFlbnRyeS1cdTAwM2V2YWx1ZSBcdTAwMjZcdTAwMjYgdmFsdWUpIHtcbitcdFx0Y29sbGVjdF9jdHgtXHUwMDNlZXJyID0gLUVOT01FTTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1x0aWYgKHBhdGgpIHtcbitcdFx0ZW50cnktXHUwMDNlcGF0aCA9ICpwYXRoO1xuK1x0XHRwYXRoX2dldChcdTAwMjZlbnRyeS1cdTAwM2VwYXRoKTtcbitcdH0gZWxzZSB7XG4rXHRcdG1lbXNldChcdTAwMjZlbnRyeS1cdTAwM2VwYXRoLCAwLCBzaXplb2YoZW50cnktXHUwMDNlcGF0aCkpO1xuK1x0fVxuK1x0Y29sbGVjdF9jdHgtXHUwMDNlY291bnQrKztcbit9XG4rXG4rc3RhdGljIHZvaWQgbWV0YWZzX2ZyZWVfZW50cmllcyhzdHJ1Y3QgbWV0YWZzX29wdGlvbl9lbnRyeSAqZW50cmllcywgaW50IGNvdW50KVxuK3tcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY291bnQ7IGkrKykge1xuK1x0XHRrZnJlZShlbnRyaWVzW2ldLnZhbHVlKTtcbitcdFx0aWYgKGVudHJpZXNbaV0ucGF0aC5tbnQpXG4rXHRcdFx0cGF0aF9wdXQoXHUwMDI2ZW50cmllc1tpXS5wYXRoKTtcbitcdH1cbitcdGtmcmVlKGVudHJpZXMpO1xuK31cbitcbitzdGF0aWMgaW50IG1ldGFmc19nZXRfb3B0aW9uX3ZhbHVlcyhzdHJ1Y3QgZmlsZSAqYmFzZSwgY29uc3QgY2hhciAqb3B0aW9uX25hbWUsXG4rXHRcdFx0XHQgICAgc3RydWN0IG1ldGFmc19vcHRpb25fZW50cnkgKiplbnRyaWVzX291dCxcbitcdFx0XHRcdCAgICBpbnQgKmNvdW50X291dClcbit7XG4rXHRjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCA9IFx1MDAyNmJhc2UtXHUwMDNlZl9wYXRoO1xuK1x0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHBhdGgtXHUwMDNlbW50LVx1MDAzZW1udF9zYjtcbitcdHN0cnVjdCBtZXRhZnNfY29sbGVjdF9jdHggY29sbGVjdF9jdHggPSB7XG4rXHRcdC5jdHguZGF0YSA9IFx1MDAyNmNvbGxlY3RfY3R4LFxuK1x0XHQuY3R4LmFjdG9yID0gbWV0YWZzX2NvbGxlY3Rfb3B0aW9uLFxuK1x0XHQudGFyZ2V0X25hbWUgPSBvcHRpb25fbmFtZSxcbitcdFx0LnNiID0gc2IsXG4rXHRcdC5pc19zb3VyY2UgPSAhc3RyY21wKG9wdGlvbl9uYW1lLCBcInNvdXJjZVwiKSxcbitcdH07XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHNiLVx1MDAzZXNfb3AtXHUwMDNlZ2V0X29wdGlvbnMpIHtcbitcdFx0cmV0ID0gc2ItXHUwMDNlc19vcC1cdTAwM2VnZXRfb3B0aW9ucyhcdTAwMjZjb2xsZWN0X2N0eC5jdHgsIHBhdGgtXHUwMDNlbW50LVx1MDAzZW1udF9yb290KTtcbitcdFx0aWYgKHJldCB8fCBjb2xsZWN0X2N0eC5lcnIpIHtcbitcdFx0XHRtZXRhZnNfZnJlZV9lbnRyaWVzKGNvbGxlY3RfY3R4LmVudHJpZXMsIGNvbGxlY3RfY3R4LmNvdW50KTtcbitcdFx0XHRyZXR1cm4gcmV0ID86IGNvbGxlY3RfY3R4LmVycjtcbitcdFx0fVxuK1x0fVxuK1xuK1x0Lyogc3BlY2lhbCBjYXNlOiBhZGQgXCJzb3VyY2VcIiBvcHRpb24gaWYgZmlsZXN5c3RlbSBkaWRuJ3QgYWRkIG9uZSovXG4rXHRpZiAoIWNvbGxlY3RfY3R4LmNvdW50IFx1MDAyNlx1MDAyNiBjb2xsZWN0X2N0eC5pc19zb3VyY2UpIHtcbitcdFx0c3RydWN0IG1ldGFmc19vcHRpb25fZW50cnkgKmVudCBfX2ZyZWUoa2ZyZWUpID0ga3phbGxvY19vYmooKmVudCk7XG4rXG4rXHRcdGlmICghZW50KVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0XHRlbnQtXHUwMDNldmFsdWUgPSBrc3RyZHVwKHNiLVx1MDAzZXNfZGV2bmFtZSwgR0ZQX0tFUk5FTCk7XG4rXHRcdGlmICghZW50LVx1MDAzZXZhbHVlKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0XHRjb2xsZWN0X2N0eC5lbnRyaWVzID0gbm9fZnJlZV9wdHIoZW50KTtcbitcdFx0Y29sbGVjdF9jdHguY291bnQgPSAxO1xuK1x0fVxuK1xuK1x0KmVudHJpZXNfb3V0ID0gY29sbGVjdF9jdHguZW50cmllcztcbitcdCpjb3VudF9vdXQgPSBjb2xsZWN0X2N0eC5jb3VudDtcbitcdHJldHVybiAwO1xuK31cbitcbisvKlxuKyAqIG1ldGFmcyBzeW1saW5rIG9wZXJhdGlvbnNcbisgKi9cbitzdGF0aWMgY29uc3QgY2hhciAqbWV0YWZzX2dldF9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHRcdCAgIHN0cnVjdCBkZWxheWVkX2NhbGwgKmRvbmUpXG4re1xuK1x0c3RydWN0IG1ldGFmc19kZW50cnlfaW5mbyAqaW5mbztcbitcbitcdGlmICghZGVudHJ5KVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRUNISUxEKTtcbitcbitcdGluZm8gPSBkZW50cnktXHUwMDNlZF9mc2RhdGE7XG4rXHRpZiAoaW5mby1cdTAwM2VzeW1saW5rLnBhdGgubW50KSB7XG4rXHRcdGludCBlcnJvcjtcbitcbitcdFx0cGF0aF9nZXQoXHUwMDI2aW5mby1cdTAwM2VzeW1saW5rLnBhdGgpO1xuK1x0XHRlcnJvciA9IG5kX2p1bXBfbGluayhcdTAwMjZpbmZvLVx1MDAzZXN5bWxpbmsucGF0aCk7XG4rXHRcdHJldHVybiBFUlJfUFRSKGVycm9yKTtcbitcdH1cbitcbitcdHJldHVybiBFUlJfUFRSKC1FTE9PUCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbWV0YWZzX3JlYWRsaW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbitcdFx0XHQgICBpbnQgYnVmbGVuKVxuK3tcbitcdHN0cnVjdCBtZXRhZnNfZGVudHJ5X2luZm8gKmluZm8gPSBkZW50cnktXHUwMDNlZF9mc2RhdGE7XG4rXHRjb25zdCBjaGFyICp2YWx1ZSA9IGluZm8tXHUwMDNlc3ltbGluay52YWx1ZTtcbitcbitcdGlmICghdmFsdWUpXG4rXHRcdHZhbHVlID0gXCJcIjtcbitcbitcdHJldHVybiByZWFkbGlua19jb3B5KGJ1ZmZlciwgYnVmbGVuLCB2YWx1ZSwgc3RybGVuKHZhbHVlKSk7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBtZXRhZnNfc3ltbGlua19pb3BzID0ge1xuK1x0LmdldF9saW5rXHQ9IG1ldGFmc19nZXRfbGluayxcbitcdC5yZWFkbGlua1x0PSBtZXRhZnNfcmVhZGxpbmssXG4rfTtcbitcbisvKlxuKyAqIERlbnRyeSBvcGVyYXRpb25zIC0gY2xlYW51cFxuKyAqL1xuK3N0YXRpYyB2b2lkIG1ldGFmc19kX3JlbGVhc2Uoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuK3tcbitcdHN0cnVjdCBtZXRhZnNfZGVudHJ5X2luZm8gKmluZm8gPSBkZW50cnktXHUwMDNlZF9mc2RhdGE7XG4rXG4rXHRpZiAoIWluZm8pXG4rXHRcdHJldHVybjtcbitcbitcdHN3aXRjaCAoaW5mby1cdTAwM2V0eXBlKSB7XG4rXHRjYXNlIE1FVEFGU19ST09UOlxuK1x0XHRmcHV0KGluZm8tXHUwMDNlcm9vdC5iYXNlKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIE1FVEFGU19PUFRJT05fVkFMVUVTOlxuK1x0XHRtZXRhZnNfZnJlZV9lbnRyaWVzKGluZm8tXHUwMDNlb3B0X3ZhbHVlcy5lbnRyaWVzLFxuK1x0XHRcdFx0ICAgIGluZm8tXHUwMDNlb3B0X3ZhbHVlcy5jb3VudCk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBNRVRBRlNfU1lNTElOSzpcbitcdFx0a2ZyZWUoaW5mby1cdTAwM2VzeW1saW5rLnZhbHVlKTtcbitcdFx0aWYgKGluZm8tXHUwMDNlc3ltbGluay5wYXRoLm1udClcbitcdFx0XHRwYXRoX3B1dChcdTAwMjZpbmZvLVx1MDAzZXN5bWxpbmsucGF0aCk7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0V0FSTl9PTigxKTtcbitcdH1cbitcdGtmcmVlKGluZm8pO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIG1ldGFmc19kZW50cnlfb3BzID0ge1xuK1x0LmRfcmVsZWFzZSA9IG1ldGFmc19kX3JlbGVhc2UsXG4rfTtcbitcbisvKlxuKyAqIG1ldGFmcyBkaXJlY3Rvcnkgb3BlcmF0aW9ucyAtIGZvcndhcmQgZGVjbGFyYXRpb25zXG4rICovXG4rc3RhdGljIHN0cnVjdCBmaWxlICptZXRhZnNfZ2V0X2Jhc2VfZmlsZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICptZXRhZnNfcm9vdF9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbitcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBmbGFncyk7XG4rc3RhdGljIHN0cnVjdCBkZW50cnkgKm1ldGFmc19tb3VudF9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbitcdFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICptZXRhZnNfb3B0aW9uc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbitcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBmbGFncyk7XG4rc3RhdGljIHN0cnVjdCBkZW50cnkgKm1ldGFmc19vcHRpb25fdmFsdWVzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuK1x0XHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IGZsYWdzKTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWV0YWZzX3Jvb3RfZGlyX2lvcHMgPSB7XG4rXHQubG9va3VwXHRcdD0gbWV0YWZzX3Jvb3RfbG9va3VwLFxuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1ldGFmc19tb3VudF9kaXJfaW9wcyA9IHtcbitcdC5sb29rdXBcdFx0PSBtZXRhZnNfbW91bnRfbG9va3VwLFxuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1ldGFmc19vcHRpb25zX2Rpcl9pb3BzID0ge1xuK1x0Lmxvb2t1cFx0XHQ9IG1ldGFmc19vcHRpb25zX2xvb2t1cCxcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBtZXRhZnNfb3B0aW9uX3ZhbHVlc19kaXJfaW9wcyA9IHtcbitcdC5sb29rdXBcdFx0PSBtZXRhZnNfb3B0aW9uX3ZhbHVlc19sb29rdXAsXG4rfTtcbitcbisvKlxuKyAqIENyZWF0ZSBhIG5ldyBpbm9kZSBpbiBtZXRhZnNcbisgKi9cbitzdGF0aWMgc3RydWN0IGlub2RlICptZXRhZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVtb2RlX3QgbW9kZSxcbitcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zICppb3BzKVxuK3tcbitcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBuZXdfaW5vZGUoc2IpO1xuK1xuK1x0aWYgKCFpbm9kZSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRpbm9kZS1cdTAwM2VpX2lubyA9IGdldF9uZXh0X2lubygpO1xuK1x0aW5vZGUtXHUwMDNlaV9tb2RlID0gbW9kZTtcbitcdHNpbXBsZV9pbm9kZV9pbml0X3RzKGlub2RlKTtcbitcbitcdGlmIChTX0lTRElSKG1vZGUpKSB7XG4rXHRcdGlub2RlLVx1MDAzZWlfb3AgPSBpb3BzO1xuK1x0XHRpbmNfbmxpbmsoaW5vZGUpO1xuK1x0fSBlbHNlIGlmIChTX0lTTE5LKG1vZGUpKSB7XG4rXHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZtZXRhZnNfc3ltbGlua19pb3BzO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGlub2RlO1xuK31cbitcbisvKlxuKyAqIExvb2t1cCBpbiByb290IGRpcmVjdG9yeSAoLylcbisgKiBPbmx5IFwibW91bnRcIiBpcyB2YWxpZCBoZXJlXG4rICovXG4rc3RhdGljIHN0cnVjdCBkZW50cnkgKm1ldGFmc19yb290X2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuK1x0XHRcdFx0XHQgdW5zaWduZWQgaW50IGZsYWdzKVxuK3tcbitcdGNvbnN0IGNoYXIgKm5hbWUgPSBkZW50cnktXHUwMDNlZF9uYW1lLm5hbWU7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuK1xuK1x0aWYgKHN0cmNtcChuYW1lLCBcIm1vdW50XCIpICE9IDApXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuK1xuK1x0aW5vZGUgPSBtZXRhZnNfZ2V0X2lub2RlKGRpci1cdTAwM2VpX3NiLCBTX0lGRElSIHwgMDU1NSwgXHUwMDI2bWV0YWZzX21vdW50X2Rpcl9pb3BzKTtcbitcdGlmICghaW5vZGUpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuK1xuK1x0ZF9hZGQoZGVudHJ5LCBpbm9kZSk7XG4rXHRkX21hcmtfZG9udGNhY2hlKGlub2RlKTtcbitcdHJldHVybiBOVUxMO1xuK31cbitcbisvKlxuKyAqIExvb2t1cCBpbiAvbW91bnQgZGlyZWN0b3J5XG4rICogT25seSBcIm9wdGlvbnNcIiBpcyB2YWxpZCBoZXJlXG4rICovXG4rc3RhdGljIHN0cnVjdCBkZW50cnkgKm1ldGFmc19tb3VudF9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbitcdFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4re1xuK1x0Y29uc3QgY2hhciAqbmFtZSA9IGRlbnRyeS1cdTAwM2VkX25hbWUubmFtZTtcbitcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4rXG4rXHRpZiAoc3RyY21wKG5hbWUsIFwib3B0aW9uc1wiKSAhPSAwKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcbitcbitcdGlub2RlID0gbWV0YWZzX2dldF9pbm9kZShkaXItXHUwMDNlaV9zYiwgU19JRkRJUiB8IDA1NTUsIFx1MDAyNm1ldGFmc19vcHRpb25zX2Rpcl9pb3BzKTtcbitcdGlmICghaW5vZGUpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuK1xuK1x0ZF9hZGQoZGVudHJ5LCBpbm9kZSk7XG4rXHRkX21hcmtfZG9udGNhY2hlKGlub2RlKTtcbitcdHJldHVybiBOVUxMO1xuK31cbitcbisvKlxuKyAqIExvb2t1cCBpbiAvbW91bnQvb3B0aW9ucyBkaXJlY3RvcnlcbisgKiBDb2xsZWN0IHZhbHVlcyBmb3IgdGhlIHJlcXVlc3RlZCBvcHRpb24gbmFtZVxuKyAqL1xuK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICptZXRhZnNfb3B0aW9uc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbitcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBmbGFncylcbit7XG4rXHRjb25zdCBjaGFyICp0YXJnZXRfbmFtZSA9IGRlbnRyeS1cdTAwM2VkX25hbWUubmFtZTtcbitcdHN0cnVjdCBmaWxlICpiYXNlO1xuK1x0c3RydWN0IG1ldGFmc19kZW50cnlfaW5mbyAqaW5mbztcbitcdHN0cnVjdCBtZXRhZnNfb3B0aW9uX2VudHJ5ICplbnRyaWVzID0gTlVMTDtcbitcdGludCBjb3VudCA9IDA7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuK1x0aW50IHJldDtcbitcbitcdGJhc2UgPSBtZXRhZnNfZ2V0X2Jhc2VfZmlsZShkZW50cnktXHUwMDNlZF9wYXJlbnQpO1xuK1x0aWYgKCFiYXNlKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcbitcbitcdHJldCA9IG1ldGFmc19nZXRfb3B0aW9uX3ZhbHVlcyhiYXNlLCB0YXJnZXRfbmFtZSwgXHUwMDI2ZW50cmllcywgXHUwMDI2Y291bnQpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbitcbitcdGlmIChjb3VudCA9PSAwKSB7XG4rXHRcdGtmcmVlKGVudHJpZXMpO1xuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcbitcdH1cbitcbitcdGluZm8gPSBremFsbG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFpbmZvKSB7XG4rXHRcdG1ldGFmc19mcmVlX2VudHJpZXMoZW50cmllcywgY291bnQpO1xuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcdH1cbitcbitcdGluZm8tXHUwMDNldHlwZSA9IE1FVEFGU19PUFRJT05fVkFMVUVTO1xuK1x0aW5mby1cdTAwM2VvcHRfdmFsdWVzLmVudHJpZXMgPSBlbnRyaWVzO1xuK1x0aW5mby1cdTAwM2VvcHRfdmFsdWVzLmNvdW50ID0gY291bnQ7XG4rXG4rXHRpbm9kZSA9IG1ldGFmc19nZXRfaW5vZGUoZGlyLVx1MDAzZWlfc2IsIFNfSUZESVIgfCAwNTU1LCBcdTAwMjZtZXRhZnNfb3B0aW9uX3ZhbHVlc19kaXJfaW9wcyk7XG4rXHRpZiAoIWlub2RlKSB7XG4rXHRcdG1ldGFmc19mcmVlX2VudHJpZXMoZW50cmllcywgY291bnQpO1xuK1x0XHRrZnJlZShpbmZvKTtcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXHR9XG4rXG4rXHRkZW50cnktXHUwMDNlZF9mc2RhdGEgPSBpbmZvO1xuK1x0ZF9hZGQoZGVudHJ5LCBpbm9kZSk7XG4rXHRkX21hcmtfZG9udGNhY2hlKGlub2RlKTtcbitcdHJldHVybiBOVUxMO1xuK31cbitcbisvKlxuKyAqIExvb2t1cCBpbiBvcHRpb24tc3BlY2lmaWMgZGlyZWN0b3J5IChlLmcuLCAvbW91bnQvb3B0aW9ucy9sb3dlcmRpci8pXG4rICogUmV0dXJuIG51bWJlcmVkIGVudHJpZXMgKDAsIDEsIDIsIC4uLikgYXMgc3ltbGlua3NcbisgKi9cbitzdGF0aWMgc3RydWN0IGRlbnRyeSAqbWV0YWZzX29wdGlvbl92YWx1ZXNfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdFx0XHRcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuK1x0XHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IGZsYWdzKVxuK3tcbitcdGNvbnN0IGNoYXIgKnRhcmdldF9uYW1lID0gZGVudHJ5LVx1MDAzZWRfbmFtZS5uYW1lO1xuK1x0c3RydWN0IG1ldGFmc19kZW50cnlfaW5mbyAqcGFyZW50X2luZm8sICppbmZvO1xuK1x0c3RydWN0IG1ldGFmc19vcHRpb25fZW50cnkgKmVudHJ5O1xuK1x0c3RydWN0IGlub2RlICppbm9kZTtcbitcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XG4rXHRpbnQgZXJyO1xuK1xuK1x0cGFyZW50X2luZm8gPSBkZW50cnktXHUwMDNlZF9wYXJlbnQtXHUwMDNlZF9mc2RhdGE7XG4rXHRpZiAoV0FSTl9PTighcGFyZW50X2luZm8gfHwgcGFyZW50X2luZm8tXHUwMDNldHlwZSAhPSBNRVRBRlNfT1BUSU9OX1ZBTFVFUykpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuK1xuK1x0aWYgKHRhcmdldF9uYW1lWzBdID09ICcwJyBcdTAwMjZcdTAwMjYgdGFyZ2V0X25hbWVbMV0pXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuK1xuK1x0ZXJyID0ga3N0cnRvdWwodGFyZ2V0X25hbWUsIDEwLCBcdTAwMjZpbmRleCk7XG4rXHRpZiAoZXJyIHx8IGluZGV4IFx1MDAzZT0gcGFyZW50X2luZm8tXHUwMDNlb3B0X3ZhbHVlcy5jb3VudClcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XG4rXG4rXHRlbnRyeSA9IFx1MDAyNnBhcmVudF9pbmZvLVx1MDAzZW9wdF92YWx1ZXMuZW50cmllc1tpbmRleF07XG4rXG4rXHRpbmZvID0ga3phbGxvYyhzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKTtcbitcdGlmICghaW5mbylcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXG4rXHRpbmZvLVx1MDAzZXR5cGUgPSBNRVRBRlNfU1lNTElOSztcbitcdGlmIChlbnRyeS1cdTAwM2V2YWx1ZSkge1xuK1x0XHRpbmZvLVx1MDAzZXN5bWxpbmsudmFsdWUgPSBrc3RyZHVwKGVudHJ5LVx1MDAzZXZhbHVlLCBHRlBfS0VSTkVMKTtcbitcdFx0aWYgKCFpbmZvLVx1MDAzZXN5bWxpbmsudmFsdWUpIHtcbitcdFx0XHRrZnJlZShpbmZvKTtcbitcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcdFx0fVxuK1x0fVxuK1x0aWYgKGVudHJ5LVx1MDAzZXBhdGgubW50KSB7XG4rXHRcdGluZm8tXHUwMDNlc3ltbGluay5wYXRoID0gZW50cnktXHUwMDNlcGF0aDtcbitcdFx0cGF0aF9nZXQoXHUwMDI2aW5mby1cdTAwM2VzeW1saW5rLnBhdGgpO1xuK1x0fVxuK1xuK1x0aW5vZGUgPSBtZXRhZnNfZ2V0X2lub2RlKGRpci1cdTAwM2VpX3NiLCBTX0lGTE5LIHwgMDc3NywgTlVMTCk7XG4rXHRpZiAoIWlub2RlKSB7XG4rXHRcdGtmcmVlKGluZm8tXHUwMDNlc3ltbGluay52YWx1ZSk7XG4rXHRcdGlmIChpbmZvLVx1MDAzZXN5bWxpbmsucGF0aC5tbnQpXG4rXHRcdFx0cGF0aF9wdXQoXHUwMDI2aW5mby1cdTAwM2VzeW1saW5rLnBhdGgpO1xuK1x0XHRrZnJlZShpbmZvKTtcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXHR9XG4rXG4rXHRkZW50cnktXHUwMDNlZF9mc2RhdGEgPSBpbmZvO1xuK1x0ZF9hZGQoZGVudHJ5LCBpbm9kZSk7XG4rXHRkX21hcmtfZG9udGNhY2hlKGlub2RlKTtcbitcdHJldHVybiBOVUxMO1xuK31cbitcbisvKlxuKyAqIEhlbHBlciB0byBnZXQgYmFzZSBmaWxlIGZyb20gYW55IG1ldGFmcyBkZW50cnlcbisgKi9cbitzdGF0aWMgc3RydWN0IGZpbGUgKm1ldGFmc19nZXRfYmFzZV9maWxlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbit7XG4rXHR3aGlsZSAoZGVudHJ5KSB7XG4rXHRcdHN0cnVjdCBtZXRhZnNfZGVudHJ5X2luZm8gKmluZm8gPSBkZW50cnktXHUwMDNlZF9mc2RhdGE7XG4rXG4rXHRcdGlmIChpbmZvIFx1MDAyNlx1MDAyNiBpbmZvLVx1MDAzZXR5cGUgPT0gTUVUQUZTX1JPT1QpXG4rXHRcdFx0cmV0dXJuIGluZm8tXHUwMDNlcm9vdC5iYXNlO1xuK1x0XHRpZiAoZGVudHJ5ID09IGRlbnRyeS1cdTAwM2VkX3BhcmVudClcbitcdFx0XHRicmVhaztcbitcdFx0ZGVudHJ5ID0gZGVudHJ5LVx1MDAzZWRfcGFyZW50O1xuK1x0fVxuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuKy8qXG4rICogQ3JlYXRlIHRoZSByb290IGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9yIGEgbWV0YWRhdGEgb3BlblxuKyAqL1xuK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICptZXRhZnNfY3JlYXRlX3Jvb3Qoc3RydWN0IGZpbGUgKmJhc2UpXG4re1xuK1x0c3RydWN0IGlub2RlICppbm9kZTtcbitcdHN0cnVjdCBkZW50cnkgKnJvb3Q7XG4rXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gbWV0YWZzX21udC1cdTAwM2VtbnRfc2I7XG4rXHRzdHJ1Y3QgbWV0YWZzX2RlbnRyeV9pbmZvICppbmZvO1xuK1xuK1x0aW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWluZm8pXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuK1xuK1x0aW5mby1cdTAwM2V0eXBlID0gTUVUQUZTX1JPT1Q7XG4rXHRpbmZvLVx1MDAzZXJvb3QuYmFzZSA9IGdldF9maWxlKGJhc2UpO1xuK1xuK1x0aW5vZGUgPSBtZXRhZnNfZ2V0X2lub2RlKHNiLCBTX0lGRElSIHwgMDU1NSwgXHUwMDI2bWV0YWZzX3Jvb3RfZGlyX2lvcHMpO1xuK1x0aWYgKCFpbm9kZSkge1xuK1x0XHRmcHV0KGluZm8tXHUwMDNlcm9vdC5iYXNlKTtcbitcdFx0a2ZyZWUoaW5mbyk7XG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuK1x0fVxuK1xuK1x0cm9vdCA9IGRfYWxsb2NfYW5vbihzYik7XG4rXHRpZiAoIXJvb3QpIHtcbitcdFx0aXB1dChpbm9kZSk7XG4rXHRcdGZwdXQoaW5mby1cdTAwM2Vyb290LmJhc2UpO1xuK1x0XHRrZnJlZShpbmZvKTtcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXHR9XG4rXG4rXHQvKiBTdG9yZSB0aGUgaW5mbyBpbiBkX2ZzZGF0YSBiZWZvcmUgaW5zdGFudGlhdGluZyAqL1xuK1x0cm9vdC1cdTAwM2VkX2ZzZGF0YSA9IGluZm87XG4rXHRkX2luc3RhbnRpYXRlKHJvb3QsIGlub2RlKTtcbitcdGRfbWFya19kb250Y2FjaGUoaW5vZGUpO1xuK1xuK1x0cmV0dXJuIHJvb3Q7XG4rfVxuK1xuKy8qXG4rICogR2V0IG1ldGFkYXRhIHJvb3QgcGF0aCBmb3IgYSBiYXNlIGZpbGUuXG4rICpcbisgKiBUaGlzIGlzIGNhbGxlZCBmcm9tIHBhdGhfaW5pdCgpIHdoZW4gT19BTFQgaXMgdXNlZC5cbisgKiBJdCByZXR1cm5zIGEgcGF0aCBpbiB0aGUgbWV0YWZzIHRoYXQgc2VydmVzIGFzIHRoZSByb290XG4rICogZm9yIHRoZSBtZXRhZGF0YSBsb29rdXAuXG4rICovXG4raW50IG1ldGFmc19nZXRfcm9vdChzdHJ1Y3QgZmlsZSAqYmFzZSwgc3RydWN0IHBhdGggKnBhdGgpXG4re1xuK1x0c3RydWN0IGRlbnRyeSAqcm9vdDtcbitcbitcdGlmICghYmFzZSlcbitcdFx0cmV0dXJuIC1FQkFERjtcbitcbitcdC8qIENyZWF0ZSB0aGUgbWV0YWRhdGEgcm9vdCBmb3IgdGhpcyBiYXNlIGZpbGUgKi9cbitcdHJvb3QgPSBtZXRhZnNfY3JlYXRlX3Jvb3QoYmFzZSk7XG4rXHRpZiAoSVNfRVJSKHJvb3QpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihyb290KTtcbitcbitcdC8qXG4rXHQgKiBSZXR1cm4gdGhlIHBhdGggdG8gdGhlIG1ldGFkYXRhIHJvb3QuXG4rXHQgKiBOb3JtYWwgVkZTIGxvb2t1cCB3aWxsIHRha2Ugb3ZlciBmcm9tIGhlcmUuXG4rXHQgKi9cbitcdHBhdGgtXHUwMDNlbW50ID0gbW50Z2V0KG1ldGFmc19tbnQpO1xuK1x0cGF0aC1cdTAwM2VkZW50cnkgPSByb290O1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG1ldGFmc19nZXRfcm9vdCk7XG4rXG4rc3RhdGljIGludCBfX2luaXQgbWV0YWZzX2luaXQodm9pZClcbit7XG4rXHRpbnQgZXJyO1xuK1xuK1x0ZXJyID0gcmVnaXN0ZXJfZmlsZXN5c3RlbShcdTAwMjZtZXRhZnNfdHlwZSk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0bWV0YWZzX21udCA9IGtlcm5fbW91bnQoXHUwMDI2bWV0YWZzX3R5cGUpO1xuK1x0aWYgKElTX0VSUihtZXRhZnNfbW50KSkge1xuK1x0XHRlcnIgPSBQVFJfRVJSKG1ldGFmc19tbnQpO1xuK1x0XHR1bnJlZ2lzdGVyX2ZpbGVzeXN0ZW0oXHUwMDI2bWV0YWZzX3R5cGUpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1x0c2V0X2RlZmF1bHRfZF9vcChtZXRhZnNfbW50LVx1MDAzZW1udF9zYiwgXHUwMDI2bWV0YWZzX2RlbnRyeV9vcHMpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ZzX2luaXRjYWxsKG1ldGFmc19pbml0KTtcbmRpZmYgLS1naXQgYS9mcy9tZXRhZnMvbWV0YWZzLmggYi9mcy9tZXRhZnMvbWV0YWZzLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZDI1NzcxNDI2MGE3ZmJcbi0tLSAvZGV2L251bGxcbisrKyBiL2ZzL21ldGFmcy9tZXRhZnMuaFxuQEAgLTAsMCArMSwxNSBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rI2lmbmRlZiBfTElOVVhfTUVUQUZTX0hcbisjZGVmaW5lIF9MSU5VWF9NRVRBRlNfSFxuK1xuK3N0cnVjdCBwYXRoO1xuK3N0cnVjdCBmaWxlO1xuK1xuKy8qXG4rICogR2V0IG1ldGFkYXRhIHJvb3QgcGF0aCBmb3IgYSBiYXNlIGZpbGUuXG4rICogQ2FsbGVkIGZyb20gcGF0aF9pbml0KCkgd2hlbiBPX0FMVCBmbGFnIGlzIHVzZWQuXG4rICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgd2l0aCBwYXRoIGZpbGxlZCBpbiwgLWVycm5vIG9uIGVycm9yLlxuKyAqL1xuK2ludCBtZXRhZnNfZ2V0X3Jvb3Qoc3RydWN0IGZpbGUgKmJhc2UsIHN0cnVjdCBwYXRoICpwYXRoKTtcbitcbisjZW5kaWYgLyogX0xJTlVYX01FVEFGU19IICovXG5kaWZmIC0tZ2l0IGEvZnMvbW91bnQuaCBiL2ZzL21vdW50LmhcbmluZGV4IDk0ZmNjMzA2ZDIxZTdkLi42OWE5NTNiYzExMmIzNiAxMDA2NDRcbi0tLSBhL2ZzL21vdW50LmhcbisrKyBiL2ZzL21vdW50LmhcbkBAIC02NSw3ICs2NSw2IEBAIHN0cnVjdCBtb3VudCB7XG4gXHRzdHJ1Y3QgbW91bnQgKiBfX2FsaWduZWQoMSkgKm1udF9wcHJldl9mb3Jfc2I7XG4gXHRcdFx0XHRcdC8qIGV4Y2VwdCB0aGF0IExTQiBvZiBwcHJldiBpcyBzdG9sZW4gKi9cbiAjZGVmaW5lIFdSSVRFX0hPTEQgMVx0XHRcdC8qIC4uLiBmb3IgdXNlIGJ5IG1udF9ob2xkX3dyaXRlcnMoKSAqL1xuLVx0Y29uc3QgY2hhciAqbW50X2Rldm5hbWU7XHQvKiBOYW1lIG9mIGRldmljZSBlLmcuIC9kZXYvZHNrL2hkYTEgKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgbW50X2xpc3Q7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIG1udF9leHBpcmU7XHQvKiBsaW5rIGluIGZzLXNwZWNpZmljIGV4cGlyeSBsaXN0ICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIG1udF9zaGFyZTtcdC8qIGNpcmN1bGFyIGxpc3Qgb2Ygc2hhcmVkIG1vdW50cyAqL1xuZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jXG5pbmRleCAxOWNlNDNjOWE2ZTY2Mi4uNDM3YTE0YzQzMmU2N2IgMTAwNjQ0XG4tLS0gYS9mcy9uYW1laS5jXG4rKysgYi9mcy9uYW1laS5jXG5AQCAtNDUsNiArNDUsNyBAQFxuIFxuICNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4gI2luY2x1ZGUgXCJtb3VudC5oXCJcbisjaW5jbHVkZSBcIm1ldGFmcy9tZXRhZnMuaFwiXG4gXG4gLyogW0ZlYi0xOTk3IFQuIFNjaG9lYmVsLVRoZXVlcl1cbiAgKiBGdW5kYW1lbnRhbCBjaGFuZ2VzIGluIHRoZSBwYXRobmFtZSBsb29rdXAgbWVjaGFuaXNtcyAobmFtZWkpXG5AQCAtMjc1Myw2ICsyNzU0LDIxIEBAIHN0YXRpYyBjb25zdCBjaGFyICpwYXRoX2luaXQoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHVuc2lnbmVkIGZsYWdzKVxuIFx0XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XG4gXHRcdH1cbiBcbitcdFx0aWYgKHVubGlrZWx5KGZsYWdzIFx1MDAyNiBMT09LVVBfQUxUKSkge1xuK1x0XHRcdGlmIChmbGFncyBcdTAwMjYgTE9PS1VQX1JDVSlcbitcdFx0XHRcdHJldHVybiBFUlJfUFRSKC1FQ0hJTEQpO1xuK1xuK1x0XHRcdC8qIEhhbmRsZSBPX0FMVDoganVtcCB0byBtZXRhZnMgcm9vdCAqL1xuK1x0XHRcdGVycm9yID0gbWV0YWZzX2dldF9yb290KGZkX2ZpbGUoZiksIFx1MDAyNm5kLVx1MDAzZXBhdGgpO1xuK1x0XHRcdGlmIChlcnJvcilcbitcdFx0XHRcdHJldHVybiBFUlJfUFRSKGVycm9yKTtcbitcbitcdFx0XHRuZC1cdTAwM2Vpbm9kZSA9IG5kLVx1MDAzZXBhdGguZGVudHJ5LVx1MDAzZWRfaW5vZGU7XG4rXHRcdFx0bmQtXHUwMDNlc3RhdGUgfD0gTkRfSlVNUEVEO1xuK1xuK1x0XHRcdHJldHVybiBzO1xuK1x0XHR9XG4rXG4gXHRcdGRlbnRyeSA9IGZkX2ZpbGUoZiktXHUwMDNlZl9wYXRoLmRlbnRyeTtcbiBcbiBcdFx0aWYgKCpzIFx1MDAyNlx1MDAyNiB1bmxpa2VseSghZF9jYW5fbG9va3VwKGRlbnRyeSkpKVxuZGlmZiAtLWdpdCBhL2ZzL25hbWVzcGFjZS5jIGIvZnMvbmFtZXNwYWNlLmNcbmluZGV4IDNkNWNkNWJmM2IwNTM3Li42MmNjNzFjNDAxYTJhYyAxMDA2NDRcbi0tLSBhL2ZzL25hbWVzcGFjZS5jXG4rKysgYi9mcy9uYW1lc3BhY2UuY1xuQEAgLTI4Miw3ICsyODIsNyBAQCBpbnQgbW50X2dldF9jb3VudChzdHJ1Y3QgbW91bnQgKm1udClcbiAjZW5kaWZcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBtb3VudCAqYWxsb2NfdmZzbW50KGNvbnN0IGNoYXIgKm5hbWUpXG4rc3RhdGljIHN0cnVjdCBtb3VudCAqYWxsb2NfdmZzbW50KHZvaWQpXG4ge1xuIFx0c3RydWN0IG1vdW50ICptbnQgPSBrbWVtX2NhY2hlX3phbGxvYyhtbnRfY2FjaGUsIEdGUF9LRVJORUwpO1xuIFx0aWYgKG1udCkge1xuQEAgLTI5MiwxOCArMjkyLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgbW91bnQgKmFsbG9jX3Zmc21udChjb25zdCBjaGFyICpuYW1lKVxuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gb3V0X2ZyZWVfY2FjaGU7XG4gXG4tXHRcdGlmIChuYW1lKVxuLVx0XHRcdG1udC1cdTAwM2VtbnRfZGV2bmFtZSA9IGtzdHJkdXBfY29uc3QobmFtZSxcbi1cdFx0XHRcdFx0XHRcdCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLVx0XHRlbHNlXG4tXHRcdFx0bW50LVx1MDAzZW1udF9kZXZuYW1lID0gXCJub25lXCI7XG4tXHRcdGlmICghbW50LVx1MDAzZW1udF9kZXZuYW1lKVxuLVx0XHRcdGdvdG8gb3V0X2ZyZWVfaWQ7XG4tXG4gI2lmZGVmIENPTkZJR19TTVBcbiBcdFx0bW50LVx1MDAzZW1udF9wY3AgPSBhbGxvY19wZXJjcHUoc3RydWN0IG1udF9wY3ApO1xuIFx0XHRpZiAoIW1udC1cdTAwM2VtbnRfcGNwKVxuLVx0XHRcdGdvdG8gb3V0X2ZyZWVfZGV2bmFtZTtcbitcdFx0XHRnb3RvIG91dF9mcmVlX2lkO1xuIFxuIFx0XHR0aGlzX2NwdV9hZGQobW50LVx1MDAzZW1udF9wY3AtXHUwMDNlbW50X2NvdW50LCAxKTtcbiAjZWxzZVxuQEAgLTMyOCwxMSArMzIwLDkgQEAgc3RhdGljIHN0cnVjdCBtb3VudCAqYWxsb2NfdmZzbW50KGNvbnN0IGNoYXIgKm5hbWUpXG4gXHRyZXR1cm4gbW50O1xuIFxuICNpZmRlZiBDT05GSUdfU01QXG4tb3V0X2ZyZWVfZGV2bmFtZTpcbi1cdGtmcmVlX2NvbnN0KG1udC1cdTAwM2VtbnRfZGV2bmFtZSk7XG4tI2VuZGlmXG4gb3V0X2ZyZWVfaWQ6XG4gXHRtbnRfZnJlZV9pZChtbnQpO1xuKyNlbmRpZlxuIG91dF9mcmVlX2NhY2hlOlxuIFx0a21lbV9jYWNoZV9mcmVlKG1udF9jYWNoZSwgbW50KTtcbiBcdHJldHVybiBOVUxMO1xuQEAgLTcyNSw3ICs3MTUsNiBAQCBpbnQgc2JfcHJlcGFyZV9yZW1vdW50X3JlYWRvbmx5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gc3RhdGljIHZvaWQgZnJlZV92ZnNtbnQoc3RydWN0IG1vdW50ICptbnQpXG4ge1xuIFx0bW50X2lkbWFwX3B1dChtbnRfaWRtYXAoXHUwMDI2bW50LVx1MDAzZW1udCkpO1xuLVx0a2ZyZWVfY29uc3QobW50LVx1MDAzZW1udF9kZXZuYW1lKTtcbiAjaWZkZWYgQ09ORklHX1NNUFxuIFx0ZnJlZV9wZXJjcHUobW50LVx1MDAzZW1udF9wY3ApO1xuICNlbmRpZlxuQEAgLTExODAsNyArMTE2OSw3IEBAIHN0cnVjdCB2ZnNtb3VudCAqdmZzX2NyZWF0ZV9tb3VudChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXHRpZiAoIWZjLVx1MDAzZXJvb3QpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIFxuLVx0bW50ID0gYWxsb2NfdmZzbW50KGZjLVx1MDAzZXNvdXJjZSk7XG4rXHRtbnQgPSBhbGxvY192ZnNtbnQoKTtcbiBcdGlmICghbW50KVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcbkBAIC0xMjQ4LDcgKzEyMzcsNyBAQCBzdGF0aWMgc3RydWN0IG1vdW50ICpjbG9uZV9tbnQoc3RydWN0IG1vdW50ICpvbGQsIHN0cnVjdCBkZW50cnkgKnJvb3QsXG4gXHRzdHJ1Y3QgbW91bnQgKm1udDtcbiBcdGludCBlcnI7XG4gXG4tXHRtbnQgPSBhbGxvY192ZnNtbnQob2xkLVx1MDAzZW1udF9kZXZuYW1lKTtcbitcdG1udCA9IGFsbG9jX3Zmc21udCgpO1xuIFx0aWYgKCFtbnQpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIFxuQEAgLTI5NTcsMTYgKzI5NDYsMTIgQEAgc3RhdGljIGludCBkb19jaGFuZ2VfdHlwZShjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IG1zX2ZsYWdzKVxuIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXlfY29weV90cmVlKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKVxuIHtcbiBcdHN0cnVjdCBtb3VudCAqbW50ID0gcmVhbF9tb3VudChwYXRoLVx1MDAzZW1udCk7XG4tXHRjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgKmRfb3A7XG4gXG4gXHRpZiAoY2hlY2tfbW50KG1udCkpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuLVx0ZF9vcCA9IHBhdGgtXHUwMDNlZGVudHJ5LVx1MDAzZWRfb3A7XG4tXHRpZiAoZF9vcCA9PSBcdTAwMjZuc19kZW50cnlfb3BlcmF0aW9ucylcbi1cdFx0cmV0dXJuIHRydWU7XG4tXG4tXHRpZiAoZF9vcCA9PSBcdTAwMjZwaWRmc19kZW50cnlfb3BlcmF0aW9ucylcbitcdC8qIE1ha2UgYW4gZXhjZXB0aW9uIGZvciBpbnRlcm5hbCBtb3VudHMgZXhwbGljaXRseSBtYXJrZWQgYXMgY2xvbmFibGUgKi9cbitcdGlmIChtbnQtXHUwMDNlbW50X25zID09IE1OVF9OU19JTlRFUk5BTCBcdTAwMjZcdTAwMjYgbW50LVx1MDAzZW1udC5tbnRfZmxhZ3MgXHUwMDI2IE1OVF9DTE9OQUJMRSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHRpZiAoIWlzX21vdW50ZWQocGF0aC1cdTAwM2VtbnQpKVxuQEAgLTMyMDEsNyArMzE4Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgZmlsZSAqdmZzX29wZW5fdHJlZShpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsIHVuc2lnbmVkXG4gXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IH4oQVRfRU1QVFlfUEFUSCB8IEFUX05PX0FVVE9NT1VOVCB8IEFUX1JFQ1VSU0lWRSB8XG4gXHRcdCAgICAgIEFUX1NZTUxJTktfTk9GT0xMT1cgfCBPUEVOX1RSRUVfQ0xPTkUgfFxuLVx0XHQgICAgICBPUEVOX1RSRUVfQ0xPRVhFQyB8IE9QRU5fVFJFRV9OQU1FU1BBQ0UpKVxuK1x0XHQgICAgICBPUEVOX1RSRUVfQ0xPRVhFQyB8IE9QRU5fVFJFRV9OQU1FU1BBQ0UgfCBPUEVOX1RSRUVfQUxUKSlcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gXG4gXHRpZiAoKGZsYWdzIFx1MDAyNiAoQVRfUkVDVVJTSVZFIHwgT1BFTl9UUkVFX0NMT05FIHwgT1BFTl9UUkVFX05BTUVTUEFDRSkpID09XG5AQCAtMzIxNSw2ICszMjAwLDggQEAgc3RhdGljIHN0cnVjdCBmaWxlICp2ZnNfb3Blbl90cmVlKGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwgdW5zaWduZWRcbiBcdFx0bG9va3VwX2ZsYWdzIFx1MDAyNj0gfkxPT0tVUF9BVVRPTU9VTlQ7XG4gXHRpZiAoZmxhZ3MgXHUwMDI2IEFUX1NZTUxJTktfTk9GT0xMT1cpXG4gXHRcdGxvb2t1cF9mbGFncyBcdTAwMjY9IH5MT09LVVBfRk9MTE9XO1xuK1x0aWYgKGZsYWdzIFx1MDAyNiBPUEVOX1RSRUVfQUxUKVxuK1x0XHRsb29rdXBfZmxhZ3MgfD0gTE9PS1VQX0FMVDtcbiBcbiBcdC8qXG4gXHQgKiBJZiB3ZSBjcmVhdGUgYSBuZXcgbW91bnQgbmFtZXNwYWNlIHdpdGggdGhlIGNsb25lZCBtb3VudCB0cmVlIHdlXG5AQCAtNTM4Nyw3ICs1Mzc0LDYgQEAgc3RhdGljIHZvaWQgc3RhdG1vdW50X2ZzX3N1YnR5cGUoc3RydWN0IGtzdGF0bW91bnQgKnMsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxuIHN0YXRpYyBpbnQgc3RhdG1vdW50X3NiX3NvdXJjZShzdHJ1Y3Qga3N0YXRtb3VudCAqcywgc3RydWN0IHNlcV9maWxlICpzZXEpXG4ge1xuIFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHMtXHUwMDNlbW50LVx1MDAzZW1udF9zYjtcbi1cdHN0cnVjdCBtb3VudCAqciA9IHJlYWxfbW91bnQocy1cdTAwM2VtbnQpO1xuIFxuIFx0aWYgKHNiLVx1MDAzZXNfb3AtXHUwMDNlc2hvd19kZXZuYW1lKSB7XG4gXHRcdHNpemVfdCBzdGFydCA9IHNlcS1cdTAwM2Vjb3VudDtcbkBAIC01NDA1LDcgKzUzOTEsNyBAQCBzdGF0aWMgaW50IHN0YXRtb3VudF9zYl9zb3VyY2Uoc3RydWN0IGtzdGF0bW91bnQgKnMsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxuIFx0XHRzZXEtXHUwMDNlY291bnQgPSBzdGFydDtcbiBcdFx0c2VxX2NvbW1pdChzZXEsIHN0cmluZ191bmVzY2FwZV9pbnBsYWNlKHNlcS1cdTAwM2VidWYgKyBzdGFydCwgVU5FU0NBUEVfT0NUQUwpKTtcbiBcdH0gZWxzZSB7XG4tXHRcdHNlcV9wdXRzKHNlcSwgci1cdTAwM2VtbnRfZGV2bmFtZSk7XG4rXHRcdHNlcV9wdXRzKHNlcSwgc2ItXHUwMDNlc19kZXZuYW1lKTtcbiBcdH1cbiBcdHJldHVybiAwO1xuIH1cbkBAIC01NDE2LDYgKzU0MDIsNDAgQEAgc3RhdGljIHZvaWQgc3RhdG1vdW50X21udF9uc19pZChzdHJ1Y3Qga3N0YXRtb3VudCAqcywgc3RydWN0IG1udF9uYW1lc3BhY2UgKm5zKVxuIFx0cy1cdTAwM2VzbS5tbnRfbnNfaWQgPSBucy1cdTAwM2Vucy5uc19pZDtcbiB9XG4gXG4rdm9pZCBzYl9hZGRfb3B0aW9uKHN0cnVjdCBzYl9vcHRfY3R4ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKVxuK3tcbitcdHNiX2FkZF9vcHRpb25fcGF0aChjdHgsIG5hbWUsIHZhbHVlLCBOVUxMKTtcbit9XG4rXG4rdm9pZCBzYl9hZGRfb3B0aW9uX3BhdGgoc3RydWN0IHNiX29wdF9jdHggKmN0eCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUsXG4rXHRcdFx0Y29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXG4re1xuK1x0Y3R4LVx1MDAzZWFjdG9yKGN0eCwgbmFtZSwgdmFsdWUsIHBhdGgpO1xuK31cbitcbitzdGF0aWMgdm9pZCBkb19zaG93X29wdGlvbihzdHJ1Y3Qgc2Jfb3B0X2N0eCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSxcbitcdFx0XHQgICBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aClcbit7XG4rXHRpZiAoc3RyY21wKG5hbWUsIFwic291cmNlXCIpICE9IDApXG4rXHRcdHNlcV9zaG93X29wdGlvbihjdHgtXHUwMDNlZGF0YSwgbmFtZSwgdmFsdWUpO1xuK31cbitcbitpbnQgbW50X3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IHZmc21vdW50ICptbnQpXG4re1xuK1x0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IG1udC1cdTAwM2VtbnRfc2I7XG4rXG4rXHRpZiAoc2ItXHUwMDNlc19vcC1cdTAwM2VzaG93X29wdGlvbnMpXG4rXHRcdHJldHVybiBzYi1cdTAwM2VzX29wLVx1MDAzZXNob3dfb3B0aW9ucyhzZXEsIG1udC1cdTAwM2VtbnRfcm9vdCk7XG4rXG4rXHRpZiAoc2ItXHUwMDNlc19vcC1cdTAwM2VnZXRfb3B0aW9ucykge1xuK1x0XHRzdHJ1Y3Qgc2Jfb3B0X2N0eCBjdHggPSB7IC5kYXRhID0gc2VxLCAuYWN0b3IgPSBkb19zaG93X29wdGlvbiB9O1xuK1xuK1x0XHRyZXR1cm4gc2ItXHUwMDNlc19vcC1cdTAwM2VnZXRfb3B0aW9ucyhcdTAwMjZjdHgsIG1udC1cdTAwM2VtbnRfcm9vdCk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBzdGF0bW91bnRfbW50X29wdHMoc3RydWN0IGtzdGF0bW91bnQgKnMsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxuIHtcbiBcdHN0cnVjdCB2ZnNtb3VudCAqbW50ID0gcy1cdTAwM2VtbnQ7XG5AQCAtNTQyNywxMSArNTQ0Nyw5IEBAIHN0YXRpYyBpbnQgc3RhdG1vdW50X21udF9vcHRzKHN0cnVjdCBrc3RhdG1vdW50ICpzLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSlcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRpZiAoc2ItXHUwMDNlc19vcC1cdTAwM2VzaG93X29wdGlvbnMpIHtcbi1cdFx0ZXJyID0gc2ItXHUwMDNlc19vcC1cdTAwM2VzaG93X29wdGlvbnMoc2VxLCBtbnQtXHUwMDNlbW50X3Jvb3QpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdHJldHVybiBlcnI7XG4tXHR9XG4rXHRlcnIgPSBtbnRfc2hvd19vcHRpb25zKHNlcSwgbW50KTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4gXG4gXHRpZiAodW5saWtlbHkoc2VxX2hhc19vdmVyZmxvd2VkKHNlcSkpKVxuIFx0XHRyZXR1cm4gLUVBR0FJTjtcbkBAIC01NDc5LDE0ICs1NDk3LDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHN0YXRtb3VudF9vcHRfcHJvY2VzcyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc2l6ZV90IHN0YXJ0KVxuIHN0YXRpYyBpbnQgc3RhdG1vdW50X29wdF9hcnJheShzdHJ1Y3Qga3N0YXRtb3VudCAqcywgc3RydWN0IHNlcV9maWxlICpzZXEpXG4ge1xuIFx0c3RydWN0IHZmc21vdW50ICptbnQgPSBzLVx1MDAzZW1udDtcbi1cdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBtbnQtXHUwMDNlbW50X3NiO1xuIFx0c2l6ZV90IHN0YXJ0ID0gc2VxLVx1MDAzZWNvdW50O1xuIFx0aW50IGVycjtcbiBcbi1cdGlmICghc2ItXHUwMDNlc19vcC1cdTAwM2VzaG93X29wdGlvbnMpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0ZXJyID0gc2ItXHUwMDNlc19vcC1cdTAwM2VzaG93X29wdGlvbnMoc2VxLCBtbnQtXHUwMDNlbW50X3Jvb3QpO1xuK1x0ZXJyID0gbW50X3Nob3dfb3B0aW9ucyhzZXEsIG1udCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL25zZnMuYyBiL2ZzL25zZnMuY1xuaW5kZXggYzNiNmFlNzY1OTRhODEuLmUxMTAxMzBkMDc2MGU1IDEwMDY0NFxuLS0tIGEvZnMvbnNmcy5jXG4rKysgYi9mcy9uc2ZzLmNcbkBAIC02ODQsNiArNjg0LDcgQEAgdm9pZCBfX2luaXQgbnNmc19pbml0KHZvaWQpXG4gXHRpZiAoSVNfRVJSKG5zZnNfbW50KSlcbiBcdFx0cGFuaWMoXCJjYW4ndCBzZXQgbnNmcyB1cFxcblwiKTtcbiBcdG5zZnNfbW50LVx1MDAzZW1udF9zYi1cdTAwM2VzX2ZsYWdzIFx1MDAyNj0gflNCX05PVVNFUjtcbitcdG5zZnNfbW50LVx1MDAzZW1udF9mbGFncyB8PSBNTlRfQ0xPTkFCTEU7XG4gXHRuc2ZzX3Jvb3RfcGF0aC5tbnQgPSBuc2ZzX21udDtcbiBcdG5zZnNfcm9vdF9wYXRoLmRlbnRyeSA9IG5zZnNfbW50LVx1MDAzZW1udF9yb290O1xuIH1cbmRpZmYgLS1naXQgYS9mcy9vcGVuLmMgYi9mcy9vcGVuLmNcbmluZGV4IDQwODkyNWQ3YmQwYjc3Li4zYTA4MWE5ZTMwNjI0MyAxMDA2NDRcbi0tLSBhL2ZzL29wZW4uY1xuKysrIGIvZnMvb3Blbi5jXG5AQCAtMTEzMSw3ICsxMTMxLDggQEAgc3RydWN0IGZpbGUgKmtlcm5lbF9maWxlX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIGludCBmbGFncyxcbiBFWFBPUlRfU1lNQk9MX0dQTChrZXJuZWxfZmlsZV9vcGVuKTtcbiBcbiAjZGVmaW5lIFdJTExfQ1JFQVRFKGZsYWdzKVx0KGZsYWdzIFx1MDAyNiAoT19DUkVBVCB8IF9fT19UTVBGSUxFKSlcbi0jZGVmaW5lIE9fUEFUSF9GTEFHU1x0XHQoT19ESVJFQ1RPUlkgfCBPX05PRk9MTE9XIHwgT19QQVRIIHwgT19DTE9FWEVDIHwgT19FTVBUWVBBVEgpXG4rI2RlZmluZSBPX1BBVEhfRkxBR1NcdFx0KE9fRElSRUNUT1JZIHwgT19OT0ZPTExPVyB8IE9fUEFUSCB8IE9fQ0xPRVhFQyB8IE9fRU1QVFlQQVRIIHwgXFxcbitcdFx0XHRcdCBPX0FMVClcbiBcbiBpbmxpbmUgc3RydWN0IG9wZW5faG93IGJ1aWxkX29wZW5faG93KGludCBmbGFncywgdW1vZGVfdCBtb2RlKVxuIHtcbkBAIC0xMjgzLDYgKzEyODQsOCBAQCBpbmxpbmUgaW50IGJ1aWxkX29wZW5fZmxhZ3MoY29uc3Qgc3RydWN0IG9wZW5faG93ICpob3csIHN0cnVjdCBvcGVuX2ZsYWdzICpvcClcbiBcdFx0bG9va3VwX2ZsYWdzIHw9IExPT0tVUF9GT0xMT1c7XG4gXHRpZiAoZmxhZ3MgXHUwMDI2IE9fRU1QVFlQQVRIKVxuIFx0XHRsb29rdXBfZmxhZ3MgfD0gTE9PS1VQX0VNUFRZO1xuK1x0aWYgKGZsYWdzIFx1MDAyNiBPX0FMVClcbitcdFx0bG9va3VwX2ZsYWdzIHw9IExPT0tVUF9BTFQ7XG4gXG4gXHRpZiAoaG93LVx1MDAzZXJlc29sdmUgXHUwMDI2IFJFU09MVkVfTk9fWERFVilcbiBcdFx0bG9va3VwX2ZsYWdzIHw9IExPT0tVUF9OT19YREVWO1xuZGlmZiAtLWdpdCBhL2ZzL292ZXJsYXlmcy9wYXJhbXMuYyBiL2ZzL292ZXJsYXlmcy9wYXJhbXMuY1xuaW5kZXggYzkzZmNhYTQ1ZDRhMzYuLmM1YTllODU4ZTM2NjVlIDEwMDY0NFxuLS0tIGEvZnMvb3ZlcmxheWZzL3BhcmFtcy5jXG4rKysgYi9mcy9vdmVybGF5ZnMvcGFyYW1zLmNcbkBAIC0xMDQ2LDEwICsxMDQ2LDExIEBAIGludCBvdmxfZnNfcGFyYW1zX3ZlcmlmeShjb25zdCBzdHJ1Y3Qgb3ZsX2ZzX2NvbnRleHQgKmN0eCxcbiAgKiBQcmludHMgdGhlIG1vdW50IG9wdGlvbnMgZm9yIGEgZ2l2ZW4gc3VwZXJibG9jay5cbiAgKiBSZXR1cm5zIHplcm87IGRvZXMgbm90IGZhaWwuXG4gICovXG4taW50IG92bF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4raW50IG92bF9nZXRfb3B0aW9ucyhzdHJ1Y3Qgc2Jfb3B0X2N0eCAqY3R4LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4ge1xuIFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRlbnRyeS1cdTAwM2VkX3NiO1xuIFx0c3RydWN0IG92bF9mcyAqb2ZzID0gT1ZMX0ZTKHNiKTtcbitcdHN0cnVjdCBwYXRoIHVwcGVycGF0aDtcbiBcdHNpemVfdCBuciwgbnJfbWVyZ2VkX2xvd2VyLCBucl9sb3dlciA9IDA7XG4gXHRjaGFyICoqbG93ZXJkaXJzID0gb2ZzLVx1MDAzZWNvbmZpZy5sb3dlcmRpcnM7XG4gXG5AQCAtMTA2Miw0MyArMTA2Myw0NyBAQCBpbnQgb3ZsX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcdCAqIHdpdGggdGhlIG5ldyBsb3dlcmRpcisgYW5kIGRhdGFkaXIrIG1vdW50IG9wdGlvbnMuXG4gXHQgKi9cbiBcdGlmIChsb3dlcmRpcnNbMF0pIHtcbi1cdFx0c2VxX3Nob3dfb3B0aW9uKG0sIFwibG93ZXJkaXJcIiwgbG93ZXJkaXJzWzBdKTtcbitcdFx0c2JfYWRkX29wdGlvbihjdHgsIFwibG93ZXJkaXJcIiwgbG93ZXJkaXJzWzBdKTtcbiBcdH0gZWxzZSB7XG4gXHRcdG5yX2xvd2VyID0gb2ZzLVx1MDAzZW51bWxheWVyO1xuIFx0XHRucl9tZXJnZWRfbG93ZXIgPSBucl9sb3dlciAtIG9mcy1cdTAwM2VudW1kYXRhbGF5ZXI7XG4gXHR9XG4gXHRmb3IgKG5yID0gMTsgbnIgXHUwMDNjIG5yX2xvd2VyOyBucisrKSB7XG4rXHRcdHN0cnVjdCBwYXRoIGxvd2VycGF0aCA9IHtcbitcdFx0XHQubW50ID0gb2ZzLVx1MDAzZWxheWVyc1tucl0ubW50LFxuK1x0XHRcdC5kZW50cnkgPSBvZnMtXHUwMDNlbGF5ZXJzW25yXS5tbnQtXHUwMDNlbW50X3Jvb3QsXG4rXHRcdH07XG4gXHRcdGlmIChuciBcdTAwM2MgbnJfbWVyZ2VkX2xvd2VyKVxuLVx0XHRcdHNlcV9zaG93X29wdGlvbihtLCBcImxvd2VyZGlyK1wiLCBsb3dlcmRpcnNbbnJdKTtcbitcdFx0XHRzYl9hZGRfb3B0aW9uX3BhdGgoY3R4LCBcImxvd2VyZGlyK1wiLCBsb3dlcmRpcnNbbnJdLFxuK1x0XHRcdFx0XHQgICBcdTAwMjZsb3dlcnBhdGgpO1xuIFx0XHRlbHNlXG4tXHRcdFx0c2VxX3Nob3dfb3B0aW9uKG0sIFwiZGF0YWRpcitcIiwgbG93ZXJkaXJzW25yXSk7XG4rXHRcdFx0c2JfYWRkX29wdGlvbl9wYXRoKGN0eCwgXCJkYXRhZGlyK1wiLCBsb3dlcmRpcnNbbnJdLFxuK1x0XHRcdFx0XHQgICBcdTAwMjZsb3dlcnBhdGgpO1xuIFx0fVxuIFx0aWYgKG9mcy1cdTAwM2Vjb25maWcudXBwZXJkaXIpIHtcbi1cdFx0c2VxX3Nob3dfb3B0aW9uKG0sIFwidXBwZXJkaXJcIiwgb2ZzLVx1MDAzZWNvbmZpZy51cHBlcmRpcik7XG4tXHRcdHNlcV9zaG93X29wdGlvbihtLCBcIndvcmtkaXJcIiwgb2ZzLVx1MDAzZWNvbmZpZy53b3JrZGlyKTtcbitcdFx0b3ZsX3BhdGhfdXBwZXIoc2ItXHUwMDNlc19yb290LCBcdTAwMjZ1cHBlcnBhdGgpO1xuK1x0XHRzYl9hZGRfb3B0aW9uX3BhdGgoY3R4LCBcInVwcGVyZGlyXCIsIG9mcy1cdTAwM2Vjb25maWcudXBwZXJkaXIsIFx1MDAyNnVwcGVycGF0aCk7XG4rXHRcdHNiX2FkZF9vcHRpb24oY3R4LCBcIndvcmtkaXJcIiwgb2ZzLVx1MDAzZWNvbmZpZy53b3JrZGlyKTtcbiBcdH1cbiBcdGlmIChvZnMtXHUwMDNlY29uZmlnLmRlZmF1bHRfcGVybWlzc2lvbnMpXG4tXHRcdHNlcV9wdXRzKG0sIFwiLGRlZmF1bHRfcGVybWlzc2lvbnNcIik7XG4rXHRcdHNiX2FkZF9vcHRpb24oY3R4LCBcImRlZmF1bHRfcGVybWlzc2lvbnNcIiwgTlVMTCk7XG4gXHRpZiAob2ZzLVx1MDAzZWNvbmZpZy5yZWRpcmVjdF9tb2RlICE9IG92bF9yZWRpcmVjdF9tb2RlX2RlZigpKVxuLVx0XHRzZXFfcHJpbnRmKG0sIFwiLHJlZGlyZWN0X2Rpcj0lc1wiLFxuLVx0XHRcdCAgIG92bF9yZWRpcmVjdF9tb2RlKFx1MDAyNm9mcy1cdTAwM2Vjb25maWcpKTtcbitcdFx0c2JfYWRkX29wdGlvbihjdHgsIFwicmVkaXJlY3RfZGlyXCIsIG92bF9yZWRpcmVjdF9tb2RlKFx1MDAyNm9mcy1cdTAwM2Vjb25maWcpKTtcbiBcdGlmIChvZnMtXHUwMDNlY29uZmlnLmluZGV4ICE9IG92bF9pbmRleF9kZWYpXG4tXHRcdHNlcV9wcmludGYobSwgXCIsaW5kZXg9JXNcIiwgc3RyX29uX29mZihvZnMtXHUwMDNlY29uZmlnLmluZGV4KSk7XG4rXHRcdHNiX2FkZF9vcHRpb24oY3R4LCBcImluZGV4XCIsIHN0cl9vbl9vZmYob2ZzLVx1MDAzZWNvbmZpZy5pbmRleCkpO1xuIFx0aWYgKG9mcy1cdTAwM2Vjb25maWcudXVpZCAhPSBvdmxfdXVpZF9kZWYoKSlcbi1cdFx0c2VxX3ByaW50ZihtLCBcIix1dWlkPSVzXCIsIG92bF91dWlkX21vZGUoXHUwMDI2b2ZzLVx1MDAzZWNvbmZpZykpO1xuK1x0XHRzYl9hZGRfb3B0aW9uKGN0eCwgXCJ1dWlkXCIsIG92bF91dWlkX21vZGUoXHUwMDI2b2ZzLVx1MDAzZWNvbmZpZykpO1xuIFx0aWYgKG9mcy1cdTAwM2Vjb25maWcubmZzX2V4cG9ydCAhPSBvdmxfbmZzX2V4cG9ydF9kZWYpXG4tXHRcdHNlcV9wcmludGYobSwgXCIsbmZzX2V4cG9ydD0lc1wiLFxuLVx0XHRcdCAgIHN0cl9vbl9vZmYob2ZzLVx1MDAzZWNvbmZpZy5uZnNfZXhwb3J0KSk7XG4rXHRcdHNiX2FkZF9vcHRpb24oY3R4LCBcIm5mc19leHBvcnRcIiwgc3RyX29uX29mZihvZnMtXHUwMDNlY29uZmlnLm5mc19leHBvcnQpKTtcbiBcdGlmIChvZnMtXHUwMDNlY29uZmlnLnhpbm8gIT0gb3ZsX3hpbm9fZGVmKCkgXHUwMDI2XHUwMDI2ICFvdmxfc2FtZV9mcyhvZnMpKVxuLVx0XHRzZXFfcHJpbnRmKG0sIFwiLHhpbm89JXNcIiwgb3ZsX3hpbm9fbW9kZShcdTAwMjZvZnMtXHUwMDNlY29uZmlnKSk7XG4rXHRcdHNiX2FkZF9vcHRpb24oY3R4LCBcInhpbm9cIiwgb3ZsX3hpbm9fbW9kZShcdTAwMjZvZnMtXHUwMDNlY29uZmlnKSk7XG4gXHRpZiAob2ZzLVx1MDAzZWNvbmZpZy5tZXRhY29weSAhPSBvdmxfbWV0YWNvcHlfZGVmKVxuLVx0XHRzZXFfcHJpbnRmKG0sIFwiLG1ldGFjb3B5PSVzXCIsIHN0cl9vbl9vZmYob2ZzLVx1MDAzZWNvbmZpZy5tZXRhY29weSkpO1xuK1x0XHRzYl9hZGRfb3B0aW9uKGN0eCwgXCJtZXRhY29weVwiLCBzdHJfb25fb2ZmKG9mcy1cdTAwM2Vjb25maWcubWV0YWNvcHkpKTtcbiBcdGlmIChvZnMtXHUwMDNlY29uZmlnLmZzeW5jX21vZGUgIT0gb3ZsX2ZzeW5jX21vZGVfZGVmKCkpXG4tXHRcdHNlcV9wcmludGYobSwgXCIsZnN5bmM9JXNcIiwgb3ZsX2ZzeW5jX21vZGUoXHUwMDI2b2ZzLVx1MDAzZWNvbmZpZykpO1xuK1x0XHRzYl9hZGRfb3B0aW9uKGN0eCwgXCJmc3luY1wiLCBvdmxfZnN5bmNfbW9kZShcdTAwMjZvZnMtXHUwMDNlY29uZmlnKSk7XG4gXHRpZiAob2ZzLVx1MDAzZWNvbmZpZy51c2VyeGF0dHIpXG4tXHRcdHNlcV9wdXRzKG0sIFwiLHVzZXJ4YXR0clwiKTtcbitcdFx0c2JfYWRkX29wdGlvbihjdHgsIFwidXNlcnhhdHRyXCIsIE5VTEwpO1xuIFx0aWYgKG9mcy1cdTAwM2Vjb25maWcudmVyaXR5X21vZGUgIT0gb3ZsX3Zlcml0eV9tb2RlX2RlZigpKVxuLVx0XHRzZXFfcHJpbnRmKG0sIFwiLHZlcml0eT0lc1wiLFxuLVx0XHRcdCAgIG92bF92ZXJpdHlfbW9kZShcdTAwMjZvZnMtXHUwMDNlY29uZmlnKSk7XG4rXHRcdHNiX2FkZF9vcHRpb24oY3R4LCBcInZlcml0eVwiLCBvdmxfdmVyaXR5X21vZGUoXHUwMDI2b2ZzLVx1MDAzZWNvbmZpZykpO1xuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL2ZzL292ZXJsYXlmcy9wYXJhbXMuaCBiL2ZzL292ZXJsYXlmcy9wYXJhbXMuaFxuaW5kZXggZmZkNTNjZGQ4NDgyN2MuLjJjZjljNGYxODhhOWNiIDEwMDY0NFxuLS0tIGEvZnMvb3ZlcmxheWZzL3BhcmFtcy5oXG4rKysgYi9mcy9vdmVybGF5ZnMvcGFyYW1zLmhcbkBAIC00MCw1ICs0MCw1IEBAIGludCBvdmxfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYyk7XG4gdm9pZCBvdmxfZnJlZV9mcyhzdHJ1Y3Qgb3ZsX2ZzICpvZnMpO1xuIGludCBvdmxfZnNfcGFyYW1zX3ZlcmlmeShjb25zdCBzdHJ1Y3Qgb3ZsX2ZzX2NvbnRleHQgKmN0eCxcbiBcdFx0XHQgc3RydWN0IG92bF9jb25maWcgKmNvbmZpZyk7XG4taW50IG92bF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuK2ludCBvdmxfZ2V0X29wdGlvbnMoc3RydWN0IHNiX29wdF9jdHggKmN0eCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbiBjb25zdCBjaGFyICpvdmxfeGlub19tb2RlKHN0cnVjdCBvdmxfY29uZmlnICpjb25maWcpO1xuZGlmZiAtLWdpdCBhL2ZzL292ZXJsYXlmcy9zdXBlci5jIGIvZnMvb3ZlcmxheWZzL3N1cGVyLmNcbmluZGV4IDYwZjBiN2NlZWYwYTZkLi40YjU3YjJkYjA4NTIyNSAxMDA2NDRcbi0tLSBhL2ZzL292ZXJsYXlmcy9zdXBlci5jXG4rKysgYi9mcy9vdmVybGF5ZnMvc3VwZXIuY1xuQEAgLTMwMiw3ICszMDIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgb3ZsX3N1cGVyX29wZXJhdGlvbnMgPSB7XG4gXHQucHV0X3N1cGVyXHQ9IG92bF9wdXRfc3VwZXIsXG4gXHQuc3luY19mc1x0PSBvdmxfc3luY19mcyxcbiBcdC5zdGF0ZnNcdFx0PSBvdmxfc3RhdGZzLFxuLVx0LnNob3dfb3B0aW9uc1x0PSBvdmxfc2hvd19vcHRpb25zLFxuK1x0LmdldF9vcHRpb25zXHQ9IG92bF9nZXRfb3B0aW9ucyxcbiB9O1xuIFxuICNkZWZpbmUgT1ZMX1dPUktESVJfTkFNRSBcIndvcmtcIlxuQEAgLTUyOSw2ICs1MjksNyBAQCBzdGF0aWMgaW50IG92bF9nZXRfdXBwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IG92bF9mcyAqb2ZzLFxuIFxuIFx0LyogRG9uJ3QgaW5oZXJpdCBhdGltZSBmbGFncyAqL1xuIFx0dXBwZXJfbW50LVx1MDAzZW1udF9mbGFncyBcdTAwMjY9IH4oTU5UX05PQVRJTUUgfCBNTlRfTk9ESVJBVElNRSB8IE1OVF9SRUxBVElNRSk7XG4rXHR1cHBlcl9tbnQtXHUwMDNlbW50X2ZsYWdzIHw9IE1OVF9DTE9OQUJMRTtcbiBcdHVwcGVyX2xheWVyLVx1MDAzZW1udCA9IHVwcGVyX21udDtcbiBcdHVwcGVyX2xheWVyLVx1MDAzZWlkeCA9IDA7XG4gXHR1cHBlcl9sYXllci1cdTAwM2Vmc2lkID0gMDtcbkBAIC0xMTA1LDcgKzExMDYsNyBAQCBzdGF0aWMgaW50IG92bF9nZXRfbGF5ZXJzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBvdmxfZnMgKm9mcyxcbiBcdFx0ICogTWFrZSBsb3dlciBsYXllcnMgUi9PLiAgVGhhdCB3YXkgZmNobW9kL2ZjaG93biBvbiBsb3dlciBmaWxlXG4gXHRcdCAqIHdpbGwgZmFpbCBpbnN0ZWFkIG9mIG1vZGlmeWluZyBsb3dlciBmcy5cbiBcdFx0ICovXG4tXHRcdG1udC1cdTAwM2VtbnRfZmxhZ3MgfD0gTU5UX1JFQURPTkxZIHwgTU5UX05PQVRJTUU7XG4rXHRcdG1udC1cdTAwM2VtbnRfZmxhZ3MgfD0gTU5UX1JFQURPTkxZIHwgTU5UX05PQVRJTUUgfCBNTlRfQ0xPTkFCTEU7XG4gXG4gXHRcdGxheWVyc1tvZnMtXHUwMDNlbnVtbGF5ZXJdLnRyYXAgPSB0cmFwO1xuIFx0XHRsYXllcnNbb2ZzLVx1MDAzZW51bWxheWVyXS5tbnQgPSBtbnQ7XG5kaWZmIC0tZ2l0IGEvZnMvcGlkZnMuYyBiL2ZzL3BpZGZzLmNcbmluZGV4IGFhYTYwOWRkYWIwNDQzLi4zODQzYWNkNjU5NGRlMCAxMDA2NDRcbi0tLSBhL2ZzL3BpZGZzLmNcbisrKyBiL2ZzL3BpZGZzLmNcbkBAIC04NDAsNyArODQwLDcgQEAgc3RhdGljIGNoYXIgKnBpZGZzX2RuYW1lKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqYnVmZmVyLCBpbnQgYnVmbGVuKVxuIFx0cmV0dXJuIGR5bmFtaWNfZG5hbWUoYnVmZmVyLCBidWZsZW4sIFwiYW5vbl9pbm9kZTpbcGlkZmRdXCIpO1xuIH1cbiBcbi1jb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgcGlkZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7XG4rc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBwaWRmc19kZW50cnlfb3BlcmF0aW9ucyA9IHtcbiBcdC5kX2RuYW1lXHQ9IHBpZGZzX2RuYW1lLFxuIFx0LmRfcHJ1bmVcdD0gc3Rhc2hlZF9kZW50cnlfcHJ1bmUsXG4gfTtcbkBAIC0xMTUxLDYgKzExNTEsOCBAQCB2b2lkIF9faW5pdCBwaWRmc19pbml0KHZvaWQpXG4gXHRpZiAoSVNfRVJSKHBpZGZzX21udCkpXG4gXHRcdHBhbmljKFwiRmFpbGVkIHRvIG1vdW50IHBpZGZzIHBzZXVkbyBmaWxlc3lzdGVtXCIpO1xuIFxuK1x0cGlkZnNfbW50LVx1MDAzZW1udF9mbGFncyB8PSBNTlRfQ0xPTkFCTEU7XG4rXG4gXHRwaWRmc19yb290X3BhdGgubW50ID0gcGlkZnNfbW50O1xuIFx0cGlkZnNfcm9vdF9wYXRoLmRlbnRyeSA9IHBpZGZzX21udC1cdTAwM2VtbnRfcm9vdDtcbiB9XG5kaWZmIC0tZ2l0IGEvZnMvcHJvY19uYW1lc3BhY2UuYyBiL2ZzL3Byb2NfbmFtZXNwYWNlLmNcbmluZGV4IDVjNTU1ZGI2OGFhMjEyLi45NGJjNGM5YWE0M2YxNiAxMDA2NDRcbi0tLSBhL2ZzL3Byb2NfbmFtZXNwYWNlLmNcbisrKyBiL2ZzL3Byb2NfbmFtZXNwYWNlLmNcbkBAIC05OCwyMSArOTgsMjcgQEAgc3RhdGljIHZvaWQgc2hvd190eXBlKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdH1cbiB9XG4gXG4rc3RhdGljIGludCBzaG93X2Rldm5hbWUoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgdmZzbW91bnQgKm1udClcbit7XG4rXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gbW50LVx1MDAzZW1udF9zYjtcbitcbitcdGlmIChzYi1cdTAwM2VzX29wLVx1MDAzZXNob3dfZGV2bmFtZSlcbitcdFx0cmV0dXJuIHNiLVx1MDAzZXNfb3AtXHUwMDNlc2hvd19kZXZuYW1lKG0sIG1udC1cdTAwM2VtbnRfcm9vdCk7XG4rXG4rXHRtYW5nbGUobSwgc2ItXHUwMDNlc19kZXZuYW1lKTtcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IHNob3dfdmZzbW50KHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHZmc21vdW50ICptbnQpXG4ge1xuIFx0c3RydWN0IHByb2NfbW91bnRzICpwID0gbS1cdTAwM2Vwcml2YXRlO1xuLVx0c3RydWN0IG1vdW50ICpyID0gcmVhbF9tb3VudChtbnQpO1xuIFx0c3RydWN0IHBhdGggbW50X3BhdGggPSB7IC5kZW50cnkgPSBtbnQtXHUwMDNlbW50X3Jvb3QsIC5tbnQgPSBtbnQgfTtcbiBcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBtbnRfcGF0aC5kZW50cnktXHUwMDNlZF9zYjtcbiBcdGludCBlcnI7XG4gXG4tXHRpZiAoc2ItXHUwMDNlc19vcC1cdTAwM2VzaG93X2Rldm5hbWUpIHtcbi1cdFx0ZXJyID0gc2ItXHUwMDNlc19vcC1cdTAwM2VzaG93X2Rldm5hbWUobSwgbW50X3BhdGguZGVudHJ5KTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIG91dDtcbi1cdH0gZWxzZSB7XG4tXHRcdG1hbmdsZShtLCByLVx1MDAzZW1udF9kZXZuYW1lKTtcbi1cdH1cbitcdGVyciA9IHNob3dfZGV2bmFtZShtLCBtbnQpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBvdXQ7XG4gXHRzZXFfcHV0YyhtLCAnICcpO1xuIFx0LyogbW91bnRwb2ludHMgb3V0c2lkZSBvZiBjaHJvb3QgamFpbCB3aWxsIGdpdmUgU0VRX1NLSVAgb24gdGhpcyAqL1xuIFx0ZXJyID0gc2VxX3BhdGhfcm9vdChtLCBcdTAwMjZtbnRfcGF0aCwgXHUwMDI2cC1cdTAwM2Vyb290LCBcIiBcXHRcXG5cXFxcXCIpO1xuQEAgLTEyNSw4ICsxMzEsNyBAQCBzdGF0aWMgaW50IHNob3dfdmZzbW50KHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHZmc21vdW50ICptbnQpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIG91dDtcbiBcdHNob3dfdmZzbW50X29wdHMobSwgbW50KTtcbi1cdGlmIChzYi1cdTAwM2VzX29wLVx1MDAzZXNob3dfb3B0aW9ucylcbi1cdFx0ZXJyID0gc2ItXHUwMDNlc19vcC1cdTAwM2VzaG93X29wdGlvbnMobSwgbW50X3BhdGguZGVudHJ5KTtcbitcdGVyciA9IG1udF9zaG93X29wdGlvbnMobSwgbW50KTtcbiBcdHNlcV9wdXRzKG0sIFwiIDAgMFxcblwiKTtcbiBvdXQ6XG4gXHRyZXR1cm4gZXJyO1xuQEAgLTE3MiwxOSArMTc3LDE0IEBAIHN0YXRpYyBpbnQgc2hvd19tb3VudGluZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgdmZzbW91bnQgKm1udClcbiBcdHNlcV9wdXRzKG0sIFwiIC0gXCIpO1xuIFx0c2hvd190eXBlKG0sIHNiKTtcbiBcdHNlcV9wdXRjKG0sICcgJyk7XG4tXHRpZiAoc2ItXHUwMDNlc19vcC1cdTAwM2VzaG93X2Rldm5hbWUpIHtcbi1cdFx0ZXJyID0gc2ItXHUwMDNlc19vcC1cdTAwM2VzaG93X2Rldm5hbWUobSwgbW50LVx1MDAzZW1udF9yb290KTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIG91dDtcbi1cdH0gZWxzZSB7XG4tXHRcdG1hbmdsZShtLCByLVx1MDAzZW1udF9kZXZuYW1lKTtcbi1cdH1cbitcdGVyciA9IHNob3dfZGV2bmFtZShtLCBtbnQpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBvdXQ7XG4gXHRzZXFfcHV0cyhtLCBzYl9yZG9ubHkoc2IpID8gXCIgcm9cIiA6IFwiIHJ3XCIpO1xuIFx0ZXJyID0gc2hvd19zYl9vcHRzKG0sIHNiKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gb3V0O1xuLVx0aWYgKHNiLVx1MDAzZXNfb3AtXHUwMDNlc2hvd19vcHRpb25zKVxuLVx0XHRlcnIgPSBzYi1cdTAwM2VzX29wLVx1MDAzZXNob3dfb3B0aW9ucyhtLCBtbnQtXHUwMDNlbW50X3Jvb3QpO1xuK1x0ZXJyID0gbW50X3Nob3dfb3B0aW9ucyhtLCBtbnQpO1xuIFx0c2VxX3B1dGMobSwgJ1xcbicpO1xuIG91dDpcbiBcdHJldHVybiBlcnI7XG5AQCAtMTkzLDIxICsxOTMsMTUgQEAgc3RhdGljIGludCBzaG93X21vdW50aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB2ZnNtb3VudCAqbW50KVxuIHN0YXRpYyBpbnQgc2hvd192ZnNzdGF0KHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHZmc21vdW50ICptbnQpXG4ge1xuIFx0c3RydWN0IHByb2NfbW91bnRzICpwID0gbS1cdTAwM2Vwcml2YXRlO1xuLVx0c3RydWN0IG1vdW50ICpyID0gcmVhbF9tb3VudChtbnQpO1xuIFx0c3RydWN0IHBhdGggbW50X3BhdGggPSB7IC5kZW50cnkgPSBtbnQtXHUwMDNlbW50X3Jvb3QsIC5tbnQgPSBtbnQgfTtcbiBcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBtbnRfcGF0aC5kZW50cnktXHUwMDNlZF9zYjtcbiBcdGludCBlcnI7XG4gXG4gXHQvKiBkZXZpY2UgKi9cbiBcdHNlcV9wdXRzKG0sIFwiZGV2aWNlIFwiKTtcbi1cdGlmIChzYi1cdTAwM2VzX29wLVx1MDAzZXNob3dfZGV2bmFtZSkge1xuLVx0XHRlcnIgPSBzYi1cdTAwM2VzX29wLVx1MDAzZXNob3dfZGV2bmFtZShtLCBtbnRfcGF0aC5kZW50cnkpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdGdvdG8gb3V0O1xuLVx0fSBlbHNlIHtcbi1cdFx0bWFuZ2xlKG0sIHItXHUwMDNlbW50X2Rldm5hbWUpO1xuLVx0fVxuLVxuK1x0ZXJyID0gc2hvd19kZXZuYW1lKG0sIG1udCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIG91dDtcbiBcdC8qIG1vdW50IHBvaW50ICovXG4gXHRzZXFfcHV0cyhtLCBcIiBtb3VudGVkIG9uIFwiKTtcbiBcdC8qIG1vdW50cG9pbnRzIG91dHNpZGUgb2YgY2hyb290IGphaWwgd2lsbCBnaXZlIFNFUV9TS0lQIG9uIHRoaXMgKi9cbmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuY1xuaW5kZXggYThmZDYxMTM2YWFmZTUuLmU1NTMxY2I4OGY4OTE3IDEwMDY0NFxuLS0tIGEvZnMvc3VwZXIuY1xuKysrIGIvZnMvc3VwZXIuY1xuQEAgLTI4MCw2ICsyODAsNyBAQCBzdGF0aWMgdm9pZCBkZXN0cm95X3N1cGVyX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0c2VjdXJpdHlfc2JfZnJlZShzKTtcbiBcdHB1dF91c2VyX25zKHMtXHUwMDNlc191c2VyX25zKTtcbiBcdGtmcmVlKHMtXHUwMDNlc19zdWJ0eXBlKTtcbitcdGtmcmVlX2NvbnN0KHMtXHUwMDNlc19kZXZuYW1lKTtcbiBcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBTQl9GUkVFWkVfTEVWRUxTOyBpKyspXG4gXHRcdHBlcmNwdV9mcmVlX3J3c2VtKFx1MDAyNnMtXHUwMDNlc193cml0ZXJzLnJ3X3NlbVtpXSk7XG4gXHRrZnJlZShzKTtcbkBAIC0zMTUsNyArMzE2LDcgQEAgc3RhdGljIHZvaWQgZGVzdHJveV91bnVzZWRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzKVxuICAqXHRyZXR1cm5zIGEgcG9pbnRlciBuZXcgc3VwZXJibG9jayBvciAlTlVMTCBpZiBhbGxvY2F0aW9uIGhhZCBmYWlsZWQuXG4gICovXG4gc3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqYWxsb2Nfc3VwZXIoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsIGludCBmbGFncyxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMpXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLCBjb25zdCBjaGFyICpuYW1lKVxuIHtcbiBcdHN0cnVjdCBzdXBlcl9ibG9jayAqcyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBzdXBlcl9ibG9jayk7XG4gXHRzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZGVmYXVsdF9vcDtcbkBAIC0zNDQsNiArMzQ1LDEzIEBAIHN0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmFsbG9jX3N1cGVyKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlLCBpbnQgZmxhZ3MsXG4gXHQgKi9cbiBcdGRvd25fd3JpdGVfbmVzdGVkKFx1MDAyNnMtXHUwMDNlc191bW91bnQsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbiBcbitcdGlmIChuYW1lKVxuK1x0XHRzLVx1MDAzZXNfZGV2bmFtZSA9IGtzdHJkdXBfY29uc3QobmFtZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbitcdGVsc2VcbitcdFx0cy1cdTAwM2VzX2Rldm5hbWUgPSBcIm5vbmVcIjtcbitcdGlmICghcy1cdTAwM2VzX2Rldm5hbWUpXG4rXHRcdGdvdG8gZmFpbDtcbitcbiBcdGlmIChzZWN1cml0eV9zYl9hbGxvYyhzKSlcbiBcdFx0Z290byBmYWlsO1xuIFxuQEAgLTc2Myw3ICs3NzEsNyBAQCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNnZXRfZmMoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0fVxuIFx0aWYgKCFzKSB7XG4gXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNiX2xvY2spO1xuLVx0XHRzID0gYWxsb2Nfc3VwZXIoZmMtXHUwMDNlZnNfdHlwZSwgZmMtXHUwMDNlc2JfZmxhZ3MsIHVzZXJfbnMpO1xuK1x0XHRzID0gYWxsb2Nfc3VwZXIoZmMtXHUwMDNlZnNfdHlwZSwgZmMtXHUwMDNlc2JfZmxhZ3MsIHVzZXJfbnMsIGZjLVx1MDAzZXNvdXJjZSk7XG4gXHRcdGlmICghcylcbiBcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcdFx0Z290byByZXRyeTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZjbnRsLmggYi9pbmNsdWRlL2xpbnV4L2ZjbnRsLmhcbmluZGV4IDZhZDZiOWU3YTIyNmFmLi5mOTQyNDExYzhlZDdkZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZmNudGwuaFxuKysrIGIvaW5jbHVkZS9saW51eC9mY250bC5oXG5AQCAtMTEsNyArMTEsNyBAQFxuIFx0KE9fUkRPTkxZIHwgT19XUk9OTFkgfCBPX1JEV1IgfCBPX0NSRUFUIHwgT19FWENMIHwgT19OT0NUVFkgfCBPX1RSVU5DIHwgXFxcbiBcdCBPX0FQUEVORCB8IE9fTkRFTEFZIHwgT19OT05CTE9DSyB8IF9fT19TWU5DIHwgT19EU1lOQyB8IFxcXG4gXHQgRkFTWU5DXHR8IE9fRElSRUNUIHwgT19MQVJHRUZJTEUgfCBPX0RJUkVDVE9SWSB8IE9fTk9GT0xMT1cgfCBcXFxuLVx0IE9fTk9BVElNRSB8IE9fQ0xPRVhFQyB8IE9fUEFUSCB8IF9fT19UTVBGSUxFIHwgT19FTVBUWVBBVEgpXG4rXHQgT19OT0FUSU1FIHwgT19DTE9FWEVDIHwgT19QQVRIIHwgX19PX1RNUEZJTEUgfCBPX0VNUFRZUEFUSCB8IE9fQUxUKVxuIFxuIC8qIExpc3Qgb2YgYWxsIHZhbGlkIGZsYWdzIGZvciBvcGVuYXQyKDIpJ3MgaG93LVx1MDAzZWZsYWdzIGFyZ3VtZW50LiAqL1xuICNkZWZpbmUgVkFMSURfT1BFTkFUMl9GTEFHU1x0KFZBTElEX09QRU5fRkxBR1MgfCBPUEVOQVQyX1JFR1VMQVIpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy9zdXBlci5oIGIvaW5jbHVkZS9saW51eC9mcy9zdXBlci5oXG5pbmRleCA0MDU2MTI2NzgxMTUxZS4uNmYwZDc3ODk0MGY5MDQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZnMvc3VwZXIuaFxuQEAgLTIzNyw0ICsyMzcsMTQgQEAgaW50IHRoYXdfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzdXBlciwgZW51bSBmcmVlemVfaG9sZGVyIHdobyxcbiBcbiBpbnQgc2JfaW5pdF9kaW9fZG9uZV93cShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbiBcbitzdHJ1Y3Qgc2Jfb3B0X2N0eCB7XG4rXHR2b2lkICgqYWN0b3IpKHN0cnVjdCBzYl9vcHRfY3R4ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlLFxuK1x0XHQgICAgICBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCk7XG4rXHR2b2lkICpkYXRhO1xuK307XG4rXG4rdm9pZCBzYl9hZGRfb3B0aW9uKHN0cnVjdCBzYl9vcHRfY3R4ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKTtcbit2b2lkIHNiX2FkZF9vcHRpb25fcGF0aChzdHJ1Y3Qgc2Jfb3B0X2N0eCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSxcbitcdFx0XHRjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCk7XG4rXG4gI2VuZGlmIC8qIF9MSU5VWF9GU19TVVBFUl9IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy9zdXBlcl90eXBlcy5oIGIvaW5jbHVkZS9saW51eC9mcy9zdXBlcl90eXBlcy5oXG5pbmRleCBlZjc5NDFlOWRjNzlhYy4uZjIwNTc1OWFmMWE2MzMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyX3R5cGVzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZnMvc3VwZXJfdHlwZXMuaFxuQEAgLTM2LDYgKzM2LDcgQEAgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3Q7XG4gc3RydWN0IHdyaXRlYmFja19jb250cm9sO1xuIHN0cnVjdCB4YXR0cl9oYW5kbGVyO1xuIHN0cnVjdCBmc2Vycm9yX2V2ZW50O1xuK3N0cnVjdCBzYl9vcHRfY3R4O1xuIFxuIGV4dGVybiBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmJsb2NrZGV2X3N1cGVyYmxvY2s7XG4gXG5AQCAtOTksNiArMTAwLDcgQEAgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMge1xuIFx0aW50ICgqc3RhdGZzKShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICprc3RhdGZzKTtcbiBcdHZvaWQgKCp1bW91bnRfYmVnaW4pKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuIFxuK1x0aW50ICgqZ2V0X29wdGlvbnMpKHN0cnVjdCBzYl9vcHRfY3R4ICpjdHgsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG4gXHRpbnQgKCpzaG93X29wdGlvbnMpKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuIFx0aW50ICgqc2hvd19kZXZuYW1lKShzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbiBcdGludCAoKnNob3dfcGF0aCkoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG5AQCAtMjgzLDYgKzI4NSw4IEBAIHN0cnVjdCBzdXBlcl9ibG9jayB7XG4gXHQgKi9cbiBcdGF0b21pY190XHRcdFx0XHRzX2lzd19ucl9pbl9mbGlnaHQ7XG4gI2VuZGlmXG4rXHQvKiBOYW1lIG9mIGRldmljZSBlLmcuIC9kZXYvZHNrL2hkYTEgKi9cbitcdGNvbnN0IGNoYXIgXHRcdFx0XHQqc19kZXZuYW1lO1xuIH0gX19yYW5kb21pemVfbGF5b3V0O1xuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb3VudC5oIGIvaW5jbHVkZS9saW51eC9tb3VudC5oXG5pbmRleCBhY2ZlN2VmODZhMWIzZi4uZDA3MTg1NWNhNGVkZWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21vdW50LmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW91bnQuaFxuQEAgLTQ0LDYgKzQ0LDcgQEAgZW51bSBtb3VudF9mbGFncyB7XG4gXHRNTlRfTE9DS0VEXHRcdD0gMHg4MDAwMDAsXG4gXHRNTlRfRE9PTUVEXHRcdD0gMHgxMDAwMDAwLFxuIFx0TU5UX1NZTkNfVU1PVU5UXHRcdD0gMHgyMDAwMDAwLFxuK1x0TU5UX0NMT05BQkxFXHRcdD0gMHg0MDAwMDAwLFxuIFx0TU5UX1VNT1VOVFx0XHQ9IDB4ODAwMDAwMCxcbiBcbiBcdE1OVF9VU0VSX1NFVFRBQkxFX01BU0sgID0gTU5UX05PU1VJRCB8IE1OVF9OT0RFViB8IE1OVF9OT0VYRUNcbkBAIC01Miw3ICs1Myw3IEBAIGVudW0gbW91bnRfZmxhZ3Mge1xuIFx0TU5UX0FUSU1FX01BU0sgPSBNTlRfTk9BVElNRSB8IE1OVF9OT0RJUkFUSU1FIHwgTU5UX1JFTEFUSU1FLFxuIFxuIFx0TU5UX0lOVEVSTkFMX0ZMQUdTID0gTU5UX0lOVEVSTkFMIHwgTU5UX0RPT01FRCB8XG4tXHRcdFx0ICAgICBNTlRfU1lOQ19VTU9VTlQgfCBNTlRfTE9DS0VEXG4rXHRcdFx0ICAgICBNTlRfU1lOQ19VTU9VTlQgfCBNTlRfTE9DS0VEIHwgTU5UX0NMT05BQkxFXG4gfTtcbiBcbiBzdHJ1Y3QgdmZzbW91bnQge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmFtZWkuaCBiL2luY2x1ZGUvbGludXgvbmFtZWkuaFxuaW5kZXggZWJlNmUyOWY3ZTkzYmEuLmMyMWRjNjUzNjkwMGNmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uYW1laS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L25hbWVpLmhcbkBAIC0yNSw3ICsyNSw4IEBAIGVudW0geyBNQVhfTkVTVEVEX0xJTktTID0gOCB9O1xuICNkZWZpbmUgTE9PS1VQX1JDVVx0XHRCSVQoOClcdC8qIFJDVSBwYXRod2FsayBtb2RlOyBzZW1pLWludGVybmFsICovXG4gI2RlZmluZSBMT09LVVBfQ0FDSEVEXHRcdEJJVCg5KSAvKiBPbmx5IGRvIGNhY2hlZCBsb29rdXAgKi9cbiAjZGVmaW5lIExPT0tVUF9QQVJFTlRcdFx0QklUKDEwKVx0LyogTG9va2luZyB1cCBmaW5hbCBwYXJlbnQgaW4gcGF0aCAqL1xuLS8qIDUgc3BhcmUgYml0cyBmb3IgcGF0aHdhbGsgKi9cbisjZGVmaW5lIExPT0tVUF9BTFRcdFx0QklUKDExKSAvKiBMb29rIHVwIGluIGFsdGVybmF0aXZlIG5hbWVzcGFjZSAqL1xuKy8qIDQgc3BhcmUgYml0cyBmb3IgcGF0aHdhbGsgKi9cbiBcbiAvKiBUaGVzZSB0ZWxsIGZpbGVzeXN0ZW0gbWV0aG9kcyB0aGF0IHdlIGFyZSBkZWFsaW5nIHdpdGggdGhlIGZpbmFsIGNvbXBvbmVudC4uLiAqL1xuICNkZWZpbmUgTE9PS1VQX09QRU5cdFx0QklUKDE2KVx0LyogLi4uIGluIG9wZW4gKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BpZGZzLmggYi9pbmNsdWRlL2xpbnV4L3BpZGZzLmhcbmluZGV4IDBhYmY3ZGE5YWIyMzZlLi5mYWI2ZjQ4ZmYyMDMzNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGlkZnMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9waWRmcy5oXG5AQCAtMTUsNyArMTUsNiBAQCB2b2lkIHBpZGZzX2V4aXQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spO1xuICNpZmRlZiBDT05GSUdfQ09SRURVTVBcbiB2b2lkIHBpZGZzX2NvcmVkdW1wKGNvbnN0IHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pO1xuICNlbmRpZlxuLWV4dGVybiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgcGlkZnNfZGVudHJ5X29wZXJhdGlvbnM7XG4gaW50IHBpZGZzX3JlZ2lzdGVyX3BpZF9nZnAoc3RydWN0IHBpZCAqcGlkLCBnZnBfdCBnZnApO1xuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9mY250bC5oIGIvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL2ZjbnRsLmhcbmluZGV4IDg4M2NmZDdkZTJlZmZhLi43MGRiYmFjMWM1MjA3OCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9mY250bC5oXG4rKysgYi9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvZmNudGwuaFxuQEAgLTk2LDYgKzk2LDEwIEBAXG4gI2RlZmluZSBPX0VNUFRZUEFUSFx0KDEgXHUwMDNjXHUwMDNjIDI2KVx0LyogYWxsb3cgZW1wdHkgcGF0aCAqL1xuICNlbmRpZlxuIFxuKyNpZm5kZWYgT19BTFRcbisjZGVmaW5lIE9fQUxUXHRcdCgxIFx1MDAzY1x1MDAzYyAyNylcdC8qIE9wZW4gaW4gYWx0ZXJuYXRpdmUgbmFtZXNwYWNlICovXG4rI2VuZGlmXG4rXG4gLyogYSBob3JyaWQga2x1ZGdlIHRyeWluZyB0byBtYWtlIHN1cmUgdGhhdCB0aGlzIHdpbGwgZmFpbCBvbiBvbGQga2VybmVscyAqL1xuICNkZWZpbmUgT19UTVBGSUxFIChfX09fVE1QRklMRSB8IE9fRElSRUNUT1JZKVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9tb3VudC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L21vdW50LmhcbmluZGV4IDIyMDQ3MDhkYmY3YTU4Li42ZTc5NGQyMTRjZjk4MyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9tb3VudC5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvbW91bnQuaFxuQEAgLTYzLDYgKzYzLDcgQEBcbiAgKi9cbiAjZGVmaW5lIE9QRU5fVFJFRV9DTE9ORVx0XHQoMSBcdTAwM2NcdTAwM2MgMClcdC8qIENsb25lIHRoZSB0YXJnZXQgdHJlZSBhbmQgYXR0YWNoIHRoZSBjbG9uZSAqL1xuICNkZWZpbmUgT1BFTl9UUkVFX05BTUVTUEFDRVx0KDEgXHUwMDNjXHUwMDNjIDEpXHQvKiBDbG9uZSB0aGUgdGFyZ2V0IHRyZWUgaW50byBhIG5ldyBtb3VudCBuYW1lc3BhY2UgKi9cbisjZGVmaW5lIE9QRU5fVFJFRV9BTFRcdFx0KDEgXHUwMDNjXHUwMDNjIDIpXHQvKiBMb29rdXAgaW4gYWx0ZXJuYXRpdmUgbmFtZXNwYWNlICovXG4gI2RlZmluZSBPUEVOX1RSRUVfQ0xPRVhFQ1x0T19DTE9FWEVDXHQvKiBDbG9zZSB0aGUgZmlsZSBvbiBleGVjdmUoKSAqL1xuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvc2NyaXB0cy9nZGIvbGludXgvcHJvYy5weSBiL3NjcmlwdHMvZ2RiL2xpbnV4L3Byb2MucHlcbmluZGV4IDY1ZGQxYmQxMjk2NDFkLi41YWFmMmRkOGRiMDVhMSAxMDA2NDRcbi0tLSBhL3NjcmlwdHMvZ2RiL2xpbnV4L3Byb2MucHlcbisrKyBiL3NjcmlwdHMvZ2RiL2xpbnV4L3Byb2MucHlcbkBAIC0xNzQsOSArMTc0LDYgQEAgdmFsdWVzIG9mIHRoYXQgcHJvY2VzcyBuYW1lc3BhY2VcIlwiXCJcbiAgICAgICAgICAgICAgICAgICBcIm1vdW50XCIsIFwic3VwZXJfYmxvY2tcIiwgXCJkZXZuYW1lXCIsIFwicGF0aG5hbWVcIiwgXCJmc3R5cGVcIikpXG4gXG4gICAgICAgICBmb3IgbW50IGluIHJidHJlZS5yYl9pbm9yZGVyX2Zvcl9lYWNoX2VudHJ5KG5hbWVzcGFjZVsnbW91bnRzJ10sIG1vdW50X3B0cl90eXBlLCBcIm1udF9ub2RlXCIpOlxuLSAgICAgICAgICAgIGRldm5hbWUgPSBtbnRbJ21udF9kZXZuYW1lJ10uc3RyaW5nKClcbi0gICAgICAgICAgICBkZXZuYW1lID0gZGV2bmFtZSBpZiBkZXZuYW1lIGVsc2UgXCJub25lXCJcbi1cbiAgICAgICAgICAgICBwYXRobmFtZSA9IFwiXCJcbiAgICAgICAgICAgICBwYXJlbnQgPSBtbnRcbiAgICAgICAgICAgICB3aGlsZSBUcnVlOlxuQEAgLTE5MCw2ICsxODcsOCBAQCB2YWx1ZXMgb2YgdGhhdCBwcm9jZXNzIG5hbWVzcGFjZVwiXCJcIlxuICAgICAgICAgICAgICAgICBwYXRobmFtZSA9IFwiL1wiXG4gXG4gICAgICAgICAgICAgc3VwZXJibG9jayA9IG1udFsnbW50J11bJ21udF9zYiddXG4rICAgICAgICAgICAgZGV2bmFtZSA9IHN1cGVyYmxvY2tbJ3NfZGV2bmFtZSddLnN0cmluZygpXG4rICAgICAgICAgICAgZGV2bmFtZSA9IGRldm5hbWUgaWYgZGV2bmFtZSBlbHNlIFwibm9uZVwiXG4gICAgICAgICAgICAgZnN0eXBlID0gc3VwZXJibG9ja1snc190eXBlJ11bJ25hbWUnXS5zdHJpbmcoKVxuICAgICAgICAgICAgIHNfZmxhZ3MgPSBpbnQoc3VwZXJibG9ja1snc19mbGFncyddKVxuICAgICAgICAgICAgIG1fZmxhZ3MgPSBpbnQobW50WydtbnQnXVsnbW50X2ZsYWdzJ10pXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQxNjowODoyNS42NTI4NDQxMjRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTU3NjI1NTY3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbml0aWFsIEFzc2Vzc21lbnQgYW5kIFN5bWJvbCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzLiBJdCBzZWVtcyB3ZSd2ZSBnb3QgYSBwcmV0dHkgc3Vic3RhbnRpYWwgc2V0IG9mIGNoYW5nZXMgaGVyZSDigJMgYSB3aG9sZSBuZXcgdmlydHVhbCBmaWxlc3lzdGVtIGNhbGxlZCBgbWV0YWZzYCBpcyBiZWluZyBpbnRyb2R1Y2VkLCBhbG9uZyB3aXRoIHNvbWUgbW9kaWZpY2F0aW9ucyB0byB0aGUgVkZTIGxheWVyIHRvIHN1cHBvcnQgYW4gYE9fQUxUYCBmbGFnLiBUaGlzIGZsYWcgaXMgZm9yIGFsdGVybmF0aXZlIG5hbWVzcGFjZSBsb29rdXBzLiBUaGV5J3ZlIGFsc28gcmVqaWdnZXJlZCBob3cgbW91bnQgZGV2aWNlIG5hbWVzIGFyZSBzdG9yZWQsIG1vdmluZyB0aGVtIGZyb20gYHN0cnVjdCBtb3VudGAgdG8gYHN0cnVjdCBzdXBlcl9ibG9ja2AsIGFuZCBhZGRlZCBhIGBnZXRfb3B0aW9uc2AgdG8gYHN1cGVyX29wZXJhdGlvbnNgLCB3aGljaCBpcyByZXBsYWNpbmcgYHNob3dfb3B0aW9uc2AuXG5cbkZpcnN0IHRoaW5nJ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gSSdtIGdvaW5nIHRocm91Z2ggdGhlIGZpbGVzLCBhbmQgaXQgbG9va3MgbGlrZTpcblxuKiAgIFdlIGhhdmUgYSBuZXcgZmlsZXN5c3RlbSBiZWluZyBidWlsdCAoYG1ldGFmc2ApLlxuKiAgIFRoZSBWRlMgbGF5ZXIgaXMgYmVpbmcgdHdlYWtlZCBmb3IgdGhlIGBPX0FMVGAgZmxhZy5cbiogICBNb3VudCBpbmZvcm1hdGlvbiBoYXMgYmVlbiBtb3ZlZC5cbiogICBOZXcgYGdldF9vcHRpb25zYCBmdW5jdGlvbi5cblxuTm93LCBsZXQncyBpZGVudGlmeSB3aGF0IHRoZSBjb3JlIHBhcnRzIG9mIHRoZXNlIGNoYW5nZXMgYXJlLlxuXG5Gcm9tIGEgcXVpY2sgc2NhbiBvZiB0aGUgY29kZSBjaGFuZ2VzLCBgbWV0YWZzYCBsb29rcyB0byBiZSB0aGUgYmlnLCBuZXcgdGhpbmcsIGFuZCB3aWxsIGxpa2VseSBuZWVkIGZ1enppbmcuIFNwZWNpZmljYWxseSwgYG1ldGFmc19pbml0X2ZzX2NvbnRleHRgLCBgbWV0YWZzX2NvbGxlY3Rfb3B0aW9uYCwgYG1ldGFmc19nZXRfb3B0aW9uX3ZhbHVlc2AsIGBtZXRhZnNfZ2V0X2xpbmtgLCBgbWV0YWZzX3JlYWRsaW5rYCwgYG1ldGFmc19kX3JlbGVhc2VgLCBgbWV0YWZzX2dldF9pbm9kZWAsIGBtZXRhZnNfcm9vdF9sb29rdXBgLCBgbWV0YWZzX21vdW50X2xvb2t1cGAsIGBtZXRhZnNfb3B0aW9uc19sb29rdXBgLCBgbWV0YWZzX29wdGlvbl92YWx1ZXNfbG9va3VwYCwgYG1ldGFmc19nZXRfYmFzZV9maWxlYCwgYG1ldGFmc19jcmVhdGVfcm9vdGAsIGFuZCBgbWV0YWZzX2dldF9yb290YCBhcmUgdGhlIGZ1bmN0aW9ucyBvZiB0aGlzIGZpbGVzeXN0ZW0gdG8gZm9jdXMgb24uXG5cbkFsc28sIEkgaGF2ZSB0byBiZSBhd2FyZSBvZiB0aGUgYHBhdGhfaW5pdGAgaW4gYGZzL25hbWVpLmNgLCBhbmQgdGhlIGBidWlsZF9vcGVuX2ZsYWdzYCBpbiBgZnMvb3Blbi5jYC4gVGhlc2UgYXJlIGJvdGggaG90IHBhdGhzIGFuZCBjb3VsZCBwcmVzZW50IG9wcG9ydHVuaXRpZXMgZm9yIGV4cGxvaXRhdGlvbi5cblxuVGhlcmUgYXJlIGFsc28gYSBidW5jaCBvZiBvdGhlciBjaGFuZ2VzIHRoYXQgc2hvdWxkIGJlIHZlcmlmaWVkOiBgbW50X3Nob3dfb3B0aW9uc2AsIGBzYl9hZGRfb3B0aW9uYCwgYHNiX2FkZF9vcHRpb25fcGF0aGAsIGBvdmxfZ2V0X29wdGlvbnNgLCBhbmQgYGVyb2ZzX2dldF9vcHRpb25zYC5cblxuKipGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgYG1ldGFmc2AgaXMgYnVpbHQtaW4uIFRoYXQncyBnb29kIHRvIGtub3cuIFNvLCBmdXp6aW5nIGBvcGVuYXQyYCBvciBgb3BlbmAgd2l0aCB0aGUgbmV3IGBPX0FMVGAgZmxhZyB3aWxsIHRyaWdnZXIgdGhlIGBtZXRhZnNfZ2V0X3Jvb3RgIGZ1bmN0aW9uLCBzbyBJJ2xsIHdhbnQgdG8gZm9jdXMgb24gdGhhdC4gQWxzbywgdGhlIHNhbWUgaXMgdHJ1ZSBmb3IgYG9wZW5fdHJlZWAgdXNpbmcgYE9QRU5fVFJFRV9BTFRgLlxuXG5TbyB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBmb3IgZnV6emluZzpcblxuKiAgIGBtZXRhZnNfZ2V0X3Jvb3RgXG4qICAgYG1ldGFmc19jcmVhdGVfcm9vdGBcbiogICBgbWV0YWZzX3Jvb3RfbG9va3VwYFxuKiAgIGBtZXRhZnNfbW91bnRfbG9va3VwYFxuKiAgIGBtZXRhZnNfb3B0aW9uc19sb29rdXBgXG4qICAgYG1ldGFmc19vcHRpb25fdmFsdWVzX2xvb2t1cGBcbiogICBgbWV0YWZzX2dldF9vcHRpb25fdmFsdWVzYFxuKiAgIGBtZXRhZnNfZ2V0X2xpbmtgXG4qICAgYG1ldGFmc19yZWFkbGlua2BcbiogICBgbW50X3Nob3dfb3B0aW9uc2BcbiogICBgc2JfYWRkX29wdGlvbmBcbiogICBgc2JfYWRkX29wdGlvbl9wYXRoYFxuKiAgIGBvdmxfZ2V0X29wdGlvbnNgXG4qICAgYGVyb2ZzX2dldF9vcHRpb25zYFxuXG5JIHNob3VsZCBzY2FuIGBmcy9tZXRhZnMvbWV0YWZzLmNgIGEgYml0IGNsb3NlciBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IHBvdGVudGlhbCB0YXJnZXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDAzNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNzksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQxNjowODo0MS4yMjkxMDMyMjdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5MjgwNzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdGF0aWMuKiBtZXRhZnNfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL21ldGFmcy9tZXRhZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9tZXRhZnMvbWV0YWZzLmM9MjQ9c3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqbWV0YWZzX21udCBfX3JvX2FmdGVyX2luaXQ7XFxuZnMvbWV0YWZzL21ldGFmcy5jLTI1LVxcbmZzL21ldGFmcy9tZXRhZnMuYzoyNjpzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgbWV0YWZzX29wcyA9IHtcXG5mcy9tZXRhZnMvbWV0YWZzLmMtMjctXFx0LnN0YXRmc1xcdFxcdD0gc2ltcGxlX3N0YXRmcyxcXG4tLVxcbmZzL21ldGFmcy9tZXRhZnMuYy0zMC1cXG5mcy9tZXRhZnMvbWV0YWZzLmM6MzE6c3RhdGljIGludCBtZXRhZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy9tZXRhZnMvbWV0YWZzLmMtMzIte1xcbi0tXFxuZnMvbWV0YWZzL21ldGFmcy5jLTM5LVxcbmZzL21ldGFmcy9tZXRhZnMuYzo0MDpzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgbWV0YWZzX3R5cGUgPSB7XFxuZnMvbWV0YWZzL21ldGFmcy5jLTQxLVxcdC5uYW1lID0gXFxcIm1ldGFmc1xcXCIsXFxuLS1cXG5mcy9tZXRhZnMvbWV0YWZzLmM9NzQ9c3RydWN0IG1ldGFmc19jb2xsZWN0X2N0eCB7XFxuLS1cXG5mcy9tZXRhZnMvbWV0YWZzLmMtODctICovXFxuZnMvbWV0YWZzL21ldGFmcy5jOjg4OnN0YXRpYyB2b2lkIG1ldGFmc19jb2xsZWN0X29wdGlvbihzdHJ1Y3Qgc2Jfb3B0X2N0eCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLFxcbmZzL21ldGFmcy9tZXRhZnMuYy04OS1cXHRcXHRcXHRcXHQgIGNvbnN0IGNoYXIgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aClcXG4tLVxcbmZzL21ldGFmcy9tZXRhZnMuYy0xMjgtXFxuZnMvbWV0YWZzL21ldGFmcy5jOjEyOTpzdGF0aWMgdm9pZCBtZXRhZnNfZnJlZV9lbnRyaWVzKHN0cnVjdCBtZXRhZnNfb3B0aW9uX2VudHJ5ICplbnRyaWVzLCBpbnQgY291bnQpXFxuZnMvbWV0YWZzL21ldGFmcy5jLTEzMC17XFxuLS1cXG5mcy9tZXRhZnMvbWV0YWZzLmMtMTQwLVxcbmZzL21ldGFmcy9tZXRhZnMuYzoxNDE6c3RhdGljIGludCBtZXRhZnNfZ2V0X29wdGlvbl92YWx1ZXMoc3RydWN0IGZpbGUgKmJhc2UsIGNvbnN0IGNoYXIgKm9wdGlvbl9uYW1lLFxcbmZzL21ldGFmcy9tZXRhZnMuYy0xNDItXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBtZXRhZnNfb3B0aW9uX2VudHJ5ICoqZW50cmllc19vdXQsXFxuLS1cXG5mcy9tZXRhZnMvbWV0YWZzLmM9MTg3PXN0YXRpYyBjb25zdCBjaGFyICptZXRhZnNfZ2V0X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvbWV0YWZzL21ldGFmcy5jLTIwNi1cXG5mcy9tZXRhZnMvbWV0YWZzLmM6MjA3OnN0YXRpYyBpbnQgbWV0YWZzX3JlYWRsaW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciBfX3VzZXIgKmJ1ZmZlcixcXG5mcy9tZXRhZnMvbWV0YWZzLmMtMjA4LVxcdFxcdFxcdCAgIGludCBidWZsZW4pXFxuLS1cXG5mcy9tZXRhZnMvbWV0YWZzLmMtMjE4LVxcbmZzL21ldGFmcy9tZXRhZnMuYzoyMTk6c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1ldGFmc19zeW1saW5rX2lvcHMgPSB7XFxuZnMvbWV0YWZzL21ldGFmcy5jLTIyMC1cXHQuZ2V0X2xpbmtcXHQ9IG1ldGFmc19nZXRfbGluayxcXG4tLVxcbmZzL21ldGFmcy9tZXRhZnMuYy0yMjYtICovXFxuZnMvbWV0YWZzL21ldGFmcy5jOjIyNzpzdGF0aWMgdm9pZCBtZXRhZnNfZF9yZWxlYXNlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG5mcy9tZXRhZnMvbWV0YWZzLmMtMjI4LXtcXG4tLVxcbmZzL21ldGFmcy9tZXRhZnMuYy0yNTItXFxuZnMvbWV0YWZzL21ldGFmcy5jOjI1MzpzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIG1ldGFmc19kZW50cnlfb3BzID0ge1xcbmZzL21ldGFmcy9tZXRhZnMuYy0yNTQtXFx0LmRfcmVsZWFzZSA9IG1ldGFmc19kX3JlbGVhc2UsXFxuLS1cXG5mcy9tZXRhZnMvbWV0YWZzLmM9MjY3PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICptZXRhZnNfb3B0aW9uX3ZhbHVlc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL21ldGFmcy9tZXRhZnMuYy0yNjktXFxuZnMvbWV0YWZzL21ldGFmcy5jOjI3MDpzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWV0YWZzX3Jvb3RfZGlyX2lvcHMgPSB7XFxuZnMvbWV0YWZzL21ldGFmcy5jLTI3MS1cXHQubG9va3VwXFx0XFx0PSBtZXRhZnNfcm9vdF9sb29rdXAsXFxuLS1cXG5mcy9tZXRhZnMvbWV0YWZzLmMtMjczLVxcbmZzL21ldGFmcy9tZXRhZnMuYzoyNzQ6c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1ldGFmc19tb3VudF9kaXJfaW9wcyA9IHtcXG5mcy9tZXRhZnMvbWV0YWZzLmMtMjc1LVxcdC5sb29rdXBcXHRcXHQ9IG1ldGFmc19tb3VudF9sb29rdXAsXFxuLS1cXG5mcy9tZXRhZnMvbWV0YWZzLmMtMjc3LVxcbmZzL21ldGFmcy9tZXRhZnMuYzoyNzg6c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1ldGFmc19vcHRpb25zX2Rpcl9pb3BzID0ge1xcbmZzL21ldGFmcy9tZXRhZnMuYy0yNzktXFx0Lmxvb2t1cFxcdFxcdD0gbWV0YWZzX29wdGlvbnNfbG9va3VwLFxcbi0tXFxuZnMvbWV0YWZzL21ldGFmcy5jLTI4MS1cXG5mcy9tZXRhZnMvbWV0YWZzLmM6MjgyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBtZXRhZnNfb3B0aW9uX3ZhbHVlc19kaXJfaW9wcyA9IHtcXG5mcy9tZXRhZnMvbWV0YWZzLmMtMjgzLVxcdC5sb29rdXBcXHRcXHQ9IG1ldGFmc19vcHRpb25fdmFsdWVzX2xvb2t1cCxcXG4tLVxcbmZzL21ldGFmcy9tZXRhZnMuYz01NTE9RVhQT1JUX1NZTUJPTF9HUEwobWV0YWZzX2dldF9yb290KTtcXG5mcy9tZXRhZnMvbWV0YWZzLmMtNTUyLVxcbmZzL21ldGFmcy9tZXRhZnMuYzo1NTM6c3RhdGljIGludCBfX2luaXQgbWV0YWZzX2luaXQodm9pZClcXG5mcy9tZXRhZnMvbWV0YWZzLmMtNTU0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMTY6MDg6NDEuMzc4Mzg5NTc0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjI0NjAxMzYxNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgRmlsZXN5c3RlbSBDaGFuZ2VzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHRoaXMgbmV3IGBtZXRhZnNgIHZpcnR1YWwgZmlsZXN5c3RlbSDigJMgaW50ZXJlc3RpbmcuIEl0IHNvdW5kcyBsaWtlIGl0J3MgZGVzaWduZWQgdG8gZ2l2ZSB1cyBhIGRpcmVjdCB3YXkgdG8gYWNjZXNzIG1ldGFkYXRhIGFib3V0IGZpbGVzIGFuZCBmaWxlc3lzdGVtcywgd2hpY2ggaXMgdXNlZnVsLiBJIHNlZSBpdCB1c2VzIGBPX0FMVGAgZmlsZSBkZXNjcmlwdG9ycywgd2hpY2ggaXMgYSBnb29kIGNob2ljZSBmb3IgdGhpcyB0eXBlIG9mIGFjY2Vzcywga2VlcHMgdGhpbmdzIGNsZWFuLiBQbHVzLCBpdCB0b3VjaGVzIGBlcm9mc2AgYW5kIGBvdmVybGF5ZnNgLCBtb2RpZnlpbmcgdGhlbSB0byBzdXBwb3J0IGBnZXRfb3B0aW9uc2AuIFRoYXQncyBub3QgZW50aXJlbHkgc3VycHJpc2luZywgZ2l2ZW4gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGZpbGVzeXN0ZW1zLlxuXG5UaGUgYG1ldGFmc2AgZmlsZXN5c3RlbSBpdHNlbGYgaXMgYWx3YXlzIGJ1aWx0LWluLCBubyBjb25maWd1cmF0aW9uIG5lZWRlZCwganVzdCBgb2JqLXkgKz0gbWV0YWZzL2AuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3Mgb24gdGhlIHVzZXIgc2lkZS4gSG93ZXZlciwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgRVJPRlNfRlNgIGFuZCBgT1ZFUkxBWV9GU2AgYXJlIGVuYWJsZWQgdG8gdGVzdCB0aGUgYGVyb2ZzYCBhbmQgYG92ZXJsYXlmc2AgY2hhbmdlcyBwcm9wZXJseSwgYXMgaXQgaW1wYWN0cyB0aGVtLlxuXG5Ob3csIGxldCdzIGp1c3QgY29uZmlybS4gSSB3YW50IHRvIGJlIHRob3JvdWdoLiBJJ2xsIHRha2UgYSBxdWljayBsb29rIGF0IGBmcy9lcm9mcy9LY29uZmlnYCBhbmQgYGZzL292ZXJsYXlmcy9LY29uZmlnYC4gSSdsbCBjb25maXJtIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBvYnZpb3VzIGluIHRoZSBjb25maWd1cmF0aW9uIHNwYWNlLCBhbmQgZG91YmxlIGNoZWNrIHRoZSBleGFjdCBjb25maWcgbmFtZXMgZm9yIHRob3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzQ5NiwiT3V0cHV0VG9rZW5zIjo2NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQxNjowOTowMy44Mzg1MzAyNDNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5NzMxNTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5jb25maWcgRVJPRlNfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXJvZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9lcm9mcy9LY29uZmlnLTItXFxuZnMvZXJvZnMvS2NvbmZpZzozOmNvbmZpZyBFUk9GU19GU1xcbmZzL2Vyb2ZzL0tjb25maWctNC1cXHR0cmlzdGF0ZSBcXFwiRVJPRlMgZmlsZXN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy00OS1cXG5mcy9lcm9mcy9LY29uZmlnOjUwOmNvbmZpZyBFUk9GU19GU19ERUJVR1xcbmZzL2Vyb2ZzL0tjb25maWctNTEtXFx0Ym9vbCBcXFwiRVJPRlMgZGVidWdnaW5nIGZlYXR1cmVcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTU5LVxcbmZzL2Vyb2ZzL0tjb25maWc6NjA6Y29uZmlnIEVST0ZTX0ZTX1hBVFRSXFxuZnMvZXJvZnMvS2NvbmZpZy02MS1cXHRib29sIFxcXCJFUk9GUyBleHRlbmRlZCBhdHRyaWJ1dGVzXFxcIlxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy03MC1cXG5mcy9lcm9mcy9LY29uZmlnOjcxOmNvbmZpZyBFUk9GU19GU19QT1NJWF9BQ0xcXG5mcy9lcm9mcy9LY29uZmlnLTcyLVxcdGJvb2wgXFxcIkVST0ZTIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy04NC1cXG5mcy9lcm9mcy9LY29uZmlnOjg1OmNvbmZpZyBFUk9GU19GU19TRUNVUklUWVxcbmZzL2Vyb2ZzL0tjb25maWctODYtXFx0Ym9vbCBcXFwiRVJPRlMgU2VjdXJpdHkgTGFiZWxzXFxcIlxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy05Ny1cXG5mcy9lcm9mcy9LY29uZmlnOjk4OmNvbmZpZyBFUk9GU19GU19CQUNLRURfQllfRklMRVxcbmZzL2Vyb2ZzL0tjb25maWctOTktXFx0Ym9vbCBcXFwiRmlsZS1iYWNrZWQgRVJPRlMgZmlsZXN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy0xMTEtXFxuZnMvZXJvZnMvS2NvbmZpZzoxMTI6Y29uZmlnIEVST0ZTX0ZTX1pJUFxcbmZzL2Vyb2ZzL0tjb25maWctMTEzLVxcdGJvb2wgXFxcIkVST0ZTIERhdGEgQ29tcHJlc3Npb24gU3VwcG9ydFxcXCJcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctMTIxLVxcbmZzL2Vyb2ZzL0tjb25maWc6MTIyOmNvbmZpZyBFUk9GU19GU19aSVBfTFpNQVxcbmZzL2Vyb2ZzL0tjb25maWctMTIzLVxcdGJvb2wgXFxcIkVST0ZTIExaTUEgY29tcHJlc3NlZCBkYXRhIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTEzMy1cXG5mcy9lcm9mcy9LY29uZmlnOjEzNDpjb25maWcgRVJPRlNfRlNfWklQX0RFRkxBVEVcXG5mcy9lcm9mcy9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJFUk9GUyBERUZMQVRFIGNvbXByZXNzZWQgZGF0YSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy0xNDQtXFxuZnMvZXJvZnMvS2NvbmZpZzoxNDU6Y29uZmlnIEVST0ZTX0ZTX1pJUF9aU1REXFxuZnMvZXJvZnMvS2NvbmZpZy0xNDYtXFx0Ym9vbCBcXFwiRVJPRlMgWnN0YW5kYXJkIGNvbXByZXNzZWQgZGF0YSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy0xNTUtXFxuZnMvZXJvZnMvS2NvbmZpZzoxNTY6Y29uZmlnIEVST0ZTX0ZTX1pJUF9BQ0NFTFxcbmZzL2Vyb2ZzL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkVST0ZTIGhhcmR3YXJlIGRlY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctMTY5LVxcbmZzL2Vyb2ZzL0tjb25maWc6MTcwOmNvbmZpZyBFUk9GU19GU19QQ1BVX0tUSFJFQURcXG5mcy9lcm9mcy9LY29uZmlnLTE3MS1cXHRib29sIFxcXCJFUk9GUyBwZXItY3B1IGRlY29tcHJlc3Npb24ga3RocmVhZCB3b3JrZXJzXFxcIlxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy0xNzgtXFxuZnMvZXJvZnMvS2NvbmZpZzoxNzk6Y29uZmlnIEVST0ZTX0ZTX1BDUFVfS1RIUkVBRF9ISVBSSVxcbmZzL2Vyb2ZzL0tjb25maWctMTgwLVxcdGJvb2wgXFxcIkVST0ZTIGhpZ2ggcHJpb3JpdHkgcGVyLUNQVSBrdGhyZWFkIHdvcmtlcnNcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTE4OC1cXG5mcy9lcm9mcy9LY29uZmlnOjE4OTpjb25maWcgRVJPRlNfRlNfUEFHRV9DQUNIRV9TSEFSRVxcbmZzL2Vyb2ZzL0tjb25maWctMTkwLVxcdGJvb2wgXFxcIkVST0ZTIHBhZ2UgY2FjaGUgc2hhcmUgc3VwcG9ydCAoZXhwZXJpbWVudGFsKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMTY6MDk6MDMuOTU4MjY2MTZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NzUyODQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5jb25maWcgT1ZFUkxBWV9GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9vdmVybGF5ZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vdmVybGF5ZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL292ZXJsYXlmcy9LY29uZmlnOjI6Y29uZmlnIE9WRVJMQVlfRlNcXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJPdmVybGF5IGZpbGVzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL292ZXJsYXlmcy9LY29uZmlnLTE0LVxcbmZzL292ZXJsYXlmcy9LY29uZmlnOjE1OmNvbmZpZyBPVkVSTEFZX0ZTX1JFRElSRUNUX0RJUlxcbmZzL292ZXJsYXlmcy9LY29uZmlnLTE2LVxcdGJvb2wgXFxcIk92ZXJsYXlmczogdHVybiBvbiByZWRpcmVjdCBkaXJlY3RvcnkgZmVhdHVyZSBieSBkZWZhdWx0XFxcIlxcbi0tXFxuZnMvb3ZlcmxheWZzL0tjb25maWctMzAtXFxuZnMvb3ZlcmxheWZzL0tjb25maWc6MzE6Y29uZmlnIE9WRVJMQVlfRlNfUkVESVJFQ1RfQUxXQVlTX0ZPTExPV1xcbmZzL292ZXJsYXlmcy9LY29uZmlnLTMyLVxcdGJvb2wgXFxcIk92ZXJsYXlmczogZm9sbG93IHJlZGlyZWN0cyBldmVuIGlmIHJlZGlyZWN0cyBhcmUgdHVybmVkIG9mZlxcXCJcXG4tLVxcbmZzL292ZXJsYXlmcy9LY29uZmlnLTQ1LVxcbmZzL292ZXJsYXlmcy9LY29uZmlnOjQ2OmNvbmZpZyBPVkVSTEFZX0ZTX0lOREVYXFxuZnMvb3ZlcmxheWZzL0tjb25maWctNDctXFx0Ym9vbCBcXFwiT3ZlcmxheWZzOiB0dXJuIG9uIGlub2RlcyBpbmRleCBmZWF0dXJlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy02NC1cXG5mcy9vdmVybGF5ZnMvS2NvbmZpZzo2NTpjb25maWcgT1ZFUkxBWV9GU19ORlNfRVhQT1JUXFxuZnMvb3ZlcmxheWZzL0tjb25maWctNjYtXFx0Ym9vbCBcXFwiT3ZlcmxheWZzOiB0dXJuIG9uIE5GUyBleHBvcnQgZmVhdHVyZSBieSBkZWZhdWx0XFxcIlxcbi0tXFxuZnMvb3ZlcmxheWZzL0tjb25maWctOTItXFxuZnMvb3ZlcmxheWZzL0tjb25maWc6OTM6Y29uZmlnIE9WRVJMQVlfRlNfWElOT19BVVRPXFxuZnMvb3ZlcmxheWZzL0tjb25maWctOTQtXFx0Ym9vbCBcXFwiT3ZlcmxheWZzOiBhdXRvIGVuYWJsZSBpbm9kZSBudW1iZXIgbWFwcGluZ1xcXCJcXG4tLVxcbmZzL292ZXJsYXlmcy9LY29uZmlnLTExMC1cXG5mcy9vdmVybGF5ZnMvS2NvbmZpZzoxMTE6Y29uZmlnIE9WRVJMQVlfRlNfTUVUQUNPUFlcXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0xMTItXFx0Ym9vbCBcXFwiT3ZlcmxheWZzOiB0dXJuIG9uIG1ldGFkYXRhIG9ubHkgY29weSB1cCBmZWF0dXJlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0xMjgtXFxuZnMvb3ZlcmxheWZzL0tjb25maWc6MTI5OmNvbmZpZyBPVkVSTEFZX0ZTX0RFQlVHXFxuZnMvb3ZlcmxheWZzL0tjb25maWctMTMwLVxcdGJvb2wgXFxcIk92ZXJsYXlmczogdHVybiBvbiBleHRyYSBkZWJ1Z2dpbmcgY2hlY2tzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQxNjowOTowNC4xMDQwMjU1OTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDA3NDQ1ODEwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTWV0YUZTIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIGBtZXRhZnNgIGZpbGVzeXN0ZW0gY29kZSwgYW5kIGhlcmUncyB3aGF0J3MgYnViYmxpbmcgdG8gdGhlIHN1cmZhY2UuIEl0IHNlZW1zIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFyZSB0aHJvdWdoIHRoZSBgT19BTFRgIGZsYWcgd2l0aGluIGBvcGVuYXQyYCBvciBgb3BlbmAgY2FsbHMsIGFuZCB0aGUgYE9QRU5fVFJFRV9BTFRgIGZsYWcgd2l0aGluIHRoZSBgb3Blbl90cmVlYCBmdW5jdGlvbi4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGBmcy9tZXRhZnMvbWV0YWZzLmNgLCBhbmQgdGhlIG5ldyBgZ2V0X29wdGlvbnNgIGZ1bmN0aW9ucyBzcHJpbmtsZWQgd2l0aGluIGBmcy9lcm9mcy9zdXBlci5jYCBhbmQgYGZzL292ZXJsYXlmcy9wYXJhbXMuY2AuIFRoYXQncyB3aGVyZSB0aGUgYWN0aW9uIGlzLlxuXG5TcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBJIHNob3VsZCBzY3J1dGluaXplIHRoZXNlIHN5bWJvbHM6IGBtZXRhZnNfZ2V0X3Jvb3RgLCBgbWV0YWZzX2NyZWF0ZV9yb290YCwgYG1ldGFmc19yb290X2xvb2t1cGAsIGBtZXRhZnNfbW91bnRfbG9va3VwYCwgYG1ldGFmc19vcHRpb25zX2xvb2t1cGAsIGBtZXRhZnNfb3B0aW9uX3ZhbHVlc19sb29rdXBgLCBgbWV0YWZzX2dldF9vcHRpb25fdmFsdWVzYCwgYG1ldGFmc19nZXRfbGlua2AsIGBtZXRhZnNfcmVhZGxpbmtgLCBhbG9uZ3NpZGUgYG1udF9zaG93X29wdGlvbnNgLCBgc2JfYWRkX29wdGlvbmAsIGBzYl9hZGRfb3B0aW9uX3BhdGhgLCBgb3ZsX2dldF9vcHRpb25zYCwgYW5kIGBlcm9mc19nZXRfb3B0aW9uc2AuIFRob3NlIHNlZW0gdG8gYmUgdGhlIGNyaXRpY2FsIHBpZWNlcy5cblxuSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWdzIGVuYWJsZWQuIEl0IGxvb2tzIGxpa2UgYEVST0ZTX0ZTYCBhbmQgYE9WRVJMQVlfRlNgIGFyZSBlc3NlbnRpYWwuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcywganVzdCB0byBiZSB0aG9yb3VnaC4gUmlnaHQgbm93LCBpdCBsb29rcyBsaWtlIGBtZXRhZnNgIGl0c2VsZiBpcyBidWlsdC1pbi4gSSBhbHNvIG5vdGVkIHRoYXQgdGhlIGBPX0FMVGAgZmxhZyBpcyBhZGRlZCB0byBgT19QQVRIX0ZMQUdTYCwgYW5kIGBPUEVOX1RSRUVfQUxUYCBmbGFnIGlzIGFkZGVkIHRvIGBvcGVuX3RyZWVgLiBUaGUgYE1OVF9DTE9OQUJMRWAgZmxhZyBpcyBhZGRlZCB0byBgbnNmc2AsIGBwaWRmc2AsIGFuZCBgb3ZlcmxheWZzYCBsYXllcnMuXG5cbk5vdywgYW4gaW1wb3J0YW50IHF1ZXN0aW9uIGlzIGlmIGFueSBvdGhlciBmaWxlc3lzdGVtcyBhcmUgdXRpbGl6aW5nIHRoYXQgYGdldF9vcHRpb25zYCBmdW5jdGlvbi4gVGhlIHBhdGNoIG1lbnRpb25zIGNoYW5nZXMgdG8gYGVyb2ZzYCBhbmQgYG92ZXJsYXlmc2AsIGJ1dCBJIHNob3VsZCB2ZXJpZnkgdGhhdCdzIHRoZSBleHRlbnQgb2YgdGhlIGltcGFjdC5cblxuT2theSwgbGV0J3MgdmVyaWZ5IHRoYXQgYG1ldGFmc19nZXRfcm9vdGAgaXMgaW5kZWVkIHJlYWNoYWJsZS4gTG9va2luZyBhdCBgZnMvbmFtZWkuY2AsIGluIGBwYXRoX2luaXRgLCB0aGVyZSdzIGEgY29uZGl0aW9uYWw6IGlmIGBmbGFncyBcdTAwMjYgTE9PS1VQX0FMVGAgaXMgc2V0LCBhbmQgaXQganVtcHMgdG8gYG1ldGFmc19nZXRfcm9vdGAuIE9rYXksIHBlcmZlY3QuIFRoZSBgTE9PS1VQX0FMVGAgZmxhZyBpcyBzZXQgaW4gYGJ1aWxkX29wZW5fZmxhZ3NgIGlmIGBPX0FMVGAgaXMgcHJlc2VudC4gQW5kIGBPX0FMVGAgaXMgZXF1YWwgdG8gYDEgXHUwMDNjXHUwMDNjIDI3YC4gU28sIGFuIGBvcGVuYXQoLi4uLCBPX0FMVCwgLi4uKWAgY2FsbCB3aWxsIGFic29sdXRlbHkgdHJpZ2dlciBgbWV0YWZzX2dldF9yb290YC4gVGhhdCBtYWtlcyBpdCB0ZXN0YWJsZSBhbmQgcmVhY2hhYmxlLiBFeGNlbGxlbnQhIEkgdGhpbmsgSSBoYXZlIGEgY2xlYXIgcGljdHVyZS5cblxuTm93LCBJIHRoaW5rIEknbSByZWFkeSB0byBzdGFydCBwcmVwYXJpbmcgdGhlIHJlc3VsdHMgYW5kIHRoZSB0ZXN0IHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTM0NiwiT3V0cHV0VG9rZW5zIjoyNDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDE2OjA5OjI0LjE3ODQ4NjIxNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwMjIwMDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFUk9GU19GU1wiLFxuICAgIFwiT1ZFUkxBWV9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1ldGFmc19nZXRfcm9vdFwiLFxuICAgIFwibWV0YWZzX2NyZWF0ZV9yb290XCIsXG4gICAgXCJtZXRhZnNfcm9vdF9sb29rdXBcIixcbiAgICBcIm1ldGFmc19tb3VudF9sb29rdXBcIixcbiAgICBcIm1ldGFmc19vcHRpb25zX2xvb2t1cFwiLFxuICAgIFwibWV0YWZzX29wdGlvbl92YWx1ZXNfbG9va3VwXCIsXG4gICAgXCJtZXRhZnNfZ2V0X29wdGlvbl92YWx1ZXNcIixcbiAgICBcIm1ldGFmc19nZXRfbGlua1wiLFxuICAgIFwibWV0YWZzX3JlYWRsaW5rXCIsXG4gICAgXCJtbnRfc2hvd19vcHRpb25zXCIsXG4gICAgXCJzYl9hZGRfb3B0aW9uXCIsXG4gICAgXCJzYl9hZGRfb3B0aW9uX3BhdGhcIixcbiAgICBcIm92bF9nZXRfb3B0aW9uc1wiLFxuICAgIFwiZXJvZnNfZ2V0X29wdGlvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHZpcnR1YWwgZmlsZXN5c3RlbSBgbWV0YWZzYCB0aGF0IGV4cG9zZXMgbWV0YWRhdGEgYWJvdXQgZmlsZXMgYW5kIGZpbGVzeXN0ZW1zIHZpYSB0aGUgYE9fQUxUYCBmbGFnLiBJdCBhbHNvIGludHJvZHVjZXMgYSBuZXcgYGdldF9vcHRpb25zYCBzdXBlciBvcGVyYXRpb24sIGltcGxlbWVudGVkIGJ5IGBlcm9mc2AgYW5kIGBvdmVybGF5ZnNgLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBWRlMgYW5kIHNwZWNpZmljIGZpbGVzeXN0ZW1zIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFUk9GU19GU1wiLFxuICAgIFwiT1ZFUkxBWV9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1ldGFmc19nZXRfcm9vdFwiLFxuICAgIFwibWV0YWZzX2NyZWF0ZV9yb290XCIsXG4gICAgXCJtZXRhZnNfcm9vdF9sb29rdXBcIixcbiAgICBcIm1ldGFmc19tb3VudF9sb29rdXBcIixcbiAgICBcIm1ldGFmc19vcHRpb25zX2xvb2t1cFwiLFxuICAgIFwibWV0YWZzX29wdGlvbl92YWx1ZXNfbG9va3VwXCIsXG4gICAgXCJtZXRhZnNfZ2V0X29wdGlvbl92YWx1ZXNcIixcbiAgICBcIm1ldGFmc19nZXRfbGlua1wiLFxuICAgIFwibWV0YWZzX3JlYWRsaW5rXCIsXG4gICAgXCJtbnRfc2hvd19vcHRpb25zXCIsXG4gICAgXCJzYl9hZGRfb3B0aW9uXCIsXG4gICAgXCJzYl9hZGRfb3B0aW9uX3BhdGhcIixcbiAgICBcIm92bF9nZXRfb3B0aW9uc1wiLFxuICAgIFwiZXJvZnNfZ2V0X29wdGlvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHZpcnR1YWwgZmlsZXN5c3RlbSBgbWV0YWZzYCB0aGF0IGV4cG9zZXMgbWV0YWRhdGEgYWJvdXQgZmlsZXMgYW5kIGZpbGVzeXN0ZW1zIHZpYSB0aGUgYE9fQUxUYCBmbGFnLiBJdCBhbHNvIGludHJvZHVjZXMgYSBuZXcgYGdldF9vcHRpb25zYCBzdXBlciBvcGVyYXRpb24sIGltcGxlbWVudGVkIGJ5IGBlcm9mc2AgYW5kIGBvdmVybGF5ZnNgLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBWRlMgYW5kIHNwZWNpZmljIGZpbGVzeXN0ZW1zIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdzb62[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-15 15:40:20 +0000 UTC FinishedAt: 2026-07-15 16:09:25 +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": "58717b2a1365d06c8c64b72aa948541b53fe31eb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EROFS_FS", "OVERLAY_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "58717b2a1365d06c8c64b72aa948541b53fe31eb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EROFS_FS", "OVERLAY_FS" ], "series_id": "fbf79ea3-3496-493e-8366-7cd78f0c8229" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "metafs_get_root", "metafs_create_root", "metafs_root_lookup", "metafs_mount_lookup", "metafs_options_lookup", "metafs_option_values_lookup", "metafs_get_option_values", "metafs_get_link", "metafs_readlink", "mnt_show_options", "sb_add_option", "sb_add_option_path", "ovl_get_options", "erofs_get_options" ], "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+CgkJCTx0ZD4yMDI2LzA3LzE1IDE2OjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VST0ZTX0ZTJiMzNDssCiAgICAmIzM0O09WRVJMQVlfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZXRhZnNfZ2V0X3Jvb3QmIzM0OywKICAgICYjMzQ7bWV0YWZzX2NyZWF0ZV9yb290JiMzNDssCiAgICAmIzM0O21ldGFmc19yb290X2xvb2t1cCYjMzQ7LAogICAgJiMzNDttZXRhZnNfbW91bnRfbG9va3VwJiMzNDssCiAgICAmIzM0O21ldGFmc19vcHRpb25zX2xvb2t1cCYjMzQ7LAogICAgJiMzNDttZXRhZnNfb3B0aW9uX3ZhbHVlc19sb29rdXAmIzM0OywKICAgICYjMzQ7bWV0YWZzX2dldF9vcHRpb25fdmFsdWVzJiMzNDssCiAgICAmIzM0O21ldGFmc19nZXRfbGluayYjMzQ7LAogICAgJiMzNDttZXRhZnNfcmVhZGxpbmsmIzM0OywKICAgICYjMzQ7bW50X3Nob3dfb3B0aW9ucyYjMzQ7LAogICAgJiMzNDtzYl9hZGRfb3B0aW9uJiMzNDssCiAgICAmIzM0O3NiX2FkZF9vcHRpb25fcGF0aCYjMzQ7LAogICAgJiMzNDtvdmxfZ2V0X29wdGlvbnMmIzM0OywKICAgICYjMzQ7ZXJvZnNfZ2V0X29wdGlvbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyB2aXJ0dWFsIGZpbGVzeXN0ZW0gYG1ldGFmc2AgdGhhdCBleHBvc2VzIG1ldGFkYXRhIGFib3V0IGZpbGVzIGFuZCBmaWxlc3lzdGVtcyB2aWEgdGhlIGBPX0FMVGAgZmxhZy4gSXQgYWxzbyBpbnRyb2R1Y2VzIGEgbmV3IGBnZXRfb3B0aW9uc2Agc3VwZXIgb3BlcmF0aW9uLCBpbXBsZW1lbnRlZCBieSBgZXJvZnNgIGFuZCBgb3ZlcmxheWZzYC4gVGhlc2UgYXJlIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgVkZTIGFuZCBzcGVjaWZpYyBmaWxlc3lzdGVtcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMTY6MDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3OGM4ZDllOTM0Y2U4YTliYzFhZTBjOTk0ZjQ2Mzg1NGJkMmY5ODExXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMTUgMTY6MDg6MjIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0XG5pbmRleCA3Yzc1MzE0OGFmODg4My4uM2RjNDMxYjZjZGJiMGIgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxuQEAgLTMxNCw3ICYjNDM7MzE0LDcgQEAgb3IgYm90dG9tIGhhbGYpLlxuIGBgc2hvd19kZXZuYW1lYGBcbiBcdE9wdGlvbmFsLiBDYWxsZWQgYnkgdGhlIFZGUyB0byBzaG93IGRldmljZSBuYW1lIGZvclxuIFx0L3Byb2MvXHUwMDNjcGlkXHUwMDNlL3ttb3VudHMsbW91bnRpbmZvLG1vdW50c3RhdHN9LiBJZiBub3QgcHJvdmlkZWQgdGhlblxuLVx0JiMzOTsoc3RydWN0IG1vdW50KS5tbnRfZGV2bmFtZSYjMzk7IHdpbGwgYmUgdXNlZC5cbiYjNDM7XHQmIzM5OyhzdHJ1Y3Qgc3VwZXJfYmxvY2spLnNfZGV2bmFtZSYjMzk7IHdpbGwgYmUgdXNlZC5cbiBcbiBgYHNob3dfcGF0aGBgXG4gXHRPcHRpb25hbC4gQ2FsbGVkIGJ5IHRoZSBWRlMgKGZvciAvcHJvYy9cdTAwM2NwaWRcdTAwM2UvbW91bnRpbmZvKSB0byBzaG93XG5kaWZmIC0tZ2l0IGEvZnMvTWFrZWZpbGUgYi9mcy9NYWtlZmlsZVxuaW5kZXggODlhOGE5ZDIwN2QxYzUuLjg3YTRjMjNkNWEwOGRlIDEwMDY0NFxuLS0tIGEvZnMvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL01ha2VmaWxlXG5AQCAtNTgsNiAmIzQzOzU4LDggQEAgb2JqLSQoQ09ORklHX0NPTkZJR0ZTX0ZTKVx0JiM0Mzs9IGNvbmZpZ2ZzL1xuIG9iai15XHRcdFx0XHQmIzQzOz0gZGV2cHRzL1xuIFxuIG9iai0kKENPTkZJR19ETE0pXHRcdCYjNDM7PSBkbG0vXG4mIzQzO1xuJiM0MztvYmoteVx0XHRcdFx0JiM0Mzs9IG1ldGFmcy9cbiAgXG4gIyBEbyBub3QgYWRkIGFueSBmaWxlc3lzdGVtcyBiZWZvcmUgdGhpcyBsaW5lXG4gb2JqLSQoQ09ORklHX05FVEZTX1NVUFBPUlQpXHQmIzQzOz0gbmV0ZnMvXG5kaWZmIC0tZ2l0IGEvZnMvZXJvZnMvc3VwZXIuYyBiL2ZzL2Vyb2ZzL3N1cGVyLmNcbmluZGV4IDg2ZmE1YzZhMGM3MDg3Li4yNTc1MTdjMjhlMWQzOCAxMDA2NDRcbi0tLSBhL2ZzL2Vyb2ZzL3N1cGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Vyb2ZzL3N1cGVyLmNcbkBAIC0xMDI4LDI5ICYjNDM7MTAyOCwzNCBAQCBzdGF0aWMgaW50IGVyb2ZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBlcm9mc19zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBkZW50cnkgKnJvb3QpXG4mIzQzO3N0YXRpYyBpbnQgZXJvZnNfZ2V0X29wdGlvbnMoc3RydWN0IHNiX29wdF9jdHggKmN0eCwgc3RydWN0IGRlbnRyeSAqcm9vdClcbiB7XG4gXHRzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gRVJPRlNfU0Iocm9vdC1cdTAwM2VkX3NiKTtcbiBcdHN0cnVjdCBlcm9mc19tb3VudF9vcHRzICpvcHQgPSBcdTAwMjZzYmktXHUwMDNlb3B0O1xuIFxuJiM0MztcdGlmIChzYmktXHUwMDNlZGlmMC5maWxlKVxuJiM0MztcdFx0c2JfYWRkX29wdGlvbl9wYXRoKGN0eCwgXCYjMzQ7c291cmNlXCYjMzQ7LCBOVUxMLCBcdTAwMjZzYmktXHUwMDNlZGlmMC5maWxlLVx1MDAzZWZfcGF0aCk7XG4mIzQzO1xuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX1hBVFRSKSlcbi1cdFx0c2VxX3B1dHMoc2VxLCB0ZXN0X29wdChvcHQsIFhBVFRSX1VTRVIpID9cbi1cdFx0XHRcdFwmIzM0Oyx1c2VyX3hhdHRyXCYjMzQ7IDogXCYjMzQ7LG5vdXNlcl94YXR0clwmIzM0Oyk7XG4mIzQzO1x0XHRzYl9hZGRfb3B0aW9uKGN0eCwgdGVzdF9vcHQob3B0LCBYQVRUUl9VU0VSKSA/XG4mIzQzO1x0XHRcdCAgICAgIFwmIzM0O3VzZXJfeGF0dHJcJiMzNDsgOiBcJiMzNDtub3VzZXJfeGF0dHJcJiMzNDssIE5VTEwpO1xuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX1BPU0lYX0FDTCkpXG4tXHRcdHNlcV9wdXRzKHNlcSwgdGVzdF9vcHQob3B0LCBQT1NJWF9BQ0wpID8gXCYjMzQ7LGFjbFwmIzM0OyA6IFwmIzM0Oyxub2FjbFwmIzM0Oyk7XG4mIzQzO1x0XHRzYl9hZGRfb3B0aW9uKGN0eCwgdGVzdF9vcHQob3B0LCBQT1NJWF9BQ0wpID8gXCYjMzQ7YWNsXCYjMzQ7IDogXCYjMzQ7bm9hY2xcJiMzNDssIE5VTEwpO1xuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX1pJUCkpXG4tXHRcdHNlcV9wcmludGYoc2VxLCBcJiMzNDssY2FjaGVfc3RyYXRlZ3k9JXNcJiMzNDssXG4mIzQzO1x0XHRzYl9hZGRfb3B0aW9uKGN0eCwgXCYjMzQ7Y2FjaGVfc3RyYXRlZ3lcJiMzNDssXG4gXHRcdFx0ICBlcm9mc19wYXJhbV9jYWNoZV9zdHJhdGVneVtvcHQtXHUwMDNlY2FjaGVfc3RyYXRlZ3ldLm5hbWUpO1xuIFx0aWYgKHRlc3Rfb3B0KG9wdCwgREFYX0FMV0FZUykpXG4tXHRcdHNlcV9wdXRzKHNlcSwgXCYjMzQ7LGRheD1hbHdheXNcJiMzNDspO1xuJiM0MztcdFx0c2JfYWRkX29wdGlvbihjdHgsIFwmIzM0O2RheFwmIzM0OywgXCYjMzQ7YWx3YXlzXCYjMzQ7KTtcbiBcdGlmICh0ZXN0X29wdChvcHQsIERBWF9ORVZFUikpXG4tXHRcdHNlcV9wdXRzKHNlcSwgXCYjMzQ7LGRheD1uZXZlclwmIzM0Oyk7XG4mIzQzO1x0XHRzYl9hZGRfb3B0aW9uKGN0eCwgXCYjMzQ7ZGF4XCYjMzQ7LCBcJiMzNDtuZXZlclwmIzM0Oyk7XG4gXHRpZiAoZXJvZnNfaXNfZmlsZWlvX21vZGUoc2JpKSBcdTAwMjZcdTAwMjYgdGVzdF9vcHQob3B0LCBESVJFQ1RfSU8pKVxuLVx0XHRzZXFfcHV0cyhzZXEsIFwmIzM0OyxkaXJlY3Rpb1wmIzM0Oyk7XG4tXHRpZiAoc2JpLVx1MDAzZWRpZjAuZnNvZmYpXG4tXHRcdHNlcV9wcmludGYoc2VxLCBcJiMzNDssZnNvZmZzZXQ9JWxsdVwmIzM0Oywgc2JpLVx1MDAzZWRpZjAuZnNvZmYpO1xuJiM0MztcdFx0c2JfYWRkX29wdGlvbihjdHgsIFwmIzM0O2RpcmVjdGlvXCYjMzQ7LCBOVUxMKTtcbiYjNDM7XHRpZiAoc2JpLVx1MDAzZWRpZjAuZnNvZmYpIHtcbiYjNDM7XHRcdGNoYXIgKnZhbCBfX2ZyZWUoa2ZyZWUpID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsIFwmIzM0OyVsbHVcJiMzNDssIHNiaS1cdTAwM2VkaWYwLmZzb2ZmKTtcbiYjNDM7XHRcdHNiX2FkZF9vcHRpb24oY3R4LCBcJiMzNDtmc29mZnNldFwmIzM0OywgdmFsKTtcbiYjNDM7XHR9XG4gXHRpZiAodGVzdF9vcHQob3B0LCBJTk9ERV9TSEFSRSkpXG4tXHRcdHNlcV9wdXRzKHNlcSwgXCYjMzQ7LGlub2RlX3NoYXJlXCYjMzQ7KTtcbiYjNDM7XHRcdHNiX2FkZF9vcHRpb24oY3R4LCBcJiMzNDtpbm9kZV9zaGFyZVwmIzM0OywgTlVMTCk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTA2OSw3ICYjNDM7MTA3NCw3IEBAIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGVyb2ZzX3NvcHMgPSB7XG4gXHQuZnJlZV9pbm9kZSA9IGVyb2ZzX2ZyZWVfaW5vZGUsXG4gXHQuZXZpY3RfaW5vZGUgPSBlcm9mc19ldmljdF9pbm9kZSxcbiBcdC5zdGF0ZnMgPSBlcm9mc19zdGF0ZnMsXG4tXHQuc2hvd19vcHRpb25zID0gZXJvZnNfc2hvd19vcHRpb25zLFxuJiM0MztcdC5nZXRfb3B0aW9ucyA9IGVyb2ZzX2dldF9vcHRpb25zLFxuIH07XG4gXG4gbW9kdWxlX2luaXQoZXJvZnNfbW9kdWxlX2luaXQpO1xuZGlmZiAtLWdpdCBhL2ZzL2ZjbnRsLmMgYi9mcy9mY250bC5jXG5pbmRleCBjMTU4ZjA4MmYxZGE0Zi4uMDFiNzY1Y2ZhYzg0NzkgMTAwNjQ0XG4tLS0gYS9mcy9mY250bC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9mY250bC5jXG5AQCAtMTE2OSw3ICYjNDM7MTE2OSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGZjbnRsX2luaXQodm9pZClcbiBcdCAqIEV4Y2VwdGlvbnM6IE9fTk9OQkxPQ0sgaXMgYSB0d28gYml0IGRlZmluZSBvbiBwYXJpc2M7IE9fTkRFTEFZXG4gXHQgKiBpcyBkZWZpbmVkIGFzIE9fTk9OQkxPQ0sgb24gc29tZSBwbGF0Zm9ybXMgYW5kIG5vdCBvbiBvdGhlcnMuXG4gXHQgKi9cbi1cdEJVSUxEX0JVR19PTigyMiAtIDEgLyogZm9yIE9fUkRPTkxZIGJlaW5nIDAgKi8gIT1cbiYjNDM7XHRCVUlMRF9CVUdfT04oMjMgLSAxIC8qIGZvciBPX1JET05MWSBiZWluZyAwICovICE9XG4gXHRcdEhXRUlHSFQzMihcbiBcdFx0XHQoVkFMSURfT1BFTl9GTEFHUyBcdTAwMjYgfihPX05PTkJMT0NLIHwgT19OREVMQVkpKSB8XG4gXHRcdFx0X19GTU9ERV9FWEVDIHwgX19PX1JFR1VMQVIpKTtcbmRpZmYgLS1naXQgYS9mcy9pbnRlcm5hbC5oIGIvZnMvaW50ZXJuYWwuaFxuaW5kZXggMzU1ZDkzZjkyMjA4NjEuLmU3M2E1YzFkNWI0ZWUxIDEwMDY0NFxuLS0tIGEvZnMvaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaW50ZXJuYWwuaFxuQEAgLTk1LDYgJiM0Mzs5NSw3IEBAIGludCBwYXRoX3Vtb3VudChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IGZsYWdzKTtcbiBpbnQgcGF0aF9waXZvdF9yb290KHN0cnVjdCBwYXRoICpuZXcsIHN0cnVjdCBwYXRoICpvbGQpO1xuIFxuIGludCBzaG93X3BhdGgoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpyb290KTtcbiYjNDM7aW50IG1udF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCB2ZnNtb3VudCAqbW50KTtcbiBcbiAvKlxuICAqIGZzX3N0cnVjdC5jXG5kaWZmIC0tZ2l0IGEvZnMvbWV0YWZzL01ha2VmaWxlIGIvZnMvbWV0YWZzL01ha2VmaWxlXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmY4NTViNDhkOWMyYjkwXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9tZXRhZnMvTWFrZWZpbGVcbkBAIC0wLDAgJiM0MzsxLDYgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOyNcbiYjNDM7IyBNYWtlZmlsZSBmb3IgbWV0YSBmaWxlc3lzdGVtXG4mIzQzOyNcbiYjNDM7XG4mIzQzO29iai15IDo9IG1ldGFmcy5vXG5kaWZmIC0tZ2l0IGEvZnMvbWV0YWZzL21ldGFmcy5jIGIvZnMvbWV0YWZzL21ldGFmcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjE1ZWMwYjYwNjRkYTM4XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9tZXRhZnMvbWV0YWZzLmNcbkBAIC0wLDAgJiM0MzsxLDU3MiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKlxuJiM0MzsgKiBtZXRhZnMgLSB2aXJ0dWFsIGZpbGVzeXN0ZW0gZm9yIG1ldGFkYXRhIGFjY2Vzc1xuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIHByb3ZpZGVzIGEgd2F5IHRvIGFjY2VzcyBtZXRhZGF0YSBhYm91dCBmaWxlcyBhbmQgZmlsZXN5c3RlbXNcbiYjNDM7ICogdGhyb3VnaCBPX0FMVCBmaWxlIGRlc2NyaXB0b3JzLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21hZ2ljLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbW91bnQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9uYW1laS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kY2FjaGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wc2V1ZG9fZnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy9zdXBlci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O21ldGFmcy5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBtZXRhZnMgc3VwZXJibG9jayBhbmQgbW91bnRcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKm1ldGFmc19tbnQgX19yb19hZnRlcl9pbml0O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIG1ldGFmc19vcHMgPSB7XG4mIzQzO1x0LnN0YXRmc1x0XHQ9IHNpbXBsZV9zdGF0ZnMsXG4mIzQzO1x0LmRyb3BfaW5vZGVcdD0gaW5vZGVfanVzdF9kcm9wLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBtZXRhZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwc2V1ZG9fZnNfY29udGV4dCAqY3R4ID0gaW5pdF9wc2V1ZG8oZmMsIDB4NGQ0NTU0NDEpOyAvKiAmIzM5O01FVEEmIzM5OyAqL1xuJiM0MztcdGlmICghY3R4KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0Y3R4LVx1MDAzZW9wcyA9IFx1MDAyNm1ldGFmc19vcHM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBtZXRhZnNfdHlwZSA9IHtcbiYjNDM7XHQubmFtZSA9IFwmIzM0O21ldGFmc1wmIzM0OyxcbiYjNDM7XHQuaW5pdF9mc19jb250ZXh0ID0gbWV0YWZzX2luaXRfZnNfY29udGV4dCxcbiYjNDM7XHQua2lsbF9zYiA9IGtpbGxfYW5vbl9zdXBlcixcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIE1vdW50IG9wdGlvbiBjb2xsZWN0aW9uIHN0cnVjdHVyZXNcbiYjNDM7ICovXG4mIzQzO2VudW0gbWV0YWZzX2RlbnRyeV90eXBlIHtcbiYjNDM7XHRNRVRBRlNfUk9PVCxcbiYjNDM7XHRNRVRBRlNfT1BUSU9OX1ZBTFVFUyxcbiYjNDM7XHRNRVRBRlNfU1lNTElOSyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBtZXRhZnNfb3B0aW9uX2VudHJ5IHtcbiYjNDM7XHRjaGFyICp2YWx1ZTtcbiYjNDM7XHRzdHJ1Y3QgcGF0aCBwYXRoO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IG1ldGFmc19kZW50cnlfaW5mbyB7XG4mIzQzO1x0ZW51bSBtZXRhZnNfZGVudHJ5X3R5cGUgdHlwZTtcbiYjNDM7XHR1bmlvbiB7XG4mIzQzO1x0XHRzdHJ1Y3Qge1xuJiM0MztcdFx0XHRzdHJ1Y3QgZmlsZSAqYmFzZTtcbiYjNDM7XHRcdH0gcm9vdDtcbiYjNDM7XHRcdHN0cnVjdCB7XG4mIzQzO1x0XHRcdHN0cnVjdCBtZXRhZnNfb3B0aW9uX2VudHJ5ICplbnRyaWVzO1xuJiM0MztcdFx0XHRpbnQgY291bnQ7XG4mIzQzO1x0XHR9IG9wdF92YWx1ZXM7XG4mIzQzO1x0XHRzdHJ1Y3QgbWV0YWZzX29wdGlvbl9lbnRyeSBzeW1saW5rO1xuJiM0MztcdH07XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgbWV0YWZzX2NvbGxlY3RfY3R4IHtcbiYjNDM7XHRzdHJ1Y3Qgc2Jfb3B0X2N0eCBjdHg7XG4mIzQzO1x0Y29uc3QgY2hhciAqdGFyZ2V0X25hbWU7XG4mIzQzO1x0c3RydWN0IHN1cGVyX2Jsb2NrICpzYjtcbiYjNDM7XHRzdHJ1Y3QgbWV0YWZzX29wdGlvbl9lbnRyeSAqZW50cmllcztcbiYjNDM7XHRpbnQgY291bnQ7XG4mIzQzO1x0aW50IHNpemU7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XHRib29sIGlzX3NvdXJjZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIENvbGxlY3Qgc3BlY2lmaWMgbW91bnQgb3B0aW9uIHZhbHVlcyBmcm9tIHRoZSBiYXNlIGZpbGVzeXN0ZW1cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIG1ldGFmc19jb2xsZWN0X29wdGlvbihzdHJ1Y3Qgc2Jfb3B0X2N0eCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLFxuJiM0MztcdFx0XHRcdCAgY29uc3QgY2hhciAqdmFsdWUsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1ldGFmc19jb2xsZWN0X2N0eCAqY29sbGVjdF9jdHggPSBjdHgtXHUwMDNlZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgbWV0YWZzX29wdGlvbl9lbnRyeSAqZW50cnk7XG4mIzQzO1xuJiM0MztcdGlmIChzdHJjbXAobmFtZSwgY29sbGVjdF9jdHgtXHUwMDNldGFyZ2V0X25hbWUpICE9IDApXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmICghdmFsdWUgXHUwMDI2XHUwMDI2IGNvbGxlY3RfY3R4LVx1MDAzZWlzX3NvdXJjZSlcbiYjNDM7XHRcdHZhbHVlID0gY29sbGVjdF9jdHgtXHUwMDNlc2ItXHUwMDNlc19kZXZuYW1lO1xuJiM0MztcbiYjNDM7XHRpZiAoY29sbGVjdF9jdHgtXHUwMDNlY291bnQgXHUwMDNlPSBjb2xsZWN0X2N0eC1cdTAwM2VzaXplKSB7XG4mIzQzO1x0XHRpbnQgbmV3X3NpemUgPSBjb2xsZWN0X2N0eC1cdTAwM2VzaXplID8gY29sbGVjdF9jdHgtXHUwMDNlc2l6ZSAqIDIgOiA0O1xuJiM0MztcdFx0c3RydWN0IG1ldGFmc19vcHRpb25fZW50cnkgKm5ld19lbnRyaWVzO1xuJiM0MztcbiYjNDM7XHRcdG5ld19lbnRyaWVzID0ga3JlYWxsb2NfYXJyYXkoY29sbGVjdF9jdHgtXHUwMDNlZW50cmllcywgbmV3X3NpemUsIHNpemVvZigqbmV3X2VudHJpZXMpLFxuJiM0MztcdFx0XHRcdFx0ICAgICBHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdGlmICghbmV3X2VudHJpZXMpIHtcbiYjNDM7XHRcdFx0Y29sbGVjdF9jdHgtXHUwMDNlZXJyID0gLUVOT01FTTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0Y29sbGVjdF9jdHgtXHUwMDNlZW50cmllcyA9IG5ld19lbnRyaWVzO1xuJiM0MztcdFx0Y29sbGVjdF9jdHgtXHUwMDNlc2l6ZSA9IG5ld19zaXplO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZW50cnkgPSBcdTAwMjZjb2xsZWN0X2N0eC1cdTAwM2VlbnRyaWVzW2NvbGxlY3RfY3R4LVx1MDAzZWNvdW50XTtcbiYjNDM7XHRlbnRyeS1cdTAwM2V2YWx1ZSA9IHZhbHVlID8ga3N0cmR1cCh2YWx1ZSwgR0ZQX0tFUk5FTCkgOiBOVUxMO1xuJiM0MztcdGlmICghZW50cnktXHUwMDNldmFsdWUgXHUwMDI2XHUwMDI2IHZhbHVlKSB7XG4mIzQzO1x0XHRjb2xsZWN0X2N0eC1cdTAwM2VlcnIgPSAtRU5PTUVNO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAocGF0aCkge1xuJiM0MztcdFx0ZW50cnktXHUwMDNlcGF0aCA9ICpwYXRoO1xuJiM0MztcdFx0cGF0aF9nZXQoXHUwMDI2ZW50cnktXHUwMDNlcGF0aCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdG1lbXNldChcdTAwMjZlbnRyeS1cdTAwM2VwYXRoLCAwLCBzaXplb2YoZW50cnktXHUwMDNlcGF0aCkpO1xuJiM0MztcdH1cbiYjNDM7XHRjb2xsZWN0X2N0eC1cdTAwM2Vjb3VudCYjNDM7JiM0Mzs7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1ldGFmc19mcmVlX2VudHJpZXMoc3RydWN0IG1ldGFmc19vcHRpb25fZW50cnkgKmVudHJpZXMsIGludCBjb3VudClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb3VudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGtmcmVlKGVudHJpZXNbaV0udmFsdWUpO1xuJiM0MztcdFx0aWYgKGVudHJpZXNbaV0ucGF0aC5tbnQpXG4mIzQzO1x0XHRcdHBhdGhfcHV0KFx1MDAyNmVudHJpZXNbaV0ucGF0aCk7XG4mIzQzO1x0fVxuJiM0MztcdGtmcmVlKGVudHJpZXMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG1ldGFmc19nZXRfb3B0aW9uX3ZhbHVlcyhzdHJ1Y3QgZmlsZSAqYmFzZSwgY29uc3QgY2hhciAqb3B0aW9uX25hbWUsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBtZXRhZnNfb3B0aW9uX2VudHJ5ICoqZW50cmllc19vdXQsXG4mIzQzO1x0XHRcdFx0ICAgIGludCAqY291bnRfb3V0KVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHBhdGggKnBhdGggPSBcdTAwMjZiYXNlLVx1MDAzZWZfcGF0aDtcbiYjNDM7XHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gcGF0aC1cdTAwM2VtbnQtXHUwMDNlbW50X3NiO1xuJiM0MztcdHN0cnVjdCBtZXRhZnNfY29sbGVjdF9jdHggY29sbGVjdF9jdHggPSB7XG4mIzQzO1x0XHQuY3R4LmRhdGEgPSBcdTAwMjZjb2xsZWN0X2N0eCxcbiYjNDM7XHRcdC5jdHguYWN0b3IgPSBtZXRhZnNfY29sbGVjdF9vcHRpb24sXG4mIzQzO1x0XHQudGFyZ2V0X25hbWUgPSBvcHRpb25fbmFtZSxcbiYjNDM7XHRcdC5zYiA9IHNiLFxuJiM0MztcdFx0LmlzX3NvdXJjZSA9ICFzdHJjbXAob3B0aW9uX25hbWUsIFwmIzM0O3NvdXJjZVwmIzM0OyksXG4mIzQzO1x0fTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoc2ItXHUwMDNlc19vcC1cdTAwM2VnZXRfb3B0aW9ucykge1xuJiM0MztcdFx0cmV0ID0gc2ItXHUwMDNlc19vcC1cdTAwM2VnZXRfb3B0aW9ucyhcdTAwMjZjb2xsZWN0X2N0eC5jdHgsIHBhdGgtXHUwMDNlbW50LVx1MDAzZW1udF9yb290KTtcbiYjNDM7XHRcdGlmIChyZXQgfHwgY29sbGVjdF9jdHguZXJyKSB7XG4mIzQzO1x0XHRcdG1ldGFmc19mcmVlX2VudHJpZXMoY29sbGVjdF9jdHguZW50cmllcywgY29sbGVjdF9jdHguY291bnQpO1xuJiM0MztcdFx0XHRyZXR1cm4gcmV0ID86IGNvbGxlY3RfY3R4LmVycjtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIHNwZWNpYWwgY2FzZTogYWRkIFwmIzM0O3NvdXJjZVwmIzM0OyBvcHRpb24gaWYgZmlsZXN5c3RlbSBkaWRuJiMzOTt0IGFkZCBvbmUqL1xuJiM0MztcdGlmICghY29sbGVjdF9jdHguY291bnQgXHUwMDI2XHUwMDI2IGNvbGxlY3RfY3R4LmlzX3NvdXJjZSkge1xuJiM0MztcdFx0c3RydWN0IG1ldGFmc19vcHRpb25fZW50cnkgKmVudCBfX2ZyZWUoa2ZyZWUpID0ga3phbGxvY19vYmooKmVudCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFlbnQpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRcdGVudC1cdTAwM2V2YWx1ZSA9IGtzdHJkdXAoc2ItXHUwMDNlc19kZXZuYW1lLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdGlmICghZW50LVx1MDAzZXZhbHVlKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0XHRjb2xsZWN0X2N0eC5lbnRyaWVzID0gbm9fZnJlZV9wdHIoZW50KTtcbiYjNDM7XHRcdGNvbGxlY3RfY3R4LmNvdW50ID0gMTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdCplbnRyaWVzX291dCA9IGNvbGxlY3RfY3R4LmVudHJpZXM7XG4mIzQzO1x0KmNvdW50X291dCA9IGNvbGxlY3RfY3R4LmNvdW50O1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBtZXRhZnMgc3ltbGluayBvcGVyYXRpb25zXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciAqbWV0YWZzX2dldF9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgZGVsYXllZF9jYWxsICpkb25lKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1ldGFmc19kZW50cnlfaW5mbyAqaW5mbztcbiYjNDM7XG4mIzQzO1x0aWYgKCFkZW50cnkpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRUNISUxEKTtcbiYjNDM7XG4mIzQzO1x0aW5mbyA9IGRlbnRyeS1cdTAwM2VkX2ZzZGF0YTtcbiYjNDM7XHRpZiAoaW5mby1cdTAwM2VzeW1saW5rLnBhdGgubW50KSB7XG4mIzQzO1x0XHRpbnQgZXJyb3I7XG4mIzQzO1xuJiM0MztcdFx0cGF0aF9nZXQoXHUwMDI2aW5mby1cdTAwM2VzeW1saW5rLnBhdGgpO1xuJiM0MztcdFx0ZXJyb3IgPSBuZF9qdW1wX2xpbmsoXHUwMDI2aW5mby1cdTAwM2VzeW1saW5rLnBhdGgpO1xuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoZXJyb3IpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIEVSUl9QVFIoLUVMT09QKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBtZXRhZnNfcmVhZGxpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuJiM0MztcdFx0XHQgICBpbnQgYnVmbGVuKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1ldGFmc19kZW50cnlfaW5mbyAqaW5mbyA9IGRlbnRyeS1cdTAwM2VkX2ZzZGF0YTtcbiYjNDM7XHRjb25zdCBjaGFyICp2YWx1ZSA9IGluZm8tXHUwMDNlc3ltbGluay52YWx1ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKCF2YWx1ZSlcbiYjNDM7XHRcdHZhbHVlID0gXCYjMzQ7XCYjMzQ7O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmVhZGxpbmtfY29weShidWZmZXIsIGJ1ZmxlbiwgdmFsdWUsIHN0cmxlbih2YWx1ZSkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWV0YWZzX3N5bWxpbmtfaW9wcyA9IHtcbiYjNDM7XHQuZ2V0X2xpbmtcdD0gbWV0YWZzX2dldF9saW5rLFxuJiM0MztcdC5yZWFkbGlua1x0PSBtZXRhZnNfcmVhZGxpbmssXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBEZW50cnkgb3BlcmF0aW9ucyAtIGNsZWFudXBcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIG1ldGFmc19kX3JlbGVhc2Uoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1ldGFmc19kZW50cnlfaW5mbyAqaW5mbyA9IGRlbnRyeS1cdTAwM2VkX2ZzZGF0YTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFpbmZvKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGluZm8tXHUwMDNldHlwZSkge1xuJiM0MztcdGNhc2UgTUVUQUZTX1JPT1Q6XG4mIzQzO1x0XHRmcHV0KGluZm8tXHUwMDNlcm9vdC5iYXNlKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTUVUQUZTX09QVElPTl9WQUxVRVM6XG4mIzQzO1x0XHRtZXRhZnNfZnJlZV9lbnRyaWVzKGluZm8tXHUwMDNlb3B0X3ZhbHVlcy5lbnRyaWVzLFxuJiM0MztcdFx0XHRcdCAgICBpbmZvLVx1MDAzZW9wdF92YWx1ZXMuY291bnQpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBNRVRBRlNfU1lNTElOSzpcbiYjNDM7XHRcdGtmcmVlKGluZm8tXHUwMDNlc3ltbGluay52YWx1ZSk7XG4mIzQzO1x0XHRpZiAoaW5mby1cdTAwM2VzeW1saW5rLnBhdGgubW50KVxuJiM0MztcdFx0XHRwYXRoX3B1dChcdTAwMjZpbmZvLVx1MDAzZXN5bWxpbmsucGF0aCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0V0FSTl9PTigxKTtcbiYjNDM7XHR9XG4mIzQzO1x0a2ZyZWUoaW5mbyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgbWV0YWZzX2RlbnRyeV9vcHMgPSB7XG4mIzQzO1x0LmRfcmVsZWFzZSA9IG1ldGFmc19kX3JlbGVhc2UsXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBtZXRhZnMgZGlyZWN0b3J5IG9wZXJhdGlvbnMgLSBmb3J3YXJkIGRlY2xhcmF0aW9uc1xuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHN0cnVjdCBmaWxlICptZXRhZnNfZ2V0X2Jhc2VfZmlsZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuJiM0MztzdGF0aWMgc3RydWN0IGRlbnRyeSAqbWV0YWZzX3Jvb3RfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4mIzQzO1x0XHRcdFx0XHQgdW5zaWduZWQgaW50IGZsYWdzKTtcbiYjNDM7c3RhdGljIHN0cnVjdCBkZW50cnkgKm1ldGFmc19tb3VudF9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiYjNDM7XHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IGZsYWdzKTtcbiYjNDM7c3RhdGljIHN0cnVjdCBkZW50cnkgKm1ldGFmc19vcHRpb25zX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuJiM0MztcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBmbGFncyk7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICptZXRhZnNfb3B0aW9uX3ZhbHVlc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiYjNDM7XHRcdFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1ldGFmc19yb290X2Rpcl9pb3BzID0ge1xuJiM0MztcdC5sb29rdXBcdFx0PSBtZXRhZnNfcm9vdF9sb29rdXAsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWV0YWZzX21vdW50X2Rpcl9pb3BzID0ge1xuJiM0MztcdC5sb29rdXBcdFx0PSBtZXRhZnNfbW91bnRfbG9va3VwLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1ldGFmc19vcHRpb25zX2Rpcl9pb3BzID0ge1xuJiM0MztcdC5sb29rdXBcdFx0PSBtZXRhZnNfb3B0aW9uc19sb29rdXAsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWV0YWZzX29wdGlvbl92YWx1ZXNfZGlyX2lvcHMgPSB7XG4mIzQzO1x0Lmxvb2t1cFx0XHQ9IG1ldGFmc19vcHRpb25fdmFsdWVzX2xvb2t1cCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIENyZWF0ZSBhIG5ldyBpbm9kZSBpbiBtZXRhZnNcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgaW5vZGUgKm1ldGFmc19nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW1vZGVfdCBtb2RlLFxuJiM0MztcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zICppb3BzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZSA9IG5ld19pbm9kZShzYik7XG4mIzQzO1xuJiM0MztcdGlmICghaW5vZGUpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0aW5vZGUtXHUwMDNlaV9pbm8gPSBnZXRfbmV4dF9pbm8oKTtcbiYjNDM7XHRpbm9kZS1cdTAwM2VpX21vZGUgPSBtb2RlO1xuJiM0MztcdHNpbXBsZV9pbm9kZV9pbml0X3RzKGlub2RlKTtcbiYjNDM7XG4mIzQzO1x0aWYgKFNfSVNESVIobW9kZSkpIHtcbiYjNDM7XHRcdGlub2RlLVx1MDAzZWlfb3AgPSBpb3BzO1xuJiM0MztcdFx0aW5jX25saW5rKGlub2RlKTtcbiYjNDM7XHR9IGVsc2UgaWYgKFNfSVNMTksobW9kZSkpIHtcbiYjNDM7XHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZtZXRhZnNfc3ltbGlua19pb3BzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGlub2RlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBMb29rdXAgaW4gcm9vdCBkaXJlY3RvcnkgKC8pXG4mIzQzOyAqIE9ubHkgXCYjMzQ7bW91bnRcJiMzNDsgaXMgdmFsaWQgaGVyZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHN0cnVjdCBkZW50cnkgKm1ldGFmc19yb290X2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuJiM0MztcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBmbGFncylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IGNoYXIgKm5hbWUgPSBkZW50cnktXHUwMDNlZF9uYW1lLm5hbWU7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHN0cmNtcChuYW1lLCBcJiMzNDttb3VudFwmIzM0OykgIT0gMClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuJiM0MztcbiYjNDM7XHRpbm9kZSA9IG1ldGFmc19nZXRfaW5vZGUoZGlyLVx1MDAzZWlfc2IsIFNfSUZESVIgfCAwNTU1LCBcdTAwMjZtZXRhZnNfbW91bnRfZGlyX2lvcHMpO1xuJiM0MztcdGlmICghaW5vZGUpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiYjNDM7XG4mIzQzO1x0ZF9hZGQoZGVudHJ5LCBpbm9kZSk7XG4mIzQzO1x0ZF9tYXJrX2RvbnRjYWNoZShpbm9kZSk7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIExvb2t1cCBpbiAvbW91bnQgZGlyZWN0b3J5XG4mIzQzOyAqIE9ubHkgXCYjMzQ7b3B0aW9uc1wmIzM0OyBpcyB2YWxpZCBoZXJlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgc3RydWN0IGRlbnRyeSAqbWV0YWZzX21vdW50X2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuJiM0MztcdFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBjaGFyICpuYW1lID0gZGVudHJ5LVx1MDAzZWRfbmFtZS5uYW1lO1xuJiM0MztcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4mIzQzO1xuJiM0MztcdGlmIChzdHJjbXAobmFtZSwgXCYjMzQ7b3B0aW9uc1wmIzM0OykgIT0gMClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuJiM0MztcbiYjNDM7XHRpbm9kZSA9IG1ldGFmc19nZXRfaW5vZGUoZGlyLVx1MDAzZWlfc2IsIFNfSUZESVIgfCAwNTU1LCBcdTAwMjZtZXRhZnNfb3B0aW9uc19kaXJfaW9wcyk7XG4mIzQzO1x0aWYgKCFpbm9kZSlcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcbiYjNDM7XHRkX2FkZChkZW50cnksIGlub2RlKTtcbiYjNDM7XHRkX21hcmtfZG9udGNhY2hlKGlub2RlKTtcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogTG9va3VwIGluIC9tb3VudC9vcHRpb25zIGRpcmVjdG9yeVxuJiM0MzsgKiBDb2xsZWN0IHZhbHVlcyBmb3IgdGhlIHJlcXVlc3RlZCBvcHRpb24gbmFtZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHN0cnVjdCBkZW50cnkgKm1ldGFmc19vcHRpb25zX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuJiM0MztcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBmbGFncylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IGNoYXIgKnRhcmdldF9uYW1lID0gZGVudHJ5LVx1MDAzZWRfbmFtZS5uYW1lO1xuJiM0MztcdHN0cnVjdCBmaWxlICpiYXNlO1xuJiM0MztcdHN0cnVjdCBtZXRhZnNfZGVudHJ5X2luZm8gKmluZm87XG4mIzQzO1x0c3RydWN0IG1ldGFmc19vcHRpb25fZW50cnkgKmVudHJpZXMgPSBOVUxMO1xuJiM0MztcdGludCBjb3VudCA9IDA7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRiYXNlID0gbWV0YWZzX2dldF9iYXNlX2ZpbGUoZGVudHJ5LVx1MDAzZWRfcGFyZW50KTtcbiYjNDM7XHRpZiAoIWJhc2UpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gbWV0YWZzX2dldF9vcHRpb25fdmFsdWVzKGJhc2UsIHRhcmdldF9uYW1lLCBcdTAwMjZlbnRyaWVzLCBcdTAwMjZjb3VudCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4mIzQzO1xuJiM0MztcdGlmIChjb3VudCA9PSAwKSB7XG4mIzQzO1x0XHRrZnJlZShlbnRyaWVzKTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFpbmZvKSB7XG4mIzQzO1x0XHRtZXRhZnNfZnJlZV9lbnRyaWVzKGVudHJpZXMsIGNvdW50KTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aW5mby1cdTAwM2V0eXBlID0gTUVUQUZTX09QVElPTl9WQUxVRVM7XG4mIzQzO1x0aW5mby1cdTAwM2VvcHRfdmFsdWVzLmVudHJpZXMgPSBlbnRyaWVzO1xuJiM0MztcdGluZm8tXHUwMDNlb3B0X3ZhbHVlcy5jb3VudCA9IGNvdW50O1xuJiM0MztcbiYjNDM7XHRpbm9kZSA9IG1ldGFmc19nZXRfaW5vZGUoZGlyLVx1MDAzZWlfc2IsIFNfSUZESVIgfCAwNTU1LCBcdTAwMjZtZXRhZnNfb3B0aW9uX3ZhbHVlc19kaXJfaW9wcyk7XG4mIzQzO1x0aWYgKCFpbm9kZSkge1xuJiM0MztcdFx0bWV0YWZzX2ZyZWVfZW50cmllcyhlbnRyaWVzLCBjb3VudCk7XG4mIzQzO1x0XHRrZnJlZShpbmZvKTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZGVudHJ5LVx1MDAzZWRfZnNkYXRhID0gaW5mbztcbiYjNDM7XHRkX2FkZChkZW50cnksIGlub2RlKTtcbiYjNDM7XHRkX21hcmtfZG9udGNhY2hlKGlub2RlKTtcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogTG9va3VwIGluIG9wdGlvbi1zcGVjaWZpYyBkaXJlY3RvcnkgKGUuZy4sIC9tb3VudC9vcHRpb25zL2xvd2VyZGlyLylcbiYjNDM7ICogUmV0dXJuIG51bWJlcmVkIGVudHJpZXMgKDAsIDEsIDIsIC4uLikgYXMgc3ltbGlua3NcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICptZXRhZnNfb3B0aW9uX3ZhbHVlc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdFx0XHRcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuJiM0MztcdFx0XHRcdFx0XHQgIHVuc2lnbmVkIGludCBmbGFncylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IGNoYXIgKnRhcmdldF9uYW1lID0gZGVudHJ5LVx1MDAzZWRfbmFtZS5uYW1lO1xuJiM0MztcdHN0cnVjdCBtZXRhZnNfZGVudHJ5X2luZm8gKnBhcmVudF9pbmZvLCAqaW5mbztcbiYjNDM7XHRzdHJ1Y3QgbWV0YWZzX29wdGlvbl9lbnRyeSAqZW50cnk7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGluZGV4O1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdHBhcmVudF9pbmZvID0gZGVudHJ5LVx1MDAzZWRfcGFyZW50LVx1MDAzZWRfZnNkYXRhO1xuJiM0MztcdGlmIChXQVJOX09OKCFwYXJlbnRfaW5mbyB8fCBwYXJlbnRfaW5mby1cdTAwM2V0eXBlICE9IE1FVEFGU19PUFRJT05fVkFMVUVTKSlcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuJiM0MztcbiYjNDM7XHRpZiAodGFyZ2V0X25hbWVbMF0gPT0gJiMzOTswJiMzOTsgXHUwMDI2XHUwMDI2IHRhcmdldF9uYW1lWzFdKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGtzdHJ0b3VsKHRhcmdldF9uYW1lLCAxMCwgXHUwMDI2aW5kZXgpO1xuJiM0MztcdGlmIChlcnIgfHwgaW5kZXggXHUwMDNlPSBwYXJlbnRfaW5mby1cdTAwM2VvcHRfdmFsdWVzLmNvdW50KVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XG4mIzQzO1xuJiM0MztcdGVudHJ5ID0gXHUwMDI2cGFyZW50X2luZm8tXHUwMDNlb3B0X3ZhbHVlcy5lbnRyaWVzW2luZGV4XTtcbiYjNDM7XG4mIzQzO1x0aW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFpbmZvKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1xuJiM0MztcdGluZm8tXHUwMDNldHlwZSA9IE1FVEFGU19TWU1MSU5LO1xuJiM0MztcdGlmIChlbnRyeS1cdTAwM2V2YWx1ZSkge1xuJiM0MztcdFx0aW5mby1cdTAwM2VzeW1saW5rLnZhbHVlID0ga3N0cmR1cChlbnRyeS1cdTAwM2V2YWx1ZSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHRpZiAoIWluZm8tXHUwMDNlc3ltbGluay52YWx1ZSkge1xuJiM0MztcdFx0XHRrZnJlZShpbmZvKTtcbiYjNDM7XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdGlmIChlbnRyeS1cdTAwM2VwYXRoLm1udCkge1xuJiM0MztcdFx0aW5mby1cdTAwM2VzeW1saW5rLnBhdGggPSBlbnRyeS1cdTAwM2VwYXRoO1xuJiM0MztcdFx0cGF0aF9nZXQoXHUwMDI2aW5mby1cdTAwM2VzeW1saW5rLnBhdGgpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aW5vZGUgPSBtZXRhZnNfZ2V0X2lub2RlKGRpci1cdTAwM2VpX3NiLCBTX0lGTE5LIHwgMDc3NywgTlVMTCk7XG4mIzQzO1x0aWYgKCFpbm9kZSkge1xuJiM0MztcdFx0a2ZyZWUoaW5mby1cdTAwM2VzeW1saW5rLnZhbHVlKTtcbiYjNDM7XHRcdGlmIChpbmZvLVx1MDAzZXN5bWxpbmsucGF0aC5tbnQpXG4mIzQzO1x0XHRcdHBhdGhfcHV0KFx1MDAyNmluZm8tXHUwMDNlc3ltbGluay5wYXRoKTtcbiYjNDM7XHRcdGtmcmVlKGluZm8pO1xuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkZW50cnktXHUwMDNlZF9mc2RhdGEgPSBpbmZvO1xuJiM0MztcdGRfYWRkKGRlbnRyeSwgaW5vZGUpO1xuJiM0MztcdGRfbWFya19kb250Y2FjaGUoaW5vZGUpO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBIZWxwZXIgdG8gZ2V0IGJhc2UgZmlsZSBmcm9tIGFueSBtZXRhZnMgZGVudHJ5XG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgc3RydWN0IGZpbGUgKm1ldGFmc19nZXRfYmFzZV9maWxlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiYjNDM7e1xuJiM0MztcdHdoaWxlIChkZW50cnkpIHtcbiYjNDM7XHRcdHN0cnVjdCBtZXRhZnNfZGVudHJ5X2luZm8gKmluZm8gPSBkZW50cnktXHUwMDNlZF9mc2RhdGE7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGluZm8gXHUwMDI2XHUwMDI2IGluZm8tXHUwMDNldHlwZSA9PSBNRVRBRlNfUk9PVClcbiYjNDM7XHRcdFx0cmV0dXJuIGluZm8tXHUwMDNlcm9vdC5iYXNlO1xuJiM0MztcdFx0aWYgKGRlbnRyeSA9PSBkZW50cnktXHUwMDNlZF9wYXJlbnQpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0ZGVudHJ5ID0gZGVudHJ5LVx1MDAzZWRfcGFyZW50O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQ3JlYXRlIHRoZSByb290IGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9yIGEgbWV0YWRhdGEgb3BlblxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHN0cnVjdCBkZW50cnkgKm1ldGFmc19jcmVhdGVfcm9vdChzdHJ1Y3QgZmlsZSAqYmFzZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4mIzQzO1x0c3RydWN0IGRlbnRyeSAqcm9vdDtcbiYjNDM7XHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gbWV0YWZzX21udC1cdTAwM2VtbnRfc2I7XG4mIzQzO1x0c3RydWN0IG1ldGFmc19kZW50cnlfaW5mbyAqaW5mbztcbiYjNDM7XG4mIzQzO1x0aW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFpbmZvKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1xuJiM0MztcdGluZm8tXHUwMDNldHlwZSA9IE1FVEFGU19ST09UO1xuJiM0MztcdGluZm8tXHUwMDNlcm9vdC5iYXNlID0gZ2V0X2ZpbGUoYmFzZSk7XG4mIzQzO1xuJiM0MztcdGlub2RlID0gbWV0YWZzX2dldF9pbm9kZShzYiwgU19JRkRJUiB8IDA1NTUsIFx1MDAyNm1ldGFmc19yb290X2Rpcl9pb3BzKTtcbiYjNDM7XHRpZiAoIWlub2RlKSB7XG4mIzQzO1x0XHRmcHV0KGluZm8tXHUwMDNlcm9vdC5iYXNlKTtcbiYjNDM7XHRcdGtmcmVlKGluZm8pO1xuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyb290ID0gZF9hbGxvY19hbm9uKHNiKTtcbiYjNDM7XHRpZiAoIXJvb3QpIHtcbiYjNDM7XHRcdGlwdXQoaW5vZGUpO1xuJiM0MztcdFx0ZnB1dChpbmZvLVx1MDAzZXJvb3QuYmFzZSk7XG4mIzQzO1x0XHRrZnJlZShpbmZvKTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogU3RvcmUgdGhlIGluZm8gaW4gZF9mc2RhdGEgYmVmb3JlIGluc3RhbnRpYXRpbmcgKi9cbiYjNDM7XHRyb290LVx1MDAzZWRfZnNkYXRhID0gaW5mbztcbiYjNDM7XHRkX2luc3RhbnRpYXRlKHJvb3QsIGlub2RlKTtcbiYjNDM7XHRkX21hcmtfZG9udGNhY2hlKGlub2RlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJvb3Q7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEdldCBtZXRhZGF0YSByb290IHBhdGggZm9yIGEgYmFzZSBmaWxlLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGlzIGNhbGxlZCBmcm9tIHBhdGhfaW5pdCgpIHdoZW4gT19BTFQgaXMgdXNlZC5cbiYjNDM7ICogSXQgcmV0dXJucyBhIHBhdGggaW4gdGhlIG1ldGFmcyB0aGF0IHNlcnZlcyBhcyB0aGUgcm9vdFxuJiM0MzsgKiBmb3IgdGhlIG1ldGFkYXRhIGxvb2t1cC5cbiYjNDM7ICovXG4mIzQzO2ludCBtZXRhZnNfZ2V0X3Jvb3Qoc3RydWN0IGZpbGUgKmJhc2UsIHN0cnVjdCBwYXRoICpwYXRoKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRlbnRyeSAqcm9vdDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFiYXNlKVxuJiM0MztcdFx0cmV0dXJuIC1FQkFERjtcbiYjNDM7XG4mIzQzO1x0LyogQ3JlYXRlIHRoZSBtZXRhZGF0YSByb290IGZvciB0aGlzIGJhc2UgZmlsZSAqL1xuJiM0MztcdHJvb3QgPSBtZXRhZnNfY3JlYXRlX3Jvb3QoYmFzZSk7XG4mIzQzO1x0aWYgKElTX0VSUihyb290KSlcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKHJvb3QpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJldHVybiB0aGUgcGF0aCB0byB0aGUgbWV0YWRhdGEgcm9vdC5cbiYjNDM7XHQgKiBOb3JtYWwgVkZTIGxvb2t1cCB3aWxsIHRha2Ugb3ZlciBmcm9tIGhlcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0cGF0aC1cdTAwM2VtbnQgPSBtbnRnZXQobWV0YWZzX21udCk7XG4mIzQzO1x0cGF0aC1cdTAwM2VkZW50cnkgPSByb290O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtZXRhZnNfZ2V0X3Jvb3QpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX2luaXQgbWV0YWZzX2luaXQodm9pZClcbiYjNDM7e1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oXHUwMDI2bWV0YWZzX3R5cGUpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRtZXRhZnNfbW50ID0ga2Vybl9tb3VudChcdTAwMjZtZXRhZnNfdHlwZSk7XG4mIzQzO1x0aWYgKElTX0VSUihtZXRhZnNfbW50KSkge1xuJiM0MztcdFx0ZXJyID0gUFRSX0VSUihtZXRhZnNfbW50KTtcbiYjNDM7XHRcdHVucmVnaXN0ZXJfZmlsZXN5c3RlbShcdTAwMjZtZXRhZnNfdHlwZSk7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XHRzZXRfZGVmYXVsdF9kX29wKG1ldGFmc19tbnQtXHUwMDNlbW50X3NiLCBcdTAwMjZtZXRhZnNfZGVudHJ5X29wcyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztmc19pbml0Y2FsbChtZXRhZnNfaW5pdCk7XG5kaWZmIC0tZ2l0IGEvZnMvbWV0YWZzL21ldGFmcy5oIGIvZnMvbWV0YWZzL21ldGFmcy5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmQyNTc3MTQyNjBhN2ZiXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9tZXRhZnMvbWV0YWZzLmhcbkBAIC0wLDAgJiM0MzsxLDE1IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4mIzQzOyNpZm5kZWYgX0xJTlVYX01FVEFGU19IXG4mIzQzOyNkZWZpbmUgX0xJTlVYX01FVEFGU19IXG4mIzQzO1xuJiM0MztzdHJ1Y3QgcGF0aDtcbiYjNDM7c3RydWN0IGZpbGU7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBHZXQgbWV0YWRhdGEgcm9vdCBwYXRoIGZvciBhIGJhc2UgZmlsZS5cbiYjNDM7ICogQ2FsbGVkIGZyb20gcGF0aF9pbml0KCkgd2hlbiBPX0FMVCBmbGFnIGlzIHVzZWQuXG4mIzQzOyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIHdpdGggcGF0aCBmaWxsZWQgaW4sIC1lcnJubyBvbiBlcnJvci5cbiYjNDM7ICovXG4mIzQzO2ludCBtZXRhZnNfZ2V0X3Jvb3Qoc3RydWN0IGZpbGUgKmJhc2UsIHN0cnVjdCBwYXRoICpwYXRoKTtcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfTElOVVhfTUVUQUZTX0ggKi9cbmRpZmYgLS1naXQgYS9mcy9tb3VudC5oIGIvZnMvbW91bnQuaFxuaW5kZXggOTRmY2MzMDZkMjFlN2QuLjY5YTk1M2JjMTEyYjM2IDEwMDY0NFxuLS0tIGEvZnMvbW91bnQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbW91bnQuaFxuQEAgLTY1LDcgJiM0Mzs2NSw2IEBAIHN0cnVjdCBtb3VudCB7XG4gXHRzdHJ1Y3QgbW91bnQgKiBfX2FsaWduZWQoMSkgKm1udF9wcHJldl9mb3Jfc2I7XG4gXHRcdFx0XHRcdC8qIGV4Y2VwdCB0aGF0IExTQiBvZiBwcHJldiBpcyBzdG9sZW4gKi9cbiAjZGVmaW5lIFdSSVRFX0hPTEQgMVx0XHRcdC8qIC4uLiBmb3IgdXNlIGJ5IG1udF9ob2xkX3dyaXRlcnMoKSAqL1xuLVx0Y29uc3QgY2hhciAqbW50X2Rldm5hbWU7XHQvKiBOYW1lIG9mIGRldmljZSBlLmcuIC9kZXYvZHNrL2hkYTEgKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgbW50X2xpc3Q7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIG1udF9leHBpcmU7XHQvKiBsaW5rIGluIGZzLXNwZWNpZmljIGV4cGlyeSBsaXN0ICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIG1udF9zaGFyZTtcdC8qIGNpcmN1bGFyIGxpc3Qgb2Ygc2hhcmVkIG1vdW50cyAqL1xuZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jXG5pbmRleCAxOWNlNDNjOWE2ZTY2Mi4uNDM3YTE0YzQzMmU2N2IgMTAwNjQ0XG4tLS0gYS9mcy9uYW1laS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9uYW1laS5jXG5AQCAtNDUsNiAmIzQzOzQ1LDcgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7bW91bnQuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDttZXRhZnMvbWV0YWZzLmhcJiMzNDtcbiBcbiAvKiBbRmViLTE5OTcgVC4gU2Nob2ViZWwtVGhldWVyXVxuICAqIEZ1bmRhbWVudGFsIGNoYW5nZXMgaW4gdGhlIHBhdGhuYW1lIGxvb2t1cCBtZWNoYW5pc21zIChuYW1laSlcbkBAIC0yNzUzLDYgJiM0MzsyNzU0LDIxIEBAIHN0YXRpYyBjb25zdCBjaGFyICpwYXRoX2luaXQoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHVuc2lnbmVkIGZsYWdzKVxuIFx0XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XG4gXHRcdH1cbiBcbiYjNDM7XHRcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgTE9PS1VQX0FMVCkpIHtcbiYjNDM7XHRcdFx0aWYgKGZsYWdzIFx1MDAyNiBMT09LVVBfUkNVKVxuJiM0MztcdFx0XHRcdHJldHVybiBFUlJfUFRSKC1FQ0hJTEQpO1xuJiM0MztcbiYjNDM7XHRcdFx0LyogSGFuZGxlIE9fQUxUOiBqdW1wIHRvIG1ldGFmcyByb290ICovXG4mIzQzO1x0XHRcdGVycm9yID0gbWV0YWZzX2dldF9yb290KGZkX2ZpbGUoZiksIFx1MDAyNm5kLVx1MDAzZXBhdGgpO1xuJiM0MztcdFx0XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyb3IpO1xuJiM0MztcbiYjNDM7XHRcdFx0bmQtXHUwMDNlaW5vZGUgPSBuZC1cdTAwM2VwYXRoLmRlbnRyeS1cdTAwM2VkX2lub2RlO1xuJiM0MztcdFx0XHRuZC1cdTAwM2VzdGF0ZSB8PSBORF9KVU1QRUQ7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXR1cm4gcztcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdGRlbnRyeSA9IGZkX2ZpbGUoZiktXHUwMDNlZl9wYXRoLmRlbnRyeTtcbiBcbiBcdFx0aWYgKCpzIFx1MDAyNlx1MDAyNiB1bmxpa2VseSghZF9jYW5fbG9va3VwKGRlbnRyeSkpKVxuZGlmZiAtLWdpdCBhL2ZzL25hbWVzcGFjZS5jIGIvZnMvbmFtZXNwYWNlLmNcbmluZGV4IDNkNWNkNWJmM2IwNTM3Li42MmNjNzFjNDAxYTJhYyAxMDA2NDRcbi0tLSBhL2ZzL25hbWVzcGFjZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9uYW1lc3BhY2UuY1xuQEAgLTI4Miw3ICYjNDM7MjgyLDcgQEAgaW50IG1udF9nZXRfY291bnQoc3RydWN0IG1vdW50ICptbnQpXG4gI2VuZGlmXG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgbW91bnQgKmFsbG9jX3Zmc21udChjb25zdCBjaGFyICpuYW1lKVxuJiM0MztzdGF0aWMgc3RydWN0IG1vdW50ICphbGxvY192ZnNtbnQodm9pZClcbiB7XG4gXHRzdHJ1Y3QgbW91bnQgKm1udCA9IGttZW1fY2FjaGVfemFsbG9jKG1udF9jYWNoZSwgR0ZQX0tFUk5FTCk7XG4gXHRpZiAobW50KSB7XG5AQCAtMjkyLDE4ICYjNDM7MjkyLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgbW91bnQgKmFsbG9jX3Zmc21udChjb25zdCBjaGFyICpuYW1lKVxuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gb3V0X2ZyZWVfY2FjaGU7XG4gXG4tXHRcdGlmIChuYW1lKVxuLVx0XHRcdG1udC1cdTAwM2VtbnRfZGV2bmFtZSA9IGtzdHJkdXBfY29uc3QobmFtZSxcbi1cdFx0XHRcdFx0XHRcdCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLVx0XHRlbHNlXG4tXHRcdFx0bW50LVx1MDAzZW1udF9kZXZuYW1lID0gXCYjMzQ7bm9uZVwmIzM0Oztcbi1cdFx0aWYgKCFtbnQtXHUwMDNlbW50X2Rldm5hbWUpXG4tXHRcdFx0Z290byBvdXRfZnJlZV9pZDtcbi1cbiAjaWZkZWYgQ09ORklHX1NNUFxuIFx0XHRtbnQtXHUwMDNlbW50X3BjcCA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgbW50X3BjcCk7XG4gXHRcdGlmICghbW50LVx1MDAzZW1udF9wY3ApXG4tXHRcdFx0Z290byBvdXRfZnJlZV9kZXZuYW1lO1xuJiM0MztcdFx0XHRnb3RvIG91dF9mcmVlX2lkO1xuIFxuIFx0XHR0aGlzX2NwdV9hZGQobW50LVx1MDAzZW1udF9wY3AtXHUwMDNlbW50X2NvdW50LCAxKTtcbiAjZWxzZVxuQEAgLTMyOCwxMSAmIzQzOzMyMCw5IEBAIHN0YXRpYyBzdHJ1Y3QgbW91bnQgKmFsbG9jX3Zmc21udChjb25zdCBjaGFyICpuYW1lKVxuIFx0cmV0dXJuIG1udDtcbiBcbiAjaWZkZWYgQ09ORklHX1NNUFxuLW91dF9mcmVlX2Rldm5hbWU6XG4tXHRrZnJlZV9jb25zdChtbnQtXHUwMDNlbW50X2Rldm5hbWUpO1xuLSNlbmRpZlxuIG91dF9mcmVlX2lkOlxuIFx0bW50X2ZyZWVfaWQobW50KTtcbiYjNDM7I2VuZGlmXG4gb3V0X2ZyZWVfY2FjaGU6XG4gXHRrbWVtX2NhY2hlX2ZyZWUobW50X2NhY2hlLCBtbnQpO1xuIFx0cmV0dXJuIE5VTEw7XG5AQCAtNzI1LDcgJiM0Mzs3MTUsNiBAQCBpbnQgc2JfcHJlcGFyZV9yZW1vdW50X3JlYWRvbmx5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gc3RhdGljIHZvaWQgZnJlZV92ZnNtbnQoc3RydWN0IG1vdW50ICptbnQpXG4ge1xuIFx0bW50X2lkbWFwX3B1dChtbnRfaWRtYXAoXHUwMDI2bW50LVx1MDAzZW1udCkpO1xuLVx0a2ZyZWVfY29uc3QobW50LVx1MDAzZW1udF9kZXZuYW1lKTtcbiAjaWZkZWYgQ09ORklHX1NNUFxuIFx0ZnJlZV9wZXJjcHUobW50LVx1MDAzZW1udF9wY3ApO1xuICNlbmRpZlxuQEAgLTExODAsNyAmIzQzOzExNjksNyBAQCBzdHJ1Y3QgdmZzbW91bnQgKnZmc19jcmVhdGVfbW91bnQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIFx0aWYgKCFmYy1cdTAwM2Vyb290KVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiBcbi1cdG1udCA9IGFsbG9jX3Zmc21udChmYy1cdTAwM2Vzb3VyY2UpO1xuJiM0MztcdG1udCA9IGFsbG9jX3Zmc21udCgpO1xuIFx0aWYgKCFtbnQpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIFxuQEAgLTEyNDgsNyAmIzQzOzEyMzcsNyBAQCBzdGF0aWMgc3RydWN0IG1vdW50ICpjbG9uZV9tbnQoc3RydWN0IG1vdW50ICpvbGQsIHN0cnVjdCBkZW50cnkgKnJvb3QsXG4gXHRzdHJ1Y3QgbW91bnQgKm1udDtcbiBcdGludCBlcnI7XG4gXG4tXHRtbnQgPSBhbGxvY192ZnNtbnQob2xkLVx1MDAzZW1udF9kZXZuYW1lKTtcbiYjNDM7XHRtbnQgPSBhbGxvY192ZnNtbnQoKTtcbiBcdGlmICghbW50KVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcbkBAIC0yOTU3LDE2ICYjNDM7Mjk0NiwxMiBAQCBzdGF0aWMgaW50IGRvX2NoYW5nZV90eXBlKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgbXNfZmxhZ3MpXG4gc3RhdGljIGlubGluZSBib29sIG1heV9jb3B5X3RyZWUoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXG4ge1xuIFx0c3RydWN0IG1vdW50ICptbnQgPSByZWFsX21vdW50KHBhdGgtXHUwMDNlbW50KTtcbi1cdGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyAqZF9vcDtcbiBcbiBcdGlmIChjaGVja19tbnQobW50KSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRkX29wID0gcGF0aC1cdTAwM2VkZW50cnktXHUwMDNlZF9vcDtcbi1cdGlmIChkX29wID09IFx1MDAyNm5zX2RlbnRyeV9vcGVyYXRpb25zKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbi1cbi1cdGlmIChkX29wID09IFx1MDAyNnBpZGZzX2RlbnRyeV9vcGVyYXRpb25zKVxuJiM0MztcdC8qIE1ha2UgYW4gZXhjZXB0aW9uIGZvciBpbnRlcm5hbCBtb3VudHMgZXhwbGljaXRseSBtYXJrZWQgYXMgY2xvbmFibGUgKi9cbiYjNDM7XHRpZiAobW50LVx1MDAzZW1udF9ucyA9PSBNTlRfTlNfSU5URVJOQUwgXHUwMDI2XHUwMDI2IG1udC1cdTAwM2VtbnQubW50X2ZsYWdzIFx1MDAyNiBNTlRfQ0xPTkFCTEUpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0aWYgKCFpc19tb3VudGVkKHBhdGgtXHUwMDNlbW50KSlcbkBAIC0zMjAxLDcgJiM0MzszMTg2LDcgQEAgc3RhdGljIHN0cnVjdCBmaWxlICp2ZnNfb3Blbl90cmVlKGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwgdW5zaWduZWRcbiBcbiBcdGlmIChmbGFncyBcdTAwMjYgfihBVF9FTVBUWV9QQVRIIHwgQVRfTk9fQVVUT01PVU5UIHwgQVRfUkVDVVJTSVZFIHxcbiBcdFx0ICAgICAgQVRfU1lNTElOS19OT0ZPTExPVyB8IE9QRU5fVFJFRV9DTE9ORSB8XG4tXHRcdCAgICAgIE9QRU5fVFJFRV9DTE9FWEVDIHwgT1BFTl9UUkVFX05BTUVTUEFDRSkpXG4mIzQzO1x0XHQgICAgICBPUEVOX1RSRUVfQ0xPRVhFQyB8IE9QRU5fVFJFRV9OQU1FU1BBQ0UgfCBPUEVOX1RSRUVfQUxUKSlcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gXG4gXHRpZiAoKGZsYWdzIFx1MDAyNiAoQVRfUkVDVVJTSVZFIHwgT1BFTl9UUkVFX0NMT05FIHwgT1BFTl9UUkVFX05BTUVTUEFDRSkpID09XG5AQCAtMzIxNSw2ICYjNDM7MzIwMCw4IEBAIHN0YXRpYyBzdHJ1Y3QgZmlsZSAqdmZzX29wZW5fdHJlZShpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsIHVuc2lnbmVkXG4gXHRcdGxvb2t1cF9mbGFncyBcdTAwMjY9IH5MT09LVVBfQVVUT01PVU5UO1xuIFx0aWYgKGZsYWdzIFx1MDAyNiBBVF9TWU1MSU5LX05PRk9MTE9XKVxuIFx0XHRsb29rdXBfZmxhZ3MgXHUwMDI2PSB+TE9PS1VQX0ZPTExPVztcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IE9QRU5fVFJFRV9BTFQpXG4mIzQzO1x0XHRsb29rdXBfZmxhZ3MgfD0gTE9PS1VQX0FMVDtcbiBcbiBcdC8qXG4gXHQgKiBJZiB3ZSBjcmVhdGUgYSBuZXcgbW91bnQgbmFtZXNwYWNlIHdpdGggdGhlIGNsb25lZCBtb3VudCB0cmVlIHdlXG5AQCAtNTM4Nyw3ICYjNDM7NTM3NCw2IEBAIHN0YXRpYyB2b2lkIHN0YXRtb3VudF9mc19zdWJ0eXBlKHN0cnVjdCBrc3RhdG1vdW50ICpzLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSlcbiBzdGF0aWMgaW50IHN0YXRtb3VudF9zYl9zb3VyY2Uoc3RydWN0IGtzdGF0bW91bnQgKnMsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxuIHtcbiBcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBzLVx1MDAzZW1udC1cdTAwM2VtbnRfc2I7XG4tXHRzdHJ1Y3QgbW91bnQgKnIgPSByZWFsX21vdW50KHMtXHUwMDNlbW50KTtcbiBcbiBcdGlmIChzYi1cdTAwM2VzX29wLVx1MDAzZXNob3dfZGV2bmFtZSkge1xuIFx0XHRzaXplX3Qgc3RhcnQgPSBzZXEtXHUwMDNlY291bnQ7XG5AQCAtNTQwNSw3ICYjNDM7NTM5MSw3IEBAIHN0YXRpYyBpbnQgc3RhdG1vdW50X3NiX3NvdXJjZShzdHJ1Y3Qga3N0YXRtb3VudCAqcywgc3RydWN0IHNlcV9maWxlICpzZXEpXG4gXHRcdHNlcS1cdTAwM2Vjb3VudCA9IHN0YXJ0O1xuIFx0XHRzZXFfY29tbWl0KHNlcSwgc3RyaW5nX3VuZXNjYXBlX2lucGxhY2Uoc2VxLVx1MDAzZWJ1ZiAmIzQzOyBzdGFydCwgVU5FU0NBUEVfT0NUQUwpKTtcbiBcdH0gZWxzZSB7XG4tXHRcdHNlcV9wdXRzKHNlcSwgci1cdTAwM2VtbnRfZGV2bmFtZSk7XG4mIzQzO1x0XHRzZXFfcHV0cyhzZXEsIHNiLVx1MDAzZXNfZGV2bmFtZSk7XG4gXHR9XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNTQxNiw2ICYjNDM7NTQwMiw0MCBAQCBzdGF0aWMgdm9pZCBzdGF0bW91bnRfbW50X25zX2lkKHN0cnVjdCBrc3RhdG1vdW50ICpzLCBzdHJ1Y3QgbW50X25hbWVzcGFjZSAqbnMpXG4gXHRzLVx1MDAzZXNtLm1udF9uc19pZCA9IG5zLVx1MDAzZW5zLm5zX2lkO1xuIH1cbiBcbiYjNDM7dm9pZCBzYl9hZGRfb3B0aW9uKHN0cnVjdCBzYl9vcHRfY3R4ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0c2JfYWRkX29wdGlvbl9wYXRoKGN0eCwgbmFtZSwgdmFsdWUsIE5VTEwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHNiX2FkZF9vcHRpb25fcGF0aChzdHJ1Y3Qgc2Jfb3B0X2N0eCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSxcbiYjNDM7XHRcdFx0Y29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXG4mIzQzO3tcbiYjNDM7XHRjdHgtXHUwMDNlYWN0b3IoY3R4LCBuYW1lLCB2YWx1ZSwgcGF0aCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGRvX3Nob3dfb3B0aW9uKHN0cnVjdCBzYl9vcHRfY3R4ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlLFxuJiM0MztcdFx0XHQgICBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aClcbiYjNDM7e1xuJiM0MztcdGlmIChzdHJjbXAobmFtZSwgXCYjMzQ7c291cmNlXCYjMzQ7KSAhPSAwKVxuJiM0MztcdFx0c2VxX3Nob3dfb3B0aW9uKGN0eC1cdTAwM2VkYXRhLCBuYW1lLCB2YWx1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBtbnRfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgdmZzbW91bnQgKm1udClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBtbnQtXHUwMDNlbW50X3NiO1xuJiM0MztcbiYjNDM7XHRpZiAoc2ItXHUwMDNlc19vcC1cdTAwM2VzaG93X29wdGlvbnMpXG4mIzQzO1x0XHRyZXR1cm4gc2ItXHUwMDNlc19vcC1cdTAwM2VzaG93X29wdGlvbnMoc2VxLCBtbnQtXHUwMDNlbW50X3Jvb3QpO1xuJiM0MztcbiYjNDM7XHRpZiAoc2ItXHUwMDNlc19vcC1cdTAwM2VnZXRfb3B0aW9ucykge1xuJiM0MztcdFx0c3RydWN0IHNiX29wdF9jdHggY3R4ID0geyAuZGF0YSA9IHNlcSwgLmFjdG9yID0gZG9fc2hvd19vcHRpb24gfTtcbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm4gc2ItXHUwMDNlc19vcC1cdTAwM2VnZXRfb3B0aW9ucyhcdTAwMjZjdHgsIG1udC1cdTAwM2VtbnRfcm9vdCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHN0YXRtb3VudF9tbnRfb3B0cyhzdHJ1Y3Qga3N0YXRtb3VudCAqcywgc3RydWN0IHNlcV9maWxlICpzZXEpXG4ge1xuIFx0c3RydWN0IHZmc21vdW50ICptbnQgPSBzLVx1MDAzZW1udDtcbkBAIC01NDI3LDExICYjNDM7NTQ0Nyw5IEBAIHN0YXRpYyBpbnQgc3RhdG1vdW50X21udF9vcHRzKHN0cnVjdCBrc3RhdG1vdW50ICpzLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSlcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRpZiAoc2ItXHUwMDNlc19vcC1cdTAwM2VzaG93X29wdGlvbnMpIHtcbi1cdFx0ZXJyID0gc2ItXHUwMDNlc19vcC1cdTAwM2VzaG93X29wdGlvbnMoc2VxLCBtbnQtXHUwMDNlbW50X3Jvb3QpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdHJldHVybiBlcnI7XG4tXHR9XG4mIzQzO1x0ZXJyID0gbW50X3Nob3dfb3B0aW9ucyhzZXEsIG1udCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4gXG4gXHRpZiAodW5saWtlbHkoc2VxX2hhc19vdmVyZmxvd2VkKHNlcSkpKVxuIFx0XHRyZXR1cm4gLUVBR0FJTjtcbkBAIC01NDc5LDE0ICYjNDM7NTQ5NywxMCBAQCBzdGF0aWMgaW5saW5lIGludCBzdGF0bW91bnRfb3B0X3Byb2Nlc3Moc3RydWN0IHNlcV9maWxlICpzZXEsIHNpemVfdCBzdGFydClcbiBzdGF0aWMgaW50IHN0YXRtb3VudF9vcHRfYXJyYXkoc3RydWN0IGtzdGF0bW91bnQgKnMsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxuIHtcbiBcdHN0cnVjdCB2ZnNtb3VudCAqbW50ID0gcy1cdTAwM2VtbnQ7XG4tXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gbW50LVx1MDAzZW1udF9zYjtcbiBcdHNpemVfdCBzdGFydCA9IHNlcS1cdTAwM2Vjb3VudDtcbiBcdGludCBlcnI7XG4gXG4tXHRpZiAoIXNiLVx1MDAzZXNfb3AtXHUwMDNlc2hvd19vcHRpb25zKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdGVyciA9IHNiLVx1MDAzZXNfb3AtXHUwMDNlc2hvd19vcHRpb25zKHNlcSwgbW50LVx1MDAzZW1udF9yb290KTtcbiYjNDM7XHRlcnIgPSBtbnRfc2hvd19vcHRpb25zKHNlcSwgbW50KTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvbnNmcy5jIGIvZnMvbnNmcy5jXG5pbmRleCBjM2I2YWU3NjU5NGE4MS4uZTExMDEzMGQwNzYwZTUgMTAwNjQ0XG4tLS0gYS9mcy9uc2ZzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25zZnMuY1xuQEAgLTY4NCw2ICYjNDM7Njg0LDcgQEAgdm9pZCBfX2luaXQgbnNmc19pbml0KHZvaWQpXG4gXHRpZiAoSVNfRVJSKG5zZnNfbW50KSlcbiBcdFx0cGFuaWMoXCYjMzQ7Y2FuJiMzOTt0IHNldCBuc2ZzIHVwXFxuXCYjMzQ7KTtcbiBcdG5zZnNfbW50LVx1MDAzZW1udF9zYi1cdTAwM2VzX2ZsYWdzIFx1MDAyNj0gflNCX05PVVNFUjtcbiYjNDM7XHRuc2ZzX21udC1cdTAwM2VtbnRfZmxhZ3MgfD0gTU5UX0NMT05BQkxFO1xuIFx0bnNmc19yb290X3BhdGgubW50ID0gbnNmc19tbnQ7XG4gXHRuc2ZzX3Jvb3RfcGF0aC5kZW50cnkgPSBuc2ZzX21udC1cdTAwM2VtbnRfcm9vdDtcbiB9XG5kaWZmIC0tZ2l0IGEvZnMvb3Blbi5jIGIvZnMvb3Blbi5jXG5pbmRleCA0MDg5MjVkN2JkMGI3Ny4uM2EwODFhOWUzMDYyNDMgMTAwNjQ0XG4tLS0gYS9mcy9vcGVuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29wZW4uY1xuQEAgLTExMzEsNyAmIzQzOzExMzEsOCBAQCBzdHJ1Y3QgZmlsZSAqa2VybmVsX2ZpbGVfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IGZsYWdzLFxuIEVYUE9SVF9TWU1CT0xfR1BMKGtlcm5lbF9maWxlX29wZW4pO1xuIFxuICNkZWZpbmUgV0lMTF9DUkVBVEUoZmxhZ3MpXHQoZmxhZ3MgXHUwMDI2IChPX0NSRUFUIHwgX19PX1RNUEZJTEUpKVxuLSNkZWZpbmUgT19QQVRIX0ZMQUdTXHRcdChPX0RJUkVDVE9SWSB8IE9fTk9GT0xMT1cgfCBPX1BBVEggfCBPX0NMT0VYRUMgfCBPX0VNUFRZUEFUSClcbiYjNDM7I2RlZmluZSBPX1BBVEhfRkxBR1NcdFx0KE9fRElSRUNUT1JZIHwgT19OT0ZPTExPVyB8IE9fUEFUSCB8IE9fQ0xPRVhFQyB8IE9fRU1QVFlQQVRIIHwgXFxcbiYjNDM7XHRcdFx0XHQgT19BTFQpXG4gXG4gaW5saW5lIHN0cnVjdCBvcGVuX2hvdyBidWlsZF9vcGVuX2hvdyhpbnQgZmxhZ3MsIHVtb2RlX3QgbW9kZSlcbiB7XG5AQCAtMTI4Myw2ICYjNDM7MTI4NCw4IEBAIGlubGluZSBpbnQgYnVpbGRfb3Blbl9mbGFncyhjb25zdCBzdHJ1Y3Qgb3Blbl9ob3cgKmhvdywgc3RydWN0IG9wZW5fZmxhZ3MgKm9wKVxuIFx0XHRsb29rdXBfZmxhZ3MgfD0gTE9PS1VQX0ZPTExPVztcbiBcdGlmIChmbGFncyBcdTAwMjYgT19FTVBUWVBBVEgpXG4gXHRcdGxvb2t1cF9mbGFncyB8PSBMT09LVVBfRU1QVFk7XG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiBPX0FMVClcbiYjNDM7XHRcdGxvb2t1cF9mbGFncyB8PSBMT09LVVBfQUxUO1xuIFxuIFx0aWYgKGhvdy1cdTAwM2VyZXNvbHZlIFx1MDAyNiBSRVNPTFZFX05PX1hERVYpXG4gXHRcdGxvb2t1cF9mbGFncyB8PSBMT09LVVBfTk9fWERFVjtcbmRpZmYgLS1naXQgYS9mcy9vdmVybGF5ZnMvcGFyYW1zLmMgYi9mcy9vdmVybGF5ZnMvcGFyYW1zLmNcbmluZGV4IGM5M2ZjYWE0NWQ0YTM2Li5jNWE5ZTg1OGUzNjY1ZSAxMDA2NDRcbi0tLSBhL2ZzL292ZXJsYXlmcy9wYXJhbXMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvb3ZlcmxheWZzL3BhcmFtcy5jXG5AQCAtMTA0NiwxMCAmIzQzOzEwNDYsMTEgQEAgaW50IG92bF9mc19wYXJhbXNfdmVyaWZ5KGNvbnN0IHN0cnVjdCBvdmxfZnNfY29udGV4dCAqY3R4LFxuICAqIFByaW50cyB0aGUgbW91bnQgb3B0aW9ucyBmb3IgYSBnaXZlbiBzdXBlcmJsb2NrLlxuICAqIFJldHVybnMgemVybzsgZG9lcyBub3QgZmFpbC5cbiAgKi9cbi1pbnQgb3ZsX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiYjNDM7aW50IG92bF9nZXRfb3B0aW9ucyhzdHJ1Y3Qgc2Jfb3B0X2N0eCAqY3R4LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4ge1xuIFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRlbnRyeS1cdTAwM2VkX3NiO1xuIFx0c3RydWN0IG92bF9mcyAqb2ZzID0gT1ZMX0ZTKHNiKTtcbiYjNDM7XHRzdHJ1Y3QgcGF0aCB1cHBlcnBhdGg7XG4gXHRzaXplX3QgbnIsIG5yX21lcmdlZF9sb3dlciwgbnJfbG93ZXIgPSAwO1xuIFx0Y2hhciAqKmxvd2VyZGlycyA9IG9mcy1cdTAwM2Vjb25maWcubG93ZXJkaXJzO1xuIFxuQEAgLTEwNjIsNDMgJiM0MzsxMDYzLDQ3IEBAIGludCBvdmxfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0ICogd2l0aCB0aGUgbmV3IGxvd2VyZGlyJiM0MzsgYW5kIGRhdGFkaXImIzQzOyBtb3VudCBvcHRpb25zLlxuIFx0ICovXG4gXHRpZiAobG93ZXJkaXJzWzBdKSB7XG4tXHRcdHNlcV9zaG93X29wdGlvbihtLCBcJiMzNDtsb3dlcmRpclwmIzM0OywgbG93ZXJkaXJzWzBdKTtcbiYjNDM7XHRcdHNiX2FkZF9vcHRpb24oY3R4LCBcJiMzNDtsb3dlcmRpclwmIzM0OywgbG93ZXJkaXJzWzBdKTtcbiBcdH0gZWxzZSB7XG4gXHRcdG5yX2xvd2VyID0gb2ZzLVx1MDAzZW51bWxheWVyO1xuIFx0XHRucl9tZXJnZWRfbG93ZXIgPSBucl9sb3dlciAtIG9mcy1cdTAwM2VudW1kYXRhbGF5ZXI7XG4gXHR9XG4gXHRmb3IgKG5yID0gMTsgbnIgXHUwMDNjIG5yX2xvd2VyOyBuciYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBwYXRoIGxvd2VycGF0aCA9IHtcbiYjNDM7XHRcdFx0Lm1udCA9IG9mcy1cdTAwM2VsYXllcnNbbnJdLm1udCxcbiYjNDM7XHRcdFx0LmRlbnRyeSA9IG9mcy1cdTAwM2VsYXllcnNbbnJdLm1udC1cdTAwM2VtbnRfcm9vdCxcbiYjNDM7XHRcdH07XG4gXHRcdGlmIChuciBcdTAwM2MgbnJfbWVyZ2VkX2xvd2VyKVxuLVx0XHRcdHNlcV9zaG93X29wdGlvbihtLCBcJiMzNDtsb3dlcmRpciYjNDM7XCYjMzQ7LCBsb3dlcmRpcnNbbnJdKTtcbiYjNDM7XHRcdFx0c2JfYWRkX29wdGlvbl9wYXRoKGN0eCwgXCYjMzQ7bG93ZXJkaXImIzQzO1wmIzM0OywgbG93ZXJkaXJzW25yXSxcbiYjNDM7XHRcdFx0XHRcdCAgIFx1MDAyNmxvd2VycGF0aCk7XG4gXHRcdGVsc2Vcbi1cdFx0XHRzZXFfc2hvd19vcHRpb24obSwgXCYjMzQ7ZGF0YWRpciYjNDM7XCYjMzQ7LCBsb3dlcmRpcnNbbnJdKTtcbiYjNDM7XHRcdFx0c2JfYWRkX29wdGlvbl9wYXRoKGN0eCwgXCYjMzQ7ZGF0YWRpciYjNDM7XCYjMzQ7LCBsb3dlcmRpcnNbbnJdLFxuJiM0MztcdFx0XHRcdFx0ICAgXHUwMDI2bG93ZXJwYXRoKTtcbiBcdH1cbiBcdGlmIChvZnMtXHUwMDNlY29uZmlnLnVwcGVyZGlyKSB7XG4tXHRcdHNlcV9zaG93X29wdGlvbihtLCBcJiMzNDt1cHBlcmRpclwmIzM0Oywgb2ZzLVx1MDAzZWNvbmZpZy51cHBlcmRpcik7XG4tXHRcdHNlcV9zaG93X29wdGlvbihtLCBcJiMzNDt3b3JrZGlyXCYjMzQ7LCBvZnMtXHUwMDNlY29uZmlnLndvcmtkaXIpO1xuJiM0MztcdFx0b3ZsX3BhdGhfdXBwZXIoc2ItXHUwMDNlc19yb290LCBcdTAwMjZ1cHBlcnBhdGgpO1xuJiM0MztcdFx0c2JfYWRkX29wdGlvbl9wYXRoKGN0eCwgXCYjMzQ7dXBwZXJkaXJcJiMzNDssIG9mcy1cdTAwM2Vjb25maWcudXBwZXJkaXIsIFx1MDAyNnVwcGVycGF0aCk7XG4mIzQzO1x0XHRzYl9hZGRfb3B0aW9uKGN0eCwgXCYjMzQ7d29ya2RpclwmIzM0Oywgb2ZzLVx1MDAzZWNvbmZpZy53b3JrZGlyKTtcbiBcdH1cbiBcdGlmIChvZnMtXHUwMDNlY29uZmlnLmRlZmF1bHRfcGVybWlzc2lvbnMpXG4tXHRcdHNlcV9wdXRzKG0sIFwmIzM0OyxkZWZhdWx0X3Blcm1pc3Npb25zXCYjMzQ7KTtcbiYjNDM7XHRcdHNiX2FkZF9vcHRpb24oY3R4LCBcJiMzNDtkZWZhdWx0X3Blcm1pc3Npb25zXCYjMzQ7LCBOVUxMKTtcbiBcdGlmIChvZnMtXHUwMDNlY29uZmlnLnJlZGlyZWN0X21vZGUgIT0gb3ZsX3JlZGlyZWN0X21vZGVfZGVmKCkpXG4tXHRcdHNlcV9wcmludGYobSwgXCYjMzQ7LHJlZGlyZWN0X2Rpcj0lc1wmIzM0Oyxcbi1cdFx0XHQgICBvdmxfcmVkaXJlY3RfbW9kZShcdTAwMjZvZnMtXHUwMDNlY29uZmlnKSk7XG4mIzQzO1x0XHRzYl9hZGRfb3B0aW9uKGN0eCwgXCYjMzQ7cmVkaXJlY3RfZGlyXCYjMzQ7LCBvdmxfcmVkaXJlY3RfbW9kZShcdTAwMjZvZnMtXHUwMDNlY29uZmlnKSk7XG4gXHRpZiAob2ZzLVx1MDAzZWNvbmZpZy5pbmRleCAhPSBvdmxfaW5kZXhfZGVmKVxuLVx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyxpbmRleD0lc1wmIzM0Oywgc3RyX29uX29mZihvZnMtXHUwMDNlY29uZmlnLmluZGV4KSk7XG4mIzQzO1x0XHRzYl9hZGRfb3B0aW9uKGN0eCwgXCYjMzQ7aW5kZXhcJiMzNDssIHN0cl9vbl9vZmYob2ZzLVx1MDAzZWNvbmZpZy5pbmRleCkpO1xuIFx0aWYgKG9mcy1cdTAwM2Vjb25maWcudXVpZCAhPSBvdmxfdXVpZF9kZWYoKSlcbi1cdFx0c2VxX3ByaW50ZihtLCBcJiMzNDssdXVpZD0lc1wmIzM0Oywgb3ZsX3V1aWRfbW9kZShcdTAwMjZvZnMtXHUwMDNlY29uZmlnKSk7XG4mIzQzO1x0XHRzYl9hZGRfb3B0aW9uKGN0eCwgXCYjMzQ7dXVpZFwmIzM0Oywgb3ZsX3V1aWRfbW9kZShcdTAwMjZvZnMtXHUwMDNlY29uZmlnKSk7XG4gXHRpZiAob2ZzLVx1MDAzZWNvbmZpZy5uZnNfZXhwb3J0ICE9IG92bF9uZnNfZXhwb3J0X2RlZilcbi1cdFx0c2VxX3ByaW50ZihtLCBcJiMzNDssbmZzX2V4cG9ydD0lc1wmIzM0Oyxcbi1cdFx0XHQgICBzdHJfb25fb2ZmKG9mcy1cdTAwM2Vjb25maWcubmZzX2V4cG9ydCkpO1xuJiM0MztcdFx0c2JfYWRkX29wdGlvbihjdHgsIFwmIzM0O25mc19leHBvcnRcJiMzNDssIHN0cl9vbl9vZmYob2ZzLVx1MDAzZWNvbmZpZy5uZnNfZXhwb3J0KSk7XG4gXHRpZiAob2ZzLVx1MDAzZWNvbmZpZy54aW5vICE9IG92bF94aW5vX2RlZigpIFx1MDAyNlx1MDAyNiAhb3ZsX3NhbWVfZnMob2ZzKSlcbi1cdFx0c2VxX3ByaW50ZihtLCBcJiMzNDsseGlubz0lc1wmIzM0Oywgb3ZsX3hpbm9fbW9kZShcdTAwMjZvZnMtXHUwMDNlY29uZmlnKSk7XG4mIzQzO1x0XHRzYl9hZGRfb3B0aW9uKGN0eCwgXCYjMzQ7eGlub1wmIzM0Oywgb3ZsX3hpbm9fbW9kZShcdTAwMjZvZnMtXHUwMDNlY29uZmlnKSk7XG4gXHRpZiAob2ZzLVx1MDAzZWNvbmZpZy5tZXRhY29weSAhPSBvdmxfbWV0YWNvcHlfZGVmKVxuLVx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyxtZXRhY29weT0lc1wmIzM0Oywgc3RyX29uX29mZihvZnMtXHUwMDNlY29uZmlnLm1ldGFjb3B5KSk7XG4mIzQzO1x0XHRzYl9hZGRfb3B0aW9uKGN0eCwgXCYjMzQ7bWV0YWNvcHlcJiMzNDssIHN0cl9vbl9vZmYob2ZzLVx1MDAzZWNvbmZpZy5tZXRhY29weSkpO1xuIFx0aWYgKG9mcy1cdTAwM2Vjb25maWcuZnN5bmNfbW9kZSAhPSBvdmxfZnN5bmNfbW9kZV9kZWYoKSlcbi1cdFx0c2VxX3ByaW50ZihtLCBcJiMzNDssZnN5bmM9JXNcJiMzNDssIG92bF9mc3luY19tb2RlKFx1MDAyNm9mcy1cdTAwM2Vjb25maWcpKTtcbiYjNDM7XHRcdHNiX2FkZF9vcHRpb24oY3R4LCBcJiMzNDtmc3luY1wmIzM0Oywgb3ZsX2ZzeW5jX21vZGUoXHUwMDI2b2ZzLVx1MDAzZWNvbmZpZykpO1xuIFx0aWYgKG9mcy1cdTAwM2Vjb25maWcudXNlcnhhdHRyKVxuLVx0XHRzZXFfcHV0cyhtLCBcJiMzNDssdXNlcnhhdHRyXCYjMzQ7KTtcbiYjNDM7XHRcdHNiX2FkZF9vcHRpb24oY3R4LCBcJiMzNDt1c2VyeGF0dHJcJiMzNDssIE5VTEwpO1xuIFx0aWYgKG9mcy1cdTAwM2Vjb25maWcudmVyaXR5X21vZGUgIT0gb3ZsX3Zlcml0eV9tb2RlX2RlZigpKVxuLVx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0Oyx2ZXJpdHk9JXNcJiMzNDssXG4tXHRcdFx0ICAgb3ZsX3Zlcml0eV9tb2RlKFx1MDAyNm9mcy1cdTAwM2Vjb25maWcpKTtcbiYjNDM7XHRcdHNiX2FkZF9vcHRpb24oY3R4LCBcJiMzNDt2ZXJpdHlcJiMzNDssIG92bF92ZXJpdHlfbW9kZShcdTAwMjZvZnMtXHUwMDNlY29uZmlnKSk7XG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvZnMvb3ZlcmxheWZzL3BhcmFtcy5oIGIvZnMvb3ZlcmxheWZzL3BhcmFtcy5oXG5pbmRleCBmZmQ1M2NkZDg0ODI3Yy4uMmNmOWM0ZjE4OGE5Y2IgMTAwNjQ0XG4tLS0gYS9mcy9vdmVybGF5ZnMvcGFyYW1zLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL292ZXJsYXlmcy9wYXJhbXMuaFxuQEAgLTQwLDUgJiM0Mzs0MCw1IEBAIGludCBvdmxfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYyk7XG4gdm9pZCBvdmxfZnJlZV9mcyhzdHJ1Y3Qgb3ZsX2ZzICpvZnMpO1xuIGludCBvdmxfZnNfcGFyYW1zX3ZlcmlmeShjb25zdCBzdHJ1Y3Qgb3ZsX2ZzX2NvbnRleHQgKmN0eCxcbiBcdFx0XHQgc3RydWN0IG92bF9jb25maWcgKmNvbmZpZyk7XG4taW50IG92bF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuJiM0MztpbnQgb3ZsX2dldF9vcHRpb25zKHN0cnVjdCBzYl9vcHRfY3R4ICpjdHgsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG4gY29uc3QgY2hhciAqb3ZsX3hpbm9fbW9kZShzdHJ1Y3Qgb3ZsX2NvbmZpZyAqY29uZmlnKTtcbmRpZmYgLS1naXQgYS9mcy9vdmVybGF5ZnMvc3VwZXIuYyBiL2ZzL292ZXJsYXlmcy9zdXBlci5jXG5pbmRleCA2MGYwYjdjZWVmMGE2ZC4uNGI1N2IyZGIwODUyMjUgMTAwNjQ0XG4tLS0gYS9mcy9vdmVybGF5ZnMvc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvb3ZlcmxheWZzL3N1cGVyLmNcbkBAIC0zMDIsNyAmIzQzOzMwMiw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBvdmxfc3VwZXJfb3BlcmF0aW9ucyA9IHtcbiBcdC5wdXRfc3VwZXJcdD0gb3ZsX3B1dF9zdXBlcixcbiBcdC5zeW5jX2ZzXHQ9IG92bF9zeW5jX2ZzLFxuIFx0LnN0YXRmc1x0XHQ9IG92bF9zdGF0ZnMsXG4tXHQuc2hvd19vcHRpb25zXHQ9IG92bF9zaG93X29wdGlvbnMsXG4mIzQzO1x0LmdldF9vcHRpb25zXHQ9IG92bF9nZXRfb3B0aW9ucyxcbiB9O1xuIFxuICNkZWZpbmUgT1ZMX1dPUktESVJfTkFNRSBcJiMzNDt3b3JrXCYjMzQ7XG5AQCAtNTI5LDYgJiM0Mzs1MjksNyBAQCBzdGF0aWMgaW50IG92bF9nZXRfdXBwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IG92bF9mcyAqb2ZzLFxuIFxuIFx0LyogRG9uJiMzOTt0IGluaGVyaXQgYXRpbWUgZmxhZ3MgKi9cbiBcdHVwcGVyX21udC1cdTAwM2VtbnRfZmxhZ3MgXHUwMDI2PSB+KE1OVF9OT0FUSU1FIHwgTU5UX05PRElSQVRJTUUgfCBNTlRfUkVMQVRJTUUpO1xuJiM0MztcdHVwcGVyX21udC1cdTAwM2VtbnRfZmxhZ3MgfD0gTU5UX0NMT05BQkxFO1xuIFx0dXBwZXJfbGF5ZXItXHUwMDNlbW50ID0gdXBwZXJfbW50O1xuIFx0dXBwZXJfbGF5ZXItXHUwMDNlaWR4ID0gMDtcbiBcdHVwcGVyX2xheWVyLVx1MDAzZWZzaWQgPSAwO1xuQEAgLTExMDUsNyAmIzQzOzExMDYsNyBAQCBzdGF0aWMgaW50IG92bF9nZXRfbGF5ZXJzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBvdmxfZnMgKm9mcyxcbiBcdFx0ICogTWFrZSBsb3dlciBsYXllcnMgUi9PLiAgVGhhdCB3YXkgZmNobW9kL2ZjaG93biBvbiBsb3dlciBmaWxlXG4gXHRcdCAqIHdpbGwgZmFpbCBpbnN0ZWFkIG9mIG1vZGlmeWluZyBsb3dlciBmcy5cbiBcdFx0ICovXG4tXHRcdG1udC1cdTAwM2VtbnRfZmxhZ3MgfD0gTU5UX1JFQURPTkxZIHwgTU5UX05PQVRJTUU7XG4mIzQzO1x0XHRtbnQtXHUwMDNlbW50X2ZsYWdzIHw9IE1OVF9SRUFET05MWSB8IE1OVF9OT0FUSU1FIHwgTU5UX0NMT05BQkxFO1xuIFxuIFx0XHRsYXllcnNbb2ZzLVx1MDAzZW51bWxheWVyXS50cmFwID0gdHJhcDtcbiBcdFx0bGF5ZXJzW29mcy1cdTAwM2VudW1sYXllcl0ubW50ID0gbW50O1xuZGlmZiAtLWdpdCBhL2ZzL3BpZGZzLmMgYi9mcy9waWRmcy5jXG5pbmRleCBhYWE2MDlkZGFiMDQ0My4uMzg0M2FjZDY1OTRkZTAgMTAwNjQ0XG4tLS0gYS9mcy9waWRmcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9waWRmcy5jXG5AQCAtODQwLDcgJiM0Mzs4NDAsNyBAQCBzdGF0aWMgY2hhciAqcGlkZnNfZG5hbWUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpidWZmZXIsIGludCBidWZsZW4pXG4gXHRyZXR1cm4gZHluYW1pY19kbmFtZShidWZmZXIsIGJ1ZmxlbiwgXCYjMzQ7YW5vbl9pbm9kZTpbcGlkZmRdXCYjMzQ7KTtcbiB9XG4gXG4tY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHBpZGZzX2RlbnRyeV9vcGVyYXRpb25zID0ge1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHBpZGZzX2RlbnRyeV9vcGVyYXRpb25zID0ge1xuIFx0LmRfZG5hbWVcdD0gcGlkZnNfZG5hbWUsXG4gXHQuZF9wcnVuZVx0PSBzdGFzaGVkX2RlbnRyeV9wcnVuZSxcbiB9O1xuQEAgLTExNTEsNiAmIzQzOzExNTEsOCBAQCB2b2lkIF9faW5pdCBwaWRmc19pbml0KHZvaWQpXG4gXHRpZiAoSVNfRVJSKHBpZGZzX21udCkpXG4gXHRcdHBhbmljKFwmIzM0O0ZhaWxlZCB0byBtb3VudCBwaWRmcyBwc2V1ZG8gZmlsZXN5c3RlbVwmIzM0Oyk7XG4gXG4mIzQzO1x0cGlkZnNfbW50LVx1MDAzZW1udF9mbGFncyB8PSBNTlRfQ0xPTkFCTEU7XG4mIzQzO1xuIFx0cGlkZnNfcm9vdF9wYXRoLm1udCA9IHBpZGZzX21udDtcbiBcdHBpZGZzX3Jvb3RfcGF0aC5kZW50cnkgPSBwaWRmc19tbnQtXHUwMDNlbW50X3Jvb3Q7XG4gfVxuZGlmZiAtLWdpdCBhL2ZzL3Byb2NfbmFtZXNwYWNlLmMgYi9mcy9wcm9jX25hbWVzcGFjZS5jXG5pbmRleCA1YzU1NWRiNjhhYTIxMi4uOTRiYzRjOWFhNDNmMTYgMTAwNjQ0XG4tLS0gYS9mcy9wcm9jX25hbWVzcGFjZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9wcm9jX25hbWVzcGFjZS5jXG5AQCAtOTgsMjEgJiM0Mzs5OCwyNyBAQCBzdGF0aWMgdm9pZCBzaG93X3R5cGUoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0fVxuIH1cbiBcbiYjNDM7c3RhdGljIGludCBzaG93X2Rldm5hbWUoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgdmZzbW91bnQgKm1udClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBtbnQtXHUwMDNlbW50X3NiO1xuJiM0MztcbiYjNDM7XHRpZiAoc2ItXHUwMDNlc19vcC1cdTAwM2VzaG93X2Rldm5hbWUpXG4mIzQzO1x0XHRyZXR1cm4gc2ItXHUwMDNlc19vcC1cdTAwM2VzaG93X2Rldm5hbWUobSwgbW50LVx1MDAzZW1udF9yb290KTtcbiYjNDM7XG4mIzQzO1x0bWFuZ2xlKG0sIHNiLVx1MDAzZXNfZGV2bmFtZSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBzaG93X3Zmc21udChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB2ZnNtb3VudCAqbW50KVxuIHtcbiBcdHN0cnVjdCBwcm9jX21vdW50cyAqcCA9IG0tXHUwMDNlcHJpdmF0ZTtcbi1cdHN0cnVjdCBtb3VudCAqciA9IHJlYWxfbW91bnQobW50KTtcbiBcdHN0cnVjdCBwYXRoIG1udF9wYXRoID0geyAuZGVudHJ5ID0gbW50LVx1MDAzZW1udF9yb290LCAubW50ID0gbW50IH07XG4gXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gbW50X3BhdGguZGVudHJ5LVx1MDAzZWRfc2I7XG4gXHRpbnQgZXJyO1xuIFxuLVx0aWYgKHNiLVx1MDAzZXNfb3AtXHUwMDNlc2hvd19kZXZuYW1lKSB7XG4tXHRcdGVyciA9IHNiLVx1MDAzZXNfb3AtXHUwMDNlc2hvd19kZXZuYW1lKG0sIG1udF9wYXRoLmRlbnRyeSk7XG4tXHRcdGlmIChlcnIpXG4tXHRcdFx0Z290byBvdXQ7XG4tXHR9IGVsc2Uge1xuLVx0XHRtYW5nbGUobSwgci1cdTAwM2VtbnRfZGV2bmFtZSk7XG4tXHR9XG4mIzQzO1x0ZXJyID0gc2hvd19kZXZuYW1lKG0sIG1udCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gb3V0O1xuIFx0c2VxX3B1dGMobSwgJiMzOTsgJiMzOTspO1xuIFx0LyogbW91bnRwb2ludHMgb3V0c2lkZSBvZiBjaHJvb3QgamFpbCB3aWxsIGdpdmUgU0VRX1NLSVAgb24gdGhpcyAqL1xuIFx0ZXJyID0gc2VxX3BhdGhfcm9vdChtLCBcdTAwMjZtbnRfcGF0aCwgXHUwMDI2cC1cdTAwM2Vyb290LCBcJiMzNDsgXFx0XFxuXFxcXFwmIzM0Oyk7XG5AQCAtMTI1LDggJiM0MzsxMzEsNyBAQCBzdGF0aWMgaW50IHNob3dfdmZzbW50KHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHZmc21vdW50ICptbnQpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIG91dDtcbiBcdHNob3dfdmZzbW50X29wdHMobSwgbW50KTtcbi1cdGlmIChzYi1cdTAwM2VzX29wLVx1MDAzZXNob3dfb3B0aW9ucylcbi1cdFx0ZXJyID0gc2ItXHUwMDNlc19vcC1cdTAwM2VzaG93X29wdGlvbnMobSwgbW50X3BhdGguZGVudHJ5KTtcbiYjNDM7XHRlcnIgPSBtbnRfc2hvd19vcHRpb25zKG0sIG1udCk7XG4gXHRzZXFfcHV0cyhtLCBcJiMzNDsgMCAwXFxuXCYjMzQ7KTtcbiBvdXQ6XG4gXHRyZXR1cm4gZXJyO1xuQEAgLTE3MiwxOSAmIzQzOzE3NywxNCBAQCBzdGF0aWMgaW50IHNob3dfbW91bnRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHZmc21vdW50ICptbnQpXG4gXHRzZXFfcHV0cyhtLCBcJiMzNDsgLSBcJiMzNDspO1xuIFx0c2hvd190eXBlKG0sIHNiKTtcbiBcdHNlcV9wdXRjKG0sICYjMzk7ICYjMzk7KTtcbi1cdGlmIChzYi1cdTAwM2VzX29wLVx1MDAzZXNob3dfZGV2bmFtZSkge1xuLVx0XHRlcnIgPSBzYi1cdTAwM2VzX29wLVx1MDAzZXNob3dfZGV2bmFtZShtLCBtbnQtXHUwMDNlbW50X3Jvb3QpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdGdvdG8gb3V0O1xuLVx0fSBlbHNlIHtcbi1cdFx0bWFuZ2xlKG0sIHItXHUwMDNlbW50X2Rldm5hbWUpO1xuLVx0fVxuJiM0MztcdGVyciA9IHNob3dfZGV2bmFtZShtLCBtbnQpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiBcdHNlcV9wdXRzKG0sIHNiX3Jkb25seShzYikgPyBcJiMzNDsgcm9cJiMzNDsgOiBcJiMzNDsgcndcJiMzNDspO1xuIFx0ZXJyID0gc2hvd19zYl9vcHRzKG0sIHNiKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gb3V0O1xuLVx0aWYgKHNiLVx1MDAzZXNfb3AtXHUwMDNlc2hvd19vcHRpb25zKVxuLVx0XHRlcnIgPSBzYi1cdTAwM2VzX29wLVx1MDAzZXNob3dfb3B0aW9ucyhtLCBtbnQtXHUwMDNlbW50X3Jvb3QpO1xuJiM0MztcdGVyciA9IG1udF9zaG93X29wdGlvbnMobSwgbW50KTtcbiBcdHNlcV9wdXRjKG0sICYjMzk7XFxuJiMzOTspO1xuIG91dDpcbiBcdHJldHVybiBlcnI7XG5AQCAtMTkzLDIxICYjNDM7MTkzLDE1IEBAIHN0YXRpYyBpbnQgc2hvd19tb3VudGluZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgdmZzbW91bnQgKm1udClcbiBzdGF0aWMgaW50IHNob3dfdmZzc3RhdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB2ZnNtb3VudCAqbW50KVxuIHtcbiBcdHN0cnVjdCBwcm9jX21vdW50cyAqcCA9IG0tXHUwMDNlcHJpdmF0ZTtcbi1cdHN0cnVjdCBtb3VudCAqciA9IHJlYWxfbW91bnQobW50KTtcbiBcdHN0cnVjdCBwYXRoIG1udF9wYXRoID0geyAuZGVudHJ5ID0gbW50LVx1MDAzZW1udF9yb290LCAubW50ID0gbW50IH07XG4gXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gbW50X3BhdGguZGVudHJ5LVx1MDAzZWRfc2I7XG4gXHRpbnQgZXJyO1xuIFxuIFx0LyogZGV2aWNlICovXG4gXHRzZXFfcHV0cyhtLCBcJiMzNDtkZXZpY2UgXCYjMzQ7KTtcbi1cdGlmIChzYi1cdTAwM2VzX29wLVx1MDAzZXNob3dfZGV2bmFtZSkge1xuLVx0XHRlcnIgPSBzYi1cdTAwM2VzX29wLVx1MDAzZXNob3dfZGV2bmFtZShtLCBtbnRfcGF0aC5kZW50cnkpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdGdvdG8gb3V0O1xuLVx0fSBlbHNlIHtcbi1cdFx0bWFuZ2xlKG0sIHItXHUwMDNlbW50X2Rldm5hbWUpO1xuLVx0fVxuLVxuJiM0MztcdGVyciA9IHNob3dfZGV2bmFtZShtLCBtbnQpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiBcdC8qIG1vdW50IHBvaW50ICovXG4gXHRzZXFfcHV0cyhtLCBcJiMzNDsgbW91bnRlZCBvbiBcJiMzNDspO1xuIFx0LyogbW91bnRwb2ludHMgb3V0c2lkZSBvZiBjaHJvb3QgamFpbCB3aWxsIGdpdmUgU0VRX1NLSVAgb24gdGhpcyAqL1xuZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jXG5pbmRleCBhOGZkNjExMzZhYWZlNS4uZTU1MzFjYjg4Zjg5MTcgMTAwNjQ0XG4tLS0gYS9mcy9zdXBlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9zdXBlci5jXG5AQCAtMjgwLDYgJiM0MzsyODAsNyBAQCBzdGF0aWMgdm9pZCBkZXN0cm95X3N1cGVyX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0c2VjdXJpdHlfc2JfZnJlZShzKTtcbiBcdHB1dF91c2VyX25zKHMtXHUwMDNlc191c2VyX25zKTtcbiBcdGtmcmVlKHMtXHUwMDNlc19zdWJ0eXBlKTtcbiYjNDM7XHRrZnJlZV9jb25zdChzLVx1MDAzZXNfZGV2bmFtZSk7XG4gXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgU0JfRlJFRVpFX0xFVkVMUzsgaSYjNDM7JiM0MzspXG4gXHRcdHBlcmNwdV9mcmVlX3J3c2VtKFx1MDAyNnMtXHUwMDNlc193cml0ZXJzLnJ3X3NlbVtpXSk7XG4gXHRrZnJlZShzKTtcbkBAIC0zMTUsNyAmIzQzOzMxNiw3IEBAIHN0YXRpYyB2b2lkIGRlc3Ryb3lfdW51c2VkX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcylcbiAgKlx0cmV0dXJucyBhIHBvaW50ZXIgbmV3IHN1cGVyYmxvY2sgb3IgJU5VTEwgaWYgYWxsb2NhdGlvbiBoYWQgZmFpbGVkLlxuICAqL1xuIHN0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmFsbG9jX3N1cGVyKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlLCBpbnQgZmxhZ3MsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zKVxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsIGNvbnN0IGNoYXIgKm5hbWUpXG4ge1xuIFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzID0ga3phbGxvY19vYmooc3RydWN0IHN1cGVyX2Jsb2NrKTtcbiBcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBkZWZhdWx0X29wO1xuQEAgLTM0NCw2ICYjNDM7MzQ1LDEzIEBAIHN0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmFsbG9jX3N1cGVyKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlLCBpbnQgZmxhZ3MsXG4gXHQgKi9cbiBcdGRvd25fd3JpdGVfbmVzdGVkKFx1MDAyNnMtXHUwMDNlc191bW91bnQsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbiBcbiYjNDM7XHRpZiAobmFtZSlcbiYjNDM7XHRcdHMtXHUwMDNlc19kZXZuYW1lID0ga3N0cmR1cF9jb25zdChuYW1lLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHMtXHUwMDNlc19kZXZuYW1lID0gXCYjMzQ7bm9uZVwmIzM0OztcbiYjNDM7XHRpZiAoIXMtXHUwMDNlc19kZXZuYW1lKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcbiBcdGlmIChzZWN1cml0eV9zYl9hbGxvYyhzKSlcbiBcdFx0Z290byBmYWlsO1xuIFxuQEAgLTc2Myw3ICYjNDM7NzcxLDcgQEAgc3RydWN0IHN1cGVyX2Jsb2NrICpzZ2V0X2ZjKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbiBcdH1cbiBcdGlmICghcykge1xuIFx0XHRzcGluX3VubG9jayhcdTAwMjZzYl9sb2NrKTtcbi1cdFx0cyA9IGFsbG9jX3N1cGVyKGZjLVx1MDAzZWZzX3R5cGUsIGZjLVx1MDAzZXNiX2ZsYWdzLCB1c2VyX25zKTtcbiYjNDM7XHRcdHMgPSBhbGxvY19zdXBlcihmYy1cdTAwM2Vmc190eXBlLCBmYy1cdTAwM2VzYl9mbGFncywgdXNlcl9ucywgZmMtXHUwMDNlc291cmNlKTtcbiBcdFx0aWYgKCFzKVxuIFx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIFx0XHRnb3RvIHJldHJ5O1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmNudGwuaCBiL2luY2x1ZGUvbGludXgvZmNudGwuaFxuaW5kZXggNmFkNmI5ZTdhMjI2YWYuLmY5NDI0MTFjOGVkN2RlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9mY250bC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZjbnRsLmhcbkBAIC0xMSw3ICYjNDM7MTEsNyBAQFxuIFx0KE9fUkRPTkxZIHwgT19XUk9OTFkgfCBPX1JEV1IgfCBPX0NSRUFUIHwgT19FWENMIHwgT19OT0NUVFkgfCBPX1RSVU5DIHwgXFxcbiBcdCBPX0FQUEVORCB8IE9fTkRFTEFZIHwgT19OT05CTE9DSyB8IF9fT19TWU5DIHwgT19EU1lOQyB8IFxcXG4gXHQgRkFTWU5DXHR8IE9fRElSRUNUIHwgT19MQVJHRUZJTEUgfCBPX0RJUkVDVE9SWSB8IE9fTk9GT0xMT1cgfCBcXFxuLVx0IE9fTk9BVElNRSB8IE9fQ0xPRVhFQyB8IE9fUEFUSCB8IF9fT19UTVBGSUxFIHwgT19FTVBUWVBBVEgpXG4mIzQzO1x0IE9fTk9BVElNRSB8IE9fQ0xPRVhFQyB8IE9fUEFUSCB8IF9fT19UTVBGSUxFIHwgT19FTVBUWVBBVEggfCBPX0FMVClcbiBcbiAvKiBMaXN0IG9mIGFsbCB2YWxpZCBmbGFncyBmb3Igb3BlbmF0MigyKSYjMzk7cyBob3ctXHUwMDNlZmxhZ3MgYXJndW1lbnQuICovXG4gI2RlZmluZSBWQUxJRF9PUEVOQVQyX0ZMQUdTXHQoVkFMSURfT1BFTl9GTEFHUyB8IE9QRU5BVDJfUkVHVUxBUilcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyLmggYi9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyLmhcbmluZGV4IDQwNTYxMjY3ODExNTFlLi42ZjBkNzc4OTQwZjkwNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZnMvc3VwZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mcy9zdXBlci5oXG5AQCAtMjM3LDQgJiM0MzsyMzcsMTQgQEAgaW50IHRoYXdfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzdXBlciwgZW51bSBmcmVlemVfaG9sZGVyIHdobyxcbiBcbiBpbnQgc2JfaW5pdF9kaW9fZG9uZV93cShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbiBcbiYjNDM7c3RydWN0IHNiX29wdF9jdHgge1xuJiM0MztcdHZvaWQgKCphY3Rvcikoc3RydWN0IHNiX29wdF9jdHggKmN0eCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUsXG4mIzQzO1x0XHQgICAgICBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCk7XG4mIzQzO1x0dm9pZCAqZGF0YTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3ZvaWQgc2JfYWRkX29wdGlvbihzdHJ1Y3Qgc2Jfb3B0X2N0eCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSk7XG4mIzQzO3ZvaWQgc2JfYWRkX29wdGlvbl9wYXRoKHN0cnVjdCBzYl9vcHRfY3R4ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlLFxuJiM0MztcdFx0XHRjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCk7XG4mIzQzO1xuICNlbmRpZiAvKiBfTElOVVhfRlNfU1VQRVJfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMvc3VwZXJfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvZnMvc3VwZXJfdHlwZXMuaFxuaW5kZXggZWY3OTQxZTlkYzc5YWMuLmYyMDU3NTlhZjFhNjMzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9mcy9zdXBlcl90eXBlcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyX3R5cGVzLmhcbkBAIC0zNiw2ICYjNDM7MzYsNyBAQCBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdDtcbiBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2w7XG4gc3RydWN0IHhhdHRyX2hhbmRsZXI7XG4gc3RydWN0IGZzZXJyb3JfZXZlbnQ7XG4mIzQzO3N0cnVjdCBzYl9vcHRfY3R4O1xuIFxuIGV4dGVybiBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmJsb2NrZGV2X3N1cGVyYmxvY2s7XG4gXG5AQCAtOTksNiAmIzQzOzEwMCw3IEBAIHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHtcbiBcdGludCAoKnN0YXRmcykoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqa3N0YXRmcyk7XG4gXHR2b2lkICgqdW1vdW50X2JlZ2luKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbiBcbiYjNDM7XHRpbnQgKCpnZXRfb3B0aW9ucykoc3RydWN0IHNiX29wdF9jdHggKmN0eCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbiBcdGludCAoKnNob3dfb3B0aW9ucykoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG4gXHRpbnQgKCpzaG93X2Rldm5hbWUpKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuIFx0aW50ICgqc2hvd19wYXRoKShzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbkBAIC0yODMsNiAmIzQzOzI4NSw4IEBAIHN0cnVjdCBzdXBlcl9ibG9jayB7XG4gXHQgKi9cbiBcdGF0b21pY190XHRcdFx0XHRzX2lzd19ucl9pbl9mbGlnaHQ7XG4gI2VuZGlmXG4mIzQzO1x0LyogTmFtZSBvZiBkZXZpY2UgZS5nLiAvZGV2L2Rzay9oZGExICovXG4mIzQzO1x0Y29uc3QgY2hhciBcdFx0XHRcdCpzX2Rldm5hbWU7XG4gfSBfX3JhbmRvbWl6ZV9sYXlvdXQ7XG4gXG4gLypcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vdW50LmggYi9pbmNsdWRlL2xpbnV4L21vdW50LmhcbmluZGV4IGFjZmU3ZWY4NmExYjNmLi5kMDcxODU1Y2E0ZWRlYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW91bnQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tb3VudC5oXG5AQCAtNDQsNiAmIzQzOzQ0LDcgQEAgZW51bSBtb3VudF9mbGFncyB7XG4gXHRNTlRfTE9DS0VEXHRcdD0gMHg4MDAwMDAsXG4gXHRNTlRfRE9PTUVEXHRcdD0gMHgxMDAwMDAwLFxuIFx0TU5UX1NZTkNfVU1PVU5UXHRcdD0gMHgyMDAwMDAwLFxuJiM0MztcdE1OVF9DTE9OQUJMRVx0XHQ9IDB4NDAwMDAwMCxcbiBcdE1OVF9VTU9VTlRcdFx0PSAweDgwMDAwMDAsXG4gXG4gXHRNTlRfVVNFUl9TRVRUQUJMRV9NQVNLICA9IE1OVF9OT1NVSUQgfCBNTlRfTk9ERVYgfCBNTlRfTk9FWEVDXG5AQCAtNTIsNyAmIzQzOzUzLDcgQEAgZW51bSBtb3VudF9mbGFncyB7XG4gXHRNTlRfQVRJTUVfTUFTSyA9IE1OVF9OT0FUSU1FIHwgTU5UX05PRElSQVRJTUUgfCBNTlRfUkVMQVRJTUUsXG4gXG4gXHRNTlRfSU5URVJOQUxfRkxBR1MgPSBNTlRfSU5URVJOQUwgfCBNTlRfRE9PTUVEIHxcbi1cdFx0XHQgICAgIE1OVF9TWU5DX1VNT1VOVCB8IE1OVF9MT0NLRURcbiYjNDM7XHRcdFx0ICAgICBNTlRfU1lOQ19VTU9VTlQgfCBNTlRfTE9DS0VEIHwgTU5UX0NMT05BQkxFXG4gfTtcbiBcbiBzdHJ1Y3QgdmZzbW91bnQge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmFtZWkuaCBiL2luY2x1ZGUvbGludXgvbmFtZWkuaFxuaW5kZXggZWJlNmUyOWY3ZTkzYmEuLmMyMWRjNjUzNjkwMGNmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uYW1laS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25hbWVpLmhcbkBAIC0yNSw3ICYjNDM7MjUsOCBAQCBlbnVtIHsgTUFYX05FU1RFRF9MSU5LUyA9IDggfTtcbiAjZGVmaW5lIExPT0tVUF9SQ1VcdFx0QklUKDgpXHQvKiBSQ1UgcGF0aHdhbGsgbW9kZTsgc2VtaS1pbnRlcm5hbCAqL1xuICNkZWZpbmUgTE9PS1VQX0NBQ0hFRFx0XHRCSVQoOSkgLyogT25seSBkbyBjYWNoZWQgbG9va3VwICovXG4gI2RlZmluZSBMT09LVVBfUEFSRU5UXHRcdEJJVCgxMClcdC8qIExvb2tpbmcgdXAgZmluYWwgcGFyZW50IGluIHBhdGggKi9cbi0vKiA1IHNwYXJlIGJpdHMgZm9yIHBhdGh3YWxrICovXG4mIzQzOyNkZWZpbmUgTE9PS1VQX0FMVFx0XHRCSVQoMTEpIC8qIExvb2sgdXAgaW4gYWx0ZXJuYXRpdmUgbmFtZXNwYWNlICovXG4mIzQzOy8qIDQgc3BhcmUgYml0cyBmb3IgcGF0aHdhbGsgKi9cbiBcbiAvKiBUaGVzZSB0ZWxsIGZpbGVzeXN0ZW0gbWV0aG9kcyB0aGF0IHdlIGFyZSBkZWFsaW5nIHdpdGggdGhlIGZpbmFsIGNvbXBvbmVudC4uLiAqL1xuICNkZWZpbmUgTE9PS1VQX09QRU5cdFx0QklUKDE2KVx0LyogLi4uIGluIG9wZW4gKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BpZGZzLmggYi9pbmNsdWRlL2xpbnV4L3BpZGZzLmhcbmluZGV4IDBhYmY3ZGE5YWIyMzZlLi5mYWI2ZjQ4ZmYyMDMzNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGlkZnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waWRmcy5oXG5AQCAtMTUsNyAmIzQzOzE1LDYgQEAgdm9pZCBwaWRmc19leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTtcbiAjaWZkZWYgQ09ORklHX0NPUkVEVU1QXG4gdm9pZCBwaWRmc19jb3JlZHVtcChjb25zdCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKTtcbiAjZW5kaWZcbi1leHRlcm4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHBpZGZzX2RlbnRyeV9vcGVyYXRpb25zO1xuIGludCBwaWRmc19yZWdpc3Rlcl9waWRfZ2ZwKHN0cnVjdCBwaWQgKnBpZCwgZ2ZwX3QgZ2ZwKTtcbiBcbiAvKipcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvZmNudGwuaCBiL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9mY250bC5oXG5pbmRleCA4ODNjZmQ3ZGUyZWZmYS4uNzBkYmJhYzFjNTIwNzggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvZmNudGwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL2ZjbnRsLmhcbkBAIC05Niw2ICYjNDM7OTYsMTAgQEBcbiAjZGVmaW5lIE9fRU1QVFlQQVRIXHQoMSBcdTAwM2NcdTAwM2MgMjYpXHQvKiBhbGxvdyBlbXB0eSBwYXRoICovXG4gI2VuZGlmXG4gXG4mIzQzOyNpZm5kZWYgT19BTFRcbiYjNDM7I2RlZmluZSBPX0FMVFx0XHQoMSBcdTAwM2NcdTAwM2MgMjcpXHQvKiBPcGVuIGluIGFsdGVybmF0aXZlIG5hbWVzcGFjZSAqL1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gLyogYSBob3JyaWQga2x1ZGdlIHRyeWluZyB0byBtYWtlIHN1cmUgdGhhdCB0aGlzIHdpbGwgZmFpbCBvbiBvbGQga2VybmVscyAqL1xuICNkZWZpbmUgT19UTVBGSUxFIChfX09fVE1QRklMRSB8IE9fRElSRUNUT1JZKVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9tb3VudC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L21vdW50LmhcbmluZGV4IDIyMDQ3MDhkYmY3YTU4Li42ZTc5NGQyMTRjZjk4MyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9tb3VudC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvbW91bnQuaFxuQEAgLTYzLDYgJiM0Mzs2Myw3IEBAXG4gICovXG4gI2RlZmluZSBPUEVOX1RSRUVfQ0xPTkVcdFx0KDEgXHUwMDNjXHUwMDNjIDApXHQvKiBDbG9uZSB0aGUgdGFyZ2V0IHRyZWUgYW5kIGF0dGFjaCB0aGUgY2xvbmUgKi9cbiAjZGVmaW5lIE9QRU5fVFJFRV9OQU1FU1BBQ0VcdCgxIFx1MDAzY1x1MDAzYyAxKVx0LyogQ2xvbmUgdGhlIHRhcmdldCB0cmVlIGludG8gYSBuZXcgbW91bnQgbmFtZXNwYWNlICovXG4mIzQzOyNkZWZpbmUgT1BFTl9UUkVFX0FMVFx0XHQoMSBcdTAwM2NcdTAwM2MgMilcdC8qIExvb2t1cCBpbiBhbHRlcm5hdGl2ZSBuYW1lc3BhY2UgKi9cbiAjZGVmaW5lIE9QRU5fVFJFRV9DTE9FWEVDXHRPX0NMT0VYRUNcdC8qIENsb3NlIHRoZSBmaWxlIG9uIGV4ZWN2ZSgpICovXG4gXG4gLypcbmRpZmYgLS1naXQgYS9zY3JpcHRzL2dkYi9saW51eC9wcm9jLnB5IGIvc2NyaXB0cy9nZGIvbGludXgvcHJvYy5weVxuaW5kZXggNjVkZDFiZDEyOTY0MWQuLjVhYWYyZGQ4ZGIwNWExIDEwMDY0NFxuLS0tIGEvc2NyaXB0cy9nZGIvbGludXgvcHJvYy5weVxuJiM0MzsmIzQzOyYjNDM7IGIvc2NyaXB0cy9nZGIvbGludXgvcHJvYy5weVxuQEAgLTE3NCw5ICYjNDM7MTc0LDYgQEAgdmFsdWVzIG9mIHRoYXQgcHJvY2VzcyBuYW1lc3BhY2VcJiMzNDtcJiMzNDtcJiMzNDtcbiAgICAgICAgICAgICAgICAgICBcJiMzNDttb3VudFwmIzM0OywgXCYjMzQ7c3VwZXJfYmxvY2tcJiMzNDssIFwmIzM0O2Rldm5hbWVcJiMzNDssIFwmIzM0O3BhdGhuYW1lXCYjMzQ7LCBcJiMzNDtmc3R5cGVcJiMzNDspKVxuIFxuICAgICAgICAgZm9yIG1udCBpbiByYnRyZWUucmJfaW5vcmRlcl9mb3JfZWFjaF9lbnRyeShuYW1lc3BhY2VbJiMzOTttb3VudHMmIzM5O10sIG1vdW50X3B0cl90eXBlLCBcJiMzNDttbnRfbm9kZVwmIzM0Oyk6XG4tICAgICAgICAgICAgZGV2bmFtZSA9IG1udFsmIzM5O21udF9kZXZuYW1lJiMzOTtdLnN0cmluZygpXG4tICAgICAgICAgICAgZGV2bmFtZSA9IGRldm5hbWUgaWYgZGV2bmFtZSBlbHNlIFwmIzM0O25vbmVcJiMzNDtcbi1cbiAgICAgICAgICAgICBwYXRobmFtZSA9IFwmIzM0O1wmIzM0O1xuICAgICAgICAgICAgIHBhcmVudCA9IG1udFxuICAgICAgICAgICAgIHdoaWxlIFRydWU6XG5AQCAtMTkwLDYgJiM0MzsxODcsOCBAQCB2YWx1ZXMgb2YgdGhhdCBwcm9jZXNzIG5hbWVzcGFjZVwmIzM0O1wmIzM0O1wmIzM0O1xuICAgICAgICAgICAgICAgICBwYXRobmFtZSA9IFwmIzM0Oy9cJiMzNDtcbiBcbiAgICAgICAgICAgICBzdXBlcmJsb2NrID0gbW50WyYjMzk7bW50JiMzOTtdWyYjMzk7bW50X3NiJiMzOTtdXG4mIzQzOyAgICAgICAgICAgIGRldm5hbWUgPSBzdXBlcmJsb2NrWyYjMzk7c19kZXZuYW1lJiMzOTtdLnN0cmluZygpXG4mIzQzOyAgICAgICAgICAgIGRldm5hbWUgPSBkZXZuYW1lIGlmIGRldm5hbWUgZWxzZSBcJiMzNDtub25lXCYjMzQ7XG4gICAgICAgICAgICAgZnN0eXBlID0gc3VwZXJibG9ja1smIzM5O3NfdHlwZSYjMzk7XVsmIzM5O25hbWUmIzM5O10uc3RyaW5nKClcbiAgICAgICAgICAgICBzX2ZsYWdzID0gaW50KHN1cGVyYmxvY2tbJiMzOTtzX2ZsYWdzJiMzOTtdKVxuICAgICAgICAgICAgIG1fZmxhZ3MgPSBpbnQobW50WyYjMzk7bW50JiMzOTtdWyYjMzk7bW50X2ZsYWdzJiMzOTtdKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDE2OjA4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VST0ZTX0ZTJiMzNDssCiAgICAmIzM0O09WRVJMQVlfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZXRhZnNfZ2V0X3Jvb3QmIzM0OywKICAgICYjMzQ7bWV0YWZzX2NyZWF0ZV9yb290JiMzNDssCiAgICAmIzM0O21ldGFmc19yb290X2xvb2t1cCYjMzQ7LAogICAgJiMzNDttZXRhZnNfbW91bnRfbG9va3VwJiMzNDssCiAgICAmIzM0O21ldGFmc19vcHRpb25zX2xvb2t1cCYjMzQ7LAogICAgJiMzNDttZXRhZnNfb3B0aW9uX3ZhbHVlc19sb29rdXAmIzM0OywKICAgICYjMzQ7bWV0YWZzX2dldF9vcHRpb25fdmFsdWVzJiMzNDssCiAgICAmIzM0O21ldGFmc19nZXRfbGluayYjMzQ7LAogICAgJiMzNDttZXRhZnNfcmVhZGxpbmsmIzM0OywKICAgICYjMzQ7bW50X3Nob3dfb3B0aW9ucyYjMzQ7LAogICAgJiMzNDtzYl9hZGRfb3B0aW9uJiMzNDssCiAgICAmIzM0O3NiX2FkZF9vcHRpb25fcGF0aCYjMzQ7LAogICAgJiMzNDtvdmxfZ2V0X29wdGlvbnMmIzM0OywKICAgICYjMzQ7ZXJvZnNfZ2V0X29wdGlvbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyB2aXJ0dWFsIGZpbGVzeXN0ZW0gYG1ldGFmc2AgdGhhdCBleHBvc2VzIG1ldGFkYXRhIGFib3V0IGZpbGVzIGFuZCBmaWxlc3lzdGVtcyB2aWEgdGhlIGBPX0FMVGAgZmxhZy4gSXQgYWxzbyBpbnRyb2R1Y2VzIGEgbmV3IGBnZXRfb3B0aW9uc2Agc3VwZXIgb3BlcmF0aW9uLCBpbXBsZW1lbnRlZCBieSBgZXJvZnNgIGFuZCBgb3ZlcmxheWZzYC4gVGhlc2UgYXJlIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgVkZTIGFuZCBzcGVjaWZpYyBmaWxlc3lzdGVtcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc4YzhkOWU5MzRjZThhOWJjMWFlMGM5OTRmNDYzODU0YmQyZjk4MTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAxNSAxNjowODoyMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdAppbmRleCA3Yzc1MzE0OGFmODg4My4uM2RjNDMxYjZjZGJiMGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QKQEAgLTMxNCw3ICYjNDM7MzE0LDcgQEAgb3IgYm90dG9tIGhhbGYpLgogYGBzaG93X2Rldm5hbWVgYAogCU9wdGlvbmFsLiBDYWxsZWQgYnkgdGhlIFZGUyB0byBzaG93IGRldmljZSBuYW1lIGZvcgogCS9wcm9jLyZsdDtwaWQmZ3Q7L3ttb3VudHMsbW91bnRpbmZvLG1vdW50c3RhdHN9LiBJZiBub3QgcHJvdmlkZWQgdGhlbgotCSYjMzk7KHN0cnVjdCBtb3VudCkubW50X2Rldm5hbWUmIzM5OyB3aWxsIGJlIHVzZWQuCiYjNDM7CSYjMzk7KHN0cnVjdCBzdXBlcl9ibG9jaykuc19kZXZuYW1lJiMzOTsgd2lsbCBiZSB1c2VkLgogCiBgYHNob3dfcGF0aGBgCiAJT3B0aW9uYWwuIENhbGxlZCBieSB0aGUgVkZTIChmb3IgL3Byb2MvJmx0O3BpZCZndDsvbW91bnRpbmZvKSB0byBzaG93CmRpZmYgLS1naXQgYS9mcy9NYWtlZmlsZSBiL2ZzL01ha2VmaWxlCmluZGV4IDg5YThhOWQyMDdkMWM1Li44N2E0YzIzZDVhMDhkZSAxMDA2NDQKLS0tIGEvZnMvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZnMvTWFrZWZpbGUKQEAgLTU4LDYgJiM0Mzs1OCw4IEBAIG9iai0kKENPTkZJR19DT05GSUdGU19GUykJJiM0Mzs9IGNvbmZpZ2ZzLwogb2JqLXkJCQkJJiM0Mzs9IGRldnB0cy8KIAogb2JqLSQoQ09ORklHX0RMTSkJCSYjNDM7PSBkbG0vCiYjNDM7CiYjNDM7b2JqLXkJCQkJJiM0Mzs9IG1ldGFmcy8KICAKICMgRG8gbm90IGFkZCBhbnkgZmlsZXN5c3RlbXMgYmVmb3JlIHRoaXMgbGluZQogb2JqLSQoQ09ORklHX05FVEZTX1NVUFBPUlQpCSYjNDM7PSBuZXRmcy8KZGlmZiAtLWdpdCBhL2ZzL2Vyb2ZzL3N1cGVyLmMgYi9mcy9lcm9mcy9zdXBlci5jCmluZGV4IDg2ZmE1YzZhMGM3MDg3Li4yNTc1MTdjMjhlMWQzOCAxMDA2NDQKLS0tIGEvZnMvZXJvZnMvc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9lcm9mcy9zdXBlci5jCkBAIC0xMDI4LDI5ICYjNDM7MTAyOCwzNCBAQCBzdGF0aWMgaW50IGVyb2ZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZXJvZnNfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgZGVudHJ5ICpyb290KQomIzQzO3N0YXRpYyBpbnQgZXJvZnNfZ2V0X29wdGlvbnMoc3RydWN0IHNiX29wdF9jdHggKmN0eCwgc3RydWN0IGRlbnRyeSAqcm9vdCkKIHsKIAlzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gRVJPRlNfU0Iocm9vdC0mZ3Q7ZF9zYik7CiAJc3RydWN0IGVyb2ZzX21vdW50X29wdHMgKm9wdCA9ICZhbXA7c2JpLSZndDtvcHQ7CiAKJiM0MzsJaWYgKHNiaS0mZ3Q7ZGlmMC5maWxlKQomIzQzOwkJc2JfYWRkX29wdGlvbl9wYXRoKGN0eCwgJiMzNDtzb3VyY2UmIzM0OywgTlVMTCwgJmFtcDtzYmktJmd0O2RpZjAuZmlsZS0mZ3Q7Zl9wYXRoKTsKJiM0MzsKIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfRVJPRlNfRlNfWEFUVFIpKQotCQlzZXFfcHV0cyhzZXEsIHRlc3Rfb3B0KG9wdCwgWEFUVFJfVVNFUikgPwotCQkJCSYjMzQ7LHVzZXJfeGF0dHImIzM0OyA6ICYjMzQ7LG5vdXNlcl94YXR0ciYjMzQ7KTsKJiM0MzsJCXNiX2FkZF9vcHRpb24oY3R4LCB0ZXN0X29wdChvcHQsIFhBVFRSX1VTRVIpID8KJiM0MzsJCQkgICAgICAmIzM0O3VzZXJfeGF0dHImIzM0OyA6ICYjMzQ7bm91c2VyX3hhdHRyJiMzNDssIE5VTEwpOwogCWlmIChJU19FTkFCTEVEKENPTkZJR19FUk9GU19GU19QT1NJWF9BQ0wpKQotCQlzZXFfcHV0cyhzZXEsIHRlc3Rfb3B0KG9wdCwgUE9TSVhfQUNMKSA/ICYjMzQ7LGFjbCYjMzQ7IDogJiMzNDssbm9hY2wmIzM0Oyk7CiYjNDM7CQlzYl9hZGRfb3B0aW9uKGN0eCwgdGVzdF9vcHQob3B0LCBQT1NJWF9BQ0wpID8gJiMzNDthY2wmIzM0OyA6ICYjMzQ7bm9hY2wmIzM0OywgTlVMTCk7CiAJaWYgKElTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX1pJUCkpCi0JCXNlcV9wcmludGYoc2VxLCAmIzM0OyxjYWNoZV9zdHJhdGVneT0lcyYjMzQ7LAomIzQzOwkJc2JfYWRkX29wdGlvbihjdHgsICYjMzQ7Y2FjaGVfc3RyYXRlZ3kmIzM0OywKIAkJCSAgZXJvZnNfcGFyYW1fY2FjaGVfc3RyYXRlZ3lbb3B0LSZndDtjYWNoZV9zdHJhdGVneV0ubmFtZSk7CiAJaWYgKHRlc3Rfb3B0KG9wdCwgREFYX0FMV0FZUykpCi0JCXNlcV9wdXRzKHNlcSwgJiMzNDssZGF4PWFsd2F5cyYjMzQ7KTsKJiM0MzsJCXNiX2FkZF9vcHRpb24oY3R4LCAmIzM0O2RheCYjMzQ7LCAmIzM0O2Fsd2F5cyYjMzQ7KTsKIAlpZiAodGVzdF9vcHQob3B0LCBEQVhfTkVWRVIpKQotCQlzZXFfcHV0cyhzZXEsICYjMzQ7LGRheD1uZXZlciYjMzQ7KTsKJiM0MzsJCXNiX2FkZF9vcHRpb24oY3R4LCAmIzM0O2RheCYjMzQ7LCAmIzM0O25ldmVyJiMzNDspOwogCWlmIChlcm9mc19pc19maWxlaW9fbW9kZShzYmkpICZhbXA7JmFtcDsgdGVzdF9vcHQob3B0LCBESVJFQ1RfSU8pKQotCQlzZXFfcHV0cyhzZXEsICYjMzQ7LGRpcmVjdGlvJiMzNDspOwotCWlmIChzYmktJmd0O2RpZjAuZnNvZmYpCi0JCXNlcV9wcmludGYoc2VxLCAmIzM0Oyxmc29mZnNldD0lbGx1JiMzNDssIHNiaS0mZ3Q7ZGlmMC5mc29mZik7CiYjNDM7CQlzYl9hZGRfb3B0aW9uKGN0eCwgJiMzNDtkaXJlY3RpbyYjMzQ7LCBOVUxMKTsKJiM0MzsJaWYgKHNiaS0mZ3Q7ZGlmMC5mc29mZikgewomIzQzOwkJY2hhciAqdmFsIF9fZnJlZShrZnJlZSkgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgJiMzNDslbGx1JiMzNDssIHNiaS0mZ3Q7ZGlmMC5mc29mZik7CiYjNDM7CQlzYl9hZGRfb3B0aW9uKGN0eCwgJiMzNDtmc29mZnNldCYjMzQ7LCB2YWwpOwomIzQzOwl9CiAJaWYgKHRlc3Rfb3B0KG9wdCwgSU5PREVfU0hBUkUpKQotCQlzZXFfcHV0cyhzZXEsICYjMzQ7LGlub2RlX3NoYXJlJiMzNDspOwomIzQzOwkJc2JfYWRkX29wdGlvbihjdHgsICYjMzQ7aW5vZGVfc2hhcmUmIzM0OywgTlVMTCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwNjksNyAmIzQzOzEwNzQsNyBAQCBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBlcm9mc19zb3BzID0gewogCS5mcmVlX2lub2RlID0gZXJvZnNfZnJlZV9pbm9kZSwKIAkuZXZpY3RfaW5vZGUgPSBlcm9mc19ldmljdF9pbm9kZSwKIAkuc3RhdGZzID0gZXJvZnNfc3RhdGZzLAotCS5zaG93X29wdGlvbnMgPSBlcm9mc19zaG93X29wdGlvbnMsCiYjNDM7CS5nZXRfb3B0aW9ucyA9IGVyb2ZzX2dldF9vcHRpb25zLAogfTsKIAogbW9kdWxlX2luaXQoZXJvZnNfbW9kdWxlX2luaXQpOwpkaWZmIC0tZ2l0IGEvZnMvZmNudGwuYyBiL2ZzL2ZjbnRsLmMKaW5kZXggYzE1OGYwODJmMWRhNGYuLjAxYjc2NWNmYWM4NDc5IDEwMDY0NAotLS0gYS9mcy9mY250bC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZjbnRsLmMKQEAgLTExNjksNyAmIzQzOzExNjksNyBAQCBzdGF0aWMgaW50IF9faW5pdCBmY250bF9pbml0KHZvaWQpCiAJICogRXhjZXB0aW9uczogT19OT05CTE9DSyBpcyBhIHR3byBiaXQgZGVmaW5lIG9uIHBhcmlzYzsgT19OREVMQVkKIAkgKiBpcyBkZWZpbmVkIGFzIE9fTk9OQkxPQ0sgb24gc29tZSBwbGF0Zm9ybXMgYW5kIG5vdCBvbiBvdGhlcnMuCiAJICovCi0JQlVJTERfQlVHX09OKDIyIC0gMSAvKiBmb3IgT19SRE9OTFkgYmVpbmcgMCAqLyAhPQomIzQzOwlCVUlMRF9CVUdfT04oMjMgLSAxIC8qIGZvciBPX1JET05MWSBiZWluZyAwICovICE9CiAJCUhXRUlHSFQzMigKIAkJCShWQUxJRF9PUEVOX0ZMQUdTICZhbXA7IH4oT19OT05CTE9DSyB8IE9fTkRFTEFZKSkgfAogCQkJX19GTU9ERV9FWEVDIHwgX19PX1JFR1VMQVIpKTsKZGlmZiAtLWdpdCBhL2ZzL2ludGVybmFsLmggYi9mcy9pbnRlcm5hbC5oCmluZGV4IDM1NWQ5M2Y5MjIwODYxLi5lNzNhNWMxZDViNGVlMSAxMDA2NDQKLS0tIGEvZnMvaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9pbnRlcm5hbC5oCkBAIC05NSw2ICYjNDM7OTUsNyBAQCBpbnQgcGF0aF91bW91bnQoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIGludCBmbGFncyk7CiBpbnQgcGF0aF9waXZvdF9yb290KHN0cnVjdCBwYXRoICpuZXcsIHN0cnVjdCBwYXRoICpvbGQpOwogCiBpbnQgc2hvd19wYXRoKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRlbnRyeSAqcm9vdCk7CiYjNDM7aW50IG1udF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCB2ZnNtb3VudCAqbW50KTsKIAogLyoKICAqIGZzX3N0cnVjdC5jCmRpZmYgLS1naXQgYS9mcy9tZXRhZnMvTWFrZWZpbGUgYi9mcy9tZXRhZnMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmY4NTViNDhkOWMyYjkwCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbWV0YWZzL01ha2VmaWxlCkBAIC0wLDAgJiM0MzsxLDYgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsjCiYjNDM7IyBNYWtlZmlsZSBmb3IgbWV0YSBmaWxlc3lzdGVtCiYjNDM7IwomIzQzOwomIzQzO29iai15IDo9IG1ldGFmcy5vCmRpZmYgLS1naXQgYS9mcy9tZXRhZnMvbWV0YWZzLmMgYi9mcy9tZXRhZnMvbWV0YWZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjE1ZWMwYjYwNjRkYTM4Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbWV0YWZzL21ldGFmcy5jCkBAIC0wLDAgJiM0MzsxLDU3MiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBtZXRhZnMgLSB2aXJ0dWFsIGZpbGVzeXN0ZW0gZm9yIG1ldGFkYXRhIGFjY2VzcwomIzQzOyAqCiYjNDM7ICogVGhpcyBwcm92aWRlcyBhIHdheSB0byBhY2Nlc3MgbWV0YWRhdGEgYWJvdXQgZmlsZXMgYW5kIGZpbGVzeXN0ZW1zCiYjNDM7ICogdGhyb3VnaCBPX0FMVCBmaWxlIGRlc2NyaXB0b3JzLgomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9mcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pbml0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tYWdpYy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tb3VudC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9uYW1laS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RjYWNoZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wc2V1ZG9fZnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZnMvc3VwZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O21ldGFmcy5oJiMzNDsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIG1ldGFmcyBzdXBlcmJsb2NrIGFuZCBtb3VudAomIzQzOyAqLwomIzQzO3N0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKm1ldGFmc19tbnQgX19yb19hZnRlcl9pbml0OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBtZXRhZnNfb3BzID0gewomIzQzOwkuc3RhdGZzCQk9IHNpbXBsZV9zdGF0ZnMsCiYjNDM7CS5kcm9wX2lub2RlCT0gaW5vZGVfanVzdF9kcm9wLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBtZXRhZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwc2V1ZG9fZnNfY29udGV4dCAqY3R4ID0gaW5pdF9wc2V1ZG8oZmMsIDB4NGQ0NTU0NDEpOyAvKiAmIzM5O01FVEEmIzM5OyAqLwomIzQzOwlpZiAoIWN0eCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwljdHgtJmd0O29wcyA9ICZhbXA7bWV0YWZzX29wczsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBtZXRhZnNfdHlwZSA9IHsKJiM0MzsJLm5hbWUgPSAmIzM0O21ldGFmcyYjMzQ7LAomIzQzOwkuaW5pdF9mc19jb250ZXh0ID0gbWV0YWZzX2luaXRfZnNfY29udGV4dCwKJiM0MzsJLmtpbGxfc2IgPSBraWxsX2Fub25fc3VwZXIsCiYjNDM7fTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIE1vdW50IG9wdGlvbiBjb2xsZWN0aW9uIHN0cnVjdHVyZXMKJiM0MzsgKi8KJiM0MztlbnVtIG1ldGFmc19kZW50cnlfdHlwZSB7CiYjNDM7CU1FVEFGU19ST09ULAomIzQzOwlNRVRBRlNfT1BUSU9OX1ZBTFVFUywKJiM0MzsJTUVUQUZTX1NZTUxJTkssCiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgbWV0YWZzX29wdGlvbl9lbnRyeSB7CiYjNDM7CWNoYXIgKnZhbHVlOwomIzQzOwlzdHJ1Y3QgcGF0aCBwYXRoOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IG1ldGFmc19kZW50cnlfaW5mbyB7CiYjNDM7CWVudW0gbWV0YWZzX2RlbnRyeV90eXBlIHR5cGU7CiYjNDM7CXVuaW9uIHsKJiM0MzsJCXN0cnVjdCB7CiYjNDM7CQkJc3RydWN0IGZpbGUgKmJhc2U7CiYjNDM7CQl9IHJvb3Q7CiYjNDM7CQlzdHJ1Y3QgewomIzQzOwkJCXN0cnVjdCBtZXRhZnNfb3B0aW9uX2VudHJ5ICplbnRyaWVzOwomIzQzOwkJCWludCBjb3VudDsKJiM0MzsJCX0gb3B0X3ZhbHVlczsKJiM0MzsJCXN0cnVjdCBtZXRhZnNfb3B0aW9uX2VudHJ5IHN5bWxpbms7CiYjNDM7CX07CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgbWV0YWZzX2NvbGxlY3RfY3R4IHsKJiM0MzsJc3RydWN0IHNiX29wdF9jdHggY3R4OwomIzQzOwljb25zdCBjaGFyICp0YXJnZXRfbmFtZTsKJiM0MzsJc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsKJiM0MzsJc3RydWN0IG1ldGFmc19vcHRpb25fZW50cnkgKmVudHJpZXM7CiYjNDM7CWludCBjb3VudDsKJiM0MzsJaW50IHNpemU7CiYjNDM7CWludCBlcnI7CiYjNDM7CWJvb2wgaXNfc291cmNlOwomIzQzO307CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDb2xsZWN0IHNwZWNpZmljIG1vdW50IG9wdGlvbiB2YWx1ZXMgZnJvbSB0aGUgYmFzZSBmaWxlc3lzdGVtCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgbWV0YWZzX2NvbGxlY3Rfb3B0aW9uKHN0cnVjdCBzYl9vcHRfY3R4ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsCiYjNDM7CQkJCSAgY29uc3QgY2hhciAqdmFsdWUsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKQomIzQzO3sKJiM0MzsJc3RydWN0IG1ldGFmc19jb2xsZWN0X2N0eCAqY29sbGVjdF9jdHggPSBjdHgtJmd0O2RhdGE7CiYjNDM7CXN0cnVjdCBtZXRhZnNfb3B0aW9uX2VudHJ5ICplbnRyeTsKJiM0MzsKJiM0MzsJaWYgKHN0cmNtcChuYW1lLCBjb2xsZWN0X2N0eC0mZ3Q7dGFyZ2V0X25hbWUpICE9IDApCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmICghdmFsdWUgJmFtcDsmYW1wOyBjb2xsZWN0X2N0eC0mZ3Q7aXNfc291cmNlKQomIzQzOwkJdmFsdWUgPSBjb2xsZWN0X2N0eC0mZ3Q7c2ItJmd0O3NfZGV2bmFtZTsKJiM0MzsKJiM0MzsJaWYgKGNvbGxlY3RfY3R4LSZndDtjb3VudCAmZ3Q7PSBjb2xsZWN0X2N0eC0mZ3Q7c2l6ZSkgewomIzQzOwkJaW50IG5ld19zaXplID0gY29sbGVjdF9jdHgtJmd0O3NpemUgPyBjb2xsZWN0X2N0eC0mZ3Q7c2l6ZSAqIDIgOiA0OwomIzQzOwkJc3RydWN0IG1ldGFmc19vcHRpb25fZW50cnkgKm5ld19lbnRyaWVzOwomIzQzOwomIzQzOwkJbmV3X2VudHJpZXMgPSBrcmVhbGxvY19hcnJheShjb2xsZWN0X2N0eC0mZ3Q7ZW50cmllcywgbmV3X3NpemUsIHNpemVvZigqbmV3X2VudHJpZXMpLAomIzQzOwkJCQkJICAgICBHRlBfS0VSTkVMKTsKJiM0MzsJCWlmICghbmV3X2VudHJpZXMpIHsKJiM0MzsJCQljb2xsZWN0X2N0eC0mZ3Q7ZXJyID0gLUVOT01FTTsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiYjNDM7CQljb2xsZWN0X2N0eC0mZ3Q7ZW50cmllcyA9IG5ld19lbnRyaWVzOwomIzQzOwkJY29sbGVjdF9jdHgtJmd0O3NpemUgPSBuZXdfc2l6ZTsKJiM0MzsJfQomIzQzOwomIzQzOwllbnRyeSA9ICZhbXA7Y29sbGVjdF9jdHgtJmd0O2VudHJpZXNbY29sbGVjdF9jdHgtJmd0O2NvdW50XTsKJiM0MzsJZW50cnktJmd0O3ZhbHVlID0gdmFsdWUgPyBrc3RyZHVwKHZhbHVlLCBHRlBfS0VSTkVMKSA6IE5VTEw7CiYjNDM7CWlmICghZW50cnktJmd0O3ZhbHVlICZhbXA7JmFtcDsgdmFsdWUpIHsKJiM0MzsJCWNvbGxlY3RfY3R4LSZndDtlcnIgPSAtRU5PTUVNOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CWlmIChwYXRoKSB7CiYjNDM7CQllbnRyeS0mZ3Q7cGF0aCA9ICpwYXRoOwomIzQzOwkJcGF0aF9nZXQoJmFtcDtlbnRyeS0mZ3Q7cGF0aCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQltZW1zZXQoJmFtcDtlbnRyeS0mZ3Q7cGF0aCwgMCwgc2l6ZW9mKGVudHJ5LSZndDtwYXRoKSk7CiYjNDM7CX0KJiM0MzsJY29sbGVjdF9jdHgtJmd0O2NvdW50JiM0MzsmIzQzOzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbWV0YWZzX2ZyZWVfZW50cmllcyhzdHJ1Y3QgbWV0YWZzX29wdGlvbl9lbnRyeSAqZW50cmllcywgaW50IGNvdW50KQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBjb3VudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWtmcmVlKGVudHJpZXNbaV0udmFsdWUpOwomIzQzOwkJaWYgKGVudHJpZXNbaV0ucGF0aC5tbnQpCiYjNDM7CQkJcGF0aF9wdXQoJmFtcDtlbnRyaWVzW2ldLnBhdGgpOwomIzQzOwl9CiYjNDM7CWtmcmVlKGVudHJpZXMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG1ldGFmc19nZXRfb3B0aW9uX3ZhbHVlcyhzdHJ1Y3QgZmlsZSAqYmFzZSwgY29uc3QgY2hhciAqb3B0aW9uX25hbWUsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgbWV0YWZzX29wdGlvbl9lbnRyeSAqKmVudHJpZXNfb3V0LAomIzQzOwkJCQkgICAgaW50ICpjb3VudF9vdXQpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCA9ICZhbXA7YmFzZS0mZ3Q7Zl9wYXRoOwomIzQzOwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gcGF0aC0mZ3Q7bW50LSZndDttbnRfc2I7CiYjNDM7CXN0cnVjdCBtZXRhZnNfY29sbGVjdF9jdHggY29sbGVjdF9jdHggPSB7CiYjNDM7CQkuY3R4LmRhdGEgPSAmYW1wO2NvbGxlY3RfY3R4LAomIzQzOwkJLmN0eC5hY3RvciA9IG1ldGFmc19jb2xsZWN0X29wdGlvbiwKJiM0MzsJCS50YXJnZXRfbmFtZSA9IG9wdGlvbl9uYW1lLAomIzQzOwkJLnNiID0gc2IsCiYjNDM7CQkuaXNfc291cmNlID0gIXN0cmNtcChvcHRpb25fbmFtZSwgJiMzNDtzb3VyY2UmIzM0OyksCiYjNDM7CX07CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChzYi0mZ3Q7c19vcC0mZ3Q7Z2V0X29wdGlvbnMpIHsKJiM0MzsJCXJldCA9IHNiLSZndDtzX29wLSZndDtnZXRfb3B0aW9ucygmYW1wO2NvbGxlY3RfY3R4LmN0eCwgcGF0aC0mZ3Q7bW50LSZndDttbnRfcm9vdCk7CiYjNDM7CQlpZiAocmV0IHx8IGNvbGxlY3RfY3R4LmVycikgewomIzQzOwkJCW1ldGFmc19mcmVlX2VudHJpZXMoY29sbGVjdF9jdHguZW50cmllcywgY29sbGVjdF9jdHguY291bnQpOwomIzQzOwkJCXJldHVybiByZXQgPzogY29sbGVjdF9jdHguZXJyOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIHNwZWNpYWwgY2FzZTogYWRkICYjMzQ7c291cmNlJiMzNDsgb3B0aW9uIGlmIGZpbGVzeXN0ZW0gZGlkbiYjMzk7dCBhZGQgb25lKi8KJiM0MzsJaWYgKCFjb2xsZWN0X2N0eC5jb3VudCAmYW1wOyZhbXA7IGNvbGxlY3RfY3R4LmlzX3NvdXJjZSkgewomIzQzOwkJc3RydWN0IG1ldGFmc19vcHRpb25fZW50cnkgKmVudCBfX2ZyZWUoa2ZyZWUpID0ga3phbGxvY19vYmooKmVudCk7CiYjNDM7CiYjNDM7CQlpZiAoIWVudCkKJiM0MzsJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJCWVudC0mZ3Q7dmFsdWUgPSBrc3RyZHVwKHNiLSZndDtzX2Rldm5hbWUsIEdGUF9LRVJORUwpOwomIzQzOwkJaWYgKCFlbnQtJmd0O3ZhbHVlKQomIzQzOwkJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwkJY29sbGVjdF9jdHguZW50cmllcyA9IG5vX2ZyZWVfcHRyKGVudCk7CiYjNDM7CQljb2xsZWN0X2N0eC5jb3VudCA9IDE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJKmVudHJpZXNfb3V0ID0gY29sbGVjdF9jdHguZW50cmllczsKJiM0MzsJKmNvdW50X291dCA9IGNvbGxlY3RfY3R4LmNvdW50OwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBtZXRhZnMgc3ltbGluayBvcGVyYXRpb25zCiYjNDM7ICovCiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKm1ldGFmc19nZXRfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkJCSAgIHN0cnVjdCBkZWxheWVkX2NhbGwgKmRvbmUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWV0YWZzX2RlbnRyeV9pbmZvICppbmZvOwomIzQzOwomIzQzOwlpZiAoIWRlbnRyeSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FQ0hJTEQpOwomIzQzOwomIzQzOwlpbmZvID0gZGVudHJ5LSZndDtkX2ZzZGF0YTsKJiM0MzsJaWYgKGluZm8tJmd0O3N5bWxpbmsucGF0aC5tbnQpIHsKJiM0MzsJCWludCBlcnJvcjsKJiM0MzsKJiM0MzsJCXBhdGhfZ2V0KCZhbXA7aW5mby0mZ3Q7c3ltbGluay5wYXRoKTsKJiM0MzsJCWVycm9yID0gbmRfanVtcF9saW5rKCZhbXA7aW5mby0mZ3Q7c3ltbGluay5wYXRoKTsKJiM0MzsJCXJldHVybiBFUlJfUFRSKGVycm9yKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gRVJSX1BUUigtRUxPT1ApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG1ldGFmc19yZWFkbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgX191c2VyICpidWZmZXIsCiYjNDM7CQkJICAgaW50IGJ1ZmxlbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtZXRhZnNfZGVudHJ5X2luZm8gKmluZm8gPSBkZW50cnktJmd0O2RfZnNkYXRhOwomIzQzOwljb25zdCBjaGFyICp2YWx1ZSA9IGluZm8tJmd0O3N5bWxpbmsudmFsdWU7CiYjNDM7CiYjNDM7CWlmICghdmFsdWUpCiYjNDM7CQl2YWx1ZSA9ICYjMzQ7JiMzNDs7CiYjNDM7CiYjNDM7CXJldHVybiByZWFkbGlua19jb3B5KGJ1ZmZlciwgYnVmbGVuLCB2YWx1ZSwgc3RybGVuKHZhbHVlKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBtZXRhZnNfc3ltbGlua19pb3BzID0gewomIzQzOwkuZ2V0X2xpbmsJPSBtZXRhZnNfZ2V0X2xpbmssCiYjNDM7CS5yZWFkbGluawk9IG1ldGFmc19yZWFkbGluaywKJiM0Mzt9OwomIzQzOwomIzQzOy8qCiYjNDM7ICogRGVudHJ5IG9wZXJhdGlvbnMgLSBjbGVhbnVwCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgbWV0YWZzX2RfcmVsZWFzZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWV0YWZzX2RlbnRyeV9pbmZvICppbmZvID0gZGVudHJ5LSZndDtkX2ZzZGF0YTsKJiM0MzsKJiM0MzsJaWYgKCFpbmZvKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzd2l0Y2ggKGluZm8tJmd0O3R5cGUpIHsKJiM0MzsJY2FzZSBNRVRBRlNfUk9PVDoKJiM0MzsJCWZwdXQoaW5mby0mZ3Q7cm9vdC5iYXNlKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIE1FVEFGU19PUFRJT05fVkFMVUVTOgomIzQzOwkJbWV0YWZzX2ZyZWVfZW50cmllcyhpbmZvLSZndDtvcHRfdmFsdWVzLmVudHJpZXMsCiYjNDM7CQkJCSAgICBpbmZvLSZndDtvcHRfdmFsdWVzLmNvdW50KTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIE1FVEFGU19TWU1MSU5LOgomIzQzOwkJa2ZyZWUoaW5mby0mZ3Q7c3ltbGluay52YWx1ZSk7CiYjNDM7CQlpZiAoaW5mby0mZ3Q7c3ltbGluay5wYXRoLm1udCkKJiM0MzsJCQlwYXRoX3B1dCgmYW1wO2luZm8tJmd0O3N5bWxpbmsucGF0aCk7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCVdBUk5fT04oMSk7CiYjNDM7CX0KJiM0MzsJa2ZyZWUoaW5mbyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgbWV0YWZzX2RlbnRyeV9vcHMgPSB7CiYjNDM7CS5kX3JlbGVhc2UgPSBtZXRhZnNfZF9yZWxlYXNlLAomIzQzO307CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBtZXRhZnMgZGlyZWN0b3J5IG9wZXJhdGlvbnMgLSBmb3J3YXJkIGRlY2xhcmF0aW9ucwomIzQzOyAqLwomIzQzO3N0YXRpYyBzdHJ1Y3QgZmlsZSAqbWV0YWZzX2dldF9iYXNlX2ZpbGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKJiM0MztzdGF0aWMgc3RydWN0IGRlbnRyeSAqbWV0YWZzX3Jvb3RfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiYjNDM7CQkJCQkgdW5zaWduZWQgaW50IGZsYWdzKTsKJiM0MztzdGF0aWMgc3RydWN0IGRlbnRyeSAqbWV0YWZzX21vdW50X2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAomIzQzOwkJCQkJICB1bnNpZ25lZCBpbnQgZmxhZ3MpOwomIzQzO3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICptZXRhZnNfb3B0aW9uc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKJiM0MzsJCQkJCSAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpOwomIzQzO3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICptZXRhZnNfb3B0aW9uX3ZhbHVlc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKJiM0MzsJCQkJCQkgIHVuc2lnbmVkIGludCBmbGFncyk7CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1ldGFmc19yb290X2Rpcl9pb3BzID0gewomIzQzOwkubG9va3VwCQk9IG1ldGFmc19yb290X2xvb2t1cCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBtZXRhZnNfbW91bnRfZGlyX2lvcHMgPSB7CiYjNDM7CS5sb29rdXAJCT0gbWV0YWZzX21vdW50X2xvb2t1cCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBtZXRhZnNfb3B0aW9uc19kaXJfaW9wcyA9IHsKJiM0MzsJLmxvb2t1cAkJPSBtZXRhZnNfb3B0aW9uc19sb29rdXAsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWV0YWZzX29wdGlvbl92YWx1ZXNfZGlyX2lvcHMgPSB7CiYjNDM7CS5sb29rdXAJCT0gbWV0YWZzX29wdGlvbl92YWx1ZXNfbG9va3VwLAomIzQzO307CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDcmVhdGUgYSBuZXcgaW5vZGUgaW4gbWV0YWZzCiYjNDM7ICovCiYjNDM7c3RhdGljIHN0cnVjdCBpbm9kZSAqbWV0YWZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bW9kZV90IG1vZGUsCiYjNDM7CQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zICppb3BzKQomIzQzO3sKJiM0MzsJc3RydWN0IGlub2RlICppbm9kZSA9IG5ld19pbm9kZShzYik7CiYjNDM7CiYjNDM7CWlmICghaW5vZGUpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJaW5vZGUtJmd0O2lfaW5vID0gZ2V0X25leHRfaW5vKCk7CiYjNDM7CWlub2RlLSZndDtpX21vZGUgPSBtb2RlOwomIzQzOwlzaW1wbGVfaW5vZGVfaW5pdF90cyhpbm9kZSk7CiYjNDM7CiYjNDM7CWlmIChTX0lTRElSKG1vZGUpKSB7CiYjNDM7CQlpbm9kZS0mZ3Q7aV9vcCA9IGlvcHM7CiYjNDM7CQlpbmNfbmxpbmsoaW5vZGUpOwomIzQzOwl9IGVsc2UgaWYgKFNfSVNMTksobW9kZSkpIHsKJiM0MzsJCWlub2RlLSZndDtpX29wID0gJmFtcDttZXRhZnNfc3ltbGlua19pb3BzOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBpbm9kZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBMb29rdXAgaW4gcm9vdCBkaXJlY3RvcnkgKC8pCiYjNDM7ICogT25seSAmIzM0O21vdW50JiMzNDsgaXMgdmFsaWQgaGVyZQomIzQzOyAqLwomIzQzO3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICptZXRhZnNfcm9vdF9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKJiM0MzsJCQkJCSB1bnNpZ25lZCBpbnQgZmxhZ3MpCiYjNDM7ewomIzQzOwljb25zdCBjaGFyICpuYW1lID0gZGVudHJ5LSZndDtkX25hbWUubmFtZTsKJiM0MzsJc3RydWN0IGlub2RlICppbm9kZTsKJiM0MzsKJiM0MzsJaWYgKHN0cmNtcChuYW1lLCAmIzM0O21vdW50JiMzNDspICE9IDApCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKJiM0MzsKJiM0MzsJaW5vZGUgPSBtZXRhZnNfZ2V0X2lub2RlKGRpci0mZ3Q7aV9zYiwgU19JRkRJUiB8IDA1NTUsICZhbXA7bWV0YWZzX21vdW50X2Rpcl9pb3BzKTsKJiM0MzsJaWYgKCFpbm9kZSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwomIzQzOwlkX2FkZChkZW50cnksIGlub2RlKTsKJiM0MzsJZF9tYXJrX2RvbnRjYWNoZShpbm9kZSk7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIExvb2t1cCBpbiAvbW91bnQgZGlyZWN0b3J5CiYjNDM7ICogT25seSAmIzM0O29wdGlvbnMmIzM0OyBpcyB2YWxpZCBoZXJlCiYjNDM7ICovCiYjNDM7c3RhdGljIHN0cnVjdCBkZW50cnkgKm1ldGFmc19tb3VudF9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKJiM0MzsJCQkJCSAgdW5zaWduZWQgaW50IGZsYWdzKQomIzQzO3sKJiM0MzsJY29uc3QgY2hhciAqbmFtZSA9IGRlbnRyeS0mZ3Q7ZF9uYW1lLm5hbWU7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGU7CiYjNDM7CiYjNDM7CWlmIChzdHJjbXAobmFtZSwgJiMzNDtvcHRpb25zJiMzNDspICE9IDApCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKJiM0MzsKJiM0MzsJaW5vZGUgPSBtZXRhZnNfZ2V0X2lub2RlKGRpci0mZ3Q7aV9zYiwgU19JRkRJUiB8IDA1NTUsICZhbXA7bWV0YWZzX29wdGlvbnNfZGlyX2lvcHMpOwomIzQzOwlpZiAoIWlub2RlKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CiYjNDM7CWRfYWRkKGRlbnRyeSwgaW5vZGUpOwomIzQzOwlkX21hcmtfZG9udGNhY2hlKGlub2RlKTsKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogTG9va3VwIGluIC9tb3VudC9vcHRpb25zIGRpcmVjdG9yeQomIzQzOyAqIENvbGxlY3QgdmFsdWVzIGZvciB0aGUgcmVxdWVzdGVkIG9wdGlvbiBuYW1lCiYjNDM7ICovCiYjNDM7c3RhdGljIHN0cnVjdCBkZW50cnkgKm1ldGFmc19vcHRpb25zX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAomIzQzOwkJCQkJICAgIHVuc2lnbmVkIGludCBmbGFncykKJiM0Mzt7CiYjNDM7CWNvbnN0IGNoYXIgKnRhcmdldF9uYW1lID0gZGVudHJ5LSZndDtkX25hbWUubmFtZTsKJiM0MzsJc3RydWN0IGZpbGUgKmJhc2U7CiYjNDM7CXN0cnVjdCBtZXRhZnNfZGVudHJ5X2luZm8gKmluZm87CiYjNDM7CXN0cnVjdCBtZXRhZnNfb3B0aW9uX2VudHJ5ICplbnRyaWVzID0gTlVMTDsKJiM0MzsJaW50IGNvdW50ID0gMDsKJiM0MzsJc3RydWN0IGlub2RlICppbm9kZTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJYmFzZSA9IG1ldGFmc19nZXRfYmFzZV9maWxlKGRlbnRyeS0mZ3Q7ZF9wYXJlbnQpOwomIzQzOwlpZiAoIWJhc2UpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKJiM0MzsKJiM0MzsJcmV0ID0gbWV0YWZzX2dldF9vcHRpb25fdmFsdWVzKGJhc2UsIHRhcmdldF9uYW1lLCAmYW1wO2VudHJpZXMsICZhbXA7Y291bnQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKJiM0MzsKJiM0MzsJaWYgKGNvdW50ID09IDApIHsKJiM0MzsJCWtmcmVlKGVudHJpZXMpOwomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghaW5mbykgewomIzQzOwkJbWV0YWZzX2ZyZWVfZW50cmllcyhlbnRyaWVzLCBjb3VudCk7CiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpbmZvLSZndDt0eXBlID0gTUVUQUZTX09QVElPTl9WQUxVRVM7CiYjNDM7CWluZm8tJmd0O29wdF92YWx1ZXMuZW50cmllcyA9IGVudHJpZXM7CiYjNDM7CWluZm8tJmd0O29wdF92YWx1ZXMuY291bnQgPSBjb3VudDsKJiM0MzsKJiM0MzsJaW5vZGUgPSBtZXRhZnNfZ2V0X2lub2RlKGRpci0mZ3Q7aV9zYiwgU19JRkRJUiB8IDA1NTUsICZhbXA7bWV0YWZzX29wdGlvbl92YWx1ZXNfZGlyX2lvcHMpOwomIzQzOwlpZiAoIWlub2RlKSB7CiYjNDM7CQltZXRhZnNfZnJlZV9lbnRyaWVzKGVudHJpZXMsIGNvdW50KTsKJiM0MzsJCWtmcmVlKGluZm8pOwomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZGVudHJ5LSZndDtkX2ZzZGF0YSA9IGluZm87CiYjNDM7CWRfYWRkKGRlbnRyeSwgaW5vZGUpOwomIzQzOwlkX21hcmtfZG9udGNhY2hlKGlub2RlKTsKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogTG9va3VwIGluIG9wdGlvbi1zcGVjaWZpYyBkaXJlY3RvcnkgKGUuZy4sIC9tb3VudC9vcHRpb25zL2xvd2VyZGlyLykKJiM0MzsgKiBSZXR1cm4gbnVtYmVyZWQgZW50cmllcyAoMCwgMSwgMiwgLi4uKSBhcyBzeW1saW5rcwomIzQzOyAqLwomIzQzO3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICptZXRhZnNfb3B0aW9uX3ZhbHVlc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJCQkJICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiYjNDM7CQkJCQkJICB1bnNpZ25lZCBpbnQgZmxhZ3MpCiYjNDM7ewomIzQzOwljb25zdCBjaGFyICp0YXJnZXRfbmFtZSA9IGRlbnRyeS0mZ3Q7ZF9uYW1lLm5hbWU7CiYjNDM7CXN0cnVjdCBtZXRhZnNfZGVudHJ5X2luZm8gKnBhcmVudF9pbmZvLCAqaW5mbzsKJiM0MzsJc3RydWN0IG1ldGFmc19vcHRpb25fZW50cnkgKmVudHJ5OwomIzQzOwlzdHJ1Y3QgaW5vZGUgKmlub2RlOwomIzQzOwl1bnNpZ25lZCBsb25nIGluZGV4OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlwYXJlbnRfaW5mbyA9IGRlbnRyeS0mZ3Q7ZF9wYXJlbnQtJmd0O2RfZnNkYXRhOwomIzQzOwlpZiAoV0FSTl9PTighcGFyZW50X2luZm8gfHwgcGFyZW50X2luZm8tJmd0O3R5cGUgIT0gTUVUQUZTX09QVElPTl9WQUxVRVMpKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CiYjNDM7CiYjNDM7CWlmICh0YXJnZXRfbmFtZVswXSA9PSAmIzM5OzAmIzM5OyAmYW1wOyZhbXA7IHRhcmdldF9uYW1lWzFdKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CiYjNDM7CiYjNDM7CWVyciA9IGtzdHJ0b3VsKHRhcmdldF9uYW1lLCAxMCwgJmFtcDtpbmRleCk7CiYjNDM7CWlmIChlcnIgfHwgaW5kZXggJmd0Oz0gcGFyZW50X2luZm8tJmd0O29wdF92YWx1ZXMuY291bnQpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKJiM0MzsKJiM0MzsJZW50cnkgPSAmYW1wO3BhcmVudF9pbmZvLSZndDtvcHRfdmFsdWVzLmVudHJpZXNbaW5kZXhdOwomIzQzOwomIzQzOwlpbmZvID0ga3phbGxvYyhzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFpbmZvKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CiYjNDM7CWluZm8tJmd0O3R5cGUgPSBNRVRBRlNfU1lNTElOSzsKJiM0MzsJaWYgKGVudHJ5LSZndDt2YWx1ZSkgewomIzQzOwkJaW5mby0mZ3Q7c3ltbGluay52YWx1ZSA9IGtzdHJkdXAoZW50cnktJmd0O3ZhbHVlLCBHRlBfS0VSTkVMKTsKJiM0MzsJCWlmICghaW5mby0mZ3Q7c3ltbGluay52YWx1ZSkgewomIzQzOwkJCWtmcmVlKGluZm8pOwomIzQzOwkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CWlmIChlbnRyeS0mZ3Q7cGF0aC5tbnQpIHsKJiM0MzsJCWluZm8tJmd0O3N5bWxpbmsucGF0aCA9IGVudHJ5LSZndDtwYXRoOwomIzQzOwkJcGF0aF9nZXQoJmFtcDtpbmZvLSZndDtzeW1saW5rLnBhdGgpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlub2RlID0gbWV0YWZzX2dldF9pbm9kZShkaXItJmd0O2lfc2IsIFNfSUZMTksgfCAwNzc3LCBOVUxMKTsKJiM0MzsJaWYgKCFpbm9kZSkgewomIzQzOwkJa2ZyZWUoaW5mby0mZ3Q7c3ltbGluay52YWx1ZSk7CiYjNDM7CQlpZiAoaW5mby0mZ3Q7c3ltbGluay5wYXRoLm1udCkKJiM0MzsJCQlwYXRoX3B1dCgmYW1wO2luZm8tJmd0O3N5bWxpbmsucGF0aCk7CiYjNDM7CQlrZnJlZShpbmZvKTsKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRlbnRyeS0mZ3Q7ZF9mc2RhdGEgPSBpbmZvOwomIzQzOwlkX2FkZChkZW50cnksIGlub2RlKTsKJiM0MzsJZF9tYXJrX2RvbnRjYWNoZShpbm9kZSk7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEhlbHBlciB0byBnZXQgYmFzZSBmaWxlIGZyb20gYW55IG1ldGFmcyBkZW50cnkKJiM0MzsgKi8KJiM0MztzdGF0aWMgc3RydWN0IGZpbGUgKm1ldGFmc19nZXRfYmFzZV9maWxlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKJiM0Mzt7CiYjNDM7CXdoaWxlIChkZW50cnkpIHsKJiM0MzsJCXN0cnVjdCBtZXRhZnNfZGVudHJ5X2luZm8gKmluZm8gPSBkZW50cnktJmd0O2RfZnNkYXRhOwomIzQzOwomIzQzOwkJaWYgKGluZm8gJmFtcDsmYW1wOyBpbmZvLSZndDt0eXBlID09IE1FVEFGU19ST09UKQomIzQzOwkJCXJldHVybiBpbmZvLSZndDtyb290LmJhc2U7CiYjNDM7CQlpZiAoZGVudHJ5ID09IGRlbnRyeS0mZ3Q7ZF9wYXJlbnQpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlkZW50cnkgPSBkZW50cnktJmd0O2RfcGFyZW50OwomIzQzOwl9CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIENyZWF0ZSB0aGUgcm9vdCBkaXJlY3Rvcnkgc3RydWN0dXJlIGZvciBhIG1ldGFkYXRhIG9wZW4KJiM0MzsgKi8KJiM0MztzdGF0aWMgc3RydWN0IGRlbnRyeSAqbWV0YWZzX2NyZWF0ZV9yb290KHN0cnVjdCBmaWxlICpiYXNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGlub2RlICppbm9kZTsKJiM0MzsJc3RydWN0IGRlbnRyeSAqcm9vdDsKJiM0MzsJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IG1ldGFmc19tbnQtJmd0O21udF9zYjsKJiM0MzsJc3RydWN0IG1ldGFmc19kZW50cnlfaW5mbyAqaW5mbzsKJiM0MzsKJiM0MzsJaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghaW5mbykKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwomIzQzOwlpbmZvLSZndDt0eXBlID0gTUVUQUZTX1JPT1Q7CiYjNDM7CWluZm8tJmd0O3Jvb3QuYmFzZSA9IGdldF9maWxlKGJhc2UpOwomIzQzOwomIzQzOwlpbm9kZSA9IG1ldGFmc19nZXRfaW5vZGUoc2IsIFNfSUZESVIgfCAwNTU1LCAmYW1wO21ldGFmc19yb290X2Rpcl9pb3BzKTsKJiM0MzsJaWYgKCFpbm9kZSkgewomIzQzOwkJZnB1dChpbmZvLSZndDtyb290LmJhc2UpOwomIzQzOwkJa2ZyZWUoaW5mbyk7CiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyb290ID0gZF9hbGxvY19hbm9uKHNiKTsKJiM0MzsJaWYgKCFyb290KSB7CiYjNDM7CQlpcHV0KGlub2RlKTsKJiM0MzsJCWZwdXQoaW5mby0mZ3Q7cm9vdC5iYXNlKTsKJiM0MzsJCWtmcmVlKGluZm8pOwomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogU3RvcmUgdGhlIGluZm8gaW4gZF9mc2RhdGEgYmVmb3JlIGluc3RhbnRpYXRpbmcgKi8KJiM0MzsJcm9vdC0mZ3Q7ZF9mc2RhdGEgPSBpbmZvOwomIzQzOwlkX2luc3RhbnRpYXRlKHJvb3QsIGlub2RlKTsKJiM0MzsJZF9tYXJrX2RvbnRjYWNoZShpbm9kZSk7CiYjNDM7CiYjNDM7CXJldHVybiByb290OwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEdldCBtZXRhZGF0YSByb290IHBhdGggZm9yIGEgYmFzZSBmaWxlLgomIzQzOyAqCiYjNDM7ICogVGhpcyBpcyBjYWxsZWQgZnJvbSBwYXRoX2luaXQoKSB3aGVuIE9fQUxUIGlzIHVzZWQuCiYjNDM7ICogSXQgcmV0dXJucyBhIHBhdGggaW4gdGhlIG1ldGFmcyB0aGF0IHNlcnZlcyBhcyB0aGUgcm9vdAomIzQzOyAqIGZvciB0aGUgbWV0YWRhdGEgbG9va3VwLgomIzQzOyAqLwomIzQzO2ludCBtZXRhZnNfZ2V0X3Jvb3Qoc3RydWN0IGZpbGUgKmJhc2UsIHN0cnVjdCBwYXRoICpwYXRoKQomIzQzO3sKJiM0MzsJc3RydWN0IGRlbnRyeSAqcm9vdDsKJiM0MzsKJiM0MzsJaWYgKCFiYXNlKQomIzQzOwkJcmV0dXJuIC1FQkFERjsKJiM0MzsKJiM0MzsJLyogQ3JlYXRlIHRoZSBtZXRhZGF0YSByb290IGZvciB0aGlzIGJhc2UgZmlsZSAqLwomIzQzOwlyb290ID0gbWV0YWZzX2NyZWF0ZV9yb290KGJhc2UpOwomIzQzOwlpZiAoSVNfRVJSKHJvb3QpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIocm9vdCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFJldHVybiB0aGUgcGF0aCB0byB0aGUgbWV0YWRhdGEgcm9vdC4KJiM0MzsJICogTm9ybWFsIFZGUyBsb29rdXAgd2lsbCB0YWtlIG92ZXIgZnJvbSBoZXJlLgomIzQzOwkgKi8KJiM0MzsJcGF0aC0mZ3Q7bW50ID0gbW50Z2V0KG1ldGFmc19tbnQpOwomIzQzOwlwYXRoLSZndDtkZW50cnkgPSByb290OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobWV0YWZzX2dldF9yb290KTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IF9faW5pdCBtZXRhZnNfaW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZXJyID0gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmYW1wO21ldGFmc190eXBlKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CW1ldGFmc19tbnQgPSBrZXJuX21vdW50KCZhbXA7bWV0YWZzX3R5cGUpOwomIzQzOwlpZiAoSVNfRVJSKG1ldGFmc19tbnQpKSB7CiYjNDM7CQllcnIgPSBQVFJfRVJSKG1ldGFmc19tbnQpOwomIzQzOwkJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZhbXA7bWV0YWZzX3R5cGUpOwomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwlzZXRfZGVmYXVsdF9kX29wKG1ldGFmc19tbnQtJmd0O21udF9zYiwgJmFtcDttZXRhZnNfZGVudHJ5X29wcyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0Mztmc19pbml0Y2FsbChtZXRhZnNfaW5pdCk7CmRpZmYgLS1naXQgYS9mcy9tZXRhZnMvbWV0YWZzLmggYi9mcy9tZXRhZnMvbWV0YWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmQyNTc3MTQyNjBhN2ZiCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbWV0YWZzL21ldGFmcy5oCkBAIC0wLDAgJiM0MzsxLDE1IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KJiM0MzsjaWZuZGVmIF9MSU5VWF9NRVRBRlNfSAomIzQzOyNkZWZpbmUgX0xJTlVYX01FVEFGU19ICiYjNDM7CiYjNDM7c3RydWN0IHBhdGg7CiYjNDM7c3RydWN0IGZpbGU7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBHZXQgbWV0YWRhdGEgcm9vdCBwYXRoIGZvciBhIGJhc2UgZmlsZS4KJiM0MzsgKiBDYWxsZWQgZnJvbSBwYXRoX2luaXQoKSB3aGVuIE9fQUxUIGZsYWcgaXMgdXNlZC4KJiM0MzsgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyB3aXRoIHBhdGggZmlsbGVkIGluLCAtZXJybm8gb24gZXJyb3IuCiYjNDM7ICovCiYjNDM7aW50IG1ldGFmc19nZXRfcm9vdChzdHJ1Y3QgZmlsZSAqYmFzZSwgc3RydWN0IHBhdGggKnBhdGgpOwomIzQzOwomIzQzOyNlbmRpZiAvKiBfTElOVVhfTUVUQUZTX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL21vdW50LmggYi9mcy9tb3VudC5oCmluZGV4IDk0ZmNjMzA2ZDIxZTdkLi42OWE5NTNiYzExMmIzNiAxMDA2NDQKLS0tIGEvZnMvbW91bnQuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9tb3VudC5oCkBAIC02NSw3ICYjNDM7NjUsNiBAQCBzdHJ1Y3QgbW91bnQgewogCXN0cnVjdCBtb3VudCAqIF9fYWxpZ25lZCgxKSAqbW50X3BwcmV2X2Zvcl9zYjsKIAkJCQkJLyogZXhjZXB0IHRoYXQgTFNCIG9mIHBwcmV2IGlzIHN0b2xlbiAqLwogI2RlZmluZSBXUklURV9IT0xEIDEJCQkvKiAuLi4gZm9yIHVzZSBieSBtbnRfaG9sZF93cml0ZXJzKCkgKi8KLQljb25zdCBjaGFyICptbnRfZGV2bmFtZTsJLyogTmFtZSBvZiBkZXZpY2UgZS5nLiAvZGV2L2Rzay9oZGExICovCiAJc3RydWN0IGxpc3RfaGVhZCBtbnRfbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG1udF9leHBpcmU7CS8qIGxpbmsgaW4gZnMtc3BlY2lmaWMgZXhwaXJ5IGxpc3QgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIG1udF9zaGFyZTsJLyogY2lyY3VsYXIgbGlzdCBvZiBzaGFyZWQgbW91bnRzICovCmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuYwppbmRleCAxOWNlNDNjOWE2ZTY2Mi4uNDM3YTE0YzQzMmU2N2IgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmFtZWkuYwpAQCAtNDUsNiAmIzQzOzQ1LDcgQEAKIAogI2luY2x1ZGUgJiMzNDtpbnRlcm5hbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7bW91bnQuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDttZXRhZnMvbWV0YWZzLmgmIzM0OwogCiAvKiBbRmViLTE5OTcgVC4gU2Nob2ViZWwtVGhldWVyXQogICogRnVuZGFtZW50YWwgY2hhbmdlcyBpbiB0aGUgcGF0aG5hbWUgbG9va3VwIG1lY2hhbmlzbXMgKG5hbWVpKQpAQCAtMjc1Myw2ICYjNDM7Mjc1NCwyMSBAQCBzdGF0aWMgY29uc3QgY2hhciAqcGF0aF9pbml0KHN0cnVjdCBuYW1laWRhdGEgKm5kLCB1bnNpZ25lZCBmbGFncykKIAkJCQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKIAkJfQogCiYjNDM7CQlpZiAodW5saWtlbHkoZmxhZ3MgJmFtcDsgTE9PS1VQX0FMVCkpIHsKJiM0MzsJCQlpZiAoZmxhZ3MgJmFtcDsgTE9PS1VQX1JDVSkKJiM0MzsJCQkJcmV0dXJuIEVSUl9QVFIoLUVDSElMRCk7CiYjNDM7CiYjNDM7CQkJLyogSGFuZGxlIE9fQUxUOiBqdW1wIHRvIG1ldGFmcyByb290ICovCiYjNDM7CQkJZXJyb3IgPSBtZXRhZnNfZ2V0X3Jvb3QoZmRfZmlsZShmKSwgJmFtcDtuZC0mZ3Q7cGF0aCk7CiYjNDM7CQkJaWYgKGVycm9yKQomIzQzOwkJCQlyZXR1cm4gRVJSX1BUUihlcnJvcik7CiYjNDM7CiYjNDM7CQkJbmQtJmd0O2lub2RlID0gbmQtJmd0O3BhdGguZGVudHJ5LSZndDtkX2lub2RlOwomIzQzOwkJCW5kLSZndDtzdGF0ZSB8PSBORF9KVU1QRUQ7CiYjNDM7CiYjNDM7CQkJcmV0dXJuIHM7CiYjNDM7CQl9CiYjNDM7CiAJCWRlbnRyeSA9IGZkX2ZpbGUoZiktJmd0O2ZfcGF0aC5kZW50cnk7CiAKIAkJaWYgKCpzICZhbXA7JmFtcDsgdW5saWtlbHkoIWRfY2FuX2xvb2t1cChkZW50cnkpKSkKZGlmZiAtLWdpdCBhL2ZzL25hbWVzcGFjZS5jIGIvZnMvbmFtZXNwYWNlLmMKaW5kZXggM2Q1Y2Q1YmYzYjA1MzcuLjYyY2M3MWM0MDFhMmFjIDEwMDY0NAotLS0gYS9mcy9uYW1lc3BhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9uYW1lc3BhY2UuYwpAQCAtMjgyLDcgJiM0MzsyODIsNyBAQCBpbnQgbW50X2dldF9jb3VudChzdHJ1Y3QgbW91bnQgKm1udCkKICNlbmRpZgogfQogCi1zdGF0aWMgc3RydWN0IG1vdW50ICphbGxvY192ZnNtbnQoY29uc3QgY2hhciAqbmFtZSkKJiM0MztzdGF0aWMgc3RydWN0IG1vdW50ICphbGxvY192ZnNtbnQodm9pZCkKIHsKIAlzdHJ1Y3QgbW91bnQgKm1udCA9IGttZW1fY2FjaGVfemFsbG9jKG1udF9jYWNoZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKG1udCkgewpAQCAtMjkyLDE4ICYjNDM7MjkyLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgbW91bnQgKmFsbG9jX3Zmc21udChjb25zdCBjaGFyICpuYW1lKQogCQlpZiAoZXJyKQogCQkJZ290byBvdXRfZnJlZV9jYWNoZTsKIAotCQlpZiAobmFtZSkKLQkJCW1udC0mZ3Q7bW50X2Rldm5hbWUgPSBrc3RyZHVwX2NvbnN0KG5hbWUsCi0JCQkJCQkJIEdGUF9LRVJORUxfQUNDT1VOVCk7Ci0JCWVsc2UKLQkJCW1udC0mZ3Q7bW50X2Rldm5hbWUgPSAmIzM0O25vbmUmIzM0OzsKLQkJaWYgKCFtbnQtJmd0O21udF9kZXZuYW1lKQotCQkJZ290byBvdXRfZnJlZV9pZDsKLQogI2lmZGVmIENPTkZJR19TTVAKIAkJbW50LSZndDttbnRfcGNwID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBtbnRfcGNwKTsKIAkJaWYgKCFtbnQtJmd0O21udF9wY3ApCi0JCQlnb3RvIG91dF9mcmVlX2Rldm5hbWU7CiYjNDM7CQkJZ290byBvdXRfZnJlZV9pZDsKIAogCQl0aGlzX2NwdV9hZGQobW50LSZndDttbnRfcGNwLSZndDttbnRfY291bnQsIDEpOwogI2Vsc2UKQEAgLTMyOCwxMSAmIzQzOzMyMCw5IEBAIHN0YXRpYyBzdHJ1Y3QgbW91bnQgKmFsbG9jX3Zmc21udChjb25zdCBjaGFyICpuYW1lKQogCXJldHVybiBtbnQ7CiAKICNpZmRlZiBDT05GSUdfU01QCi1vdXRfZnJlZV9kZXZuYW1lOgotCWtmcmVlX2NvbnN0KG1udC0mZ3Q7bW50X2Rldm5hbWUpOwotI2VuZGlmCiBvdXRfZnJlZV9pZDoKIAltbnRfZnJlZV9pZChtbnQpOwomIzQzOyNlbmRpZgogb3V0X2ZyZWVfY2FjaGU6CiAJa21lbV9jYWNoZV9mcmVlKG1udF9jYWNoZSwgbW50KTsKIAlyZXR1cm4gTlVMTDsKQEAgLTcyNSw3ICYjNDM7NzE1LDYgQEAgaW50IHNiX3ByZXBhcmVfcmVtb3VudF9yZWFkb25seShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogc3RhdGljIHZvaWQgZnJlZV92ZnNtbnQoc3RydWN0IG1vdW50ICptbnQpCiB7CiAJbW50X2lkbWFwX3B1dChtbnRfaWRtYXAoJmFtcDttbnQtJmd0O21udCkpOwotCWtmcmVlX2NvbnN0KG1udC0mZ3Q7bW50X2Rldm5hbWUpOwogI2lmZGVmIENPTkZJR19TTVAKIAlmcmVlX3BlcmNwdShtbnQtJmd0O21udF9wY3ApOwogI2VuZGlmCkBAIC0xMTgwLDcgJiM0MzsxMTY5LDcgQEAgc3RydWN0IHZmc21vdW50ICp2ZnNfY3JlYXRlX21vdW50KHN0cnVjdCBmc19jb250ZXh0ICpmYykKIAlpZiAoIWZjLSZndDtyb290KQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAotCW1udCA9IGFsbG9jX3Zmc21udChmYy0mZ3Q7c291cmNlKTsKJiM0MzsJbW50ID0gYWxsb2NfdmZzbW50KCk7CiAJaWYgKCFtbnQpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCkBAIC0xMjQ4LDcgJiM0MzsxMjM3LDcgQEAgc3RhdGljIHN0cnVjdCBtb3VudCAqY2xvbmVfbW50KHN0cnVjdCBtb3VudCAqb2xkLCBzdHJ1Y3QgZGVudHJ5ICpyb290LAogCXN0cnVjdCBtb3VudCAqbW50OwogCWludCBlcnI7CiAKLQltbnQgPSBhbGxvY192ZnNtbnQob2xkLSZndDttbnRfZGV2bmFtZSk7CiYjNDM7CW1udCA9IGFsbG9jX3Zmc21udCgpOwogCWlmICghbW50KQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIApAQCAtMjk1NywxNiAmIzQzOzI5NDYsMTIgQEAgc3RhdGljIGludCBkb19jaGFuZ2VfdHlwZShjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IG1zX2ZsYWdzKQogc3RhdGljIGlubGluZSBib29sIG1heV9jb3B5X3RyZWUoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpCiB7CiAJc3RydWN0IG1vdW50ICptbnQgPSByZWFsX21vdW50KHBhdGgtJmd0O21udCk7Ci0JY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zICpkX29wOwogCiAJaWYgKGNoZWNrX21udChtbnQpKQogCQlyZXR1cm4gdHJ1ZTsKIAotCWRfb3AgPSBwYXRoLSZndDtkZW50cnktJmd0O2Rfb3A7Ci0JaWYgKGRfb3AgPT0gJmFtcDtuc19kZW50cnlfb3BlcmF0aW9ucykKLQkJcmV0dXJuIHRydWU7Ci0KLQlpZiAoZF9vcCA9PSAmYW1wO3BpZGZzX2RlbnRyeV9vcGVyYXRpb25zKQomIzQzOwkvKiBNYWtlIGFuIGV4Y2VwdGlvbiBmb3IgaW50ZXJuYWwgbW91bnRzIGV4cGxpY2l0bHkgbWFya2VkIGFzIGNsb25hYmxlICovCiYjNDM7CWlmIChtbnQtJmd0O21udF9ucyA9PSBNTlRfTlNfSU5URVJOQUwgJmFtcDsmYW1wOyBtbnQtJmd0O21udC5tbnRfZmxhZ3MgJmFtcDsgTU5UX0NMT05BQkxFKQogCQlyZXR1cm4gdHJ1ZTsKIAogCWlmICghaXNfbW91bnRlZChwYXRoLSZndDttbnQpKQpAQCAtMzIwMSw3ICYjNDM7MzE4Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgZmlsZSAqdmZzX29wZW5fdHJlZShpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsIHVuc2lnbmVkCiAKIAlpZiAoZmxhZ3MgJmFtcDsgfihBVF9FTVBUWV9QQVRIIHwgQVRfTk9fQVVUT01PVU5UIHwgQVRfUkVDVVJTSVZFIHwKIAkJICAgICAgQVRfU1lNTElOS19OT0ZPTExPVyB8IE9QRU5fVFJFRV9DTE9ORSB8Ci0JCSAgICAgIE9QRU5fVFJFRV9DTE9FWEVDIHwgT1BFTl9UUkVFX05BTUVTUEFDRSkpCiYjNDM7CQkgICAgICBPUEVOX1RSRUVfQ0xPRVhFQyB8IE9QRU5fVFJFRV9OQU1FU1BBQ0UgfCBPUEVOX1RSRUVfQUxUKSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAKIAlpZiAoKGZsYWdzICZhbXA7IChBVF9SRUNVUlNJVkUgfCBPUEVOX1RSRUVfQ0xPTkUgfCBPUEVOX1RSRUVfTkFNRVNQQUNFKSkgPT0KQEAgLTMyMTUsNiAmIzQzOzMyMDAsOCBAQCBzdGF0aWMgc3RydWN0IGZpbGUgKnZmc19vcGVuX3RyZWUoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lLCB1bnNpZ25lZAogCQlsb29rdXBfZmxhZ3MgJmFtcDs9IH5MT09LVVBfQVVUT01PVU5UOwogCWlmIChmbGFncyAmYW1wOyBBVF9TWU1MSU5LX05PRk9MTE9XKQogCQlsb29rdXBfZmxhZ3MgJmFtcDs9IH5MT09LVVBfRk9MTE9XOwomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgT1BFTl9UUkVFX0FMVCkKJiM0MzsJCWxvb2t1cF9mbGFncyB8PSBMT09LVVBfQUxUOwogCiAJLyoKIAkgKiBJZiB3ZSBjcmVhdGUgYSBuZXcgbW91bnQgbmFtZXNwYWNlIHdpdGggdGhlIGNsb25lZCBtb3VudCB0cmVlIHdlCkBAIC01Mzg3LDcgJiM0Mzs1Mzc0LDYgQEAgc3RhdGljIHZvaWQgc3RhdG1vdW50X2ZzX3N1YnR5cGUoc3RydWN0IGtzdGF0bW91bnQgKnMsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKQogc3RhdGljIGludCBzdGF0bW91bnRfc2Jfc291cmNlKHN0cnVjdCBrc3RhdG1vdW50ICpzLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSkKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gcy0mZ3Q7bW50LSZndDttbnRfc2I7Ci0Jc3RydWN0IG1vdW50ICpyID0gcmVhbF9tb3VudChzLSZndDttbnQpOwogCiAJaWYgKHNiLSZndDtzX29wLSZndDtzaG93X2Rldm5hbWUpIHsKIAkJc2l6ZV90IHN0YXJ0ID0gc2VxLSZndDtjb3VudDsKQEAgLTU0MDUsNyAmIzQzOzUzOTEsNyBAQCBzdGF0aWMgaW50IHN0YXRtb3VudF9zYl9zb3VyY2Uoc3RydWN0IGtzdGF0bW91bnQgKnMsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKQogCQlzZXEtJmd0O2NvdW50ID0gc3RhcnQ7CiAJCXNlcV9jb21taXQoc2VxLCBzdHJpbmdfdW5lc2NhcGVfaW5wbGFjZShzZXEtJmd0O2J1ZiAmIzQzOyBzdGFydCwgVU5FU0NBUEVfT0NUQUwpKTsKIAl9IGVsc2UgewotCQlzZXFfcHV0cyhzZXEsIHItJmd0O21udF9kZXZuYW1lKTsKJiM0MzsJCXNlcV9wdXRzKHNlcSwgc2ItJmd0O3NfZGV2bmFtZSk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNTQxNiw2ICYjNDM7NTQwMiw0MCBAQCBzdGF0aWMgdm9pZCBzdGF0bW91bnRfbW50X25zX2lkKHN0cnVjdCBrc3RhdG1vdW50ICpzLCBzdHJ1Y3QgbW50X25hbWVzcGFjZSAqbnMpCiAJcy0mZ3Q7c20ubW50X25zX2lkID0gbnMtJmd0O25zLm5zX2lkOwogfQogCiYjNDM7dm9pZCBzYl9hZGRfb3B0aW9uKHN0cnVjdCBzYl9vcHRfY3R4ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQomIzQzO3sKJiM0MzsJc2JfYWRkX29wdGlvbl9wYXRoKGN0eCwgbmFtZSwgdmFsdWUsIE5VTEwpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHNiX2FkZF9vcHRpb25fcGF0aChzdHJ1Y3Qgc2Jfb3B0X2N0eCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSwKJiM0MzsJCQljb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCkKJiM0Mzt7CiYjNDM7CWN0eC0mZ3Q7YWN0b3IoY3R4LCBuYW1lLCB2YWx1ZSwgcGF0aCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGRvX3Nob3dfb3B0aW9uKHN0cnVjdCBzYl9vcHRfY3R4ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlLAomIzQzOwkJCSAgIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKQomIzQzO3sKJiM0MzsJaWYgKHN0cmNtcChuYW1lLCAmIzM0O3NvdXJjZSYjMzQ7KSAhPSAwKQomIzQzOwkJc2VxX3Nob3dfb3B0aW9uKGN0eC0mZ3Q7ZGF0YSwgbmFtZSwgdmFsdWUpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbW50X3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IHZmc21vdW50ICptbnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gbW50LSZndDttbnRfc2I7CiYjNDM7CiYjNDM7CWlmIChzYi0mZ3Q7c19vcC0mZ3Q7c2hvd19vcHRpb25zKQomIzQzOwkJcmV0dXJuIHNiLSZndDtzX29wLSZndDtzaG93X29wdGlvbnMoc2VxLCBtbnQtJmd0O21udF9yb290KTsKJiM0MzsKJiM0MzsJaWYgKHNiLSZndDtzX29wLSZndDtnZXRfb3B0aW9ucykgewomIzQzOwkJc3RydWN0IHNiX29wdF9jdHggY3R4ID0geyAuZGF0YSA9IHNlcSwgLmFjdG9yID0gZG9fc2hvd19vcHRpb24gfTsKJiM0MzsKJiM0MzsJCXJldHVybiBzYi0mZ3Q7c19vcC0mZ3Q7Z2V0X29wdGlvbnMoJmFtcDtjdHgsIG1udC0mZ3Q7bW50X3Jvb3QpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgc3RhdG1vdW50X21udF9vcHRzKHN0cnVjdCBrc3RhdG1vdW50ICpzLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSkKIHsKIAlzdHJ1Y3QgdmZzbW91bnQgKm1udCA9IHMtJmd0O21udDsKQEAgLTU0MjcsMTEgJiM0Mzs1NDQ3LDkgQEAgc3RhdGljIGludCBzdGF0bW91bnRfbW50X29wdHMoc3RydWN0IGtzdGF0bW91bnQgKnMsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKQogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlpZiAoc2ItJmd0O3Nfb3AtJmd0O3Nob3dfb3B0aW9ucykgewotCQllcnIgPSBzYi0mZ3Q7c19vcC0mZ3Q7c2hvd19vcHRpb25zKHNlcSwgbW50LSZndDttbnRfcm9vdCk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCX0KJiM0MzsJZXJyID0gbW50X3Nob3dfb3B0aW9ucyhzZXEsIG1udCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwogCiAJaWYgKHVubGlrZWx5KHNlcV9oYXNfb3ZlcmZsb3dlZChzZXEpKSkKIAkJcmV0dXJuIC1FQUdBSU47CkBAIC01NDc5LDE0ICYjNDM7NTQ5NywxMCBAQCBzdGF0aWMgaW5saW5lIGludCBzdGF0bW91bnRfb3B0X3Byb2Nlc3Moc3RydWN0IHNlcV9maWxlICpzZXEsIHNpemVfdCBzdGFydCkKIHN0YXRpYyBpbnQgc3RhdG1vdW50X29wdF9hcnJheShzdHJ1Y3Qga3N0YXRtb3VudCAqcywgc3RydWN0IHNlcV9maWxlICpzZXEpCiB7CiAJc3RydWN0IHZmc21vdW50ICptbnQgPSBzLSZndDttbnQ7Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IG1udC0mZ3Q7bW50X3NiOwogCXNpemVfdCBzdGFydCA9IHNlcS0mZ3Q7Y291bnQ7CiAJaW50IGVycjsKIAotCWlmICghc2ItJmd0O3Nfb3AtJmd0O3Nob3dfb3B0aW9ucykKLQkJcmV0dXJuIDA7Ci0KLQllcnIgPSBzYi0mZ3Q7c19vcC0mZ3Q7c2hvd19vcHRpb25zKHNlcSwgbW50LSZndDttbnRfcm9vdCk7CiYjNDM7CWVyciA9IG1udF9zaG93X29wdGlvbnMoc2VxLCBtbnQpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKZGlmZiAtLWdpdCBhL2ZzL25zZnMuYyBiL2ZzL25zZnMuYwppbmRleCBjM2I2YWU3NjU5NGE4MS4uZTExMDEzMGQwNzYwZTUgMTAwNjQ0Ci0tLSBhL2ZzL25zZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9uc2ZzLmMKQEAgLTY4NCw2ICYjNDM7Njg0LDcgQEAgdm9pZCBfX2luaXQgbnNmc19pbml0KHZvaWQpCiAJaWYgKElTX0VSUihuc2ZzX21udCkpCiAJCXBhbmljKCYjMzQ7Y2FuJiMzOTt0IHNldCBuc2ZzIHVwXG4mIzM0Oyk7CiAJbnNmc19tbnQtJmd0O21udF9zYi0mZ3Q7c19mbGFncyAmYW1wOz0gflNCX05PVVNFUjsKJiM0MzsJbnNmc19tbnQtJmd0O21udF9mbGFncyB8PSBNTlRfQ0xPTkFCTEU7CiAJbnNmc19yb290X3BhdGgubW50ID0gbnNmc19tbnQ7CiAJbnNmc19yb290X3BhdGguZGVudHJ5ID0gbnNmc19tbnQtJmd0O21udF9yb290OwogfQpkaWZmIC0tZ2l0IGEvZnMvb3Blbi5jIGIvZnMvb3Blbi5jCmluZGV4IDQwODkyNWQ3YmQwYjc3Li4zYTA4MWE5ZTMwNjI0MyAxMDA2NDQKLS0tIGEvZnMvb3Blbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29wZW4uYwpAQCAtMTEzMSw3ICYjNDM7MTEzMSw4IEBAIHN0cnVjdCBmaWxlICprZXJuZWxfZmlsZV9vcGVuKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgZmxhZ3MsCiBFWFBPUlRfU1lNQk9MX0dQTChrZXJuZWxfZmlsZV9vcGVuKTsKIAogI2RlZmluZSBXSUxMX0NSRUFURShmbGFncykJKGZsYWdzICZhbXA7IChPX0NSRUFUIHwgX19PX1RNUEZJTEUpKQotI2RlZmluZSBPX1BBVEhfRkxBR1MJCShPX0RJUkVDVE9SWSB8IE9fTk9GT0xMT1cgfCBPX1BBVEggfCBPX0NMT0VYRUMgfCBPX0VNUFRZUEFUSCkKJiM0MzsjZGVmaW5lIE9fUEFUSF9GTEFHUwkJKE9fRElSRUNUT1JZIHwgT19OT0ZPTExPVyB8IE9fUEFUSCB8IE9fQ0xPRVhFQyB8IE9fRU1QVFlQQVRIIHwgXAomIzQzOwkJCQkgT19BTFQpCiAKIGlubGluZSBzdHJ1Y3Qgb3Blbl9ob3cgYnVpbGRfb3Blbl9ob3coaW50IGZsYWdzLCB1bW9kZV90IG1vZGUpCiB7CkBAIC0xMjgzLDYgJiM0MzsxMjg0LDggQEAgaW5saW5lIGludCBidWlsZF9vcGVuX2ZsYWdzKGNvbnN0IHN0cnVjdCBvcGVuX2hvdyAqaG93LCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3ApCiAJCWxvb2t1cF9mbGFncyB8PSBMT09LVVBfRk9MTE9XOwogCWlmIChmbGFncyAmYW1wOyBPX0VNUFRZUEFUSCkKIAkJbG9va3VwX2ZsYWdzIHw9IExPT0tVUF9FTVBUWTsKJiM0MzsJaWYgKGZsYWdzICZhbXA7IE9fQUxUKQomIzQzOwkJbG9va3VwX2ZsYWdzIHw9IExPT0tVUF9BTFQ7CiAKIAlpZiAoaG93LSZndDtyZXNvbHZlICZhbXA7IFJFU09MVkVfTk9fWERFVikKIAkJbG9va3VwX2ZsYWdzIHw9IExPT0tVUF9OT19YREVWOwpkaWZmIC0tZ2l0IGEvZnMvb3ZlcmxheWZzL3BhcmFtcy5jIGIvZnMvb3ZlcmxheWZzL3BhcmFtcy5jCmluZGV4IGM5M2ZjYWE0NWQ0YTM2Li5jNWE5ZTg1OGUzNjY1ZSAxMDA2NDQKLS0tIGEvZnMvb3ZlcmxheWZzL3BhcmFtcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL292ZXJsYXlmcy9wYXJhbXMuYwpAQCAtMTA0NiwxMCAmIzQzOzEwNDYsMTEgQEAgaW50IG92bF9mc19wYXJhbXNfdmVyaWZ5KGNvbnN0IHN0cnVjdCBvdmxfZnNfY29udGV4dCAqY3R4LAogICogUHJpbnRzIHRoZSBtb3VudCBvcHRpb25zIGZvciBhIGdpdmVuIHN1cGVyYmxvY2suCiAgKiBSZXR1cm5zIHplcm87IGRvZXMgbm90IGZhaWwuCiAgKi8KLWludCBvdmxfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQomIzQzO2ludCBvdmxfZ2V0X29wdGlvbnMoc3RydWN0IHNiX29wdF9jdHggKmN0eCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkZW50cnktJmd0O2Rfc2I7CiAJc3RydWN0IG92bF9mcyAqb2ZzID0gT1ZMX0ZTKHNiKTsKJiM0MzsJc3RydWN0IHBhdGggdXBwZXJwYXRoOwogCXNpemVfdCBuciwgbnJfbWVyZ2VkX2xvd2VyLCBucl9sb3dlciA9IDA7CiAJY2hhciAqKmxvd2VyZGlycyA9IG9mcy0mZ3Q7Y29uZmlnLmxvd2VyZGlyczsKIApAQCAtMTA2Miw0MyAmIzQzOzEwNjMsNDcgQEAgaW50IG92bF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAJICogd2l0aCB0aGUgbmV3IGxvd2VyZGlyJiM0MzsgYW5kIGRhdGFkaXImIzQzOyBtb3VudCBvcHRpb25zLgogCSAqLwogCWlmIChsb3dlcmRpcnNbMF0pIHsKLQkJc2VxX3Nob3dfb3B0aW9uKG0sICYjMzQ7bG93ZXJkaXImIzM0OywgbG93ZXJkaXJzWzBdKTsKJiM0MzsJCXNiX2FkZF9vcHRpb24oY3R4LCAmIzM0O2xvd2VyZGlyJiMzNDssIGxvd2VyZGlyc1swXSk7CiAJfSBlbHNlIHsKIAkJbnJfbG93ZXIgPSBvZnMtJmd0O251bWxheWVyOwogCQlucl9tZXJnZWRfbG93ZXIgPSBucl9sb3dlciAtIG9mcy0mZ3Q7bnVtZGF0YWxheWVyOwogCX0KIAlmb3IgKG5yID0gMTsgbnIgJmx0OyBucl9sb3dlcjsgbnImIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgcGF0aCBsb3dlcnBhdGggPSB7CiYjNDM7CQkJLm1udCA9IG9mcy0mZ3Q7bGF5ZXJzW25yXS5tbnQsCiYjNDM7CQkJLmRlbnRyeSA9IG9mcy0mZ3Q7bGF5ZXJzW25yXS5tbnQtJmd0O21udF9yb290LAomIzQzOwkJfTsKIAkJaWYgKG5yICZsdDsgbnJfbWVyZ2VkX2xvd2VyKQotCQkJc2VxX3Nob3dfb3B0aW9uKG0sICYjMzQ7bG93ZXJkaXImIzQzOyYjMzQ7LCBsb3dlcmRpcnNbbnJdKTsKJiM0MzsJCQlzYl9hZGRfb3B0aW9uX3BhdGgoY3R4LCAmIzM0O2xvd2VyZGlyJiM0MzsmIzM0OywgbG93ZXJkaXJzW25yXSwKJiM0MzsJCQkJCSAgICZhbXA7bG93ZXJwYXRoKTsKIAkJZWxzZQotCQkJc2VxX3Nob3dfb3B0aW9uKG0sICYjMzQ7ZGF0YWRpciYjNDM7JiMzNDssIGxvd2VyZGlyc1tucl0pOwomIzQzOwkJCXNiX2FkZF9vcHRpb25fcGF0aChjdHgsICYjMzQ7ZGF0YWRpciYjNDM7JiMzNDssIGxvd2VyZGlyc1tucl0sCiYjNDM7CQkJCQkgICAmYW1wO2xvd2VycGF0aCk7CiAJfQogCWlmIChvZnMtJmd0O2NvbmZpZy51cHBlcmRpcikgewotCQlzZXFfc2hvd19vcHRpb24obSwgJiMzNDt1cHBlcmRpciYjMzQ7LCBvZnMtJmd0O2NvbmZpZy51cHBlcmRpcik7Ci0JCXNlcV9zaG93X29wdGlvbihtLCAmIzM0O3dvcmtkaXImIzM0Oywgb2ZzLSZndDtjb25maWcud29ya2Rpcik7CiYjNDM7CQlvdmxfcGF0aF91cHBlcihzYi0mZ3Q7c19yb290LCAmYW1wO3VwcGVycGF0aCk7CiYjNDM7CQlzYl9hZGRfb3B0aW9uX3BhdGgoY3R4LCAmIzM0O3VwcGVyZGlyJiMzNDssIG9mcy0mZ3Q7Y29uZmlnLnVwcGVyZGlyLCAmYW1wO3VwcGVycGF0aCk7CiYjNDM7CQlzYl9hZGRfb3B0aW9uKGN0eCwgJiMzNDt3b3JrZGlyJiMzNDssIG9mcy0mZ3Q7Y29uZmlnLndvcmtkaXIpOwogCX0KIAlpZiAob2ZzLSZndDtjb25maWcuZGVmYXVsdF9wZXJtaXNzaW9ucykKLQkJc2VxX3B1dHMobSwgJiMzNDssZGVmYXVsdF9wZXJtaXNzaW9ucyYjMzQ7KTsKJiM0MzsJCXNiX2FkZF9vcHRpb24oY3R4LCAmIzM0O2RlZmF1bHRfcGVybWlzc2lvbnMmIzM0OywgTlVMTCk7CiAJaWYgKG9mcy0mZ3Q7Y29uZmlnLnJlZGlyZWN0X21vZGUgIT0gb3ZsX3JlZGlyZWN0X21vZGVfZGVmKCkpCi0JCXNlcV9wcmludGYobSwgJiMzNDsscmVkaXJlY3RfZGlyPSVzJiMzNDssCi0JCQkgICBvdmxfcmVkaXJlY3RfbW9kZSgmYW1wO29mcy0mZ3Q7Y29uZmlnKSk7CiYjNDM7CQlzYl9hZGRfb3B0aW9uKGN0eCwgJiMzNDtyZWRpcmVjdF9kaXImIzM0Oywgb3ZsX3JlZGlyZWN0X21vZGUoJmFtcDtvZnMtJmd0O2NvbmZpZykpOwogCWlmIChvZnMtJmd0O2NvbmZpZy5pbmRleCAhPSBvdmxfaW5kZXhfZGVmKQotCQlzZXFfcHJpbnRmKG0sICYjMzQ7LGluZGV4PSVzJiMzNDssIHN0cl9vbl9vZmYob2ZzLSZndDtjb25maWcuaW5kZXgpKTsKJiM0MzsJCXNiX2FkZF9vcHRpb24oY3R4LCAmIzM0O2luZGV4JiMzNDssIHN0cl9vbl9vZmYob2ZzLSZndDtjb25maWcuaW5kZXgpKTsKIAlpZiAob2ZzLSZndDtjb25maWcudXVpZCAhPSBvdmxfdXVpZF9kZWYoKSkKLQkJc2VxX3ByaW50ZihtLCAmIzM0Oyx1dWlkPSVzJiMzNDssIG92bF91dWlkX21vZGUoJmFtcDtvZnMtJmd0O2NvbmZpZykpOwomIzQzOwkJc2JfYWRkX29wdGlvbihjdHgsICYjMzQ7dXVpZCYjMzQ7LCBvdmxfdXVpZF9tb2RlKCZhbXA7b2ZzLSZndDtjb25maWcpKTsKIAlpZiAob2ZzLSZndDtjb25maWcubmZzX2V4cG9ydCAhPSBvdmxfbmZzX2V4cG9ydF9kZWYpCi0JCXNlcV9wcmludGYobSwgJiMzNDssbmZzX2V4cG9ydD0lcyYjMzQ7LAotCQkJICAgc3RyX29uX29mZihvZnMtJmd0O2NvbmZpZy5uZnNfZXhwb3J0KSk7CiYjNDM7CQlzYl9hZGRfb3B0aW9uKGN0eCwgJiMzNDtuZnNfZXhwb3J0JiMzNDssIHN0cl9vbl9vZmYob2ZzLSZndDtjb25maWcubmZzX2V4cG9ydCkpOwogCWlmIChvZnMtJmd0O2NvbmZpZy54aW5vICE9IG92bF94aW5vX2RlZigpICZhbXA7JmFtcDsgIW92bF9zYW1lX2ZzKG9mcykpCi0JCXNlcV9wcmludGYobSwgJiMzNDsseGlubz0lcyYjMzQ7LCBvdmxfeGlub19tb2RlKCZhbXA7b2ZzLSZndDtjb25maWcpKTsKJiM0MzsJCXNiX2FkZF9vcHRpb24oY3R4LCAmIzM0O3hpbm8mIzM0Oywgb3ZsX3hpbm9fbW9kZSgmYW1wO29mcy0mZ3Q7Y29uZmlnKSk7CiAJaWYgKG9mcy0mZ3Q7Y29uZmlnLm1ldGFjb3B5ICE9IG92bF9tZXRhY29weV9kZWYpCi0JCXNlcV9wcmludGYobSwgJiMzNDssbWV0YWNvcHk9JXMmIzM0Oywgc3RyX29uX29mZihvZnMtJmd0O2NvbmZpZy5tZXRhY29weSkpOwomIzQzOwkJc2JfYWRkX29wdGlvbihjdHgsICYjMzQ7bWV0YWNvcHkmIzM0Oywgc3RyX29uX29mZihvZnMtJmd0O2NvbmZpZy5tZXRhY29weSkpOwogCWlmIChvZnMtJmd0O2NvbmZpZy5mc3luY19tb2RlICE9IG92bF9mc3luY19tb2RlX2RlZigpKQotCQlzZXFfcHJpbnRmKG0sICYjMzQ7LGZzeW5jPSVzJiMzNDssIG92bF9mc3luY19tb2RlKCZhbXA7b2ZzLSZndDtjb25maWcpKTsKJiM0MzsJCXNiX2FkZF9vcHRpb24oY3R4LCAmIzM0O2ZzeW5jJiMzNDssIG92bF9mc3luY19tb2RlKCZhbXA7b2ZzLSZndDtjb25maWcpKTsKIAlpZiAob2ZzLSZndDtjb25maWcudXNlcnhhdHRyKQotCQlzZXFfcHV0cyhtLCAmIzM0Oyx1c2VyeGF0dHImIzM0Oyk7CiYjNDM7CQlzYl9hZGRfb3B0aW9uKGN0eCwgJiMzNDt1c2VyeGF0dHImIzM0OywgTlVMTCk7CiAJaWYgKG9mcy0mZ3Q7Y29uZmlnLnZlcml0eV9tb2RlICE9IG92bF92ZXJpdHlfbW9kZV9kZWYoKSkKLQkJc2VxX3ByaW50ZihtLCAmIzM0Oyx2ZXJpdHk9JXMmIzM0OywKLQkJCSAgIG92bF92ZXJpdHlfbW9kZSgmYW1wO29mcy0mZ3Q7Y29uZmlnKSk7CiYjNDM7CQlzYl9hZGRfb3B0aW9uKGN0eCwgJiMzNDt2ZXJpdHkmIzM0Oywgb3ZsX3Zlcml0eV9tb2RlKCZhbXA7b2ZzLSZndDtjb25maWcpKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL292ZXJsYXlmcy9wYXJhbXMuaCBiL2ZzL292ZXJsYXlmcy9wYXJhbXMuaAppbmRleCBmZmQ1M2NkZDg0ODI3Yy4uMmNmOWM0ZjE4OGE5Y2IgMTAwNjQ0Ci0tLSBhL2ZzL292ZXJsYXlmcy9wYXJhbXMuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9vdmVybGF5ZnMvcGFyYW1zLmgKQEAgLTQwLDUgJiM0Mzs0MCw1IEBAIGludCBvdmxfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYyk7CiB2b2lkIG92bF9mcmVlX2ZzKHN0cnVjdCBvdmxfZnMgKm9mcyk7CiBpbnQgb3ZsX2ZzX3BhcmFtc192ZXJpZnkoY29uc3Qgc3RydWN0IG92bF9mc19jb250ZXh0ICpjdHgsCiAJCQkgc3RydWN0IG92bF9jb25maWcgKmNvbmZpZyk7Ci1pbnQgb3ZsX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CiYjNDM7aW50IG92bF9nZXRfb3B0aW9ucyhzdHJ1Y3Qgc2Jfb3B0X2N0eCAqY3R4LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwogY29uc3QgY2hhciAqb3ZsX3hpbm9fbW9kZShzdHJ1Y3Qgb3ZsX2NvbmZpZyAqY29uZmlnKTsKZGlmZiAtLWdpdCBhL2ZzL292ZXJsYXlmcy9zdXBlci5jIGIvZnMvb3ZlcmxheWZzL3N1cGVyLmMKaW5kZXggNjBmMGI3Y2VlZjBhNmQuLjRiNTdiMmRiMDg1MjI1IDEwMDY0NAotLS0gYS9mcy9vdmVybGF5ZnMvc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9vdmVybGF5ZnMvc3VwZXIuYwpAQCAtMzAyLDcgJiM0MzszMDIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgb3ZsX3N1cGVyX29wZXJhdGlvbnMgPSB7CiAJLnB1dF9zdXBlcgk9IG92bF9wdXRfc3VwZXIsCiAJLnN5bmNfZnMJPSBvdmxfc3luY19mcywKIAkuc3RhdGZzCQk9IG92bF9zdGF0ZnMsCi0JLnNob3dfb3B0aW9ucwk9IG92bF9zaG93X29wdGlvbnMsCiYjNDM7CS5nZXRfb3B0aW9ucwk9IG92bF9nZXRfb3B0aW9ucywKIH07CiAKICNkZWZpbmUgT1ZMX1dPUktESVJfTkFNRSAmIzM0O3dvcmsmIzM0OwpAQCAtNTI5LDYgJiM0Mzs1MjksNyBAQCBzdGF0aWMgaW50IG92bF9nZXRfdXBwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IG92bF9mcyAqb2ZzLAogCiAJLyogRG9uJiMzOTt0IGluaGVyaXQgYXRpbWUgZmxhZ3MgKi8KIAl1cHBlcl9tbnQtJmd0O21udF9mbGFncyAmYW1wOz0gfihNTlRfTk9BVElNRSB8IE1OVF9OT0RJUkFUSU1FIHwgTU5UX1JFTEFUSU1FKTsKJiM0MzsJdXBwZXJfbW50LSZndDttbnRfZmxhZ3MgfD0gTU5UX0NMT05BQkxFOwogCXVwcGVyX2xheWVyLSZndDttbnQgPSB1cHBlcl9tbnQ7CiAJdXBwZXJfbGF5ZXItJmd0O2lkeCA9IDA7CiAJdXBwZXJfbGF5ZXItJmd0O2ZzaWQgPSAwOwpAQCAtMTEwNSw3ICYjNDM7MTEwNiw3IEBAIHN0YXRpYyBpbnQgb3ZsX2dldF9sYXllcnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IG92bF9mcyAqb2ZzLAogCQkgKiBNYWtlIGxvd2VyIGxheWVycyBSL08uICBUaGF0IHdheSBmY2htb2QvZmNob3duIG9uIGxvd2VyIGZpbGUKIAkJICogd2lsbCBmYWlsIGluc3RlYWQgb2YgbW9kaWZ5aW5nIGxvd2VyIGZzLgogCQkgKi8KLQkJbW50LSZndDttbnRfZmxhZ3MgfD0gTU5UX1JFQURPTkxZIHwgTU5UX05PQVRJTUU7CiYjNDM7CQltbnQtJmd0O21udF9mbGFncyB8PSBNTlRfUkVBRE9OTFkgfCBNTlRfTk9BVElNRSB8IE1OVF9DTE9OQUJMRTsKIAogCQlsYXllcnNbb2ZzLSZndDtudW1sYXllcl0udHJhcCA9IHRyYXA7CiAJCWxheWVyc1tvZnMtJmd0O251bWxheWVyXS5tbnQgPSBtbnQ7CmRpZmYgLS1naXQgYS9mcy9waWRmcy5jIGIvZnMvcGlkZnMuYwppbmRleCBhYWE2MDlkZGFiMDQ0My4uMzg0M2FjZDY1OTRkZTAgMTAwNjQ0Ci0tLSBhL2ZzL3BpZGZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvcGlkZnMuYwpAQCAtODQwLDcgJiM0Mzs4NDAsNyBAQCBzdGF0aWMgY2hhciAqcGlkZnNfZG5hbWUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpidWZmZXIsIGludCBidWZsZW4pCiAJcmV0dXJuIGR5bmFtaWNfZG5hbWUoYnVmZmVyLCBidWZsZW4sICYjMzQ7YW5vbl9pbm9kZTpbcGlkZmRdJiMzNDspOwogfQogCi1jb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgcGlkZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBwaWRmc19kZW50cnlfb3BlcmF0aW9ucyA9IHsKIAkuZF9kbmFtZQk9IHBpZGZzX2RuYW1lLAogCS5kX3BydW5lCT0gc3Rhc2hlZF9kZW50cnlfcHJ1bmUsCiB9OwpAQCAtMTE1MSw2ICYjNDM7MTE1MSw4IEBAIHZvaWQgX19pbml0IHBpZGZzX2luaXQodm9pZCkKIAlpZiAoSVNfRVJSKHBpZGZzX21udCkpCiAJCXBhbmljKCYjMzQ7RmFpbGVkIHRvIG1vdW50IHBpZGZzIHBzZXVkbyBmaWxlc3lzdGVtJiMzNDspOwogCiYjNDM7CXBpZGZzX21udC0mZ3Q7bW50X2ZsYWdzIHw9IE1OVF9DTE9OQUJMRTsKJiM0MzsKIAlwaWRmc19yb290X3BhdGgubW50ID0gcGlkZnNfbW50OwogCXBpZGZzX3Jvb3RfcGF0aC5kZW50cnkgPSBwaWRmc19tbnQtJmd0O21udF9yb290OwogfQpkaWZmIC0tZ2l0IGEvZnMvcHJvY19uYW1lc3BhY2UuYyBiL2ZzL3Byb2NfbmFtZXNwYWNlLmMKaW5kZXggNWM1NTVkYjY4YWEyMTIuLjk0YmM0YzlhYTQzZjE2IDEwMDY0NAotLS0gYS9mcy9wcm9jX25hbWVzcGFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Byb2NfbmFtZXNwYWNlLmMKQEAgLTk4LDIxICYjNDM7OTgsMjcgQEAgc3RhdGljIHZvaWQgc2hvd190eXBlKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIAl9CiB9CiAKJiM0MztzdGF0aWMgaW50IHNob3dfZGV2bmFtZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB2ZnNtb3VudCAqbW50KQomIzQzO3sKJiM0MzsJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IG1udC0mZ3Q7bW50X3NiOwomIzQzOwomIzQzOwlpZiAoc2ItJmd0O3Nfb3AtJmd0O3Nob3dfZGV2bmFtZSkKJiM0MzsJCXJldHVybiBzYi0mZ3Q7c19vcC0mZ3Q7c2hvd19kZXZuYW1lKG0sIG1udC0mZ3Q7bW50X3Jvb3QpOwomIzQzOwomIzQzOwltYW5nbGUobSwgc2ItJmd0O3NfZGV2bmFtZSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgc2hvd192ZnNtbnQoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCkKIHsKIAlzdHJ1Y3QgcHJvY19tb3VudHMgKnAgPSBtLSZndDtwcml2YXRlOwotCXN0cnVjdCBtb3VudCAqciA9IHJlYWxfbW91bnQobW50KTsKIAlzdHJ1Y3QgcGF0aCBtbnRfcGF0aCA9IHsgLmRlbnRyeSA9IG1udC0mZ3Q7bW50X3Jvb3QsIC5tbnQgPSBtbnQgfTsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gbW50X3BhdGguZGVudHJ5LSZndDtkX3NiOwogCWludCBlcnI7CiAKLQlpZiAoc2ItJmd0O3Nfb3AtJmd0O3Nob3dfZGV2bmFtZSkgewotCQllcnIgPSBzYi0mZ3Q7c19vcC0mZ3Q7c2hvd19kZXZuYW1lKG0sIG1udF9wYXRoLmRlbnRyeSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIG91dDsKLQl9IGVsc2UgewotCQltYW5nbGUobSwgci0mZ3Q7bW50X2Rldm5hbWUpOwotCX0KJiM0MzsJZXJyID0gc2hvd19kZXZuYW1lKG0sIG1udCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIG91dDsKIAlzZXFfcHV0YyhtLCAmIzM5OyAmIzM5Oyk7CiAJLyogbW91bnRwb2ludHMgb3V0c2lkZSBvZiBjaHJvb3QgamFpbCB3aWxsIGdpdmUgU0VRX1NLSVAgb24gdGhpcyAqLwogCWVyciA9IHNlcV9wYXRoX3Jvb3QobSwgJmFtcDttbnRfcGF0aCwgJmFtcDtwLSZndDtyb290LCAmIzM0OyBcdFxuXFwmIzM0Oyk7CkBAIC0xMjUsOCAmIzQzOzEzMSw3IEBAIHN0YXRpYyBpbnQgc2hvd192ZnNtbnQoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCkKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIAlzaG93X3Zmc21udF9vcHRzKG0sIG1udCk7Ci0JaWYgKHNiLSZndDtzX29wLSZndDtzaG93X29wdGlvbnMpCi0JCWVyciA9IHNiLSZndDtzX29wLSZndDtzaG93X29wdGlvbnMobSwgbW50X3BhdGguZGVudHJ5KTsKJiM0MzsJZXJyID0gbW50X3Nob3dfb3B0aW9ucyhtLCBtbnQpOwogCXNlcV9wdXRzKG0sICYjMzQ7IDAgMFxuJiMzNDspOwogb3V0OgogCXJldHVybiBlcnI7CkBAIC0xNzIsMTkgJiM0MzsxNzcsMTQgQEAgc3RhdGljIGludCBzaG93X21vdW50aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB2ZnNtb3VudCAqbW50KQogCXNlcV9wdXRzKG0sICYjMzQ7IC0gJiMzNDspOwogCXNob3dfdHlwZShtLCBzYik7CiAJc2VxX3B1dGMobSwgJiMzOTsgJiMzOTspOwotCWlmIChzYi0mZ3Q7c19vcC0mZ3Q7c2hvd19kZXZuYW1lKSB7Ci0JCWVyciA9IHNiLSZndDtzX29wLSZndDtzaG93X2Rldm5hbWUobSwgbW50LSZndDttbnRfcm9vdCk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIG91dDsKLQl9IGVsc2UgewotCQltYW5nbGUobSwgci0mZ3Q7bW50X2Rldm5hbWUpOwotCX0KJiM0MzsJZXJyID0gc2hvd19kZXZuYW1lKG0sIG1udCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIG91dDsKIAlzZXFfcHV0cyhtLCBzYl9yZG9ubHkoc2IpID8gJiMzNDsgcm8mIzM0OyA6ICYjMzQ7IHJ3JiMzNDspOwogCWVyciA9IHNob3dfc2Jfb3B0cyhtLCBzYik7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7Ci0JaWYgKHNiLSZndDtzX29wLSZndDtzaG93X29wdGlvbnMpCi0JCWVyciA9IHNiLSZndDtzX29wLSZndDtzaG93X29wdGlvbnMobSwgbW50LSZndDttbnRfcm9vdCk7CiYjNDM7CWVyciA9IG1udF9zaG93X29wdGlvbnMobSwgbW50KTsKIAlzZXFfcHV0YyhtLCAmIzM5O1xuJiMzOTspOwogb3V0OgogCXJldHVybiBlcnI7CkBAIC0xOTMsMjEgJiM0MzsxOTMsMTUgQEAgc3RhdGljIGludCBzaG93X21vdW50aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB2ZnNtb3VudCAqbW50KQogc3RhdGljIGludCBzaG93X3Zmc3N0YXQoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCkKIHsKIAlzdHJ1Y3QgcHJvY19tb3VudHMgKnAgPSBtLSZndDtwcml2YXRlOwotCXN0cnVjdCBtb3VudCAqciA9IHJlYWxfbW91bnQobW50KTsKIAlzdHJ1Y3QgcGF0aCBtbnRfcGF0aCA9IHsgLmRlbnRyeSA9IG1udC0mZ3Q7bW50X3Jvb3QsIC5tbnQgPSBtbnQgfTsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gbW50X3BhdGguZGVudHJ5LSZndDtkX3NiOwogCWludCBlcnI7CiAKIAkvKiBkZXZpY2UgKi8KIAlzZXFfcHV0cyhtLCAmIzM0O2RldmljZSAmIzM0Oyk7Ci0JaWYgKHNiLSZndDtzX29wLSZndDtzaG93X2Rldm5hbWUpIHsKLQkJZXJyID0gc2ItJmd0O3Nfb3AtJmd0O3Nob3dfZGV2bmFtZShtLCBtbnRfcGF0aC5kZW50cnkpOwotCQlpZiAoZXJyKQotCQkJZ290byBvdXQ7Ci0JfSBlbHNlIHsKLQkJbWFuZ2xlKG0sIHItJmd0O21udF9kZXZuYW1lKTsKLQl9Ci0KJiM0MzsJZXJyID0gc2hvd19kZXZuYW1lKG0sIG1udCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIG91dDsKIAkvKiBtb3VudCBwb2ludCAqLwogCXNlcV9wdXRzKG0sICYjMzQ7IG1vdW50ZWQgb24gJiMzNDspOwogCS8qIG1vdW50cG9pbnRzIG91dHNpZGUgb2YgY2hyb290IGphaWwgd2lsbCBnaXZlIFNFUV9TS0lQIG9uIHRoaXMgKi8KZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jCmluZGV4IGE4ZmQ2MTEzNmFhZmU1Li5lNTUzMWNiODhmODkxNyAxMDA2NDQKLS0tIGEvZnMvc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9zdXBlci5jCkBAIC0yODAsNiAmIzQzOzI4MCw3IEBAIHN0YXRpYyB2b2lkIGRlc3Ryb3lfc3VwZXJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJc2VjdXJpdHlfc2JfZnJlZShzKTsKIAlwdXRfdXNlcl9ucyhzLSZndDtzX3VzZXJfbnMpOwogCWtmcmVlKHMtJmd0O3Nfc3VidHlwZSk7CiYjNDM7CWtmcmVlX2NvbnN0KHMtJmd0O3NfZGV2bmFtZSk7CiAJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBTQl9GUkVFWkVfTEVWRUxTOyBpJiM0MzsmIzQzOykKIAkJcGVyY3B1X2ZyZWVfcndzZW0oJmFtcDtzLSZndDtzX3dyaXRlcnMucndfc2VtW2ldKTsKIAlrZnJlZShzKTsKQEAgLTMxNSw3ICYjNDM7MzE2LDcgQEAgc3RhdGljIHZvaWQgZGVzdHJveV91bnVzZWRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzKQogICoJcmV0dXJucyBhIHBvaW50ZXIgbmV3IHN1cGVyYmxvY2sgb3IgJU5VTEwgaWYgYWxsb2NhdGlvbiBoYWQgZmFpbGVkLgogICovCiBzdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICphbGxvY19zdXBlcihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSwgaW50IGZsYWdzLAotCQkJCSAgICAgICBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMpCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzID0ga3phbGxvY19vYmooc3RydWN0IHN1cGVyX2Jsb2NrKTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZGVmYXVsdF9vcDsKQEAgLTM0NCw2ICYjNDM7MzQ1LDEzIEBAIHN0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmFsbG9jX3N1cGVyKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlLCBpbnQgZmxhZ3MsCiAJICovCiAJZG93bl93cml0ZV9uZXN0ZWQoJmFtcDtzLSZndDtzX3Vtb3VudCwgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwogCiYjNDM7CWlmIChuYW1lKQomIzQzOwkJcy0mZ3Q7c19kZXZuYW1lID0ga3N0cmR1cF9jb25zdChuYW1lLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwomIzQzOwllbHNlCiYjNDM7CQlzLSZndDtzX2Rldm5hbWUgPSAmIzM0O25vbmUmIzM0OzsKJiM0MzsJaWYgKCFzLSZndDtzX2Rldm5hbWUpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiAJaWYgKHNlY3VyaXR5X3NiX2FsbG9jKHMpKQogCQlnb3RvIGZhaWw7CiAKQEAgLTc2Myw3ICYjNDM7NzcxLDcgQEAgc3RydWN0IHN1cGVyX2Jsb2NrICpzZ2V0X2ZjKHN0cnVjdCBmc19jb250ZXh0ICpmYywKIAl9CiAJaWYgKCFzKSB7CiAJCXNwaW5fdW5sb2NrKCZhbXA7c2JfbG9jayk7Ci0JCXMgPSBhbGxvY19zdXBlcihmYy0mZ3Q7ZnNfdHlwZSwgZmMtJmd0O3NiX2ZsYWdzLCB1c2VyX25zKTsKJiM0MzsJCXMgPSBhbGxvY19zdXBlcihmYy0mZ3Q7ZnNfdHlwZSwgZmMtJmd0O3NiX2ZsYWdzLCB1c2VyX25zLCBmYy0mZ3Q7c291cmNlKTsKIAkJaWYgKCFzKQogCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJCWdvdG8gcmV0cnk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZjbnRsLmggYi9pbmNsdWRlL2xpbnV4L2ZjbnRsLmgKaW5kZXggNmFkNmI5ZTdhMjI2YWYuLmY5NDI0MTFjOGVkN2RlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZjbnRsLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mY250bC5oCkBAIC0xMSw3ICYjNDM7MTEsNyBAQAogCShPX1JET05MWSB8IE9fV1JPTkxZIHwgT19SRFdSIHwgT19DUkVBVCB8IE9fRVhDTCB8IE9fTk9DVFRZIHwgT19UUlVOQyB8IFwKIAkgT19BUFBFTkQgfCBPX05ERUxBWSB8IE9fTk9OQkxPQ0sgfCBfX09fU1lOQyB8IE9fRFNZTkMgfCBcCiAJIEZBU1lOQwl8IE9fRElSRUNUIHwgT19MQVJHRUZJTEUgfCBPX0RJUkVDVE9SWSB8IE9fTk9GT0xMT1cgfCBcCi0JIE9fTk9BVElNRSB8IE9fQ0xPRVhFQyB8IE9fUEFUSCB8IF9fT19UTVBGSUxFIHwgT19FTVBUWVBBVEgpCiYjNDM7CSBPX05PQVRJTUUgfCBPX0NMT0VYRUMgfCBPX1BBVEggfCBfX09fVE1QRklMRSB8IE9fRU1QVFlQQVRIIHwgT19BTFQpCiAKIC8qIExpc3Qgb2YgYWxsIHZhbGlkIGZsYWdzIGZvciBvcGVuYXQyKDIpJiMzOTtzIGhvdy0mZ3Q7ZmxhZ3MgYXJndW1lbnQuICovCiAjZGVmaW5lIFZBTElEX09QRU5BVDJfRkxBR1MJKFZBTElEX09QRU5fRkxBR1MgfCBPUEVOQVQyX1JFR1VMQVIpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyLmggYi9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyLmgKaW5kZXggNDA1NjEyNjc4MTE1MWUuLjZmMGQ3Nzg5NDBmOTA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mcy9zdXBlci5oCkBAIC0yMzcsNCAmIzQzOzIzNywxNCBAQCBpbnQgdGhhd19zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnN1cGVyLCBlbnVtIGZyZWV6ZV9ob2xkZXIgd2hvLAogCiBpbnQgc2JfaW5pdF9kaW9fZG9uZV93cShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIAomIzQzO3N0cnVjdCBzYl9vcHRfY3R4IHsKJiM0MzsJdm9pZCAoKmFjdG9yKShzdHJ1Y3Qgc2Jfb3B0X2N0eCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSwKJiM0MzsJCSAgICAgIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKTsKJiM0MzsJdm9pZCAqZGF0YTsKJiM0Mzt9OwomIzQzOwomIzQzO3ZvaWQgc2JfYWRkX29wdGlvbihzdHJ1Y3Qgc2Jfb3B0X2N0eCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSk7CiYjNDM7dm9pZCBzYl9hZGRfb3B0aW9uX3BhdGgoc3RydWN0IHNiX29wdF9jdHggKmN0eCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUsCiYjNDM7CQkJY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpOwomIzQzOwogI2VuZGlmIC8qIF9MSU5VWF9GU19TVVBFUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyX3R5cGVzLmgKaW5kZXggZWY3OTQxZTlkYzc5YWMuLmYyMDU3NTlhZjFhNjMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyX3R5cGVzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mcy9zdXBlcl90eXBlcy5oCkBAIC0zNiw2ICYjNDM7MzYsNyBAQCBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdDsKIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbDsKIHN0cnVjdCB4YXR0cl9oYW5kbGVyOwogc3RydWN0IGZzZXJyb3JfZXZlbnQ7CiYjNDM7c3RydWN0IHNiX29wdF9jdHg7CiAKIGV4dGVybiBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmJsb2NrZGV2X3N1cGVyYmxvY2s7CiAKQEAgLTk5LDYgJiM0MzsxMDAsNyBAQCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyB7CiAJaW50ICgqc3RhdGZzKShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICprc3RhdGZzKTsKIAl2b2lkICgqdW1vdW50X2JlZ2luKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIAomIzQzOwlpbnQgKCpnZXRfb3B0aW9ucykoc3RydWN0IHNiX29wdF9jdHggKmN0eCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKIAlpbnQgKCpzaG93X29wdGlvbnMpKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwogCWludCAoKnNob3dfZGV2bmFtZSkoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CiAJaW50ICgqc2hvd19wYXRoKShzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKQEAgLTI4Myw2ICYjNDM7Mjg1LDggQEAgc3RydWN0IHN1cGVyX2Jsb2NrIHsKIAkgKi8KIAlhdG9taWNfdAkJCQlzX2lzd19ucl9pbl9mbGlnaHQ7CiAjZW5kaWYKJiM0MzsJLyogTmFtZSBvZiBkZXZpY2UgZS5nLiAvZGV2L2Rzay9oZGExICovCiYjNDM7CWNvbnN0IGNoYXIgCQkJCSpzX2Rldm5hbWU7CiB9IF9fcmFuZG9taXplX2xheW91dDsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW91bnQuaCBiL2luY2x1ZGUvbGludXgvbW91bnQuaAppbmRleCBhY2ZlN2VmODZhMWIzZi4uZDA3MTg1NWNhNGVkZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW91bnQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21vdW50LmgKQEAgLTQ0LDYgJiM0Mzs0NCw3IEBAIGVudW0gbW91bnRfZmxhZ3MgewogCU1OVF9MT0NLRUQJCT0gMHg4MDAwMDAsCiAJTU5UX0RPT01FRAkJPSAweDEwMDAwMDAsCiAJTU5UX1NZTkNfVU1PVU5UCQk9IDB4MjAwMDAwMCwKJiM0MzsJTU5UX0NMT05BQkxFCQk9IDB4NDAwMDAwMCwKIAlNTlRfVU1PVU5UCQk9IDB4ODAwMDAwMCwKIAogCU1OVF9VU0VSX1NFVFRBQkxFX01BU0sgID0gTU5UX05PU1VJRCB8IE1OVF9OT0RFViB8IE1OVF9OT0VYRUMKQEAgLTUyLDcgJiM0Mzs1Myw3IEBAIGVudW0gbW91bnRfZmxhZ3MgewogCU1OVF9BVElNRV9NQVNLID0gTU5UX05PQVRJTUUgfCBNTlRfTk9ESVJBVElNRSB8IE1OVF9SRUxBVElNRSwKIAogCU1OVF9JTlRFUk5BTF9GTEFHUyA9IE1OVF9JTlRFUk5BTCB8IE1OVF9ET09NRUQgfAotCQkJICAgICBNTlRfU1lOQ19VTU9VTlQgfCBNTlRfTE9DS0VECiYjNDM7CQkJICAgICBNTlRfU1lOQ19VTU9VTlQgfCBNTlRfTE9DS0VEIHwgTU5UX0NMT05BQkxFCiB9OwogCiBzdHJ1Y3QgdmZzbW91bnQgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uYW1laS5oIGIvaW5jbHVkZS9saW51eC9uYW1laS5oCmluZGV4IGViZTZlMjlmN2U5M2JhLi5jMjFkYzY1MzY5MDBjZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uYW1laS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmFtZWkuaApAQCAtMjUsNyAmIzQzOzI1LDggQEAgZW51bSB7IE1BWF9ORVNURURfTElOS1MgPSA4IH07CiAjZGVmaW5lIExPT0tVUF9SQ1UJCUJJVCg4KQkvKiBSQ1UgcGF0aHdhbGsgbW9kZTsgc2VtaS1pbnRlcm5hbCAqLwogI2RlZmluZSBMT09LVVBfQ0FDSEVECQlCSVQoOSkgLyogT25seSBkbyBjYWNoZWQgbG9va3VwICovCiAjZGVmaW5lIExPT0tVUF9QQVJFTlQJCUJJVCgxMCkJLyogTG9va2luZyB1cCBmaW5hbCBwYXJlbnQgaW4gcGF0aCAqLwotLyogNSBzcGFyZSBiaXRzIGZvciBwYXRod2FsayAqLwomIzQzOyNkZWZpbmUgTE9PS1VQX0FMVAkJQklUKDExKSAvKiBMb29rIHVwIGluIGFsdGVybmF0aXZlIG5hbWVzcGFjZSAqLwomIzQzOy8qIDQgc3BhcmUgYml0cyBmb3IgcGF0aHdhbGsgKi8KIAogLyogVGhlc2UgdGVsbCBmaWxlc3lzdGVtIG1ldGhvZHMgdGhhdCB3ZSBhcmUgZGVhbGluZyB3aXRoIHRoZSBmaW5hbCBjb21wb25lbnQuLi4gKi8KICNkZWZpbmUgTE9PS1VQX09QRU4JCUJJVCgxNikJLyogLi4uIGluIG9wZW4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGlkZnMuaCBiL2luY2x1ZGUvbGludXgvcGlkZnMuaAppbmRleCAwYWJmN2RhOWFiMjM2ZS4uZmFiNmY0OGZmMjAzMzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGlkZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BpZGZzLmgKQEAgLTE1LDcgJiM0MzsxNSw2IEBAIHZvaWQgcGlkZnNfZXhpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CiAjaWZkZWYgQ09ORklHX0NPUkVEVU1QCiB2b2lkIHBpZGZzX2NvcmVkdW1wKGNvbnN0IHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pOwogI2VuZGlmCi1leHRlcm4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHBpZGZzX2RlbnRyeV9vcGVyYXRpb25zOwogaW50IHBpZGZzX3JlZ2lzdGVyX3BpZF9nZnAoc3RydWN0IHBpZCAqcGlkLCBnZnBfdCBnZnApOwogCiAvKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9mY250bC5oIGIvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL2ZjbnRsLmgKaW5kZXggODgzY2ZkN2RlMmVmZmEuLjcwZGJiYWMxYzUyMDc4IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvZmNudGwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvZmNudGwuaApAQCAtOTYsNiAmIzQzOzk2LDEwIEBACiAjZGVmaW5lIE9fRU1QVFlQQVRICSgxICZsdDsmbHQ7IDI2KQkvKiBhbGxvdyBlbXB0eSBwYXRoICovCiAjZW5kaWYKIAomIzQzOyNpZm5kZWYgT19BTFQKJiM0MzsjZGVmaW5lIE9fQUxUCQkoMSAmbHQ7Jmx0OyAyNykJLyogT3BlbiBpbiBhbHRlcm5hdGl2ZSBuYW1lc3BhY2UgKi8KJiM0MzsjZW5kaWYKJiM0MzsKIC8qIGEgaG9ycmlkIGtsdWRnZSB0cnlpbmcgdG8gbWFrZSBzdXJlIHRoYXQgdGhpcyB3aWxsIGZhaWwgb24gb2xkIGtlcm5lbHMgKi8KICNkZWZpbmUgT19UTVBGSUxFIChfX09fVE1QRklMRSB8IE9fRElSRUNUT1JZKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbW91bnQuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9tb3VudC5oCmluZGV4IDIyMDQ3MDhkYmY3YTU4Li42ZTc5NGQyMTRjZjk4MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L21vdW50LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L21vdW50LmgKQEAgLTYzLDYgJiM0Mzs2Myw3IEBACiAgKi8KICNkZWZpbmUgT1BFTl9UUkVFX0NMT05FCQkoMSAmbHQ7Jmx0OyAwKQkvKiBDbG9uZSB0aGUgdGFyZ2V0IHRyZWUgYW5kIGF0dGFjaCB0aGUgY2xvbmUgKi8KICNkZWZpbmUgT1BFTl9UUkVFX05BTUVTUEFDRQkoMSAmbHQ7Jmx0OyAxKQkvKiBDbG9uZSB0aGUgdGFyZ2V0IHRyZWUgaW50byBhIG5ldyBtb3VudCBuYW1lc3BhY2UgKi8KJiM0MzsjZGVmaW5lIE9QRU5fVFJFRV9BTFQJCSgxICZsdDsmbHQ7IDIpCS8qIExvb2t1cCBpbiBhbHRlcm5hdGl2ZSBuYW1lc3BhY2UgKi8KICNkZWZpbmUgT1BFTl9UUkVFX0NMT0VYRUMJT19DTE9FWEVDCS8qIENsb3NlIHRoZSBmaWxlIG9uIGV4ZWN2ZSgpICovCiAKIC8qCmRpZmYgLS1naXQgYS9zY3JpcHRzL2dkYi9saW51eC9wcm9jLnB5IGIvc2NyaXB0cy9nZGIvbGludXgvcHJvYy5weQppbmRleCA2NWRkMWJkMTI5NjQxZC4uNWFhZjJkZDhkYjA1YTEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvZ2RiL2xpbnV4L3Byb2MucHkKJiM0MzsmIzQzOyYjNDM7IGIvc2NyaXB0cy9nZGIvbGludXgvcHJvYy5weQpAQCAtMTc0LDkgJiM0MzsxNzQsNiBAQCB2YWx1ZXMgb2YgdGhhdCBwcm9jZXNzIG5hbWVzcGFjZSYjMzQ7JiMzNDsmIzM0OwogICAgICAgICAgICAgICAgICAgJiMzNDttb3VudCYjMzQ7LCAmIzM0O3N1cGVyX2Jsb2NrJiMzNDssICYjMzQ7ZGV2bmFtZSYjMzQ7LCAmIzM0O3BhdGhuYW1lJiMzNDssICYjMzQ7ZnN0eXBlJiMzNDspKQogCiAgICAgICAgIGZvciBtbnQgaW4gcmJ0cmVlLnJiX2lub3JkZXJfZm9yX2VhY2hfZW50cnkobmFtZXNwYWNlWyYjMzk7bW91bnRzJiMzOTtdLCBtb3VudF9wdHJfdHlwZSwgJiMzNDttbnRfbm9kZSYjMzQ7KToKLSAgICAgICAgICAgIGRldm5hbWUgPSBtbnRbJiMzOTttbnRfZGV2bmFtZSYjMzk7XS5zdHJpbmcoKQotICAgICAgICAgICAgZGV2bmFtZSA9IGRldm5hbWUgaWYgZGV2bmFtZSBlbHNlICYjMzQ7bm9uZSYjMzQ7Ci0KICAgICAgICAgICAgIHBhdGhuYW1lID0gJiMzNDsmIzM0OwogICAgICAgICAgICAgcGFyZW50ID0gbW50CiAgICAgICAgICAgICB3aGlsZSBUcnVlOgpAQCAtMTkwLDYgJiM0MzsxODcsOCBAQCB2YWx1ZXMgb2YgdGhhdCBwcm9jZXNzIG5hbWVzcGFjZSYjMzQ7JiMzNDsmIzM0OwogICAgICAgICAgICAgICAgIHBhdGhuYW1lID0gJiMzNDsvJiMzNDsKIAogICAgICAgICAgICAgc3VwZXJibG9jayA9IG1udFsmIzM5O21udCYjMzk7XVsmIzM5O21udF9zYiYjMzk7XQomIzQzOyAgICAgICAgICAgIGRldm5hbWUgPSBzdXBlcmJsb2NrWyYjMzk7c19kZXZuYW1lJiMzOTtdLnN0cmluZygpCiYjNDM7ICAgICAgICAgICAgZGV2bmFtZSA9IGRldm5hbWUgaWYgZGV2bmFtZSBlbHNlICYjMzQ7bm9uZSYjMzQ7CiAgICAgICAgICAgICBmc3R5cGUgPSBzdXBlcmJsb2NrWyYjMzk7c190eXBlJiMzOTtdWyYjMzk7bmFtZSYjMzk7XS5zdHJpbmcoKQogICAgICAgICAgICAgc19mbGFncyA9IGludChzdXBlcmJsb2NrWyYjMzk7c19mbGFncyYjMzk7XSkKICAgICAgICAgICAgIG1fZmxhZ3MgPSBpbnQobW50WyYjMzk7bW50JiMzOTtdWyYjMzk7bW50X2ZsYWdzJiMzOTtdKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAxNjowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDAzNQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEzNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW5pdGlhbCBBc3Nlc3NtZW50IGFuZCBTeW1ib2wgSWRlbnRpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzLiBJdCBzZWVtcyB3ZSYjMzk7dmUgZ290IGEgcHJldHR5IHN1YnN0YW50aWFsIHNldCBvZiBjaGFuZ2VzIGhlcmUg4oCTIGEgd2hvbGUgbmV3IHZpcnR1YWwgZmlsZXN5c3RlbSBjYWxsZWQgYG1ldGFmc2AgaXMgYmVpbmcgaW50cm9kdWNlZCwgYWxvbmcgd2l0aCBzb21lIG1vZGlmaWNhdGlvbnMgdG8gdGhlIFZGUyBsYXllciB0byBzdXBwb3J0IGFuIGBPX0FMVGAgZmxhZy4gVGhpcyBmbGFnIGlzIGZvciBhbHRlcm5hdGl2ZSBuYW1lc3BhY2UgbG9va3Vwcy4gVGhleSYjMzk7dmUgYWxzbyByZWppZ2dlcmVkIGhvdyBtb3VudCBkZXZpY2UgbmFtZXMgYXJlIHN0b3JlZCwgbW92aW5nIHRoZW0gZnJvbSBgc3RydWN0IG1vdW50YCB0byBgc3RydWN0IHN1cGVyX2Jsb2NrYCwgYW5kIGFkZGVkIGEgYGdldF9vcHRpb25zYCB0byBgc3VwZXJfb3BlcmF0aW9uc2AsIHdoaWNoIGlzIHJlcGxhY2luZyBgc2hvd19vcHRpb25zYC4KCkZpcnN0IHRoaW5nJiMzOTtzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMuIEkmIzM5O20gZ29pbmcgdGhyb3VnaCB0aGUgZmlsZXMsIGFuZCBpdCBsb29rcyBsaWtlOgoKKiAgIFdlIGhhdmUgYSBuZXcgZmlsZXN5c3RlbSBiZWluZyBidWlsdCAoYG1ldGFmc2ApLgoqICAgVGhlIFZGUyBsYXllciBpcyBiZWluZyB0d2Vha2VkIGZvciB0aGUgYE9fQUxUYCBmbGFnLgoqICAgTW91bnQgaW5mb3JtYXRpb24gaGFzIGJlZW4gbW92ZWQuCiogICBOZXcgYGdldF9vcHRpb25zYCBmdW5jdGlvbi4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHdoYXQgdGhlIGNvcmUgcGFydHMgb2YgdGhlc2UgY2hhbmdlcyBhcmUuCgpGcm9tIGEgcXVpY2sgc2NhbiBvZiB0aGUgY29kZSBjaGFuZ2VzLCBgbWV0YWZzYCBsb29rcyB0byBiZSB0aGUgYmlnLCBuZXcgdGhpbmcsIGFuZCB3aWxsIGxpa2VseSBuZWVkIGZ1enppbmcuIFNwZWNpZmljYWxseSwgYG1ldGFmc19pbml0X2ZzX2NvbnRleHRgLCBgbWV0YWZzX2NvbGxlY3Rfb3B0aW9uYCwgYG1ldGFmc19nZXRfb3B0aW9uX3ZhbHVlc2AsIGBtZXRhZnNfZ2V0X2xpbmtgLCBgbWV0YWZzX3JlYWRsaW5rYCwgYG1ldGFmc19kX3JlbGVhc2VgLCBgbWV0YWZzX2dldF9pbm9kZWAsIGBtZXRhZnNfcm9vdF9sb29rdXBgLCBgbWV0YWZzX21vdW50X2xvb2t1cGAsIGBtZXRhZnNfb3B0aW9uc19sb29rdXBgLCBgbWV0YWZzX29wdGlvbl92YWx1ZXNfbG9va3VwYCwgYG1ldGFmc19nZXRfYmFzZV9maWxlYCwgYG1ldGFmc19jcmVhdGVfcm9vdGAsIGFuZCBgbWV0YWZzX2dldF9yb290YCBhcmUgdGhlIGZ1bmN0aW9ucyBvZiB0aGlzIGZpbGVzeXN0ZW0gdG8gZm9jdXMgb24uCgpBbHNvLCBJIGhhdmUgdG8gYmUgYXdhcmUgb2YgdGhlIGBwYXRoX2luaXRgIGluIGBmcy9uYW1laS5jYCwgYW5kIHRoZSBgYnVpbGRfb3Blbl9mbGFnc2AgaW4gYGZzL29wZW4uY2AuIFRoZXNlIGFyZSBib3RoIGhvdCBwYXRocyBhbmQgY291bGQgcHJlc2VudCBvcHBvcnR1bml0aWVzIGZvciBleHBsb2l0YXRpb24uCgpUaGVyZSBhcmUgYWxzbyBhIGJ1bmNoIG9mIG90aGVyIGNoYW5nZXMgdGhhdCBzaG91bGQgYmUgdmVyaWZpZWQ6IGBtbnRfc2hvd19vcHRpb25zYCwgYHNiX2FkZF9vcHRpb25gLCBgc2JfYWRkX29wdGlvbl9wYXRoYCwgYG92bF9nZXRfb3B0aW9uc2AsIGFuZCBgZXJvZnNfZ2V0X29wdGlvbnNgLgoKKipGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIGBtZXRhZnNgIGlzIGJ1aWx0LWluLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gU28sIGZ1enppbmcgYG9wZW5hdDJgIG9yIGBvcGVuYCB3aXRoIHRoZSBuZXcgYE9fQUxUYCBmbGFnIHdpbGwgdHJpZ2dlciB0aGUgYG1ldGFmc19nZXRfcm9vdGAgZnVuY3Rpb24sIHNvIEkmIzM5O2xsIHdhbnQgdG8gZm9jdXMgb24gdGhhdC4gQWxzbywgdGhlIHNhbWUgaXMgdHJ1ZSBmb3IgYG9wZW5fdHJlZWAgdXNpbmcgYE9QRU5fVFJFRV9BTFRgLgoKU28gdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24gZm9yIGZ1enppbmc6CgoqICAgYG1ldGFmc19nZXRfcm9vdGAKKiAgIGBtZXRhZnNfY3JlYXRlX3Jvb3RgCiogICBgbWV0YWZzX3Jvb3RfbG9va3VwYAoqICAgYG1ldGFmc19tb3VudF9sb29rdXBgCiogICBgbWV0YWZzX29wdGlvbnNfbG9va3VwYAoqICAgYG1ldGFmc19vcHRpb25fdmFsdWVzX2xvb2t1cGAKKiAgIGBtZXRhZnNfZ2V0X29wdGlvbl92YWx1ZXNgCiogICBgbWV0YWZzX2dldF9saW5rYAoqICAgYG1ldGFmc19yZWFkbGlua2AKKiAgIGBtbnRfc2hvd19vcHRpb25zYAoqICAgYHNiX2FkZF9vcHRpb25gCiogICBgc2JfYWRkX29wdGlvbl9wYXRoYAoqICAgYG92bF9nZXRfb3B0aW9uc2AKKiAgIGBlcm9mc19nZXRfb3B0aW9uc2AKCkkgc2hvdWxkIHNjYW4gYGZzL21ldGFmcy9tZXRhZnMuY2AgYSBiaXQgY2xvc2VyIGFuZCBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IHBvdGVudGlhbCB0YXJnZXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDE2OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15zdGF0aWMuKiBtZXRhZnNfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbWV0YWZzL21ldGFmcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL21ldGFmcy9tZXRhZnMuYz0yND1zdGF0aWMgc3RydWN0IHZmc21vdW50ICptZXRhZnNfbW50IF9fcm9fYWZ0ZXJfaW5pdDtcbmZzL21ldGFmcy9tZXRhZnMuYy0yNS1cbmZzL21ldGFmcy9tZXRhZnMuYzoyNjpzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgbWV0YWZzX29wcyA9IHtcbmZzL21ldGFmcy9tZXRhZnMuYy0yNy1cdC5zdGF0ZnNcdFx0PSBzaW1wbGVfc3RhdGZzLFxuLS1cbmZzL21ldGFmcy9tZXRhZnMuYy0zMC1cbmZzL21ldGFmcy9tZXRhZnMuYzozMTpzdGF0aWMgaW50IG1ldGFmc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvbWV0YWZzL21ldGFmcy5jLTMyLXtcbi0tXG5mcy9tZXRhZnMvbWV0YWZzLmMtMzktXG5mcy9tZXRhZnMvbWV0YWZzLmM6NDA6c3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIG1ldGFmc190eXBlID0ge1xuZnMvbWV0YWZzL21ldGFmcy5jLTQxLVx0Lm5hbWUgPSBcJiMzNDttZXRhZnNcJiMzNDssXG4tLVxuZnMvbWV0YWZzL21ldGFmcy5jPTc0PXN0cnVjdCBtZXRhZnNfY29sbGVjdF9jdHgge1xuLS1cbmZzL21ldGFmcy9tZXRhZnMuYy04Ny0gKi9cbmZzL21ldGFmcy9tZXRhZnMuYzo4ODpzdGF0aWMgdm9pZCBtZXRhZnNfY29sbGVjdF9vcHRpb24oc3RydWN0IHNiX29wdF9jdHggKmN0eCwgY29uc3QgY2hhciAqbmFtZSxcbmZzL21ldGFmcy9tZXRhZnMuYy04OS1cdFx0XHRcdCAgY29uc3QgY2hhciAqdmFsdWUsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKVxuLS1cbmZzL21ldGFmcy9tZXRhZnMuYy0xMjgtXG5mcy9tZXRhZnMvbWV0YWZzLmM6MTI5OnN0YXRpYyB2b2lkIG1ldGFmc19mcmVlX2VudHJpZXMoc3RydWN0IG1ldGFmc19vcHRpb25fZW50cnkgKmVudHJpZXMsIGludCBjb3VudClcbmZzL21ldGFmcy9tZXRhZnMuYy0xMzAte1xuLS1cbmZzL21ldGFmcy9tZXRhZnMuYy0xNDAtXG5mcy9tZXRhZnMvbWV0YWZzLmM6MTQxOnN0YXRpYyBpbnQgbWV0YWZzX2dldF9vcHRpb25fdmFsdWVzKHN0cnVjdCBmaWxlICpiYXNlLCBjb25zdCBjaGFyICpvcHRpb25fbmFtZSxcbmZzL21ldGFmcy9tZXRhZnMuYy0xNDItXHRcdFx0XHQgICAgc3RydWN0IG1ldGFmc19vcHRpb25fZW50cnkgKiplbnRyaWVzX291dCxcbi0tXG5mcy9tZXRhZnMvbWV0YWZzLmM9MTg3PXN0YXRpYyBjb25zdCBjaGFyICptZXRhZnNfZ2V0X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL21ldGFmcy9tZXRhZnMuYy0yMDYtXG5mcy9tZXRhZnMvbWV0YWZzLmM6MjA3OnN0YXRpYyBpbnQgbWV0YWZzX3JlYWRsaW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbmZzL21ldGFmcy9tZXRhZnMuYy0yMDgtXHRcdFx0ICAgaW50IGJ1Zmxlbilcbi0tXG5mcy9tZXRhZnMvbWV0YWZzLmMtMjE4LVxuZnMvbWV0YWZzL21ldGFmcy5jOjIxOTpzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWV0YWZzX3N5bWxpbmtfaW9wcyA9IHtcbmZzL21ldGFmcy9tZXRhZnMuYy0yMjAtXHQuZ2V0X2xpbmtcdD0gbWV0YWZzX2dldF9saW5rLFxuLS1cbmZzL21ldGFmcy9tZXRhZnMuYy0yMjYtICovXG5mcy9tZXRhZnMvbWV0YWZzLmM6MjI3OnN0YXRpYyB2b2lkIG1ldGFmc19kX3JlbGVhc2Uoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuZnMvbWV0YWZzL21ldGFmcy5jLTIyOC17XG4tLVxuZnMvbWV0YWZzL21ldGFmcy5jLTI1Mi1cbmZzL21ldGFmcy9tZXRhZnMuYzoyNTM6c3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBtZXRhZnNfZGVudHJ5X29wcyA9IHtcbmZzL21ldGFmcy9tZXRhZnMuYy0yNTQtXHQuZF9yZWxlYXNlID0gbWV0YWZzX2RfcmVsZWFzZSxcbi0tXG5mcy9tZXRhZnMvbWV0YWZzLmM9MjY3PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICptZXRhZnNfb3B0aW9uX3ZhbHVlc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9tZXRhZnMvbWV0YWZzLmMtMjY5LVxuZnMvbWV0YWZzL21ldGFmcy5jOjI3MDpzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWV0YWZzX3Jvb3RfZGlyX2lvcHMgPSB7XG5mcy9tZXRhZnMvbWV0YWZzLmMtMjcxLVx0Lmxvb2t1cFx0XHQ9IG1ldGFmc19yb290X2xvb2t1cCxcbi0tXG5mcy9tZXRhZnMvbWV0YWZzLmMtMjczLVxuZnMvbWV0YWZzL21ldGFmcy5jOjI3NDpzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWV0YWZzX21vdW50X2Rpcl9pb3BzID0ge1xuZnMvbWV0YWZzL21ldGFmcy5jLTI3NS1cdC5sb29rdXBcdFx0PSBtZXRhZnNfbW91bnRfbG9va3VwLFxuLS1cbmZzL21ldGFmcy9tZXRhZnMuYy0yNzctXG5mcy9tZXRhZnMvbWV0YWZzLmM6Mjc4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBtZXRhZnNfb3B0aW9uc19kaXJfaW9wcyA9IHtcbmZzL21ldGFmcy9tZXRhZnMuYy0yNzktXHQubG9va3VwXHRcdD0gbWV0YWZzX29wdGlvbnNfbG9va3VwLFxuLS1cbmZzL21ldGFmcy9tZXRhZnMuYy0yODEtXG5mcy9tZXRhZnMvbWV0YWZzLmM6MjgyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBtZXRhZnNfb3B0aW9uX3ZhbHVlc19kaXJfaW9wcyA9IHtcbmZzL21ldGFmcy9tZXRhZnMuYy0yODMtXHQubG9va3VwXHRcdD0gbWV0YWZzX29wdGlvbl92YWx1ZXNfbG9va3VwLFxuLS1cbmZzL21ldGFmcy9tZXRhZnMuYz01NTE9RVhQT1JUX1NZTUJPTF9HUEwobWV0YWZzX2dldF9yb290KTtcbmZzL21ldGFmcy9tZXRhZnMuYy01NTItXG5mcy9tZXRhZnMvbWV0YWZzLmM6NTUzOnN0YXRpYyBpbnQgX19pbml0IG1ldGFmc19pbml0KHZvaWQpXG5mcy9tZXRhZnMvbWV0YWZzLmMtNTU0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAxNjowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzQ5NgoJCQkJCQkJb3V0cHV0OiA2NwoJCQkJCQkJdGhvdWdodHM6IDE2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCBGaWxlc3lzdGVtIENoYW5nZXMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHRoaXMgbmV3IGBtZXRhZnNgIHZpcnR1YWwgZmlsZXN5c3RlbSDigJMgaW50ZXJlc3RpbmcuIEl0IHNvdW5kcyBsaWtlIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGdpdmUgdXMgYSBkaXJlY3Qgd2F5IHRvIGFjY2VzcyBtZXRhZGF0YSBhYm91dCBmaWxlcyBhbmQgZmlsZXN5c3RlbXMsIHdoaWNoIGlzIHVzZWZ1bC4gSSBzZWUgaXQgdXNlcyBgT19BTFRgIGZpbGUgZGVzY3JpcHRvcnMsIHdoaWNoIGlzIGEgZ29vZCBjaG9pY2UgZm9yIHRoaXMgdHlwZSBvZiBhY2Nlc3MsIGtlZXBzIHRoaW5ncyBjbGVhbi4gUGx1cywgaXQgdG91Y2hlcyBgZXJvZnNgIGFuZCBgb3ZlcmxheWZzYCwgbW9kaWZ5aW5nIHRoZW0gdG8gc3VwcG9ydCBgZ2V0X29wdGlvbnNgLiBUaGF0JiMzOTtzIG5vdCBlbnRpcmVseSBzdXJwcmlzaW5nLCBnaXZlbiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gZmlsZXN5c3RlbXMuCgpUaGUgYG1ldGFmc2AgZmlsZXN5c3RlbSBpdHNlbGYgaXMgYWx3YXlzIGJ1aWx0LWluLCBubyBjb25maWd1cmF0aW9uIG5lZWRlZCwganVzdCBgb2JqLXkgJiM0Mzs9IG1ldGFmcy9gLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzIG9uIHRoZSB1c2VyIHNpZGUuIEhvd2V2ZXIsIEkgbmVlZCB0byBtYWtlIHN1cmUgYEVST0ZTX0ZTYCBhbmQgYE9WRVJMQVlfRlNgIGFyZSBlbmFibGVkIHRvIHRlc3QgdGhlIGBlcm9mc2AgYW5kIGBvdmVybGF5ZnNgIGNoYW5nZXMgcHJvcGVybHksIGFzIGl0IGltcGFjdHMgdGhlbS4KCk5vdywgbGV0JiMzOTtzIGp1c3QgY29uZmlybS4gSSB3YW50IHRvIGJlIHRob3JvdWdoLiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCBgZnMvZXJvZnMvS2NvbmZpZ2AgYW5kIGBmcy9vdmVybGF5ZnMvS2NvbmZpZ2AuIEkmIzM5O2xsIGNvbmZpcm0gSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBvYnZpb3VzIGluIHRoZSBjb25maWd1cmF0aW9uIHNwYWNlLCBhbmQgZG91YmxlIGNoZWNrIHRoZSBleGFjdCBjb25maWcgbmFtZXMgZm9yIHRob3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDE2OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15jb25maWcgRVJPRlNfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9lcm9mcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Vyb2ZzL0tjb25maWctMi1cbmZzL2Vyb2ZzL0tjb25maWc6Mzpjb25maWcgRVJPRlNfRlNcbmZzL2Vyb2ZzL0tjb25maWctNC1cdHRyaXN0YXRlIFwmIzM0O0VST0ZTIGZpbGVzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctNDktXG5mcy9lcm9mcy9LY29uZmlnOjUwOmNvbmZpZyBFUk9GU19GU19ERUJVR1xuZnMvZXJvZnMvS2NvbmZpZy01MS1cdGJvb2wgXCYjMzQ7RVJPRlMgZGVidWdnaW5nIGZlYXR1cmVcJiMzNDtcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTU5LVxuZnMvZXJvZnMvS2NvbmZpZzo2MDpjb25maWcgRVJPRlNfRlNfWEFUVFJcbmZzL2Vyb2ZzL0tjb25maWctNjEtXHRib29sIFwmIzM0O0VST0ZTIGV4dGVuZGVkIGF0dHJpYnV0ZXNcJiMzNDtcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTcwLVxuZnMvZXJvZnMvS2NvbmZpZzo3MTpjb25maWcgRVJPRlNfRlNfUE9TSVhfQUNMXG5mcy9lcm9mcy9LY29uZmlnLTcyLVx0Ym9vbCBcJiMzNDtFUk9GUyBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctODQtXG5mcy9lcm9mcy9LY29uZmlnOjg1OmNvbmZpZyBFUk9GU19GU19TRUNVUklUWVxuZnMvZXJvZnMvS2NvbmZpZy04Ni1cdGJvb2wgXCYjMzQ7RVJPRlMgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy05Ny1cbmZzL2Vyb2ZzL0tjb25maWc6OTg6Y29uZmlnIEVST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFXG5mcy9lcm9mcy9LY29uZmlnLTk5LVx0Ym9vbCBcJiMzNDtGaWxlLWJhY2tlZCBFUk9GUyBmaWxlc3lzdGVtIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTExMS1cbmZzL2Vyb2ZzL0tjb25maWc6MTEyOmNvbmZpZyBFUk9GU19GU19aSVBcbmZzL2Vyb2ZzL0tjb25maWctMTEzLVx0Ym9vbCBcJiMzNDtFUk9GUyBEYXRhIENvbXByZXNzaW9uIFN1cHBvcnRcJiMzNDtcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTEyMS1cbmZzL2Vyb2ZzL0tjb25maWc6MTIyOmNvbmZpZyBFUk9GU19GU19aSVBfTFpNQVxuZnMvZXJvZnMvS2NvbmZpZy0xMjMtXHRib29sIFwmIzM0O0VST0ZTIExaTUEgY29tcHJlc3NlZCBkYXRhIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTEzMy1cbmZzL2Vyb2ZzL0tjb25maWc6MTM0OmNvbmZpZyBFUk9GU19GU19aSVBfREVGTEFURVxuZnMvZXJvZnMvS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0VST0ZTIERFRkxBVEUgY29tcHJlc3NlZCBkYXRhIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTE0NC1cbmZzL2Vyb2ZzL0tjb25maWc6MTQ1OmNvbmZpZyBFUk9GU19GU19aSVBfWlNURFxuZnMvZXJvZnMvS2NvbmZpZy0xNDYtXHRib29sIFwmIzM0O0VST0ZTIFpzdGFuZGFyZCBjb21wcmVzc2VkIGRhdGEgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctMTU1LVxuZnMvZXJvZnMvS2NvbmZpZzoxNTY6Y29uZmlnIEVST0ZTX0ZTX1pJUF9BQ0NFTFxuZnMvZXJvZnMvS2NvbmZpZy0xNTctXHRib29sIFwmIzM0O0VST0ZTIGhhcmR3YXJlIGRlY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctMTY5LVxuZnMvZXJvZnMvS2NvbmZpZzoxNzA6Y29uZmlnIEVST0ZTX0ZTX1BDUFVfS1RIUkVBRFxuZnMvZXJvZnMvS2NvbmZpZy0xNzEtXHRib29sIFwmIzM0O0VST0ZTIHBlci1jcHUgZGVjb21wcmVzc2lvbiBrdGhyZWFkIHdvcmtlcnNcJiMzNDtcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTE3OC1cbmZzL2Vyb2ZzL0tjb25maWc6MTc5OmNvbmZpZyBFUk9GU19GU19QQ1BVX0tUSFJFQURfSElQUklcbmZzL2Vyb2ZzL0tjb25maWctMTgwLVx0Ym9vbCBcJiMzNDtFUk9GUyBoaWdoIHByaW9yaXR5IHBlci1DUFUga3RocmVhZCB3b3JrZXJzXCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy0xODgtXG5mcy9lcm9mcy9LY29uZmlnOjE4OTpjb25maWcgRVJPRlNfRlNfUEFHRV9DQUNIRV9TSEFSRVxuZnMvZXJvZnMvS2NvbmZpZy0xOTAtXHRib29sIFwmIzM0O0VST0ZTIHBhZ2UgY2FjaGUgc2hhcmUgc3VwcG9ydCAoZXhwZXJpbWVudGFsKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDE2OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15jb25maWcgT1ZFUkxBWV9GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL292ZXJsYXlmcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL292ZXJsYXlmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9vdmVybGF5ZnMvS2NvbmZpZzoyOmNvbmZpZyBPVkVSTEFZX0ZTXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7T3ZlcmxheSBmaWxlc3lzdGVtIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0xNC1cbmZzL292ZXJsYXlmcy9LY29uZmlnOjE1OmNvbmZpZyBPVkVSTEFZX0ZTX1JFRElSRUNUX0RJUlxuZnMvb3ZlcmxheWZzL0tjb25maWctMTYtXHRib29sIFwmIzM0O092ZXJsYXlmczogdHVybiBvbiByZWRpcmVjdCBkaXJlY3RvcnkgZmVhdHVyZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxuZnMvb3ZlcmxheWZzL0tjb25maWctMzAtXG5mcy9vdmVybGF5ZnMvS2NvbmZpZzozMTpjb25maWcgT1ZFUkxBWV9GU19SRURJUkVDVF9BTFdBWVNfRk9MTE9XXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0zMi1cdGJvb2wgXCYjMzQ7T3ZlcmxheWZzOiBmb2xsb3cgcmVkaXJlY3RzIGV2ZW4gaWYgcmVkaXJlY3RzIGFyZSB0dXJuZWQgb2ZmXCYjMzQ7XG4tLVxuZnMvb3ZlcmxheWZzL0tjb25maWctNDUtXG5mcy9vdmVybGF5ZnMvS2NvbmZpZzo0Njpjb25maWcgT1ZFUkxBWV9GU19JTkRFWFxuZnMvb3ZlcmxheWZzL0tjb25maWctNDctXHRib29sIFwmIzM0O092ZXJsYXlmczogdHVybiBvbiBpbm9kZXMgaW5kZXggZmVhdHVyZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxuZnMvb3ZlcmxheWZzL0tjb25maWctNjQtXG5mcy9vdmVybGF5ZnMvS2NvbmZpZzo2NTpjb25maWcgT1ZFUkxBWV9GU19ORlNfRVhQT1JUXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy02Ni1cdGJvb2wgXCYjMzQ7T3ZlcmxheWZzOiB0dXJuIG9uIE5GUyBleHBvcnQgZmVhdHVyZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxuZnMvb3ZlcmxheWZzL0tjb25maWctOTItXG5mcy9vdmVybGF5ZnMvS2NvbmZpZzo5Mzpjb25maWcgT1ZFUkxBWV9GU19YSU5PX0FVVE9cbmZzL292ZXJsYXlmcy9LY29uZmlnLTk0LVx0Ym9vbCBcJiMzNDtPdmVybGF5ZnM6IGF1dG8gZW5hYmxlIGlub2RlIG51bWJlciBtYXBwaW5nXCYjMzQ7XG4tLVxuZnMvb3ZlcmxheWZzL0tjb25maWctMTEwLVxuZnMvb3ZlcmxheWZzL0tjb25maWc6MTExOmNvbmZpZyBPVkVSTEFZX0ZTX01FVEFDT1BZXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0xMTItXHRib29sIFwmIzM0O092ZXJsYXlmczogdHVybiBvbiBtZXRhZGF0YSBvbmx5IGNvcHkgdXAgZmVhdHVyZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxuZnMvb3ZlcmxheWZzL0tjb25maWctMTI4LVxuZnMvb3ZlcmxheWZzL0tjb25maWc6MTI5OmNvbmZpZyBPVkVSTEFZX0ZTX0RFQlVHXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0xMzAtXHRib29sIFwmIzM0O092ZXJsYXlmczogdHVybiBvbiBleHRyYSBkZWJ1Z2dpbmcgY2hlY2tzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMTY6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUzNDYKCQkJCQkJCW91dHB1dDogMjQzCgkJCQkJCQl0aG91Z2h0czogNTY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBNZXRhRlMgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBgbWV0YWZzYCBmaWxlc3lzdGVtIGNvZGUsIGFuZCBoZXJlJiMzOTtzIHdoYXQmIzM5O3MgYnViYmxpbmcgdG8gdGhlIHN1cmZhY2UuIEl0IHNlZW1zIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFyZSB0aHJvdWdoIHRoZSBgT19BTFRgIGZsYWcgd2l0aGluIGBvcGVuYXQyYCBvciBgb3BlbmAgY2FsbHMsIGFuZCB0aGUgYE9QRU5fVFJFRV9BTFRgIGZsYWcgd2l0aGluIHRoZSBgb3Blbl90cmVlYCBmdW5jdGlvbi4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGBmcy9tZXRhZnMvbWV0YWZzLmNgLCBhbmQgdGhlIG5ldyBgZ2V0X29wdGlvbnNgIGZ1bmN0aW9ucyBzcHJpbmtsZWQgd2l0aGluIGBmcy9lcm9mcy9zdXBlci5jYCBhbmQgYGZzL292ZXJsYXlmcy9wYXJhbXMuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGFjdGlvbiBpcy4KClNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBJIHNob3VsZCBzY3J1dGluaXplIHRoZXNlIHN5bWJvbHM6IGBtZXRhZnNfZ2V0X3Jvb3RgLCBgbWV0YWZzX2NyZWF0ZV9yb290YCwgYG1ldGFmc19yb290X2xvb2t1cGAsIGBtZXRhZnNfbW91bnRfbG9va3VwYCwgYG1ldGFmc19vcHRpb25zX2xvb2t1cGAsIGBtZXRhZnNfb3B0aW9uX3ZhbHVlc19sb29rdXBgLCBgbWV0YWZzX2dldF9vcHRpb25fdmFsdWVzYCwgYG1ldGFmc19nZXRfbGlua2AsIGBtZXRhZnNfcmVhZGxpbmtgLCBhbG9uZ3NpZGUgYG1udF9zaG93X29wdGlvbnNgLCBgc2JfYWRkX29wdGlvbmAsIGBzYl9hZGRfb3B0aW9uX3BhdGhgLCBgb3ZsX2dldF9vcHRpb25zYCwgYW5kIGBlcm9mc19nZXRfb3B0aW9uc2AuIFRob3NlIHNlZW0gdG8gYmUgdGhlIGNyaXRpY2FsIHBpZWNlcy4KCkkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSByaWdodCBrZXJuZWwgY29uZmlncyBlbmFibGVkLiBJdCBsb29rcyBsaWtlIGBFUk9GU19GU2AgYW5kIGBPVkVSTEFZX0ZTYCBhcmUgZXNzZW50aWFsLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMsIGp1c3QgdG8gYmUgdGhvcm91Z2guIFJpZ2h0IG5vdywgaXQgbG9va3MgbGlrZSBgbWV0YWZzYCBpdHNlbGYgaXMgYnVpbHQtaW4uIEkgYWxzbyBub3RlZCB0aGF0IHRoZSBgT19BTFRgIGZsYWcgaXMgYWRkZWQgdG8gYE9fUEFUSF9GTEFHU2AsIGFuZCBgT1BFTl9UUkVFX0FMVGAgZmxhZyBpcyBhZGRlZCB0byBgb3Blbl90cmVlYC4gVGhlIGBNTlRfQ0xPTkFCTEVgIGZsYWcgaXMgYWRkZWQgdG8gYG5zZnNgLCBgcGlkZnNgLCBhbmQgYG92ZXJsYXlmc2AgbGF5ZXJzLgoKTm93LCBhbiBpbXBvcnRhbnQgcXVlc3Rpb24gaXMgaWYgYW55IG90aGVyIGZpbGVzeXN0ZW1zIGFyZSB1dGlsaXppbmcgdGhhdCBgZ2V0X29wdGlvbnNgIGZ1bmN0aW9uLiBUaGUgcGF0Y2ggbWVudGlvbnMgY2hhbmdlcyB0byBgZXJvZnNgIGFuZCBgb3ZlcmxheWZzYCwgYnV0IEkgc2hvdWxkIHZlcmlmeSB0aGF0JiMzOTtzIHRoZSBleHRlbnQgb2YgdGhlIGltcGFjdC4KCk9rYXksIGxldCYjMzk7cyB2ZXJpZnkgdGhhdCBgbWV0YWZzX2dldF9yb290YCBpcyBpbmRlZWQgcmVhY2hhYmxlLiBMb29raW5nIGF0IGBmcy9uYW1laS5jYCwgaW4gYHBhdGhfaW5pdGAsIHRoZXJlJiMzOTtzIGEgY29uZGl0aW9uYWw6IGlmIGBmbGFncyAmYW1wOyBMT09LVVBfQUxUYCBpcyBzZXQsIGFuZCBpdCBqdW1wcyB0byBgbWV0YWZzX2dldF9yb290YC4gT2theSwgcGVyZmVjdC4gVGhlIGBMT09LVVBfQUxUYCBmbGFnIGlzIHNldCBpbiBgYnVpbGRfb3Blbl9mbGFnc2AgaWYgYE9fQUxUYCBpcyBwcmVzZW50LiBBbmQgYE9fQUxUYCBpcyBlcXVhbCB0byBgMSAmbHQ7Jmx0OyAyN2AuIFNvLCBhbiBgb3BlbmF0KC4uLiwgT19BTFQsIC4uLilgIGNhbGwgd2lsbCBhYnNvbHV0ZWx5IHRyaWdnZXIgYG1ldGFmc19nZXRfcm9vdGAuIFRoYXQgbWFrZXMgaXQgdGVzdGFibGUgYW5kIHJlYWNoYWJsZS4gRXhjZWxsZW50ISBJIHRoaW5rIEkgaGF2ZSBhIGNsZWFyIHBpY3R1cmUuCgpOb3csIEkgdGhpbmsgSSYjMzk7bSByZWFkeSB0byBzdGFydCBwcmVwYXJpbmcgdGhlIHJlc3VsdHMgYW5kIHRoZSB0ZXN0IHN0cmF0ZWd5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDE2OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFUk9GU19GUyYjMzQ7LAogICAgJiMzNDtPVkVSTEFZX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWV0YWZzX2dldF9yb290JiMzNDssCiAgICAmIzM0O21ldGFmc19jcmVhdGVfcm9vdCYjMzQ7LAogICAgJiMzNDttZXRhZnNfcm9vdF9sb29rdXAmIzM0OywKICAgICYjMzQ7bWV0YWZzX21vdW50X2xvb2t1cCYjMzQ7LAogICAgJiMzNDttZXRhZnNfb3B0aW9uc19sb29rdXAmIzM0OywKICAgICYjMzQ7bWV0YWZzX29wdGlvbl92YWx1ZXNfbG9va3VwJiMzNDssCiAgICAmIzM0O21ldGFmc19nZXRfb3B0aW9uX3ZhbHVlcyYjMzQ7LAogICAgJiMzNDttZXRhZnNfZ2V0X2xpbmsmIzM0OywKICAgICYjMzQ7bWV0YWZzX3JlYWRsaW5rJiMzNDssCiAgICAmIzM0O21udF9zaG93X29wdGlvbnMmIzM0OywKICAgICYjMzQ7c2JfYWRkX29wdGlvbiYjMzQ7LAogICAgJiMzNDtzYl9hZGRfb3B0aW9uX3BhdGgmIzM0OywKICAgICYjMzQ7b3ZsX2dldF9vcHRpb25zJiMzNDssCiAgICAmIzM0O2Vyb2ZzX2dldF9vcHRpb25zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgdmlydHVhbCBmaWxlc3lzdGVtIGBtZXRhZnNgIHRoYXQgZXhwb3NlcyBtZXRhZGF0YSBhYm91dCBmaWxlcyBhbmQgZmlsZXN5c3RlbXMgdmlhIHRoZSBgT19BTFRgIGZsYWcuIEl0IGFsc28gaW50cm9kdWNlcyBhIG5ldyBgZ2V0X29wdGlvbnNgIHN1cGVyIG9wZXJhdGlvbiwgaW1wbGVtZW50ZWQgYnkgYGVyb2ZzYCBhbmQgYG92ZXJsYXlmc2AuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIFZGUyBhbmQgc3BlY2lmaWMgZmlsZXN5c3RlbXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFUk9GU19GUyYjMzQ7LAogICAgJiMzNDtPVkVSTEFZX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWV0YWZzX2dldF9yb290JiMzNDssCiAgICAmIzM0O21ldGFmc19jcmVhdGVfcm9vdCYjMzQ7LAogICAgJiMzNDttZXRhZnNfcm9vdF9sb29rdXAmIzM0OywKICAgICYjMzQ7bWV0YWZzX21vdW50X2xvb2t1cCYjMzQ7LAogICAgJiMzNDttZXRhZnNfb3B0aW9uc19sb29rdXAmIzM0OywKICAgICYjMzQ7bWV0YWZzX29wdGlvbl92YWx1ZXNfbG9va3VwJiMzNDssCiAgICAmIzM0O21ldGFmc19nZXRfb3B0aW9uX3ZhbHVlcyYjMzQ7LAogICAgJiMzNDttZXRhZnNfZ2V0X2xpbmsmIzM0OywKICAgICYjMzQ7bWV0YWZzX3JlYWRsaW5rJiMzNDssCiAgICAmIzM0O21udF9zaG93X29wdGlvbnMmIzM0OywKICAgICYjMzQ7c2JfYWRkX29wdGlvbiYjMzQ7LAogICAgJiMzNDtzYl9hZGRfb3B0aW9uX3BhdGgmIzM0OywKICAgICYjMzQ7b3ZsX2dldF9vcHRpb25zJiMzNDssCiAgICAmIzM0O2Vyb2ZzX2dldF9vcHRpb25zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgdmlydHVhbCBmaWxlc3lzdGVtIGBtZXRhZnNgIHRoYXQgZXhwb3NlcyBtZXRhZGF0YSBhYm91dCBmaWxlcyBhbmQgZmlsZXN5c3RlbXMgdmlhIHRoZSBgT19BTFRgIGZsYWcuIEl0IGFsc28gaW50cm9kdWNlcyBhIG5ldyBgZ2V0X29wdGlvbnNgIHN1cGVyIG9wZXJhdGlvbiwgaW1wbGVtZW50ZWQgYnkgYGVyb2ZzYCBhbmQgYG92ZXJsYXlmc2AuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIFZGUyBhbmQgc3BlY2lmaWMgZmlsZXN5c3RlbXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTVUMTY6MDg6MjQuNTAxNTg2ODk4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk4ODcxNDUzMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVJPRlNfRlNcIixcbiAgICBcIk9WRVJMQVlfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZXRhZnNfZ2V0X3Jvb3RcIixcbiAgICBcIm1ldGFmc19jcmVhdGVfcm9vdFwiLFxuICAgIFwibWV0YWZzX3Jvb3RfbG9va3VwXCIsXG4gICAgXCJtZXRhZnNfbW91bnRfbG9va3VwXCIsXG4gICAgXCJtZXRhZnNfb3B0aW9uc19sb29rdXBcIixcbiAgICBcIm1ldGFmc19vcHRpb25fdmFsdWVzX2xvb2t1cFwiLFxuICAgIFwibWV0YWZzX2dldF9vcHRpb25fdmFsdWVzXCIsXG4gICAgXCJtZXRhZnNfZ2V0X2xpbmtcIixcbiAgICBcIm1ldGFmc19yZWFkbGlua1wiLFxuICAgIFwibW50X3Nob3dfb3B0aW9uc1wiLFxuICAgIFwic2JfYWRkX29wdGlvblwiLFxuICAgIFwic2JfYWRkX29wdGlvbl9wYXRoXCIsXG4gICAgXCJvdmxfZ2V0X29wdGlvbnNcIixcbiAgICBcImVyb2ZzX2dldF9vcHRpb25zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyB2aXJ0dWFsIGZpbGVzeXN0ZW0gYG1ldGFmc2AgdGhhdCBleHBvc2VzIG1ldGFkYXRhIGFib3V0IGZpbGVzIGFuZCBmaWxlc3lzdGVtcyB2aWEgdGhlIGBPX0FMVGAgZmxhZy4gSXQgYWxzbyBpbnRyb2R1Y2VzIGEgbmV3IGBnZXRfb3B0aW9uc2Agc3VwZXIgb3BlcmF0aW9uLCBpbXBsZW1lbnRlZCBieSBgZXJvZnNgIGFuZCBgb3ZlcmxheWZzYC4gVGhlc2UgYXJlIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgVkZTIGFuZCBzcGVjaWZpYyBmaWxlc3lzdGVtcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDE2OjA4OjI0LjUwMTYwNDUwOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1MDI0NTc4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc4YzhkOWU5MzRjZThhOWJjMWFlMGM5OTRmNDYzODU0YmQyZjk4MTFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMTUgMTY6MDg6MjIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0XFxuaW5kZXggN2M3NTMxNDhhZjg4ODMuLjNkYzQzMWI2Y2RiYjBiIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxcbkBAIC0zMTQsNyArMzE0LDcgQEAgb3IgYm90dG9tIGhhbGYpLlxcbiBgYHNob3dfZGV2bmFtZWBgXFxuIFxcdE9wdGlvbmFsLiBDYWxsZWQgYnkgdGhlIFZGUyB0byBzaG93IGRldmljZSBuYW1lIGZvclxcbiBcXHQvcHJvYy9cXHUwMDNjcGlkXFx1MDAzZS97bW91bnRzLG1vdW50aW5mbyxtb3VudHN0YXRzfS4gSWYgbm90IHByb3ZpZGVkIHRoZW5cXG4tXFx0JyhzdHJ1Y3QgbW91bnQpLm1udF9kZXZuYW1lJyB3aWxsIGJlIHVzZWQuXFxuK1xcdCcoc3RydWN0IHN1cGVyX2Jsb2NrKS5zX2Rldm5hbWUnIHdpbGwgYmUgdXNlZC5cXG4gXFxuIGBgc2hvd19wYXRoYGBcXG4gXFx0T3B0aW9uYWwuIENhbGxlZCBieSB0aGUgVkZTIChmb3IgL3Byb2MvXFx1MDAzY3BpZFxcdTAwM2UvbW91bnRpbmZvKSB0byBzaG93XFxuZGlmZiAtLWdpdCBhL2ZzL01ha2VmaWxlIGIvZnMvTWFrZWZpbGVcXG5pbmRleCA4OWE4YTlkMjA3ZDFjNS4uODdhNGMyM2Q1YTA4ZGUgMTAwNjQ0XFxuLS0tIGEvZnMvTWFrZWZpbGVcXG4rKysgYi9mcy9NYWtlZmlsZVxcbkBAIC01OCw2ICs1OCw4IEBAIG9iai0kKENPTkZJR19DT05GSUdGU19GUylcXHQrPSBjb25maWdmcy9cXG4gb2JqLXlcXHRcXHRcXHRcXHQrPSBkZXZwdHMvXFxuIFxcbiBvYmotJChDT05GSUdfRExNKVxcdFxcdCs9IGRsbS9cXG4rXFxuK29iai15XFx0XFx0XFx0XFx0Kz0gbWV0YWZzL1xcbiAgXFxuICMgRG8gbm90IGFkZCBhbnkgZmlsZXN5c3RlbXMgYmVmb3JlIHRoaXMgbGluZVxcbiBvYmotJChDT05GSUdfTkVURlNfU1VQUE9SVClcXHQrPSBuZXRmcy9cXG5kaWZmIC0tZ2l0IGEvZnMvZXJvZnMvc3VwZXIuYyBiL2ZzL2Vyb2ZzL3N1cGVyLmNcXG5pbmRleCA4NmZhNWM2YTBjNzA4Ny4uMjU3NTE3YzI4ZTFkMzggMTAwNjQ0XFxuLS0tIGEvZnMvZXJvZnMvc3VwZXIuY1xcbisrKyBiL2ZzL2Vyb2ZzL3N1cGVyLmNcXG5AQCAtMTAyOCwyOSArMTAyOCwzNCBAQCBzdGF0aWMgaW50IGVyb2ZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGVyb2ZzX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGRlbnRyeSAqcm9vdClcXG4rc3RhdGljIGludCBlcm9mc19nZXRfb3B0aW9ucyhzdHJ1Y3Qgc2Jfb3B0X2N0eCAqY3R4LCBzdHJ1Y3QgZGVudHJ5ICpyb290KVxcbiB7XFxuIFxcdHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkgPSBFUk9GU19TQihyb290LVxcdTAwM2VkX3NiKTtcXG4gXFx0c3RydWN0IGVyb2ZzX21vdW50X29wdHMgKm9wdCA9IFxcdTAwMjZzYmktXFx1MDAzZW9wdDtcXG4gXFxuK1xcdGlmIChzYmktXFx1MDAzZWRpZjAuZmlsZSlcXG4rXFx0XFx0c2JfYWRkX29wdGlvbl9wYXRoKGN0eCwgXFxcInNvdXJjZVxcXCIsIE5VTEwsIFxcdTAwMjZzYmktXFx1MDAzZWRpZjAuZmlsZS1cXHUwMDNlZl9wYXRoKTtcXG4rXFxuIFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19FUk9GU19GU19YQVRUUikpXFxuLVxcdFxcdHNlcV9wdXRzKHNlcSwgdGVzdF9vcHQob3B0LCBYQVRUUl9VU0VSKSA/XFxuLVxcdFxcdFxcdFxcdFxcXCIsdXNlcl94YXR0clxcXCIgOiBcXFwiLG5vdXNlcl94YXR0clxcXCIpO1xcbitcXHRcXHRzYl9hZGRfb3B0aW9uKGN0eCwgdGVzdF9vcHQob3B0LCBYQVRUUl9VU0VSKSA/XFxuK1xcdFxcdFxcdCAgICAgIFxcXCJ1c2VyX3hhdHRyXFxcIiA6IFxcXCJub3VzZXJfeGF0dHJcXFwiLCBOVUxMKTtcXG4gXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX1BPU0lYX0FDTCkpXFxuLVxcdFxcdHNlcV9wdXRzKHNlcSwgdGVzdF9vcHQob3B0LCBQT1NJWF9BQ0wpID8gXFxcIixhY2xcXFwiIDogXFxcIixub2FjbFxcXCIpO1xcbitcXHRcXHRzYl9hZGRfb3B0aW9uKGN0eCwgdGVzdF9vcHQob3B0LCBQT1NJWF9BQ0wpID8gXFxcImFjbFxcXCIgOiBcXFwibm9hY2xcXFwiLCBOVUxMKTtcXG4gXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX1pJUCkpXFxuLVxcdFxcdHNlcV9wcmludGYoc2VxLCBcXFwiLGNhY2hlX3N0cmF0ZWd5PSVzXFxcIixcXG4rXFx0XFx0c2JfYWRkX29wdGlvbihjdHgsIFxcXCJjYWNoZV9zdHJhdGVneVxcXCIsXFxuIFxcdFxcdFxcdCAgZXJvZnNfcGFyYW1fY2FjaGVfc3RyYXRlZ3lbb3B0LVxcdTAwM2VjYWNoZV9zdHJhdGVneV0ubmFtZSk7XFxuIFxcdGlmICh0ZXN0X29wdChvcHQsIERBWF9BTFdBWVMpKVxcbi1cXHRcXHRzZXFfcHV0cyhzZXEsIFxcXCIsZGF4PWFsd2F5c1xcXCIpO1xcbitcXHRcXHRzYl9hZGRfb3B0aW9uKGN0eCwgXFxcImRheFxcXCIsIFxcXCJhbHdheXNcXFwiKTtcXG4gXFx0aWYgKHRlc3Rfb3B0KG9wdCwgREFYX05FVkVSKSlcXG4tXFx0XFx0c2VxX3B1dHMoc2VxLCBcXFwiLGRheD1uZXZlclxcXCIpO1xcbitcXHRcXHRzYl9hZGRfb3B0aW9uKGN0eCwgXFxcImRheFxcXCIsIFxcXCJuZXZlclxcXCIpO1xcbiBcXHRpZiAoZXJvZnNfaXNfZmlsZWlvX21vZGUoc2JpKSBcXHUwMDI2XFx1MDAyNiB0ZXN0X29wdChvcHQsIERJUkVDVF9JTykpXFxuLVxcdFxcdHNlcV9wdXRzKHNlcSwgXFxcIixkaXJlY3Rpb1xcXCIpO1xcbi1cXHRpZiAoc2JpLVxcdTAwM2VkaWYwLmZzb2ZmKVxcbi1cXHRcXHRzZXFfcHJpbnRmKHNlcSwgXFxcIixmc29mZnNldD0lbGx1XFxcIiwgc2JpLVxcdTAwM2VkaWYwLmZzb2ZmKTtcXG4rXFx0XFx0c2JfYWRkX29wdGlvbihjdHgsIFxcXCJkaXJlY3Rpb1xcXCIsIE5VTEwpO1xcbitcXHRpZiAoc2JpLVxcdTAwM2VkaWYwLmZzb2ZmKSB7XFxuK1xcdFxcdGNoYXIgKnZhbCBfX2ZyZWUoa2ZyZWUpID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsIFxcXCIlbGx1XFxcIiwgc2JpLVxcdTAwM2VkaWYwLmZzb2ZmKTtcXG4rXFx0XFx0c2JfYWRkX29wdGlvbihjdHgsIFxcXCJmc29mZnNldFxcXCIsIHZhbCk7XFxuK1xcdH1cXG4gXFx0aWYgKHRlc3Rfb3B0KG9wdCwgSU5PREVfU0hBUkUpKVxcbi1cXHRcXHRzZXFfcHV0cyhzZXEsIFxcXCIsaW5vZGVfc2hhcmVcXFwiKTtcXG4rXFx0XFx0c2JfYWRkX29wdGlvbihjdHgsIFxcXCJpbm9kZV9zaGFyZVxcXCIsIE5VTEwpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMTA2OSw3ICsxMDc0LDcgQEAgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZXJvZnNfc29wcyA9IHtcXG4gXFx0LmZyZWVfaW5vZGUgPSBlcm9mc19mcmVlX2lub2RlLFxcbiBcXHQuZXZpY3RfaW5vZGUgPSBlcm9mc19ldmljdF9pbm9kZSxcXG4gXFx0LnN0YXRmcyA9IGVyb2ZzX3N0YXRmcyxcXG4tXFx0LnNob3dfb3B0aW9ucyA9IGVyb2ZzX3Nob3dfb3B0aW9ucyxcXG4rXFx0LmdldF9vcHRpb25zID0gZXJvZnNfZ2V0X29wdGlvbnMsXFxuIH07XFxuIFxcbiBtb2R1bGVfaW5pdChlcm9mc19tb2R1bGVfaW5pdCk7XFxuZGlmZiAtLWdpdCBhL2ZzL2ZjbnRsLmMgYi9mcy9mY250bC5jXFxuaW5kZXggYzE1OGYwODJmMWRhNGYuLjAxYjc2NWNmYWM4NDc5IDEwMDY0NFxcbi0tLSBhL2ZzL2ZjbnRsLmNcXG4rKysgYi9mcy9mY250bC5jXFxuQEAgLTExNjksNyArMTE2OSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGZjbnRsX2luaXQodm9pZClcXG4gXFx0ICogRXhjZXB0aW9uczogT19OT05CTE9DSyBpcyBhIHR3byBiaXQgZGVmaW5lIG9uIHBhcmlzYzsgT19OREVMQVlcXG4gXFx0ICogaXMgZGVmaW5lZCBhcyBPX05PTkJMT0NLIG9uIHNvbWUgcGxhdGZvcm1zIGFuZCBub3Qgb24gb3RoZXJzLlxcbiBcXHQgKi9cXG4tXFx0QlVJTERfQlVHX09OKDIyIC0gMSAvKiBmb3IgT19SRE9OTFkgYmVpbmcgMCAqLyAhPVxcbitcXHRCVUlMRF9CVUdfT04oMjMgLSAxIC8qIGZvciBPX1JET05MWSBiZWluZyAwICovICE9XFxuIFxcdFxcdEhXRUlHSFQzMihcXG4gXFx0XFx0XFx0KFZBTElEX09QRU5fRkxBR1MgXFx1MDAyNiB+KE9fTk9OQkxPQ0sgfCBPX05ERUxBWSkpIHxcXG4gXFx0XFx0XFx0X19GTU9ERV9FWEVDIHwgX19PX1JFR1VMQVIpKTtcXG5kaWZmIC0tZ2l0IGEvZnMvaW50ZXJuYWwuaCBiL2ZzL2ludGVybmFsLmhcXG5pbmRleCAzNTVkOTNmOTIyMDg2MS4uZTczYTVjMWQ1YjRlZTEgMTAwNjQ0XFxuLS0tIGEvZnMvaW50ZXJuYWwuaFxcbisrKyBiL2ZzL2ludGVybmFsLmhcXG5AQCAtOTUsNiArOTUsNyBAQCBpbnQgcGF0aF91bW91bnQoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIGludCBmbGFncyk7XFxuIGludCBwYXRoX3Bpdm90X3Jvb3Qoc3RydWN0IHBhdGggKm5ldywgc3RydWN0IHBhdGggKm9sZCk7XFxuIFxcbiBpbnQgc2hvd19wYXRoKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRlbnRyeSAqcm9vdCk7XFxuK2ludCBtbnRfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCk7XFxuIFxcbiAvKlxcbiAgKiBmc19zdHJ1Y3QuY1xcbmRpZmYgLS1naXQgYS9mcy9tZXRhZnMvTWFrZWZpbGUgYi9mcy9tZXRhZnMvTWFrZWZpbGVcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mODU1YjQ4ZDljMmI5MFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9mcy9tZXRhZnMvTWFrZWZpbGVcXG5AQCAtMCwwICsxLDYgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKyNcXG4rIyBNYWtlZmlsZSBmb3IgbWV0YSBmaWxlc3lzdGVtXFxuKyNcXG4rXFxuK29iai15IDo9IG1ldGFmcy5vXFxuZGlmZiAtLWdpdCBhL2ZzL21ldGFmcy9tZXRhZnMuYyBiL2ZzL21ldGFmcy9tZXRhZnMuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjE1ZWMwYjYwNjRkYTM4XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2ZzL21ldGFmcy9tZXRhZnMuY1xcbkBAIC0wLDAgKzEsNTcyIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qXFxuKyAqIG1ldGFmcyAtIHZpcnR1YWwgZmlsZXN5c3RlbSBmb3IgbWV0YWRhdGEgYWNjZXNzXFxuKyAqXFxuKyAqIFRoaXMgcHJvdmlkZXMgYSB3YXkgdG8gYWNjZXNzIG1ldGFkYXRhIGFib3V0IGZpbGVzIGFuZCBmaWxlc3lzdGVtc1xcbisgKiB0aHJvdWdoIE9fQUxUIGZpbGUgZGVzY3JpcHRvcnMuXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbml0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21hZ2ljLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb3VudC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbmFtZWkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RjYWNoZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHNldWRvX2ZzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcy9zdXBlci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwibWV0YWZzLmhcXFwiXFxuK1xcbisvKlxcbisgKiBtZXRhZnMgc3VwZXJibG9jayBhbmQgbW91bnRcXG4rICovXFxuK3N0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKm1ldGFmc19tbnQgX19yb19hZnRlcl9pbml0O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIG1ldGFmc19vcHMgPSB7XFxuK1xcdC5zdGF0ZnNcXHRcXHQ9IHNpbXBsZV9zdGF0ZnMsXFxuK1xcdC5kcm9wX2lub2RlXFx0PSBpbm9kZV9qdXN0X2Ryb3AsXFxuK307XFxuK1xcbitzdGF0aWMgaW50IG1ldGFmc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbit7XFxuK1xcdHN0cnVjdCBwc2V1ZG9fZnNfY29udGV4dCAqY3R4ID0gaW5pdF9wc2V1ZG8oZmMsIDB4NGQ0NTU0NDEpOyAvKiAnTUVUQScgKi9cXG4rXFx0aWYgKCFjdHgpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRjdHgtXFx1MDAzZW9wcyA9IFxcdTAwMjZtZXRhZnNfb3BzO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIG1ldGFmc190eXBlID0ge1xcbitcXHQubmFtZSA9IFxcXCJtZXRhZnNcXFwiLFxcbitcXHQuaW5pdF9mc19jb250ZXh0ID0gbWV0YWZzX2luaXRfZnNfY29udGV4dCxcXG4rXFx0LmtpbGxfc2IgPSBraWxsX2Fub25fc3VwZXIsXFxuK307XFxuK1xcbisvKlxcbisgKiBNb3VudCBvcHRpb24gY29sbGVjdGlvbiBzdHJ1Y3R1cmVzXFxuKyAqL1xcbitlbnVtIG1ldGFmc19kZW50cnlfdHlwZSB7XFxuK1xcdE1FVEFGU19ST09ULFxcbitcXHRNRVRBRlNfT1BUSU9OX1ZBTFVFUyxcXG4rXFx0TUVUQUZTX1NZTUxJTkssXFxuK307XFxuK1xcbitzdHJ1Y3QgbWV0YWZzX29wdGlvbl9lbnRyeSB7XFxuK1xcdGNoYXIgKnZhbHVlO1xcbitcXHRzdHJ1Y3QgcGF0aCBwYXRoO1xcbit9O1xcbitcXG4rc3RydWN0IG1ldGFmc19kZW50cnlfaW5mbyB7XFxuK1xcdGVudW0gbWV0YWZzX2RlbnRyeV90eXBlIHR5cGU7XFxuK1xcdHVuaW9uIHtcXG4rXFx0XFx0c3RydWN0IHtcXG4rXFx0XFx0XFx0c3RydWN0IGZpbGUgKmJhc2U7XFxuK1xcdFxcdH0gcm9vdDtcXG4rXFx0XFx0c3RydWN0IHtcXG4rXFx0XFx0XFx0c3RydWN0IG1ldGFmc19vcHRpb25fZW50cnkgKmVudHJpZXM7XFxuK1xcdFxcdFxcdGludCBjb3VudDtcXG4rXFx0XFx0fSBvcHRfdmFsdWVzO1xcbitcXHRcXHRzdHJ1Y3QgbWV0YWZzX29wdGlvbl9lbnRyeSBzeW1saW5rO1xcbitcXHR9O1xcbit9O1xcbitcXG4rc3RydWN0IG1ldGFmc19jb2xsZWN0X2N0eCB7XFxuK1xcdHN0cnVjdCBzYl9vcHRfY3R4IGN0eDtcXG4rXFx0Y29uc3QgY2hhciAqdGFyZ2V0X25hbWU7XFxuK1xcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2I7XFxuK1xcdHN0cnVjdCBtZXRhZnNfb3B0aW9uX2VudHJ5ICplbnRyaWVzO1xcbitcXHRpbnQgY291bnQ7XFxuK1xcdGludCBzaXplO1xcbitcXHRpbnQgZXJyO1xcbitcXHRib29sIGlzX3NvdXJjZTtcXG4rfTtcXG4rXFxuKy8qXFxuKyAqIENvbGxlY3Qgc3BlY2lmaWMgbW91bnQgb3B0aW9uIHZhbHVlcyBmcm9tIHRoZSBiYXNlIGZpbGVzeXN0ZW1cXG4rICovXFxuK3N0YXRpYyB2b2lkIG1ldGFmc19jb2xsZWN0X29wdGlvbihzdHJ1Y3Qgc2Jfb3B0X2N0eCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLFxcbitcXHRcXHRcXHRcXHQgIGNvbnN0IGNoYXIgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aClcXG4re1xcbitcXHRzdHJ1Y3QgbWV0YWZzX2NvbGxlY3RfY3R4ICpjb2xsZWN0X2N0eCA9IGN0eC1cXHUwMDNlZGF0YTtcXG4rXFx0c3RydWN0IG1ldGFmc19vcHRpb25fZW50cnkgKmVudHJ5O1xcbitcXG4rXFx0aWYgKHN0cmNtcChuYW1lLCBjb2xsZWN0X2N0eC1cXHUwMDNldGFyZ2V0X25hbWUpICE9IDApXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmICghdmFsdWUgXFx1MDAyNlxcdTAwMjYgY29sbGVjdF9jdHgtXFx1MDAzZWlzX3NvdXJjZSlcXG4rXFx0XFx0dmFsdWUgPSBjb2xsZWN0X2N0eC1cXHUwMDNlc2ItXFx1MDAzZXNfZGV2bmFtZTtcXG4rXFxuK1xcdGlmIChjb2xsZWN0X2N0eC1cXHUwMDNlY291bnQgXFx1MDAzZT0gY29sbGVjdF9jdHgtXFx1MDAzZXNpemUpIHtcXG4rXFx0XFx0aW50IG5ld19zaXplID0gY29sbGVjdF9jdHgtXFx1MDAzZXNpemUgPyBjb2xsZWN0X2N0eC1cXHUwMDNlc2l6ZSAqIDIgOiA0O1xcbitcXHRcXHRzdHJ1Y3QgbWV0YWZzX29wdGlvbl9lbnRyeSAqbmV3X2VudHJpZXM7XFxuK1xcbitcXHRcXHRuZXdfZW50cmllcyA9IGtyZWFsbG9jX2FycmF5KGNvbGxlY3RfY3R4LVxcdTAwM2VlbnRyaWVzLCBuZXdfc2l6ZSwgc2l6ZW9mKCpuZXdfZW50cmllcyksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgR0ZQX0tFUk5FTCk7XFxuK1xcdFxcdGlmICghbmV3X2VudHJpZXMpIHtcXG4rXFx0XFx0XFx0Y29sbGVjdF9jdHgtXFx1MDAzZWVyciA9IC1FTk9NRU07XFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0fVxcbitcXHRcXHRjb2xsZWN0X2N0eC1cXHUwMDNlZW50cmllcyA9IG5ld19lbnRyaWVzO1xcbitcXHRcXHRjb2xsZWN0X2N0eC1cXHUwMDNlc2l6ZSA9IG5ld19zaXplO1xcbitcXHR9XFxuK1xcbitcXHRlbnRyeSA9IFxcdTAwMjZjb2xsZWN0X2N0eC1cXHUwMDNlZW50cmllc1tjb2xsZWN0X2N0eC1cXHUwMDNlY291bnRdO1xcbitcXHRlbnRyeS1cXHUwMDNldmFsdWUgPSB2YWx1ZSA/IGtzdHJkdXAodmFsdWUsIEdGUF9LRVJORUwpIDogTlVMTDtcXG4rXFx0aWYgKCFlbnRyeS1cXHUwMDNldmFsdWUgXFx1MDAyNlxcdTAwMjYgdmFsdWUpIHtcXG4rXFx0XFx0Y29sbGVjdF9jdHgtXFx1MDAzZWVyciA9IC1FTk9NRU07XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXHRpZiAocGF0aCkge1xcbitcXHRcXHRlbnRyeS1cXHUwMDNlcGF0aCA9ICpwYXRoO1xcbitcXHRcXHRwYXRoX2dldChcXHUwMDI2ZW50cnktXFx1MDAzZXBhdGgpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRtZW1zZXQoXFx1MDAyNmVudHJ5LVxcdTAwM2VwYXRoLCAwLCBzaXplb2YoZW50cnktXFx1MDAzZXBhdGgpKTtcXG4rXFx0fVxcbitcXHRjb2xsZWN0X2N0eC1cXHUwMDNlY291bnQrKztcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbWV0YWZzX2ZyZWVfZW50cmllcyhzdHJ1Y3QgbWV0YWZzX29wdGlvbl9lbnRyeSAqZW50cmllcywgaW50IGNvdW50KVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNvdW50OyBpKyspIHtcXG4rXFx0XFx0a2ZyZWUoZW50cmllc1tpXS52YWx1ZSk7XFxuK1xcdFxcdGlmIChlbnRyaWVzW2ldLnBhdGgubW50KVxcbitcXHRcXHRcXHRwYXRoX3B1dChcXHUwMDI2ZW50cmllc1tpXS5wYXRoKTtcXG4rXFx0fVxcbitcXHRrZnJlZShlbnRyaWVzKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBtZXRhZnNfZ2V0X29wdGlvbl92YWx1ZXMoc3RydWN0IGZpbGUgKmJhc2UsIGNvbnN0IGNoYXIgKm9wdGlvbl9uYW1lLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IG1ldGFmc19vcHRpb25fZW50cnkgKiplbnRyaWVzX291dCxcXG4rXFx0XFx0XFx0XFx0ICAgIGludCAqY291bnRfb3V0KVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoID0gXFx1MDAyNmJhc2UtXFx1MDAzZWZfcGF0aDtcXG4rXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHBhdGgtXFx1MDAzZW1udC1cXHUwMDNlbW50X3NiO1xcbitcXHRzdHJ1Y3QgbWV0YWZzX2NvbGxlY3RfY3R4IGNvbGxlY3RfY3R4ID0ge1xcbitcXHRcXHQuY3R4LmRhdGEgPSBcXHUwMDI2Y29sbGVjdF9jdHgsXFxuK1xcdFxcdC5jdHguYWN0b3IgPSBtZXRhZnNfY29sbGVjdF9vcHRpb24sXFxuK1xcdFxcdC50YXJnZXRfbmFtZSA9IG9wdGlvbl9uYW1lLFxcbitcXHRcXHQuc2IgPSBzYixcXG4rXFx0XFx0LmlzX3NvdXJjZSA9ICFzdHJjbXAob3B0aW9uX25hbWUsIFxcXCJzb3VyY2VcXFwiKSxcXG4rXFx0fTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChzYi1cXHUwMDNlc19vcC1cXHUwMDNlZ2V0X29wdGlvbnMpIHtcXG4rXFx0XFx0cmV0ID0gc2ItXFx1MDAzZXNfb3AtXFx1MDAzZWdldF9vcHRpb25zKFxcdTAwMjZjb2xsZWN0X2N0eC5jdHgsIHBhdGgtXFx1MDAzZW1udC1cXHUwMDNlbW50X3Jvb3QpO1xcbitcXHRcXHRpZiAocmV0IHx8IGNvbGxlY3RfY3R4LmVycikge1xcbitcXHRcXHRcXHRtZXRhZnNfZnJlZV9lbnRyaWVzKGNvbGxlY3RfY3R4LmVudHJpZXMsIGNvbGxlY3RfY3R4LmNvdW50KTtcXG4rXFx0XFx0XFx0cmV0dXJuIHJldCA/OiBjb2xsZWN0X2N0eC5lcnI7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0Lyogc3BlY2lhbCBjYXNlOiBhZGQgXFxcInNvdXJjZVxcXCIgb3B0aW9uIGlmIGZpbGVzeXN0ZW0gZGlkbid0IGFkZCBvbmUqL1xcbitcXHRpZiAoIWNvbGxlY3RfY3R4LmNvdW50IFxcdTAwMjZcXHUwMDI2IGNvbGxlY3RfY3R4LmlzX3NvdXJjZSkge1xcbitcXHRcXHRzdHJ1Y3QgbWV0YWZzX29wdGlvbl9lbnRyeSAqZW50IF9fZnJlZShrZnJlZSkgPSBremFsbG9jX29iaigqZW50KTtcXG4rXFxuK1xcdFxcdGlmICghZW50KVxcbitcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdFxcdGVudC1cXHUwMDNldmFsdWUgPSBrc3RyZHVwKHNiLVxcdTAwM2VzX2Rldm5hbWUsIEdGUF9LRVJORUwpO1xcbitcXHRcXHRpZiAoIWVudC1cXHUwMDNldmFsdWUpXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0XFx0Y29sbGVjdF9jdHguZW50cmllcyA9IG5vX2ZyZWVfcHRyKGVudCk7XFxuK1xcdFxcdGNvbGxlY3RfY3R4LmNvdW50ID0gMTtcXG4rXFx0fVxcbitcXG4rXFx0KmVudHJpZXNfb3V0ID0gY29sbGVjdF9jdHguZW50cmllcztcXG4rXFx0KmNvdW50X291dCA9IGNvbGxlY3RfY3R4LmNvdW50O1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLypcXG4rICogbWV0YWZzIHN5bWxpbmsgb3BlcmF0aW9uc1xcbisgKi9cXG4rc3RhdGljIGNvbnN0IGNoYXIgKm1ldGFmc19nZXRfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBkZWxheWVkX2NhbGwgKmRvbmUpXFxuK3tcXG4rXFx0c3RydWN0IG1ldGFmc19kZW50cnlfaW5mbyAqaW5mbztcXG4rXFxuK1xcdGlmICghZGVudHJ5KVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUNISUxEKTtcXG4rXFxuK1xcdGluZm8gPSBkZW50cnktXFx1MDAzZWRfZnNkYXRhO1xcbitcXHRpZiAoaW5mby1cXHUwMDNlc3ltbGluay5wYXRoLm1udCkge1xcbitcXHRcXHRpbnQgZXJyb3I7XFxuK1xcbitcXHRcXHRwYXRoX2dldChcXHUwMDI2aW5mby1cXHUwMDNlc3ltbGluay5wYXRoKTtcXG4rXFx0XFx0ZXJyb3IgPSBuZF9qdW1wX2xpbmsoXFx1MDAyNmluZm8tXFx1MDAzZXN5bWxpbmsucGF0aCk7XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGVycm9yKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIEVSUl9QVFIoLUVMT09QKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBtZXRhZnNfcmVhZGxpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyIF9fdXNlciAqYnVmZmVyLFxcbitcXHRcXHRcXHQgICBpbnQgYnVmbGVuKVxcbit7XFxuK1xcdHN0cnVjdCBtZXRhZnNfZGVudHJ5X2luZm8gKmluZm8gPSBkZW50cnktXFx1MDAzZWRfZnNkYXRhO1xcbitcXHRjb25zdCBjaGFyICp2YWx1ZSA9IGluZm8tXFx1MDAzZXN5bWxpbmsudmFsdWU7XFxuK1xcbitcXHRpZiAoIXZhbHVlKVxcbitcXHRcXHR2YWx1ZSA9IFxcXCJcXFwiO1xcbitcXG4rXFx0cmV0dXJuIHJlYWRsaW5rX2NvcHkoYnVmZmVyLCBidWZsZW4sIHZhbHVlLCBzdHJsZW4odmFsdWUpKTtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1ldGFmc19zeW1saW5rX2lvcHMgPSB7XFxuK1xcdC5nZXRfbGlua1xcdD0gbWV0YWZzX2dldF9saW5rLFxcbitcXHQucmVhZGxpbmtcXHQ9IG1ldGFmc19yZWFkbGluayxcXG4rfTtcXG4rXFxuKy8qXFxuKyAqIERlbnRyeSBvcGVyYXRpb25zIC0gY2xlYW51cFxcbisgKi9cXG4rc3RhdGljIHZvaWQgbWV0YWZzX2RfcmVsZWFzZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuK3tcXG4rXFx0c3RydWN0IG1ldGFmc19kZW50cnlfaW5mbyAqaW5mbyA9IGRlbnRyeS1cXHUwMDNlZF9mc2RhdGE7XFxuK1xcbitcXHRpZiAoIWluZm8pXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHN3aXRjaCAoaW5mby1cXHUwMDNldHlwZSkge1xcbitcXHRjYXNlIE1FVEFGU19ST09UOlxcbitcXHRcXHRmcHV0KGluZm8tXFx1MDAzZXJvb3QuYmFzZSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE1FVEFGU19PUFRJT05fVkFMVUVTOlxcbitcXHRcXHRtZXRhZnNfZnJlZV9lbnRyaWVzKGluZm8tXFx1MDAzZW9wdF92YWx1ZXMuZW50cmllcyxcXG4rXFx0XFx0XFx0XFx0ICAgIGluZm8tXFx1MDAzZW9wdF92YWx1ZXMuY291bnQpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBNRVRBRlNfU1lNTElOSzpcXG4rXFx0XFx0a2ZyZWUoaW5mby1cXHUwMDNlc3ltbGluay52YWx1ZSk7XFxuK1xcdFxcdGlmIChpbmZvLVxcdTAwM2VzeW1saW5rLnBhdGgubW50KVxcbitcXHRcXHRcXHRwYXRoX3B1dChcXHUwMDI2aW5mby1cXHUwMDNlc3ltbGluay5wYXRoKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdFdBUk5fT04oMSk7XFxuK1xcdH1cXG4rXFx0a2ZyZWUoaW5mbyk7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgbWV0YWZzX2RlbnRyeV9vcHMgPSB7XFxuK1xcdC5kX3JlbGVhc2UgPSBtZXRhZnNfZF9yZWxlYXNlLFxcbit9O1xcbitcXG4rLypcXG4rICogbWV0YWZzIGRpcmVjdG9yeSBvcGVyYXRpb25zIC0gZm9yd2FyZCBkZWNsYXJhdGlvbnNcXG4rICovXFxuK3N0YXRpYyBzdHJ1Y3QgZmlsZSAqbWV0YWZzX2dldF9iYXNlX2ZpbGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcXG4rc3RhdGljIHN0cnVjdCBkZW50cnkgKm1ldGFmc19yb290X2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbitcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IGZsYWdzKTtcXG4rc3RhdGljIHN0cnVjdCBkZW50cnkgKm1ldGFmc19tb3VudF9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4rXFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xcbitzdGF0aWMgc3RydWN0IGRlbnRyeSAqbWV0YWZzX29wdGlvbnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xcbitzdGF0aWMgc3RydWN0IGRlbnRyeSAqbWV0YWZzX29wdGlvbl92YWx1ZXNfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IGZsYWdzKTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBtZXRhZnNfcm9vdF9kaXJfaW9wcyA9IHtcXG4rXFx0Lmxvb2t1cFxcdFxcdD0gbWV0YWZzX3Jvb3RfbG9va3VwLFxcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1ldGFmc19tb3VudF9kaXJfaW9wcyA9IHtcXG4rXFx0Lmxvb2t1cFxcdFxcdD0gbWV0YWZzX21vdW50X2xvb2t1cCxcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBtZXRhZnNfb3B0aW9uc19kaXJfaW9wcyA9IHtcXG4rXFx0Lmxvb2t1cFxcdFxcdD0gbWV0YWZzX29wdGlvbnNfbG9va3VwLFxcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1ldGFmc19vcHRpb25fdmFsdWVzX2Rpcl9pb3BzID0ge1xcbitcXHQubG9va3VwXFx0XFx0PSBtZXRhZnNfb3B0aW9uX3ZhbHVlc19sb29rdXAsXFxuK307XFxuK1xcbisvKlxcbisgKiBDcmVhdGUgYSBuZXcgaW5vZGUgaW4gbWV0YWZzXFxuKyAqL1xcbitzdGF0aWMgc3RydWN0IGlub2RlICptZXRhZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVtb2RlX3QgbW9kZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgKmlvcHMpXFxuK3tcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZSA9IG5ld19pbm9kZShzYik7XFxuK1xcbitcXHRpZiAoIWlub2RlKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdGlub2RlLVxcdTAwM2VpX2lubyA9IGdldF9uZXh0X2lubygpO1xcbitcXHRpbm9kZS1cXHUwMDNlaV9tb2RlID0gbW9kZTtcXG4rXFx0c2ltcGxlX2lub2RlX2luaXRfdHMoaW5vZGUpO1xcbitcXG4rXFx0aWYgKFNfSVNESVIobW9kZSkpIHtcXG4rXFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBpb3BzO1xcbitcXHRcXHRpbmNfbmxpbmsoaW5vZGUpO1xcbitcXHR9IGVsc2UgaWYgKFNfSVNMTksobW9kZSkpIHtcXG4rXFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2bWV0YWZzX3N5bWxpbmtfaW9wcztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGlub2RlO1xcbit9XFxuK1xcbisvKlxcbisgKiBMb29rdXAgaW4gcm9vdCBkaXJlY3RvcnkgKC8pXFxuKyAqIE9ubHkgXFxcIm1vdW50XFxcIiBpcyB2YWxpZCBoZXJlXFxuKyAqL1xcbitzdGF0aWMgc3RydWN0IGRlbnRyeSAqbWV0YWZzX3Jvb3RfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuK1xcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuK3tcXG4rXFx0Y29uc3QgY2hhciAqbmFtZSA9IGRlbnRyeS1cXHUwMDNlZF9uYW1lLm5hbWU7XFxuK1xcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuK1xcbitcXHRpZiAoc3RyY21wKG5hbWUsIFxcXCJtb3VudFxcXCIpICE9IDApXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xcbitcXG4rXFx0aW5vZGUgPSBtZXRhZnNfZ2V0X2lub2RlKGRpci1cXHUwMDNlaV9zYiwgU19JRkRJUiB8IDA1NTUsIFxcdTAwMjZtZXRhZnNfbW91bnRfZGlyX2lvcHMpO1xcbitcXHRpZiAoIWlub2RlKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFxuK1xcdGRfYWRkKGRlbnRyeSwgaW5vZGUpO1xcbitcXHRkX21hcmtfZG9udGNhY2hlKGlub2RlKTtcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuKy8qXFxuKyAqIExvb2t1cCBpbiAvbW91bnQgZGlyZWN0b3J5XFxuKyAqIE9ubHkgXFxcIm9wdGlvbnNcXFwiIGlzIHZhbGlkIGhlcmVcXG4rICovXFxuK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICptZXRhZnNfbW91bnRfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuK1xcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IGZsYWdzKVxcbit7XFxuK1xcdGNvbnN0IGNoYXIgKm5hbWUgPSBkZW50cnktXFx1MDAzZWRfbmFtZS5uYW1lO1xcbitcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xcbitcXG4rXFx0aWYgKHN0cmNtcChuYW1lLCBcXFwib3B0aW9uc1xcXCIpICE9IDApXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xcbitcXG4rXFx0aW5vZGUgPSBtZXRhZnNfZ2V0X2lub2RlKGRpci1cXHUwMDNlaV9zYiwgU19JRkRJUiB8IDA1NTUsIFxcdTAwMjZtZXRhZnNfb3B0aW9uc19kaXJfaW9wcyk7XFxuK1xcdGlmICghaW5vZGUpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXG4rXFx0ZF9hZGQoZGVudHJ5LCBpbm9kZSk7XFxuK1xcdGRfbWFya19kb250Y2FjaGUoaW5vZGUpO1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rLypcXG4rICogTG9va3VwIGluIC9tb3VudC9vcHRpb25zIGRpcmVjdG9yeVxcbisgKiBDb2xsZWN0IHZhbHVlcyBmb3IgdGhlIHJlcXVlc3RlZCBvcHRpb24gbmFtZVxcbisgKi9cXG4rc3RhdGljIHN0cnVjdCBkZW50cnkgKm1ldGFmc19vcHRpb25zX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IGZsYWdzKVxcbit7XFxuK1xcdGNvbnN0IGNoYXIgKnRhcmdldF9uYW1lID0gZGVudHJ5LVxcdTAwM2VkX25hbWUubmFtZTtcXG4rXFx0c3RydWN0IGZpbGUgKmJhc2U7XFxuK1xcdHN0cnVjdCBtZXRhZnNfZGVudHJ5X2luZm8gKmluZm87XFxuK1xcdHN0cnVjdCBtZXRhZnNfb3B0aW9uX2VudHJ5ICplbnRyaWVzID0gTlVMTDtcXG4rXFx0aW50IGNvdW50ID0gMDtcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGJhc2UgPSBtZXRhZnNfZ2V0X2Jhc2VfZmlsZShkZW50cnktXFx1MDAzZWRfcGFyZW50KTtcXG4rXFx0aWYgKCFiYXNlKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcXG4rXFxuK1xcdHJldCA9IG1ldGFmc19nZXRfb3B0aW9uX3ZhbHVlcyhiYXNlLCB0YXJnZXRfbmFtZSwgXFx1MDAyNmVudHJpZXMsIFxcdTAwMjZjb3VudCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuK1xcbitcXHRpZiAoY291bnQgPT0gMCkge1xcbitcXHRcXHRrZnJlZShlbnRyaWVzKTtcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XFxuK1xcdH1cXG4rXFxuK1xcdGluZm8gPSBremFsbG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWluZm8pIHtcXG4rXFx0XFx0bWV0YWZzX2ZyZWVfZW50cmllcyhlbnRyaWVzLCBjb3VudCk7XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXHR9XFxuK1xcbitcXHRpbmZvLVxcdTAwM2V0eXBlID0gTUVUQUZTX09QVElPTl9WQUxVRVM7XFxuK1xcdGluZm8tXFx1MDAzZW9wdF92YWx1ZXMuZW50cmllcyA9IGVudHJpZXM7XFxuK1xcdGluZm8tXFx1MDAzZW9wdF92YWx1ZXMuY291bnQgPSBjb3VudDtcXG4rXFxuK1xcdGlub2RlID0gbWV0YWZzX2dldF9pbm9kZShkaXItXFx1MDAzZWlfc2IsIFNfSUZESVIgfCAwNTU1LCBcXHUwMDI2bWV0YWZzX29wdGlvbl92YWx1ZXNfZGlyX2lvcHMpO1xcbitcXHRpZiAoIWlub2RlKSB7XFxuK1xcdFxcdG1ldGFmc19mcmVlX2VudHJpZXMoZW50cmllcywgY291bnQpO1xcbitcXHRcXHRrZnJlZShpbmZvKTtcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuK1xcdH1cXG4rXFxuK1xcdGRlbnRyeS1cXHUwMDNlZF9mc2RhdGEgPSBpbmZvO1xcbitcXHRkX2FkZChkZW50cnksIGlub2RlKTtcXG4rXFx0ZF9tYXJrX2RvbnRjYWNoZShpbm9kZSk7XFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbisvKlxcbisgKiBMb29rdXAgaW4gb3B0aW9uLXNwZWNpZmljIGRpcmVjdG9yeSAoZS5nLiwgL21vdW50L29wdGlvbnMvbG93ZXJkaXIvKVxcbisgKiBSZXR1cm4gbnVtYmVyZWQgZW50cmllcyAoMCwgMSwgMiwgLi4uKSBhcyBzeW1saW5rc1xcbisgKi9cXG4rc3RhdGljIHN0cnVjdCBkZW50cnkgKm1ldGFmc19vcHRpb25fdmFsdWVzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IGZsYWdzKVxcbit7XFxuK1xcdGNvbnN0IGNoYXIgKnRhcmdldF9uYW1lID0gZGVudHJ5LVxcdTAwM2VkX25hbWUubmFtZTtcXG4rXFx0c3RydWN0IG1ldGFmc19kZW50cnlfaW5mbyAqcGFyZW50X2luZm8sICppbmZvO1xcbitcXHRzdHJ1Y3QgbWV0YWZzX29wdGlvbl9lbnRyeSAqZW50cnk7XFxuK1xcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuK1xcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRwYXJlbnRfaW5mbyA9IGRlbnRyeS1cXHUwMDNlZF9wYXJlbnQtXFx1MDAzZWRfZnNkYXRhO1xcbitcXHRpZiAoV0FSTl9PTighcGFyZW50X2luZm8gfHwgcGFyZW50X2luZm8tXFx1MDAzZXR5cGUgIT0gTUVUQUZTX09QVElPTl9WQUxVRVMpKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcXG4rXFxuK1xcdGlmICh0YXJnZXRfbmFtZVswXSA9PSAnMCcgXFx1MDAyNlxcdTAwMjYgdGFyZ2V0X25hbWVbMV0pXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xcbitcXG4rXFx0ZXJyID0ga3N0cnRvdWwodGFyZ2V0X25hbWUsIDEwLCBcXHUwMDI2aW5kZXgpO1xcbitcXHRpZiAoZXJyIHx8IGluZGV4IFxcdTAwM2U9IHBhcmVudF9pbmZvLVxcdTAwM2VvcHRfdmFsdWVzLmNvdW50KVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcXG4rXFxuK1xcdGVudHJ5ID0gXFx1MDAyNnBhcmVudF9pbmZvLVxcdTAwM2VvcHRfdmFsdWVzLmVudHJpZXNbaW5kZXhdO1xcbitcXG4rXFx0aW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghaW5mbylcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuK1xcbitcXHRpbmZvLVxcdTAwM2V0eXBlID0gTUVUQUZTX1NZTUxJTks7XFxuK1xcdGlmIChlbnRyeS1cXHUwMDNldmFsdWUpIHtcXG4rXFx0XFx0aW5mby1cXHUwMDNlc3ltbGluay52YWx1ZSA9IGtzdHJkdXAoZW50cnktXFx1MDAzZXZhbHVlLCBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VzeW1saW5rLnZhbHVlKSB7XFxuK1xcdFxcdFxcdGtmcmVlKGluZm8pO1xcbitcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdGlmIChlbnRyeS1cXHUwMDNlcGF0aC5tbnQpIHtcXG4rXFx0XFx0aW5mby1cXHUwMDNlc3ltbGluay5wYXRoID0gZW50cnktXFx1MDAzZXBhdGg7XFxuK1xcdFxcdHBhdGhfZ2V0KFxcdTAwMjZpbmZvLVxcdTAwM2VzeW1saW5rLnBhdGgpO1xcbitcXHR9XFxuK1xcbitcXHRpbm9kZSA9IG1ldGFmc19nZXRfaW5vZGUoZGlyLVxcdTAwM2VpX3NiLCBTX0lGTE5LIHwgMDc3NywgTlVMTCk7XFxuK1xcdGlmICghaW5vZGUpIHtcXG4rXFx0XFx0a2ZyZWUoaW5mby1cXHUwMDNlc3ltbGluay52YWx1ZSk7XFxuK1xcdFxcdGlmIChpbmZvLVxcdTAwM2VzeW1saW5rLnBhdGgubW50KVxcbitcXHRcXHRcXHRwYXRoX3B1dChcXHUwMDI2aW5mby1cXHUwMDNlc3ltbGluay5wYXRoKTtcXG4rXFx0XFx0a2ZyZWUoaW5mbyk7XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXHR9XFxuK1xcbitcXHRkZW50cnktXFx1MDAzZWRfZnNkYXRhID0gaW5mbztcXG4rXFx0ZF9hZGQoZGVudHJ5LCBpbm9kZSk7XFxuK1xcdGRfbWFya19kb250Y2FjaGUoaW5vZGUpO1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rLypcXG4rICogSGVscGVyIHRvIGdldCBiYXNlIGZpbGUgZnJvbSBhbnkgbWV0YWZzIGRlbnRyeVxcbisgKi9cXG4rc3RhdGljIHN0cnVjdCBmaWxlICptZXRhZnNfZ2V0X2Jhc2VfZmlsZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuK3tcXG4rXFx0d2hpbGUgKGRlbnRyeSkge1xcbitcXHRcXHRzdHJ1Y3QgbWV0YWZzX2RlbnRyeV9pbmZvICppbmZvID0gZGVudHJ5LVxcdTAwM2VkX2ZzZGF0YTtcXG4rXFxuK1xcdFxcdGlmIChpbmZvIFxcdTAwMjZcXHUwMDI2IGluZm8tXFx1MDAzZXR5cGUgPT0gTUVUQUZTX1JPT1QpXFxuK1xcdFxcdFxcdHJldHVybiBpbmZvLVxcdTAwM2Vyb290LmJhc2U7XFxuK1xcdFxcdGlmIChkZW50cnkgPT0gZGVudHJ5LVxcdTAwM2VkX3BhcmVudClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGRlbnRyeSA9IGRlbnRyeS1cXHUwMDNlZF9wYXJlbnQ7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuKy8qXFxuKyAqIENyZWF0ZSB0aGUgcm9vdCBkaXJlY3Rvcnkgc3RydWN0dXJlIGZvciBhIG1ldGFkYXRhIG9wZW5cXG4rICovXFxuK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICptZXRhZnNfY3JlYXRlX3Jvb3Qoc3RydWN0IGZpbGUgKmJhc2UpXFxuK3tcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZTtcXG4rXFx0c3RydWN0IGRlbnRyeSAqcm9vdDtcXG4rXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IG1ldGFmc19tbnQtXFx1MDAzZW1udF9zYjtcXG4rXFx0c3RydWN0IG1ldGFmc19kZW50cnlfaW5mbyAqaW5mbztcXG4rXFxuK1xcdGluZm8gPSBremFsbG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWluZm8pXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXG4rXFx0aW5mby1cXHUwMDNldHlwZSA9IE1FVEFGU19ST09UO1xcbitcXHRpbmZvLVxcdTAwM2Vyb290LmJhc2UgPSBnZXRfZmlsZShiYXNlKTtcXG4rXFxuK1xcdGlub2RlID0gbWV0YWZzX2dldF9pbm9kZShzYiwgU19JRkRJUiB8IDA1NTUsIFxcdTAwMjZtZXRhZnNfcm9vdF9kaXJfaW9wcyk7XFxuK1xcdGlmICghaW5vZGUpIHtcXG4rXFx0XFx0ZnB1dChpbmZvLVxcdTAwM2Vyb290LmJhc2UpO1xcbitcXHRcXHRrZnJlZShpbmZvKTtcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJvb3QgPSBkX2FsbG9jX2Fub24oc2IpO1xcbitcXHRpZiAoIXJvb3QpIHtcXG4rXFx0XFx0aXB1dChpbm9kZSk7XFxuK1xcdFxcdGZwdXQoaW5mby1cXHUwMDNlcm9vdC5iYXNlKTtcXG4rXFx0XFx0a2ZyZWUoaW5mbyk7XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXHR9XFxuK1xcbitcXHQvKiBTdG9yZSB0aGUgaW5mbyBpbiBkX2ZzZGF0YSBiZWZvcmUgaW5zdGFudGlhdGluZyAqL1xcbitcXHRyb290LVxcdTAwM2VkX2ZzZGF0YSA9IGluZm87XFxuK1xcdGRfaW5zdGFudGlhdGUocm9vdCwgaW5vZGUpO1xcbitcXHRkX21hcmtfZG9udGNhY2hlKGlub2RlKTtcXG4rXFxuK1xcdHJldHVybiByb290O1xcbit9XFxuK1xcbisvKlxcbisgKiBHZXQgbWV0YWRhdGEgcm9vdCBwYXRoIGZvciBhIGJhc2UgZmlsZS5cXG4rICpcXG4rICogVGhpcyBpcyBjYWxsZWQgZnJvbSBwYXRoX2luaXQoKSB3aGVuIE9fQUxUIGlzIHVzZWQuXFxuKyAqIEl0IHJldHVybnMgYSBwYXRoIGluIHRoZSBtZXRhZnMgdGhhdCBzZXJ2ZXMgYXMgdGhlIHJvb3RcXG4rICogZm9yIHRoZSBtZXRhZGF0YSBsb29rdXAuXFxuKyAqL1xcbitpbnQgbWV0YWZzX2dldF9yb290KHN0cnVjdCBmaWxlICpiYXNlLCBzdHJ1Y3QgcGF0aCAqcGF0aClcXG4re1xcbitcXHRzdHJ1Y3QgZGVudHJ5ICpyb290O1xcbitcXG4rXFx0aWYgKCFiYXNlKVxcbitcXHRcXHRyZXR1cm4gLUVCQURGO1xcbitcXG4rXFx0LyogQ3JlYXRlIHRoZSBtZXRhZGF0YSByb290IGZvciB0aGlzIGJhc2UgZmlsZSAqL1xcbitcXHRyb290ID0gbWV0YWZzX2NyZWF0ZV9yb290KGJhc2UpO1xcbitcXHRpZiAoSVNfRVJSKHJvb3QpKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihyb290KTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFJldHVybiB0aGUgcGF0aCB0byB0aGUgbWV0YWRhdGEgcm9vdC5cXG4rXFx0ICogTm9ybWFsIFZGUyBsb29rdXAgd2lsbCB0YWtlIG92ZXIgZnJvbSBoZXJlLlxcbitcXHQgKi9cXG4rXFx0cGF0aC1cXHUwMDNlbW50ID0gbW50Z2V0KG1ldGFmc19tbnQpO1xcbitcXHRwYXRoLVxcdTAwM2VkZW50cnkgPSByb290O1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobWV0YWZzX2dldF9yb290KTtcXG4rXFxuK3N0YXRpYyBpbnQgX19pbml0IG1ldGFmc19pbml0KHZvaWQpXFxuK3tcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGVyciA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oXFx1MDAyNm1ldGFmc190eXBlKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdG1ldGFmc19tbnQgPSBrZXJuX21vdW50KFxcdTAwMjZtZXRhZnNfdHlwZSk7XFxuK1xcdGlmIChJU19FUlIobWV0YWZzX21udCkpIHtcXG4rXFx0XFx0ZXJyID0gUFRSX0VSUihtZXRhZnNfbW50KTtcXG4rXFx0XFx0dW5yZWdpc3Rlcl9maWxlc3lzdGVtKFxcdTAwMjZtZXRhZnNfdHlwZSk7XFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFx0c2V0X2RlZmF1bHRfZF9vcChtZXRhZnNfbW50LVxcdTAwM2VtbnRfc2IsIFxcdTAwMjZtZXRhZnNfZGVudHJ5X29wcyk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rZnNfaW5pdGNhbGwobWV0YWZzX2luaXQpO1xcbmRpZmYgLS1naXQgYS9mcy9tZXRhZnMvbWV0YWZzLmggYi9mcy9tZXRhZnMvbWV0YWZzLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5kMjU3NzE0MjYwYTdmYlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9mcy9tZXRhZnMvbWV0YWZzLmhcXG5AQCAtMCwwICsxLDE1IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuKyNpZm5kZWYgX0xJTlVYX01FVEFGU19IXFxuKyNkZWZpbmUgX0xJTlVYX01FVEFGU19IXFxuK1xcbitzdHJ1Y3QgcGF0aDtcXG4rc3RydWN0IGZpbGU7XFxuK1xcbisvKlxcbisgKiBHZXQgbWV0YWRhdGEgcm9vdCBwYXRoIGZvciBhIGJhc2UgZmlsZS5cXG4rICogQ2FsbGVkIGZyb20gcGF0aF9pbml0KCkgd2hlbiBPX0FMVCBmbGFnIGlzIHVzZWQuXFxuKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIHdpdGggcGF0aCBmaWxsZWQgaW4sIC1lcnJubyBvbiBlcnJvci5cXG4rICovXFxuK2ludCBtZXRhZnNfZ2V0X3Jvb3Qoc3RydWN0IGZpbGUgKmJhc2UsIHN0cnVjdCBwYXRoICpwYXRoKTtcXG4rXFxuKyNlbmRpZiAvKiBfTElOVVhfTUVUQUZTX0ggKi9cXG5kaWZmIC0tZ2l0IGEvZnMvbW91bnQuaCBiL2ZzL21vdW50LmhcXG5pbmRleCA5NGZjYzMwNmQyMWU3ZC4uNjlhOTUzYmMxMTJiMzYgMTAwNjQ0XFxuLS0tIGEvZnMvbW91bnQuaFxcbisrKyBiL2ZzL21vdW50LmhcXG5AQCAtNjUsNyArNjUsNiBAQCBzdHJ1Y3QgbW91bnQge1xcbiBcXHRzdHJ1Y3QgbW91bnQgKiBfX2FsaWduZWQoMSkgKm1udF9wcHJldl9mb3Jfc2I7XFxuIFxcdFxcdFxcdFxcdFxcdC8qIGV4Y2VwdCB0aGF0IExTQiBvZiBwcHJldiBpcyBzdG9sZW4gKi9cXG4gI2RlZmluZSBXUklURV9IT0xEIDFcXHRcXHRcXHQvKiAuLi4gZm9yIHVzZSBieSBtbnRfaG9sZF93cml0ZXJzKCkgKi9cXG4tXFx0Y29uc3QgY2hhciAqbW50X2Rldm5hbWU7XFx0LyogTmFtZSBvZiBkZXZpY2UgZS5nLiAvZGV2L2Rzay9oZGExICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgbW50X2xpc3Q7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgbW50X2V4cGlyZTtcXHQvKiBsaW5rIGluIGZzLXNwZWNpZmljIGV4cGlyeSBsaXN0ICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgbW50X3NoYXJlO1xcdC8qIGNpcmN1bGFyIGxpc3Qgb2Ygc2hhcmVkIG1vdW50cyAqL1xcbmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuY1xcbmluZGV4IDE5Y2U0M2M5YTZlNjYyLi40MzdhMTRjNDMyZTY3YiAxMDA2NDRcXG4tLS0gYS9mcy9uYW1laS5jXFxuKysrIGIvZnMvbmFtZWkuY1xcbkBAIC00NSw2ICs0NSw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIm1vdW50LmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJtZXRhZnMvbWV0YWZzLmhcXFwiXFxuIFxcbiAvKiBbRmViLTE5OTcgVC4gU2Nob2ViZWwtVGhldWVyXVxcbiAgKiBGdW5kYW1lbnRhbCBjaGFuZ2VzIGluIHRoZSBwYXRobmFtZSBsb29rdXAgbWVjaGFuaXNtcyAobmFtZWkpXFxuQEAgLTI3NTMsNiArMjc1NCwyMSBAQCBzdGF0aWMgY29uc3QgY2hhciAqcGF0aF9pbml0KHN0cnVjdCBuYW1laWRhdGEgKm5kLCB1bnNpZ25lZCBmbGFncylcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XFxuIFxcdFxcdH1cXG4gXFxuK1xcdFxcdGlmICh1bmxpa2VseShmbGFncyBcXHUwMDI2IExPT0tVUF9BTFQpKSB7XFxuK1xcdFxcdFxcdGlmIChmbGFncyBcXHUwMDI2IExPT0tVUF9SQ1UpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FQ0hJTEQpO1xcbitcXG4rXFx0XFx0XFx0LyogSGFuZGxlIE9fQUxUOiBqdW1wIHRvIG1ldGFmcyByb290ICovXFxuK1xcdFxcdFxcdGVycm9yID0gbWV0YWZzX2dldF9yb290KGZkX2ZpbGUoZiksIFxcdTAwMjZuZC1cXHUwMDNlcGF0aCk7XFxuK1xcdFxcdFxcdGlmIChlcnJvcilcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyb3IpO1xcbitcXG4rXFx0XFx0XFx0bmQtXFx1MDAzZWlub2RlID0gbmQtXFx1MDAzZXBhdGguZGVudHJ5LVxcdTAwM2VkX2lub2RlO1xcbitcXHRcXHRcXHRuZC1cXHUwMDNlc3RhdGUgfD0gTkRfSlVNUEVEO1xcbitcXG4rXFx0XFx0XFx0cmV0dXJuIHM7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdGRlbnRyeSA9IGZkX2ZpbGUoZiktXFx1MDAzZWZfcGF0aC5kZW50cnk7XFxuIFxcbiBcXHRcXHRpZiAoKnMgXFx1MDAyNlxcdTAwMjYgdW5saWtlbHkoIWRfY2FuX2xvb2t1cChkZW50cnkpKSlcXG5kaWZmIC0tZ2l0IGEvZnMvbmFtZXNwYWNlLmMgYi9mcy9uYW1lc3BhY2UuY1xcbmluZGV4IDNkNWNkNWJmM2IwNTM3Li42MmNjNzFjNDAxYTJhYyAxMDA2NDRcXG4tLS0gYS9mcy9uYW1lc3BhY2UuY1xcbisrKyBiL2ZzL25hbWVzcGFjZS5jXFxuQEAgLTI4Miw3ICsyODIsNyBAQCBpbnQgbW50X2dldF9jb3VudChzdHJ1Y3QgbW91bnQgKm1udClcXG4gI2VuZGlmXFxuIH1cXG4gXFxuLXN0YXRpYyBzdHJ1Y3QgbW91bnQgKmFsbG9jX3Zmc21udChjb25zdCBjaGFyICpuYW1lKVxcbitzdGF0aWMgc3RydWN0IG1vdW50ICphbGxvY192ZnNtbnQodm9pZClcXG4ge1xcbiBcXHRzdHJ1Y3QgbW91bnQgKm1udCA9IGttZW1fY2FjaGVfemFsbG9jKG1udF9jYWNoZSwgR0ZQX0tFUk5FTCk7XFxuIFxcdGlmIChtbnQpIHtcXG5AQCAtMjkyLDE4ICsyOTIsMTAgQEAgc3RhdGljIHN0cnVjdCBtb3VudCAqYWxsb2NfdmZzbW50KGNvbnN0IGNoYXIgKm5hbWUpXFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdGdvdG8gb3V0X2ZyZWVfY2FjaGU7XFxuIFxcbi1cXHRcXHRpZiAobmFtZSlcXG4tXFx0XFx0XFx0bW50LVxcdTAwM2VtbnRfZGV2bmFtZSA9IGtzdHJkdXBfY29uc3QobmFtZSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0IEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuLVxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0bW50LVxcdTAwM2VtbnRfZGV2bmFtZSA9IFxcXCJub25lXFxcIjtcXG4tXFx0XFx0aWYgKCFtbnQtXFx1MDAzZW1udF9kZXZuYW1lKVxcbi1cXHRcXHRcXHRnb3RvIG91dF9mcmVlX2lkO1xcbi1cXG4gI2lmZGVmIENPTkZJR19TTVBcXG4gXFx0XFx0bW50LVxcdTAwM2VtbnRfcGNwID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBtbnRfcGNwKTtcXG4gXFx0XFx0aWYgKCFtbnQtXFx1MDAzZW1udF9wY3ApXFxuLVxcdFxcdFxcdGdvdG8gb3V0X2ZyZWVfZGV2bmFtZTtcXG4rXFx0XFx0XFx0Z290byBvdXRfZnJlZV9pZDtcXG4gXFxuIFxcdFxcdHRoaXNfY3B1X2FkZChtbnQtXFx1MDAzZW1udF9wY3AtXFx1MDAzZW1udF9jb3VudCwgMSk7XFxuICNlbHNlXFxuQEAgLTMyOCwxMSArMzIwLDkgQEAgc3RhdGljIHN0cnVjdCBtb3VudCAqYWxsb2NfdmZzbW50KGNvbnN0IGNoYXIgKm5hbWUpXFxuIFxcdHJldHVybiBtbnQ7XFxuIFxcbiAjaWZkZWYgQ09ORklHX1NNUFxcbi1vdXRfZnJlZV9kZXZuYW1lOlxcbi1cXHRrZnJlZV9jb25zdChtbnQtXFx1MDAzZW1udF9kZXZuYW1lKTtcXG4tI2VuZGlmXFxuIG91dF9mcmVlX2lkOlxcbiBcXHRtbnRfZnJlZV9pZChtbnQpO1xcbisjZW5kaWZcXG4gb3V0X2ZyZWVfY2FjaGU6XFxuIFxcdGttZW1fY2FjaGVfZnJlZShtbnRfY2FjaGUsIG1udCk7XFxuIFxcdHJldHVybiBOVUxMO1xcbkBAIC03MjUsNyArNzE1LDYgQEAgaW50IHNiX3ByZXBhcmVfcmVtb3VudF9yZWFkb25seShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiBzdGF0aWMgdm9pZCBmcmVlX3Zmc21udChzdHJ1Y3QgbW91bnQgKm1udClcXG4ge1xcbiBcXHRtbnRfaWRtYXBfcHV0KG1udF9pZG1hcChcXHUwMDI2bW50LVxcdTAwM2VtbnQpKTtcXG4tXFx0a2ZyZWVfY29uc3QobW50LVxcdTAwM2VtbnRfZGV2bmFtZSk7XFxuICNpZmRlZiBDT05GSUdfU01QXFxuIFxcdGZyZWVfcGVyY3B1KG1udC1cXHUwMDNlbW50X3BjcCk7XFxuICNlbmRpZlxcbkBAIC0xMTgwLDcgKzExNjksNyBAQCBzdHJ1Y3QgdmZzbW91bnQgKnZmc19jcmVhdGVfbW91bnQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbiBcXHRpZiAoIWZjLVxcdTAwM2Vyb290KVxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4gXFxuLVxcdG1udCA9IGFsbG9jX3Zmc21udChmYy1cXHUwMDNlc291cmNlKTtcXG4rXFx0bW50ID0gYWxsb2NfdmZzbW50KCk7XFxuIFxcdGlmICghbW50KVxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4gXFxuQEAgLTEyNDgsNyArMTIzNyw3IEBAIHN0YXRpYyBzdHJ1Y3QgbW91bnQgKmNsb25lX21udChzdHJ1Y3QgbW91bnQgKm9sZCwgc3RydWN0IGRlbnRyeSAqcm9vdCxcXG4gXFx0c3RydWN0IG1vdW50ICptbnQ7XFxuIFxcdGludCBlcnI7XFxuIFxcbi1cXHRtbnQgPSBhbGxvY192ZnNtbnQob2xkLVxcdTAwM2VtbnRfZGV2bmFtZSk7XFxuK1xcdG1udCA9IGFsbG9jX3Zmc21udCgpO1xcbiBcXHRpZiAoIW1udClcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuIFxcbkBAIC0yOTU3LDE2ICsyOTQ2LDEyIEBAIHN0YXRpYyBpbnQgZG9fY2hhbmdlX3R5cGUoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIGludCBtc19mbGFncylcXG4gc3RhdGljIGlubGluZSBib29sIG1heV9jb3B5X3RyZWUoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXFxuIHtcXG4gXFx0c3RydWN0IG1vdW50ICptbnQgPSByZWFsX21vdW50KHBhdGgtXFx1MDAzZW1udCk7XFxuLVxcdGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyAqZF9vcDtcXG4gXFxuIFxcdGlmIChjaGVja19tbnQobW50KSlcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbi1cXHRkX29wID0gcGF0aC1cXHUwMDNlZGVudHJ5LVxcdTAwM2VkX29wO1xcbi1cXHRpZiAoZF9vcCA9PSBcXHUwMDI2bnNfZGVudHJ5X29wZXJhdGlvbnMpXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbi1cXG4tXFx0aWYgKGRfb3AgPT0gXFx1MDAyNnBpZGZzX2RlbnRyeV9vcGVyYXRpb25zKVxcbitcXHQvKiBNYWtlIGFuIGV4Y2VwdGlvbiBmb3IgaW50ZXJuYWwgbW91bnRzIGV4cGxpY2l0bHkgbWFya2VkIGFzIGNsb25hYmxlICovXFxuK1xcdGlmIChtbnQtXFx1MDAzZW1udF9ucyA9PSBNTlRfTlNfSU5URVJOQUwgXFx1MDAyNlxcdTAwMjYgbW50LVxcdTAwM2VtbnQubW50X2ZsYWdzIFxcdTAwMjYgTU5UX0NMT05BQkxFKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuIFxcdGlmICghaXNfbW91bnRlZChwYXRoLVxcdTAwM2VtbnQpKVxcbkBAIC0zMjAxLDcgKzMxODYsNyBAQCBzdGF0aWMgc3RydWN0IGZpbGUgKnZmc19vcGVuX3RyZWUoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lLCB1bnNpZ25lZFxcbiBcXG4gXFx0aWYgKGZsYWdzIFxcdTAwMjYgfihBVF9FTVBUWV9QQVRIIHwgQVRfTk9fQVVUT01PVU5UIHwgQVRfUkVDVVJTSVZFIHxcXG4gXFx0XFx0ICAgICAgQVRfU1lNTElOS19OT0ZPTExPVyB8IE9QRU5fVFJFRV9DTE9ORSB8XFxuLVxcdFxcdCAgICAgIE9QRU5fVFJFRV9DTE9FWEVDIHwgT1BFTl9UUkVFX05BTUVTUEFDRSkpXFxuK1xcdFxcdCAgICAgIE9QRU5fVFJFRV9DTE9FWEVDIHwgT1BFTl9UUkVFX05BTUVTUEFDRSB8IE9QRU5fVFJFRV9BTFQpKVxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4gXFxuIFxcdGlmICgoZmxhZ3MgXFx1MDAyNiAoQVRfUkVDVVJTSVZFIHwgT1BFTl9UUkVFX0NMT05FIHwgT1BFTl9UUkVFX05BTUVTUEFDRSkpID09XFxuQEAgLTMyMTUsNiArMzIwMCw4IEBAIHN0YXRpYyBzdHJ1Y3QgZmlsZSAqdmZzX29wZW5fdHJlZShpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsIHVuc2lnbmVkXFxuIFxcdFxcdGxvb2t1cF9mbGFncyBcXHUwMDI2PSB+TE9PS1VQX0FVVE9NT1VOVDtcXG4gXFx0aWYgKGZsYWdzIFxcdTAwMjYgQVRfU1lNTElOS19OT0ZPTExPVylcXG4gXFx0XFx0bG9va3VwX2ZsYWdzIFxcdTAwMjY9IH5MT09LVVBfRk9MTE9XO1xcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiBPUEVOX1RSRUVfQUxUKVxcbitcXHRcXHRsb29rdXBfZmxhZ3MgfD0gTE9PS1VQX0FMVDtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIElmIHdlIGNyZWF0ZSBhIG5ldyBtb3VudCBuYW1lc3BhY2Ugd2l0aCB0aGUgY2xvbmVkIG1vdW50IHRyZWUgd2VcXG5AQCAtNTM4Nyw3ICs1Mzc0LDYgQEAgc3RhdGljIHZvaWQgc3RhdG1vdW50X2ZzX3N1YnR5cGUoc3RydWN0IGtzdGF0bW91bnQgKnMsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxcbiBzdGF0aWMgaW50IHN0YXRtb3VudF9zYl9zb3VyY2Uoc3RydWN0IGtzdGF0bW91bnQgKnMsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxcbiB7XFxuIFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBzLVxcdTAwM2VtbnQtXFx1MDAzZW1udF9zYjtcXG4tXFx0c3RydWN0IG1vdW50ICpyID0gcmVhbF9tb3VudChzLVxcdTAwM2VtbnQpO1xcbiBcXG4gXFx0aWYgKHNiLVxcdTAwM2VzX29wLVxcdTAwM2VzaG93X2Rldm5hbWUpIHtcXG4gXFx0XFx0c2l6ZV90IHN0YXJ0ID0gc2VxLVxcdTAwM2Vjb3VudDtcXG5AQCAtNTQwNSw3ICs1MzkxLDcgQEAgc3RhdGljIGludCBzdGF0bW91bnRfc2Jfc291cmNlKHN0cnVjdCBrc3RhdG1vdW50ICpzLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSlcXG4gXFx0XFx0c2VxLVxcdTAwM2Vjb3VudCA9IHN0YXJ0O1xcbiBcXHRcXHRzZXFfY29tbWl0KHNlcSwgc3RyaW5nX3VuZXNjYXBlX2lucGxhY2Uoc2VxLVxcdTAwM2VidWYgKyBzdGFydCwgVU5FU0NBUEVfT0NUQUwpKTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0c2VxX3B1dHMoc2VxLCByLVxcdTAwM2VtbnRfZGV2bmFtZSk7XFxuK1xcdFxcdHNlcV9wdXRzKHNlcSwgc2ItXFx1MDAzZXNfZGV2bmFtZSk7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtNTQxNiw2ICs1NDAyLDQwIEBAIHN0YXRpYyB2b2lkIHN0YXRtb3VudF9tbnRfbnNfaWQoc3RydWN0IGtzdGF0bW91bnQgKnMsIHN0cnVjdCBtbnRfbmFtZXNwYWNlICpucylcXG4gXFx0cy1cXHUwMDNlc20ubW50X25zX2lkID0gbnMtXFx1MDAzZW5zLm5zX2lkO1xcbiB9XFxuIFxcbit2b2lkIHNiX2FkZF9vcHRpb24oc3RydWN0IHNiX29wdF9jdHggKmN0eCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpXFxuK3tcXG4rXFx0c2JfYWRkX29wdGlvbl9wYXRoKGN0eCwgbmFtZSwgdmFsdWUsIE5VTEwpO1xcbit9XFxuK1xcbit2b2lkIHNiX2FkZF9vcHRpb25fcGF0aChzdHJ1Y3Qgc2Jfb3B0X2N0eCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSxcXG4rXFx0XFx0XFx0Y29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXFxuK3tcXG4rXFx0Y3R4LVxcdTAwM2VhY3RvcihjdHgsIG5hbWUsIHZhbHVlLCBwYXRoKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZG9fc2hvd19vcHRpb24oc3RydWN0IHNiX29wdF9jdHggKmN0eCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUsXFxuK1xcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKVxcbit7XFxuK1xcdGlmIChzdHJjbXAobmFtZSwgXFxcInNvdXJjZVxcXCIpICE9IDApXFxuK1xcdFxcdHNlcV9zaG93X29wdGlvbihjdHgtXFx1MDAzZWRhdGEsIG5hbWUsIHZhbHVlKTtcXG4rfVxcbitcXG4raW50IG1udF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCB2ZnNtb3VudCAqbW50KVxcbit7XFxuK1xcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBtbnQtXFx1MDAzZW1udF9zYjtcXG4rXFxuK1xcdGlmIChzYi1cXHUwMDNlc19vcC1cXHUwMDNlc2hvd19vcHRpb25zKVxcbitcXHRcXHRyZXR1cm4gc2ItXFx1MDAzZXNfb3AtXFx1MDAzZXNob3dfb3B0aW9ucyhzZXEsIG1udC1cXHUwMDNlbW50X3Jvb3QpO1xcbitcXG4rXFx0aWYgKHNiLVxcdTAwM2VzX29wLVxcdTAwM2VnZXRfb3B0aW9ucykge1xcbitcXHRcXHRzdHJ1Y3Qgc2Jfb3B0X2N0eCBjdHggPSB7IC5kYXRhID0gc2VxLCAuYWN0b3IgPSBkb19zaG93X29wdGlvbiB9O1xcbitcXG4rXFx0XFx0cmV0dXJuIHNiLVxcdTAwM2VzX29wLVxcdTAwM2VnZXRfb3B0aW9ucyhcXHUwMDI2Y3R4LCBtbnQtXFx1MDAzZW1udF9yb290KTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgc3RhdG1vdW50X21udF9vcHRzKHN0cnVjdCBrc3RhdG1vdW50ICpzLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSlcXG4ge1xcbiBcXHRzdHJ1Y3QgdmZzbW91bnQgKm1udCA9IHMtXFx1MDAzZW1udDtcXG5AQCAtNTQyNywxMSArNTQ0Nyw5IEBAIHN0YXRpYyBpbnQgc3RhdG1vdW50X21udF9vcHRzKHN0cnVjdCBrc3RhdG1vdW50ICpzLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSlcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuLVxcdGlmIChzYi1cXHUwMDNlc19vcC1cXHUwMDNlc2hvd19vcHRpb25zKSB7XFxuLVxcdFxcdGVyciA9IHNiLVxcdTAwM2VzX29wLVxcdTAwM2VzaG93X29wdGlvbnMoc2VxLCBtbnQtXFx1MDAzZW1udF9yb290KTtcXG4tXFx0XFx0aWYgKGVycilcXG4tXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4tXFx0fVxcbitcXHRlcnIgPSBtbnRfc2hvd19vcHRpb25zKHNlcSwgbW50KTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuIFxcdGlmICh1bmxpa2VseShzZXFfaGFzX292ZXJmbG93ZWQoc2VxKSkpXFxuIFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbkBAIC01NDc5LDE0ICs1NDk3LDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHN0YXRtb3VudF9vcHRfcHJvY2VzcyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc2l6ZV90IHN0YXJ0KVxcbiBzdGF0aWMgaW50IHN0YXRtb3VudF9vcHRfYXJyYXkoc3RydWN0IGtzdGF0bW91bnQgKnMsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxcbiB7XFxuIFxcdHN0cnVjdCB2ZnNtb3VudCAqbW50ID0gcy1cXHUwMDNlbW50O1xcbi1cXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gbW50LVxcdTAwM2VtbnRfc2I7XFxuIFxcdHNpemVfdCBzdGFydCA9IHNlcS1cXHUwMDNlY291bnQ7XFxuIFxcdGludCBlcnI7XFxuIFxcbi1cXHRpZiAoIXNiLVxcdTAwM2VzX29wLVxcdTAwM2VzaG93X29wdGlvbnMpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0ZXJyID0gc2ItXFx1MDAzZXNfb3AtXFx1MDAzZXNob3dfb3B0aW9ucyhzZXEsIG1udC1cXHUwMDNlbW50X3Jvb3QpO1xcbitcXHRlcnIgPSBtbnRfc2hvd19vcHRpb25zKHNlcSwgbW50KTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL25zZnMuYyBiL2ZzL25zZnMuY1xcbmluZGV4IGMzYjZhZTc2NTk0YTgxLi5lMTEwMTMwZDA3NjBlNSAxMDA2NDRcXG4tLS0gYS9mcy9uc2ZzLmNcXG4rKysgYi9mcy9uc2ZzLmNcXG5AQCAtNjg0LDYgKzY4NCw3IEBAIHZvaWQgX19pbml0IG5zZnNfaW5pdCh2b2lkKVxcbiBcXHRpZiAoSVNfRVJSKG5zZnNfbW50KSlcXG4gXFx0XFx0cGFuaWMoXFxcImNhbid0IHNldCBuc2ZzIHVwXFxcXG5cXFwiKTtcXG4gXFx0bnNmc19tbnQtXFx1MDAzZW1udF9zYi1cXHUwMDNlc19mbGFncyBcXHUwMDI2PSB+U0JfTk9VU0VSO1xcbitcXHRuc2ZzX21udC1cXHUwMDNlbW50X2ZsYWdzIHw9IE1OVF9DTE9OQUJMRTtcXG4gXFx0bnNmc19yb290X3BhdGgubW50ID0gbnNmc19tbnQ7XFxuIFxcdG5zZnNfcm9vdF9wYXRoLmRlbnRyeSA9IG5zZnNfbW50LVxcdTAwM2VtbnRfcm9vdDtcXG4gfVxcbmRpZmYgLS1naXQgYS9mcy9vcGVuLmMgYi9mcy9vcGVuLmNcXG5pbmRleCA0MDg5MjVkN2JkMGI3Ny4uM2EwODFhOWUzMDYyNDMgMTAwNjQ0XFxuLS0tIGEvZnMvb3Blbi5jXFxuKysrIGIvZnMvb3Blbi5jXFxuQEAgLTExMzEsNyArMTEzMSw4IEBAIHN0cnVjdCBmaWxlICprZXJuZWxfZmlsZV9vcGVuKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgZmxhZ3MsXFxuIEVYUE9SVF9TWU1CT0xfR1BMKGtlcm5lbF9maWxlX29wZW4pO1xcbiBcXG4gI2RlZmluZSBXSUxMX0NSRUFURShmbGFncylcXHQoZmxhZ3MgXFx1MDAyNiAoT19DUkVBVCB8IF9fT19UTVBGSUxFKSlcXG4tI2RlZmluZSBPX1BBVEhfRkxBR1NcXHRcXHQoT19ESVJFQ1RPUlkgfCBPX05PRk9MTE9XIHwgT19QQVRIIHwgT19DTE9FWEVDIHwgT19FTVBUWVBBVEgpXFxuKyNkZWZpbmUgT19QQVRIX0ZMQUdTXFx0XFx0KE9fRElSRUNUT1JZIHwgT19OT0ZPTExPVyB8IE9fUEFUSCB8IE9fQ0xPRVhFQyB8IE9fRU1QVFlQQVRIIHwgXFxcXFxcbitcXHRcXHRcXHRcXHQgT19BTFQpXFxuIFxcbiBpbmxpbmUgc3RydWN0IG9wZW5faG93IGJ1aWxkX29wZW5faG93KGludCBmbGFncywgdW1vZGVfdCBtb2RlKVxcbiB7XFxuQEAgLTEyODMsNiArMTI4NCw4IEBAIGlubGluZSBpbnQgYnVpbGRfb3Blbl9mbGFncyhjb25zdCBzdHJ1Y3Qgb3Blbl9ob3cgKmhvdywgc3RydWN0IG9wZW5fZmxhZ3MgKm9wKVxcbiBcXHRcXHRsb29rdXBfZmxhZ3MgfD0gTE9PS1VQX0ZPTExPVztcXG4gXFx0aWYgKGZsYWdzIFxcdTAwMjYgT19FTVBUWVBBVEgpXFxuIFxcdFxcdGxvb2t1cF9mbGFncyB8PSBMT09LVVBfRU1QVFk7XFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IE9fQUxUKVxcbitcXHRcXHRsb29rdXBfZmxhZ3MgfD0gTE9PS1VQX0FMVDtcXG4gXFxuIFxcdGlmIChob3ctXFx1MDAzZXJlc29sdmUgXFx1MDAyNiBSRVNPTFZFX05PX1hERVYpXFxuIFxcdFxcdGxvb2t1cF9mbGFncyB8PSBMT09LVVBfTk9fWERFVjtcXG5kaWZmIC0tZ2l0IGEvZnMvb3ZlcmxheWZzL3BhcmFtcy5jIGIvZnMvb3ZlcmxheWZzL3BhcmFtcy5jXFxuaW5kZXggYzkzZmNhYTQ1ZDRhMzYuLmM1YTllODU4ZTM2NjVlIDEwMDY0NFxcbi0tLSBhL2ZzL292ZXJsYXlmcy9wYXJhbXMuY1xcbisrKyBiL2ZzL292ZXJsYXlmcy9wYXJhbXMuY1xcbkBAIC0xMDQ2LDEwICsxMDQ2LDExIEBAIGludCBvdmxfZnNfcGFyYW1zX3ZlcmlmeShjb25zdCBzdHJ1Y3Qgb3ZsX2ZzX2NvbnRleHQgKmN0eCxcXG4gICogUHJpbnRzIHRoZSBtb3VudCBvcHRpb25zIGZvciBhIGdpdmVuIHN1cGVyYmxvY2suXFxuICAqIFJldHVybnMgemVybzsgZG9lcyBub3QgZmFpbC5cXG4gICovXFxuLWludCBvdmxfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbitpbnQgb3ZsX2dldF9vcHRpb25zKHN0cnVjdCBzYl9vcHRfY3R4ICpjdHgsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4ge1xcbiBcXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGVudHJ5LVxcdTAwM2VkX3NiO1xcbiBcXHRzdHJ1Y3Qgb3ZsX2ZzICpvZnMgPSBPVkxfRlMoc2IpO1xcbitcXHRzdHJ1Y3QgcGF0aCB1cHBlcnBhdGg7XFxuIFxcdHNpemVfdCBuciwgbnJfbWVyZ2VkX2xvd2VyLCBucl9sb3dlciA9IDA7XFxuIFxcdGNoYXIgKipsb3dlcmRpcnMgPSBvZnMtXFx1MDAzZWNvbmZpZy5sb3dlcmRpcnM7XFxuIFxcbkBAIC0xMDYyLDQzICsxMDYzLDQ3IEBAIGludCBvdmxfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbiBcXHQgKiB3aXRoIHRoZSBuZXcgbG93ZXJkaXIrIGFuZCBkYXRhZGlyKyBtb3VudCBvcHRpb25zLlxcbiBcXHQgKi9cXG4gXFx0aWYgKGxvd2VyZGlyc1swXSkge1xcbi1cXHRcXHRzZXFfc2hvd19vcHRpb24obSwgXFxcImxvd2VyZGlyXFxcIiwgbG93ZXJkaXJzWzBdKTtcXG4rXFx0XFx0c2JfYWRkX29wdGlvbihjdHgsIFxcXCJsb3dlcmRpclxcXCIsIGxvd2VyZGlyc1swXSk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdG5yX2xvd2VyID0gb2ZzLVxcdTAwM2VudW1sYXllcjtcXG4gXFx0XFx0bnJfbWVyZ2VkX2xvd2VyID0gbnJfbG93ZXIgLSBvZnMtXFx1MDAzZW51bWRhdGFsYXllcjtcXG4gXFx0fVxcbiBcXHRmb3IgKG5yID0gMTsgbnIgXFx1MDAzYyBucl9sb3dlcjsgbnIrKykge1xcbitcXHRcXHRzdHJ1Y3QgcGF0aCBsb3dlcnBhdGggPSB7XFxuK1xcdFxcdFxcdC5tbnQgPSBvZnMtXFx1MDAzZWxheWVyc1tucl0ubW50LFxcbitcXHRcXHRcXHQuZGVudHJ5ID0gb2ZzLVxcdTAwM2VsYXllcnNbbnJdLm1udC1cXHUwMDNlbW50X3Jvb3QsXFxuK1xcdFxcdH07XFxuIFxcdFxcdGlmIChuciBcXHUwMDNjIG5yX21lcmdlZF9sb3dlcilcXG4tXFx0XFx0XFx0c2VxX3Nob3dfb3B0aW9uKG0sIFxcXCJsb3dlcmRpcitcXFwiLCBsb3dlcmRpcnNbbnJdKTtcXG4rXFx0XFx0XFx0c2JfYWRkX29wdGlvbl9wYXRoKGN0eCwgXFxcImxvd2VyZGlyK1xcXCIsIGxvd2VyZGlyc1tucl0sXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZsb3dlcnBhdGgpO1xcbiBcXHRcXHRlbHNlXFxuLVxcdFxcdFxcdHNlcV9zaG93X29wdGlvbihtLCBcXFwiZGF0YWRpcitcXFwiLCBsb3dlcmRpcnNbbnJdKTtcXG4rXFx0XFx0XFx0c2JfYWRkX29wdGlvbl9wYXRoKGN0eCwgXFxcImRhdGFkaXIrXFxcIiwgbG93ZXJkaXJzW25yXSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmxvd2VycGF0aCk7XFxuIFxcdH1cXG4gXFx0aWYgKG9mcy1cXHUwMDNlY29uZmlnLnVwcGVyZGlyKSB7XFxuLVxcdFxcdHNlcV9zaG93X29wdGlvbihtLCBcXFwidXBwZXJkaXJcXFwiLCBvZnMtXFx1MDAzZWNvbmZpZy51cHBlcmRpcik7XFxuLVxcdFxcdHNlcV9zaG93X29wdGlvbihtLCBcXFwid29ya2RpclxcXCIsIG9mcy1cXHUwMDNlY29uZmlnLndvcmtkaXIpO1xcbitcXHRcXHRvdmxfcGF0aF91cHBlcihzYi1cXHUwMDNlc19yb290LCBcXHUwMDI2dXBwZXJwYXRoKTtcXG4rXFx0XFx0c2JfYWRkX29wdGlvbl9wYXRoKGN0eCwgXFxcInVwcGVyZGlyXFxcIiwgb2ZzLVxcdTAwM2Vjb25maWcudXBwZXJkaXIsIFxcdTAwMjZ1cHBlcnBhdGgpO1xcbitcXHRcXHRzYl9hZGRfb3B0aW9uKGN0eCwgXFxcIndvcmtkaXJcXFwiLCBvZnMtXFx1MDAzZWNvbmZpZy53b3JrZGlyKTtcXG4gXFx0fVxcbiBcXHRpZiAob2ZzLVxcdTAwM2Vjb25maWcuZGVmYXVsdF9wZXJtaXNzaW9ucylcXG4tXFx0XFx0c2VxX3B1dHMobSwgXFxcIixkZWZhdWx0X3Blcm1pc3Npb25zXFxcIik7XFxuK1xcdFxcdHNiX2FkZF9vcHRpb24oY3R4LCBcXFwiZGVmYXVsdF9wZXJtaXNzaW9uc1xcXCIsIE5VTEwpO1xcbiBcXHRpZiAob2ZzLVxcdTAwM2Vjb25maWcucmVkaXJlY3RfbW9kZSAhPSBvdmxfcmVkaXJlY3RfbW9kZV9kZWYoKSlcXG4tXFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiLHJlZGlyZWN0X2Rpcj0lc1xcXCIsXFxuLVxcdFxcdFxcdCAgIG92bF9yZWRpcmVjdF9tb2RlKFxcdTAwMjZvZnMtXFx1MDAzZWNvbmZpZykpO1xcbitcXHRcXHRzYl9hZGRfb3B0aW9uKGN0eCwgXFxcInJlZGlyZWN0X2RpclxcXCIsIG92bF9yZWRpcmVjdF9tb2RlKFxcdTAwMjZvZnMtXFx1MDAzZWNvbmZpZykpO1xcbiBcXHRpZiAob2ZzLVxcdTAwM2Vjb25maWcuaW5kZXggIT0gb3ZsX2luZGV4X2RlZilcXG4tXFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiLGluZGV4PSVzXFxcIiwgc3RyX29uX29mZihvZnMtXFx1MDAzZWNvbmZpZy5pbmRleCkpO1xcbitcXHRcXHRzYl9hZGRfb3B0aW9uKGN0eCwgXFxcImluZGV4XFxcIiwgc3RyX29uX29mZihvZnMtXFx1MDAzZWNvbmZpZy5pbmRleCkpO1xcbiBcXHRpZiAob2ZzLVxcdTAwM2Vjb25maWcudXVpZCAhPSBvdmxfdXVpZF9kZWYoKSlcXG4tXFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiLHV1aWQ9JXNcXFwiLCBvdmxfdXVpZF9tb2RlKFxcdTAwMjZvZnMtXFx1MDAzZWNvbmZpZykpO1xcbitcXHRcXHRzYl9hZGRfb3B0aW9uKGN0eCwgXFxcInV1aWRcXFwiLCBvdmxfdXVpZF9tb2RlKFxcdTAwMjZvZnMtXFx1MDAzZWNvbmZpZykpO1xcbiBcXHRpZiAob2ZzLVxcdTAwM2Vjb25maWcubmZzX2V4cG9ydCAhPSBvdmxfbmZzX2V4cG9ydF9kZWYpXFxuLVxcdFxcdHNlcV9wcmludGYobSwgXFxcIixuZnNfZXhwb3J0PSVzXFxcIixcXG4tXFx0XFx0XFx0ICAgc3RyX29uX29mZihvZnMtXFx1MDAzZWNvbmZpZy5uZnNfZXhwb3J0KSk7XFxuK1xcdFxcdHNiX2FkZF9vcHRpb24oY3R4LCBcXFwibmZzX2V4cG9ydFxcXCIsIHN0cl9vbl9vZmYob2ZzLVxcdTAwM2Vjb25maWcubmZzX2V4cG9ydCkpO1xcbiBcXHRpZiAob2ZzLVxcdTAwM2Vjb25maWcueGlubyAhPSBvdmxfeGlub19kZWYoKSBcXHUwMDI2XFx1MDAyNiAhb3ZsX3NhbWVfZnMob2ZzKSlcXG4tXFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiLHhpbm89JXNcXFwiLCBvdmxfeGlub19tb2RlKFxcdTAwMjZvZnMtXFx1MDAzZWNvbmZpZykpO1xcbitcXHRcXHRzYl9hZGRfb3B0aW9uKGN0eCwgXFxcInhpbm9cXFwiLCBvdmxfeGlub19tb2RlKFxcdTAwMjZvZnMtXFx1MDAzZWNvbmZpZykpO1xcbiBcXHRpZiAob2ZzLVxcdTAwM2Vjb25maWcubWV0YWNvcHkgIT0gb3ZsX21ldGFjb3B5X2RlZilcXG4tXFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiLG1ldGFjb3B5PSVzXFxcIiwgc3RyX29uX29mZihvZnMtXFx1MDAzZWNvbmZpZy5tZXRhY29weSkpO1xcbitcXHRcXHRzYl9hZGRfb3B0aW9uKGN0eCwgXFxcIm1ldGFjb3B5XFxcIiwgc3RyX29uX29mZihvZnMtXFx1MDAzZWNvbmZpZy5tZXRhY29weSkpO1xcbiBcXHRpZiAob2ZzLVxcdTAwM2Vjb25maWcuZnN5bmNfbW9kZSAhPSBvdmxfZnN5bmNfbW9kZV9kZWYoKSlcXG4tXFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiLGZzeW5jPSVzXFxcIiwgb3ZsX2ZzeW5jX21vZGUoXFx1MDAyNm9mcy1cXHUwMDNlY29uZmlnKSk7XFxuK1xcdFxcdHNiX2FkZF9vcHRpb24oY3R4LCBcXFwiZnN5bmNcXFwiLCBvdmxfZnN5bmNfbW9kZShcXHUwMDI2b2ZzLVxcdTAwM2Vjb25maWcpKTtcXG4gXFx0aWYgKG9mcy1cXHUwMDNlY29uZmlnLnVzZXJ4YXR0cilcXG4tXFx0XFx0c2VxX3B1dHMobSwgXFxcIix1c2VyeGF0dHJcXFwiKTtcXG4rXFx0XFx0c2JfYWRkX29wdGlvbihjdHgsIFxcXCJ1c2VyeGF0dHJcXFwiLCBOVUxMKTtcXG4gXFx0aWYgKG9mcy1cXHUwMDNlY29uZmlnLnZlcml0eV9tb2RlICE9IG92bF92ZXJpdHlfbW9kZV9kZWYoKSlcXG4tXFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiLHZlcml0eT0lc1xcXCIsXFxuLVxcdFxcdFxcdCAgIG92bF92ZXJpdHlfbW9kZShcXHUwMDI2b2ZzLVxcdTAwM2Vjb25maWcpKTtcXG4rXFx0XFx0c2JfYWRkX29wdGlvbihjdHgsIFxcXCJ2ZXJpdHlcXFwiLCBvdmxfdmVyaXR5X21vZGUoXFx1MDAyNm9mcy1cXHUwMDNlY29uZmlnKSk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2ZzL292ZXJsYXlmcy9wYXJhbXMuaCBiL2ZzL292ZXJsYXlmcy9wYXJhbXMuaFxcbmluZGV4IGZmZDUzY2RkODQ4MjdjLi4yY2Y5YzRmMTg4YTljYiAxMDA2NDRcXG4tLS0gYS9mcy9vdmVybGF5ZnMvcGFyYW1zLmhcXG4rKysgYi9mcy9vdmVybGF5ZnMvcGFyYW1zLmhcXG5AQCAtNDAsNSArNDAsNSBAQCBpbnQgb3ZsX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xcbiB2b2lkIG92bF9mcmVlX2ZzKHN0cnVjdCBvdmxfZnMgKm9mcyk7XFxuIGludCBvdmxfZnNfcGFyYW1zX3ZlcmlmeShjb25zdCBzdHJ1Y3Qgb3ZsX2ZzX2NvbnRleHQgKmN0eCxcXG4gXFx0XFx0XFx0IHN0cnVjdCBvdmxfY29uZmlnICpjb25maWcpO1xcbi1pbnQgb3ZsX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XFxuK2ludCBvdmxfZ2V0X29wdGlvbnMoc3RydWN0IHNiX29wdF9jdHggKmN0eCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcXG4gY29uc3QgY2hhciAqb3ZsX3hpbm9fbW9kZShzdHJ1Y3Qgb3ZsX2NvbmZpZyAqY29uZmlnKTtcXG5kaWZmIC0tZ2l0IGEvZnMvb3ZlcmxheWZzL3N1cGVyLmMgYi9mcy9vdmVybGF5ZnMvc3VwZXIuY1xcbmluZGV4IDYwZjBiN2NlZWYwYTZkLi40YjU3YjJkYjA4NTIyNSAxMDA2NDRcXG4tLS0gYS9mcy9vdmVybGF5ZnMvc3VwZXIuY1xcbisrKyBiL2ZzL292ZXJsYXlmcy9zdXBlci5jXFxuQEAgLTMwMiw3ICszMDIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgb3ZsX3N1cGVyX29wZXJhdGlvbnMgPSB7XFxuIFxcdC5wdXRfc3VwZXJcXHQ9IG92bF9wdXRfc3VwZXIsXFxuIFxcdC5zeW5jX2ZzXFx0PSBvdmxfc3luY19mcyxcXG4gXFx0LnN0YXRmc1xcdFxcdD0gb3ZsX3N0YXRmcyxcXG4tXFx0LnNob3dfb3B0aW9uc1xcdD0gb3ZsX3Nob3dfb3B0aW9ucyxcXG4rXFx0LmdldF9vcHRpb25zXFx0PSBvdmxfZ2V0X29wdGlvbnMsXFxuIH07XFxuIFxcbiAjZGVmaW5lIE9WTF9XT1JLRElSX05BTUUgXFxcIndvcmtcXFwiXFxuQEAgLTUyOSw2ICs1MjksNyBAQCBzdGF0aWMgaW50IG92bF9nZXRfdXBwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IG92bF9mcyAqb2ZzLFxcbiBcXG4gXFx0LyogRG9uJ3QgaW5oZXJpdCBhdGltZSBmbGFncyAqL1xcbiBcXHR1cHBlcl9tbnQtXFx1MDAzZW1udF9mbGFncyBcXHUwMDI2PSB+KE1OVF9OT0FUSU1FIHwgTU5UX05PRElSQVRJTUUgfCBNTlRfUkVMQVRJTUUpO1xcbitcXHR1cHBlcl9tbnQtXFx1MDAzZW1udF9mbGFncyB8PSBNTlRfQ0xPTkFCTEU7XFxuIFxcdHVwcGVyX2xheWVyLVxcdTAwM2VtbnQgPSB1cHBlcl9tbnQ7XFxuIFxcdHVwcGVyX2xheWVyLVxcdTAwM2VpZHggPSAwO1xcbiBcXHR1cHBlcl9sYXllci1cXHUwMDNlZnNpZCA9IDA7XFxuQEAgLTExMDUsNyArMTEwNiw3IEBAIHN0YXRpYyBpbnQgb3ZsX2dldF9sYXllcnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IG92bF9mcyAqb2ZzLFxcbiBcXHRcXHQgKiBNYWtlIGxvd2VyIGxheWVycyBSL08uICBUaGF0IHdheSBmY2htb2QvZmNob3duIG9uIGxvd2VyIGZpbGVcXG4gXFx0XFx0ICogd2lsbCBmYWlsIGluc3RlYWQgb2YgbW9kaWZ5aW5nIGxvd2VyIGZzLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0bW50LVxcdTAwM2VtbnRfZmxhZ3MgfD0gTU5UX1JFQURPTkxZIHwgTU5UX05PQVRJTUU7XFxuK1xcdFxcdG1udC1cXHUwMDNlbW50X2ZsYWdzIHw9IE1OVF9SRUFET05MWSB8IE1OVF9OT0FUSU1FIHwgTU5UX0NMT05BQkxFO1xcbiBcXG4gXFx0XFx0bGF5ZXJzW29mcy1cXHUwMDNlbnVtbGF5ZXJdLnRyYXAgPSB0cmFwO1xcbiBcXHRcXHRsYXllcnNbb2ZzLVxcdTAwM2VudW1sYXllcl0ubW50ID0gbW50O1xcbmRpZmYgLS1naXQgYS9mcy9waWRmcy5jIGIvZnMvcGlkZnMuY1xcbmluZGV4IGFhYTYwOWRkYWIwNDQzLi4zODQzYWNkNjU5NGRlMCAxMDA2NDRcXG4tLS0gYS9mcy9waWRmcy5jXFxuKysrIGIvZnMvcGlkZnMuY1xcbkBAIC04NDAsNyArODQwLDcgQEAgc3RhdGljIGNoYXIgKnBpZGZzX2RuYW1lKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqYnVmZmVyLCBpbnQgYnVmbGVuKVxcbiBcXHRyZXR1cm4gZHluYW1pY19kbmFtZShidWZmZXIsIGJ1ZmxlbiwgXFxcImFub25faW5vZGU6W3BpZGZkXVxcXCIpO1xcbiB9XFxuIFxcbi1jb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgcGlkZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7XFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgcGlkZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7XFxuIFxcdC5kX2RuYW1lXFx0PSBwaWRmc19kbmFtZSxcXG4gXFx0LmRfcHJ1bmVcXHQ9IHN0YXNoZWRfZGVudHJ5X3BydW5lLFxcbiB9O1xcbkBAIC0xMTUxLDYgKzExNTEsOCBAQCB2b2lkIF9faW5pdCBwaWRmc19pbml0KHZvaWQpXFxuIFxcdGlmIChJU19FUlIocGlkZnNfbW50KSlcXG4gXFx0XFx0cGFuaWMoXFxcIkZhaWxlZCB0byBtb3VudCBwaWRmcyBwc2V1ZG8gZmlsZXN5c3RlbVxcXCIpO1xcbiBcXG4rXFx0cGlkZnNfbW50LVxcdTAwM2VtbnRfZmxhZ3MgfD0gTU5UX0NMT05BQkxFO1xcbitcXG4gXFx0cGlkZnNfcm9vdF9wYXRoLm1udCA9IHBpZGZzX21udDtcXG4gXFx0cGlkZnNfcm9vdF9wYXRoLmRlbnRyeSA9IHBpZGZzX21udC1cXHUwMDNlbW50X3Jvb3Q7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZnMvcHJvY19uYW1lc3BhY2UuYyBiL2ZzL3Byb2NfbmFtZXNwYWNlLmNcXG5pbmRleCA1YzU1NWRiNjhhYTIxMi4uOTRiYzRjOWFhNDNmMTYgMTAwNjQ0XFxuLS0tIGEvZnMvcHJvY19uYW1lc3BhY2UuY1xcbisrKyBiL2ZzL3Byb2NfbmFtZXNwYWNlLmNcXG5AQCAtOTgsMjEgKzk4LDI3IEBAIHN0YXRpYyB2b2lkIHNob3dfdHlwZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIGludCBzaG93X2Rldm5hbWUoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgdmZzbW91bnQgKm1udClcXG4re1xcbitcXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gbW50LVxcdTAwM2VtbnRfc2I7XFxuK1xcbitcXHRpZiAoc2ItXFx1MDAzZXNfb3AtXFx1MDAzZXNob3dfZGV2bmFtZSlcXG4rXFx0XFx0cmV0dXJuIHNiLVxcdTAwM2VzX29wLVxcdTAwM2VzaG93X2Rldm5hbWUobSwgbW50LVxcdTAwM2VtbnRfcm9vdCk7XFxuK1xcbitcXHRtYW5nbGUobSwgc2ItXFx1MDAzZXNfZGV2bmFtZSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHNob3dfdmZzbW50KHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHZmc21vdW50ICptbnQpXFxuIHtcXG4gXFx0c3RydWN0IHByb2NfbW91bnRzICpwID0gbS1cXHUwMDNlcHJpdmF0ZTtcXG4tXFx0c3RydWN0IG1vdW50ICpyID0gcmVhbF9tb3VudChtbnQpO1xcbiBcXHRzdHJ1Y3QgcGF0aCBtbnRfcGF0aCA9IHsgLmRlbnRyeSA9IG1udC1cXHUwMDNlbW50X3Jvb3QsIC5tbnQgPSBtbnQgfTtcXG4gXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IG1udF9wYXRoLmRlbnRyeS1cXHUwMDNlZF9zYjtcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdGlmIChzYi1cXHUwMDNlc19vcC1cXHUwMDNlc2hvd19kZXZuYW1lKSB7XFxuLVxcdFxcdGVyciA9IHNiLVxcdTAwM2VzX29wLVxcdTAwM2VzaG93X2Rldm5hbWUobSwgbW50X3BhdGguZGVudHJ5KTtcXG4tXFx0XFx0aWYgKGVycilcXG4tXFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdG1hbmdsZShtLCByLVxcdTAwM2VtbnRfZGV2bmFtZSk7XFxuLVxcdH1cXG4rXFx0ZXJyID0gc2hvd19kZXZuYW1lKG0sIG1udCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbiBcXHRzZXFfcHV0YyhtLCAnICcpO1xcbiBcXHQvKiBtb3VudHBvaW50cyBvdXRzaWRlIG9mIGNocm9vdCBqYWlsIHdpbGwgZ2l2ZSBTRVFfU0tJUCBvbiB0aGlzICovXFxuIFxcdGVyciA9IHNlcV9wYXRoX3Jvb3QobSwgXFx1MDAyNm1udF9wYXRoLCBcXHUwMDI2cC1cXHUwMDNlcm9vdCwgXFxcIiBcXFxcdFxcXFxuXFxcXFxcXFxcXFwiKTtcXG5AQCAtMTI1LDggKzEzMSw3IEBAIHN0YXRpYyBpbnQgc2hvd192ZnNtbnQoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgdmZzbW91bnQgKm1udClcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdHNob3dfdmZzbW50X29wdHMobSwgbW50KTtcXG4tXFx0aWYgKHNiLVxcdTAwM2VzX29wLVxcdTAwM2VzaG93X29wdGlvbnMpXFxuLVxcdFxcdGVyciA9IHNiLVxcdTAwM2VzX29wLVxcdTAwM2VzaG93X29wdGlvbnMobSwgbW50X3BhdGguZGVudHJ5KTtcXG4rXFx0ZXJyID0gbW50X3Nob3dfb3B0aW9ucyhtLCBtbnQpO1xcbiBcXHRzZXFfcHV0cyhtLCBcXFwiIDAgMFxcXFxuXFxcIik7XFxuIG91dDpcXG4gXFx0cmV0dXJuIGVycjtcXG5AQCAtMTcyLDE5ICsxNzcsMTQgQEAgc3RhdGljIGludCBzaG93X21vdW50aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB2ZnNtb3VudCAqbW50KVxcbiBcXHRzZXFfcHV0cyhtLCBcXFwiIC0gXFxcIik7XFxuIFxcdHNob3dfdHlwZShtLCBzYik7XFxuIFxcdHNlcV9wdXRjKG0sICcgJyk7XFxuLVxcdGlmIChzYi1cXHUwMDNlc19vcC1cXHUwMDNlc2hvd19kZXZuYW1lKSB7XFxuLVxcdFxcdGVyciA9IHNiLVxcdTAwM2VzX29wLVxcdTAwM2VzaG93X2Rldm5hbWUobSwgbW50LVxcdTAwM2VtbnRfcm9vdCk7XFxuLVxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdGdvdG8gb3V0O1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRtYW5nbGUobSwgci1cXHUwMDNlbW50X2Rldm5hbWUpO1xcbi1cXHR9XFxuK1xcdGVyciA9IHNob3dfZGV2bmFtZShtLCBtbnQpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIG91dDtcXG4gXFx0c2VxX3B1dHMobSwgc2JfcmRvbmx5KHNiKSA/IFxcXCIgcm9cXFwiIDogXFxcIiByd1xcXCIpO1xcbiBcXHRlcnIgPSBzaG93X3NiX29wdHMobSwgc2IpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4tXFx0aWYgKHNiLVxcdTAwM2VzX29wLVxcdTAwM2VzaG93X29wdGlvbnMpXFxuLVxcdFxcdGVyciA9IHNiLVxcdTAwM2VzX29wLVxcdTAwM2VzaG93X29wdGlvbnMobSwgbW50LVxcdTAwM2VtbnRfcm9vdCk7XFxuK1xcdGVyciA9IG1udF9zaG93X29wdGlvbnMobSwgbW50KTtcXG4gXFx0c2VxX3B1dGMobSwgJ1xcXFxuJyk7XFxuIG91dDpcXG4gXFx0cmV0dXJuIGVycjtcXG5AQCAtMTkzLDIxICsxOTMsMTUgQEAgc3RhdGljIGludCBzaG93X21vdW50aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB2ZnNtb3VudCAqbW50KVxcbiBzdGF0aWMgaW50IHNob3dfdmZzc3RhdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB2ZnNtb3VudCAqbW50KVxcbiB7XFxuIFxcdHN0cnVjdCBwcm9jX21vdW50cyAqcCA9IG0tXFx1MDAzZXByaXZhdGU7XFxuLVxcdHN0cnVjdCBtb3VudCAqciA9IHJlYWxfbW91bnQobW50KTtcXG4gXFx0c3RydWN0IHBhdGggbW50X3BhdGggPSB7IC5kZW50cnkgPSBtbnQtXFx1MDAzZW1udF9yb290LCAubW50ID0gbW50IH07XFxuIFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBtbnRfcGF0aC5kZW50cnktXFx1MDAzZWRfc2I7XFxuIFxcdGludCBlcnI7XFxuIFxcbiBcXHQvKiBkZXZpY2UgKi9cXG4gXFx0c2VxX3B1dHMobSwgXFxcImRldmljZSBcXFwiKTtcXG4tXFx0aWYgKHNiLVxcdTAwM2VzX29wLVxcdTAwM2VzaG93X2Rldm5hbWUpIHtcXG4tXFx0XFx0ZXJyID0gc2ItXFx1MDAzZXNfb3AtXFx1MDAzZXNob3dfZGV2bmFtZShtLCBtbnRfcGF0aC5kZW50cnkpO1xcbi1cXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0bWFuZ2xlKG0sIHItXFx1MDAzZW1udF9kZXZuYW1lKTtcXG4tXFx0fVxcbi1cXG4rXFx0ZXJyID0gc2hvd19kZXZuYW1lKG0sIG1udCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbiBcXHQvKiBtb3VudCBwb2ludCAqL1xcbiBcXHRzZXFfcHV0cyhtLCBcXFwiIG1vdW50ZWQgb24gXFxcIik7XFxuIFxcdC8qIG1vdW50cG9pbnRzIG91dHNpZGUgb2YgY2hyb290IGphaWwgd2lsbCBnaXZlIFNFUV9TS0lQIG9uIHRoaXMgKi9cXG5kaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmNcXG5pbmRleCBhOGZkNjExMzZhYWZlNS4uZTU1MzFjYjg4Zjg5MTcgMTAwNjQ0XFxuLS0tIGEvZnMvc3VwZXIuY1xcbisrKyBiL2ZzL3N1cGVyLmNcXG5AQCAtMjgwLDYgKzI4MCw3IEBAIHN0YXRpYyB2b2lkIGRlc3Ryb3lfc3VwZXJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdHNlY3VyaXR5X3NiX2ZyZWUocyk7XFxuIFxcdHB1dF91c2VyX25zKHMtXFx1MDAzZXNfdXNlcl9ucyk7XFxuIFxcdGtmcmVlKHMtXFx1MDAzZXNfc3VidHlwZSk7XFxuK1xcdGtmcmVlX2NvbnN0KHMtXFx1MDAzZXNfZGV2bmFtZSk7XFxuIFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgU0JfRlJFRVpFX0xFVkVMUzsgaSsrKVxcbiBcXHRcXHRwZXJjcHVfZnJlZV9yd3NlbShcXHUwMDI2cy1cXHUwMDNlc193cml0ZXJzLnJ3X3NlbVtpXSk7XFxuIFxcdGtmcmVlKHMpO1xcbkBAIC0zMTUsNyArMzE2LDcgQEAgc3RhdGljIHZvaWQgZGVzdHJveV91bnVzZWRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzKVxcbiAgKlxcdHJldHVybnMgYSBwb2ludGVyIG5ldyBzdXBlcmJsb2NrIG9yICVOVUxMIGlmIGFsbG9jYXRpb24gaGFkIGZhaWxlZC5cXG4gICovXFxuIHN0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmFsbG9jX3N1cGVyKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlLCBpbnQgZmxhZ3MsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMpXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsIGNvbnN0IGNoYXIgKm5hbWUpXFxuIHtcXG4gXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzID0ga3phbGxvY19vYmooc3RydWN0IHN1cGVyX2Jsb2NrKTtcXG4gXFx0c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGRlZmF1bHRfb3A7XFxuQEAgLTM0NCw2ICszNDUsMTMgQEAgc3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqYWxsb2Nfc3VwZXIoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsIGludCBmbGFncyxcXG4gXFx0ICovXFxuIFxcdGRvd25fd3JpdGVfbmVzdGVkKFxcdTAwMjZzLVxcdTAwM2VzX3Vtb3VudCwgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xcbiBcXG4rXFx0aWYgKG5hbWUpXFxuK1xcdFxcdHMtXFx1MDAzZXNfZGV2bmFtZSA9IGtzdHJkdXBfY29uc3QobmFtZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRzLVxcdTAwM2VzX2Rldm5hbWUgPSBcXFwibm9uZVxcXCI7XFxuK1xcdGlmICghcy1cXHUwMDNlc19kZXZuYW1lKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcbiBcXHRpZiAoc2VjdXJpdHlfc2JfYWxsb2MocykpXFxuIFxcdFxcdGdvdG8gZmFpbDtcXG4gXFxuQEAgLTc2Myw3ICs3NzEsNyBAQCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNnZXRfZmMoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxcbiBcXHR9XFxuIFxcdGlmICghcykge1xcbiBcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2c2JfbG9jayk7XFxuLVxcdFxcdHMgPSBhbGxvY19zdXBlcihmYy1cXHUwMDNlZnNfdHlwZSwgZmMtXFx1MDAzZXNiX2ZsYWdzLCB1c2VyX25zKTtcXG4rXFx0XFx0cyA9IGFsbG9jX3N1cGVyKGZjLVxcdTAwM2Vmc190eXBlLCBmYy1cXHUwMDNlc2JfZmxhZ3MsIHVzZXJfbnMsIGZjLVxcdTAwM2Vzb3VyY2UpO1xcbiBcXHRcXHRpZiAoIXMpXFxuIFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbiBcXHRcXHRnb3RvIHJldHJ5O1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZjbnRsLmggYi9pbmNsdWRlL2xpbnV4L2ZjbnRsLmhcXG5pbmRleCA2YWQ2YjllN2EyMjZhZi4uZjk0MjQxMWM4ZWQ3ZGUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9mY250bC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9mY250bC5oXFxuQEAgLTExLDcgKzExLDcgQEBcXG4gXFx0KE9fUkRPTkxZIHwgT19XUk9OTFkgfCBPX1JEV1IgfCBPX0NSRUFUIHwgT19FWENMIHwgT19OT0NUVFkgfCBPX1RSVU5DIHwgXFxcXFxcbiBcXHQgT19BUFBFTkQgfCBPX05ERUxBWSB8IE9fTk9OQkxPQ0sgfCBfX09fU1lOQyB8IE9fRFNZTkMgfCBcXFxcXFxuIFxcdCBGQVNZTkNcXHR8IE9fRElSRUNUIHwgT19MQVJHRUZJTEUgfCBPX0RJUkVDVE9SWSB8IE9fTk9GT0xMT1cgfCBcXFxcXFxuLVxcdCBPX05PQVRJTUUgfCBPX0NMT0VYRUMgfCBPX1BBVEggfCBfX09fVE1QRklMRSB8IE9fRU1QVFlQQVRIKVxcbitcXHQgT19OT0FUSU1FIHwgT19DTE9FWEVDIHwgT19QQVRIIHwgX19PX1RNUEZJTEUgfCBPX0VNUFRZUEFUSCB8IE9fQUxUKVxcbiBcXG4gLyogTGlzdCBvZiBhbGwgdmFsaWQgZmxhZ3MgZm9yIG9wZW5hdDIoMikncyBob3ctXFx1MDAzZWZsYWdzIGFyZ3VtZW50LiAqL1xcbiAjZGVmaW5lIFZBTElEX09QRU5BVDJfRkxBR1NcXHQoVkFMSURfT1BFTl9GTEFHUyB8IE9QRU5BVDJfUkVHVUxBUilcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy9zdXBlci5oIGIvaW5jbHVkZS9saW51eC9mcy9zdXBlci5oXFxuaW5kZXggNDA1NjEyNjc4MTE1MWUuLjZmMGQ3Nzg5NDBmOTA0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZnMvc3VwZXIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZnMvc3VwZXIuaFxcbkBAIC0yMzcsNCArMjM3LDE0IEBAIGludCB0aGF3X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc3VwZXIsIGVudW0gZnJlZXplX2hvbGRlciB3aG8sXFxuIFxcbiBpbnQgc2JfaW5pdF9kaW9fZG9uZV93cShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcXG4gXFxuK3N0cnVjdCBzYl9vcHRfY3R4IHtcXG4rXFx0dm9pZCAoKmFjdG9yKShzdHJ1Y3Qgc2Jfb3B0X2N0eCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSxcXG4rXFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpO1xcbitcXHR2b2lkICpkYXRhO1xcbit9O1xcbitcXG4rdm9pZCBzYl9hZGRfb3B0aW9uKHN0cnVjdCBzYl9vcHRfY3R4ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKTtcXG4rdm9pZCBzYl9hZGRfb3B0aW9uX3BhdGgoc3RydWN0IHNiX29wdF9jdHggKmN0eCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUsXFxuK1xcdFxcdFxcdGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKTtcXG4rXFxuICNlbmRpZiAvKiBfTElOVVhfRlNfU1VQRVJfSCAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyX3R5cGVzLmhcXG5pbmRleCBlZjc5NDFlOWRjNzlhYy4uZjIwNTc1OWFmMWE2MzMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9mcy9zdXBlcl90eXBlcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9mcy9zdXBlcl90eXBlcy5oXFxuQEAgLTM2LDYgKzM2LDcgQEAgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3Q7XFxuIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbDtcXG4gc3RydWN0IHhhdHRyX2hhbmRsZXI7XFxuIHN0cnVjdCBmc2Vycm9yX2V2ZW50O1xcbitzdHJ1Y3Qgc2Jfb3B0X2N0eDtcXG4gXFxuIGV4dGVybiBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmJsb2NrZGV2X3N1cGVyYmxvY2s7XFxuIFxcbkBAIC05OSw2ICsxMDAsNyBAQCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyB7XFxuIFxcdGludCAoKnN0YXRmcykoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqa3N0YXRmcyk7XFxuIFxcdHZvaWQgKCp1bW91bnRfYmVnaW4pKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xcbiBcXG4rXFx0aW50ICgqZ2V0X29wdGlvbnMpKHN0cnVjdCBzYl9vcHRfY3R4ICpjdHgsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XFxuIFxcdGludCAoKnNob3dfb3B0aW9ucykoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XFxuIFxcdGludCAoKnNob3dfZGV2bmFtZSkoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XFxuIFxcdGludCAoKnNob3dfcGF0aCkoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XFxuQEAgLTI4Myw2ICsyODUsOCBAQCBzdHJ1Y3Qgc3VwZXJfYmxvY2sge1xcbiBcXHQgKi9cXG4gXFx0YXRvbWljX3RcXHRcXHRcXHRcXHRzX2lzd19ucl9pbl9mbGlnaHQ7XFxuICNlbmRpZlxcbitcXHQvKiBOYW1lIG9mIGRldmljZSBlLmcuIC9kZXYvZHNrL2hkYTEgKi9cXG4rXFx0Y29uc3QgY2hhciBcXHRcXHRcXHRcXHQqc19kZXZuYW1lO1xcbiB9IF9fcmFuZG9taXplX2xheW91dDtcXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW91bnQuaCBiL2luY2x1ZGUvbGludXgvbW91bnQuaFxcbmluZGV4IGFjZmU3ZWY4NmExYjNmLi5kMDcxODU1Y2E0ZWRlYyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21vdW50LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21vdW50LmhcXG5AQCAtNDQsNiArNDQsNyBAQCBlbnVtIG1vdW50X2ZsYWdzIHtcXG4gXFx0TU5UX0xPQ0tFRFxcdFxcdD0gMHg4MDAwMDAsXFxuIFxcdE1OVF9ET09NRURcXHRcXHQ9IDB4MTAwMDAwMCxcXG4gXFx0TU5UX1NZTkNfVU1PVU5UXFx0XFx0PSAweDIwMDAwMDAsXFxuK1xcdE1OVF9DTE9OQUJMRVxcdFxcdD0gMHg0MDAwMDAwLFxcbiBcXHRNTlRfVU1PVU5UXFx0XFx0PSAweDgwMDAwMDAsXFxuIFxcbiBcXHRNTlRfVVNFUl9TRVRUQUJMRV9NQVNLICA9IE1OVF9OT1NVSUQgfCBNTlRfTk9ERVYgfCBNTlRfTk9FWEVDXFxuQEAgLTUyLDcgKzUzLDcgQEAgZW51bSBtb3VudF9mbGFncyB7XFxuIFxcdE1OVF9BVElNRV9NQVNLID0gTU5UX05PQVRJTUUgfCBNTlRfTk9ESVJBVElNRSB8IE1OVF9SRUxBVElNRSxcXG4gXFxuIFxcdE1OVF9JTlRFUk5BTF9GTEFHUyA9IE1OVF9JTlRFUk5BTCB8IE1OVF9ET09NRUQgfFxcbi1cXHRcXHRcXHQgICAgIE1OVF9TWU5DX1VNT1VOVCB8IE1OVF9MT0NLRURcXG4rXFx0XFx0XFx0ICAgICBNTlRfU1lOQ19VTU9VTlQgfCBNTlRfTE9DS0VEIHwgTU5UX0NMT05BQkxFXFxuIH07XFxuIFxcbiBzdHJ1Y3QgdmZzbW91bnQge1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25hbWVpLmggYi9pbmNsdWRlL2xpbnV4L25hbWVpLmhcXG5pbmRleCBlYmU2ZTI5ZjdlOTNiYS4uYzIxZGM2NTM2OTAwY2YgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9uYW1laS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9uYW1laS5oXFxuQEAgLTI1LDcgKzI1LDggQEAgZW51bSB7IE1BWF9ORVNURURfTElOS1MgPSA4IH07XFxuICNkZWZpbmUgTE9PS1VQX1JDVVxcdFxcdEJJVCg4KVxcdC8qIFJDVSBwYXRod2FsayBtb2RlOyBzZW1pLWludGVybmFsICovXFxuICNkZWZpbmUgTE9PS1VQX0NBQ0hFRFxcdFxcdEJJVCg5KSAvKiBPbmx5IGRvIGNhY2hlZCBsb29rdXAgKi9cXG4gI2RlZmluZSBMT09LVVBfUEFSRU5UXFx0XFx0QklUKDEwKVxcdC8qIExvb2tpbmcgdXAgZmluYWwgcGFyZW50IGluIHBhdGggKi9cXG4tLyogNSBzcGFyZSBiaXRzIGZvciBwYXRod2FsayAqL1xcbisjZGVmaW5lIExPT0tVUF9BTFRcXHRcXHRCSVQoMTEpIC8qIExvb2sgdXAgaW4gYWx0ZXJuYXRpdmUgbmFtZXNwYWNlICovXFxuKy8qIDQgc3BhcmUgYml0cyBmb3IgcGF0aHdhbGsgKi9cXG4gXFxuIC8qIFRoZXNlIHRlbGwgZmlsZXN5c3RlbSBtZXRob2RzIHRoYXQgd2UgYXJlIGRlYWxpbmcgd2l0aCB0aGUgZmluYWwgY29tcG9uZW50Li4uICovXFxuICNkZWZpbmUgTE9PS1VQX09QRU5cXHRcXHRCSVQoMTYpXFx0LyogLi4uIGluIG9wZW4gKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waWRmcy5oIGIvaW5jbHVkZS9saW51eC9waWRmcy5oXFxuaW5kZXggMGFiZjdkYTlhYjIzNmUuLmZhYjZmNDhmZjIwMzM0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGlkZnMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGlkZnMuaFxcbkBAIC0xNSw3ICsxNSw2IEBAIHZvaWQgcGlkZnNfZXhpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7XFxuICNpZmRlZiBDT05GSUdfQ09SRURVTVBcXG4gdm9pZCBwaWRmc19jb3JlZHVtcChjb25zdCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKTtcXG4gI2VuZGlmXFxuLWV4dGVybiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgcGlkZnNfZGVudHJ5X29wZXJhdGlvbnM7XFxuIGludCBwaWRmc19yZWdpc3Rlcl9waWRfZ2ZwKHN0cnVjdCBwaWQgKnBpZCwgZ2ZwX3QgZ2ZwKTtcXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvZmNudGwuaCBiL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9mY250bC5oXFxuaW5kZXggODgzY2ZkN2RlMmVmZmEuLjcwZGJiYWMxYzUyMDc4IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9mY250bC5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL2ZjbnRsLmhcXG5AQCAtOTYsNiArOTYsMTAgQEBcXG4gI2RlZmluZSBPX0VNUFRZUEFUSFxcdCgxIFxcdTAwM2NcXHUwMDNjIDI2KVxcdC8qIGFsbG93IGVtcHR5IHBhdGggKi9cXG4gI2VuZGlmXFxuIFxcbisjaWZuZGVmIE9fQUxUXFxuKyNkZWZpbmUgT19BTFRcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyAyNylcXHQvKiBPcGVuIGluIGFsdGVybmF0aXZlIG5hbWVzcGFjZSAqL1xcbisjZW5kaWZcXG4rXFxuIC8qIGEgaG9ycmlkIGtsdWRnZSB0cnlpbmcgdG8gbWFrZSBzdXJlIHRoYXQgdGhpcyB3aWxsIGZhaWwgb24gb2xkIGtlcm5lbHMgKi9cXG4gI2RlZmluZSBPX1RNUEZJTEUgKF9fT19UTVBGSUxFIHwgT19ESVJFQ1RPUlkpXFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbW91bnQuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9tb3VudC5oXFxuaW5kZXggMjIwNDcwOGRiZjdhNTguLjZlNzk0ZDIxNGNmOTgzIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9tb3VudC5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L21vdW50LmhcXG5AQCAtNjMsNiArNjMsNyBAQFxcbiAgKi9cXG4gI2RlZmluZSBPUEVOX1RSRUVfQ0xPTkVcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyAwKVxcdC8qIENsb25lIHRoZSB0YXJnZXQgdHJlZSBhbmQgYXR0YWNoIHRoZSBjbG9uZSAqL1xcbiAjZGVmaW5lIE9QRU5fVFJFRV9OQU1FU1BBQ0VcXHQoMSBcXHUwMDNjXFx1MDAzYyAxKVxcdC8qIENsb25lIHRoZSB0YXJnZXQgdHJlZSBpbnRvIGEgbmV3IG1vdW50IG5hbWVzcGFjZSAqL1xcbisjZGVmaW5lIE9QRU5fVFJFRV9BTFRcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyAyKVxcdC8qIExvb2t1cCBpbiBhbHRlcm5hdGl2ZSBuYW1lc3BhY2UgKi9cXG4gI2RlZmluZSBPUEVOX1RSRUVfQ0xPRVhFQ1xcdE9fQ0xPRVhFQ1xcdC8qIENsb3NlIHRoZSBmaWxlIG9uIGV4ZWN2ZSgpICovXFxuIFxcbiAvKlxcbmRpZmYgLS1naXQgYS9zY3JpcHRzL2dkYi9saW51eC9wcm9jLnB5IGIvc2NyaXB0cy9nZGIvbGludXgvcHJvYy5weVxcbmluZGV4IDY1ZGQxYmQxMjk2NDFkLi41YWFmMmRkOGRiMDVhMSAxMDA2NDRcXG4tLS0gYS9zY3JpcHRzL2dkYi9saW51eC9wcm9jLnB5XFxuKysrIGIvc2NyaXB0cy9nZGIvbGludXgvcHJvYy5weVxcbkBAIC0xNzQsOSArMTc0LDYgQEAgdmFsdWVzIG9mIHRoYXQgcHJvY2VzcyBuYW1lc3BhY2VcXFwiXFxcIlxcXCJcXG4gICAgICAgICAgICAgICAgICAgXFxcIm1vdW50XFxcIiwgXFxcInN1cGVyX2Jsb2NrXFxcIiwgXFxcImRldm5hbWVcXFwiLCBcXFwicGF0aG5hbWVcXFwiLCBcXFwiZnN0eXBlXFxcIikpXFxuIFxcbiAgICAgICAgIGZvciBtbnQgaW4gcmJ0cmVlLnJiX2lub3JkZXJfZm9yX2VhY2hfZW50cnkobmFtZXNwYWNlWydtb3VudHMnXSwgbW91bnRfcHRyX3R5cGUsIFxcXCJtbnRfbm9kZVxcXCIpOlxcbi0gICAgICAgICAgICBkZXZuYW1lID0gbW50WydtbnRfZGV2bmFtZSddLnN0cmluZygpXFxuLSAgICAgICAgICAgIGRldm5hbWUgPSBkZXZuYW1lIGlmIGRldm5hbWUgZWxzZSBcXFwibm9uZVxcXCJcXG4tXFxuICAgICAgICAgICAgIHBhdGhuYW1lID0gXFxcIlxcXCJcXG4gICAgICAgICAgICAgcGFyZW50ID0gbW50XFxuICAgICAgICAgICAgIHdoaWxlIFRydWU6XFxuQEAgLTE5MCw2ICsxODcsOCBAQCB2YWx1ZXMgb2YgdGhhdCBwcm9jZXNzIG5hbWVzcGFjZVxcXCJcXFwiXFxcIlxcbiAgICAgICAgICAgICAgICAgcGF0aG5hbWUgPSBcXFwiL1xcXCJcXG4gXFxuICAgICAgICAgICAgIHN1cGVyYmxvY2sgPSBtbnRbJ21udCddWydtbnRfc2InXVxcbisgICAgICAgICAgICBkZXZuYW1lID0gc3VwZXJibG9ja1snc19kZXZuYW1lJ10uc3RyaW5nKClcXG4rICAgICAgICAgICAgZGV2bmFtZSA9IGRldm5hbWUgaWYgZGV2bmFtZSBlbHNlIFxcXCJub25lXFxcIlxcbiAgICAgICAgICAgICBmc3R5cGUgPSBzdXBlcmJsb2NrWydzX3R5cGUnXVsnbmFtZSddLnN0cmluZygpXFxuICAgICAgICAgICAgIHNfZmxhZ3MgPSBpbnQoc3VwZXJibG9ja1snc19mbGFncyddKVxcbiAgICAgICAgICAgICBtX2ZsYWdzID0gaW50KG1udFsnbW50J11bJ21udF9mbGFncyddKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQxNjowODoyNS42NTI4NDEzMjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4NzM1ODc0MzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVST0ZTX0ZTXCIsXG4gICAgXCJPVkVSTEFZX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWV0YWZzX2dldF9yb290XCIsXG4gICAgXCJtZXRhZnNfY3JlYXRlX3Jvb3RcIixcbiAgICBcIm1ldGFmc19yb290X2xvb2t1cFwiLFxuICAgIFwibWV0YWZzX21vdW50X2xvb2t1cFwiLFxuICAgIFwibWV0YWZzX29wdGlvbnNfbG9va3VwXCIsXG4gICAgXCJtZXRhZnNfb3B0aW9uX3ZhbHVlc19sb29rdXBcIixcbiAgICBcIm1ldGFmc19nZXRfb3B0aW9uX3ZhbHVlc1wiLFxuICAgIFwibWV0YWZzX2dldF9saW5rXCIsXG4gICAgXCJtZXRhZnNfcmVhZGxpbmtcIixcbiAgICBcIm1udF9zaG93X29wdGlvbnNcIixcbiAgICBcInNiX2FkZF9vcHRpb25cIixcbiAgICBcInNiX2FkZF9vcHRpb25fcGF0aFwiLFxuICAgIFwib3ZsX2dldF9vcHRpb25zXCIsXG4gICAgXCJlcm9mc19nZXRfb3B0aW9uc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgdmlydHVhbCBmaWxlc3lzdGVtIGBtZXRhZnNgIHRoYXQgZXhwb3NlcyBtZXRhZGF0YSBhYm91dCBmaWxlcyBhbmQgZmlsZXN5c3RlbXMgdmlhIHRoZSBgT19BTFRgIGZsYWcuIEl0IGFsc28gaW50cm9kdWNlcyBhIG5ldyBgZ2V0X29wdGlvbnNgIHN1cGVyIG9wZXJhdGlvbiwgaW1wbGVtZW50ZWQgYnkgYGVyb2ZzYCBhbmQgYG92ZXJsYXlmc2AuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIFZGUyBhbmQgc3BlY2lmaWMgZmlsZXN5c3RlbXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc4YzhkOWU5MzRjZThhOWJjMWFlMGM5OTRmNDYzODU0YmQyZjk4MTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxNSAxNjowODoyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxuaW5kZXggN2M3NTMxNDhhZjg4ODMuLjNkYzQzMWI2Y2RiYjBiIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3RcbkBAIC0zMTQsNyArMzE0LDcgQEAgb3IgYm90dG9tIGhhbGYpLlxuIGBgc2hvd19kZXZuYW1lYGBcbiBcdE9wdGlvbmFsLiBDYWxsZWQgYnkgdGhlIFZGUyB0byBzaG93IGRldmljZSBuYW1lIGZvclxuIFx0L3Byb2MvXHUwMDNjcGlkXHUwMDNlL3ttb3VudHMsbW91bnRpbmZvLG1vdW50c3RhdHN9LiBJZiBub3QgcHJvdmlkZWQgdGhlblxuLVx0JyhzdHJ1Y3QgbW91bnQpLm1udF9kZXZuYW1lJyB3aWxsIGJlIHVzZWQuXG4rXHQnKHN0cnVjdCBzdXBlcl9ibG9jaykuc19kZXZuYW1lJyB3aWxsIGJlIHVzZWQuXG4gXG4gYGBzaG93X3BhdGhgYFxuIFx0T3B0aW9uYWwuIENhbGxlZCBieSB0aGUgVkZTIChmb3IgL3Byb2MvXHUwMDNjcGlkXHUwMDNlL21vdW50aW5mbykgdG8gc2hvd1xuZGlmZiAtLWdpdCBhL2ZzL01ha2VmaWxlIGIvZnMvTWFrZWZpbGVcbmluZGV4IDg5YThhOWQyMDdkMWM1Li44N2E0YzIzZDVhMDhkZSAxMDA2NDRcbi0tLSBhL2ZzL01ha2VmaWxlXG4rKysgYi9mcy9NYWtlZmlsZVxuQEAgLTU4LDYgKzU4LDggQEAgb2JqLSQoQ09ORklHX0NPTkZJR0ZTX0ZTKVx0Kz0gY29uZmlnZnMvXG4gb2JqLXlcdFx0XHRcdCs9IGRldnB0cy9cbiBcbiBvYmotJChDT05GSUdfRExNKVx0XHQrPSBkbG0vXG4rXG4rb2JqLXlcdFx0XHRcdCs9IG1ldGFmcy9cbiAgXG4gIyBEbyBub3QgYWRkIGFueSBmaWxlc3lzdGVtcyBiZWZvcmUgdGhpcyBsaW5lXG4gb2JqLSQoQ09ORklHX05FVEZTX1NVUFBPUlQpXHQrPSBuZXRmcy9cbmRpZmYgLS1naXQgYS9mcy9lcm9mcy9zdXBlci5jIGIvZnMvZXJvZnMvc3VwZXIuY1xuaW5kZXggODZmYTVjNmEwYzcwODcuLjI1NzUxN2MyOGUxZDM4IDEwMDY0NFxuLS0tIGEvZnMvZXJvZnMvc3VwZXIuY1xuKysrIGIvZnMvZXJvZnMvc3VwZXIuY1xuQEAgLTEwMjgsMjkgKzEwMjgsMzQgQEAgc3RhdGljIGludCBlcm9mc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZXJvZnNfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgZGVudHJ5ICpyb290KVxuK3N0YXRpYyBpbnQgZXJvZnNfZ2V0X29wdGlvbnMoc3RydWN0IHNiX29wdF9jdHggKmN0eCwgc3RydWN0IGRlbnRyeSAqcm9vdClcbiB7XG4gXHRzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gRVJPRlNfU0Iocm9vdC1cdTAwM2VkX3NiKTtcbiBcdHN0cnVjdCBlcm9mc19tb3VudF9vcHRzICpvcHQgPSBcdTAwMjZzYmktXHUwMDNlb3B0O1xuIFxuK1x0aWYgKHNiaS1cdTAwM2VkaWYwLmZpbGUpXG4rXHRcdHNiX2FkZF9vcHRpb25fcGF0aChjdHgsIFwic291cmNlXCIsIE5VTEwsIFx1MDAyNnNiaS1cdTAwM2VkaWYwLmZpbGUtXHUwMDNlZl9wYXRoKTtcbitcbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19FUk9GU19GU19YQVRUUikpXG4tXHRcdHNlcV9wdXRzKHNlcSwgdGVzdF9vcHQob3B0LCBYQVRUUl9VU0VSKSA/XG4tXHRcdFx0XHRcIix1c2VyX3hhdHRyXCIgOiBcIixub3VzZXJfeGF0dHJcIik7XG4rXHRcdHNiX2FkZF9vcHRpb24oY3R4LCB0ZXN0X29wdChvcHQsIFhBVFRSX1VTRVIpID9cbitcdFx0XHQgICAgICBcInVzZXJfeGF0dHJcIiA6IFwibm91c2VyX3hhdHRyXCIsIE5VTEwpO1xuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX1BPU0lYX0FDTCkpXG4tXHRcdHNlcV9wdXRzKHNlcSwgdGVzdF9vcHQob3B0LCBQT1NJWF9BQ0wpID8gXCIsYWNsXCIgOiBcIixub2FjbFwiKTtcbitcdFx0c2JfYWRkX29wdGlvbihjdHgsIHRlc3Rfb3B0KG9wdCwgUE9TSVhfQUNMKSA/IFwiYWNsXCIgOiBcIm5vYWNsXCIsIE5VTEwpO1xuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX1pJUCkpXG4tXHRcdHNlcV9wcmludGYoc2VxLCBcIixjYWNoZV9zdHJhdGVneT0lc1wiLFxuK1x0XHRzYl9hZGRfb3B0aW9uKGN0eCwgXCJjYWNoZV9zdHJhdGVneVwiLFxuIFx0XHRcdCAgZXJvZnNfcGFyYW1fY2FjaGVfc3RyYXRlZ3lbb3B0LVx1MDAzZWNhY2hlX3N0cmF0ZWd5XS5uYW1lKTtcbiBcdGlmICh0ZXN0X29wdChvcHQsIERBWF9BTFdBWVMpKVxuLVx0XHRzZXFfcHV0cyhzZXEsIFwiLGRheD1hbHdheXNcIik7XG4rXHRcdHNiX2FkZF9vcHRpb24oY3R4LCBcImRheFwiLCBcImFsd2F5c1wiKTtcbiBcdGlmICh0ZXN0X29wdChvcHQsIERBWF9ORVZFUikpXG4tXHRcdHNlcV9wdXRzKHNlcSwgXCIsZGF4PW5ldmVyXCIpO1xuK1x0XHRzYl9hZGRfb3B0aW9uKGN0eCwgXCJkYXhcIiwgXCJuZXZlclwiKTtcbiBcdGlmIChlcm9mc19pc19maWxlaW9fbW9kZShzYmkpIFx1MDAyNlx1MDAyNiB0ZXN0X29wdChvcHQsIERJUkVDVF9JTykpXG4tXHRcdHNlcV9wdXRzKHNlcSwgXCIsZGlyZWN0aW9cIik7XG4tXHRpZiAoc2JpLVx1MDAzZWRpZjAuZnNvZmYpXG4tXHRcdHNlcV9wcmludGYoc2VxLCBcIixmc29mZnNldD0lbGx1XCIsIHNiaS1cdTAwM2VkaWYwLmZzb2ZmKTtcbitcdFx0c2JfYWRkX29wdGlvbihjdHgsIFwiZGlyZWN0aW9cIiwgTlVMTCk7XG4rXHRpZiAoc2JpLVx1MDAzZWRpZjAuZnNvZmYpIHtcbitcdFx0Y2hhciAqdmFsIF9fZnJlZShrZnJlZSkgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgXCIlbGx1XCIsIHNiaS1cdTAwM2VkaWYwLmZzb2ZmKTtcbitcdFx0c2JfYWRkX29wdGlvbihjdHgsIFwiZnNvZmZzZXRcIiwgdmFsKTtcbitcdH1cbiBcdGlmICh0ZXN0X29wdChvcHQsIElOT0RFX1NIQVJFKSlcbi1cdFx0c2VxX3B1dHMoc2VxLCBcIixpbm9kZV9zaGFyZVwiKTtcbitcdFx0c2JfYWRkX29wdGlvbihjdHgsIFwiaW5vZGVfc2hhcmVcIiwgTlVMTCk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTA2OSw3ICsxMDc0LDcgQEAgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZXJvZnNfc29wcyA9IHtcbiBcdC5mcmVlX2lub2RlID0gZXJvZnNfZnJlZV9pbm9kZSxcbiBcdC5ldmljdF9pbm9kZSA9IGVyb2ZzX2V2aWN0X2lub2RlLFxuIFx0LnN0YXRmcyA9IGVyb2ZzX3N0YXRmcyxcbi1cdC5zaG93X29wdGlvbnMgPSBlcm9mc19zaG93X29wdGlvbnMsXG4rXHQuZ2V0X29wdGlvbnMgPSBlcm9mc19nZXRfb3B0aW9ucyxcbiB9O1xuIFxuIG1vZHVsZV9pbml0KGVyb2ZzX21vZHVsZV9pbml0KTtcbmRpZmYgLS1naXQgYS9mcy9mY250bC5jIGIvZnMvZmNudGwuY1xuaW5kZXggYzE1OGYwODJmMWRhNGYuLjAxYjc2NWNmYWM4NDc5IDEwMDY0NFxuLS0tIGEvZnMvZmNudGwuY1xuKysrIGIvZnMvZmNudGwuY1xuQEAgLTExNjksNyArMTE2OSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGZjbnRsX2luaXQodm9pZClcbiBcdCAqIEV4Y2VwdGlvbnM6IE9fTk9OQkxPQ0sgaXMgYSB0d28gYml0IGRlZmluZSBvbiBwYXJpc2M7IE9fTkRFTEFZXG4gXHQgKiBpcyBkZWZpbmVkIGFzIE9fTk9OQkxPQ0sgb24gc29tZSBwbGF0Zm9ybXMgYW5kIG5vdCBvbiBvdGhlcnMuXG4gXHQgKi9cbi1cdEJVSUxEX0JVR19PTigyMiAtIDEgLyogZm9yIE9fUkRPTkxZIGJlaW5nIDAgKi8gIT1cbitcdEJVSUxEX0JVR19PTigyMyAtIDEgLyogZm9yIE9fUkRPTkxZIGJlaW5nIDAgKi8gIT1cbiBcdFx0SFdFSUdIVDMyKFxuIFx0XHRcdChWQUxJRF9PUEVOX0ZMQUdTIFx1MDAyNiB+KE9fTk9OQkxPQ0sgfCBPX05ERUxBWSkpIHxcbiBcdFx0XHRfX0ZNT0RFX0VYRUMgfCBfX09fUkVHVUxBUikpO1xuZGlmZiAtLWdpdCBhL2ZzL2ludGVybmFsLmggYi9mcy9pbnRlcm5hbC5oXG5pbmRleCAzNTVkOTNmOTIyMDg2MS4uZTczYTVjMWQ1YjRlZTEgMTAwNjQ0XG4tLS0gYS9mcy9pbnRlcm5hbC5oXG4rKysgYi9mcy9pbnRlcm5hbC5oXG5AQCAtOTUsNiArOTUsNyBAQCBpbnQgcGF0aF91bW91bnQoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIGludCBmbGFncyk7XG4gaW50IHBhdGhfcGl2b3Rfcm9vdChzdHJ1Y3QgcGF0aCAqbmV3LCBzdHJ1Y3QgcGF0aCAqb2xkKTtcbiBcbiBpbnQgc2hvd19wYXRoKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRlbnRyeSAqcm9vdCk7XG4raW50IG1udF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCB2ZnNtb3VudCAqbW50KTtcbiBcbiAvKlxuICAqIGZzX3N0cnVjdC5jXG5kaWZmIC0tZ2l0IGEvZnMvbWV0YWZzL01ha2VmaWxlIGIvZnMvbWV0YWZzL01ha2VmaWxlXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmY4NTViNDhkOWMyYjkwXG4tLS0gL2Rldi9udWxsXG4rKysgYi9mcy9tZXRhZnMvTWFrZWZpbGVcbkBAIC0wLDAgKzEsNiBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKyNcbisjIE1ha2VmaWxlIGZvciBtZXRhIGZpbGVzeXN0ZW1cbisjXG4rXG4rb2JqLXkgOj0gbWV0YWZzLm9cbmRpZmYgLS1naXQgYS9mcy9tZXRhZnMvbWV0YWZzLmMgYi9mcy9tZXRhZnMvbWV0YWZzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMTVlYzBiNjA2NGRhMzhcbi0tLSAvZGV2L251bGxcbisrKyBiL2ZzL21ldGFmcy9tZXRhZnMuY1xuQEAgLTAsMCArMSw1NzIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qXG4rICogbWV0YWZzIC0gdmlydHVhbCBmaWxlc3lzdGVtIGZvciBtZXRhZGF0YSBhY2Nlc3NcbisgKlxuKyAqIFRoaXMgcHJvdmlkZXMgYSB3YXkgdG8gYWNjZXNzIG1ldGFkYXRhIGFib3V0IGZpbGVzIGFuZCBmaWxlc3lzdGVtc1xuKyAqIHRocm91Z2ggT19BTFQgZmlsZSBkZXNjcmlwdG9ycy5cbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tYWdpYy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW91bnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25hbWVpLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kY2FjaGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzZXVkb19mcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZnMvc3VwZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFwibWV0YWZzLmhcIlxuK1xuKy8qXG4rICogbWV0YWZzIHN1cGVyYmxvY2sgYW5kIG1vdW50XG4rICovXG4rc3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqbWV0YWZzX21udCBfX3JvX2FmdGVyX2luaXQ7XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIG1ldGFmc19vcHMgPSB7XG4rXHQuc3RhdGZzXHRcdD0gc2ltcGxlX3N0YXRmcyxcbitcdC5kcm9wX2lub2RlXHQ9IGlub2RlX2p1c3RfZHJvcCxcbit9O1xuK1xuK3N0YXRpYyBpbnQgbWV0YWZzX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4re1xuK1x0c3RydWN0IHBzZXVkb19mc19jb250ZXh0ICpjdHggPSBpbml0X3BzZXVkbyhmYywgMHg0ZDQ1NTQ0MSk7IC8qICdNRVRBJyAqL1xuK1x0aWYgKCFjdHgpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0Y3R4LVx1MDAzZW9wcyA9IFx1MDAyNm1ldGFmc19vcHM7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIG1ldGFmc190eXBlID0ge1xuK1x0Lm5hbWUgPSBcIm1ldGFmc1wiLFxuK1x0LmluaXRfZnNfY29udGV4dCA9IG1ldGFmc19pbml0X2ZzX2NvbnRleHQsXG4rXHQua2lsbF9zYiA9IGtpbGxfYW5vbl9zdXBlcixcbit9O1xuK1xuKy8qXG4rICogTW91bnQgb3B0aW9uIGNvbGxlY3Rpb24gc3RydWN0dXJlc1xuKyAqL1xuK2VudW0gbWV0YWZzX2RlbnRyeV90eXBlIHtcbitcdE1FVEFGU19ST09ULFxuK1x0TUVUQUZTX09QVElPTl9WQUxVRVMsXG4rXHRNRVRBRlNfU1lNTElOSyxcbit9O1xuK1xuK3N0cnVjdCBtZXRhZnNfb3B0aW9uX2VudHJ5IHtcbitcdGNoYXIgKnZhbHVlO1xuK1x0c3RydWN0IHBhdGggcGF0aDtcbit9O1xuK1xuK3N0cnVjdCBtZXRhZnNfZGVudHJ5X2luZm8ge1xuK1x0ZW51bSBtZXRhZnNfZGVudHJ5X3R5cGUgdHlwZTtcbitcdHVuaW9uIHtcbitcdFx0c3RydWN0IHtcbitcdFx0XHRzdHJ1Y3QgZmlsZSAqYmFzZTtcbitcdFx0fSByb290O1xuK1x0XHRzdHJ1Y3Qge1xuK1x0XHRcdHN0cnVjdCBtZXRhZnNfb3B0aW9uX2VudHJ5ICplbnRyaWVzO1xuK1x0XHRcdGludCBjb3VudDtcbitcdFx0fSBvcHRfdmFsdWVzO1xuK1x0XHRzdHJ1Y3QgbWV0YWZzX29wdGlvbl9lbnRyeSBzeW1saW5rO1xuK1x0fTtcbit9O1xuK1xuK3N0cnVjdCBtZXRhZnNfY29sbGVjdF9jdHgge1xuK1x0c3RydWN0IHNiX29wdF9jdHggY3R4O1xuK1x0Y29uc3QgY2hhciAqdGFyZ2V0X25hbWU7XG4rXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiO1xuK1x0c3RydWN0IG1ldGFmc19vcHRpb25fZW50cnkgKmVudHJpZXM7XG4rXHRpbnQgY291bnQ7XG4rXHRpbnQgc2l6ZTtcbitcdGludCBlcnI7XG4rXHRib29sIGlzX3NvdXJjZTtcbit9O1xuK1xuKy8qXG4rICogQ29sbGVjdCBzcGVjaWZpYyBtb3VudCBvcHRpb24gdmFsdWVzIGZyb20gdGhlIGJhc2UgZmlsZXN5c3RlbVxuKyAqL1xuK3N0YXRpYyB2b2lkIG1ldGFmc19jb2xsZWN0X29wdGlvbihzdHJ1Y3Qgc2Jfb3B0X2N0eCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLFxuK1x0XHRcdFx0ICBjb25zdCBjaGFyICp2YWx1ZSwgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXG4re1xuK1x0c3RydWN0IG1ldGFmc19jb2xsZWN0X2N0eCAqY29sbGVjdF9jdHggPSBjdHgtXHUwMDNlZGF0YTtcbitcdHN0cnVjdCBtZXRhZnNfb3B0aW9uX2VudHJ5ICplbnRyeTtcbitcbitcdGlmIChzdHJjbXAobmFtZSwgY29sbGVjdF9jdHgtXHUwMDNldGFyZ2V0X25hbWUpICE9IDApXG4rXHRcdHJldHVybjtcbitcbitcdGlmICghdmFsdWUgXHUwMDI2XHUwMDI2IGNvbGxlY3RfY3R4LVx1MDAzZWlzX3NvdXJjZSlcbitcdFx0dmFsdWUgPSBjb2xsZWN0X2N0eC1cdTAwM2VzYi1cdTAwM2VzX2Rldm5hbWU7XG4rXG4rXHRpZiAoY29sbGVjdF9jdHgtXHUwMDNlY291bnQgXHUwMDNlPSBjb2xsZWN0X2N0eC1cdTAwM2VzaXplKSB7XG4rXHRcdGludCBuZXdfc2l6ZSA9IGNvbGxlY3RfY3R4LVx1MDAzZXNpemUgPyBjb2xsZWN0X2N0eC1cdTAwM2VzaXplICogMiA6IDQ7XG4rXHRcdHN0cnVjdCBtZXRhZnNfb3B0aW9uX2VudHJ5ICpuZXdfZW50cmllcztcbitcbitcdFx0bmV3X2VudHJpZXMgPSBrcmVhbGxvY19hcnJheShjb2xsZWN0X2N0eC1cdTAwM2VlbnRyaWVzLCBuZXdfc2l6ZSwgc2l6ZW9mKCpuZXdfZW50cmllcyksXG4rXHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4rXHRcdGlmICghbmV3X2VudHJpZXMpIHtcbitcdFx0XHRjb2xsZWN0X2N0eC1cdTAwM2VlcnIgPSAtRU5PTUVNO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1x0XHRjb2xsZWN0X2N0eC1cdTAwM2VlbnRyaWVzID0gbmV3X2VudHJpZXM7XG4rXHRcdGNvbGxlY3RfY3R4LVx1MDAzZXNpemUgPSBuZXdfc2l6ZTtcbitcdH1cbitcbitcdGVudHJ5ID0gXHUwMDI2Y29sbGVjdF9jdHgtXHUwMDNlZW50cmllc1tjb2xsZWN0X2N0eC1cdTAwM2Vjb3VudF07XG4rXHRlbnRyeS1cdTAwM2V2YWx1ZSA9IHZhbHVlID8ga3N0cmR1cCh2YWx1ZSwgR0ZQX0tFUk5FTCkgOiBOVUxMO1xuK1x0aWYgKCFlbnRyeS1cdTAwM2V2YWx1ZSBcdTAwMjZcdTAwMjYgdmFsdWUpIHtcbitcdFx0Y29sbGVjdF9jdHgtXHUwMDNlZXJyID0gLUVOT01FTTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1x0aWYgKHBhdGgpIHtcbitcdFx0ZW50cnktXHUwMDNlcGF0aCA9ICpwYXRoO1xuK1x0XHRwYXRoX2dldChcdTAwMjZlbnRyeS1cdTAwM2VwYXRoKTtcbitcdH0gZWxzZSB7XG4rXHRcdG1lbXNldChcdTAwMjZlbnRyeS1cdTAwM2VwYXRoLCAwLCBzaXplb2YoZW50cnktXHUwMDNlcGF0aCkpO1xuK1x0fVxuK1x0Y29sbGVjdF9jdHgtXHUwMDNlY291bnQrKztcbit9XG4rXG4rc3RhdGljIHZvaWQgbWV0YWZzX2ZyZWVfZW50cmllcyhzdHJ1Y3QgbWV0YWZzX29wdGlvbl9lbnRyeSAqZW50cmllcywgaW50IGNvdW50KVxuK3tcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY291bnQ7IGkrKykge1xuK1x0XHRrZnJlZShlbnRyaWVzW2ldLnZhbHVlKTtcbitcdFx0aWYgKGVudHJpZXNbaV0ucGF0aC5tbnQpXG4rXHRcdFx0cGF0aF9wdXQoXHUwMDI2ZW50cmllc1tpXS5wYXRoKTtcbitcdH1cbitcdGtmcmVlKGVudHJpZXMpO1xuK31cbitcbitzdGF0aWMgaW50IG1ldGFmc19nZXRfb3B0aW9uX3ZhbHVlcyhzdHJ1Y3QgZmlsZSAqYmFzZSwgY29uc3QgY2hhciAqb3B0aW9uX25hbWUsXG4rXHRcdFx0XHQgICAgc3RydWN0IG1ldGFmc19vcHRpb25fZW50cnkgKiplbnRyaWVzX291dCxcbitcdFx0XHRcdCAgICBpbnQgKmNvdW50X291dClcbit7XG4rXHRjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCA9IFx1MDAyNmJhc2UtXHUwMDNlZl9wYXRoO1xuK1x0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHBhdGgtXHUwMDNlbW50LVx1MDAzZW1udF9zYjtcbitcdHN0cnVjdCBtZXRhZnNfY29sbGVjdF9jdHggY29sbGVjdF9jdHggPSB7XG4rXHRcdC5jdHguZGF0YSA9IFx1MDAyNmNvbGxlY3RfY3R4LFxuK1x0XHQuY3R4LmFjdG9yID0gbWV0YWZzX2NvbGxlY3Rfb3B0aW9uLFxuK1x0XHQudGFyZ2V0X25hbWUgPSBvcHRpb25fbmFtZSxcbitcdFx0LnNiID0gc2IsXG4rXHRcdC5pc19zb3VyY2UgPSAhc3RyY21wKG9wdGlvbl9uYW1lLCBcInNvdXJjZVwiKSxcbitcdH07XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHNiLVx1MDAzZXNfb3AtXHUwMDNlZ2V0X29wdGlvbnMpIHtcbitcdFx0cmV0ID0gc2ItXHUwMDNlc19vcC1cdTAwM2VnZXRfb3B0aW9ucyhcdTAwMjZjb2xsZWN0X2N0eC5jdHgsIHBhdGgtXHUwMDNlbW50LVx1MDAzZW1udF9yb290KTtcbitcdFx0aWYgKHJldCB8fCBjb2xsZWN0X2N0eC5lcnIpIHtcbitcdFx0XHRtZXRhZnNfZnJlZV9lbnRyaWVzKGNvbGxlY3RfY3R4LmVudHJpZXMsIGNvbGxlY3RfY3R4LmNvdW50KTtcbitcdFx0XHRyZXR1cm4gcmV0ID86IGNvbGxlY3RfY3R4LmVycjtcbitcdFx0fVxuK1x0fVxuK1xuK1x0Lyogc3BlY2lhbCBjYXNlOiBhZGQgXCJzb3VyY2VcIiBvcHRpb24gaWYgZmlsZXN5c3RlbSBkaWRuJ3QgYWRkIG9uZSovXG4rXHRpZiAoIWNvbGxlY3RfY3R4LmNvdW50IFx1MDAyNlx1MDAyNiBjb2xsZWN0X2N0eC5pc19zb3VyY2UpIHtcbitcdFx0c3RydWN0IG1ldGFmc19vcHRpb25fZW50cnkgKmVudCBfX2ZyZWUoa2ZyZWUpID0ga3phbGxvY19vYmooKmVudCk7XG4rXG4rXHRcdGlmICghZW50KVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0XHRlbnQtXHUwMDNldmFsdWUgPSBrc3RyZHVwKHNiLVx1MDAzZXNfZGV2bmFtZSwgR0ZQX0tFUk5FTCk7XG4rXHRcdGlmICghZW50LVx1MDAzZXZhbHVlKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0XHRjb2xsZWN0X2N0eC5lbnRyaWVzID0gbm9fZnJlZV9wdHIoZW50KTtcbitcdFx0Y29sbGVjdF9jdHguY291bnQgPSAxO1xuK1x0fVxuK1xuK1x0KmVudHJpZXNfb3V0ID0gY29sbGVjdF9jdHguZW50cmllcztcbitcdCpjb3VudF9vdXQgPSBjb2xsZWN0X2N0eC5jb3VudDtcbitcdHJldHVybiAwO1xuK31cbitcbisvKlxuKyAqIG1ldGFmcyBzeW1saW5rIG9wZXJhdGlvbnNcbisgKi9cbitzdGF0aWMgY29uc3QgY2hhciAqbWV0YWZzX2dldF9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHRcdCAgIHN0cnVjdCBkZWxheWVkX2NhbGwgKmRvbmUpXG4re1xuK1x0c3RydWN0IG1ldGFmc19kZW50cnlfaW5mbyAqaW5mbztcbitcbitcdGlmICghZGVudHJ5KVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRUNISUxEKTtcbitcbitcdGluZm8gPSBkZW50cnktXHUwMDNlZF9mc2RhdGE7XG4rXHRpZiAoaW5mby1cdTAwM2VzeW1saW5rLnBhdGgubW50KSB7XG4rXHRcdGludCBlcnJvcjtcbitcbitcdFx0cGF0aF9nZXQoXHUwMDI2aW5mby1cdTAwM2VzeW1saW5rLnBhdGgpO1xuK1x0XHRlcnJvciA9IG5kX2p1bXBfbGluayhcdTAwMjZpbmZvLVx1MDAzZXN5bWxpbmsucGF0aCk7XG4rXHRcdHJldHVybiBFUlJfUFRSKGVycm9yKTtcbitcdH1cbitcbitcdHJldHVybiBFUlJfUFRSKC1FTE9PUCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbWV0YWZzX3JlYWRsaW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbitcdFx0XHQgICBpbnQgYnVmbGVuKVxuK3tcbitcdHN0cnVjdCBtZXRhZnNfZGVudHJ5X2luZm8gKmluZm8gPSBkZW50cnktXHUwMDNlZF9mc2RhdGE7XG4rXHRjb25zdCBjaGFyICp2YWx1ZSA9IGluZm8tXHUwMDNlc3ltbGluay52YWx1ZTtcbitcbitcdGlmICghdmFsdWUpXG4rXHRcdHZhbHVlID0gXCJcIjtcbitcbitcdHJldHVybiByZWFkbGlua19jb3B5KGJ1ZmZlciwgYnVmbGVuLCB2YWx1ZSwgc3RybGVuKHZhbHVlKSk7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBtZXRhZnNfc3ltbGlua19pb3BzID0ge1xuK1x0LmdldF9saW5rXHQ9IG1ldGFmc19nZXRfbGluayxcbitcdC5yZWFkbGlua1x0PSBtZXRhZnNfcmVhZGxpbmssXG4rfTtcbitcbisvKlxuKyAqIERlbnRyeSBvcGVyYXRpb25zIC0gY2xlYW51cFxuKyAqL1xuK3N0YXRpYyB2b2lkIG1ldGFmc19kX3JlbGVhc2Uoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuK3tcbitcdHN0cnVjdCBtZXRhZnNfZGVudHJ5X2luZm8gKmluZm8gPSBkZW50cnktXHUwMDNlZF9mc2RhdGE7XG4rXG4rXHRpZiAoIWluZm8pXG4rXHRcdHJldHVybjtcbitcbitcdHN3aXRjaCAoaW5mby1cdTAwM2V0eXBlKSB7XG4rXHRjYXNlIE1FVEFGU19ST09UOlxuK1x0XHRmcHV0KGluZm8tXHUwMDNlcm9vdC5iYXNlKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIE1FVEFGU19PUFRJT05fVkFMVUVTOlxuK1x0XHRtZXRhZnNfZnJlZV9lbnRyaWVzKGluZm8tXHUwMDNlb3B0X3ZhbHVlcy5lbnRyaWVzLFxuK1x0XHRcdFx0ICAgIGluZm8tXHUwMDNlb3B0X3ZhbHVlcy5jb3VudCk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBNRVRBRlNfU1lNTElOSzpcbitcdFx0a2ZyZWUoaW5mby1cdTAwM2VzeW1saW5rLnZhbHVlKTtcbitcdFx0aWYgKGluZm8tXHUwMDNlc3ltbGluay5wYXRoLm1udClcbitcdFx0XHRwYXRoX3B1dChcdTAwMjZpbmZvLVx1MDAzZXN5bWxpbmsucGF0aCk7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0V0FSTl9PTigxKTtcbitcdH1cbitcdGtmcmVlKGluZm8pO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIG1ldGFmc19kZW50cnlfb3BzID0ge1xuK1x0LmRfcmVsZWFzZSA9IG1ldGFmc19kX3JlbGVhc2UsXG4rfTtcbitcbisvKlxuKyAqIG1ldGFmcyBkaXJlY3Rvcnkgb3BlcmF0aW9ucyAtIGZvcndhcmQgZGVjbGFyYXRpb25zXG4rICovXG4rc3RhdGljIHN0cnVjdCBmaWxlICptZXRhZnNfZ2V0X2Jhc2VfZmlsZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICptZXRhZnNfcm9vdF9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbitcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBmbGFncyk7XG4rc3RhdGljIHN0cnVjdCBkZW50cnkgKm1ldGFmc19tb3VudF9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbitcdFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICptZXRhZnNfb3B0aW9uc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbitcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBmbGFncyk7XG4rc3RhdGljIHN0cnVjdCBkZW50cnkgKm1ldGFmc19vcHRpb25fdmFsdWVzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuK1x0XHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IGZsYWdzKTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWV0YWZzX3Jvb3RfZGlyX2lvcHMgPSB7XG4rXHQubG9va3VwXHRcdD0gbWV0YWZzX3Jvb3RfbG9va3VwLFxuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1ldGFmc19tb3VudF9kaXJfaW9wcyA9IHtcbitcdC5sb29rdXBcdFx0PSBtZXRhZnNfbW91bnRfbG9va3VwLFxuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1ldGFmc19vcHRpb25zX2Rpcl9pb3BzID0ge1xuK1x0Lmxvb2t1cFx0XHQ9IG1ldGFmc19vcHRpb25zX2xvb2t1cCxcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBtZXRhZnNfb3B0aW9uX3ZhbHVlc19kaXJfaW9wcyA9IHtcbitcdC5sb29rdXBcdFx0PSBtZXRhZnNfb3B0aW9uX3ZhbHVlc19sb29rdXAsXG4rfTtcbitcbisvKlxuKyAqIENyZWF0ZSBhIG5ldyBpbm9kZSBpbiBtZXRhZnNcbisgKi9cbitzdGF0aWMgc3RydWN0IGlub2RlICptZXRhZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVtb2RlX3QgbW9kZSxcbitcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zICppb3BzKVxuK3tcbitcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBuZXdfaW5vZGUoc2IpO1xuK1xuK1x0aWYgKCFpbm9kZSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRpbm9kZS1cdTAwM2VpX2lubyA9IGdldF9uZXh0X2lubygpO1xuK1x0aW5vZGUtXHUwMDNlaV9tb2RlID0gbW9kZTtcbitcdHNpbXBsZV9pbm9kZV9pbml0X3RzKGlub2RlKTtcbitcbitcdGlmIChTX0lTRElSKG1vZGUpKSB7XG4rXHRcdGlub2RlLVx1MDAzZWlfb3AgPSBpb3BzO1xuK1x0XHRpbmNfbmxpbmsoaW5vZGUpO1xuK1x0fSBlbHNlIGlmIChTX0lTTE5LKG1vZGUpKSB7XG4rXHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZtZXRhZnNfc3ltbGlua19pb3BzO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGlub2RlO1xuK31cbitcbisvKlxuKyAqIExvb2t1cCBpbiByb290IGRpcmVjdG9yeSAoLylcbisgKiBPbmx5IFwibW91bnRcIiBpcyB2YWxpZCBoZXJlXG4rICovXG4rc3RhdGljIHN0cnVjdCBkZW50cnkgKm1ldGFmc19yb290X2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuK1x0XHRcdFx0XHQgdW5zaWduZWQgaW50IGZsYWdzKVxuK3tcbitcdGNvbnN0IGNoYXIgKm5hbWUgPSBkZW50cnktXHUwMDNlZF9uYW1lLm5hbWU7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuK1xuK1x0aWYgKHN0cmNtcChuYW1lLCBcIm1vdW50XCIpICE9IDApXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuK1xuK1x0aW5vZGUgPSBtZXRhZnNfZ2V0X2lub2RlKGRpci1cdTAwM2VpX3NiLCBTX0lGRElSIHwgMDU1NSwgXHUwMDI2bWV0YWZzX21vdW50X2Rpcl9pb3BzKTtcbitcdGlmICghaW5vZGUpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuK1xuK1x0ZF9hZGQoZGVudHJ5LCBpbm9kZSk7XG4rXHRkX21hcmtfZG9udGNhY2hlKGlub2RlKTtcbitcdHJldHVybiBOVUxMO1xuK31cbitcbisvKlxuKyAqIExvb2t1cCBpbiAvbW91bnQgZGlyZWN0b3J5XG4rICogT25seSBcIm9wdGlvbnNcIiBpcyB2YWxpZCBoZXJlXG4rICovXG4rc3RhdGljIHN0cnVjdCBkZW50cnkgKm1ldGFmc19tb3VudF9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbitcdFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4re1xuK1x0Y29uc3QgY2hhciAqbmFtZSA9IGRlbnRyeS1cdTAwM2VkX25hbWUubmFtZTtcbitcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4rXG4rXHRpZiAoc3RyY21wKG5hbWUsIFwib3B0aW9uc1wiKSAhPSAwKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcbitcbitcdGlub2RlID0gbWV0YWZzX2dldF9pbm9kZShkaXItXHUwMDNlaV9zYiwgU19JRkRJUiB8IDA1NTUsIFx1MDAyNm1ldGFmc19vcHRpb25zX2Rpcl9pb3BzKTtcbitcdGlmICghaW5vZGUpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuK1xuK1x0ZF9hZGQoZGVudHJ5LCBpbm9kZSk7XG4rXHRkX21hcmtfZG9udGNhY2hlKGlub2RlKTtcbitcdHJldHVybiBOVUxMO1xuK31cbitcbisvKlxuKyAqIExvb2t1cCBpbiAvbW91bnQvb3B0aW9ucyBkaXJlY3RvcnlcbisgKiBDb2xsZWN0IHZhbHVlcyBmb3IgdGhlIHJlcXVlc3RlZCBvcHRpb24gbmFtZVxuKyAqL1xuK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICptZXRhZnNfb3B0aW9uc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbitcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBmbGFncylcbit7XG4rXHRjb25zdCBjaGFyICp0YXJnZXRfbmFtZSA9IGRlbnRyeS1cdTAwM2VkX25hbWUubmFtZTtcbitcdHN0cnVjdCBmaWxlICpiYXNlO1xuK1x0c3RydWN0IG1ldGFmc19kZW50cnlfaW5mbyAqaW5mbztcbitcdHN0cnVjdCBtZXRhZnNfb3B0aW9uX2VudHJ5ICplbnRyaWVzID0gTlVMTDtcbitcdGludCBjb3VudCA9IDA7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuK1x0aW50IHJldDtcbitcbitcdGJhc2UgPSBtZXRhZnNfZ2V0X2Jhc2VfZmlsZShkZW50cnktXHUwMDNlZF9wYXJlbnQpO1xuK1x0aWYgKCFiYXNlKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcbitcbitcdHJldCA9IG1ldGFmc19nZXRfb3B0aW9uX3ZhbHVlcyhiYXNlLCB0YXJnZXRfbmFtZSwgXHUwMDI2ZW50cmllcywgXHUwMDI2Y291bnQpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbitcbitcdGlmIChjb3VudCA9PSAwKSB7XG4rXHRcdGtmcmVlKGVudHJpZXMpO1xuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcbitcdH1cbitcbitcdGluZm8gPSBremFsbG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFpbmZvKSB7XG4rXHRcdG1ldGFmc19mcmVlX2VudHJpZXMoZW50cmllcywgY291bnQpO1xuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcdH1cbitcbitcdGluZm8tXHUwMDNldHlwZSA9IE1FVEFGU19PUFRJT05fVkFMVUVTO1xuK1x0aW5mby1cdTAwM2VvcHRfdmFsdWVzLmVudHJpZXMgPSBlbnRyaWVzO1xuK1x0aW5mby1cdTAwM2VvcHRfdmFsdWVzLmNvdW50ID0gY291bnQ7XG4rXG4rXHRpbm9kZSA9IG1ldGFmc19nZXRfaW5vZGUoZGlyLVx1MDAzZWlfc2IsIFNfSUZESVIgfCAwNTU1LCBcdTAwMjZtZXRhZnNfb3B0aW9uX3ZhbHVlc19kaXJfaW9wcyk7XG4rXHRpZiAoIWlub2RlKSB7XG4rXHRcdG1ldGFmc19mcmVlX2VudHJpZXMoZW50cmllcywgY291bnQpO1xuK1x0XHRrZnJlZShpbmZvKTtcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXHR9XG4rXG4rXHRkZW50cnktXHUwMDNlZF9mc2RhdGEgPSBpbmZvO1xuK1x0ZF9hZGQoZGVudHJ5LCBpbm9kZSk7XG4rXHRkX21hcmtfZG9udGNhY2hlKGlub2RlKTtcbitcdHJldHVybiBOVUxMO1xuK31cbitcbisvKlxuKyAqIExvb2t1cCBpbiBvcHRpb24tc3BlY2lmaWMgZGlyZWN0b3J5IChlLmcuLCAvbW91bnQvb3B0aW9ucy9sb3dlcmRpci8pXG4rICogUmV0dXJuIG51bWJlcmVkIGVudHJpZXMgKDAsIDEsIDIsIC4uLikgYXMgc3ltbGlua3NcbisgKi9cbitzdGF0aWMgc3RydWN0IGRlbnRyeSAqbWV0YWZzX29wdGlvbl92YWx1ZXNfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdFx0XHRcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuK1x0XHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IGZsYWdzKVxuK3tcbitcdGNvbnN0IGNoYXIgKnRhcmdldF9uYW1lID0gZGVudHJ5LVx1MDAzZWRfbmFtZS5uYW1lO1xuK1x0c3RydWN0IG1ldGFmc19kZW50cnlfaW5mbyAqcGFyZW50X2luZm8sICppbmZvO1xuK1x0c3RydWN0IG1ldGFmc19vcHRpb25fZW50cnkgKmVudHJ5O1xuK1x0c3RydWN0IGlub2RlICppbm9kZTtcbitcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XG4rXHRpbnQgZXJyO1xuK1xuK1x0cGFyZW50X2luZm8gPSBkZW50cnktXHUwMDNlZF9wYXJlbnQtXHUwMDNlZF9mc2RhdGE7XG4rXHRpZiAoV0FSTl9PTighcGFyZW50X2luZm8gfHwgcGFyZW50X2luZm8tXHUwMDNldHlwZSAhPSBNRVRBRlNfT1BUSU9OX1ZBTFVFUykpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuK1xuK1x0aWYgKHRhcmdldF9uYW1lWzBdID09ICcwJyBcdTAwMjZcdTAwMjYgdGFyZ2V0X25hbWVbMV0pXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuK1xuK1x0ZXJyID0ga3N0cnRvdWwodGFyZ2V0X25hbWUsIDEwLCBcdTAwMjZpbmRleCk7XG4rXHRpZiAoZXJyIHx8IGluZGV4IFx1MDAzZT0gcGFyZW50X2luZm8tXHUwMDNlb3B0X3ZhbHVlcy5jb3VudClcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XG4rXG4rXHRlbnRyeSA9IFx1MDAyNnBhcmVudF9pbmZvLVx1MDAzZW9wdF92YWx1ZXMuZW50cmllc1tpbmRleF07XG4rXG4rXHRpbmZvID0ga3phbGxvYyhzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKTtcbitcdGlmICghaW5mbylcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXG4rXHRpbmZvLVx1MDAzZXR5cGUgPSBNRVRBRlNfU1lNTElOSztcbitcdGlmIChlbnRyeS1cdTAwM2V2YWx1ZSkge1xuK1x0XHRpbmZvLVx1MDAzZXN5bWxpbmsudmFsdWUgPSBrc3RyZHVwKGVudHJ5LVx1MDAzZXZhbHVlLCBHRlBfS0VSTkVMKTtcbitcdFx0aWYgKCFpbmZvLVx1MDAzZXN5bWxpbmsudmFsdWUpIHtcbitcdFx0XHRrZnJlZShpbmZvKTtcbitcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcdFx0fVxuK1x0fVxuK1x0aWYgKGVudHJ5LVx1MDAzZXBhdGgubW50KSB7XG4rXHRcdGluZm8tXHUwMDNlc3ltbGluay5wYXRoID0gZW50cnktXHUwMDNlcGF0aDtcbitcdFx0cGF0aF9nZXQoXHUwMDI2aW5mby1cdTAwM2VzeW1saW5rLnBhdGgpO1xuK1x0fVxuK1xuK1x0aW5vZGUgPSBtZXRhZnNfZ2V0X2lub2RlKGRpci1cdTAwM2VpX3NiLCBTX0lGTE5LIHwgMDc3NywgTlVMTCk7XG4rXHRpZiAoIWlub2RlKSB7XG4rXHRcdGtmcmVlKGluZm8tXHUwMDNlc3ltbGluay52YWx1ZSk7XG4rXHRcdGlmIChpbmZvLVx1MDAzZXN5bWxpbmsucGF0aC5tbnQpXG4rXHRcdFx0cGF0aF9wdXQoXHUwMDI2aW5mby1cdTAwM2VzeW1saW5rLnBhdGgpO1xuK1x0XHRrZnJlZShpbmZvKTtcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXHR9XG4rXG4rXHRkZW50cnktXHUwMDNlZF9mc2RhdGEgPSBpbmZvO1xuK1x0ZF9hZGQoZGVudHJ5LCBpbm9kZSk7XG4rXHRkX21hcmtfZG9udGNhY2hlKGlub2RlKTtcbitcdHJldHVybiBOVUxMO1xuK31cbitcbisvKlxuKyAqIEhlbHBlciB0byBnZXQgYmFzZSBmaWxlIGZyb20gYW55IG1ldGFmcyBkZW50cnlcbisgKi9cbitzdGF0aWMgc3RydWN0IGZpbGUgKm1ldGFmc19nZXRfYmFzZV9maWxlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbit7XG4rXHR3aGlsZSAoZGVudHJ5KSB7XG4rXHRcdHN0cnVjdCBtZXRhZnNfZGVudHJ5X2luZm8gKmluZm8gPSBkZW50cnktXHUwMDNlZF9mc2RhdGE7XG4rXG4rXHRcdGlmIChpbmZvIFx1MDAyNlx1MDAyNiBpbmZvLVx1MDAzZXR5cGUgPT0gTUVUQUZTX1JPT1QpXG4rXHRcdFx0cmV0dXJuIGluZm8tXHUwMDNlcm9vdC5iYXNlO1xuK1x0XHRpZiAoZGVudHJ5ID09IGRlbnRyeS1cdTAwM2VkX3BhcmVudClcbitcdFx0XHRicmVhaztcbitcdFx0ZGVudHJ5ID0gZGVudHJ5LVx1MDAzZWRfcGFyZW50O1xuK1x0fVxuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuKy8qXG4rICogQ3JlYXRlIHRoZSByb290IGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9yIGEgbWV0YWRhdGEgb3BlblxuKyAqL1xuK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICptZXRhZnNfY3JlYXRlX3Jvb3Qoc3RydWN0IGZpbGUgKmJhc2UpXG4re1xuK1x0c3RydWN0IGlub2RlICppbm9kZTtcbitcdHN0cnVjdCBkZW50cnkgKnJvb3Q7XG4rXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gbWV0YWZzX21udC1cdTAwM2VtbnRfc2I7XG4rXHRzdHJ1Y3QgbWV0YWZzX2RlbnRyeV9pbmZvICppbmZvO1xuK1xuK1x0aW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWluZm8pXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuK1xuK1x0aW5mby1cdTAwM2V0eXBlID0gTUVUQUZTX1JPT1Q7XG4rXHRpbmZvLVx1MDAzZXJvb3QuYmFzZSA9IGdldF9maWxlKGJhc2UpO1xuK1xuK1x0aW5vZGUgPSBtZXRhZnNfZ2V0X2lub2RlKHNiLCBTX0lGRElSIHwgMDU1NSwgXHUwMDI2bWV0YWZzX3Jvb3RfZGlyX2lvcHMpO1xuK1x0aWYgKCFpbm9kZSkge1xuK1x0XHRmcHV0KGluZm8tXHUwMDNlcm9vdC5iYXNlKTtcbitcdFx0a2ZyZWUoaW5mbyk7XG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuK1x0fVxuK1xuK1x0cm9vdCA9IGRfYWxsb2NfYW5vbihzYik7XG4rXHRpZiAoIXJvb3QpIHtcbitcdFx0aXB1dChpbm9kZSk7XG4rXHRcdGZwdXQoaW5mby1cdTAwM2Vyb290LmJhc2UpO1xuK1x0XHRrZnJlZShpbmZvKTtcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXHR9XG4rXG4rXHQvKiBTdG9yZSB0aGUgaW5mbyBpbiBkX2ZzZGF0YSBiZWZvcmUgaW5zdGFudGlhdGluZyAqL1xuK1x0cm9vdC1cdTAwM2VkX2ZzZGF0YSA9IGluZm87XG4rXHRkX2luc3RhbnRpYXRlKHJvb3QsIGlub2RlKTtcbitcdGRfbWFya19kb250Y2FjaGUoaW5vZGUpO1xuK1xuK1x0cmV0dXJuIHJvb3Q7XG4rfVxuK1xuKy8qXG4rICogR2V0IG1ldGFkYXRhIHJvb3QgcGF0aCBmb3IgYSBiYXNlIGZpbGUuXG4rICpcbisgKiBUaGlzIGlzIGNhbGxlZCBmcm9tIHBhdGhfaW5pdCgpIHdoZW4gT19BTFQgaXMgdXNlZC5cbisgKiBJdCByZXR1cm5zIGEgcGF0aCBpbiB0aGUgbWV0YWZzIHRoYXQgc2VydmVzIGFzIHRoZSByb290XG4rICogZm9yIHRoZSBtZXRhZGF0YSBsb29rdXAuXG4rICovXG4raW50IG1ldGFmc19nZXRfcm9vdChzdHJ1Y3QgZmlsZSAqYmFzZSwgc3RydWN0IHBhdGggKnBhdGgpXG4re1xuK1x0c3RydWN0IGRlbnRyeSAqcm9vdDtcbitcbitcdGlmICghYmFzZSlcbitcdFx0cmV0dXJuIC1FQkFERjtcbitcbitcdC8qIENyZWF0ZSB0aGUgbWV0YWRhdGEgcm9vdCBmb3IgdGhpcyBiYXNlIGZpbGUgKi9cbitcdHJvb3QgPSBtZXRhZnNfY3JlYXRlX3Jvb3QoYmFzZSk7XG4rXHRpZiAoSVNfRVJSKHJvb3QpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihyb290KTtcbitcbitcdC8qXG4rXHQgKiBSZXR1cm4gdGhlIHBhdGggdG8gdGhlIG1ldGFkYXRhIHJvb3QuXG4rXHQgKiBOb3JtYWwgVkZTIGxvb2t1cCB3aWxsIHRha2Ugb3ZlciBmcm9tIGhlcmUuXG4rXHQgKi9cbitcdHBhdGgtXHUwMDNlbW50ID0gbW50Z2V0KG1ldGFmc19tbnQpO1xuK1x0cGF0aC1cdTAwM2VkZW50cnkgPSByb290O1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG1ldGFmc19nZXRfcm9vdCk7XG4rXG4rc3RhdGljIGludCBfX2luaXQgbWV0YWZzX2luaXQodm9pZClcbit7XG4rXHRpbnQgZXJyO1xuK1xuK1x0ZXJyID0gcmVnaXN0ZXJfZmlsZXN5c3RlbShcdTAwMjZtZXRhZnNfdHlwZSk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0bWV0YWZzX21udCA9IGtlcm5fbW91bnQoXHUwMDI2bWV0YWZzX3R5cGUpO1xuK1x0aWYgKElTX0VSUihtZXRhZnNfbW50KSkge1xuK1x0XHRlcnIgPSBQVFJfRVJSKG1ldGFmc19tbnQpO1xuK1x0XHR1bnJlZ2lzdGVyX2ZpbGVzeXN0ZW0oXHUwMDI2bWV0YWZzX3R5cGUpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1x0c2V0X2RlZmF1bHRfZF9vcChtZXRhZnNfbW50LVx1MDAzZW1udF9zYiwgXHUwMDI2bWV0YWZzX2RlbnRyeV9vcHMpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ZzX2luaXRjYWxsKG1ldGFmc19pbml0KTtcbmRpZmYgLS1naXQgYS9mcy9tZXRhZnMvbWV0YWZzLmggYi9mcy9tZXRhZnMvbWV0YWZzLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZDI1NzcxNDI2MGE3ZmJcbi0tLSAvZGV2L251bGxcbisrKyBiL2ZzL21ldGFmcy9tZXRhZnMuaFxuQEAgLTAsMCArMSwxNSBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rI2lmbmRlZiBfTElOVVhfTUVUQUZTX0hcbisjZGVmaW5lIF9MSU5VWF9NRVRBRlNfSFxuK1xuK3N0cnVjdCBwYXRoO1xuK3N0cnVjdCBmaWxlO1xuK1xuKy8qXG4rICogR2V0IG1ldGFkYXRhIHJvb3QgcGF0aCBmb3IgYSBiYXNlIGZpbGUuXG4rICogQ2FsbGVkIGZyb20gcGF0aF9pbml0KCkgd2hlbiBPX0FMVCBmbGFnIGlzIHVzZWQuXG4rICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgd2l0aCBwYXRoIGZpbGxlZCBpbiwgLWVycm5vIG9uIGVycm9yLlxuKyAqL1xuK2ludCBtZXRhZnNfZ2V0X3Jvb3Qoc3RydWN0IGZpbGUgKmJhc2UsIHN0cnVjdCBwYXRoICpwYXRoKTtcbitcbisjZW5kaWYgLyogX0xJTlVYX01FVEFGU19IICovXG5kaWZmIC0tZ2l0IGEvZnMvbW91bnQuaCBiL2ZzL21vdW50LmhcbmluZGV4IDk0ZmNjMzA2ZDIxZTdkLi42OWE5NTNiYzExMmIzNiAxMDA2NDRcbi0tLSBhL2ZzL21vdW50LmhcbisrKyBiL2ZzL21vdW50LmhcbkBAIC02NSw3ICs2NSw2IEBAIHN0cnVjdCBtb3VudCB7XG4gXHRzdHJ1Y3QgbW91bnQgKiBfX2FsaWduZWQoMSkgKm1udF9wcHJldl9mb3Jfc2I7XG4gXHRcdFx0XHRcdC8qIGV4Y2VwdCB0aGF0IExTQiBvZiBwcHJldiBpcyBzdG9sZW4gKi9cbiAjZGVmaW5lIFdSSVRFX0hPTEQgMVx0XHRcdC8qIC4uLiBmb3IgdXNlIGJ5IG1udF9ob2xkX3dyaXRlcnMoKSAqL1xuLVx0Y29uc3QgY2hhciAqbW50X2Rldm5hbWU7XHQvKiBOYW1lIG9mIGRldmljZSBlLmcuIC9kZXYvZHNrL2hkYTEgKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgbW50X2xpc3Q7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIG1udF9leHBpcmU7XHQvKiBsaW5rIGluIGZzLXNwZWNpZmljIGV4cGlyeSBsaXN0ICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIG1udF9zaGFyZTtcdC8qIGNpcmN1bGFyIGxpc3Qgb2Ygc2hhcmVkIG1vdW50cyAqL1xuZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jXG5pbmRleCAxOWNlNDNjOWE2ZTY2Mi4uNDM3YTE0YzQzMmU2N2IgMTAwNjQ0XG4tLS0gYS9mcy9uYW1laS5jXG4rKysgYi9mcy9uYW1laS5jXG5AQCAtNDUsNiArNDUsNyBAQFxuIFxuICNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4gI2luY2x1ZGUgXCJtb3VudC5oXCJcbisjaW5jbHVkZSBcIm1ldGFmcy9tZXRhZnMuaFwiXG4gXG4gLyogW0ZlYi0xOTk3IFQuIFNjaG9lYmVsLVRoZXVlcl1cbiAgKiBGdW5kYW1lbnRhbCBjaGFuZ2VzIGluIHRoZSBwYXRobmFtZSBsb29rdXAgbWVjaGFuaXNtcyAobmFtZWkpXG5AQCAtMjc1Myw2ICsyNzU0LDIxIEBAIHN0YXRpYyBjb25zdCBjaGFyICpwYXRoX2luaXQoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHVuc2lnbmVkIGZsYWdzKVxuIFx0XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XG4gXHRcdH1cbiBcbitcdFx0aWYgKHVubGlrZWx5KGZsYWdzIFx1MDAyNiBMT09LVVBfQUxUKSkge1xuK1x0XHRcdGlmIChmbGFncyBcdTAwMjYgTE9PS1VQX1JDVSlcbitcdFx0XHRcdHJldHVybiBFUlJfUFRSKC1FQ0hJTEQpO1xuK1xuK1x0XHRcdC8qIEhhbmRsZSBPX0FMVDoganVtcCB0byBtZXRhZnMgcm9vdCAqL1xuK1x0XHRcdGVycm9yID0gbWV0YWZzX2dldF9yb290KGZkX2ZpbGUoZiksIFx1MDAyNm5kLVx1MDAzZXBhdGgpO1xuK1x0XHRcdGlmIChlcnJvcilcbitcdFx0XHRcdHJldHVybiBFUlJfUFRSKGVycm9yKTtcbitcbitcdFx0XHRuZC1cdTAwM2Vpbm9kZSA9IG5kLVx1MDAzZXBhdGguZGVudHJ5LVx1MDAzZWRfaW5vZGU7XG4rXHRcdFx0bmQtXHUwMDNlc3RhdGUgfD0gTkRfSlVNUEVEO1xuK1xuK1x0XHRcdHJldHVybiBzO1xuK1x0XHR9XG4rXG4gXHRcdGRlbnRyeSA9IGZkX2ZpbGUoZiktXHUwMDNlZl9wYXRoLmRlbnRyeTtcbiBcbiBcdFx0aWYgKCpzIFx1MDAyNlx1MDAyNiB1bmxpa2VseSghZF9jYW5fbG9va3VwKGRlbnRyeSkpKVxuZGlmZiAtLWdpdCBhL2ZzL25hbWVzcGFjZS5jIGIvZnMvbmFtZXNwYWNlLmNcbmluZGV4IDNkNWNkNWJmM2IwNTM3Li42MmNjNzFjNDAxYTJhYyAxMDA2NDRcbi0tLSBhL2ZzL25hbWVzcGFjZS5jXG4rKysgYi9mcy9uYW1lc3BhY2UuY1xuQEAgLTI4Miw3ICsyODIsNyBAQCBpbnQgbW50X2dldF9jb3VudChzdHJ1Y3QgbW91bnQgKm1udClcbiAjZW5kaWZcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBtb3VudCAqYWxsb2NfdmZzbW50KGNvbnN0IGNoYXIgKm5hbWUpXG4rc3RhdGljIHN0cnVjdCBtb3VudCAqYWxsb2NfdmZzbW50KHZvaWQpXG4ge1xuIFx0c3RydWN0IG1vdW50ICptbnQgPSBrbWVtX2NhY2hlX3phbGxvYyhtbnRfY2FjaGUsIEdGUF9LRVJORUwpO1xuIFx0aWYgKG1udCkge1xuQEAgLTI5MiwxOCArMjkyLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgbW91bnQgKmFsbG9jX3Zmc21udChjb25zdCBjaGFyICpuYW1lKVxuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gb3V0X2ZyZWVfY2FjaGU7XG4gXG4tXHRcdGlmIChuYW1lKVxuLVx0XHRcdG1udC1cdTAwM2VtbnRfZGV2bmFtZSA9IGtzdHJkdXBfY29uc3QobmFtZSxcbi1cdFx0XHRcdFx0XHRcdCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLVx0XHRlbHNlXG4tXHRcdFx0bW50LVx1MDAzZW1udF9kZXZuYW1lID0gXCJub25lXCI7XG4tXHRcdGlmICghbW50LVx1MDAzZW1udF9kZXZuYW1lKVxuLVx0XHRcdGdvdG8gb3V0X2ZyZWVfaWQ7XG4tXG4gI2lmZGVmIENPTkZJR19TTVBcbiBcdFx0bW50LVx1MDAzZW1udF9wY3AgPSBhbGxvY19wZXJjcHUoc3RydWN0IG1udF9wY3ApO1xuIFx0XHRpZiAoIW1udC1cdTAwM2VtbnRfcGNwKVxuLVx0XHRcdGdvdG8gb3V0X2ZyZWVfZGV2bmFtZTtcbitcdFx0XHRnb3RvIG91dF9mcmVlX2lkO1xuIFxuIFx0XHR0aGlzX2NwdV9hZGQobW50LVx1MDAzZW1udF9wY3AtXHUwMDNlbW50X2NvdW50LCAxKTtcbiAjZWxzZVxuQEAgLTMyOCwxMSArMzIwLDkgQEAgc3RhdGljIHN0cnVjdCBtb3VudCAqYWxsb2NfdmZzbW50KGNvbnN0IGNoYXIgKm5hbWUpXG4gXHRyZXR1cm4gbW50O1xuIFxuICNpZmRlZiBDT05GSUdfU01QXG4tb3V0X2ZyZWVfZGV2bmFtZTpcbi1cdGtmcmVlX2NvbnN0KG1udC1cdTAwM2VtbnRfZGV2bmFtZSk7XG4tI2VuZGlmXG4gb3V0X2ZyZWVfaWQ6XG4gXHRtbnRfZnJlZV9pZChtbnQpO1xuKyNlbmRpZlxuIG91dF9mcmVlX2NhY2hlOlxuIFx0a21lbV9jYWNoZV9mcmVlKG1udF9jYWNoZSwgbW50KTtcbiBcdHJldHVybiBOVUxMO1xuQEAgLTcyNSw3ICs3MTUsNiBAQCBpbnQgc2JfcHJlcGFyZV9yZW1vdW50X3JlYWRvbmx5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gc3RhdGljIHZvaWQgZnJlZV92ZnNtbnQoc3RydWN0IG1vdW50ICptbnQpXG4ge1xuIFx0bW50X2lkbWFwX3B1dChtbnRfaWRtYXAoXHUwMDI2bW50LVx1MDAzZW1udCkpO1xuLVx0a2ZyZWVfY29uc3QobW50LVx1MDAzZW1udF9kZXZuYW1lKTtcbiAjaWZkZWYgQ09ORklHX1NNUFxuIFx0ZnJlZV9wZXJjcHUobW50LVx1MDAzZW1udF9wY3ApO1xuICNlbmRpZlxuQEAgLTExODAsNyArMTE2OSw3IEBAIHN0cnVjdCB2ZnNtb3VudCAqdmZzX2NyZWF0ZV9tb3VudChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXHRpZiAoIWZjLVx1MDAzZXJvb3QpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIFxuLVx0bW50ID0gYWxsb2NfdmZzbW50KGZjLVx1MDAzZXNvdXJjZSk7XG4rXHRtbnQgPSBhbGxvY192ZnNtbnQoKTtcbiBcdGlmICghbW50KVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcbkBAIC0xMjQ4LDcgKzEyMzcsNyBAQCBzdGF0aWMgc3RydWN0IG1vdW50ICpjbG9uZV9tbnQoc3RydWN0IG1vdW50ICpvbGQsIHN0cnVjdCBkZW50cnkgKnJvb3QsXG4gXHRzdHJ1Y3QgbW91bnQgKm1udDtcbiBcdGludCBlcnI7XG4gXG4tXHRtbnQgPSBhbGxvY192ZnNtbnQob2xkLVx1MDAzZW1udF9kZXZuYW1lKTtcbitcdG1udCA9IGFsbG9jX3Zmc21udCgpO1xuIFx0aWYgKCFtbnQpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIFxuQEAgLTI5NTcsMTYgKzI5NDYsMTIgQEAgc3RhdGljIGludCBkb19jaGFuZ2VfdHlwZShjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IG1zX2ZsYWdzKVxuIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXlfY29weV90cmVlKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKVxuIHtcbiBcdHN0cnVjdCBtb3VudCAqbW50ID0gcmVhbF9tb3VudChwYXRoLVx1MDAzZW1udCk7XG4tXHRjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgKmRfb3A7XG4gXG4gXHRpZiAoY2hlY2tfbW50KG1udCkpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuLVx0ZF9vcCA9IHBhdGgtXHUwMDNlZGVudHJ5LVx1MDAzZWRfb3A7XG4tXHRpZiAoZF9vcCA9PSBcdTAwMjZuc19kZW50cnlfb3BlcmF0aW9ucylcbi1cdFx0cmV0dXJuIHRydWU7XG4tXG4tXHRpZiAoZF9vcCA9PSBcdTAwMjZwaWRmc19kZW50cnlfb3BlcmF0aW9ucylcbitcdC8qIE1ha2UgYW4gZXhjZXB0aW9uIGZvciBpbnRlcm5hbCBtb3VudHMgZXhwbGljaXRseSBtYXJrZWQgYXMgY2xvbmFibGUgKi9cbitcdGlmIChtbnQtXHUwMDNlbW50X25zID09IE1OVF9OU19JTlRFUk5BTCBcdTAwMjZcdTAwMjYgbW50LVx1MDAzZW1udC5tbnRfZmxhZ3MgXHUwMDI2IE1OVF9DTE9OQUJMRSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHRpZiAoIWlzX21vdW50ZWQocGF0aC1cdTAwM2VtbnQpKVxuQEAgLTMyMDEsNyArMzE4Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgZmlsZSAqdmZzX29wZW5fdHJlZShpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsIHVuc2lnbmVkXG4gXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IH4oQVRfRU1QVFlfUEFUSCB8IEFUX05PX0FVVE9NT1VOVCB8IEFUX1JFQ1VSU0lWRSB8XG4gXHRcdCAgICAgIEFUX1NZTUxJTktfTk9GT0xMT1cgfCBPUEVOX1RSRUVfQ0xPTkUgfFxuLVx0XHQgICAgICBPUEVOX1RSRUVfQ0xPRVhFQyB8IE9QRU5fVFJFRV9OQU1FU1BBQ0UpKVxuK1x0XHQgICAgICBPUEVOX1RSRUVfQ0xPRVhFQyB8IE9QRU5fVFJFRV9OQU1FU1BBQ0UgfCBPUEVOX1RSRUVfQUxUKSlcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gXG4gXHRpZiAoKGZsYWdzIFx1MDAyNiAoQVRfUkVDVVJTSVZFIHwgT1BFTl9UUkVFX0NMT05FIHwgT1BFTl9UUkVFX05BTUVTUEFDRSkpID09XG5AQCAtMzIxNSw2ICszMjAwLDggQEAgc3RhdGljIHN0cnVjdCBmaWxlICp2ZnNfb3Blbl90cmVlKGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwgdW5zaWduZWRcbiBcdFx0bG9va3VwX2ZsYWdzIFx1MDAyNj0gfkxPT0tVUF9BVVRPTU9VTlQ7XG4gXHRpZiAoZmxhZ3MgXHUwMDI2IEFUX1NZTUxJTktfTk9GT0xMT1cpXG4gXHRcdGxvb2t1cF9mbGFncyBcdTAwMjY9IH5MT09LVVBfRk9MTE9XO1xuK1x0aWYgKGZsYWdzIFx1MDAyNiBPUEVOX1RSRUVfQUxUKVxuK1x0XHRsb29rdXBfZmxhZ3MgfD0gTE9PS1VQX0FMVDtcbiBcbiBcdC8qXG4gXHQgKiBJZiB3ZSBjcmVhdGUgYSBuZXcgbW91bnQgbmFtZXNwYWNlIHdpdGggdGhlIGNsb25lZCBtb3VudCB0cmVlIHdlXG5AQCAtNTM4Nyw3ICs1Mzc0LDYgQEAgc3RhdGljIHZvaWQgc3RhdG1vdW50X2ZzX3N1YnR5cGUoc3RydWN0IGtzdGF0bW91bnQgKnMsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxuIHN0YXRpYyBpbnQgc3RhdG1vdW50X3NiX3NvdXJjZShzdHJ1Y3Qga3N0YXRtb3VudCAqcywgc3RydWN0IHNlcV9maWxlICpzZXEpXG4ge1xuIFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHMtXHUwMDNlbW50LVx1MDAzZW1udF9zYjtcbi1cdHN0cnVjdCBtb3VudCAqciA9IHJlYWxfbW91bnQocy1cdTAwM2VtbnQpO1xuIFxuIFx0aWYgKHNiLVx1MDAzZXNfb3AtXHUwMDNlc2hvd19kZXZuYW1lKSB7XG4gXHRcdHNpemVfdCBzdGFydCA9IHNlcS1cdTAwM2Vjb3VudDtcbkBAIC01NDA1LDcgKzUzOTEsNyBAQCBzdGF0aWMgaW50IHN0YXRtb3VudF9zYl9zb3VyY2Uoc3RydWN0IGtzdGF0bW91bnQgKnMsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxuIFx0XHRzZXEtXHUwMDNlY291bnQgPSBzdGFydDtcbiBcdFx0c2VxX2NvbW1pdChzZXEsIHN0cmluZ191bmVzY2FwZV9pbnBsYWNlKHNlcS1cdTAwM2VidWYgKyBzdGFydCwgVU5FU0NBUEVfT0NUQUwpKTtcbiBcdH0gZWxzZSB7XG4tXHRcdHNlcV9wdXRzKHNlcSwgci1cdTAwM2VtbnRfZGV2bmFtZSk7XG4rXHRcdHNlcV9wdXRzKHNlcSwgc2ItXHUwMDNlc19kZXZuYW1lKTtcbiBcdH1cbiBcdHJldHVybiAwO1xuIH1cbkBAIC01NDE2LDYgKzU0MDIsNDAgQEAgc3RhdGljIHZvaWQgc3RhdG1vdW50X21udF9uc19pZChzdHJ1Y3Qga3N0YXRtb3VudCAqcywgc3RydWN0IG1udF9uYW1lc3BhY2UgKm5zKVxuIFx0cy1cdTAwM2VzbS5tbnRfbnNfaWQgPSBucy1cdTAwM2Vucy5uc19pZDtcbiB9XG4gXG4rdm9pZCBzYl9hZGRfb3B0aW9uKHN0cnVjdCBzYl9vcHRfY3R4ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKVxuK3tcbitcdHNiX2FkZF9vcHRpb25fcGF0aChjdHgsIG5hbWUsIHZhbHVlLCBOVUxMKTtcbit9XG4rXG4rdm9pZCBzYl9hZGRfb3B0aW9uX3BhdGgoc3RydWN0IHNiX29wdF9jdHggKmN0eCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUsXG4rXHRcdFx0Y29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXG4re1xuK1x0Y3R4LVx1MDAzZWFjdG9yKGN0eCwgbmFtZSwgdmFsdWUsIHBhdGgpO1xuK31cbitcbitzdGF0aWMgdm9pZCBkb19zaG93X29wdGlvbihzdHJ1Y3Qgc2Jfb3B0X2N0eCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSxcbitcdFx0XHQgICBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aClcbit7XG4rXHRpZiAoc3RyY21wKG5hbWUsIFwic291cmNlXCIpICE9IDApXG4rXHRcdHNlcV9zaG93X29wdGlvbihjdHgtXHUwMDNlZGF0YSwgbmFtZSwgdmFsdWUpO1xuK31cbitcbitpbnQgbW50X3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IHZmc21vdW50ICptbnQpXG4re1xuK1x0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IG1udC1cdTAwM2VtbnRfc2I7XG4rXG4rXHRpZiAoc2ItXHUwMDNlc19vcC1cdTAwM2VzaG93X29wdGlvbnMpXG4rXHRcdHJldHVybiBzYi1cdTAwM2VzX29wLVx1MDAzZXNob3dfb3B0aW9ucyhzZXEsIG1udC1cdTAwM2VtbnRfcm9vdCk7XG4rXG4rXHRpZiAoc2ItXHUwMDNlc19vcC1cdTAwM2VnZXRfb3B0aW9ucykge1xuK1x0XHRzdHJ1Y3Qgc2Jfb3B0X2N0eCBjdHggPSB7IC5kYXRhID0gc2VxLCAuYWN0b3IgPSBkb19zaG93X29wdGlvbiB9O1xuK1xuK1x0XHRyZXR1cm4gc2ItXHUwMDNlc19vcC1cdTAwM2VnZXRfb3B0aW9ucyhcdTAwMjZjdHgsIG1udC1cdTAwM2VtbnRfcm9vdCk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBzdGF0bW91bnRfbW50X29wdHMoc3RydWN0IGtzdGF0bW91bnQgKnMsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxuIHtcbiBcdHN0cnVjdCB2ZnNtb3VudCAqbW50ID0gcy1cdTAwM2VtbnQ7XG5AQCAtNTQyNywxMSArNTQ0Nyw5IEBAIHN0YXRpYyBpbnQgc3RhdG1vdW50X21udF9vcHRzKHN0cnVjdCBrc3RhdG1vdW50ICpzLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSlcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRpZiAoc2ItXHUwMDNlc19vcC1cdTAwM2VzaG93X29wdGlvbnMpIHtcbi1cdFx0ZXJyID0gc2ItXHUwMDNlc19vcC1cdTAwM2VzaG93X29wdGlvbnMoc2VxLCBtbnQtXHUwMDNlbW50X3Jvb3QpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdHJldHVybiBlcnI7XG4tXHR9XG4rXHRlcnIgPSBtbnRfc2hvd19vcHRpb25zKHNlcSwgbW50KTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4gXG4gXHRpZiAodW5saWtlbHkoc2VxX2hhc19vdmVyZmxvd2VkKHNlcSkpKVxuIFx0XHRyZXR1cm4gLUVBR0FJTjtcbkBAIC01NDc5LDE0ICs1NDk3LDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHN0YXRtb3VudF9vcHRfcHJvY2VzcyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc2l6ZV90IHN0YXJ0KVxuIHN0YXRpYyBpbnQgc3RhdG1vdW50X29wdF9hcnJheShzdHJ1Y3Qga3N0YXRtb3VudCAqcywgc3RydWN0IHNlcV9maWxlICpzZXEpXG4ge1xuIFx0c3RydWN0IHZmc21vdW50ICptbnQgPSBzLVx1MDAzZW1udDtcbi1cdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBtbnQtXHUwMDNlbW50X3NiO1xuIFx0c2l6ZV90IHN0YXJ0ID0gc2VxLVx1MDAzZWNvdW50O1xuIFx0aW50IGVycjtcbiBcbi1cdGlmICghc2ItXHUwMDNlc19vcC1cdTAwM2VzaG93X29wdGlvbnMpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0ZXJyID0gc2ItXHUwMDNlc19vcC1cdTAwM2VzaG93X29wdGlvbnMoc2VxLCBtbnQtXHUwMDNlbW50X3Jvb3QpO1xuK1x0ZXJyID0gbW50X3Nob3dfb3B0aW9ucyhzZXEsIG1udCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL25zZnMuYyBiL2ZzL25zZnMuY1xuaW5kZXggYzNiNmFlNzY1OTRhODEuLmUxMTAxMzBkMDc2MGU1IDEwMDY0NFxuLS0tIGEvZnMvbnNmcy5jXG4rKysgYi9mcy9uc2ZzLmNcbkBAIC02ODQsNiArNjg0LDcgQEAgdm9pZCBfX2luaXQgbnNmc19pbml0KHZvaWQpXG4gXHRpZiAoSVNfRVJSKG5zZnNfbW50KSlcbiBcdFx0cGFuaWMoXCJjYW4ndCBzZXQgbnNmcyB1cFxcblwiKTtcbiBcdG5zZnNfbW50LVx1MDAzZW1udF9zYi1cdTAwM2VzX2ZsYWdzIFx1MDAyNj0gflNCX05PVVNFUjtcbitcdG5zZnNfbW50LVx1MDAzZW1udF9mbGFncyB8PSBNTlRfQ0xPTkFCTEU7XG4gXHRuc2ZzX3Jvb3RfcGF0aC5tbnQgPSBuc2ZzX21udDtcbiBcdG5zZnNfcm9vdF9wYXRoLmRlbnRyeSA9IG5zZnNfbW50LVx1MDAzZW1udF9yb290O1xuIH1cbmRpZmYgLS1naXQgYS9mcy9vcGVuLmMgYi9mcy9vcGVuLmNcbmluZGV4IDQwODkyNWQ3YmQwYjc3Li4zYTA4MWE5ZTMwNjI0MyAxMDA2NDRcbi0tLSBhL2ZzL29wZW4uY1xuKysrIGIvZnMvb3Blbi5jXG5AQCAtMTEzMSw3ICsxMTMxLDggQEAgc3RydWN0IGZpbGUgKmtlcm5lbF9maWxlX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIGludCBmbGFncyxcbiBFWFBPUlRfU1lNQk9MX0dQTChrZXJuZWxfZmlsZV9vcGVuKTtcbiBcbiAjZGVmaW5lIFdJTExfQ1JFQVRFKGZsYWdzKVx0KGZsYWdzIFx1MDAyNiAoT19DUkVBVCB8IF9fT19UTVBGSUxFKSlcbi0jZGVmaW5lIE9fUEFUSF9GTEFHU1x0XHQoT19ESVJFQ1RPUlkgfCBPX05PRk9MTE9XIHwgT19QQVRIIHwgT19DTE9FWEVDIHwgT19FTVBUWVBBVEgpXG4rI2RlZmluZSBPX1BBVEhfRkxBR1NcdFx0KE9fRElSRUNUT1JZIHwgT19OT0ZPTExPVyB8IE9fUEFUSCB8IE9fQ0xPRVhFQyB8IE9fRU1QVFlQQVRIIHwgXFxcbitcdFx0XHRcdCBPX0FMVClcbiBcbiBpbmxpbmUgc3RydWN0IG9wZW5faG93IGJ1aWxkX29wZW5faG93KGludCBmbGFncywgdW1vZGVfdCBtb2RlKVxuIHtcbkBAIC0xMjgzLDYgKzEyODQsOCBAQCBpbmxpbmUgaW50IGJ1aWxkX29wZW5fZmxhZ3MoY29uc3Qgc3RydWN0IG9wZW5faG93ICpob3csIHN0cnVjdCBvcGVuX2ZsYWdzICpvcClcbiBcdFx0bG9va3VwX2ZsYWdzIHw9IExPT0tVUF9GT0xMT1c7XG4gXHRpZiAoZmxhZ3MgXHUwMDI2IE9fRU1QVFlQQVRIKVxuIFx0XHRsb29rdXBfZmxhZ3MgfD0gTE9PS1VQX0VNUFRZO1xuK1x0aWYgKGZsYWdzIFx1MDAyNiBPX0FMVClcbitcdFx0bG9va3VwX2ZsYWdzIHw9IExPT0tVUF9BTFQ7XG4gXG4gXHRpZiAoaG93LVx1MDAzZXJlc29sdmUgXHUwMDI2IFJFU09MVkVfTk9fWERFVilcbiBcdFx0bG9va3VwX2ZsYWdzIHw9IExPT0tVUF9OT19YREVWO1xuZGlmZiAtLWdpdCBhL2ZzL292ZXJsYXlmcy9wYXJhbXMuYyBiL2ZzL292ZXJsYXlmcy9wYXJhbXMuY1xuaW5kZXggYzkzZmNhYTQ1ZDRhMzYuLmM1YTllODU4ZTM2NjVlIDEwMDY0NFxuLS0tIGEvZnMvb3ZlcmxheWZzL3BhcmFtcy5jXG4rKysgYi9mcy9vdmVybGF5ZnMvcGFyYW1zLmNcbkBAIC0xMDQ2LDEwICsxMDQ2LDExIEBAIGludCBvdmxfZnNfcGFyYW1zX3ZlcmlmeShjb25zdCBzdHJ1Y3Qgb3ZsX2ZzX2NvbnRleHQgKmN0eCxcbiAgKiBQcmludHMgdGhlIG1vdW50IG9wdGlvbnMgZm9yIGEgZ2l2ZW4gc3VwZXJibG9jay5cbiAgKiBSZXR1cm5zIHplcm87IGRvZXMgbm90IGZhaWwuXG4gICovXG4taW50IG92bF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4raW50IG92bF9nZXRfb3B0aW9ucyhzdHJ1Y3Qgc2Jfb3B0X2N0eCAqY3R4LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4ge1xuIFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRlbnRyeS1cdTAwM2VkX3NiO1xuIFx0c3RydWN0IG92bF9mcyAqb2ZzID0gT1ZMX0ZTKHNiKTtcbitcdHN0cnVjdCBwYXRoIHVwcGVycGF0aDtcbiBcdHNpemVfdCBuciwgbnJfbWVyZ2VkX2xvd2VyLCBucl9sb3dlciA9IDA7XG4gXHRjaGFyICoqbG93ZXJkaXJzID0gb2ZzLVx1MDAzZWNvbmZpZy5sb3dlcmRpcnM7XG4gXG5AQCAtMTA2Miw0MyArMTA2Myw0NyBAQCBpbnQgb3ZsX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcdCAqIHdpdGggdGhlIG5ldyBsb3dlcmRpcisgYW5kIGRhdGFkaXIrIG1vdW50IG9wdGlvbnMuXG4gXHQgKi9cbiBcdGlmIChsb3dlcmRpcnNbMF0pIHtcbi1cdFx0c2VxX3Nob3dfb3B0aW9uKG0sIFwibG93ZXJkaXJcIiwgbG93ZXJkaXJzWzBdKTtcbitcdFx0c2JfYWRkX29wdGlvbihjdHgsIFwibG93ZXJkaXJcIiwgbG93ZXJkaXJzWzBdKTtcbiBcdH0gZWxzZSB7XG4gXHRcdG5yX2xvd2VyID0gb2ZzLVx1MDAzZW51bWxheWVyO1xuIFx0XHRucl9tZXJnZWRfbG93ZXIgPSBucl9sb3dlciAtIG9mcy1cdTAwM2VudW1kYXRhbGF5ZXI7XG4gXHR9XG4gXHRmb3IgKG5yID0gMTsgbnIgXHUwMDNjIG5yX2xvd2VyOyBucisrKSB7XG4rXHRcdHN0cnVjdCBwYXRoIGxvd2VycGF0aCA9IHtcbitcdFx0XHQubW50ID0gb2ZzLVx1MDAzZWxheWVyc1tucl0ubW50LFxuK1x0XHRcdC5kZW50cnkgPSBvZnMtXHUwMDNlbGF5ZXJzW25yXS5tbnQtXHUwMDNlbW50X3Jvb3QsXG4rXHRcdH07XG4gXHRcdGlmIChuciBcdTAwM2MgbnJfbWVyZ2VkX2xvd2VyKVxuLVx0XHRcdHNlcV9zaG93X29wdGlvbihtLCBcImxvd2VyZGlyK1wiLCBsb3dlcmRpcnNbbnJdKTtcbitcdFx0XHRzYl9hZGRfb3B0aW9uX3BhdGgoY3R4LCBcImxvd2VyZGlyK1wiLCBsb3dlcmRpcnNbbnJdLFxuK1x0XHRcdFx0XHQgICBcdTAwMjZsb3dlcnBhdGgpO1xuIFx0XHRlbHNlXG4tXHRcdFx0c2VxX3Nob3dfb3B0aW9uKG0sIFwiZGF0YWRpcitcIiwgbG93ZXJkaXJzW25yXSk7XG4rXHRcdFx0c2JfYWRkX29wdGlvbl9wYXRoKGN0eCwgXCJkYXRhZGlyK1wiLCBsb3dlcmRpcnNbbnJdLFxuK1x0XHRcdFx0XHQgICBcdTAwMjZsb3dlcnBhdGgpO1xuIFx0fVxuIFx0aWYgKG9mcy1cdTAwM2Vjb25maWcudXBwZXJkaXIpIHtcbi1cdFx0c2VxX3Nob3dfb3B0aW9uKG0sIFwidXBwZXJkaXJcIiwgb2ZzLVx1MDAzZWNvbmZpZy51cHBlcmRpcik7XG4tXHRcdHNlcV9zaG93X29wdGlvbihtLCBcIndvcmtkaXJcIiwgb2ZzLVx1MDAzZWNvbmZpZy53b3JrZGlyKTtcbitcdFx0b3ZsX3BhdGhfdXBwZXIoc2ItXHUwMDNlc19yb290LCBcdTAwMjZ1cHBlcnBhdGgpO1xuK1x0XHRzYl9hZGRfb3B0aW9uX3BhdGgoY3R4LCBcInVwcGVyZGlyXCIsIG9mcy1cdTAwM2Vjb25maWcudXBwZXJkaXIsIFx1MDAyNnVwcGVycGF0aCk7XG4rXHRcdHNiX2FkZF9vcHRpb24oY3R4LCBcIndvcmtkaXJcIiwgb2ZzLVx1MDAzZWNvbmZpZy53b3JrZGlyKTtcbiBcdH1cbiBcdGlmIChvZnMtXHUwMDNlY29uZmlnLmRlZmF1bHRfcGVybWlzc2lvbnMpXG4tXHRcdHNlcV9wdXRzKG0sIFwiLGRlZmF1bHRfcGVybWlzc2lvbnNcIik7XG4rXHRcdHNiX2FkZF9vcHRpb24oY3R4LCBcImRlZmF1bHRfcGVybWlzc2lvbnNcIiwgTlVMTCk7XG4gXHRpZiAob2ZzLVx1MDAzZWNvbmZpZy5yZWRpcmVjdF9tb2RlICE9IG92bF9yZWRpcmVjdF9tb2RlX2RlZigpKVxuLVx0XHRzZXFfcHJpbnRmKG0sIFwiLHJlZGlyZWN0X2Rpcj0lc1wiLFxuLVx0XHRcdCAgIG92bF9yZWRpcmVjdF9tb2RlKFx1MDAyNm9mcy1cdTAwM2Vjb25maWcpKTtcbitcdFx0c2JfYWRkX29wdGlvbihjdHgsIFwicmVkaXJlY3RfZGlyXCIsIG92bF9yZWRpcmVjdF9tb2RlKFx1MDAyNm9mcy1cdTAwM2Vjb25maWcpKTtcbiBcdGlmIChvZnMtXHUwMDNlY29uZmlnLmluZGV4ICE9IG92bF9pbmRleF9kZWYpXG4tXHRcdHNlcV9wcmludGYobSwgXCIsaW5kZXg9JXNcIiwgc3RyX29uX29mZihvZnMtXHUwMDNlY29uZmlnLmluZGV4KSk7XG4rXHRcdHNiX2FkZF9vcHRpb24oY3R4LCBcImluZGV4XCIsIHN0cl9vbl9vZmYob2ZzLVx1MDAzZWNvbmZpZy5pbmRleCkpO1xuIFx0aWYgKG9mcy1cdTAwM2Vjb25maWcudXVpZCAhPSBvdmxfdXVpZF9kZWYoKSlcbi1cdFx0c2VxX3ByaW50ZihtLCBcIix1dWlkPSVzXCIsIG92bF91dWlkX21vZGUoXHUwMDI2b2ZzLVx1MDAzZWNvbmZpZykpO1xuK1x0XHRzYl9hZGRfb3B0aW9uKGN0eCwgXCJ1dWlkXCIsIG92bF91dWlkX21vZGUoXHUwMDI2b2ZzLVx1MDAzZWNvbmZpZykpO1xuIFx0aWYgKG9mcy1cdTAwM2Vjb25maWcubmZzX2V4cG9ydCAhPSBvdmxfbmZzX2V4cG9ydF9kZWYpXG4tXHRcdHNlcV9wcmludGYobSwgXCIsbmZzX2V4cG9ydD0lc1wiLFxuLVx0XHRcdCAgIHN0cl9vbl9vZmYob2ZzLVx1MDAzZWNvbmZpZy5uZnNfZXhwb3J0KSk7XG4rXHRcdHNiX2FkZF9vcHRpb24oY3R4LCBcIm5mc19leHBvcnRcIiwgc3RyX29uX29mZihvZnMtXHUwMDNlY29uZmlnLm5mc19leHBvcnQpKTtcbiBcdGlmIChvZnMtXHUwMDNlY29uZmlnLnhpbm8gIT0gb3ZsX3hpbm9fZGVmKCkgXHUwMDI2XHUwMDI2ICFvdmxfc2FtZV9mcyhvZnMpKVxuLVx0XHRzZXFfcHJpbnRmKG0sIFwiLHhpbm89JXNcIiwgb3ZsX3hpbm9fbW9kZShcdTAwMjZvZnMtXHUwMDNlY29uZmlnKSk7XG4rXHRcdHNiX2FkZF9vcHRpb24oY3R4LCBcInhpbm9cIiwgb3ZsX3hpbm9fbW9kZShcdTAwMjZvZnMtXHUwMDNlY29uZmlnKSk7XG4gXHRpZiAob2ZzLVx1MDAzZWNvbmZpZy5tZXRhY29weSAhPSBvdmxfbWV0YWNvcHlfZGVmKVxuLVx0XHRzZXFfcHJpbnRmKG0sIFwiLG1ldGFjb3B5PSVzXCIsIHN0cl9vbl9vZmYob2ZzLVx1MDAzZWNvbmZpZy5tZXRhY29weSkpO1xuK1x0XHRzYl9hZGRfb3B0aW9uKGN0eCwgXCJtZXRhY29weVwiLCBzdHJfb25fb2ZmKG9mcy1cdTAwM2Vjb25maWcubWV0YWNvcHkpKTtcbiBcdGlmIChvZnMtXHUwMDNlY29uZmlnLmZzeW5jX21vZGUgIT0gb3ZsX2ZzeW5jX21vZGVfZGVmKCkpXG4tXHRcdHNlcV9wcmludGYobSwgXCIsZnN5bmM9JXNcIiwgb3ZsX2ZzeW5jX21vZGUoXHUwMDI2b2ZzLVx1MDAzZWNvbmZpZykpO1xuK1x0XHRzYl9hZGRfb3B0aW9uKGN0eCwgXCJmc3luY1wiLCBvdmxfZnN5bmNfbW9kZShcdTAwMjZvZnMtXHUwMDNlY29uZmlnKSk7XG4gXHRpZiAob2ZzLVx1MDAzZWNvbmZpZy51c2VyeGF0dHIpXG4tXHRcdHNlcV9wdXRzKG0sIFwiLHVzZXJ4YXR0clwiKTtcbitcdFx0c2JfYWRkX29wdGlvbihjdHgsIFwidXNlcnhhdHRyXCIsIE5VTEwpO1xuIFx0aWYgKG9mcy1cdTAwM2Vjb25maWcudmVyaXR5X21vZGUgIT0gb3ZsX3Zlcml0eV9tb2RlX2RlZigpKVxuLVx0XHRzZXFfcHJpbnRmKG0sIFwiLHZlcml0eT0lc1wiLFxuLVx0XHRcdCAgIG92bF92ZXJpdHlfbW9kZShcdTAwMjZvZnMtXHUwMDNlY29uZmlnKSk7XG4rXHRcdHNiX2FkZF9vcHRpb24oY3R4LCBcInZlcml0eVwiLCBvdmxfdmVyaXR5X21vZGUoXHUwMDI2b2ZzLVx1MDAzZWNvbmZpZykpO1xuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL2ZzL292ZXJsYXlmcy9wYXJhbXMuaCBiL2ZzL292ZXJsYXlmcy9wYXJhbXMuaFxuaW5kZXggZmZkNTNjZGQ4NDgyN2MuLjJjZjljNGYxODhhOWNiIDEwMDY0NFxuLS0tIGEvZnMvb3ZlcmxheWZzL3BhcmFtcy5oXG4rKysgYi9mcy9vdmVybGF5ZnMvcGFyYW1zLmhcbkBAIC00MCw1ICs0MCw1IEBAIGludCBvdmxfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYyk7XG4gdm9pZCBvdmxfZnJlZV9mcyhzdHJ1Y3Qgb3ZsX2ZzICpvZnMpO1xuIGludCBvdmxfZnNfcGFyYW1zX3ZlcmlmeShjb25zdCBzdHJ1Y3Qgb3ZsX2ZzX2NvbnRleHQgKmN0eCxcbiBcdFx0XHQgc3RydWN0IG92bF9jb25maWcgKmNvbmZpZyk7XG4taW50IG92bF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuK2ludCBvdmxfZ2V0X29wdGlvbnMoc3RydWN0IHNiX29wdF9jdHggKmN0eCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbiBjb25zdCBjaGFyICpvdmxfeGlub19tb2RlKHN0cnVjdCBvdmxfY29uZmlnICpjb25maWcpO1xuZGlmZiAtLWdpdCBhL2ZzL292ZXJsYXlmcy9zdXBlci5jIGIvZnMvb3ZlcmxheWZzL3N1cGVyLmNcbmluZGV4IDYwZjBiN2NlZWYwYTZkLi40YjU3YjJkYjA4NTIyNSAxMDA2NDRcbi0tLSBhL2ZzL292ZXJsYXlmcy9zdXBlci5jXG4rKysgYi9mcy9vdmVybGF5ZnMvc3VwZXIuY1xuQEAgLTMwMiw3ICszMDIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgb3ZsX3N1cGVyX29wZXJhdGlvbnMgPSB7XG4gXHQucHV0X3N1cGVyXHQ9IG92bF9wdXRfc3VwZXIsXG4gXHQuc3luY19mc1x0PSBvdmxfc3luY19mcyxcbiBcdC5zdGF0ZnNcdFx0PSBvdmxfc3RhdGZzLFxuLVx0LnNob3dfb3B0aW9uc1x0PSBvdmxfc2hvd19vcHRpb25zLFxuK1x0LmdldF9vcHRpb25zXHQ9IG92bF9nZXRfb3B0aW9ucyxcbiB9O1xuIFxuICNkZWZpbmUgT1ZMX1dPUktESVJfTkFNRSBcIndvcmtcIlxuQEAgLTUyOSw2ICs1MjksNyBAQCBzdGF0aWMgaW50IG92bF9nZXRfdXBwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IG92bF9mcyAqb2ZzLFxuIFxuIFx0LyogRG9uJ3QgaW5oZXJpdCBhdGltZSBmbGFncyAqL1xuIFx0dXBwZXJfbW50LVx1MDAzZW1udF9mbGFncyBcdTAwMjY9IH4oTU5UX05PQVRJTUUgfCBNTlRfTk9ESVJBVElNRSB8IE1OVF9SRUxBVElNRSk7XG4rXHR1cHBlcl9tbnQtXHUwMDNlbW50X2ZsYWdzIHw9IE1OVF9DTE9OQUJMRTtcbiBcdHVwcGVyX2xheWVyLVx1MDAzZW1udCA9IHVwcGVyX21udDtcbiBcdHVwcGVyX2xheWVyLVx1MDAzZWlkeCA9IDA7XG4gXHR1cHBlcl9sYXllci1cdTAwM2Vmc2lkID0gMDtcbkBAIC0xMTA1LDcgKzExMDYsNyBAQCBzdGF0aWMgaW50IG92bF9nZXRfbGF5ZXJzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBvdmxfZnMgKm9mcyxcbiBcdFx0ICogTWFrZSBsb3dlciBsYXllcnMgUi9PLiAgVGhhdCB3YXkgZmNobW9kL2ZjaG93biBvbiBsb3dlciBmaWxlXG4gXHRcdCAqIHdpbGwgZmFpbCBpbnN0ZWFkIG9mIG1vZGlmeWluZyBsb3dlciBmcy5cbiBcdFx0ICovXG4tXHRcdG1udC1cdTAwM2VtbnRfZmxhZ3MgfD0gTU5UX1JFQURPTkxZIHwgTU5UX05PQVRJTUU7XG4rXHRcdG1udC1cdTAwM2VtbnRfZmxhZ3MgfD0gTU5UX1JFQURPTkxZIHwgTU5UX05PQVRJTUUgfCBNTlRfQ0xPTkFCTEU7XG4gXG4gXHRcdGxheWVyc1tvZnMtXHUwMDNlbnVtbGF5ZXJdLnRyYXAgPSB0cmFwO1xuIFx0XHRsYXllcnNbb2ZzLVx1MDAzZW51bWxheWVyXS5tbnQgPSBtbnQ7XG5kaWZmIC0tZ2l0IGEvZnMvcGlkZnMuYyBiL2ZzL3BpZGZzLmNcbmluZGV4IGFhYTYwOWRkYWIwNDQzLi4zODQzYWNkNjU5NGRlMCAxMDA2NDRcbi0tLSBhL2ZzL3BpZGZzLmNcbisrKyBiL2ZzL3BpZGZzLmNcbkBAIC04NDAsNyArODQwLDcgQEAgc3RhdGljIGNoYXIgKnBpZGZzX2RuYW1lKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqYnVmZmVyLCBpbnQgYnVmbGVuKVxuIFx0cmV0dXJuIGR5bmFtaWNfZG5hbWUoYnVmZmVyLCBidWZsZW4sIFwiYW5vbl9pbm9kZTpbcGlkZmRdXCIpO1xuIH1cbiBcbi1jb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgcGlkZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7XG4rc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBwaWRmc19kZW50cnlfb3BlcmF0aW9ucyA9IHtcbiBcdC5kX2RuYW1lXHQ9IHBpZGZzX2RuYW1lLFxuIFx0LmRfcHJ1bmVcdD0gc3Rhc2hlZF9kZW50cnlfcHJ1bmUsXG4gfTtcbkBAIC0xMTUxLDYgKzExNTEsOCBAQCB2b2lkIF9faW5pdCBwaWRmc19pbml0KHZvaWQpXG4gXHRpZiAoSVNfRVJSKHBpZGZzX21udCkpXG4gXHRcdHBhbmljKFwiRmFpbGVkIHRvIG1vdW50IHBpZGZzIHBzZXVkbyBmaWxlc3lzdGVtXCIpO1xuIFxuK1x0cGlkZnNfbW50LVx1MDAzZW1udF9mbGFncyB8PSBNTlRfQ0xPTkFCTEU7XG4rXG4gXHRwaWRmc19yb290X3BhdGgubW50ID0gcGlkZnNfbW50O1xuIFx0cGlkZnNfcm9vdF9wYXRoLmRlbnRyeSA9IHBpZGZzX21udC1cdTAwM2VtbnRfcm9vdDtcbiB9XG5kaWZmIC0tZ2l0IGEvZnMvcHJvY19uYW1lc3BhY2UuYyBiL2ZzL3Byb2NfbmFtZXNwYWNlLmNcbmluZGV4IDVjNTU1ZGI2OGFhMjEyLi45NGJjNGM5YWE0M2YxNiAxMDA2NDRcbi0tLSBhL2ZzL3Byb2NfbmFtZXNwYWNlLmNcbisrKyBiL2ZzL3Byb2NfbmFtZXNwYWNlLmNcbkBAIC05OCwyMSArOTgsMjcgQEAgc3RhdGljIHZvaWQgc2hvd190eXBlKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdH1cbiB9XG4gXG4rc3RhdGljIGludCBzaG93X2Rldm5hbWUoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgdmZzbW91bnQgKm1udClcbit7XG4rXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gbW50LVx1MDAzZW1udF9zYjtcbitcbitcdGlmIChzYi1cdTAwM2VzX29wLVx1MDAzZXNob3dfZGV2bmFtZSlcbitcdFx0cmV0dXJuIHNiLVx1MDAzZXNfb3AtXHUwMDNlc2hvd19kZXZuYW1lKG0sIG1udC1cdTAwM2VtbnRfcm9vdCk7XG4rXG4rXHRtYW5nbGUobSwgc2ItXHUwMDNlc19kZXZuYW1lKTtcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IHNob3dfdmZzbW50KHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHZmc21vdW50ICptbnQpXG4ge1xuIFx0c3RydWN0IHByb2NfbW91bnRzICpwID0gbS1cdTAwM2Vwcml2YXRlO1xuLVx0c3RydWN0IG1vdW50ICpyID0gcmVhbF9tb3VudChtbnQpO1xuIFx0c3RydWN0IHBhdGggbW50X3BhdGggPSB7IC5kZW50cnkgPSBtbnQtXHUwMDNlbW50X3Jvb3QsIC5tbnQgPSBtbnQgfTtcbiBcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBtbnRfcGF0aC5kZW50cnktXHUwMDNlZF9zYjtcbiBcdGludCBlcnI7XG4gXG4tXHRpZiAoc2ItXHUwMDNlc19vcC1cdTAwM2VzaG93X2Rldm5hbWUpIHtcbi1cdFx0ZXJyID0gc2ItXHUwMDNlc19vcC1cdTAwM2VzaG93X2Rldm5hbWUobSwgbW50X3BhdGguZGVudHJ5KTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIG91dDtcbi1cdH0gZWxzZSB7XG4tXHRcdG1hbmdsZShtLCByLVx1MDAzZW1udF9kZXZuYW1lKTtcbi1cdH1cbitcdGVyciA9IHNob3dfZGV2bmFtZShtLCBtbnQpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBvdXQ7XG4gXHRzZXFfcHV0YyhtLCAnICcpO1xuIFx0LyogbW91bnRwb2ludHMgb3V0c2lkZSBvZiBjaHJvb3QgamFpbCB3aWxsIGdpdmUgU0VRX1NLSVAgb24gdGhpcyAqL1xuIFx0ZXJyID0gc2VxX3BhdGhfcm9vdChtLCBcdTAwMjZtbnRfcGF0aCwgXHUwMDI2cC1cdTAwM2Vyb290LCBcIiBcXHRcXG5cXFxcXCIpO1xuQEAgLTEyNSw4ICsxMzEsNyBAQCBzdGF0aWMgaW50IHNob3dfdmZzbW50KHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHZmc21vdW50ICptbnQpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIG91dDtcbiBcdHNob3dfdmZzbW50X29wdHMobSwgbW50KTtcbi1cdGlmIChzYi1cdTAwM2VzX29wLVx1MDAzZXNob3dfb3B0aW9ucylcbi1cdFx0ZXJyID0gc2ItXHUwMDNlc19vcC1cdTAwM2VzaG93X29wdGlvbnMobSwgbW50X3BhdGguZGVudHJ5KTtcbitcdGVyciA9IG1udF9zaG93X29wdGlvbnMobSwgbW50KTtcbiBcdHNlcV9wdXRzKG0sIFwiIDAgMFxcblwiKTtcbiBvdXQ6XG4gXHRyZXR1cm4gZXJyO1xuQEAgLTE3MiwxOSArMTc3LDE0IEBAIHN0YXRpYyBpbnQgc2hvd19tb3VudGluZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgdmZzbW91bnQgKm1udClcbiBcdHNlcV9wdXRzKG0sIFwiIC0gXCIpO1xuIFx0c2hvd190eXBlKG0sIHNiKTtcbiBcdHNlcV9wdXRjKG0sICcgJyk7XG4tXHRpZiAoc2ItXHUwMDNlc19vcC1cdTAwM2VzaG93X2Rldm5hbWUpIHtcbi1cdFx0ZXJyID0gc2ItXHUwMDNlc19vcC1cdTAwM2VzaG93X2Rldm5hbWUobSwgbW50LVx1MDAzZW1udF9yb290KTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIG91dDtcbi1cdH0gZWxzZSB7XG4tXHRcdG1hbmdsZShtLCByLVx1MDAzZW1udF9kZXZuYW1lKTtcbi1cdH1cbitcdGVyciA9IHNob3dfZGV2bmFtZShtLCBtbnQpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBvdXQ7XG4gXHRzZXFfcHV0cyhtLCBzYl9yZG9ubHkoc2IpID8gXCIgcm9cIiA6IFwiIHJ3XCIpO1xuIFx0ZXJyID0gc2hvd19zYl9vcHRzKG0sIHNiKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gb3V0O1xuLVx0aWYgKHNiLVx1MDAzZXNfb3AtXHUwMDNlc2hvd19vcHRpb25zKVxuLVx0XHRlcnIgPSBzYi1cdTAwM2VzX29wLVx1MDAzZXNob3dfb3B0aW9ucyhtLCBtbnQtXHUwMDNlbW50X3Jvb3QpO1xuK1x0ZXJyID0gbW50X3Nob3dfb3B0aW9ucyhtLCBtbnQpO1xuIFx0c2VxX3B1dGMobSwgJ1xcbicpO1xuIG91dDpcbiBcdHJldHVybiBlcnI7XG5AQCAtMTkzLDIxICsxOTMsMTUgQEAgc3RhdGljIGludCBzaG93X21vdW50aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB2ZnNtb3VudCAqbW50KVxuIHN0YXRpYyBpbnQgc2hvd192ZnNzdGF0KHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHZmc21vdW50ICptbnQpXG4ge1xuIFx0c3RydWN0IHByb2NfbW91bnRzICpwID0gbS1cdTAwM2Vwcml2YXRlO1xuLVx0c3RydWN0IG1vdW50ICpyID0gcmVhbF9tb3VudChtbnQpO1xuIFx0c3RydWN0IHBhdGggbW50X3BhdGggPSB7IC5kZW50cnkgPSBtbnQtXHUwMDNlbW50X3Jvb3QsIC5tbnQgPSBtbnQgfTtcbiBcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBtbnRfcGF0aC5kZW50cnktXHUwMDNlZF9zYjtcbiBcdGludCBlcnI7XG4gXG4gXHQvKiBkZXZpY2UgKi9cbiBcdHNlcV9wdXRzKG0sIFwiZGV2aWNlIFwiKTtcbi1cdGlmIChzYi1cdTAwM2VzX29wLVx1MDAzZXNob3dfZGV2bmFtZSkge1xuLVx0XHRlcnIgPSBzYi1cdTAwM2VzX29wLVx1MDAzZXNob3dfZGV2bmFtZShtLCBtbnRfcGF0aC5kZW50cnkpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdGdvdG8gb3V0O1xuLVx0fSBlbHNlIHtcbi1cdFx0bWFuZ2xlKG0sIHItXHUwMDNlbW50X2Rldm5hbWUpO1xuLVx0fVxuLVxuK1x0ZXJyID0gc2hvd19kZXZuYW1lKG0sIG1udCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIG91dDtcbiBcdC8qIG1vdW50IHBvaW50ICovXG4gXHRzZXFfcHV0cyhtLCBcIiBtb3VudGVkIG9uIFwiKTtcbiBcdC8qIG1vdW50cG9pbnRzIG91dHNpZGUgb2YgY2hyb290IGphaWwgd2lsbCBnaXZlIFNFUV9TS0lQIG9uIHRoaXMgKi9cbmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuY1xuaW5kZXggYThmZDYxMTM2YWFmZTUuLmU1NTMxY2I4OGY4OTE3IDEwMDY0NFxuLS0tIGEvZnMvc3VwZXIuY1xuKysrIGIvZnMvc3VwZXIuY1xuQEAgLTI4MCw2ICsyODAsNyBAQCBzdGF0aWMgdm9pZCBkZXN0cm95X3N1cGVyX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0c2VjdXJpdHlfc2JfZnJlZShzKTtcbiBcdHB1dF91c2VyX25zKHMtXHUwMDNlc191c2VyX25zKTtcbiBcdGtmcmVlKHMtXHUwMDNlc19zdWJ0eXBlKTtcbitcdGtmcmVlX2NvbnN0KHMtXHUwMDNlc19kZXZuYW1lKTtcbiBcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBTQl9GUkVFWkVfTEVWRUxTOyBpKyspXG4gXHRcdHBlcmNwdV9mcmVlX3J3c2VtKFx1MDAyNnMtXHUwMDNlc193cml0ZXJzLnJ3X3NlbVtpXSk7XG4gXHRrZnJlZShzKTtcbkBAIC0zMTUsNyArMzE2LDcgQEAgc3RhdGljIHZvaWQgZGVzdHJveV91bnVzZWRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzKVxuICAqXHRyZXR1cm5zIGEgcG9pbnRlciBuZXcgc3VwZXJibG9jayBvciAlTlVMTCBpZiBhbGxvY2F0aW9uIGhhZCBmYWlsZWQuXG4gICovXG4gc3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqYWxsb2Nfc3VwZXIoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsIGludCBmbGFncyxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMpXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLCBjb25zdCBjaGFyICpuYW1lKVxuIHtcbiBcdHN0cnVjdCBzdXBlcl9ibG9jayAqcyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBzdXBlcl9ibG9jayk7XG4gXHRzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZGVmYXVsdF9vcDtcbkBAIC0zNDQsNiArMzQ1LDEzIEBAIHN0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmFsbG9jX3N1cGVyKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlLCBpbnQgZmxhZ3MsXG4gXHQgKi9cbiBcdGRvd25fd3JpdGVfbmVzdGVkKFx1MDAyNnMtXHUwMDNlc191bW91bnQsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbiBcbitcdGlmIChuYW1lKVxuK1x0XHRzLVx1MDAzZXNfZGV2bmFtZSA9IGtzdHJkdXBfY29uc3QobmFtZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbitcdGVsc2VcbitcdFx0cy1cdTAwM2VzX2Rldm5hbWUgPSBcIm5vbmVcIjtcbitcdGlmICghcy1cdTAwM2VzX2Rldm5hbWUpXG4rXHRcdGdvdG8gZmFpbDtcbitcbiBcdGlmIChzZWN1cml0eV9zYl9hbGxvYyhzKSlcbiBcdFx0Z290byBmYWlsO1xuIFxuQEAgLTc2Myw3ICs3NzEsNyBAQCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNnZXRfZmMoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0fVxuIFx0aWYgKCFzKSB7XG4gXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNiX2xvY2spO1xuLVx0XHRzID0gYWxsb2Nfc3VwZXIoZmMtXHUwMDNlZnNfdHlwZSwgZmMtXHUwMDNlc2JfZmxhZ3MsIHVzZXJfbnMpO1xuK1x0XHRzID0gYWxsb2Nfc3VwZXIoZmMtXHUwMDNlZnNfdHlwZSwgZmMtXHUwMDNlc2JfZmxhZ3MsIHVzZXJfbnMsIGZjLVx1MDAzZXNvdXJjZSk7XG4gXHRcdGlmICghcylcbiBcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcdFx0Z290byByZXRyeTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZjbnRsLmggYi9pbmNsdWRlL2xpbnV4L2ZjbnRsLmhcbmluZGV4IDZhZDZiOWU3YTIyNmFmLi5mOTQyNDExYzhlZDdkZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZmNudGwuaFxuKysrIGIvaW5jbHVkZS9saW51eC9mY250bC5oXG5AQCAtMTEsNyArMTEsNyBAQFxuIFx0KE9fUkRPTkxZIHwgT19XUk9OTFkgfCBPX1JEV1IgfCBPX0NSRUFUIHwgT19FWENMIHwgT19OT0NUVFkgfCBPX1RSVU5DIHwgXFxcbiBcdCBPX0FQUEVORCB8IE9fTkRFTEFZIHwgT19OT05CTE9DSyB8IF9fT19TWU5DIHwgT19EU1lOQyB8IFxcXG4gXHQgRkFTWU5DXHR8IE9fRElSRUNUIHwgT19MQVJHRUZJTEUgfCBPX0RJUkVDVE9SWSB8IE9fTk9GT0xMT1cgfCBcXFxuLVx0IE9fTk9BVElNRSB8IE9fQ0xPRVhFQyB8IE9fUEFUSCB8IF9fT19UTVBGSUxFIHwgT19FTVBUWVBBVEgpXG4rXHQgT19OT0FUSU1FIHwgT19DTE9FWEVDIHwgT19QQVRIIHwgX19PX1RNUEZJTEUgfCBPX0VNUFRZUEFUSCB8IE9fQUxUKVxuIFxuIC8qIExpc3Qgb2YgYWxsIHZhbGlkIGZsYWdzIGZvciBvcGVuYXQyKDIpJ3MgaG93LVx1MDAzZWZsYWdzIGFyZ3VtZW50LiAqL1xuICNkZWZpbmUgVkFMSURfT1BFTkFUMl9GTEFHU1x0KFZBTElEX09QRU5fRkxBR1MgfCBPUEVOQVQyX1JFR1VMQVIpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy9zdXBlci5oIGIvaW5jbHVkZS9saW51eC9mcy9zdXBlci5oXG5pbmRleCA0MDU2MTI2NzgxMTUxZS4uNmYwZDc3ODk0MGY5MDQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZnMvc3VwZXIuaFxuQEAgLTIzNyw0ICsyMzcsMTQgQEAgaW50IHRoYXdfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzdXBlciwgZW51bSBmcmVlemVfaG9sZGVyIHdobyxcbiBcbiBpbnQgc2JfaW5pdF9kaW9fZG9uZV93cShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbiBcbitzdHJ1Y3Qgc2Jfb3B0X2N0eCB7XG4rXHR2b2lkICgqYWN0b3IpKHN0cnVjdCBzYl9vcHRfY3R4ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlLFxuK1x0XHQgICAgICBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCk7XG4rXHR2b2lkICpkYXRhO1xuK307XG4rXG4rdm9pZCBzYl9hZGRfb3B0aW9uKHN0cnVjdCBzYl9vcHRfY3R4ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKTtcbit2b2lkIHNiX2FkZF9vcHRpb25fcGF0aChzdHJ1Y3Qgc2Jfb3B0X2N0eCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSxcbitcdFx0XHRjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCk7XG4rXG4gI2VuZGlmIC8qIF9MSU5VWF9GU19TVVBFUl9IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy9zdXBlcl90eXBlcy5oIGIvaW5jbHVkZS9saW51eC9mcy9zdXBlcl90eXBlcy5oXG5pbmRleCBlZjc5NDFlOWRjNzlhYy4uZjIwNTc1OWFmMWE2MzMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyX3R5cGVzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZnMvc3VwZXJfdHlwZXMuaFxuQEAgLTM2LDYgKzM2LDcgQEAgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3Q7XG4gc3RydWN0IHdyaXRlYmFja19jb250cm9sO1xuIHN0cnVjdCB4YXR0cl9oYW5kbGVyO1xuIHN0cnVjdCBmc2Vycm9yX2V2ZW50O1xuK3N0cnVjdCBzYl9vcHRfY3R4O1xuIFxuIGV4dGVybiBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmJsb2NrZGV2X3N1cGVyYmxvY2s7XG4gXG5AQCAtOTksNiArMTAwLDcgQEAgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMge1xuIFx0aW50ICgqc3RhdGZzKShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICprc3RhdGZzKTtcbiBcdHZvaWQgKCp1bW91bnRfYmVnaW4pKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuIFxuK1x0aW50ICgqZ2V0X29wdGlvbnMpKHN0cnVjdCBzYl9vcHRfY3R4ICpjdHgsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG4gXHRpbnQgKCpzaG93X29wdGlvbnMpKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuIFx0aW50ICgqc2hvd19kZXZuYW1lKShzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbiBcdGludCAoKnNob3dfcGF0aCkoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG5AQCAtMjgzLDYgKzI4NSw4IEBAIHN0cnVjdCBzdXBlcl9ibG9jayB7XG4gXHQgKi9cbiBcdGF0b21pY190XHRcdFx0XHRzX2lzd19ucl9pbl9mbGlnaHQ7XG4gI2VuZGlmXG4rXHQvKiBOYW1lIG9mIGRldmljZSBlLmcuIC9kZXYvZHNrL2hkYTEgKi9cbitcdGNvbnN0IGNoYXIgXHRcdFx0XHQqc19kZXZuYW1lO1xuIH0gX19yYW5kb21pemVfbGF5b3V0O1xuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb3VudC5oIGIvaW5jbHVkZS9saW51eC9tb3VudC5oXG5pbmRleCBhY2ZlN2VmODZhMWIzZi4uZDA3MTg1NWNhNGVkZWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21vdW50LmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW91bnQuaFxuQEAgLTQ0LDYgKzQ0LDcgQEAgZW51bSBtb3VudF9mbGFncyB7XG4gXHRNTlRfTE9DS0VEXHRcdD0gMHg4MDAwMDAsXG4gXHRNTlRfRE9PTUVEXHRcdD0gMHgxMDAwMDAwLFxuIFx0TU5UX1NZTkNfVU1PVU5UXHRcdD0gMHgyMDAwMDAwLFxuK1x0TU5UX0NMT05BQkxFXHRcdD0gMHg0MDAwMDAwLFxuIFx0TU5UX1VNT1VOVFx0XHQ9IDB4ODAwMDAwMCxcbiBcbiBcdE1OVF9VU0VSX1NFVFRBQkxFX01BU0sgID0gTU5UX05PU1VJRCB8IE1OVF9OT0RFViB8IE1OVF9OT0VYRUNcbkBAIC01Miw3ICs1Myw3IEBAIGVudW0gbW91bnRfZmxhZ3Mge1xuIFx0TU5UX0FUSU1FX01BU0sgPSBNTlRfTk9BVElNRSB8IE1OVF9OT0RJUkFUSU1FIHwgTU5UX1JFTEFUSU1FLFxuIFxuIFx0TU5UX0lOVEVSTkFMX0ZMQUdTID0gTU5UX0lOVEVSTkFMIHwgTU5UX0RPT01FRCB8XG4tXHRcdFx0ICAgICBNTlRfU1lOQ19VTU9VTlQgfCBNTlRfTE9DS0VEXG4rXHRcdFx0ICAgICBNTlRfU1lOQ19VTU9VTlQgfCBNTlRfTE9DS0VEIHwgTU5UX0NMT05BQkxFXG4gfTtcbiBcbiBzdHJ1Y3QgdmZzbW91bnQge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmFtZWkuaCBiL2luY2x1ZGUvbGludXgvbmFtZWkuaFxuaW5kZXggZWJlNmUyOWY3ZTkzYmEuLmMyMWRjNjUzNjkwMGNmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uYW1laS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L25hbWVpLmhcbkBAIC0yNSw3ICsyNSw4IEBAIGVudW0geyBNQVhfTkVTVEVEX0xJTktTID0gOCB9O1xuICNkZWZpbmUgTE9PS1VQX1JDVVx0XHRCSVQoOClcdC8qIFJDVSBwYXRod2FsayBtb2RlOyBzZW1pLWludGVybmFsICovXG4gI2RlZmluZSBMT09LVVBfQ0FDSEVEXHRcdEJJVCg5KSAvKiBPbmx5IGRvIGNhY2hlZCBsb29rdXAgKi9cbiAjZGVmaW5lIExPT0tVUF9QQVJFTlRcdFx0QklUKDEwKVx0LyogTG9va2luZyB1cCBmaW5hbCBwYXJlbnQgaW4gcGF0aCAqL1xuLS8qIDUgc3BhcmUgYml0cyBmb3IgcGF0aHdhbGsgKi9cbisjZGVmaW5lIExPT0tVUF9BTFRcdFx0QklUKDExKSAvKiBMb29rIHVwIGluIGFsdGVybmF0aXZlIG5hbWVzcGFjZSAqL1xuKy8qIDQgc3BhcmUgYml0cyBmb3IgcGF0aHdhbGsgKi9cbiBcbiAvKiBUaGVzZSB0ZWxsIGZpbGVzeXN0ZW0gbWV0aG9kcyB0aGF0IHdlIGFyZSBkZWFsaW5nIHdpdGggdGhlIGZpbmFsIGNvbXBvbmVudC4uLiAqL1xuICNkZWZpbmUgTE9PS1VQX09QRU5cdFx0QklUKDE2KVx0LyogLi4uIGluIG9wZW4gKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BpZGZzLmggYi9pbmNsdWRlL2xpbnV4L3BpZGZzLmhcbmluZGV4IDBhYmY3ZGE5YWIyMzZlLi5mYWI2ZjQ4ZmYyMDMzNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGlkZnMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9waWRmcy5oXG5AQCAtMTUsNyArMTUsNiBAQCB2b2lkIHBpZGZzX2V4aXQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spO1xuICNpZmRlZiBDT05GSUdfQ09SRURVTVBcbiB2b2lkIHBpZGZzX2NvcmVkdW1wKGNvbnN0IHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pO1xuICNlbmRpZlxuLWV4dGVybiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgcGlkZnNfZGVudHJ5X29wZXJhdGlvbnM7XG4gaW50IHBpZGZzX3JlZ2lzdGVyX3BpZF9nZnAoc3RydWN0IHBpZCAqcGlkLCBnZnBfdCBnZnApO1xuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9mY250bC5oIGIvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL2ZjbnRsLmhcbmluZGV4IDg4M2NmZDdkZTJlZmZhLi43MGRiYmFjMWM1MjA3OCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9mY250bC5oXG4rKysgYi9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvZmNudGwuaFxuQEAgLTk2LDYgKzk2LDEwIEBAXG4gI2RlZmluZSBPX0VNUFRZUEFUSFx0KDEgXHUwMDNjXHUwMDNjIDI2KVx0LyogYWxsb3cgZW1wdHkgcGF0aCAqL1xuICNlbmRpZlxuIFxuKyNpZm5kZWYgT19BTFRcbisjZGVmaW5lIE9fQUxUXHRcdCgxIFx1MDAzY1x1MDAzYyAyNylcdC8qIE9wZW4gaW4gYWx0ZXJuYXRpdmUgbmFtZXNwYWNlICovXG4rI2VuZGlmXG4rXG4gLyogYSBob3JyaWQga2x1ZGdlIHRyeWluZyB0byBtYWtlIHN1cmUgdGhhdCB0aGlzIHdpbGwgZmFpbCBvbiBvbGQga2VybmVscyAqL1xuICNkZWZpbmUgT19UTVBGSUxFIChfX09fVE1QRklMRSB8IE9fRElSRUNUT1JZKVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9tb3VudC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L21vdW50LmhcbmluZGV4IDIyMDQ3MDhkYmY3YTU4Li42ZTc5NGQyMTRjZjk4MyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9tb3VudC5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvbW91bnQuaFxuQEAgLTYzLDYgKzYzLDcgQEBcbiAgKi9cbiAjZGVmaW5lIE9QRU5fVFJFRV9DTE9ORVx0XHQoMSBcdTAwM2NcdTAwM2MgMClcdC8qIENsb25lIHRoZSB0YXJnZXQgdHJlZSBhbmQgYXR0YWNoIHRoZSBjbG9uZSAqL1xuICNkZWZpbmUgT1BFTl9UUkVFX05BTUVTUEFDRVx0KDEgXHUwMDNjXHUwMDNjIDEpXHQvKiBDbG9uZSB0aGUgdGFyZ2V0IHRyZWUgaW50byBhIG5ldyBtb3VudCBuYW1lc3BhY2UgKi9cbisjZGVmaW5lIE9QRU5fVFJFRV9BTFRcdFx0KDEgXHUwMDNjXHUwMDNjIDIpXHQvKiBMb29rdXAgaW4gYWx0ZXJuYXRpdmUgbmFtZXNwYWNlICovXG4gI2RlZmluZSBPUEVOX1RSRUVfQ0xPRVhFQ1x0T19DTE9FWEVDXHQvKiBDbG9zZSB0aGUgZmlsZSBvbiBleGVjdmUoKSAqL1xuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvc2NyaXB0cy9nZGIvbGludXgvcHJvYy5weSBiL3NjcmlwdHMvZ2RiL2xpbnV4L3Byb2MucHlcbmluZGV4IDY1ZGQxYmQxMjk2NDFkLi41YWFmMmRkOGRiMDVhMSAxMDA2NDRcbi0tLSBhL3NjcmlwdHMvZ2RiL2xpbnV4L3Byb2MucHlcbisrKyBiL3NjcmlwdHMvZ2RiL2xpbnV4L3Byb2MucHlcbkBAIC0xNzQsOSArMTc0LDYgQEAgdmFsdWVzIG9mIHRoYXQgcHJvY2VzcyBuYW1lc3BhY2VcIlwiXCJcbiAgICAgICAgICAgICAgICAgICBcIm1vdW50XCIsIFwic3VwZXJfYmxvY2tcIiwgXCJkZXZuYW1lXCIsIFwicGF0aG5hbWVcIiwgXCJmc3R5cGVcIikpXG4gXG4gICAgICAgICBmb3IgbW50IGluIHJidHJlZS5yYl9pbm9yZGVyX2Zvcl9lYWNoX2VudHJ5KG5hbWVzcGFjZVsnbW91bnRzJ10sIG1vdW50X3B0cl90eXBlLCBcIm1udF9ub2RlXCIpOlxuLSAgICAgICAgICAgIGRldm5hbWUgPSBtbnRbJ21udF9kZXZuYW1lJ10uc3RyaW5nKClcbi0gICAgICAgICAgICBkZXZuYW1lID0gZGV2bmFtZSBpZiBkZXZuYW1lIGVsc2UgXCJub25lXCJcbi1cbiAgICAgICAgICAgICBwYXRobmFtZSA9IFwiXCJcbiAgICAgICAgICAgICBwYXJlbnQgPSBtbnRcbiAgICAgICAgICAgICB3aGlsZSBUcnVlOlxuQEAgLTE5MCw2ICsxODcsOCBAQCB2YWx1ZXMgb2YgdGhhdCBwcm9jZXNzIG5hbWVzcGFjZVwiXCJcIlxuICAgICAgICAgICAgICAgICBwYXRobmFtZSA9IFwiL1wiXG4gXG4gICAgICAgICAgICAgc3VwZXJibG9jayA9IG1udFsnbW50J11bJ21udF9zYiddXG4rICAgICAgICAgICAgZGV2bmFtZSA9IHN1cGVyYmxvY2tbJ3NfZGV2bmFtZSddLnN0cmluZygpXG4rICAgICAgICAgICAgZGV2bmFtZSA9IGRldm5hbWUgaWYgZGV2bmFtZSBlbHNlIFwibm9uZVwiXG4gICAgICAgICAgICAgZnN0eXBlID0gc3VwZXJibG9ja1snc190eXBlJ11bJ25hbWUnXS5zdHJpbmcoKVxuICAgICAgICAgICAgIHNfZmxhZ3MgPSBpbnQoc3VwZXJibG9ja1snc19mbGFncyddKVxuICAgICAgICAgICAgIG1fZmxhZ3MgPSBpbnQobW50WydtbnQnXVsnbW50X2ZsYWdzJ10pXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQxNjowODoyNS42NTI4NDQxMjRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTU3NjI1NTY3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbml0aWFsIEFzc2Vzc21lbnQgYW5kIFN5bWJvbCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzLiBJdCBzZWVtcyB3ZSd2ZSBnb3QgYSBwcmV0dHkgc3Vic3RhbnRpYWwgc2V0IG9mIGNoYW5nZXMgaGVyZSDigJMgYSB3aG9sZSBuZXcgdmlydHVhbCBmaWxlc3lzdGVtIGNhbGxlZCBgbWV0YWZzYCBpcyBiZWluZyBpbnRyb2R1Y2VkLCBhbG9uZyB3aXRoIHNvbWUgbW9kaWZpY2F0aW9ucyB0byB0aGUgVkZTIGxheWVyIHRvIHN1cHBvcnQgYW4gYE9fQUxUYCBmbGFnLiBUaGlzIGZsYWcgaXMgZm9yIGFsdGVybmF0aXZlIG5hbWVzcGFjZSBsb29rdXBzLiBUaGV5J3ZlIGFsc28gcmVqaWdnZXJlZCBob3cgbW91bnQgZGV2aWNlIG5hbWVzIGFyZSBzdG9yZWQsIG1vdmluZyB0aGVtIGZyb20gYHN0cnVjdCBtb3VudGAgdG8gYHN0cnVjdCBzdXBlcl9ibG9ja2AsIGFuZCBhZGRlZCBhIGBnZXRfb3B0aW9uc2AgdG8gYHN1cGVyX29wZXJhdGlvbnNgLCB3aGljaCBpcyByZXBsYWNpbmcgYHNob3dfb3B0aW9uc2AuXG5cbkZpcnN0IHRoaW5nJ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gSSdtIGdvaW5nIHRocm91Z2ggdGhlIGZpbGVzLCBhbmQgaXQgbG9va3MgbGlrZTpcblxuKiAgIFdlIGhhdmUgYSBuZXcgZmlsZXN5c3RlbSBiZWluZyBidWlsdCAoYG1ldGFmc2ApLlxuKiAgIFRoZSBWRlMgbGF5ZXIgaXMgYmVpbmcgdHdlYWtlZCBmb3IgdGhlIGBPX0FMVGAgZmxhZy5cbiogICBNb3VudCBpbmZvcm1hdGlvbiBoYXMgYmVlbiBtb3ZlZC5cbiogICBOZXcgYGdldF9vcHRpb25zYCBmdW5jdGlvbi5cblxuTm93LCBsZXQncyBpZGVudGlmeSB3aGF0IHRoZSBjb3JlIHBhcnRzIG9mIHRoZXNlIGNoYW5nZXMgYXJlLlxuXG5Gcm9tIGEgcXVpY2sgc2NhbiBvZiB0aGUgY29kZSBjaGFuZ2VzLCBgbWV0YWZzYCBsb29rcyB0byBiZSB0aGUgYmlnLCBuZXcgdGhpbmcsIGFuZCB3aWxsIGxpa2VseSBuZWVkIGZ1enppbmcuIFNwZWNpZmljYWxseSwgYG1ldGFmc19pbml0X2ZzX2NvbnRleHRgLCBgbWV0YWZzX2NvbGxlY3Rfb3B0aW9uYCwgYG1ldGFmc19nZXRfb3B0aW9uX3ZhbHVlc2AsIGBtZXRhZnNfZ2V0X2xpbmtgLCBgbWV0YWZzX3JlYWRsaW5rYCwgYG1ldGFmc19kX3JlbGVhc2VgLCBgbWV0YWZzX2dldF9pbm9kZWAsIGBtZXRhZnNfcm9vdF9sb29rdXBgLCBgbWV0YWZzX21vdW50X2xvb2t1cGAsIGBtZXRhZnNfb3B0aW9uc19sb29rdXBgLCBgbWV0YWZzX29wdGlvbl92YWx1ZXNfbG9va3VwYCwgYG1ldGFmc19nZXRfYmFzZV9maWxlYCwgYG1ldGFmc19jcmVhdGVfcm9vdGAsIGFuZCBgbWV0YWZzX2dldF9yb290YCBhcmUgdGhlIGZ1bmN0aW9ucyBvZiB0aGlzIGZpbGVzeXN0ZW0gdG8gZm9jdXMgb24uXG5cbkFsc28sIEkgaGF2ZSB0byBiZSBhd2FyZSBvZiB0aGUgYHBhdGhfaW5pdGAgaW4gYGZzL25hbWVpLmNgLCBhbmQgdGhlIGBidWlsZF9vcGVuX2ZsYWdzYCBpbiBgZnMvb3Blbi5jYC4gVGhlc2UgYXJlIGJvdGggaG90IHBhdGhzIGFuZCBjb3VsZCBwcmVzZW50IG9wcG9ydHVuaXRpZXMgZm9yIGV4cGxvaXRhdGlvbi5cblxuVGhlcmUgYXJlIGFsc28gYSBidW5jaCBvZiBvdGhlciBjaGFuZ2VzIHRoYXQgc2hvdWxkIGJlIHZlcmlmaWVkOiBgbW50X3Nob3dfb3B0aW9uc2AsIGBzYl9hZGRfb3B0aW9uYCwgYHNiX2FkZF9vcHRpb25fcGF0aGAsIGBvdmxfZ2V0X29wdGlvbnNgLCBhbmQgYGVyb2ZzX2dldF9vcHRpb25zYC5cblxuKipGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgYG1ldGFmc2AgaXMgYnVpbHQtaW4uIFRoYXQncyBnb29kIHRvIGtub3cuIFNvLCBmdXp6aW5nIGBvcGVuYXQyYCBvciBgb3BlbmAgd2l0aCB0aGUgbmV3IGBPX0FMVGAgZmxhZyB3aWxsIHRyaWdnZXIgdGhlIGBtZXRhZnNfZ2V0X3Jvb3RgIGZ1bmN0aW9uLCBzbyBJJ2xsIHdhbnQgdG8gZm9jdXMgb24gdGhhdC4gQWxzbywgdGhlIHNhbWUgaXMgdHJ1ZSBmb3IgYG9wZW5fdHJlZWAgdXNpbmcgYE9QRU5fVFJFRV9BTFRgLlxuXG5TbyB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBmb3IgZnV6emluZzpcblxuKiAgIGBtZXRhZnNfZ2V0X3Jvb3RgXG4qICAgYG1ldGFmc19jcmVhdGVfcm9vdGBcbiogICBgbWV0YWZzX3Jvb3RfbG9va3VwYFxuKiAgIGBtZXRhZnNfbW91bnRfbG9va3VwYFxuKiAgIGBtZXRhZnNfb3B0aW9uc19sb29rdXBgXG4qICAgYG1ldGFmc19vcHRpb25fdmFsdWVzX2xvb2t1cGBcbiogICBgbWV0YWZzX2dldF9vcHRpb25fdmFsdWVzYFxuKiAgIGBtZXRhZnNfZ2V0X2xpbmtgXG4qICAgYG1ldGFmc19yZWFkbGlua2BcbiogICBgbW50X3Nob3dfb3B0aW9uc2BcbiogICBgc2JfYWRkX29wdGlvbmBcbiogICBgc2JfYWRkX29wdGlvbl9wYXRoYFxuKiAgIGBvdmxfZ2V0X29wdGlvbnNgXG4qICAgYGVyb2ZzX2dldF9vcHRpb25zYFxuXG5JIHNob3VsZCBzY2FuIGBmcy9tZXRhZnMvbWV0YWZzLmNgIGEgYml0IGNsb3NlciBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IHBvdGVudGlhbCB0YXJnZXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDAzNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNzksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQxNjowODo0MS4yMjkxMDMyMjdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5MjgwNzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdGF0aWMuKiBtZXRhZnNfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL21ldGFmcy9tZXRhZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9tZXRhZnMvbWV0YWZzLmM9MjQ9c3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqbWV0YWZzX21udCBfX3JvX2FmdGVyX2luaXQ7XFxuZnMvbWV0YWZzL21ldGFmcy5jLTI1LVxcbmZzL21ldGFmcy9tZXRhZnMuYzoyNjpzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgbWV0YWZzX29wcyA9IHtcXG5mcy9tZXRhZnMvbWV0YWZzLmMtMjctXFx0LnN0YXRmc1xcdFxcdD0gc2ltcGxlX3N0YXRmcyxcXG4tLVxcbmZzL21ldGFmcy9tZXRhZnMuYy0zMC1cXG5mcy9tZXRhZnMvbWV0YWZzLmM6MzE6c3RhdGljIGludCBtZXRhZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy9tZXRhZnMvbWV0YWZzLmMtMzIte1xcbi0tXFxuZnMvbWV0YWZzL21ldGFmcy5jLTM5LVxcbmZzL21ldGFmcy9tZXRhZnMuYzo0MDpzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgbWV0YWZzX3R5cGUgPSB7XFxuZnMvbWV0YWZzL21ldGFmcy5jLTQxLVxcdC5uYW1lID0gXFxcIm1ldGFmc1xcXCIsXFxuLS1cXG5mcy9tZXRhZnMvbWV0YWZzLmM9NzQ9c3RydWN0IG1ldGFmc19jb2xsZWN0X2N0eCB7XFxuLS1cXG5mcy9tZXRhZnMvbWV0YWZzLmMtODctICovXFxuZnMvbWV0YWZzL21ldGFmcy5jOjg4OnN0YXRpYyB2b2lkIG1ldGFmc19jb2xsZWN0X29wdGlvbihzdHJ1Y3Qgc2Jfb3B0X2N0eCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLFxcbmZzL21ldGFmcy9tZXRhZnMuYy04OS1cXHRcXHRcXHRcXHQgIGNvbnN0IGNoYXIgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aClcXG4tLVxcbmZzL21ldGFmcy9tZXRhZnMuYy0xMjgtXFxuZnMvbWV0YWZzL21ldGFmcy5jOjEyOTpzdGF0aWMgdm9pZCBtZXRhZnNfZnJlZV9lbnRyaWVzKHN0cnVjdCBtZXRhZnNfb3B0aW9uX2VudHJ5ICplbnRyaWVzLCBpbnQgY291bnQpXFxuZnMvbWV0YWZzL21ldGFmcy5jLTEzMC17XFxuLS1cXG5mcy9tZXRhZnMvbWV0YWZzLmMtMTQwLVxcbmZzL21ldGFmcy9tZXRhZnMuYzoxNDE6c3RhdGljIGludCBtZXRhZnNfZ2V0X29wdGlvbl92YWx1ZXMoc3RydWN0IGZpbGUgKmJhc2UsIGNvbnN0IGNoYXIgKm9wdGlvbl9uYW1lLFxcbmZzL21ldGFmcy9tZXRhZnMuYy0xNDItXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBtZXRhZnNfb3B0aW9uX2VudHJ5ICoqZW50cmllc19vdXQsXFxuLS1cXG5mcy9tZXRhZnMvbWV0YWZzLmM9MTg3PXN0YXRpYyBjb25zdCBjaGFyICptZXRhZnNfZ2V0X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvbWV0YWZzL21ldGFmcy5jLTIwNi1cXG5mcy9tZXRhZnMvbWV0YWZzLmM6MjA3OnN0YXRpYyBpbnQgbWV0YWZzX3JlYWRsaW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciBfX3VzZXIgKmJ1ZmZlcixcXG5mcy9tZXRhZnMvbWV0YWZzLmMtMjA4LVxcdFxcdFxcdCAgIGludCBidWZsZW4pXFxuLS1cXG5mcy9tZXRhZnMvbWV0YWZzLmMtMjE4LVxcbmZzL21ldGFmcy9tZXRhZnMuYzoyMTk6c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1ldGFmc19zeW1saW5rX2lvcHMgPSB7XFxuZnMvbWV0YWZzL21ldGFmcy5jLTIyMC1cXHQuZ2V0X2xpbmtcXHQ9IG1ldGFmc19nZXRfbGluayxcXG4tLVxcbmZzL21ldGFmcy9tZXRhZnMuYy0yMjYtICovXFxuZnMvbWV0YWZzL21ldGFmcy5jOjIyNzpzdGF0aWMgdm9pZCBtZXRhZnNfZF9yZWxlYXNlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG5mcy9tZXRhZnMvbWV0YWZzLmMtMjI4LXtcXG4tLVxcbmZzL21ldGFmcy9tZXRhZnMuYy0yNTItXFxuZnMvbWV0YWZzL21ldGFmcy5jOjI1MzpzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIG1ldGFmc19kZW50cnlfb3BzID0ge1xcbmZzL21ldGFmcy9tZXRhZnMuYy0yNTQtXFx0LmRfcmVsZWFzZSA9IG1ldGFmc19kX3JlbGVhc2UsXFxuLS1cXG5mcy9tZXRhZnMvbWV0YWZzLmM9MjY3PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICptZXRhZnNfb3B0aW9uX3ZhbHVlc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL21ldGFmcy9tZXRhZnMuYy0yNjktXFxuZnMvbWV0YWZzL21ldGFmcy5jOjI3MDpzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWV0YWZzX3Jvb3RfZGlyX2lvcHMgPSB7XFxuZnMvbWV0YWZzL21ldGFmcy5jLTI3MS1cXHQubG9va3VwXFx0XFx0PSBtZXRhZnNfcm9vdF9sb29rdXAsXFxuLS1cXG5mcy9tZXRhZnMvbWV0YWZzLmMtMjczLVxcbmZzL21ldGFmcy9tZXRhZnMuYzoyNzQ6c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1ldGFmc19tb3VudF9kaXJfaW9wcyA9IHtcXG5mcy9tZXRhZnMvbWV0YWZzLmMtMjc1LVxcdC5sb29rdXBcXHRcXHQ9IG1ldGFmc19tb3VudF9sb29rdXAsXFxuLS1cXG5mcy9tZXRhZnMvbWV0YWZzLmMtMjc3LVxcbmZzL21ldGFmcy9tZXRhZnMuYzoyNzg6c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1ldGFmc19vcHRpb25zX2Rpcl9pb3BzID0ge1xcbmZzL21ldGFmcy9tZXRhZnMuYy0yNzktXFx0Lmxvb2t1cFxcdFxcdD0gbWV0YWZzX29wdGlvbnNfbG9va3VwLFxcbi0tXFxuZnMvbWV0YWZzL21ldGFmcy5jLTI4MS1cXG5mcy9tZXRhZnMvbWV0YWZzLmM6MjgyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBtZXRhZnNfb3B0aW9uX3ZhbHVlc19kaXJfaW9wcyA9IHtcXG5mcy9tZXRhZnMvbWV0YWZzLmMtMjgzLVxcdC5sb29rdXBcXHRcXHQ9IG1ldGFmc19vcHRpb25fdmFsdWVzX2xvb2t1cCxcXG4tLVxcbmZzL21ldGFmcy9tZXRhZnMuYz01NTE9RVhQT1JUX1NZTUJPTF9HUEwobWV0YWZzX2dldF9yb290KTtcXG5mcy9tZXRhZnMvbWV0YWZzLmMtNTUyLVxcbmZzL21ldGFmcy9tZXRhZnMuYzo1NTM6c3RhdGljIGludCBfX2luaXQgbWV0YWZzX2luaXQodm9pZClcXG5mcy9tZXRhZnMvbWV0YWZzLmMtNTU0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMTY6MDg6NDEuMzc4Mzg5NTc0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjI0NjAxMzYxNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgRmlsZXN5c3RlbSBDaGFuZ2VzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHRoaXMgbmV3IGBtZXRhZnNgIHZpcnR1YWwgZmlsZXN5c3RlbSDigJMgaW50ZXJlc3RpbmcuIEl0IHNvdW5kcyBsaWtlIGl0J3MgZGVzaWduZWQgdG8gZ2l2ZSB1cyBhIGRpcmVjdCB3YXkgdG8gYWNjZXNzIG1ldGFkYXRhIGFib3V0IGZpbGVzIGFuZCBmaWxlc3lzdGVtcywgd2hpY2ggaXMgdXNlZnVsLiBJIHNlZSBpdCB1c2VzIGBPX0FMVGAgZmlsZSBkZXNjcmlwdG9ycywgd2hpY2ggaXMgYSBnb29kIGNob2ljZSBmb3IgdGhpcyB0eXBlIG9mIGFjY2Vzcywga2VlcHMgdGhpbmdzIGNsZWFuLiBQbHVzLCBpdCB0b3VjaGVzIGBlcm9mc2AgYW5kIGBvdmVybGF5ZnNgLCBtb2RpZnlpbmcgdGhlbSB0byBzdXBwb3J0IGBnZXRfb3B0aW9uc2AuIFRoYXQncyBub3QgZW50aXJlbHkgc3VycHJpc2luZywgZ2l2ZW4gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGZpbGVzeXN0ZW1zLlxuXG5UaGUgYG1ldGFmc2AgZmlsZXN5c3RlbSBpdHNlbGYgaXMgYWx3YXlzIGJ1aWx0LWluLCBubyBjb25maWd1cmF0aW9uIG5lZWRlZCwganVzdCBgb2JqLXkgKz0gbWV0YWZzL2AuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3Mgb24gdGhlIHVzZXIgc2lkZS4gSG93ZXZlciwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgRVJPRlNfRlNgIGFuZCBgT1ZFUkxBWV9GU2AgYXJlIGVuYWJsZWQgdG8gdGVzdCB0aGUgYGVyb2ZzYCBhbmQgYG92ZXJsYXlmc2AgY2hhbmdlcyBwcm9wZXJseSwgYXMgaXQgaW1wYWN0cyB0aGVtLlxuXG5Ob3csIGxldCdzIGp1c3QgY29uZmlybS4gSSB3YW50IHRvIGJlIHRob3JvdWdoLiBJJ2xsIHRha2UgYSBxdWljayBsb29rIGF0IGBmcy9lcm9mcy9LY29uZmlnYCBhbmQgYGZzL292ZXJsYXlmcy9LY29uZmlnYC4gSSdsbCBjb25maXJtIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBvYnZpb3VzIGluIHRoZSBjb25maWd1cmF0aW9uIHNwYWNlLCBhbmQgZG91YmxlIGNoZWNrIHRoZSBleGFjdCBjb25maWcgbmFtZXMgZm9yIHRob3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzQ5NiwiT3V0cHV0VG9rZW5zIjo2NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQxNjowOTowMy44Mzg1MzAyNDNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5NzMxNTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5jb25maWcgRVJPRlNfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXJvZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9lcm9mcy9LY29uZmlnLTItXFxuZnMvZXJvZnMvS2NvbmZpZzozOmNvbmZpZyBFUk9GU19GU1xcbmZzL2Vyb2ZzL0tjb25maWctNC1cXHR0cmlzdGF0ZSBcXFwiRVJPRlMgZmlsZXN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy00OS1cXG5mcy9lcm9mcy9LY29uZmlnOjUwOmNvbmZpZyBFUk9GU19GU19ERUJVR1xcbmZzL2Vyb2ZzL0tjb25maWctNTEtXFx0Ym9vbCBcXFwiRVJPRlMgZGVidWdnaW5nIGZlYXR1cmVcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTU5LVxcbmZzL2Vyb2ZzL0tjb25maWc6NjA6Y29uZmlnIEVST0ZTX0ZTX1hBVFRSXFxuZnMvZXJvZnMvS2NvbmZpZy02MS1cXHRib29sIFxcXCJFUk9GUyBleHRlbmRlZCBhdHRyaWJ1dGVzXFxcIlxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy03MC1cXG5mcy9lcm9mcy9LY29uZmlnOjcxOmNvbmZpZyBFUk9GU19GU19QT1NJWF9BQ0xcXG5mcy9lcm9mcy9LY29uZmlnLTcyLVxcdGJvb2wgXFxcIkVST0ZTIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy04NC1cXG5mcy9lcm9mcy9LY29uZmlnOjg1OmNvbmZpZyBFUk9GU19GU19TRUNVUklUWVxcbmZzL2Vyb2ZzL0tjb25maWctODYtXFx0Ym9vbCBcXFwiRVJPRlMgU2VjdXJpdHkgTGFiZWxzXFxcIlxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy05Ny1cXG5mcy9lcm9mcy9LY29uZmlnOjk4OmNvbmZpZyBFUk9GU19GU19CQUNLRURfQllfRklMRVxcbmZzL2Vyb2ZzL0tjb25maWctOTktXFx0Ym9vbCBcXFwiRmlsZS1iYWNrZWQgRVJPRlMgZmlsZXN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy0xMTEtXFxuZnMvZXJvZnMvS2NvbmZpZzoxMTI6Y29uZmlnIEVST0ZTX0ZTX1pJUFxcbmZzL2Vyb2ZzL0tjb25maWctMTEzLVxcdGJvb2wgXFxcIkVST0ZTIERhdGEgQ29tcHJlc3Npb24gU3VwcG9ydFxcXCJcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctMTIxLVxcbmZzL2Vyb2ZzL0tjb25maWc6MTIyOmNvbmZpZyBFUk9GU19GU19aSVBfTFpNQVxcbmZzL2Vyb2ZzL0tjb25maWctMTIzLVxcdGJvb2wgXFxcIkVST0ZTIExaTUEgY29tcHJlc3NlZCBkYXRhIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTEzMy1cXG5mcy9lcm9mcy9LY29uZmlnOjEzNDpjb25maWcgRVJPRlNfRlNfWklQX0RFRkxBVEVcXG5mcy9lcm9mcy9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJFUk9GUyBERUZMQVRFIGNvbXByZXNzZWQgZGF0YSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy0xNDQtXFxuZnMvZXJvZnMvS2NvbmZpZzoxNDU6Y29uZmlnIEVST0ZTX0ZTX1pJUF9aU1REXFxuZnMvZXJvZnMvS2NvbmZpZy0xNDYtXFx0Ym9vbCBcXFwiRVJPRlMgWnN0YW5kYXJkIGNvbXByZXNzZWQgZGF0YSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy0xNTUtXFxuZnMvZXJvZnMvS2NvbmZpZzoxNTY6Y29uZmlnIEVST0ZTX0ZTX1pJUF9BQ0NFTFxcbmZzL2Vyb2ZzL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkVST0ZTIGhhcmR3YXJlIGRlY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctMTY5LVxcbmZzL2Vyb2ZzL0tjb25maWc6MTcwOmNvbmZpZyBFUk9GU19GU19QQ1BVX0tUSFJFQURcXG5mcy9lcm9mcy9LY29uZmlnLTE3MS1cXHRib29sIFxcXCJFUk9GUyBwZXItY3B1IGRlY29tcHJlc3Npb24ga3RocmVhZCB3b3JrZXJzXFxcIlxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy0xNzgtXFxuZnMvZXJvZnMvS2NvbmZpZzoxNzk6Y29uZmlnIEVST0ZTX0ZTX1BDUFVfS1RIUkVBRF9ISVBSSVxcbmZzL2Vyb2ZzL0tjb25maWctMTgwLVxcdGJvb2wgXFxcIkVST0ZTIGhpZ2ggcHJpb3JpdHkgcGVyLUNQVSBrdGhyZWFkIHdvcmtlcnNcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTE4OC1cXG5mcy9lcm9mcy9LY29uZmlnOjE4OTpjb25maWcgRVJPRlNfRlNfUEFHRV9DQUNIRV9TSEFSRVxcbmZzL2Vyb2ZzL0tjb25maWctMTkwLVxcdGJvb2wgXFxcIkVST0ZTIHBhZ2UgY2FjaGUgc2hhcmUgc3VwcG9ydCAoZXhwZXJpbWVudGFsKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMTY6MDk6MDMuOTU4MjY2MTZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NzUyODQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5jb25maWcgT1ZFUkxBWV9GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9vdmVybGF5ZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vdmVybGF5ZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL292ZXJsYXlmcy9LY29uZmlnOjI6Y29uZmlnIE9WRVJMQVlfRlNcXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJPdmVybGF5IGZpbGVzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL292ZXJsYXlmcy9LY29uZmlnLTE0LVxcbmZzL292ZXJsYXlmcy9LY29uZmlnOjE1OmNvbmZpZyBPVkVSTEFZX0ZTX1JFRElSRUNUX0RJUlxcbmZzL292ZXJsYXlmcy9LY29uZmlnLTE2LVxcdGJvb2wgXFxcIk92ZXJsYXlmczogdHVybiBvbiByZWRpcmVjdCBkaXJlY3RvcnkgZmVhdHVyZSBieSBkZWZhdWx0XFxcIlxcbi0tXFxuZnMvb3ZlcmxheWZzL0tjb25maWctMzAtXFxuZnMvb3ZlcmxheWZzL0tjb25maWc6MzE6Y29uZmlnIE9WRVJMQVlfRlNfUkVESVJFQ1RfQUxXQVlTX0ZPTExPV1xcbmZzL292ZXJsYXlmcy9LY29uZmlnLTMyLVxcdGJvb2wgXFxcIk92ZXJsYXlmczogZm9sbG93IHJlZGlyZWN0cyBldmVuIGlmIHJlZGlyZWN0cyBhcmUgdHVybmVkIG9mZlxcXCJcXG4tLVxcbmZzL292ZXJsYXlmcy9LY29uZmlnLTQ1LVxcbmZzL292ZXJsYXlmcy9LY29uZmlnOjQ2OmNvbmZpZyBPVkVSTEFZX0ZTX0lOREVYXFxuZnMvb3ZlcmxheWZzL0tjb25maWctNDctXFx0Ym9vbCBcXFwiT3ZlcmxheWZzOiB0dXJuIG9uIGlub2RlcyBpbmRleCBmZWF0dXJlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy02NC1cXG5mcy9vdmVybGF5ZnMvS2NvbmZpZzo2NTpjb25maWcgT1ZFUkxBWV9GU19ORlNfRVhQT1JUXFxuZnMvb3ZlcmxheWZzL0tjb25maWctNjYtXFx0Ym9vbCBcXFwiT3ZlcmxheWZzOiB0dXJuIG9uIE5GUyBleHBvcnQgZmVhdHVyZSBieSBkZWZhdWx0XFxcIlxcbi0tXFxuZnMvb3ZlcmxheWZzL0tjb25maWctOTItXFxuZnMvb3ZlcmxheWZzL0tjb25maWc6OTM6Y29uZmlnIE9WRVJMQVlfRlNfWElOT19BVVRPXFxuZnMvb3ZlcmxheWZzL0tjb25maWctOTQtXFx0Ym9vbCBcXFwiT3ZlcmxheWZzOiBhdXRvIGVuYWJsZSBpbm9kZSBudW1iZXIgbWFwcGluZ1xcXCJcXG4tLVxcbmZzL292ZXJsYXlmcy9LY29uZmlnLTExMC1cXG5mcy9vdmVybGF5ZnMvS2NvbmZpZzoxMTE6Y29uZmlnIE9WRVJMQVlfRlNfTUVUQUNPUFlcXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0xMTItXFx0Ym9vbCBcXFwiT3ZlcmxheWZzOiB0dXJuIG9uIG1ldGFkYXRhIG9ubHkgY29weSB1cCBmZWF0dXJlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0xMjgtXFxuZnMvb3ZlcmxheWZzL0tjb25maWc6MTI5OmNvbmZpZyBPVkVSTEFZX0ZTX0RFQlVHXFxuZnMvb3ZlcmxheWZzL0tjb25maWctMTMwLVxcdGJvb2wgXFxcIk92ZXJsYXlmczogdHVybiBvbiBleHRyYSBkZWJ1Z2dpbmcgY2hlY2tzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQxNjowOTowNC4xMDQwMjU1OTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDA3NDQ1ODEwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTWV0YUZTIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIGBtZXRhZnNgIGZpbGVzeXN0ZW0gY29kZSwgYW5kIGhlcmUncyB3aGF0J3MgYnViYmxpbmcgdG8gdGhlIHN1cmZhY2UuIEl0IHNlZW1zIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFyZSB0aHJvdWdoIHRoZSBgT19BTFRgIGZsYWcgd2l0aGluIGBvcGVuYXQyYCBvciBgb3BlbmAgY2FsbHMsIGFuZCB0aGUgYE9QRU5fVFJFRV9BTFRgIGZsYWcgd2l0aGluIHRoZSBgb3Blbl90cmVlYCBmdW5jdGlvbi4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGBmcy9tZXRhZnMvbWV0YWZzLmNgLCBhbmQgdGhlIG5ldyBgZ2V0X29wdGlvbnNgIGZ1bmN0aW9ucyBzcHJpbmtsZWQgd2l0aGluIGBmcy9lcm9mcy9zdXBlci5jYCBhbmQgYGZzL292ZXJsYXlmcy9wYXJhbXMuY2AuIFRoYXQncyB3aGVyZSB0aGUgYWN0aW9uIGlzLlxuXG5TcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBJIHNob3VsZCBzY3J1dGluaXplIHRoZXNlIHN5bWJvbHM6IGBtZXRhZnNfZ2V0X3Jvb3RgLCBgbWV0YWZzX2NyZWF0ZV9yb290YCwgYG1ldGFmc19yb290X2xvb2t1cGAsIGBtZXRhZnNfbW91bnRfbG9va3VwYCwgYG1ldGFmc19vcHRpb25zX2xvb2t1cGAsIGBtZXRhZnNfb3B0aW9uX3ZhbHVlc19sb29rdXBgLCBgbWV0YWZzX2dldF9vcHRpb25fdmFsdWVzYCwgYG1ldGFmc19nZXRfbGlua2AsIGBtZXRhZnNfcmVhZGxpbmtgLCBhbG9uZ3NpZGUgYG1udF9zaG93X29wdGlvbnNgLCBgc2JfYWRkX29wdGlvbmAsIGBzYl9hZGRfb3B0aW9uX3BhdGhgLCBgb3ZsX2dldF9vcHRpb25zYCwgYW5kIGBlcm9mc19nZXRfb3B0aW9uc2AuIFRob3NlIHNlZW0gdG8gYmUgdGhlIGNyaXRpY2FsIHBpZWNlcy5cblxuSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWdzIGVuYWJsZWQuIEl0IGxvb2tzIGxpa2UgYEVST0ZTX0ZTYCBhbmQgYE9WRVJMQVlfRlNgIGFyZSBlc3NlbnRpYWwuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcywganVzdCB0byBiZSB0aG9yb3VnaC4gUmlnaHQgbm93LCBpdCBsb29rcyBsaWtlIGBtZXRhZnNgIGl0c2VsZiBpcyBidWlsdC1pbi4gSSBhbHNvIG5vdGVkIHRoYXQgdGhlIGBPX0FMVGAgZmxhZyBpcyBhZGRlZCB0byBgT19QQVRIX0ZMQUdTYCwgYW5kIGBPUEVOX1RSRUVfQUxUYCBmbGFnIGlzIGFkZGVkIHRvIGBvcGVuX3RyZWVgLiBUaGUgYE1OVF9DTE9OQUJMRWAgZmxhZyBpcyBhZGRlZCB0byBgbnNmc2AsIGBwaWRmc2AsIGFuZCBgb3ZlcmxheWZzYCBsYXllcnMuXG5cbk5vdywgYW4gaW1wb3J0YW50IHF1ZXN0aW9uIGlzIGlmIGFueSBvdGhlciBmaWxlc3lzdGVtcyBhcmUgdXRpbGl6aW5nIHRoYXQgYGdldF9vcHRpb25zYCBmdW5jdGlvbi4gVGhlIHBhdGNoIG1lbnRpb25zIGNoYW5nZXMgdG8gYGVyb2ZzYCBhbmQgYG92ZXJsYXlmc2AsIGJ1dCBJIHNob3VsZCB2ZXJpZnkgdGhhdCdzIHRoZSBleHRlbnQgb2YgdGhlIGltcGFjdC5cblxuT2theSwgbGV0J3MgdmVyaWZ5IHRoYXQgYG1ldGFmc19nZXRfcm9vdGAgaXMgaW5kZWVkIHJlYWNoYWJsZS4gTG9va2luZyBhdCBgZnMvbmFtZWkuY2AsIGluIGBwYXRoX2luaXRgLCB0aGVyZSdzIGEgY29uZGl0aW9uYWw6IGlmIGBmbGFncyBcdTAwMjYgTE9PS1VQX0FMVGAgaXMgc2V0LCBhbmQgaXQganVtcHMgdG8gYG1ldGFmc19nZXRfcm9vdGAuIE9rYXksIHBlcmZlY3QuIFRoZSBgTE9PS1VQX0FMVGAgZmxhZyBpcyBzZXQgaW4gYGJ1aWxkX29wZW5fZmxhZ3NgIGlmIGBPX0FMVGAgaXMgcHJlc2VudC4gQW5kIGBPX0FMVGAgaXMgZXF1YWwgdG8gYDEgXHUwMDNjXHUwMDNjIDI3YC4gU28sIGFuIGBvcGVuYXQoLi4uLCBPX0FMVCwgLi4uKWAgY2FsbCB3aWxsIGFic29sdXRlbHkgdHJpZ2dlciBgbWV0YWZzX2dldF9yb290YC4gVGhhdCBtYWtlcyBpdCB0ZXN0YWJsZSBhbmQgcmVhY2hhYmxlLiBFeGNlbGxlbnQhIEkgdGhpbmsgSSBoYXZlIGEgY2xlYXIgcGljdHVyZS5cblxuTm93LCBJIHRoaW5rIEknbSByZWFkeSB0byBzdGFydCBwcmVwYXJpbmcgdGhlIHJlc3VsdHMgYW5kIHRoZSB0ZXN0IHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTM0NiwiT3V0cHV0VG9rZW5zIjoyNDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDE2OjA5OjI0LjE3ODQ4NjIxNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwMjIwMDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFUk9GU19GU1wiLFxuICAgIFwiT1ZFUkxBWV9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1ldGFmc19nZXRfcm9vdFwiLFxuICAgIFwibWV0YWZzX2NyZWF0ZV9yb290XCIsXG4gICAgXCJtZXRhZnNfcm9vdF9sb29rdXBcIixcbiAgICBcIm1ldGFmc19tb3VudF9sb29rdXBcIixcbiAgICBcIm1ldGFmc19vcHRpb25zX2xvb2t1cFwiLFxuICAgIFwibWV0YWZzX29wdGlvbl92YWx1ZXNfbG9va3VwXCIsXG4gICAgXCJtZXRhZnNfZ2V0X29wdGlvbl92YWx1ZXNcIixcbiAgICBcIm1ldGFmc19nZXRfbGlua1wiLFxuICAgIFwibWV0YWZzX3JlYWRsaW5rXCIsXG4gICAgXCJtbnRfc2hvd19vcHRpb25zXCIsXG4gICAgXCJzYl9hZGRfb3B0aW9uXCIsXG4gICAgXCJzYl9hZGRfb3B0aW9uX3BhdGhcIixcbiAgICBcIm92bF9nZXRfb3B0aW9uc1wiLFxuICAgIFwiZXJvZnNfZ2V0X29wdGlvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHZpcnR1YWwgZmlsZXN5c3RlbSBgbWV0YWZzYCB0aGF0IGV4cG9zZXMgbWV0YWRhdGEgYWJvdXQgZmlsZXMgYW5kIGZpbGVzeXN0ZW1zIHZpYSB0aGUgYE9fQUxUYCBmbGFnLiBJdCBhbHNvIGludHJvZHVjZXMgYSBuZXcgYGdldF9vcHRpb25zYCBzdXBlciBvcGVyYXRpb24sIGltcGxlbWVudGVkIGJ5IGBlcm9mc2AgYW5kIGBvdmVybGF5ZnNgLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBWRlMgYW5kIHNwZWNpZmljIGZpbGVzeXN0ZW1zIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFUk9GU19GU1wiLFxuICAgIFwiT1ZFUkxBWV9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1ldGFmc19nZXRfcm9vdFwiLFxuICAgIFwibWV0YWZzX2NyZWF0ZV9yb290XCIsXG4gICAgXCJtZXRhZnNfcm9vdF9sb29rdXBcIixcbiAgICBcIm1ldGFmc19tb3VudF9sb29rdXBcIixcbiAgICBcIm1ldGFmc19vcHRpb25zX2xvb2t1cFwiLFxuICAgIFwibWV0YWZzX29wdGlvbl92YWx1ZXNfbG9va3VwXCIsXG4gICAgXCJtZXRhZnNfZ2V0X29wdGlvbl92YWx1ZXNcIixcbiAgICBcIm1ldGFmc19nZXRfbGlua1wiLFxuICAgIFwibWV0YWZzX3JlYWRsaW5rXCIsXG4gICAgXCJtbnRfc2hvd19vcHRpb25zXCIsXG4gICAgXCJzYl9hZGRfb3B0aW9uXCIsXG4gICAgXCJzYl9hZGRfb3B0aW9uX3BhdGhcIixcbiAgICBcIm92bF9nZXRfb3B0aW9uc1wiLFxuICAgIFwiZXJvZnNfZ2V0X29wdGlvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHZpcnR1YWwgZmlsZXN5c3RlbSBgbWV0YWZzYCB0aGF0IGV4cG9zZXMgbWV0YWRhdGEgYWJvdXQgZmlsZXMgYW5kIGZpbGVzeXN0ZW1zIHZpYSB0aGUgYE9fQUxUYCBmbGFnLiBJdCBhbHNvIGludHJvZHVjZXMgYSBuZXcgYGdldF9vcHRpb25zYCBzdXBlciBvcGVyYXRpb24sIGltcGxlbWVudGVkIGJ5IGBlcm9mc2AgYW5kIGBvdmVybGF5ZnNgLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBWRlMgYW5kIHNwZWNpZmljIGZpbGVzeXN0ZW1zIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdzb62[1] Phase: Succeeded StartedAt: 2026-07-15 16:09:35 +0000 UTC FinishedAt: 2026-07-15 16:09:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzb62[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-15 16:09:35 +0000 UTC FinishedAt: 2026-07-15 16:09:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzb62[2] Phase: Succeeded StartedAt: 2026-07-15 16:09:35 +0000 UTC FinishedAt: 2026-07-15 20:49:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzb62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["metafs_get_root","metafs_create_root","metafs_root_lookup","metafs_mount_lookup","metafs_options_lookup","metafs_option_values_lookup","metafs_get_option_values","metafs_get_link","metafs_readlink","mnt_show_options","sb_add_option","sb_add_option_path","ovl_get_options","erofs_get_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"fbf79ea3-3496-493e-8366-7cd78f0c8229","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-15 16:09:35 +0000 UTC FinishedAt: 2026-07-15 20:49:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["metafs_get_root","metafs_create_root","metafs_root_lookup","metafs_mount_lookup","metafs_options_lookup","metafs_option_values_lookup","metafs_get_option_values","metafs_get_link","metafs_readlink","mnt_show_options","sb_add_option","sb_add_option_path","ovl_get_options","erofs_get_options"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"fbf79ea3-3496-493e-8366-7cd78f0c8229","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowdzb62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["metafs_get_root","metafs_create_root","metafs_root_lookup","metafs_mount_lookup","metafs_options_lookup","metafs_option_values_lookup","metafs_get_option_values","metafs_get_link","metafs_readlink","mnt_show_options","sb_add_option","sb_add_option_path","ovl_get_options","erofs_get_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"fbf79ea3-3496-493e-8366-7cd78f0c8229","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-15 16:09:35 +0000 UTC FinishedAt: 2026-07-15 16:10:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzb62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["metafs_get_root","metafs_create_root","metafs_root_lookup","metafs_mount_lookup","metafs_options_lookup","metafs_option_values_lookup","metafs_get_option_values","metafs_get_link","metafs_readlink","mnt_show_options","sb_add_option","sb_add_option_path","ovl_get_options","erofs_get_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"fbf79ea3-3496-493e-8366-7cd78f0c8229","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-15 16:09:35 +0000 UTC FinishedAt: 2026-07-15 16:10:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdzb62/series-workflowdzb62-convert-artifact-1514305894/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdzb62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["metafs_get_root","metafs_create_root","metafs_root_lookup","metafs_mount_lookup","metafs_options_lookup","metafs_option_values_lookup","metafs_get_option_values","metafs_get_link","metafs_readlink","mnt_show_options","sb_add_option","sb_add_option_path","ovl_get_options","erofs_get_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"fbf79ea3-3496-493e-8366-7cd78f0c8229","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-15 16:10:23 +0000 UTC FinishedAt: 2026-07-15 16:54:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzb62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["metafs_get_root","metafs_create_root","metafs_root_lookup","metafs_mount_lookup","metafs_options_lookup","metafs_option_values_lookup","metafs_get_option_values","metafs_get_link","metafs_readlink","mnt_show_options","sb_add_option","sb_add_option_path","ovl_get_options","erofs_get_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"fbf79ea3-3496-493e-8366-7cd78f0c8229","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-15 16:10:23 +0000 UTC FinishedAt: 2026-07-15 16:54:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6d83d9ea-4a55-4a36-b5ae-dd109013d309,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdzb62/series-workflowdzb62-convert-artifact-1514305894/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "b860edb6-e68f-4150-9ad3-d8cff4be1cc7", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdzb62/series-workflowdzb62-build-action-843258108/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdzb62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["metafs_get_root","metafs_create_root","metafs_root_lookup","metafs_mount_lookup","metafs_options_lookup","metafs_option_values_lookup","metafs_get_option_values","metafs_get_link","metafs_readlink","mnt_show_options","sb_add_option","sb_add_option_path","ovl_get_options","erofs_get_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"fbf79ea3-3496-493e-8366-7cd78f0c8229","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-15 16:10:23 +0000 UTC FinishedAt: 2026-07-15 16:54:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6d83d9ea-4a55-4a36-b5ae-dd109013d309,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdzb62/series-workflowdzb62-convert-artifact-1514305894/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "b860edb6-e68f-4150-9ad3-d8cff4be1cc7", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdzb62/series-workflowdzb62-build-action-843258108/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdzb62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["metafs_get_root","metafs_create_root","metafs_root_lookup","metafs_mount_lookup","metafs_options_lookup","metafs_option_values_lookup","metafs_get_option_values","metafs_get_link","metafs_readlink","mnt_show_options","sb_add_option","sb_add_option_path","ovl_get_options","erofs_get_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"fbf79ea3-3496-493e-8366-7cd78f0c8229","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-15 16:54:14 +0000 UTC FinishedAt: 2026-07-15 16:54:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzb62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["metafs_get_root","metafs_create_root","metafs_root_lookup","metafs_mount_lookup","metafs_options_lookup","metafs_option_values_lookup","metafs_get_option_values","metafs_get_link","metafs_readlink","mnt_show_options","sb_add_option","sb_add_option_path","ovl_get_options","erofs_get_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"fbf79ea3-3496-493e-8366-7cd78f0c8229","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-15 16:54:14 +0000 UTC FinishedAt: 2026-07-15 16:54:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzb62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["metafs_get_root","metafs_create_root","metafs_root_lookup","metafs_mount_lookup","metafs_options_lookup","metafs_option_values_lookup","metafs_get_option_values","metafs_get_link","metafs_readlink","mnt_show_options","sb_add_option","sb_add_option_path","ovl_get_options","erofs_get_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"fbf79ea3-3496-493e-8366-7cd78f0c8229","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-15 16:54:14 +0000 UTC FinishedAt: 2026-07-15 16:54:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzb62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["metafs_get_root","metafs_create_root","metafs_root_lookup","metafs_mount_lookup","metafs_options_lookup","metafs_option_values_lookup","metafs_get_option_values","metafs_get_link","metafs_readlink","mnt_show_options","sb_add_option","sb_add_option_path","ovl_get_options","erofs_get_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"fbf79ea3-3496-493e-8366-7cd78f0c8229","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-15 16:54:14 +0000 UTC FinishedAt: 2026-07-15 16:54:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"fbf79ea3-3496-493e-8366-7cd78f0c8229","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdzb62/series-workflowdzb62-convert-artifact-2632973241/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdzb62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["metafs_get_root","metafs_create_root","metafs_root_lookup","metafs_mount_lookup","metafs_options_lookup","metafs_option_values_lookup","metafs_get_option_values","metafs_get_link","metafs_readlink","mnt_show_options","sb_add_option","sb_add_option_path","ovl_get_options","erofs_get_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"fbf79ea3-3496-493e-8366-7cd78f0c8229","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-15 16:54:24 +0000 UTC FinishedAt: 2026-07-15 16:56:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzb62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["metafs_get_root","metafs_create_root","metafs_root_lookup","metafs_mount_lookup","metafs_options_lookup","metafs_option_values_lookup","metafs_get_option_values","metafs_get_link","metafs_readlink","mnt_show_options","sb_add_option","sb_add_option_path","ovl_get_options","erofs_get_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"fbf79ea3-3496-493e-8366-7cd78f0c8229","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-15 16:54:24 +0000 UTC FinishedAt: 2026-07-15 16:56:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b860edb6-e68f-4150-9ad3-d8cff4be1cc7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdzb62/series-workflowdzb62-build-action-843258108/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdzb62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["metafs_get_root","metafs_create_root","metafs_root_lookup","metafs_mount_lookup","metafs_options_lookup","metafs_option_values_lookup","metafs_get_option_values","metafs_get_link","metafs_readlink","mnt_show_options","sb_add_option","sb_add_option_path","ovl_get_options","erofs_get_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"fbf79ea3-3496-493e-8366-7cd78f0c8229","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-15 16:56:14 +0000 UTC FinishedAt: 2026-07-15 16:56:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzb62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["metafs_get_root","metafs_create_root","metafs_root_lookup","metafs_mount_lookup","metafs_options_lookup","metafs_option_values_lookup","metafs_get_option_values","metafs_get_link","metafs_readlink","mnt_show_options","sb_add_option","sb_add_option_path","ovl_get_options","erofs_get_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"fbf79ea3-3496-493e-8366-7cd78f0c8229","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-15 16:56:14 +0000 UTC FinishedAt: 2026-07-15 16:56:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzb62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["metafs_get_root","metafs_create_root","metafs_root_lookup","metafs_mount_lookup","metafs_options_lookup","metafs_option_values_lookup","metafs_get_option_values","metafs_get_link","metafs_readlink","mnt_show_options","sb_add_option","sb_add_option_path","ovl_get_options","erofs_get_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"fbf79ea3-3496-493e-8366-7cd78f0c8229","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-15 16:56:14 +0000 UTC FinishedAt: 2026-07-15 17:43:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzb62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["metafs_get_root","metafs_create_root","metafs_root_lookup","metafs_mount_lookup","metafs_options_lookup","metafs_option_values_lookup","metafs_get_option_values","metafs_get_link","metafs_readlink","mnt_show_options","sb_add_option","sb_add_option_path","ovl_get_options","erofs_get_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"fbf79ea3-3496-493e-8366-7cd78f0c8229","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-15 16:56:14 +0000 UTC FinishedAt: 2026-07-15 17:43:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6d83d9ea-4a55-4a36-b5ae-dd109013d309,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdzb62/series-workflowdzb62-convert-artifact-2632973241/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "0dec3350-093c-4eaa-a6de-fd6dad113da4", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdzb62/series-workflowdzb62-build-action-1638651029/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdzb62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["metafs_get_root","metafs_create_root","metafs_root_lookup","metafs_mount_lookup","metafs_options_lookup","metafs_option_values_lookup","metafs_get_option_values","metafs_get_link","metafs_readlink","mnt_show_options","sb_add_option","sb_add_option_path","ovl_get_options","erofs_get_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"fbf79ea3-3496-493e-8366-7cd78f0c8229","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-15 16:56:14 +0000 UTC FinishedAt: 2026-07-15 17:43:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6d83d9ea-4a55-4a36-b5ae-dd109013d309,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdzb62/series-workflowdzb62-convert-artifact-2632973241/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "0dec3350-093c-4eaa-a6de-fd6dad113da4", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdzb62/series-workflowdzb62-build-action-1638651029/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdzb62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["metafs_get_root","metafs_create_root","metafs_root_lookup","metafs_mount_lookup","metafs_options_lookup","metafs_option_values_lookup","metafs_get_option_values","metafs_get_link","metafs_readlink","mnt_show_options","sb_add_option","sb_add_option_path","ovl_get_options","erofs_get_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"fbf79ea3-3496-493e-8366-7cd78f0c8229","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-15 17:43:15 +0000 UTC FinishedAt: 2026-07-15 17:43:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzb62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["metafs_get_root","metafs_create_root","metafs_root_lookup","metafs_mount_lookup","metafs_options_lookup","metafs_option_values_lookup","metafs_get_option_values","metafs_get_link","metafs_readlink","mnt_show_options","sb_add_option","sb_add_option_path","ovl_get_options","erofs_get_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"fbf79ea3-3496-493e-8366-7cd78f0c8229","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-15 17:43:15 +0000 UTC FinishedAt: 2026-07-15 17:43:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzb62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["metafs_get_root","metafs_create_root","metafs_root_lookup","metafs_mount_lookup","metafs_options_lookup","metafs_option_values_lookup","metafs_get_option_values","metafs_get_link","metafs_readlink","mnt_show_options","sb_add_option","sb_add_option_path","ovl_get_options","erofs_get_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"fbf79ea3-3496-493e-8366-7cd78f0c8229","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-15 17:43:15 +0000 UTC FinishedAt: 2026-07-15 17:45:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzb62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["metafs_get_root","metafs_create_root","metafs_root_lookup","metafs_mount_lookup","metafs_options_lookup","metafs_option_values_lookup","metafs_get_option_values","metafs_get_link","metafs_readlink","mnt_show_options","sb_add_option","sb_add_option_path","ovl_get_options","erofs_get_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"fbf79ea3-3496-493e-8366-7cd78f0c8229","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-15 17:43:15 +0000 UTC FinishedAt: 2026-07-15 17:45:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0dec3350-093c-4eaa-a6de-fd6dad113da4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdzb62/series-workflowdzb62-build-action-1638651029/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdzb62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["metafs_get_root","metafs_create_root","metafs_root_lookup","metafs_mount_lookup","metafs_options_lookup","metafs_option_values_lookup","metafs_get_option_values","metafs_get_link","metafs_readlink","mnt_show_options","sb_add_option","sb_add_option_path","ovl_get_options","erofs_get_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"fbf79ea3-3496-493e-8366-7cd78f0c8229","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-15 17:45:41 +0000 UTC FinishedAt: 2026-07-15 20:49:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzb62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["metafs_get_root","metafs_create_root","metafs_root_lookup","metafs_mount_lookup","metafs_options_lookup","metafs_option_values_lookup","metafs_get_option_values","metafs_get_link","metafs_readlink","mnt_show_options","sb_add_option","sb_add_option_path","ovl_get_options","erofs_get_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"fbf79ea3-3496-493e-8366-7cd78f0c8229","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-15 17:45:41 +0000 UTC FinishedAt: 2026-07-15 20:49:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["metafs_get_root","metafs_create_root","metafs_root_lookup","metafs_mount_lookup","metafs_options_lookup","metafs_option_values_lookup","metafs_get_option_values","metafs_get_link","metafs_readlink","mnt_show_options","sb_add_option","sb_add_option_path","ovl_get_options","erofs_get_options"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*b860edb6-e68f-4150-9ad3-d8cff4be1cc7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0dec3350-093c-4eaa-a6de-fd6dad113da4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdzb62/series-workflowdzb62-build-action-843258108/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdzb62/series-workflowdzb62-build-action-1638651029/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowdzb62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["metafs_get_root","metafs_create_root","metafs_root_lookup","metafs_mount_lookup","metafs_options_lookup","metafs_option_values_lookup","metafs_get_option_values","metafs_get_link","metafs_readlink","mnt_show_options","sb_add_option","sb_add_option_path","ovl_get_options","erofs_get_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"fbf79ea3-3496-493e-8366-7cd78f0c8229","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-15 17:45:41 +0000 UTC FinishedAt: 2026-07-15 17:45:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzb62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["metafs_get_root","metafs_create_root","metafs_root_lookup","metafs_mount_lookup","metafs_options_lookup","metafs_option_values_lookup","metafs_get_option_values","metafs_get_link","metafs_readlink","mnt_show_options","sb_add_option","sb_add_option_path","ovl_get_options","erofs_get_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"fbf79ea3-3496-493e-8366-7cd78f0c8229","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-15 17:45:41 +0000 UTC FinishedAt: 2026-07-15 17:45:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["metafs_get_root","metafs_create_root","metafs_root_lookup","metafs_mount_lookup","metafs_options_lookup","metafs_option_values_lookup","metafs_get_option_values","metafs_get_link","metafs_readlink","mnt_show_options","sb_add_option","sb_add_option_path","ovl_get_options","erofs_get_options"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdzb62/series-workflowdzb62-convert-artifact-1254020910/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdzb62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["metafs_get_root","metafs_create_root","metafs_root_lookup","metafs_mount_lookup","metafs_options_lookup","metafs_option_values_lookup","metafs_get_option_values","metafs_get_link","metafs_readlink","mnt_show_options","sb_add_option","sb_add_option_path","ovl_get_options","erofs_get_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"fbf79ea3-3496-493e-8366-7cd78f0c8229","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-15 17:45:41 +0000 UTC FinishedAt: 2026-07-15 17:45:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzb62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["metafs_get_root","metafs_create_root","metafs_root_lookup","metafs_mount_lookup","metafs_options_lookup","metafs_option_values_lookup","metafs_get_option_values","metafs_get_link","metafs_readlink","mnt_show_options","sb_add_option","sb_add_option_path","ovl_get_options","erofs_get_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"fbf79ea3-3496-493e-8366-7cd78f0c8229","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-15 17:45:41 +0000 UTC FinishedAt: 2026-07-15 17:45:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzb62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["metafs_get_root","metafs_create_root","metafs_root_lookup","metafs_mount_lookup","metafs_options_lookup","metafs_option_values_lookup","metafs_get_option_values","metafs_get_link","metafs_readlink","mnt_show_options","sb_add_option","sb_add_option_path","ovl_get_options","erofs_get_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"fbf79ea3-3496-493e-8366-7cd78f0c8229","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-15 17:45:41 +0000 UTC FinishedAt: 2026-07-15 17:45:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzb62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["metafs_get_root","metafs_create_root","metafs_root_lookup","metafs_mount_lookup","metafs_options_lookup","metafs_option_values_lookup","metafs_get_option_values","metafs_get_link","metafs_readlink","mnt_show_options","sb_add_option","sb_add_option_path","ovl_get_options","erofs_get_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"fbf79ea3-3496-493e-8366-7cd78f0c8229","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-15 17:45:51 +0000 UTC FinishedAt: 2026-07-15 20:49:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzb62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["metafs_get_root","metafs_create_root","metafs_root_lookup","metafs_mount_lookup","metafs_options_lookup","metafs_option_values_lookup","metafs_get_option_values","metafs_get_link","metafs_readlink","mnt_show_options","sb_add_option","sb_add_option_path","ovl_get_options","erofs_get_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","OVERLAY_FS"],"series_id":"fbf79ea3-3496-493e-8366-7cd78f0c8229","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-15 17:45:51 +0000 UTC FinishedAt: 2026-07-15 20:48:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b860edb6-e68f-4150-9ad3-d8cff4be1cc7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0dec3350-093c-4eaa-a6de-fd6dad113da4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdzb62/series-workflowdzb62-build-action-843258108/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdzb62/series-workflowdzb62-build-action-1638651029/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdzb62/series-workflowdzb62-convert-artifact-1254020910/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}