Name: series-workflowkb9mz Phase: Succeeded StartedAt: 2026-08-26 21:52:26 +0000 UTC FinishedAt: 2026-08-27 01:53:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkb9mz[0] Phase: Succeeded StartedAt: 2026-08-26 21:52:26 +0000 UTC FinishedAt: 2026-08-26 22:12:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkb9mz[0].run-triage Phase: Succeeded StartedAt: 2026-08-26 21:52:26 +0000 UTC FinishedAt: 2026-08-26 22:12:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MINIX_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MINIX_FS" ], "series_id": "cc160969-0ec8-4964-9cad-bfc2f2ac1dbb" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "iomap_symlink_write", "V1_minix_iomap_begin", "V2_minix_iomap_begin", "minix_file_write_iter", "minix_writepages", "minix_read_folio", "minix_readahead", "minix_writeback_range" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01JTklYX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9tYXBfc3ltbGlua193cml0ZSYjMzQ7LAogICAgJiMzNDtWMV9taW5peF9pb21hcF9iZWdpbiYjMzQ7LAogICAgJiMzNDtWMl9taW5peF9pb21hcF9iZWdpbiYjMzQ7LAogICAgJiMzNDttaW5peF9maWxlX3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7bWluaXhfd3JpdGVwYWdlcyYjMzQ7LAogICAgJiMzNDttaW5peF9yZWFkX2ZvbGlvJiMzNDssCiAgICAmIzM0O21pbml4X3JlYWRhaGVhZCYjMzQ7LAogICAgJiMzNDttaW5peF93cml0ZWJhY2tfcmFuZ2UmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb252ZXJ0cyB0aGUgbWluaXggZmlsZXN5c3RlbSB0byB1c2UgaW9tYXAgZm9yIGJ1ZmZlcmVkIEkvTywgcmVwbGFjaW5nIHRoZSBvbGRlciBidWZmZXJfaGVhZCBiYXNlZCBibG9jayBJL08gZnVuY3Rpb25zLiBJdCBpbnRyb2R1Y2VzIGBpb21hcF9zeW1saW5rX3dyaXRlYCB3aGljaCB3cml0ZXMgc3ltbGluayB0YXJnZXRzIHRvIGRpc2suIFRoZSBzeW1saW5rIHRhcmdldCBpcyBhIGZ1bGx5IGluaXRpYWxpemVkIG51bGwtdGVybWluYXRlZCBzdHJpbmcgcHJvdmlkZWQgYnkgdGhlIFZGUy4gVGhlIHVud3JpdHRlbiBwYXJ0cyBvZiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJsb2NrIGFyZSB6ZXJvZWQgYnkgYGlvbWFwX3dyaXRlX2JlZ2luYCAoc2luY2UgYElPTUFQX0ZfTkVXYCBpcyBzZXQgZm9yIG5ldyBibG9ja3MpLiBXaGVuIHJlYWRpbmcgdGhlIHN5bWxpbmssIGBwYWdlX2dldF9saW5rYCBhZGRzIHRoZSBudWxsIHRlcm1pbmF0b3IgaW4gbWVtb3J5LiBUaGUgcmVzdCBvZiB0aGUgcGF0Y2ggcmVwbGFjZXMgc3RhbmRhcmQgcmVhZC93cml0ZS93cml0ZWJhY2sgZnVuY3Rpb25zIHdpdGggdGhlaXIgaW9tYXAgZXF1aXZhbGVudHMsIHdoaWNoIGhhbmRsZSB1c2VyIHNwYWNlIGRhdGEgYW5kIHBhZ2UgY2FjaGUgY29ycmVjdGx5LiBUaGVyZSBhcmUgbm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBpbmZvLWxlYWtzLCBvciB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdy4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtaWdyYXRlcyB0aGUgbWluaXggZmlsZXN5c3RlbSB0byB1c2UgaW9tYXAgZm9yIGJ1ZmZlcmVkIEkvTyBhbmQgc3ltbGlua3MuIFRoaXMgaW52b2x2ZXMgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWluaXggZmlsZSBvcGVyYXRpb25zLCBhZGRyZXNzIHNwYWNlIG9wZXJhdGlvbnMsIGFuZCBibG9jayBtYXBwaW5nIGxvZ2ljLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IG1vdW50aW5nIGEgbWluaXggZmlsZXN5c3RlbSBpbWFnZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjoxMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY5NGM1YTNmZmNlZDczNWY1ODQyZjY3NDYzZGJhZjEyNTE5MTVmZWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAyMjoxMDoxOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9pb21hcC9idWZmZXJlZC1pby5jIGIvZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1xuaW5kZXggMGE1ZWJmZGE5MGYxMi4uNWU4YWMzZmFkNjcxNCAxMDA2NDRcbi0tLSBhL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNcbkBAIC0yMTAwLDMgJiM0MzsyMTAwLDM3IEBAIGlvbWFwX3dyaXRlcGFnZXMoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYylcbiBcdHJldHVybiBlcnJvcjtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfd3JpdGVwYWdlcyk7XG4mIzQzO1xuJiM0MztpbnQgaW9tYXBfc3ltbGlua193cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICp0YXJnZXQsIGludCBsZW4sXG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsXG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGVfb3BzICp3cml0ZV9vcHMsIHZvaWQgKnByaXZhdGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZlYyB2ZWMgPSB7XG4mIzQzO1x0XHQuaW92X2Jhc2VcdD0gKHZvaWQgKil0YXJnZXQsXG4mIzQzO1x0XHQuaW92X2xlblx0PSBsZW4gLSAxLFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IGlvbWFwX2l0ZXIgaXRlciA9IHtcbiYjNDM7XHRcdC5pbm9kZVx0XHQ9IGlub2RlLFxuJiM0MztcdFx0LnBvc1x0XHQ9IDAsXG4mIzQzO1x0XHQubGVuXHRcdD0gbGVuIC0gMSxcbiYjNDM7XHRcdC5mbGFnc1x0XHQ9IElPTUFQX1dSSVRFLFxuJiM0MztcdFx0LnByaXZhdGVcdD0gcHJpdmF0ZSxcbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCBpb3ZfaXRlciBpb3Y7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aW92X2l0ZXJfa3ZlYyhcdTAwMjZpb3YsIElURVJfU09VUkNFLCBcdTAwMjZ2ZWMsIDEsIGxlbiAtIDEpO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoKHJldCA9IGlvbWFwX2l0ZXIoXHUwMDI2aXRlciwgb3BzKSkgXHUwMDNlIDApXG4mIzQzO1x0XHRpdGVyLnN0YXR1cyA9IGlvbWFwX3dyaXRlX2l0ZXIoXHUwMDI2aXRlciwgXHUwMDI2aW92LCB3cml0ZV9vcHMpO1xuJiM0MztcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGl0ZXIucG9zID09IDApKVxuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4mIzQzO1xuJiM0MztcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX3N5bWxpbmtfd3JpdGUpO1xuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2ZpbGUuYyBiL2ZzL21pbml4L2ZpbGUuY1xuaW5kZXggMDJhYWJiZGI1ZGVhYS4uNjc2NWY1NzFiZDNmYyAxMDA2NDRcbi0tLSBhL2ZzL21pbml4L2ZpbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbWluaXgvZmlsZS5jXG5AQCAtMTAsNiAmIzQzOzEwLDMyIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnVmZmVyX2hlYWQuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O21pbml4LmhcJiMzNDtcbiBcbiYjNDM7c3RhdGljIHNzaXplX3QgbWluaXhfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZSA9IGlvY2ItXHUwMDNla2lfZmlscC1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbiYjNDM7XHRzc2l6ZV90IHJldDtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKTtcbiYjNDM7XG4mIzQzO1x0aW5vZGVfbG9jayhpbm9kZSk7XG4mIzQzO1x0cmV0ID0gZ2VuZXJpY193cml0ZV9jaGVja3MoaW9jYiwgZnJvbSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2M9IDApXG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZmlsZV9tb2RpZmllZChpb2NiLVx1MDAzZWtpX2ZpbHApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiYjNDM7XG4mIzQzO1x0cmV0ID0gaW9tYXBfZmlsZV9idWZmZXJlZF93cml0ZShpb2NiLCBmcm9tLCBvcHMsXG4mIzQzO1x0XHRcdE5VTEwsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRpZiAocmV0IFx1MDAzZSAwKVxuJiM0MztcdFx0cmV0ID0gZ2VuZXJpY193cml0ZV9zeW5jKGlvY2IsIHJldCk7XG4mIzQzO1xuJiM0Mzt1bmxvY2s6XG4mIzQzO1x0aW5vZGVfdW5sb2NrKGlub2RlKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogV2UgaGF2ZSBtb3N0bHkgTlVMTHMgaGVyZTogdGhlIGN1cnJlbnQgZGVmYXVsdHMgYXJlIE9LIGZvclxuICAqIHRoZSBtaW5peCBmaWxlc3lzdGVtLlxuQEAgLTE3LDEzICYjNDM7NDMsMTMgQEBcbiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfb3BlcmF0aW9ucyA9IHtcbiBcdC5sbHNlZWtcdFx0PSBnZW5lcmljX2ZpbGVfbGxzZWVrLFxuIFx0LnJlYWRfaXRlclx0PSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyLFxuLVx0LndyaXRlX2l0ZXJcdD0gZ2VuZXJpY19maWxlX3dyaXRlX2l0ZXIsXG4mIzQzO1x0LndyaXRlX2l0ZXJcdD0gbWluaXhfZmlsZV93cml0ZV9pdGVyLFxuIFx0Lm1tYXBfcHJlcGFyZVx0PSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLFxuIFx0LmZzeW5jXHRcdD0gc2ltcGxlX2ZzeW5jLFxuIFx0LnNwbGljZV9yZWFkXHQ9IGZpbGVtYXBfc3BsaWNlX3JlYWQsXG4gfTtcbiBcbi1zdGF0aWMgaW50IG1pbml4X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4mIzQzO2ludCBtaW5peF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cilcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShkZW50cnkpO1xuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2lub2RlLmMgYi9mcy9taW5peC9pbm9kZS5jXG5pbmRleCBkYWY4M2U0ZmYyNWM4Li4yYmY1ZWE5MjM2MGEyIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbWluaXgvaW5vZGUuY1xuQEAgLTQzOSw2ICYjNDM7NDM5LDMxIEBAIHN0YXRpYyBpbnQgbWluaXhfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZilcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIHNzaXplX3QgbWluaXhfd3JpdGViYWNrX3JhbmdlKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsXG4mIzQzO1x0c3RydWN0IGZvbGlvICpmb2xpbywgdTY0IHBvcywgdW5zaWduZWQgaW50IGxlbiwgdTY0IGVuZF9wb3MpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyb3I7XG4mIzQzO1xuJiM0MztcdGlmIChwb3MgXHUwMDNjIHdwYy1cdTAwM2Vpb21hcC5vZmZzZXQgfHxcbiYjNDM7XHRcdFx0cG9zIFx1MDAzZT0gd3BjLVx1MDAzZWlvbWFwLm9mZnNldCAmIzQzOyB3cGMtXHUwMDNlaW9tYXAubGVuZ3RoKSB7XG4mIzQzO1x0XHRpZiAoSU5PREVfVkVSU0lPTih3cGMtXHUwMDNlaW5vZGUpID09IE1JTklYX1YxKVxuJiM0MztcdFx0XHRlcnJvciA9IFYxX21pbml4X2lvbWFwX2JlZ2luKHdwYy1cdTAwM2Vpbm9kZSwgcG9zLCBsZW4sIElPTUFQX1dSSVRFLFxuJiM0MztcdFx0XHRcdFx1MDAyNndwYy1cdTAwM2Vpb21hcCwgTlVMTCk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGVycm9yID0gVjJfbWluaXhfaW9tYXBfYmVnaW4od3BjLVx1MDAzZWlub2RlLCBwb3MsIGxlbiwgSU9NQVBfV1JJVEUsXG4mIzQzO1x0XHRcdFx0XHUwMDI2d3BjLVx1MDAzZWlvbWFwLCBOVUxMKTtcbiYjNDM7XHRcdGlmIChlcnJvcilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGlvbWFwX2FkZF90b19pb2VuZCh3cGMsIGZvbGlvLCBwb3MsIGVuZF9wb3MsIGxlbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGViYWNrX29wcyBtaW5peF93cml0ZWJhY2tfb3BzID0ge1xuJiM0MztcdC53cml0ZWJhY2tfcmFuZ2UgPSBtaW5peF93cml0ZWJhY2tfcmFuZ2UsXG4mIzQzO1x0LndyaXRlYmFja19zdWJtaXQgPSBpb21hcF9pb2VuZF93cml0ZWJhY2tfc3VibWl0LFxuJiM0Mzt9O1xuJiM0MztcbiBzdGF0aWMgaW50IG1pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jayxcbiBcdFx0ICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKVxuIHtcbkBAIC00NDgsMTcgJiM0Mzs0NzMsNDUgQEAgc3RhdGljIGludCBtaW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssXG4gXHRcdHJldHVybiBWMl9taW5peF9nZXRfYmxvY2soaW5vZGUsIGJsb2NrLCBiaF9yZXN1bHQsIGNyZWF0ZSk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbWluaXhfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiYjNDM7LyogVGhlIG9sZCBtaW5peF93cml0ZXBhZ2VzLCBwcmVzZXJ2ZWQgZm9yIGRpcmVjdG9yeSBvcGVyYXRpb25zLiAqL1xuJiM0MztzdGF0aWMgaW50IG1pbml4X2Jsb2NrX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIHtcbiBcdHJldHVybiBtcGFnZV93cml0ZXBhZ2VzKG1hcHBpbmcsIHdiYywgbWluaXhfZ2V0X2Jsb2NrKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgbWluaXhfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiYjNDM7XHRcdHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggd3BjID0ge1xuJiM0MztcdFx0Lmlub2RlID0gbWFwcGluZy1cdTAwM2Vob3N0LFxuJiM0MztcdFx0LndiYyA9IHdiYyxcbiYjNDM7XHRcdC5vcHMgPSBcdTAwMjZtaW5peF93cml0ZWJhY2tfb3BzLFxuJiM0MztcdH07XG4mIzQzO1x0cmV0dXJuIGlvbWFwX3dyaXRlcGFnZXMoXHUwMDI2d3BjKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG1pbml4X3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGZvbGlvLVx1MDAzZW1hcHBpbmctXHUwMDNlaG9zdCk7XG4mIzQzO1xuJiM0MztcdGlvbWFwX2Jpb19yZWFkX2ZvbGlvKGZvbGlvLCBvcHMpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBUaGUgb2xkIG1pbml4X3JlYWRfZm9saW8sIHByZXNlcnZlZCBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMuICovXG4mIzQzO3N0YXRpYyBpbnQgbWluaXhfYmxvY2tfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKGZvbGlvLCBtaW5peF9nZXRfYmxvY2spO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgbWluaXhfcmVhZGFoZWFkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzID0gbWluaXhfaW9tYXBfb3BzX3ZlcihyYWMtXHUwMDNlbWFwcGluZy1cdTAwM2Vob3N0KTtcbiYjNDM7XG4mIzQzO1x0aW9tYXBfYmlvX3JlYWRhaGVhZChyYWMsIG9wcyk7XG4mIzQzO31cbiYjNDM7XG4gaW50IG1pbml4X3ByZXBhcmVfY2h1bmsoc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuKVxuIHtcbiBcdHJldHVybiBfX2Jsb2NrX3dyaXRlX2JlZ2luKGZvbGlvLCBwb3MsIGxlbiwgbWluaXhfZ2V0X2Jsb2NrKTtcbkBAIC00ODgsMjYgJiM0Mzs1NDEsMzUgQEAgc3RhdGljIGludCBtaW5peF93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgc2VjdG9yX3QgbWluaXhfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYmxvY2spXG4te1xuLVx0cmV0dXJuIGdlbmVyaWNfYmxvY2tfYm1hcChtYXBwaW5nLGJsb2NrLG1pbml4X2dldF9ibG9jayk7XG4tfVxuLVxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG1pbml4X2FvcHMgPSB7XG4tXHQuZGlydHlfZm9saW9cdD0gYmxvY2tfZGlydHlfZm9saW8sXG4tXHQuaW52YWxpZGF0ZV9mb2xpbyA9IGJsb2NrX2ludmFsaWRhdGVfZm9saW8sXG4mIzQzO1x0LmRpcnR5X2ZvbGlvXHQ9IGlvbWFwX2RpcnR5X2ZvbGlvLFxuJiM0MztcdC5pbnZhbGlkYXRlX2ZvbGlvID0gaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyxcbiBcdC5yZWFkX2ZvbGlvID0gbWluaXhfcmVhZF9mb2xpbyxcbiYjNDM7XHQucmVhZGFoZWFkID0gbWluaXhfcmVhZGFoZWFkLFxuIFx0LndyaXRlcGFnZXMgPSBtaW5peF93cml0ZXBhZ2VzLFxuJiM0MztcdC5taWdyYXRlX2ZvbGlvID0gZmlsZW1hcF9taWdyYXRlX2ZvbGlvLFxuJiM0MztcdC5pc19wYXJ0aWFsbHlfdXB0b2RhdGUgPSBpb21hcF9pc19wYXJ0aWFsbHlfdXB0b2RhdGUsXG4mIzQzO1x0LnJlbGVhc2VfZm9saW8gPSBpb21hcF9yZWxlYXNlX2ZvbGlvLFxuJiM0MztcdC5lcnJvcl9yZW1vdmVfZm9saW8gPSBnZW5lcmljX2Vycm9yX3JlbW92ZV9mb2xpbyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qIEEgc3BlY2lhbCBhb3BzIGZvciBkaXJlY3RvcmllcyB0aGF0IGtlZXBzIHVzaW5nIHRoZSBidWZmZXIgaGVhZCBjaHVua3MsIGF0XG4mIzQzOyAqIGxlYXN0IGZvciB0aGUgdGltZSBiZWluZy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG1pbml4X2Rpcl9hb3BzID0ge1xuJiM0MztcdC5kaXJ0eV9mb2xpbyA9IGJsb2NrX2RpcnR5X2ZvbGlvLFxuJiM0MztcdC5pbnZhbGlkYXRlX2ZvbGlvID0gYmxvY2tfaW52YWxpZGF0ZV9mb2xpbyxcbiYjNDM7XHQucmVhZF9mb2xpbyA9IG1pbml4X2Jsb2NrX3JlYWRfZm9saW8sXG4gXHQud3JpdGVfYmVnaW4gPSBtaW5peF93cml0ZV9iZWdpbixcbiBcdC53cml0ZV9lbmQgPSBnZW5lcmljX3dyaXRlX2VuZCxcbiBcdC5taWdyYXRlX2ZvbGlvID0gYnVmZmVyX21pZ3JhdGVfZm9saW8sXG4tXHQuYm1hcCA9IG1pbml4X2JtYXAsXG4tXHQuZGlyZWN0X0lPID0gbm9vcF9kaXJlY3RfSU9cbiYjNDM7XHQud3JpdGVwYWdlcyA9IG1pbml4X2Jsb2NrX3dyaXRlcGFnZXMsXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWluaXhfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0ge1xuIFx0LmdldF9saW5rXHQ9IHBhZ2VfZ2V0X2xpbmssXG4gXHQuZ2V0YXR0clx0PSBtaW5peF9nZXRhdHRyLFxuJiM0MztcdC5zZXRhdHRyXHQ9IG1pbml4X3NldGF0dHIsXG4gfTtcbiBcbiB2b2lkIG1pbml4X3NldF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBkZXZfdCByZGV2KVxuQEAgLTUxOSw3ICYjNDM7NTgxLDcgQEAgdm9pZCBtaW5peF9zZXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgZGV2X3QgcmRldilcbiBcdH0gZWxzZSBpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4gXHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZtaW5peF9kaXJfaW5vZGVfb3BlcmF0aW9ucztcbiBcdFx0aW5vZGUtXHUwMDNlaV9mb3AgPSBcdTAwMjZtaW5peF9kaXJfb3BlcmF0aW9ucztcbi1cdFx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID0gXHUwMDI2bWluaXhfYW9wcztcbiYjNDM7XHRcdGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcyA9IFx1MDAyNm1pbml4X2Rpcl9hb3BzO1xuIFx0fSBlbHNlIGlmIChTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbiBcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNm1pbml4X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucztcbiBcdFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcbkBAIC03ODYsNCAmIzQzOzg0OCwzIEBAIG1vZHVsZV9pbml0KGluaXRfbWluaXhfZnMpXG4gbW9kdWxlX2V4aXQoZXhpdF9taW5peF9mcylcbiBNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7TWluaXggZmlsZSBzeXN0ZW1cJiMzNDspO1xuIE1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4tXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvaW9tYXAuYyBiL2ZzL21pbml4L2lvbWFwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi45MGUwMTZhYWEwMWVhXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9pb21hcC5jXG5AQCAtMCwwICYjNDM7MSwxMjIgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKlxuJiM0MzsgKiBpb21hcCBmdW5jdGlvbnMgZm9yIG1pbml4LlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtaW5peF9jaGFpbl9jbGVhbnVwKEluZGlyZWN0ICpjaGFpbiwgSW5kaXJlY3QgKnBhcnRpYWwpXG4mIzQzO3tcbiYjNDM7XHR3aGlsZSAocGFydGlhbCBcdTAwM2UgY2hhaW4pIHtcbiYjNDM7XHRcdGJyZWxzZShwYXJ0aWFsLVx1MDAzZWJoKTtcbiYjNDM7XHRcdHBhcnRpYWwtLTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtaW5peF9pb21hcF9zZXRfbWFwcGVkKHN0cnVjdCBpb21hcCAqaW9tYXAsIHNlY3Rvcl90IHBoeXMsXG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgYmxrYml0cywgc2VjdG9yX3QgaWJsb2NrKVxuJiM0Mzt7XG4mIzQzO1x0aW9tYXAtXHUwMDNldHlwZSA9IElPTUFQX01BUFBFRDtcbiYjNDM7XHRpb21hcC1cdTAwM2VhZGRyID0gKHU2NClwaHlzIFx1MDAzY1x1MDAzYyBibGtiaXRzO1xuJiM0MztcdGlvbWFwLVx1MDAzZWxlbmd0aCA9IDEgXHUwMDNjXHUwMDNjIGJsa2JpdHM7XG4mIzQzO1x0aW9tYXAtXHUwMDNlb2Zmc2V0ID0gKHU2NClpYmxvY2sgXHUwMDNjXHUwMDNjIGJsa2JpdHM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtaW5peF9pb21hcF9zZXRfaG9sZShzdHJ1Y3QgaW9tYXAgKmlvbWFwLFxuJiM0MztcdFx0dW5zaWduZWQgaW50IGJsa2JpdHMsIHNlY3Rvcl90IGlibG9jaylcbiYjNDM7e1xuJiM0MztcdGlvbWFwLVx1MDAzZXR5cGUgPSBJT01BUF9IT0xFO1xuJiM0MztcdGlvbWFwLVx1MDAzZWFkZHIgPSBJT01BUF9OVUxMX0FERFI7XG4mIzQzO1x0aW9tYXAtXHUwMDNlbGVuZ3RoID0gMSBcdTAwM2NcdTAwM2MgYmxrYml0cztcbiYjNDM7XHRpb21hcC1cdTAwM2VvZmZzZXQgPSAodTY0KWlibG9jayBcdTAwM2NcdTAwM2MgYmxrYml0cztcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogbWluaXhfaW9tYXBfYmVnaW4gLSBtYXAgYSBmaWxlIHJhbmdlIHRvIGRpc2sgYmxvY2tzLiBJdCBhY3RzIGFzIGEgcmVwbGFjZW1lbnRcbiYjNDM7ICogZm9yIGdldF9ibG9jayBpbiBpdHJlZV9jb21tb24uYywgYXQgbGVhc3QgaW4gdGhlIGltcG9ydGFudCB3YXlzLCBhbmQgaXNcbiYjNDM7ICogYWRhcHRlZCBmcm9tIGl0LCBidXQgaXQgdXNlcyBpb21hcCBpbnN0ZWFkIG9mIGJ1ZmZlcl9oZWFkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBtaW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxuJiM0MztcdHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgYmxrYml0cyA9IHNiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHM7XG4mIzQzO1x0c2VjdG9yX3QgaWJsb2NrID0gb2Zmc2V0IFx1MDAzZVx1MDAzZSBibGtiaXRzO1xuJiM0MztcdGludCBjcmVhdGUgPSBmbGFncyBcdTAwMjYgSU9NQVBfV1JJVEU7XG4mIzQzO1xuJiM0MztcdGludCBvZmZzZXRzW0RFUFRIXTtcbiYjNDM7XHRJbmRpcmVjdCBjaGFpbltERVBUSF07XG4mIzQzO1x0SW5kaXJlY3QgKnBhcnRpYWw7XG4mIzQzO1x0aW50IGRlcHRoID0gYmxvY2tfdG9fcGF0aChpbm9kZSwgaWJsb2NrLCBvZmZzZXRzKTtcbiYjNDM7XHRpbnQgbGVmdDtcbiYjNDM7XHRpbnQgZXJyID0gLUVJTztcbiYjNDM7XG4mIzQzO1x0c2VjdG9yX3QgcGh5cztcbiYjNDM7XG4mIzQzO1x0LyogYmxvY2sgaXMgYmV5b25kIG1heCBmaWxlIHNpemUgKi9cbiYjNDM7XHRpZiAoZGVwdGggPT0gMClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpb21hcC1cdTAwM2ViZGV2ID0gaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2JkZXY7XG4mIzQzO1xuJiM0MztyZXJlYWQ6XG4mIzQzO1x0cGFydGlhbCA9IGdldF9icmFuY2goaW5vZGUsIGRlcHRoLCBvZmZzZXRzLCBjaGFpbiwgXHUwMDI2ZXJyKTtcbiYjNDM7XG4mIzQzO1x0LyogU2ltcGxlc3QgY2FzZSAtIGJsb2NrIGZvdW5kLCBubyBhbGxvY2F0aW9uIG5lZWRlZCAqL1xuJiM0MztcdGlmICghcGFydGlhbCkge1xuJiM0MztcdFx0aW9tYXAtXHUwMDNlZmxhZ3MgPSAwO1xuJiM0MztcdFx0cGh5cyA9IGJsb2NrX3RvX2NwdShjaGFpbltkZXB0aCAtIDFdLmtleSk7XG4mIzQzO1x0XHRwYXJ0aWFsID0gY2hhaW4mIzQzO2RlcHRoLTE7XG4mIzQzO1x0XHRtaW5peF9pb21hcF9zZXRfbWFwcGVkKGlvbWFwLCBwaHlzLCBibGtiaXRzLCBpYmxvY2spO1xuJiM0MztcdFx0bWluaXhfY2hhaW5fY2xlYW51cChjaGFpbiwgcGFydGlhbCk7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogTmV4dCBzaW1wbGUgY2FzZSAtIHBsYWluIGxvb2t1cCBvciBmYWlsZWQgcmVhZCBvZiBpbmRpcmVjdCBibG9jayAqL1xuJiM0MztcdGlmICghY3JlYXRlIHx8IGVyciA9PSAtRUlPKSB7XG4mIzQzO1x0XHRtaW5peF9pb21hcF9zZXRfaG9sZShpb21hcCwgYmxrYml0cywgaWJsb2NrKTtcbiYjNDM7XHRcdG1pbml4X2NoYWluX2NsZWFudXAoY2hhaW4sIHBhcnRpYWwpO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhpcyBpcyBoZWxkIG92ZXIgZnJvbSB0aGUgb3JpZ2luYWwgZ2V0X2Jsb2NrIGxvZ2ljLCB3aGVyZSBpdFxuJiM0MztcdCAqIGFjdGVkIGFzIGEgZ3VhcmQgaW4gY2FzZSB0cnVuY2F0ZSgpIGRlbGV0ZWQgYmxvY2tzIGZyb20gdW5kZXIgdGhhdFxuJiM0MztcdCAqIGZ1bmN0aW9uLiBUaGVyZSBzaG91bGQgbm90IGJlIGEgcmFjZSB3aXRoIGlvbWFwIG9wZXJhdGlvbnMsIGJ1dFxuJiM0MztcdCAqIHdlJiMzOTtyZSByZXRhaW5pbmcgdGhlIGRlZmVuc2l2ZSBjb2RpbmcgaGVyZSB0byBiZSBleHRyYSBzYWZlIGp1c3QgaW5cbiYjNDM7XHQgKiBjYXNlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChlcnIgPT0gLUVBR0FJTikge1xuJiM0MztcdFx0bWluaXhfY2hhaW5fY2xlYW51cChjaGFpbiwgcGFydGlhbCk7XG4mIzQzO1x0XHRnb3RvIHJlcmVhZDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGxlZnQgPSAoY2hhaW4gJiM0MzsgZGVwdGgpIC0gcGFydGlhbDtcbiYjNDM7XHRlcnIgPSBhbGxvY19icmFuY2goaW5vZGUsIGxlZnQsIG9mZnNldHMgJiM0MzsgKHBhcnRpYWwgLSBjaGFpbiksIHBhcnRpYWwpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdG1pbml4X2NoYWluX2NsZWFudXAoY2hhaW4sIHBhcnRpYWwpO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChzcGxpY2VfYnJhbmNoKGlub2RlLCBjaGFpbiwgcGFydGlhbCwgbGVmdCkgXHUwMDNjIDApIHtcbiYjNDM7XHRcdG1pbml4X2NoYWluX2NsZWFudXAoY2hhaW4sIHBhcnRpYWwpO1xuJiM0MztcdFx0Z290byByZXJlYWQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBTdWNjZXNzZnVsIGFsbG9jYXRpb24sIG1hcHBpbmcgaXQuICovXG4mIzQzO1x0aW9tYXAtXHUwMDNlZmxhZ3MgPSBJT01BUF9GX05FVztcbiYjNDM7XHRwaHlzID0gYmxvY2tfdG9fY3B1KGNoYWluW2RlcHRoIC0gMV0ua2V5KTtcbiYjNDM7XHRtaW5peF9pb21hcF9zZXRfbWFwcGVkKGlvbWFwLCBwaHlzLCBibGtiaXRzLCBpYmxvY2spO1xuJiM0MztcdG1pbml4X2NoYWluX2NsZWFudXAoY2hhaW4sIHBhcnRpYWwpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBtaW5peF9pb21hcF9lbmQgZW5kcyB1cCBiZWluZyBhIG5vcDsgc2luY2UgbWluaXggZG9lc24mIzM5O3QgaGF2ZSBhbnkgZXh0ZW50cyBvclxuJiM0MzsgKiB0cmFuc2FjdGlvbnMgdG8gd29ycnkgYWJvdXQsIHRoZXJlIGlzbiYjMzk7dCBhbnl0aGluZyB0byB1cGRhdGUgaGVyZS4gVGhlIG9uLWRpc2tcbiYjNDM7ICogaW5kaXJlY3QgYmxvY2tzIGdldCBkaXJ0aWVkIGluIG1pbml4X2lvbWFwX2JlZ2luLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBtaW5peF9pb21hcF9lbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCxcbiYjNDM7XHRzc2l6ZV90IHdyaXR0ZW4sIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvaXRyZWVfY29tbW9uLmMgYi9mcy9taW5peC9pdHJlZV9jb21tb24uY1xuaW5kZXggYzNjZDJjNzVhZjljZS4uZDczYWIxY2FhY2ZlYyAxMDA2NDRcbi0tLSBhL2ZzL21pbml4L2l0cmVlX2NvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9pdHJlZV9jb21tb24uY1xuQEAgLTMxMSw3ICYjNDM7MzExLDE1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0cnVuY2F0ZSAoc3RydWN0IGlub2RlICogaW5vZGUpXG4gXHRsb25nIGlibG9jaztcbiBcbiBcdGlibG9jayA9IChpbm9kZS1cdTAwM2VpX3NpemUgJiM0Mzsgc2ItXHUwMDNlc19ibG9ja3NpemUgLTEpIFx1MDAzZVx1MDAzZSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xuLVx0YmxvY2tfdHJ1bmNhdGVfcGFnZShpbm9kZS1cdTAwM2VpX21hcHBpbmcsIGlub2RlLVx1MDAzZWlfc2l6ZSwgZ2V0X2Jsb2NrKTtcbiYjNDM7XG4mIzQzO1x0LyogRGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGlub2RlIGJlaW5nIHRydW5jYXRlZCBpcyBhIGRpcmVjdG9yeSBvciBub3QsXG4mIzQzO1x0ICogd2UgbmVlZCB0byBlaXRoZXIgY2FsbCBpb21hcF90cnVuY2F0ZV9wYWdlIG9yIGJsb2NrX3RydW5jYXRlX3BhZ2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSlcbiYjNDM7XHRcdGJsb2NrX3RydW5jYXRlX3BhZ2UoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBpbm9kZS1cdTAwM2VpX3NpemUsIGdldF9ibG9jayk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0aW9tYXBfdHJ1bmNhdGVfcGFnZShpbm9kZSwgaW5vZGUtXHUwMDNlaV9zaXplLCBOVUxMLFxuJiM0MztcdFx0XHRtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKSwgTlVMTCwgTlVMTCk7XG4gXG4gXHRuID0gYmxvY2tfdG9fcGF0aChpbm9kZSwgaWJsb2NrLCBvZmZzZXRzKTtcbiBcdGlmICghbilcbmRpZmYgLS1naXQgYS9mcy9taW5peC9pdHJlZV92MS5jIGIvZnMvbWluaXgvaXRyZWVfdjEuY1xuaW5kZXggMWZlZDkwNjA0MmFhOC4uNThjMjlmNDQ0M2QzNyAxMDA2NDRcbi0tLSBhL2ZzL21pbml4L2l0cmVlX3YxLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L2l0cmVlX3YxLmNcbkBAIC00OSw2ICYjNDM7NDksMTggQEAgc3RhdGljIGludCBibG9ja190b19wYXRoKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBsb25nIGJsb2NrLCBpbnQgb2Zmc2V0c1tERVBUSF0pXG4gfVxuIFxuICNpbmNsdWRlIFwmIzM0O2l0cmVlX2NvbW1vbi5jXCYjMzQ7XG4mIzQzOy8qIE5PVEEgQkVORTpcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBpcyBpY2t5IHRvIG1lLCBidXQgYXQgdGhlIHNhbWUgdGltZSBoYXZpbmcgaXQgYmUgYSBzdGFuZGFsb25lIEMgZmlsZVxuJiM0MzsgKiB0aGF0JiMzOTtzIGNvbXBpbGVkIHRvIG9iamVjdCBmb3JtIGFuZCBsaW5rZWQgc2VwYXJhdGVseSBsaWtlIGl0IGlzIGluIHhpYWZzIGlzXG4mIzQzOyAqIG11Y2ggbmFzdGllciBpbiBtaW5peCBiZWNhdXNlIG9mIHRoZSBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIG1pbml4IGZzIHRoYXRcbiYjNDM7ICogaGF2ZSBzb21lIHZlcnksIHZlcnkgZGlmZmVyZW50IGFzcGVjdHMsIGxpa2UgdGhlIHNpemUgb2YgYmxvY2tfdC4gSSBkb24mIzM5O3RcbiYjNDM7ICogbGlrZSBpdCwgYnV0IHNpbmNlIG1pbml4IGFscmVhZHkgaGFzIHRoaXMgcGF0dGVybiB3aGVyZSBhIGNvbW1vbiBpdHJlZSBmaWxlXG4mIzQzOyAqIGlzIGluY2x1ZGVkIGluIHRoZSBpdHJlZV92MSBhbmQgaXRyZWVfdjIoYW5kIHYzKSBmaWxlcywgSSYjMzk7bSBpbmNsdWRpbmcgaW9tYXAuY1xuJiM0MzsgKiBpbiB0aGVzZSBmaWxlcyBhcyB3ZWxsLiBJdCBkb2VzIGF0IGxlYXN0IGF2b2lkIGV4cG9ydGluZyBzb21lIGN1cnJlbnRseVxuJiM0MzsgKiBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlbiYjMzk7dCBuZWVkZWQgYW55d2hlcmUgYnV0IGl0cmVlX2NvbW1vbi5jIGFuZCBpb21hcC5jLlxuJiM0MzsgKi9cbiYjNDM7I2luY2x1ZGUgXCYjMzQ7aW9tYXAuY1wmIzM0O1xuIFxuIGludCBWMV9taW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssXG4gXHRcdFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpXG5AQCAtNjEsNyAmIzQzOzczLDE4IEBAIHZvaWQgVjFfbWluaXhfdHJ1bmNhdGUoc3RydWN0IGlub2RlICogaW5vZGUpXG4gXHR0cnVuY2F0ZShpbm9kZSk7XG4gfVxuIFxuLXVuc2lnbmVkIFYxX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiYjNDM7dW5zaWduZWQgaW50IFYxX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiB7XG4gXHRyZXR1cm4gbmJsb2NrcyhzaXplLCBzYik7XG4gfVxuJiM0MztcbiYjNDM7aW50IFYxX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXG4mIzQzO1x0dW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBzdHJ1Y3QgaW9tYXAgKnNyY21hcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBtaW5peF9pb21hcF9iZWdpbihpbm9kZSwgb2Zmc2V0LCBsZW5ndGgsIGZsYWdzLCBpb21hcCwgc3JjbWFwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMV9taW5peF9pb21hcF9vcHMgPSB7XG4mIzQzO1x0LmlvbWFwX2JlZ2luID0gVjFfbWluaXhfaW9tYXBfYmVnaW4sXG4mIzQzO1x0LmlvbWFwX2VuZCAgID0gbWluaXhfaW9tYXBfZW5kLFxuJiM0Mzt9O1xuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2l0cmVlX3YyLmMgYi9mcy9taW5peC9pdHJlZV92Mi5jXG5pbmRleCA5ZDAwZjMxYTJkOWQxLi5mYzdhNWFlOGZhMWNhIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvaXRyZWVfdjIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbWluaXgvaXRyZWVfdjIuY1xuQEAgLTU3LDYgJiM0Mzs1NywxMCBAQCBzdGF0aWMgaW50IGJsb2NrX3RvX3BhdGgoc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssIGludCBvZmZzZXRzW0RFUFRIXSlcbiB9XG4gXG4gI2luY2x1ZGUgXCYjMzQ7aXRyZWVfY29tbW9uLmNcJiMzNDtcbiYjNDM7LyogU2VlIHRoZSBub3RlIGluIGl0cmVlX3YxIGluIGEgY29tbWVudCB0aGF0IHN0YXJ0cyBcJiMzNDtOT1RBIEJFTkVcJiMzNDsgZm9yIGFuXG4mIzQzOyAqIGV4cGxhbmF0aW9uIGZvciB3aHkgaW9tYXAuYyBpcyBpbmNsdWRlZCBoZXJlLlxuJiM0MzsgKi9cbiYjNDM7I2luY2x1ZGUgXCYjMzQ7aW9tYXAuY1wmIzM0O1xuIFxuIGludCBWMl9taW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssXG4gXHRcdFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpXG5AQCAtNjksNyAmIzQzOzczLDE4IEBAIHZvaWQgVjJfbWluaXhfdHJ1bmNhdGUoc3RydWN0IGlub2RlICogaW5vZGUpXG4gXHR0cnVuY2F0ZShpbm9kZSk7XG4gfVxuIFxuLXVuc2lnbmVkIFYyX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiYjNDM7dW5zaWduZWQgaW50IFYyX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiB7XG4gXHRyZXR1cm4gbmJsb2NrcyhzaXplLCBzYik7XG4gfVxuJiM0MztcbiYjNDM7aW50IFYyX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXG4mIzQzO1x0dW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBzdHJ1Y3QgaW9tYXAgKnNyY21hcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBtaW5peF9pb21hcF9iZWdpbihpbm9kZSwgb2Zmc2V0LCBsZW5ndGgsIGZsYWdzLCBpb21hcCwgc3JjbWFwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMl9taW5peF9pb21hcF9vcHMgPSB7XG4mIzQzO1x0LmlvbWFwX2JlZ2luID0gVjJfbWluaXhfaW9tYXBfYmVnaW4sXG4mIzQzO1x0LmlvbWFwX2VuZCAgID0gbWluaXhfaW9tYXBfZW5kLFxuJiM0Mzt9O1xuZGlmZiAtLWdpdCBhL2ZzL21pbml4L21pbml4LmggYi9mcy9taW5peC9taW5peC5oXG5pbmRleCA3ODcyMmNlMjJlMWUxLi45MDM1NjA0YzY4Y2ExIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvbWluaXguaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbWluaXgvbWluaXguaFxuQEAgLTUsNiAmIzQzOzUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlbWFwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9taW5peF9mcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbWFwLmhcdTAwM2VcbiBcbiAjZGVmaW5lIElOT0RFX1ZFUlNJT04oaW5vZGUpXHRtaW5peF9zYihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX3ZlcnNpb25cbiAjZGVmaW5lIE1JTklYX1YxXHRcdDB4MDAwMVx0XHQvKiBvcmlnaW5hbCBtaW5peCBmcyAqL1xuQEAgLTU3LDYgJiM0Mzs1OCw4IEBAIHZvaWQgbWluaXhfZnJlZV9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsb25nIGJsb2NrKTtcbiB1bnNpZ25lZCBsb25nIG1pbml4X2NvdW50X2ZyZWVfYmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuIGludCBtaW5peF9nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKiwgY29uc3Qgc3RydWN0IHBhdGggKixcbiBcdFx0c3RydWN0IGtzdGF0ICosIHUzMiwgdW5zaWduZWQgaW50KTtcbiYjNDM7aW50IG1pbml4X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiYjNDM7XHRzdHJ1Y3QgaWF0dHIgKmF0dHIpO1xuIGludCBtaW5peF9wcmVwYXJlX2NodW5rKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbik7XG4gc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptaW5peF9nZXRfbWV0YWRhdGFfYmhzKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIFxuQEAgLTc2LDEzICYjNDM7NzksMjMgQEAgaW50IG1pbml4X21ha2VfZW1wdHkoc3RydWN0IGlub2RlKiwgc3RydWN0IGlub2RlKik7XG4gaW50IG1pbml4X2VtcHR5X2RpcihzdHJ1Y3QgaW5vZGUqKTtcbiBpbnQgbWluaXhfc2V0X2xpbmsoc3RydWN0IG1pbml4X2Rpcl9lbnRyeSAqZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuJiM0MztcbiBzdHJ1Y3QgbWluaXhfZGlyX2VudHJ5ICptaW5peF9kb3Rkb3Qoc3RydWN0IGlub2RlKiwgc3RydWN0IGZvbGlvICoqKTtcbiBpbm9fdCBtaW5peF9pbm9kZV9ieV9uYW1lKHN0cnVjdCBkZW50cnkqKTtcbiBcbiYjNDM7aW50IFYxX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4mIzQzO1x0bG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLFxuJiM0MztcdHN0cnVjdCBpb21hcCAqc3JjbWFwKTtcbiYjNDM7aW50IFYyX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4mIzQzO1x0bG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLFxuJiM0MztcdHN0cnVjdCBpb21hcCAqc3JjbWFwKTtcbiYjNDM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfaW5vZGVfb3BlcmF0aW9ucztcbiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWluaXhfZGlyX2lub2RlX29wZXJhdGlvbnM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWluaXhfZmlsZV9vcGVyYXRpb25zO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2Rpcl9vcGVyYXRpb25zO1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMV9taW5peF9pb21hcF9vcHM7XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYyX21pbml4X2lvbWFwX29wcztcbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBtaW5peF9zYl9pbmZvICptaW5peF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIHtcbkBAIC05NCwxMSAmIzQzOzEwNywxNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtaW5peF9pbm9kZV9pbmZvICptaW5peF9pKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRyZXR1cm4gY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgbWluaXhfaW5vZGVfaW5mbywgdmZzX2lub2RlKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBtaW5peF9ibG9ja3NfbmVlZGVkKHVuc2lnbmVkIGJpdHMsIHVuc2lnbmVkIGJsb2Nrc2l6ZSlcbiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWluaXhfYmxvY2tzX25lZWRlZCh1bnNpZ25lZCBpbnQgYml0cywgdW5zaWduZWQgaW50IGJsb2Nrc2l6ZSlcbiB7XG4gXHRyZXR1cm4gRElWX1JPVU5EX1VQX1BPVzIoYml0cywgYmxvY2tzaXplICogOCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm1pbml4X2lvbWFwX29wc192ZXIoc3RydWN0IGlub2RlICppbm9kZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiAoSU5PREVfVkVSU0lPTihpbm9kZSkgPT0gTUlOSVhfVjEpID9cbiYjNDM7XHRcdFx1MDAyNlYxX21pbml4X2lvbWFwX29wcyA6IFx1MDAyNlYyX21pbml4X2lvbWFwX29wcztcbiYjNDM7fVxuJiM0MztcbiAjaWYgZGVmaW5lZChDT05GSUdfTUlOSVhfRlNfTkFUSVZFX0VORElBTikgXHUwMDI2XHUwMDI2IFxcXG4gXHRkZWZpbmVkKENPTkZJR19NSU5JWF9GU19CSUdfRU5ESUFOXzE2QklUX0lOREVYRUQpXG4gXG5AQCAtMTI4LDcgJiM0MzsxNDcsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIG1pbml4X2Jsb2Nrc19uZWVkZWQodW5zaWduZWQgYml0cywgdW5zaWduZWQgYmxvY2tzaXplKVxuICAqIGJpZy1lbmRpYW4gMTZiaXQgaW5kZXhlZCBiaXRtYXBzXG4gICovXG4gXG4tc3RhdGljIGlubGluZSBpbnQgbWluaXhfZmluZF9maXJzdF96ZXJvX2JpdChjb25zdCB2b2lkICp2YWRkciwgdW5zaWduZWQgc2l6ZSlcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWluaXhfZmluZF9maXJzdF96ZXJvX2JpdChjb25zdCB2b2lkICp2YWRkciwgdW5zaWduZWQgaW50IHNpemUpXG4ge1xuIFx0Y29uc3QgdW5zaWduZWQgc2hvcnQgKnAgPSB2YWRkciwgKmFkZHIgPSB2YWRkcjtcbiBcdHVuc2lnbmVkIHNob3J0IG51bTtcbmRpZmYgLS1naXQgYS9mcy9taW5peC9uYW1laS5jIGIvZnMvbWluaXgvbmFtZWkuY1xuaW5kZXggNTUyNWJhMzY3ZWQ3NC4uNTJlMTE1MDEzYWJmOCAxMDA2NDRcbi0tLSBhL2ZzL21pbml4L25hbWVpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L25hbWVpLmNcbkBAIC02LDYgJiM0Mzs2LDcgQEBcbiAgKi9cbiBcbiAjaW5jbHVkZSBcJiMzNDttaW5peC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbWFwLmhcdTAwM2VcbiBcbiBzdGF0aWMgaW50IGFkZF9ub25kaXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbkBAIC04NCwxMiAmIzQzOzg1LDE2IEBAIHN0YXRpYyBpbnQgbWluaXhfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdHJldHVybiBQVFJfRVJSKGlub2RlKTtcbiBcbiBcdG1pbml4X3NldF9pbm9kZShpbm9kZSwgMCk7XG4tXHRlcnIgPSBwYWdlX3N5bWxpbmsoaW5vZGUsIHN5bW5hbWUsIGkpO1xuJiM0MztcdGVyciA9IGlvbWFwX3N5bWxpbmtfd3JpdGUoaW5vZGUsIHN5bW5hbWUsIGksIG1pbml4X2lvbWFwX29wc192ZXIoaW5vZGUpLCBOVUxMLCBOVUxMKTtcbiYjNDM7XG4gXHRpZiAodW5saWtlbHkoZXJyKSkge1xuIFx0XHRpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7XG4gXHRcdGlwdXQoaW5vZGUpO1xuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuJiM0MztcbiYjNDM7XHRpX3NpemVfd3JpdGUoaW5vZGUsIGkgLSAxKTtcbiYjNDM7XG4gXHRyZXR1cm4gYWRkX25vbmRpcihkZW50cnksIGlub2RlKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb21hcC5oIGIvaW5jbHVkZS9saW51eC9pb21hcC5oXG5pbmRleCA4Yzc1NGViOTc0ZmJmLi5hYjI3YTNhNWI4ZDJjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9pb21hcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcbkBAIC00NzEsNiAmIzQzOzQ3MSw5IEBAIGxvZmZfdCBpb21hcF9zZWVrX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCxcbiBcdFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzKTtcbiBzZWN0b3JfdCBpb21hcF9ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibm8sXG4gXHRcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyk7XG4mIzQzO2ludCBpb21hcF9zeW1saW5rX3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKnRhcmdldCwgaW50IGxlbixcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyxcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZV9vcHMgKndyaXRlX29wcywgdm9pZCAqcHJpdmF0ZSk7XG4gXG4gLypcbiAgKiBGbGFncyBmb3IgaW9tYXBfaW9lbmQtXHUwMDNlaW9fZmxhZ3MuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01JTklYX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9tYXBfc3ltbGlua193cml0ZSYjMzQ7LAogICAgJiMzNDtWMV9taW5peF9pb21hcF9iZWdpbiYjMzQ7LAogICAgJiMzNDtWMl9taW5peF9pb21hcF9iZWdpbiYjMzQ7LAogICAgJiMzNDttaW5peF9maWxlX3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7bWluaXhfd3JpdGVwYWdlcyYjMzQ7LAogICAgJiMzNDttaW5peF9yZWFkX2ZvbGlvJiMzNDssCiAgICAmIzM0O21pbml4X3JlYWRhaGVhZCYjMzQ7LAogICAgJiMzNDttaW5peF93cml0ZWJhY2tfcmFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWlncmF0ZXMgdGhlIG1pbml4IGZpbGVzeXN0ZW0gdG8gdXNlIGlvbWFwIGZvciBidWZmZXJlZCBJL08gYW5kIHN5bWxpbmtzLiBUaGlzIGludm9sdmVzIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIG1pbml4IGZpbGUgb3BlcmF0aW9ucywgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zLCBhbmQgYmxvY2sgbWFwcGluZyBsb2dpYy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBtb3VudGluZyBhIG1pbml4IGZpbGVzeXN0ZW0gaW1hZ2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmOTRjNWEzZmZjZWQ3MzVmNTg0MmY2NzQ2M2RiYWYxMjUxOTE1ZmVhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMjYgMjI6MTA6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9pb21hcC9idWZmZXJlZC1pby5jIGIvZnMvaW9tYXAvYnVmZmVyZWQtaW8uYwppbmRleCAwYTVlYmZkYTkwZjEyLi41ZThhYzNmYWQ2NzE0IDEwMDY0NAotLS0gYS9mcy9pb21hcC9idWZmZXJlZC1pby5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMKQEAgLTIxMDAsMyAmIzQzOzIxMDAsMzcgQEAgaW9tYXBfd3JpdGVwYWdlcyhzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjKQogCXJldHVybiBlcnJvcjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX3dyaXRlcGFnZXMpOwomIzQzOwomIzQzO2ludCBpb21hcF9zeW1saW5rX3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKnRhcmdldCwgaW50IGxlbiwKJiM0MzsJCWNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcywKJiM0MzsJCWNvbnN0IHN0cnVjdCBpb21hcF93cml0ZV9vcHMgKndyaXRlX29wcywgdm9pZCAqcHJpdmF0ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdmVjIHZlYyA9IHsKJiM0MzsJCS5pb3ZfYmFzZQk9ICh2b2lkICopdGFyZ2V0LAomIzQzOwkJLmlvdl9sZW4JPSBsZW4gLSAxLAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgaW9tYXBfaXRlciBpdGVyID0gewomIzQzOwkJLmlub2RlCQk9IGlub2RlLAomIzQzOwkJLnBvcwkJPSAwLAomIzQzOwkJLmxlbgkJPSBsZW4gLSAxLAomIzQzOwkJLmZsYWdzCQk9IElPTUFQX1dSSVRFLAomIzQzOwkJLnByaXZhdGUJPSBwcml2YXRlLAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgaW92X2l0ZXIgaW92OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpb3ZfaXRlcl9rdmVjKCZhbXA7aW92LCBJVEVSX1NPVVJDRSwgJmFtcDt2ZWMsIDEsIGxlbiAtIDEpOwomIzQzOwomIzQzOwl3aGlsZSAoKHJldCA9IGlvbWFwX2l0ZXIoJmFtcDtpdGVyLCBvcHMpKSAmZ3Q7IDApCiYjNDM7CQlpdGVyLnN0YXR1cyA9IGlvbWFwX3dyaXRlX2l0ZXIoJmFtcDtpdGVyLCAmYW1wO2lvdiwgd3JpdGVfb3BzKTsKJiM0MzsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoaXRlci5wb3MgPT0gMCkpCiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsKJiM0MzsJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9zeW1saW5rX3dyaXRlKTsKZGlmZiAtLWdpdCBhL2ZzL21pbml4L2ZpbGUuYyBiL2ZzL21pbml4L2ZpbGUuYwppbmRleCAwMmFhYmJkYjVkZWFhLi42NzY1ZjU3MWJkM2ZjIDEwMDY0NAotLS0gYS9mcy9taW5peC9maWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbWluaXgvZmlsZS5jCkBAIC0xMCw2ICYjNDM7MTAsMzIgQEAKICNpbmNsdWRlICZsdDtsaW51eC9idWZmZXJfaGVhZC5oJmd0OwogI2luY2x1ZGUgJiMzNDttaW5peC5oJiMzNDsKIAomIzQzO3N0YXRpYyBzc2l6ZV90IG1pbml4X2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBpb2NiLSZndDtraV9maWxwLSZndDtmX21hcHBpbmctJmd0O2hvc3Q7CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwljb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKTsKJiM0MzsKJiM0MzsJaW5vZGVfbG9jayhpbm9kZSk7CiYjNDM7CXJldCA9IGdlbmVyaWNfd3JpdGVfY2hlY2tzKGlvY2IsIGZyb20pOwomIzQzOwlpZiAocmV0ICZsdDs9IDApCiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsKJiM0MzsJcmV0ID0gZmlsZV9tb2RpZmllZChpb2NiLSZndDtraV9maWxwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwomIzQzOwlyZXQgPSBpb21hcF9maWxlX2J1ZmZlcmVkX3dyaXRlKGlvY2IsIGZyb20sIG9wcywKJiM0MzsJCQlOVUxMLCBOVUxMKTsKJiM0MzsKJiM0MzsJaWYgKHJldCAmZ3Q7IDApCiYjNDM7CQlyZXQgPSBnZW5lcmljX3dyaXRlX3N5bmMoaW9jYiwgcmV0KTsKJiM0MzsKJiM0Mzt1bmxvY2s6CiYjNDM7CWlub2RlX3VubG9jayhpbm9kZSk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogLyoKICAqIFdlIGhhdmUgbW9zdGx5IE5VTExzIGhlcmU6IHRoZSBjdXJyZW50IGRlZmF1bHRzIGFyZSBPSyBmb3IKICAqIHRoZSBtaW5peCBmaWxlc3lzdGVtLgpAQCAtMTcsMTMgJiM0Mzs0MywxMyBAQAogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9maWxlX29wZXJhdGlvbnMgPSB7CiAJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogCS5yZWFkX2l0ZXIJPSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyLAotCS53cml0ZV9pdGVyCT0gZ2VuZXJpY19maWxlX3dyaXRlX2l0ZXIsCiYjNDM7CS53cml0ZV9pdGVyCT0gbWluaXhfZmlsZV93cml0ZV9pdGVyLAogCS5tbWFwX3ByZXBhcmUJPSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLAogCS5mc3luYwkJPSBzaW1wbGVfZnN5bmMsCiAJLnNwbGljZV9yZWFkCT0gZmlsZW1hcF9zcGxpY2VfcmVhZCwKIH07CiAKLXN0YXRpYyBpbnQgbWluaXhfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MztpbnQgbWluaXhfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cikKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShkZW50cnkpOwpkaWZmIC0tZ2l0IGEvZnMvbWluaXgvaW5vZGUuYyBiL2ZzL21pbml4L2lub2RlLmMKaW5kZXggZGFmODNlNGZmMjVjOC4uMmJmNWVhOTIzNjBhMiAxMDA2NDQKLS0tIGEvZnMvbWluaXgvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9pbm9kZS5jCkBAIC00MzksNiAmIzQzOzQzOSwzMSBAQCBzdGF0aWMgaW50IG1pbml4X3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgc3NpemVfdCBtaW5peF93cml0ZWJhY2tfcmFuZ2Uoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYywKJiM0MzsJc3RydWN0IGZvbGlvICpmb2xpbywgdTY0IHBvcywgdW5zaWduZWQgaW50IGxlbiwgdTY0IGVuZF9wb3MpCiYjNDM7ewomIzQzOwlpbnQgZXJyb3I7CiYjNDM7CiYjNDM7CWlmIChwb3MgJmx0OyB3cGMtJmd0O2lvbWFwLm9mZnNldCB8fAomIzQzOwkJCXBvcyAmZ3Q7PSB3cGMtJmd0O2lvbWFwLm9mZnNldCAmIzQzOyB3cGMtJmd0O2lvbWFwLmxlbmd0aCkgewomIzQzOwkJaWYgKElOT0RFX1ZFUlNJT04od3BjLSZndDtpbm9kZSkgPT0gTUlOSVhfVjEpCiYjNDM7CQkJZXJyb3IgPSBWMV9taW5peF9pb21hcF9iZWdpbih3cGMtJmd0O2lub2RlLCBwb3MsIGxlbiwgSU9NQVBfV1JJVEUsCiYjNDM7CQkJCSZhbXA7d3BjLSZndDtpb21hcCwgTlVMTCk7CiYjNDM7CQllbHNlCiYjNDM7CQkJZXJyb3IgPSBWMl9taW5peF9pb21hcF9iZWdpbih3cGMtJmd0O2lub2RlLCBwb3MsIGxlbiwgSU9NQVBfV1JJVEUsCiYjNDM7CQkJCSZhbXA7d3BjLSZndDtpb21hcCwgTlVMTCk7CiYjNDM7CQlpZiAoZXJyb3IpCiYjNDM7CQkJcmV0dXJuIGVycm9yOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBpb21hcF9hZGRfdG9faW9lbmQod3BjLCBmb2xpbywgcG9zLCBlbmRfcG9zLCBsZW4pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX3dyaXRlYmFja19vcHMgbWluaXhfd3JpdGViYWNrX29wcyA9IHsKJiM0MzsJLndyaXRlYmFja19yYW5nZSA9IG1pbml4X3dyaXRlYmFja19yYW5nZSwKJiM0MzsJLndyaXRlYmFja19zdWJtaXQgPSBpb21hcF9pb2VuZF93cml0ZWJhY2tfc3VibWl0LAomIzQzO307CiYjNDM7CiBzdGF0aWMgaW50IG1pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jaywKIAkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKQogewpAQCAtNDQ4LDE3ICYjNDM7NDczLDQ1IEBAIHN0YXRpYyBpbnQgbWluaXhfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsb2NrLAogCQlyZXR1cm4gVjJfbWluaXhfZ2V0X2Jsb2NrKGlub2RlLCBibG9jaywgYmhfcmVzdWx0LCBjcmVhdGUpOwogfQogCi1zdGF0aWMgaW50IG1pbml4X3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiYjNDM7LyogVGhlIG9sZCBtaW5peF93cml0ZXBhZ2VzLCBwcmVzZXJ2ZWQgZm9yIGRpcmVjdG9yeSBvcGVyYXRpb25zLiAqLwomIzQzO3N0YXRpYyBpbnQgbWluaXhfYmxvY2tfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiB7CiAJcmV0dXJuIG1wYWdlX3dyaXRlcGFnZXMobWFwcGluZywgd2JjLCBtaW5peF9nZXRfYmxvY2spOwogfQogCiYjNDM7c3RhdGljIGludCBtaW5peF93cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAomIzQzOwkJc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCB3cGMgPSB7CiYjNDM7CQkuaW5vZGUgPSBtYXBwaW5nLSZndDtob3N0LAomIzQzOwkJLndiYyA9IHdiYywKJiM0MzsJCS5vcHMgPSAmYW1wO21pbml4X3dyaXRlYmFja19vcHMsCiYjNDM7CX07CiYjNDM7CXJldHVybiBpb21hcF93cml0ZXBhZ2VzKCZhbXA7d3BjKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG1pbml4X3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGZvbGlvLSZndDttYXBwaW5nLSZndDtob3N0KTsKJiM0MzsKJiM0MzsJaW9tYXBfYmlvX3JlYWRfZm9saW8oZm9saW8sIG9wcyk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBUaGUgb2xkIG1pbml4X3JlYWRfZm9saW8sIHByZXNlcnZlZCBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMuICovCiYjNDM7c3RhdGljIGludCBtaW5peF9ibG9ja19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCXJldHVybiBibG9ja19yZWFkX2Z1bGxfZm9saW8oZm9saW8sIG1pbml4X2dldF9ibG9jayk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBtaW5peF9yZWFkYWhlYWQoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWMpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKHJhYy0mZ3Q7bWFwcGluZy0mZ3Q7aG9zdCk7CiYjNDM7CiYjNDM7CWlvbWFwX2Jpb19yZWFkYWhlYWQocmFjLCBvcHMpOwomIzQzO30KJiM0MzsKIGludCBtaW5peF9wcmVwYXJlX2NodW5rKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbikKIHsKIAlyZXR1cm4gX19ibG9ja193cml0ZV9iZWdpbihmb2xpbywgcG9zLCBsZW4sIG1pbml4X2dldF9ibG9jayk7CkBAIC00ODgsMjYgJiM0Mzs1NDEsMzUgQEAgc3RhdGljIGludCBtaW5peF93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHNlY3Rvcl90IG1pbml4X2JtYXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHNlY3Rvcl90IGJsb2NrKQotewotCXJldHVybiBnZW5lcmljX2Jsb2NrX2JtYXAobWFwcGluZyxibG9jayxtaW5peF9nZXRfYmxvY2spOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBtaW5peF9hb3BzID0gewotCS5kaXJ0eV9mb2xpbwk9IGJsb2NrX2RpcnR5X2ZvbGlvLAotCS5pbnZhbGlkYXRlX2ZvbGlvID0gYmxvY2tfaW52YWxpZGF0ZV9mb2xpbywKJiM0MzsJLmRpcnR5X2ZvbGlvCT0gaW9tYXBfZGlydHlfZm9saW8sCiYjNDM7CS5pbnZhbGlkYXRlX2ZvbGlvID0gaW9tYXBfaW52YWxpZGF0ZV9mb2xpbywKIAkucmVhZF9mb2xpbyA9IG1pbml4X3JlYWRfZm9saW8sCiYjNDM7CS5yZWFkYWhlYWQgPSBtaW5peF9yZWFkYWhlYWQsCiAJLndyaXRlcGFnZXMgPSBtaW5peF93cml0ZXBhZ2VzLAomIzQzOwkubWlncmF0ZV9mb2xpbyA9IGZpbGVtYXBfbWlncmF0ZV9mb2xpbywKJiM0MzsJLmlzX3BhcnRpYWxseV91cHRvZGF0ZSA9IGlvbWFwX2lzX3BhcnRpYWxseV91cHRvZGF0ZSwKJiM0MzsJLnJlbGVhc2VfZm9saW8gPSBpb21hcF9yZWxlYXNlX2ZvbGlvLAomIzQzOwkuZXJyb3JfcmVtb3ZlX2ZvbGlvID0gZ2VuZXJpY19lcnJvcl9yZW1vdmVfZm9saW8sCiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBBIHNwZWNpYWwgYW9wcyBmb3IgZGlyZWN0b3JpZXMgdGhhdCBrZWVwcyB1c2luZyB0aGUgYnVmZmVyIGhlYWQgY2h1bmtzLCBhdAomIzQzOyAqIGxlYXN0IGZvciB0aGUgdGltZSBiZWluZy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBtaW5peF9kaXJfYW9wcyA9IHsKJiM0MzsJLmRpcnR5X2ZvbGlvID0gYmxvY2tfZGlydHlfZm9saW8sCiYjNDM7CS5pbnZhbGlkYXRlX2ZvbGlvID0gYmxvY2tfaW52YWxpZGF0ZV9mb2xpbywKJiM0MzsJLnJlYWRfZm9saW8gPSBtaW5peF9ibG9ja19yZWFkX2ZvbGlvLAogCS53cml0ZV9iZWdpbiA9IG1pbml4X3dyaXRlX2JlZ2luLAogCS53cml0ZV9lbmQgPSBnZW5lcmljX3dyaXRlX2VuZCwKIAkubWlncmF0ZV9mb2xpbyA9IGJ1ZmZlcl9taWdyYXRlX2ZvbGlvLAotCS5ibWFwID0gbWluaXhfYm1hcCwKLQkuZGlyZWN0X0lPID0gbm9vcF9kaXJlY3RfSU8KJiM0MzsJLndyaXRlcGFnZXMgPSBtaW5peF9ibG9ja193cml0ZXBhZ2VzLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHsKIAkuZ2V0X2xpbmsJPSBwYWdlX2dldF9saW5rLAogCS5nZXRhdHRyCT0gbWluaXhfZ2V0YXR0ciwKJiM0MzsJLnNldGF0dHIJPSBtaW5peF9zZXRhdHRyLAogfTsKIAogdm9pZCBtaW5peF9zZXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgZGV2X3QgcmRldikKQEAgLTUxOSw3ICYjNDM7NTgxLDcgQEAgdm9pZCBtaW5peF9zZXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgZGV2X3QgcmRldikKIAl9IGVsc2UgaWYgKFNfSVNESVIoaW5vZGUtJmd0O2lfbW9kZSkpIHsKIAkJaW5vZGUtJmd0O2lfb3AgPSAmYW1wO21pbml4X2Rpcl9pbm9kZV9vcGVyYXRpb25zOwogCQlpbm9kZS0mZ3Q7aV9mb3AgPSAmYW1wO21pbml4X2Rpcl9vcGVyYXRpb25zOwotCQlpbm9kZS0mZ3Q7aV9tYXBwaW5nLSZndDthX29wcyA9ICZhbXA7bWluaXhfYW9wczsKJiM0MzsJCWlub2RlLSZndDtpX21hcHBpbmctJmd0O2Ffb3BzID0gJmFtcDttaW5peF9kaXJfYW9wczsKIAl9IGVsc2UgaWYgKFNfSVNMTksoaW5vZGUtJmd0O2lfbW9kZSkpIHsKIAkJaW5vZGUtJmd0O2lfb3AgPSAmYW1wO21pbml4X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKIAkJaW5vZGVfbm9oaWdobWVtKGlub2RlKTsKQEAgLTc4Niw0ICYjNDM7ODQ4LDMgQEAgbW9kdWxlX2luaXQoaW5pdF9taW5peF9mcykKIG1vZHVsZV9leGl0KGV4aXRfbWluaXhfZnMpCiBNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtNaW5peCBmaWxlIHN5c3RlbSYjMzQ7KTsKIE1PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwotCmRpZmYgLS1naXQgYS9mcy9taW5peC9pb21hcC5jIGIvZnMvbWluaXgvaW9tYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi45MGUwMTZhYWEwMWVhCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbWluaXgvaW9tYXAuYwpAQCAtMCwwICYjNDM7MSwxMjIgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7LyoKJiM0MzsgKiBpb21hcCBmdW5jdGlvbnMgZm9yIG1pbml4LgomIzQzOyAqLwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtaW5peF9jaGFpbl9jbGVhbnVwKEluZGlyZWN0ICpjaGFpbiwgSW5kaXJlY3QgKnBhcnRpYWwpCiYjNDM7ewomIzQzOwl3aGlsZSAocGFydGlhbCAmZ3Q7IGNoYWluKSB7CiYjNDM7CQlicmVsc2UocGFydGlhbC0mZ3Q7YmgpOwomIzQzOwkJcGFydGlhbC0tOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtaW5peF9pb21hcF9zZXRfbWFwcGVkKHN0cnVjdCBpb21hcCAqaW9tYXAsIHNlY3Rvcl90IHBoeXMsCiYjNDM7CQl1bnNpZ25lZCBpbnQgYmxrYml0cywgc2VjdG9yX3QgaWJsb2NrKQomIzQzO3sKJiM0MzsJaW9tYXAtJmd0O3R5cGUgPSBJT01BUF9NQVBQRUQ7CiYjNDM7CWlvbWFwLSZndDthZGRyID0gKHU2NClwaHlzICZsdDsmbHQ7IGJsa2JpdHM7CiYjNDM7CWlvbWFwLSZndDtsZW5ndGggPSAxICZsdDsmbHQ7IGJsa2JpdHM7CiYjNDM7CWlvbWFwLSZndDtvZmZzZXQgPSAodTY0KWlibG9jayAmbHQ7Jmx0OyBibGtiaXRzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbWluaXhfaW9tYXBfc2V0X2hvbGUoc3RydWN0IGlvbWFwICppb21hcCwKJiM0MzsJCXVuc2lnbmVkIGludCBibGtiaXRzLCBzZWN0b3JfdCBpYmxvY2spCiYjNDM7ewomIzQzOwlpb21hcC0mZ3Q7dHlwZSA9IElPTUFQX0hPTEU7CiYjNDM7CWlvbWFwLSZndDthZGRyID0gSU9NQVBfTlVMTF9BRERSOwomIzQzOwlpb21hcC0mZ3Q7bGVuZ3RoID0gMSAmbHQ7Jmx0OyBibGtiaXRzOwomIzQzOwlpb21hcC0mZ3Q7b2Zmc2V0ID0gKHU2NClpYmxvY2sgJmx0OyZsdDsgYmxrYml0czsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBtaW5peF9pb21hcF9iZWdpbiAtIG1hcCBhIGZpbGUgcmFuZ2UgdG8gZGlzayBibG9ja3MuIEl0IGFjdHMgYXMgYSByZXBsYWNlbWVudAomIzQzOyAqIGZvciBnZXRfYmxvY2sgaW4gaXRyZWVfY29tbW9uLmMsIGF0IGxlYXN0IGluIHRoZSBpbXBvcnRhbnQgd2F5cywgYW5kIGlzCiYjNDM7ICogYWRhcHRlZCBmcm9tIGl0LCBidXQgaXQgdXNlcyBpb21hcCBpbnN0ZWFkIG9mIGJ1ZmZlcl9oZWFkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgbWluaXhfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCwKJiM0MzsJdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBzdHJ1Y3QgaW9tYXAgKnNyY21hcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0mZ3Q7aV9zYjsKJiM0MzsJdW5zaWduZWQgaW50IGJsa2JpdHMgPSBzYi0mZ3Q7c19ibG9ja3NpemVfYml0czsKJiM0MzsJc2VjdG9yX3QgaWJsb2NrID0gb2Zmc2V0ICZndDsmZ3Q7IGJsa2JpdHM7CiYjNDM7CWludCBjcmVhdGUgPSBmbGFncyAmYW1wOyBJT01BUF9XUklURTsKJiM0MzsKJiM0MzsJaW50IG9mZnNldHNbREVQVEhdOwomIzQzOwlJbmRpcmVjdCBjaGFpbltERVBUSF07CiYjNDM7CUluZGlyZWN0ICpwYXJ0aWFsOwomIzQzOwlpbnQgZGVwdGggPSBibG9ja190b19wYXRoKGlub2RlLCBpYmxvY2ssIG9mZnNldHMpOwomIzQzOwlpbnQgbGVmdDsKJiM0MzsJaW50IGVyciA9IC1FSU87CiYjNDM7CiYjNDM7CXNlY3Rvcl90IHBoeXM7CiYjNDM7CiYjNDM7CS8qIGJsb2NrIGlzIGJleW9uZCBtYXggZmlsZSBzaXplICovCiYjNDM7CWlmIChkZXB0aCA9PSAwKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlvbWFwLSZndDtiZGV2ID0gaW5vZGUtJmd0O2lfc2ItJmd0O3NfYmRldjsKJiM0MzsKJiM0MztyZXJlYWQ6CiYjNDM7CXBhcnRpYWwgPSBnZXRfYnJhbmNoKGlub2RlLCBkZXB0aCwgb2Zmc2V0cywgY2hhaW4sICZhbXA7ZXJyKTsKJiM0MzsKJiM0MzsJLyogU2ltcGxlc3QgY2FzZSAtIGJsb2NrIGZvdW5kLCBubyBhbGxvY2F0aW9uIG5lZWRlZCAqLwomIzQzOwlpZiAoIXBhcnRpYWwpIHsKJiM0MzsJCWlvbWFwLSZndDtmbGFncyA9IDA7CiYjNDM7CQlwaHlzID0gYmxvY2tfdG9fY3B1KGNoYWluW2RlcHRoIC0gMV0ua2V5KTsKJiM0MzsJCXBhcnRpYWwgPSBjaGFpbiYjNDM7ZGVwdGgtMTsKJiM0MzsJCW1pbml4X2lvbWFwX3NldF9tYXBwZWQoaW9tYXAsIHBoeXMsIGJsa2JpdHMsIGlibG9jayk7CiYjNDM7CQltaW5peF9jaGFpbl9jbGVhbnVwKGNoYWluLCBwYXJ0aWFsKTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogTmV4dCBzaW1wbGUgY2FzZSAtIHBsYWluIGxvb2t1cCBvciBmYWlsZWQgcmVhZCBvZiBpbmRpcmVjdCBibG9jayAqLwomIzQzOwlpZiAoIWNyZWF0ZSB8fCBlcnIgPT0gLUVJTykgewomIzQzOwkJbWluaXhfaW9tYXBfc2V0X2hvbGUoaW9tYXAsIGJsa2JpdHMsIGlibG9jayk7CiYjNDM7CQltaW5peF9jaGFpbl9jbGVhbnVwKGNoYWluLCBwYXJ0aWFsKTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhpcyBpcyBoZWxkIG92ZXIgZnJvbSB0aGUgb3JpZ2luYWwgZ2V0X2Jsb2NrIGxvZ2ljLCB3aGVyZSBpdAomIzQzOwkgKiBhY3RlZCBhcyBhIGd1YXJkIGluIGNhc2UgdHJ1bmNhdGUoKSBkZWxldGVkIGJsb2NrcyBmcm9tIHVuZGVyIHRoYXQKJiM0MzsJICogZnVuY3Rpb24uIFRoZXJlIHNob3VsZCBub3QgYmUgYSByYWNlIHdpdGggaW9tYXAgb3BlcmF0aW9ucywgYnV0CiYjNDM7CSAqIHdlJiMzOTtyZSByZXRhaW5pbmcgdGhlIGRlZmVuc2l2ZSBjb2RpbmcgaGVyZSB0byBiZSBleHRyYSBzYWZlIGp1c3QgaW4KJiM0MzsJICogY2FzZS4KJiM0MzsJICovCiYjNDM7CWlmIChlcnIgPT0gLUVBR0FJTikgewomIzQzOwkJbWluaXhfY2hhaW5fY2xlYW51cChjaGFpbiwgcGFydGlhbCk7CiYjNDM7CQlnb3RvIHJlcmVhZDsKJiM0MzsJfQomIzQzOwomIzQzOwlsZWZ0ID0gKGNoYWluICYjNDM7IGRlcHRoKSAtIHBhcnRpYWw7CiYjNDM7CWVyciA9IGFsbG9jX2JyYW5jaChpbm9kZSwgbGVmdCwgb2Zmc2V0cyAmIzQzOyAocGFydGlhbCAtIGNoYWluKSwgcGFydGlhbCk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCW1pbml4X2NoYWluX2NsZWFudXAoY2hhaW4sIHBhcnRpYWwpOwomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoc3BsaWNlX2JyYW5jaChpbm9kZSwgY2hhaW4sIHBhcnRpYWwsIGxlZnQpICZsdDsgMCkgewomIzQzOwkJbWluaXhfY2hhaW5fY2xlYW51cChjaGFpbiwgcGFydGlhbCk7CiYjNDM7CQlnb3RvIHJlcmVhZDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTdWNjZXNzZnVsIGFsbG9jYXRpb24sIG1hcHBpbmcgaXQuICovCiYjNDM7CWlvbWFwLSZndDtmbGFncyA9IElPTUFQX0ZfTkVXOwomIzQzOwlwaHlzID0gYmxvY2tfdG9fY3B1KGNoYWluW2RlcHRoIC0gMV0ua2V5KTsKJiM0MzsJbWluaXhfaW9tYXBfc2V0X21hcHBlZChpb21hcCwgcGh5cywgYmxrYml0cywgaWJsb2NrKTsKJiM0MzsJbWluaXhfY2hhaW5fY2xlYW51cChjaGFpbiwgcGFydGlhbCk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogbWluaXhfaW9tYXBfZW5kIGVuZHMgdXAgYmVpbmcgYSBub3A7IHNpbmNlIG1pbml4IGRvZXNuJiMzOTt0IGhhdmUgYW55IGV4dGVudHMgb3IKJiM0MzsgKiB0cmFuc2FjdGlvbnMgdG8gd29ycnkgYWJvdXQsIHRoZXJlIGlzbiYjMzk7dCBhbnl0aGluZyB0byB1cGRhdGUgaGVyZS4gVGhlIG9uLWRpc2sKJiM0MzsgKiBpbmRpcmVjdCBibG9ja3MgZ2V0IGRpcnRpZWQgaW4gbWluaXhfaW9tYXBfYmVnaW4uCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBtaW5peF9pb21hcF9lbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCwKJiM0MzsJc3NpemVfdCB3cml0dGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXApCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CmRpZmYgLS1naXQgYS9mcy9taW5peC9pdHJlZV9jb21tb24uYyBiL2ZzL21pbml4L2l0cmVlX2NvbW1vbi5jCmluZGV4IGMzY2QyYzc1YWY5Y2UuLmQ3M2FiMWNhYWNmZWMgMTAwNjQ0Ci0tLSBhL2ZzL21pbml4L2l0cmVlX2NvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L2l0cmVlX2NvbW1vbi5jCkBAIC0zMTEsNyAmIzQzOzMxMSwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdHJ1bmNhdGUgKHN0cnVjdCBpbm9kZSAqIGlub2RlKQogCWxvbmcgaWJsb2NrOwogCiAJaWJsb2NrID0gKGlub2RlLSZndDtpX3NpemUgJiM0Mzsgc2ItJmd0O3NfYmxvY2tzaXplIC0xKSAmZ3Q7Jmd0OyBzYi0mZ3Q7c19ibG9ja3NpemVfYml0czsKLQlibG9ja190cnVuY2F0ZV9wYWdlKGlub2RlLSZndDtpX21hcHBpbmcsIGlub2RlLSZndDtpX3NpemUsIGdldF9ibG9jayk7CiYjNDM7CiYjNDM7CS8qIERlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBpbm9kZSBiZWluZyB0cnVuY2F0ZWQgaXMgYSBkaXJlY3Rvcnkgb3Igbm90LAomIzQzOwkgKiB3ZSBuZWVkIHRvIGVpdGhlciBjYWxsIGlvbWFwX3RydW5jYXRlX3BhZ2Ugb3IgYmxvY2tfdHJ1bmNhdGVfcGFnZS4KJiM0MzsJICovCiYjNDM7CWlmIChTX0lTRElSKGlub2RlLSZndDtpX21vZGUpKQomIzQzOwkJYmxvY2tfdHJ1bmNhdGVfcGFnZShpbm9kZS0mZ3Q7aV9tYXBwaW5nLCBpbm9kZS0mZ3Q7aV9zaXplLCBnZXRfYmxvY2spOwomIzQzOwllbHNlCiYjNDM7CQlpb21hcF90cnVuY2F0ZV9wYWdlKGlub2RlLCBpbm9kZS0mZ3Q7aV9zaXplLCBOVUxMLAomIzQzOwkJCW1pbml4X2lvbWFwX29wc192ZXIoaW5vZGUpLCBOVUxMLCBOVUxMKTsKIAogCW4gPSBibG9ja190b19wYXRoKGlub2RlLCBpYmxvY2ssIG9mZnNldHMpOwogCWlmICghbikKZGlmZiAtLWdpdCBhL2ZzL21pbml4L2l0cmVlX3YxLmMgYi9mcy9taW5peC9pdHJlZV92MS5jCmluZGV4IDFmZWQ5MDYwNDJhYTguLjU4YzI5ZjQ0NDNkMzcgMTAwNjQ0Ci0tLSBhL2ZzL21pbml4L2l0cmVlX3YxLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbWluaXgvaXRyZWVfdjEuYwpAQCAtNDksNiAmIzQzOzQ5LDE4IEBAIHN0YXRpYyBpbnQgYmxvY2tfdG9fcGF0aChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgbG9uZyBibG9jaywgaW50IG9mZnNldHNbREVQVEhdKQogfQogCiAjaW5jbHVkZSAmIzM0O2l0cmVlX2NvbW1vbi5jJiMzNDsKJiM0MzsvKiBOT1RBIEJFTkU6CiYjNDM7ICoKJiM0MzsgKiBUaGlzIGlzIGlja3kgdG8gbWUsIGJ1dCBhdCB0aGUgc2FtZSB0aW1lIGhhdmluZyBpdCBiZSBhIHN0YW5kYWxvbmUgQyBmaWxlCiYjNDM7ICogdGhhdCYjMzk7cyBjb21waWxlZCB0byBvYmplY3QgZm9ybSBhbmQgbGlua2VkIHNlcGFyYXRlbHkgbGlrZSBpdCBpcyBpbiB4aWFmcyBpcwomIzQzOyAqIG11Y2ggbmFzdGllciBpbiBtaW5peCBiZWNhdXNlIG9mIHRoZSBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIG1pbml4IGZzIHRoYXQKJiM0MzsgKiBoYXZlIHNvbWUgdmVyeSwgdmVyeSBkaWZmZXJlbnQgYXNwZWN0cywgbGlrZSB0aGUgc2l6ZSBvZiBibG9ja190LiBJIGRvbiYjMzk7dAomIzQzOyAqIGxpa2UgaXQsIGJ1dCBzaW5jZSBtaW5peCBhbHJlYWR5IGhhcyB0aGlzIHBhdHRlcm4gd2hlcmUgYSBjb21tb24gaXRyZWUgZmlsZQomIzQzOyAqIGlzIGluY2x1ZGVkIGluIHRoZSBpdHJlZV92MSBhbmQgaXRyZWVfdjIoYW5kIHYzKSBmaWxlcywgSSYjMzk7bSBpbmNsdWRpbmcgaW9tYXAuYwomIzQzOyAqIGluIHRoZXNlIGZpbGVzIGFzIHdlbGwuIEl0IGRvZXMgYXQgbGVhc3QgYXZvaWQgZXhwb3J0aW5nIHNvbWUgY3VycmVudGx5CiYjNDM7ICogc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGFyZW4mIzM5O3QgbmVlZGVkIGFueXdoZXJlIGJ1dCBpdHJlZV9jb21tb24uYyBhbmQgaW9tYXAuYy4KJiM0MzsgKi8KJiM0MzsjaW5jbHVkZSAmIzM0O2lvbWFwLmMmIzM0OwogCiBpbnQgVjFfbWluaXhfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBsb25nIGJsb2NrLAogCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpCkBAIC02MSw3ICYjNDM7NzMsMTggQEAgdm9pZCBWMV9taW5peF90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkKIAl0cnVuY2F0ZShpbm9kZSk7CiB9CiAKLXVuc2lnbmVkIFYxX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKJiM0Mzt1bnNpZ25lZCBpbnQgVjFfbWluaXhfYmxvY2tzKGxvZmZfdCBzaXplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCXJldHVybiBuYmxvY2tzKHNpemUsIHNiKTsKIH0KJiM0MzsKJiM0MztpbnQgVjFfbWluaXhfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCwKJiM0MzsJdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBzdHJ1Y3QgaW9tYXAgKnNyY21hcCkKJiM0Mzt7CiYjNDM7CXJldHVybiBtaW5peF9pb21hcF9iZWdpbihpbm9kZSwgb2Zmc2V0LCBsZW5ndGgsIGZsYWdzLCBpb21hcCwgc3JjbWFwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMV9taW5peF9pb21hcF9vcHMgPSB7CiYjNDM7CS5pb21hcF9iZWdpbiA9IFYxX21pbml4X2lvbWFwX2JlZ2luLAomIzQzOwkuaW9tYXBfZW5kICAgPSBtaW5peF9pb21hcF9lbmQsCiYjNDM7fTsKZGlmZiAtLWdpdCBhL2ZzL21pbml4L2l0cmVlX3YyLmMgYi9mcy9taW5peC9pdHJlZV92Mi5jCmluZGV4IDlkMDBmMzFhMmQ5ZDEuLmZjN2E1YWU4ZmExY2EgMTAwNjQ0Ci0tLSBhL2ZzL21pbml4L2l0cmVlX3YyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbWluaXgvaXRyZWVfdjIuYwpAQCAtNTcsNiAmIzQzOzU3LDEwIEBAIHN0YXRpYyBpbnQgYmxvY2tfdG9fcGF0aChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgbG9uZyBibG9jaywgaW50IG9mZnNldHNbREVQVEhdKQogfQogCiAjaW5jbHVkZSAmIzM0O2l0cmVlX2NvbW1vbi5jJiMzNDsKJiM0MzsvKiBTZWUgdGhlIG5vdGUgaW4gaXRyZWVfdjEgaW4gYSBjb21tZW50IHRoYXQgc3RhcnRzICYjMzQ7Tk9UQSBCRU5FJiMzNDsgZm9yIGFuCiYjNDM7ICogZXhwbGFuYXRpb24gZm9yIHdoeSBpb21hcC5jIGlzIGluY2x1ZGVkIGhlcmUuCiYjNDM7ICovCiYjNDM7I2luY2x1ZGUgJiMzNDtpb21hcC5jJiMzNDsKIAogaW50IFYyX21pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgbG9uZyBibG9jaywKIAkJCXN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKQpAQCAtNjksNyAmIzQzOzczLDE4IEBAIHZvaWQgVjJfbWluaXhfdHJ1bmNhdGUoc3RydWN0IGlub2RlICogaW5vZGUpCiAJdHJ1bmNhdGUoaW5vZGUpOwogfQogCi11bnNpZ25lZCBWMl9taW5peF9ibG9ja3MobG9mZl90IHNpemUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiYjNDM7dW5zaWduZWQgaW50IFYyX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAlyZXR1cm4gbmJsb2NrcyhzaXplLCBzYik7CiB9CiYjNDM7CiYjNDM7aW50IFYyX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsCiYjNDM7CXVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApCiYjNDM7ewomIzQzOwlyZXR1cm4gbWluaXhfaW9tYXBfYmVnaW4oaW5vZGUsIG9mZnNldCwgbGVuZ3RoLCBmbGFncywgaW9tYXAsIHNyY21hcCk7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBpb21hcF9vcHMgVjJfbWluaXhfaW9tYXBfb3BzID0gewomIzQzOwkuaW9tYXBfYmVnaW4gPSBWMl9taW5peF9pb21hcF9iZWdpbiwKJiM0MzsJLmlvbWFwX2VuZCAgID0gbWluaXhfaW9tYXBfZW5kLAomIzQzO307CmRpZmYgLS1naXQgYS9mcy9taW5peC9taW5peC5oIGIvZnMvbWluaXgvbWluaXguaAppbmRleCA3ODcyMmNlMjJlMWUxLi45MDM1NjA0YzY4Y2ExIDEwMDY0NAotLS0gYS9mcy9taW5peC9taW5peC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L21pbml4LmgKQEAgLTUsNiAmIzQzOzUsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2ZzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFnZW1hcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21pbml4X2ZzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lvbWFwLmgmZ3Q7CiAKICNkZWZpbmUgSU5PREVfVkVSU0lPTihpbm9kZSkJbWluaXhfc2IoaW5vZGUtJmd0O2lfc2IpLSZndDtzX3ZlcnNpb24KICNkZWZpbmUgTUlOSVhfVjEJCTB4MDAwMQkJLyogb3JpZ2luYWwgbWluaXggZnMgKi8KQEAgLTU3LDYgJiM0Mzs1OCw4IEBAIHZvaWQgbWluaXhfZnJlZV9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsb25nIGJsb2NrKTsKIHVuc2lnbmVkIGxvbmcgbWluaXhfY291bnRfZnJlZV9ibG9ja3Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CiBpbnQgbWluaXhfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICosIGNvbnN0IHN0cnVjdCBwYXRoICosCiAJCXN0cnVjdCBrc3RhdCAqLCB1MzIsIHVuc2lnbmVkIGludCk7CiYjNDM7aW50IG1pbml4X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKJiM0MzsJc3RydWN0IGlhdHRyICphdHRyKTsKIGludCBtaW5peF9wcmVwYXJlX2NodW5rKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbik7CiBzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1pbml4X2dldF9tZXRhZGF0YV9iaHMoc3RydWN0IGlub2RlICppbm9kZSk7CiAKQEAgLTc2LDEzICYjNDM7NzksMjMgQEAgaW50IG1pbml4X21ha2VfZW1wdHkoc3RydWN0IGlub2RlKiwgc3RydWN0IGlub2RlKik7CiBpbnQgbWluaXhfZW1wdHlfZGlyKHN0cnVjdCBpbm9kZSopOwogaW50IG1pbml4X3NldF9saW5rKHN0cnVjdCBtaW5peF9kaXJfZW50cnkgKmRlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQlzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKJiM0MzsKIHN0cnVjdCBtaW5peF9kaXJfZW50cnkgKm1pbml4X2RvdGRvdChzdHJ1Y3QgaW5vZGUqLCBzdHJ1Y3QgZm9saW8gKiopOwogaW5vX3QgbWluaXhfaW5vZGVfYnlfbmFtZShzdHJ1Y3QgZGVudHJ5Kik7CiAKJiM0MztpbnQgVjFfbWluaXhfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwKJiM0MzsJbG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLAomIzQzOwlzdHJ1Y3QgaW9tYXAgKnNyY21hcCk7CiYjNDM7aW50IFYyX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsCiYjNDM7CWxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCwKJiM0MzsJc3RydWN0IGlvbWFwICpzcmNtYXApOwomIzQzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBtaW5peF9kaXJfaW5vZGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2Rpcl9vcGVyYXRpb25zOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYxX21pbml4X2lvbWFwX29wczsKJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMl9taW5peF9pb21hcF9vcHM7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1pbml4X3NiX2luZm8gKm1pbml4X3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CkBAIC05NCwxMSAmIzQzOzEwNywxNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtaW5peF9pbm9kZV9pbmZvICptaW5peF9pKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJcmV0dXJuIGNvbnRhaW5lcl9vZihpbm9kZSwgc3RydWN0IG1pbml4X2lub2RlX2luZm8sIHZmc19pbm9kZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbWluaXhfYmxvY2tzX25lZWRlZCh1bnNpZ25lZCBiaXRzLCB1bnNpZ25lZCBibG9ja3NpemUpCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWluaXhfYmxvY2tzX25lZWRlZCh1bnNpZ25lZCBpbnQgYml0cywgdW5zaWduZWQgaW50IGJsb2Nrc2l6ZSkKIHsKIAlyZXR1cm4gRElWX1JPVU5EX1VQX1BPVzIoYml0cywgYmxvY2tzaXplICogOCk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm1pbml4X2lvbWFwX29wc192ZXIoc3RydWN0IGlub2RlICppbm9kZSkKJiM0Mzt7CiYjNDM7CXJldHVybiAoSU5PREVfVkVSU0lPTihpbm9kZSkgPT0gTUlOSVhfVjEpID8KJiM0MzsJCSZhbXA7VjFfbWluaXhfaW9tYXBfb3BzIDogJmFtcDtWMl9taW5peF9pb21hcF9vcHM7CiYjNDM7fQomIzQzOwogI2lmIGRlZmluZWQoQ09ORklHX01JTklYX0ZTX05BVElWRV9FTkRJQU4pICZhbXA7JmFtcDsgXAogCWRlZmluZWQoQ09ORklHX01JTklYX0ZTX0JJR19FTkRJQU5fMTZCSVRfSU5ERVhFRCkKIApAQCAtMTI4LDcgJiM0MzsxNDcsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIG1pbml4X2Jsb2Nrc19uZWVkZWQodW5zaWduZWQgYml0cywgdW5zaWduZWQgYmxvY2tzaXplKQogICogYmlnLWVuZGlhbiAxNmJpdCBpbmRleGVkIGJpdG1hcHMKICAqLwogCi1zdGF0aWMgaW5saW5lIGludCBtaW5peF9maW5kX2ZpcnN0X3plcm9fYml0KGNvbnN0IHZvaWQgKnZhZGRyLCB1bnNpZ25lZCBzaXplKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1pbml4X2ZpbmRfZmlyc3RfemVyb19iaXQoY29uc3Qgdm9pZCAqdmFkZHIsIHVuc2lnbmVkIGludCBzaXplKQogewogCWNvbnN0IHVuc2lnbmVkIHNob3J0ICpwID0gdmFkZHIsICphZGRyID0gdmFkZHI7CiAJdW5zaWduZWQgc2hvcnQgbnVtOwpkaWZmIC0tZ2l0IGEvZnMvbWluaXgvbmFtZWkuYyBiL2ZzL21pbml4L25hbWVpLmMKaW5kZXggNTUyNWJhMzY3ZWQ3NC4uNTJlMTE1MDEzYWJmOCAxMDA2NDQKLS0tIGEvZnMvbWluaXgvbmFtZWkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9uYW1laS5jCkBAIC02LDYgJiM0Mzs2LDcgQEAKICAqLwogCiAjaW5jbHVkZSAmIzM0O21pbml4LmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pb21hcC5oJmd0OwogCiBzdGF0aWMgaW50IGFkZF9ub25kaXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewpAQCAtODQsMTIgJiM0Mzs4NSwxNiBAQCBzdGF0aWMgaW50IG1pbml4X3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQlyZXR1cm4gUFRSX0VSUihpbm9kZSk7CiAKIAltaW5peF9zZXRfaW5vZGUoaW5vZGUsIDApOwotCWVyciA9IHBhZ2Vfc3ltbGluayhpbm9kZSwgc3ltbmFtZSwgaSk7CiYjNDM7CWVyciA9IGlvbWFwX3N5bWxpbmtfd3JpdGUoaW5vZGUsIHN5bW5hbWUsIGksIG1pbml4X2lvbWFwX29wc192ZXIoaW5vZGUpLCBOVUxMLCBOVUxMKTsKJiM0MzsKIAlpZiAodW5saWtlbHkoZXJyKSkgewogCQlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7CiAJCWlwdXQoaW5vZGUpOwogCQlyZXR1cm4gZXJyOwogCX0KJiM0MzsKJiM0MzsJaV9zaXplX3dyaXRlKGlub2RlLCBpIC0gMSk7CiYjNDM7CiAJcmV0dXJuIGFkZF9ub25kaXIoZGVudHJ5LCBpbm9kZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW9tYXAuaCBiL2luY2x1ZGUvbGludXgvaW9tYXAuaAppbmRleCA4Yzc1NGViOTc0ZmJmLi5hYjI3YTNhNWI4ZDJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lvbWFwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9pb21hcC5oCkBAIC00NzEsNiAmIzQzOzQ3MSw5IEBAIGxvZmZfdCBpb21hcF9zZWVrX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwKIAkJY29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzKTsKIHNlY3Rvcl90IGlvbWFwX2JtYXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHNlY3Rvcl90IGJubywKIAkJY29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzKTsKJiM0MztpbnQgaW9tYXBfc3ltbGlua193cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICp0YXJnZXQsIGludCBsZW4sCiYjNDM7CQljb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsCiYjNDM7CQljb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGVfb3BzICp3cml0ZV9vcHMsIHZvaWQgKnByaXZhdGUpOwogCiAvKgogICogRmxhZ3MgZm9yIGlvbWFwX2lvZW5kLSZndDtpb19mbGFncy4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM4MQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNaW5peCBJT01BUCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgcHJldHR5IHN1YnN0YW50aWFsIGNoYW5nZSB0byB0aGUgTWluaXggZmlsZXN5c3RlbS4gSXQmIzM5O3MgbW92aW5nIE1pbml4IHRvIHVzZSBpb21hcCBmb3IgYnVmZmVyZWQgSS9PLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IGFyY2hpdGVjdHVyYWwgc2hpZnQuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB0aGUga2V5IG5ldyBjb21wb25lbnQgaXMgYGlvbWFwX3N5bWxpbmtfd3JpdGVgIGluIGBmcy9pb21hcC9idWZmZXJlZC1pby5jYCwgYW5kIHRoZSBpbnRlZ3JhdGlvbiBpcyBkb25lIGluIGBmcy9taW5peC9uYW1laS5jYC4gIFNpbmNlIE1pbml4IGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdlJiMzOTtkIGVuY291bnRlciBpbiBjZXJ0YWluIHZpcnR1YWxpemF0aW9uIHNldHVwcywgdGhpcyBpcyBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBhIGNsb3NlciBsb29rLiAqV29ydGhGdXp6aW5nPXRydWUqIGlzIGEgZ28uCgpOb3csIGxldCYjMzk7cyBicmVhayBkb3duIHRoZSBmdW5jdGlvbnMgdGhhdCBuZWVkIGNhcmVmdWwgYXR0ZW50aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIGFyZWFzOgoKKiAgICoqYGlvbWFwX3N5bWxpbmtfd3JpdGVgKio6IFRoZSBuZXcga2lkIG9uIHRoZSBibG9jayBmb3Igc3ltbGluayB3cml0ZXMsIHNvIHRoYXQgaXMgYSBnb29kIGZpcnN0IHN0b3AuCiogICAqKmBtaW5peF9maWxlX3dyaXRlX2l0ZXJgLCBgbWluaXhfd3JpdGViYWNrX3JhbmdlYCwgYG1pbml4X3dyaXRlcGFnZXNgLCBgbWluaXhfcmVhZF9mb2xpb2AsIGBtaW5peF9yZWFkYWhlYWRgKio6IFRoZXNlIGZ1bmN0aW9ucyBpbiBgZnMvbWluaXgvZmlsZS5jYCBhbmQgYGZzL21pbml4L2lub2RlLmNgIHJlcHJlc2VudCB0aGUgY29yZSBmaWxlIG9wZXJhdGlvbnMgYW5kIHdyaXRlYmFjayBtZWNoYW5pc21zIHdpdGhpbiB0aGUgTWluaXggZmlsZXN5c3RlbSBpdHNlbGYsIGFuZCB3aWxsIGhhdmUgdG8gYmUgdGVzdGVkIHRob3JvdWdobHkgd2l0aCB0aGUgaW9tYXAgdHJhbnNpdGlvbi4KKiAgICoqYG1pbml4X2lvbWFwX2JlZ2luYCwgYFYxX21pbml4X2lvbWFwX2JlZ2luYCwgYFYyX21pbml4X2lvbWFwX2JlZ2luYCoqOiBUaGVzZSBpb21hcC1zcGVjaWZpYyBmdW5jdGlvbnMgYXJlIHdoZXJlIHRoZSBNaW5peCBmaWxlc3lzdGVtIG5vdyBpbnRlcmZhY2VzIHdpdGggaW9tYXAsIHNvIHRoZXkgYXJlIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgaW50ZWdyYXRpb24gd29ya3MuCgpJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfTUlOSVhfRlNgIGlzIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9uLCB3aGljaCBsb29rcyBnb29kLiAgVGhpcyBwcm92aWRlcyB0aGUgZm91bmRhdGlvbiwgYW5kIG5vdyBJIGNhbiBzdGFydCBkaWdnaW5nIGludG8gdGhlc2UgZnVuY3Rpb25zIGFuZCB0aGUgbmV3IGlvbWFwIGludGVncmF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMgYW5kIGFueSBwb3RlbnRpYWwgcGl0ZmFsbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1JTklYX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbWluaXgvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9taW5peC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9taW5peC9LY29uZmlnOjI6Y29uZmlnIE1JTklYX0ZTXG5mcy9taW5peC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtNaW5peCBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvbWluaXgvS2NvbmZpZy0yMC1cbmZzL21pbml4L0tjb25maWc6MjE6Y29uZmlnIE1JTklYX0ZTX05BVElWRV9FTkRJQU5cbmZzL21pbml4L0tjb25maWctMjItXHRkZWZfYm9vbCBNSU5JWF9GU1xuLS1cbmZzL21pbml4L0tjb25maWctMjQtXG5mcy9taW5peC9LY29uZmlnOjI1OmNvbmZpZyBNSU5JWF9GU19CSUdfRU5ESUFOXzE2QklUX0lOREVYRURcbmZzL21pbml4L0tjb25maWctMjYtXHRkZWZfYm9vbCBNSU5JWF9GU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDIwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBDaGVja2xpc3QqKgoKT2theSwgc28gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBJJiMzOTttIGxvb2tpbmcgYXQgaGFzIGBNSU5JWF9GU2AgZW5hYmxlZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7UmlnaHQsIHdoYXQgZWxzZSBkbyBJIG5lZWQgdG8gY29uc2lkZXIgd2l0aCB0aGlzPyYjMzQ7IEdpdmVuIG15IGV4cGVydGlzZSwgSSBhbHJlYWR5IGtub3cgdGhhdCBgTUlOSVhfRlNgIGxpa2VseSBkZXBlbmRzIG9uIG90aGVyIGZ1bmRhbWVudGFsIGNvbXBvbmVudHMuIExldCYjMzk7cyBzZWUuLi4gYSBxdWljayBjaGVjayByZXZlYWxzIHRoYXQgYE1JTklYX0ZTYCBzcGVjaWZpY2FsbHkgcmVxdWlyZXMgYEJMT0NLYC4gVGhpcyBtZWFucyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGBCTE9DS2AgY29uZmlndXJhdGlvbiBpcyBhbHNvIGNvcnJlY3RseSBzZXQsIG9yIHRoYXQgSSBoYXZlIGEgcGxhbiB0byBpbXBsZW1lbnQgaXQuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBteSBjb25maWd1cmF0aW9uIHN0ZXBzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9taW5peC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL21pbml4L0tjb25maWc9Mj1jb25maWcgTUlOSVhfRlNcbmZzL21pbml4L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O01pbml4IGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbmZzL21pbml4L0tjb25maWc6NDpcdGRlcGVuZHMgb24gQkxPQ0tcbmZzL21pbml4L0tjb25maWctNS1cdHNlbGVjdCBCVUZGRVJfSEVBRFxuLS1cbmZzL21pbml4L0tjb25maWc9MjE9Y29uZmlnIE1JTklYX0ZTX05BVElWRV9FTkRJQU5cbmZzL21pbml4L0tjb25maWctMjItXHRkZWZfYm9vbCBNSU5JWF9GU1xuZnMvbWluaXgvS2NvbmZpZzoyMzpcdGRlcGVuZHMgb24gTUlDUk9CTEFaRSB8fCBNSVBTIHx8IFMzOTAgfHwgU1VQRVJIIHx8IFNQQVJDIHx8IFhURU5TQSB8fCAoTTY4SyBcdTAwMjZcdTAwMjYgIU1NVSlcbmZzL21pbml4L0tjb25maWctMjQtXG5mcy9taW5peC9LY29uZmlnPTI1PWNvbmZpZyBNSU5JWF9GU19CSUdfRU5ESUFOXzE2QklUX0lOREVYRURcbmZzL21pbml4L0tjb25maWctMjYtXHRkZWZfYm9vbCBNSU5JWF9GU1xuZnMvbWluaXgvS2NvbmZpZzoyNzpcdGRlcGVuZHMgb24gTTY4SyBcdTAwMjZcdTAwMjYgTU1VXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4NjUKCQkJCQkJCW91dHB1dDogMTgwCgkJCQkJCQl0aG91Z2h0czogMTIxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1pbml4IEZpbGVzeXN0ZW0gSS9PIEFQSSBFbnRyeXBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIE1JTklYIGZpbGVzeXN0ZW0sIGFuZCB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYE1JTklYX0ZTYCBpcyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24uIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGlzIHBhdGNoIGludHJvZHVjZXMsIHNwZWNpZmljYWxseSB0aG9zZSBhY3RpbmcgYXMgQVBJIGVudHJ5cG9pbnRzLCBpZGVhbGx5IG5vbi1zdGF0aWMgb25lcyB0byBtYWtlIHN1cmUgc3l6a2FsbGVyIGNhbiBmaW5kIHRoZW0sIGFsdGhvdWdoIHRoZSBwcm9tcHQgc2F5cyBmdW5jdGlvbnMgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMgbWF5IG5vdCBiZSBpbmxpbmVkLgoKTGV0JiMzOTtzIHdhbGsgdGhyb3VnaCB0aGUgY2FuZGlkYXRlIGZ1bmN0aW9ucy4gSSBoYXZlOgoKKiAgIGBpb21hcF9zeW1saW5rX3dyaXRlYAoqICAgYG1pbml4X2ZpbGVfd3JpdGVfaXRlcmAKKiAgIGBtaW5peF93cml0ZWJhY2tfcmFuZ2VgCiogICBgbWluaXhfd3JpdGVwYWdlc2AKKiAgIGBtaW5peF9yZWFkX2ZvbGlvYAoqICAgYG1pbml4X3JlYWRhaGVhZGAKKiAgIGBtaW5peF9pb21hcF9iZWdpbmAKKiAgIGBWMV9taW5peF9pb21hcF9iZWdpbmAKKiAgIGBWMl9taW5peF9pb21hcF9iZWdpbmAKCk5vdywgaW5pdGlhbGx5LCBJJiMzOTttIG5vdGluZyB0aGF0IGEgbnVtYmVyIG9mIHRob3NlIGZ1bmN0aW9ucyBhcmUgc3RhdGljLCB3aGljaCByYWlzZXMgYSBmbGFnIGJlY2F1c2Ugc3RhdGljIGZ1bmN0aW9ucyBjYW4gYmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIEhvd2V2ZXIsIEkga25vdyB0aGUgcHJvbXB0IGFsc28gbWVudGlvbnMgZnVuY3Rpb24gcG9pbnRlcnMsIHNvIGl0JiMzOTtzIGEgYml0IG1vcmUgbnVhbmNlZC4KCkkgc2VlIHRoYXQgYG1pbml4X3dyaXRlYmFja19yYW5nZWAsIGBtaW5peF93cml0ZXBhZ2VzYCwgYG1pbml4X3JlYWRfZm9saW9gLCBgbWluaXhfcmVhZGFoZWFkYCwgYW5kIGBtaW5peF9pb21hcF9iZWdpbmAsIGFyZSBhbGwgc3RhdGljLiBUaGUgc3RhdGljIG5hdHVyZSBpbXBsaWVzIGludGVybmFsIHVzZSwgYnV0IEkga25vdyB0aGF0IGBtaW5peF93cml0ZXBhZ2VzYCwgYG1pbml4X3JlYWRfZm9saW9gLCBhbmQgYG1pbml4X3JlYWRhaGVhZGAsIGFyZSBhc3NpZ25lZCB0byB0aGUgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zIHN0cnVjdCAoYG1pbml4X2FvcHNgKSwgYW5kIGBtaW5peF9maWxlX3dyaXRlX2l0ZXJgIGlzIGFzc2lnbmVkIHRvIGBtaW5peF9maWxlX29wZXJhdGlvbnMud3JpdGVfaXRlcmAsIHNvIHRoZXkgd29uJiMzOTt0IGJlIGlubGluZWQuCgpgbWluaXhfaW9tYXBfYmVnaW5gIGlzIHVzZWQgYnkgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGBWMV9taW5peF9pb21hcF9iZWdpbmAgYW5kIGBWMl9taW5peF9pb21hcF9iZWdpbmAuIFNpbmNlIHRob3NlIGFyZW4mIzM5O3Qgc3RhdGljLCB0aGV5IGFyZSBlbnRyeXBvaW50cy4KClNvLCBJIHdpbGwgYWRkIHRoZXNlIGFzIGVudHJ5cG9pbnRzOiBgaW9tYXBfc3ltbGlua193cml0ZWAsIGBWMV9taW5peF9pb21hcF9iZWdpbmAsIGFuZCBgVjJfbWluaXhfaW9tYXBfYmVnaW5gLCBhcyB3ZWxsIGFzIGBtaW5peF9maWxlX3dyaXRlX2l0ZXJgLCBgbWluaXhfd3JpdGVwYWdlc2AsIGBtaW5peF9yZWFkX2ZvbGlvYCwgYG1pbml4X3JlYWRhaGVhZGAsIGFuZCBgbWluaXhfd3JpdGViYWNrX3JhbmdlYC4gSSBrbm93IHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBhc3NpZ25lZCB0byBmdW5jdGlvbiBwb2ludGVycyBpbiBhIHN0cnVjdCwgc28gaXQgaXMgdW5saWtlbHkgdGhhdCB0aGV5IGFyZSBpbmxpbmVkLgoKVGhlIGNvZGUgcmV2aWV3IGluZGljYXRlcyB0aGF0IGFsbCBmdW5jdGlvbnMgYXJlIG5ldy4gYGlvbWFwX3N5bWxpbmtfd3JpdGVgIGlzIGluIGBmcy9pb21hcC9idWZmZXJlZC1pby5jYCwgYG1pbml4X2ZpbGVfd3JpdGVfaXRlcmAgaXMgaW4gYGZzL21pbml4L2ZpbGUuY2AsIGBtaW5peF93cml0ZWJhY2tfcmFuZ2VgLCBgbWluaXhfd3JpdGVwYWdlc2AsIGBtaW5peF9yZWFkX2ZvbGlvYCwgYW5kIGBtaW5peF9yZWFkYWhlYWRgLCBhcmUgaW4gYGZzL21pbml4L2lub2RlLmNgLCBhbmQgYG1pbml4X2lvbWFwX2JlZ2luYCBpcyBpbiBgZnMvbWluaXgvaW9tYXAuY2AsIGBWMV9taW5peF9pb21hcF9iZWdpbmAgaXMgaW4gYGZzL21pbml4L2l0cmVlX3YxLmNgLCBhbmQgYFYyX21pbml4X2lvbWFwX2JlZ2luYCBpcyBpbiBgZnMvbWluaXgvaXRyZWVfdjIuY2AuCgpUaGUga2V5IGNoYW5nZSBpcyB0aGUgbWlncmF0aW9uIHRvIGlvbWFwIGZvciBidWZmZXJlZCBJL08gYW5kIHN5bWxpbmtzLCB3aGljaCBpbnZvbHZlcyBtb2RpZmljYXRpb25zIGluIGZpbGUgb3BlcmF0aW9ucywgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zLCBhbmQgYmxvY2sgbWFwcGluZy4gVGhpcyBpcyBhbGwgdmVyeSByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBieSBzaW1wbHkgbW91bnRpbmcgYSBtaW5peCBmaWxlc3lzdGVtIGltYWdlLgoKSGVyZSYjMzk7cyBteSBmaW5hbCBsaXN0IGZvciBjb25zaWRlcmF0aW9uOgoKKiAgIGBpb21hcF9zeW1saW5rX3dyaXRlYAoqICAgYFYxX21pbml4X2lvbWFwX2JlZ2luYAoqICAgYFYyX21pbml4X2lvbWFwX2JlZ2luYAoqICAgYG1pbml4X2ZpbGVfd3JpdGVfaXRlcmAKKiAgIGBtaW5peF93cml0ZXBhZ2VzYAoqICAgYG1pbml4X3JlYWRfZm9saW9gCiogICBgbWluaXhfcmVhZGFoZWFkYAoqICAgYG1pbml4X3dyaXRlYmFja19yYW5nZWAKCkFuZCB0aGUgcmVxdWlyZWQgY29uZmlnOiBgTUlOSVhfRlNgCgpOb3cgSSBhbSByZWFkeSB0byBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUlOSVhfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb21hcF9zeW1saW5rX3dyaXRlJiMzNDssCiAgICAmIzM0O1YxX21pbml4X2lvbWFwX2JlZ2luJiMzNDssCiAgICAmIzM0O1YyX21pbml4X2lvbWFwX2JlZ2luJiMzNDssCiAgICAmIzM0O21pbml4X2ZpbGVfd3JpdGVfaXRlciYjMzQ7LAogICAgJiMzNDttaW5peF93cml0ZXBhZ2VzJiMzNDssCiAgICAmIzM0O21pbml4X3JlYWRfZm9saW8mIzM0OywKICAgICYjMzQ7bWluaXhfcmVhZGFoZWFkJiMzNDssCiAgICAmIzM0O21pbml4X3dyaXRlYmFja19yYW5nZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtaWdyYXRlcyB0aGUgbWluaXggZmlsZXN5c3RlbSB0byB1c2UgaW9tYXAgZm9yIGJ1ZmZlcmVkIEkvTyBhbmQgc3ltbGlua3MuIFRoaXMgaW52b2x2ZXMgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWluaXggZmlsZSBvcGVyYXRpb25zLCBhZGRyZXNzIHNwYWNlIG9wZXJhdGlvbnMsIGFuZCBibG9jayBtYXBwaW5nIGxvZ2ljLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IG1vdW50aW5nIGEgbWluaXggZmlsZXN5c3RlbSBpbWFnZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUlOSVhfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb21hcF9zeW1saW5rX3dyaXRlJiMzNDssCiAgICAmIzM0O1YxX21pbml4X2lvbWFwX2JlZ2luJiMzNDssCiAgICAmIzM0O1YyX21pbml4X2lvbWFwX2JlZ2luJiMzNDssCiAgICAmIzM0O21pbml4X2ZpbGVfd3JpdGVfaXRlciYjMzQ7LAogICAgJiMzNDttaW5peF93cml0ZXBhZ2VzJiMzNDssCiAgICAmIzM0O21pbml4X3JlYWRfZm9saW8mIzM0OywKICAgICYjMzQ7bWluaXhfcmVhZGFoZWFkJiMzNDssCiAgICAmIzM0O21pbml4X3dyaXRlYmFja19yYW5nZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtaWdyYXRlcyB0aGUgbWluaXggZmlsZXN5c3RlbSB0byB1c2UgaW9tYXAgZm9yIGJ1ZmZlcmVkIEkvTyBhbmQgc3ltbGlua3MuIFRoaXMgaW52b2x2ZXMgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWluaXggZmlsZSBvcGVyYXRpb25zLCBhZGRyZXNzIHNwYWNlIG9wZXJhdGlvbnMsIGFuZCBibG9jayBtYXBwaW5nIGxvZ2ljLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IG1vdW50aW5nIGEgbWluaXggZmlsZXN5c3RlbSBpbWFnZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjoxMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnZlcnRzIHRoZSBtaW5peCBmaWxlc3lzdGVtIHRvIHVzZSBpb21hcCBmb3IgYnVmZmVyZWQgSS9PLCByZXBsYWNpbmcgdGhlIG9sZGVyIGJ1ZmZlcl9oZWFkIGJhc2VkIGJsb2NrIEkvTyBmdW5jdGlvbnMuIEl0IGludHJvZHVjZXMgYGlvbWFwX3N5bWxpbmtfd3JpdGVgIHdoaWNoIHdyaXRlcyBzeW1saW5rIHRhcmdldHMgdG8gZGlzay4gVGhlIHN5bWxpbmsgdGFyZ2V0IGlzIGEgZnVsbHkgaW5pdGlhbGl6ZWQgbnVsbC10ZXJtaW5hdGVkIHN0cmluZyBwcm92aWRlZCBieSB0aGUgVkZTLiBUaGUgdW53cml0dGVuIHBhcnRzIG9mIHRoZSBuZXdseSBhbGxvY2F0ZWQgYmxvY2sgYXJlIHplcm9lZCBieSBgaW9tYXBfd3JpdGVfYmVnaW5gIChzaW5jZSBgSU9NQVBfRl9ORVdgIGlzIHNldCBmb3IgbmV3IGJsb2NrcykuIFdoZW4gcmVhZGluZyB0aGUgc3ltbGluaywgYHBhZ2VfZ2V0X2xpbmtgIGFkZHMgdGhlIG51bGwgdGVybWluYXRvciBpbiBtZW1vcnkuIFRoZSByZXN0IG9mIHRoZSBwYXRjaCByZXBsYWNlcyBzdGFuZGFyZCByZWFkL3dyaXRlL3dyaXRlYmFjayBmdW5jdGlvbnMgd2l0aCB0aGVpciBpb21hcCBlcXVpdmFsZW50cywgd2hpY2ggaGFuZGxlIHVzZXIgc3BhY2UgZGF0YSBhbmQgcGFnZSBjYWNoZSBjb3JyZWN0bHkuIFRoZXJlIGFyZSBubyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIGluZm8tbGVha3MsIG9yIHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY5NGM1YTNmZmNlZDczNWY1ODQyZjY3NDYzZGJhZjEyNTE5MTVmZWEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAyMjoxMDoxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMgYi9mcy9pb21hcC9idWZmZXJlZC1pby5jCmluZGV4IDBhNWViZmRhOTBmMTIuLjVlOGFjM2ZhZDY3MTQgMTAwNjQ0Ci0tLSBhL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaW9tYXAvYnVmZmVyZWQtaW8uYwpAQCAtMjEwMCwzICYjNDM7MjEwMCwzNyBAQCBpb21hcF93cml0ZXBhZ2VzKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMpCiAJcmV0dXJuIGVycm9yOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfd3JpdGVwYWdlcyk7CiYjNDM7CiYjNDM7aW50IGlvbWFwX3N5bWxpbmtfd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqdGFyZ2V0LCBpbnQgbGVuLAomIzQzOwkJY29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLAomIzQzOwkJY29uc3Qgc3RydWN0IGlvbWFwX3dyaXRlX29wcyAqd3JpdGVfb3BzLCB2b2lkICpwcml2YXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2ZWMgdmVjID0gewomIzQzOwkJLmlvdl9iYXNlCT0gKHZvaWQgKil0YXJnZXQsCiYjNDM7CQkuaW92X2xlbgk9IGxlbiAtIDEsCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBpb21hcF9pdGVyIGl0ZXIgPSB7CiYjNDM7CQkuaW5vZGUJCT0gaW5vZGUsCiYjNDM7CQkucG9zCQk9IDAsCiYjNDM7CQkubGVuCQk9IGxlbiAtIDEsCiYjNDM7CQkuZmxhZ3MJCT0gSU9NQVBfV1JJVEUsCiYjNDM7CQkucHJpdmF0ZQk9IHByaXZhdGUsCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBpb3ZfaXRlciBpb3Y7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlvdl9pdGVyX2t2ZWMoJmFtcDtpb3YsIElURVJfU09VUkNFLCAmYW1wO3ZlYywgMSwgbGVuIC0gMSk7CiYjNDM7CiYjNDM7CXdoaWxlICgocmV0ID0gaW9tYXBfaXRlcigmYW1wO2l0ZXIsIG9wcykpICZndDsgMCkKJiM0MzsJCWl0ZXIuc3RhdHVzID0gaW9tYXBfd3JpdGVfaXRlcigmYW1wO2l0ZXIsICZhbXA7aW92LCB3cml0ZV9vcHMpOwomIzQzOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseShpdGVyLnBvcyA9PSAwKSkKJiM0MzsJCXJldHVybiAtRUlPOwomIzQzOwomIzQzOwltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX3N5bWxpbmtfd3JpdGUpOwpkaWZmIC0tZ2l0IGEvZnMvbWluaXgvZmlsZS5jIGIvZnMvbWluaXgvZmlsZS5jCmluZGV4IDAyYWFiYmRiNWRlYWEuLjY3NjVmNTcxYmQzZmMgMTAwNjQ0Ci0tLSBhL2ZzL21pbml4L2ZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9maWxlLmMKQEAgLTEwLDYgJiM0MzsxMCwzMiBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2J1ZmZlcl9oZWFkLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O21pbml4LmgmIzM0OwogCiYjNDM7c3RhdGljIHNzaXplX3QgbWluaXhfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKQomIzQzO3sKJiM0MzsJc3RydWN0IGlub2RlICppbm9kZSA9IGlvY2ItJmd0O2tpX2ZpbHAtJmd0O2ZfbWFwcGluZy0mZ3Q7aG9zdDsKJiM0MzsJc3NpemVfdCByZXQ7CiYjNDM7CWNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIoaW5vZGUpOwomIzQzOwomIzQzOwlpbm9kZV9sb2NrKGlub2RlKTsKJiM0MzsJcmV0ID0gZ2VuZXJpY193cml0ZV9jaGVja3MoaW9jYiwgZnJvbSk7CiYjNDM7CWlmIChyZXQgJmx0Oz0gMCkKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwomIzQzOwlyZXQgPSBmaWxlX21vZGlmaWVkKGlvY2ItJmd0O2tpX2ZpbHApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CiYjNDM7CXJldCA9IGlvbWFwX2ZpbGVfYnVmZmVyZWRfd3JpdGUoaW9jYiwgZnJvbSwgb3BzLAomIzQzOwkJCU5VTEwsIE5VTEwpOwomIzQzOwomIzQzOwlpZiAocmV0ICZndDsgMCkKJiM0MzsJCXJldCA9IGdlbmVyaWNfd3JpdGVfc3luYyhpb2NiLCByZXQpOwomIzQzOwomIzQzO3VubG9jazoKJiM0MzsJaW5vZGVfdW5sb2NrKGlub2RlKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiAvKgogICogV2UgaGF2ZSBtb3N0bHkgTlVMTHMgaGVyZTogdGhlIGN1cnJlbnQgZGVmYXVsdHMgYXJlIE9LIGZvcgogICogdGhlIG1pbml4IGZpbGVzeXN0ZW0uCkBAIC0xNywxMyAmIzQzOzQzLDEzIEBACiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfb3BlcmF0aW9ucyA9IHsKIAkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiAJLnJlYWRfaXRlcgk9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsCi0JLndyaXRlX2l0ZXIJPSBnZW5lcmljX2ZpbGVfd3JpdGVfaXRlciwKJiM0MzsJLndyaXRlX2l0ZXIJPSBtaW5peF9maWxlX3dyaXRlX2l0ZXIsCiAJLm1tYXBfcHJlcGFyZQk9IGdlbmVyaWNfZmlsZV9tbWFwX3ByZXBhcmUsCiAJLmZzeW5jCQk9IHNpbXBsZV9mc3luYywKIAkuc3BsaWNlX3JlYWQJPSBmaWxlbWFwX3NwbGljZV9yZWFkLAogfTsKIAotc3RhdGljIGludCBtaW5peF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzO2ludCBtaW5peF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKGRlbnRyeSk7CmRpZmYgLS1naXQgYS9mcy9taW5peC9pbm9kZS5jIGIvZnMvbWluaXgvaW5vZGUuYwppbmRleCBkYWY4M2U0ZmYyNWM4Li4yYmY1ZWE5MjM2MGEyIDEwMDY0NAotLS0gYS9mcy9taW5peC9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L2lub2RlLmMKQEAgLTQzOSw2ICYjNDM7NDM5LDMxIEBAIHN0YXRpYyBpbnQgbWluaXhfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZikKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBzc2l6ZV90IG1pbml4X3dyaXRlYmFja19yYW5nZShzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLAomIzQzOwlzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1NjQgcG9zLCB1bnNpZ25lZCBpbnQgbGVuLCB1NjQgZW5kX3BvcykKJiM0Mzt7CiYjNDM7CWludCBlcnJvcjsKJiM0MzsKJiM0MzsJaWYgKHBvcyAmbHQ7IHdwYy0mZ3Q7aW9tYXAub2Zmc2V0IHx8CiYjNDM7CQkJcG9zICZndDs9IHdwYy0mZ3Q7aW9tYXAub2Zmc2V0ICYjNDM7IHdwYy0mZ3Q7aW9tYXAubGVuZ3RoKSB7CiYjNDM7CQlpZiAoSU5PREVfVkVSU0lPTih3cGMtJmd0O2lub2RlKSA9PSBNSU5JWF9WMSkKJiM0MzsJCQllcnJvciA9IFYxX21pbml4X2lvbWFwX2JlZ2luKHdwYy0mZ3Q7aW5vZGUsIHBvcywgbGVuLCBJT01BUF9XUklURSwKJiM0MzsJCQkJJmFtcDt3cGMtJmd0O2lvbWFwLCBOVUxMKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQllcnJvciA9IFYyX21pbml4X2lvbWFwX2JlZ2luKHdwYy0mZ3Q7aW5vZGUsIHBvcywgbGVuLCBJT01BUF9XUklURSwKJiM0MzsJCQkJJmFtcDt3cGMtJmd0O2lvbWFwLCBOVUxMKTsKJiM0MzsJCWlmIChlcnJvcikKJiM0MzsJCQlyZXR1cm4gZXJyb3I7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGlvbWFwX2FkZF90b19pb2VuZCh3cGMsIGZvbGlvLCBwb3MsIGVuZF9wb3MsIGxlbik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGViYWNrX29wcyBtaW5peF93cml0ZWJhY2tfb3BzID0gewomIzQzOwkud3JpdGViYWNrX3JhbmdlID0gbWluaXhfd3JpdGViYWNrX3JhbmdlLAomIzQzOwkud3JpdGViYWNrX3N1Ym1pdCA9IGlvbWFwX2lvZW5kX3dyaXRlYmFja19zdWJtaXQsCiYjNDM7fTsKJiM0MzsKIHN0YXRpYyBpbnQgbWluaXhfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsb2NrLAogCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpCiB7CkBAIC00NDgsMTcgJiM0Mzs0NzMsNDUgQEAgc3RhdGljIGludCBtaW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssCiAJCXJldHVybiBWMl9taW5peF9nZXRfYmxvY2soaW5vZGUsIGJsb2NrLCBiaF9yZXN1bHQsIGNyZWF0ZSk7CiB9CiAKLXN0YXRpYyBpbnQgbWluaXhfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKJiM0MzsvKiBUaGUgb2xkIG1pbml4X3dyaXRlcGFnZXMsIHByZXNlcnZlZCBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMuICovCiYjNDM7c3RhdGljIGludCBtaW5peF9ibG9ja193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKIAlyZXR1cm4gbXBhZ2Vfd3JpdGVwYWdlcyhtYXBwaW5nLCB3YmMsIG1pbml4X2dldF9ibG9jayk7CiB9CiAKJiM0MztzdGF0aWMgaW50IG1pbml4X3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiYjNDM7CQlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4IHdwYyA9IHsKJiM0MzsJCS5pbm9kZSA9IG1hcHBpbmctJmd0O2hvc3QsCiYjNDM7CQkud2JjID0gd2JjLAomIzQzOwkJLm9wcyA9ICZhbXA7bWluaXhfd3JpdGViYWNrX29wcywKJiM0MzsJfTsKJiM0MzsJcmV0dXJuIGlvbWFwX3dyaXRlcGFnZXMoJmFtcDt3cGMpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbWluaXhfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIoZm9saW8tJmd0O21hcHBpbmctJmd0O2hvc3QpOwomIzQzOwomIzQzOwlpb21hcF9iaW9fcmVhZF9mb2xpbyhmb2xpbywgb3BzKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qIFRoZSBvbGQgbWluaXhfcmVhZF9mb2xpbywgcHJlc2VydmVkIGZvciBkaXJlY3Rvcnkgb3BlcmF0aW9ucy4gKi8KJiM0MztzdGF0aWMgaW50IG1pbml4X2Jsb2NrX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJcmV0dXJuIGJsb2NrX3JlYWRfZnVsbF9mb2xpbyhmb2xpbywgbWluaXhfZ2V0X2Jsb2NrKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIG1pbml4X3JlYWRhaGVhZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhYykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIocmFjLSZndDttYXBwaW5nLSZndDtob3N0KTsKJiM0MzsKJiM0MzsJaW9tYXBfYmlvX3JlYWRhaGVhZChyYWMsIG9wcyk7CiYjNDM7fQomIzQzOwogaW50IG1pbml4X3ByZXBhcmVfY2h1bmsoc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuKQogewogCXJldHVybiBfX2Jsb2NrX3dyaXRlX2JlZ2luKGZvbGlvLCBwb3MsIGxlbiwgbWluaXhfZ2V0X2Jsb2NrKTsKQEAgLTQ4OCwyNiAmIzQzOzU0MSwzNSBAQCBzdGF0aWMgaW50IG1pbml4X3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYiwKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc2VjdG9yX3QgbWluaXhfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYmxvY2spCi17Ci0JcmV0dXJuIGdlbmVyaWNfYmxvY2tfYm1hcChtYXBwaW5nLGJsb2NrLG1pbml4X2dldF9ibG9jayk7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG1pbml4X2FvcHMgPSB7Ci0JLmRpcnR5X2ZvbGlvCT0gYmxvY2tfZGlydHlfZm9saW8sCi0JLmludmFsaWRhdGVfZm9saW8gPSBibG9ja19pbnZhbGlkYXRlX2ZvbGlvLAomIzQzOwkuZGlydHlfZm9saW8JPSBpb21hcF9kaXJ0eV9mb2xpbywKJiM0MzsJLmludmFsaWRhdGVfZm9saW8gPSBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvLAogCS5yZWFkX2ZvbGlvID0gbWluaXhfcmVhZF9mb2xpbywKJiM0MzsJLnJlYWRhaGVhZCA9IG1pbml4X3JlYWRhaGVhZCwKIAkud3JpdGVwYWdlcyA9IG1pbml4X3dyaXRlcGFnZXMsCiYjNDM7CS5taWdyYXRlX2ZvbGlvID0gZmlsZW1hcF9taWdyYXRlX2ZvbGlvLAomIzQzOwkuaXNfcGFydGlhbGx5X3VwdG9kYXRlID0gaW9tYXBfaXNfcGFydGlhbGx5X3VwdG9kYXRlLAomIzQzOwkucmVsZWFzZV9mb2xpbyA9IGlvbWFwX3JlbGVhc2VfZm9saW8sCiYjNDM7CS5lcnJvcl9yZW1vdmVfZm9saW8gPSBnZW5lcmljX2Vycm9yX3JlbW92ZV9mb2xpbywKJiM0Mzt9OwomIzQzOwomIzQzOy8qIEEgc3BlY2lhbCBhb3BzIGZvciBkaXJlY3RvcmllcyB0aGF0IGtlZXBzIHVzaW5nIHRoZSBidWZmZXIgaGVhZCBjaHVua3MsIGF0CiYjNDM7ICogbGVhc3QgZm9yIHRoZSB0aW1lIGJlaW5nLgomIzQzOyAqLwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG1pbml4X2Rpcl9hb3BzID0gewomIzQzOwkuZGlydHlfZm9saW8gPSBibG9ja19kaXJ0eV9mb2xpbywKJiM0MzsJLmludmFsaWRhdGVfZm9saW8gPSBibG9ja19pbnZhbGlkYXRlX2ZvbGlvLAomIzQzOwkucmVhZF9mb2xpbyA9IG1pbml4X2Jsb2NrX3JlYWRfZm9saW8sCiAJLndyaXRlX2JlZ2luID0gbWluaXhfd3JpdGVfYmVnaW4sCiAJLndyaXRlX2VuZCA9IGdlbmVyaWNfd3JpdGVfZW5kLAogCS5taWdyYXRlX2ZvbGlvID0gYnVmZmVyX21pZ3JhdGVfZm9saW8sCi0JLmJtYXAgPSBtaW5peF9ibWFwLAotCS5kaXJlY3RfSU8gPSBub29wX2RpcmVjdF9JTwomIzQzOwkud3JpdGVwYWdlcyA9IG1pbml4X2Jsb2NrX3dyaXRlcGFnZXMsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWluaXhfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0gewogCS5nZXRfbGluawk9IHBhZ2VfZ2V0X2xpbmssCiAJLmdldGF0dHIJPSBtaW5peF9nZXRhdHRyLAomIzQzOwkuc2V0YXR0cgk9IG1pbml4X3NldGF0dHIsCiB9OwogCiB2b2lkIG1pbml4X3NldF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBkZXZfdCByZGV2KQpAQCAtNTE5LDcgJiM0Mzs1ODEsNyBAQCB2b2lkIG1pbml4X3NldF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBkZXZfdCByZGV2KQogCX0gZWxzZSBpZiAoU19JU0RJUihpbm9kZS0mZ3Q7aV9tb2RlKSkgewogCQlpbm9kZS0mZ3Q7aV9vcCA9ICZhbXA7bWluaXhfZGlyX2lub2RlX29wZXJhdGlvbnM7CiAJCWlub2RlLSZndDtpX2ZvcCA9ICZhbXA7bWluaXhfZGlyX29wZXJhdGlvbnM7Ci0JCWlub2RlLSZndDtpX21hcHBpbmctJmd0O2Ffb3BzID0gJmFtcDttaW5peF9hb3BzOwomIzQzOwkJaW5vZGUtJmd0O2lfbWFwcGluZy0mZ3Q7YV9vcHMgPSAmYW1wO21pbml4X2Rpcl9hb3BzOwogCX0gZWxzZSBpZiAoU19JU0xOSyhpbm9kZS0mZ3Q7aV9tb2RlKSkgewogCQlpbm9kZS0mZ3Q7aV9vcCA9ICZhbXA7bWluaXhfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOwogCQlpbm9kZV9ub2hpZ2htZW0oaW5vZGUpOwpAQCAtNzg2LDQgJiM0Mzs4NDgsMyBAQCBtb2R1bGVfaW5pdChpbml0X21pbml4X2ZzKQogbW9kdWxlX2V4aXQoZXhpdF9taW5peF9mcykKIE1PRFVMRV9ERVNDUklQVElPTigmIzM0O01pbml4IGZpbGUgc3lzdGVtJiMzNDspOwogTU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7Ci0KZGlmZiAtLWdpdCBhL2ZzL21pbml4L2lvbWFwLmMgYi9mcy9taW5peC9pb21hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjkwZTAxNmFhYTAxZWEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9pb21hcC5jCkBAIC0wLDAgJiM0MzsxLDEyMiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsvKgomIzQzOyAqIGlvbWFwIGZ1bmN0aW9ucyBmb3IgbWluaXguCiYjNDM7ICovCiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1pbml4X2NoYWluX2NsZWFudXAoSW5kaXJlY3QgKmNoYWluLCBJbmRpcmVjdCAqcGFydGlhbCkKJiM0Mzt7CiYjNDM7CXdoaWxlIChwYXJ0aWFsICZndDsgY2hhaW4pIHsKJiM0MzsJCWJyZWxzZShwYXJ0aWFsLSZndDtiaCk7CiYjNDM7CQlwYXJ0aWFsLS07CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1pbml4X2lvbWFwX3NldF9tYXBwZWQoc3RydWN0IGlvbWFwICppb21hcCwgc2VjdG9yX3QgcGh5cywKJiM0MzsJCXVuc2lnbmVkIGludCBibGtiaXRzLCBzZWN0b3JfdCBpYmxvY2spCiYjNDM7ewomIzQzOwlpb21hcC0mZ3Q7dHlwZSA9IElPTUFQX01BUFBFRDsKJiM0MzsJaW9tYXAtJmd0O2FkZHIgPSAodTY0KXBoeXMgJmx0OyZsdDsgYmxrYml0czsKJiM0MzsJaW9tYXAtJmd0O2xlbmd0aCA9IDEgJmx0OyZsdDsgYmxrYml0czsKJiM0MzsJaW9tYXAtJmd0O29mZnNldCA9ICh1NjQpaWJsb2NrICZsdDsmbHQ7IGJsa2JpdHM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtaW5peF9pb21hcF9zZXRfaG9sZShzdHJ1Y3QgaW9tYXAgKmlvbWFwLAomIzQzOwkJdW5zaWduZWQgaW50IGJsa2JpdHMsIHNlY3Rvcl90IGlibG9jaykKJiM0Mzt7CiYjNDM7CWlvbWFwLSZndDt0eXBlID0gSU9NQVBfSE9MRTsKJiM0MzsJaW9tYXAtJmd0O2FkZHIgPSBJT01BUF9OVUxMX0FERFI7CiYjNDM7CWlvbWFwLSZndDtsZW5ndGggPSAxICZsdDsmbHQ7IGJsa2JpdHM7CiYjNDM7CWlvbWFwLSZndDtvZmZzZXQgPSAodTY0KWlibG9jayAmbHQ7Jmx0OyBibGtiaXRzOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIG1pbml4X2lvbWFwX2JlZ2luIC0gbWFwIGEgZmlsZSByYW5nZSB0byBkaXNrIGJsb2Nrcy4gSXQgYWN0cyBhcyBhIHJlcGxhY2VtZW50CiYjNDM7ICogZm9yIGdldF9ibG9jayBpbiBpdHJlZV9jb21tb24uYywgYXQgbGVhc3QgaW4gdGhlIGltcG9ydGFudCB3YXlzLCBhbmQgaXMKJiM0MzsgKiBhZGFwdGVkIGZyb20gaXQsIGJ1dCBpdCB1c2VzIGlvbWFwIGluc3RlYWQgb2YgYnVmZmVyX2hlYWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBtaW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLAomIzQzOwl1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKQomIzQzO3sKJiM0MzsJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLSZndDtpX3NiOwomIzQzOwl1bnNpZ25lZCBpbnQgYmxrYml0cyA9IHNiLSZndDtzX2Jsb2Nrc2l6ZV9iaXRzOwomIzQzOwlzZWN0b3JfdCBpYmxvY2sgPSBvZmZzZXQgJmd0OyZndDsgYmxrYml0czsKJiM0MzsJaW50IGNyZWF0ZSA9IGZsYWdzICZhbXA7IElPTUFQX1dSSVRFOwomIzQzOwomIzQzOwlpbnQgb2Zmc2V0c1tERVBUSF07CiYjNDM7CUluZGlyZWN0IGNoYWluW0RFUFRIXTsKJiM0MzsJSW5kaXJlY3QgKnBhcnRpYWw7CiYjNDM7CWludCBkZXB0aCA9IGJsb2NrX3RvX3BhdGgoaW5vZGUsIGlibG9jaywgb2Zmc2V0cyk7CiYjNDM7CWludCBsZWZ0OwomIzQzOwlpbnQgZXJyID0gLUVJTzsKJiM0MzsKJiM0MzsJc2VjdG9yX3QgcGh5czsKJiM0MzsKJiM0MzsJLyogYmxvY2sgaXMgYmV5b25kIG1heCBmaWxlIHNpemUgKi8KJiM0MzsJaWYgKGRlcHRoID09IDApCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaW9tYXAtJmd0O2JkZXYgPSBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19iZGV2OwomIzQzOwomIzQzO3JlcmVhZDoKJiM0MzsJcGFydGlhbCA9IGdldF9icmFuY2goaW5vZGUsIGRlcHRoLCBvZmZzZXRzLCBjaGFpbiwgJmFtcDtlcnIpOwomIzQzOwomIzQzOwkvKiBTaW1wbGVzdCBjYXNlIC0gYmxvY2sgZm91bmQsIG5vIGFsbG9jYXRpb24gbmVlZGVkICovCiYjNDM7CWlmICghcGFydGlhbCkgewomIzQzOwkJaW9tYXAtJmd0O2ZsYWdzID0gMDsKJiM0MzsJCXBoeXMgPSBibG9ja190b19jcHUoY2hhaW5bZGVwdGggLSAxXS5rZXkpOwomIzQzOwkJcGFydGlhbCA9IGNoYWluJiM0MztkZXB0aC0xOwomIzQzOwkJbWluaXhfaW9tYXBfc2V0X21hcHBlZChpb21hcCwgcGh5cywgYmxrYml0cywgaWJsb2NrKTsKJiM0MzsJCW1pbml4X2NoYWluX2NsZWFudXAoY2hhaW4sIHBhcnRpYWwpOwomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBOZXh0IHNpbXBsZSBjYXNlIC0gcGxhaW4gbG9va3VwIG9yIGZhaWxlZCByZWFkIG9mIGluZGlyZWN0IGJsb2NrICovCiYjNDM7CWlmICghY3JlYXRlIHx8IGVyciA9PSAtRUlPKSB7CiYjNDM7CQltaW5peF9pb21hcF9zZXRfaG9sZShpb21hcCwgYmxrYml0cywgaWJsb2NrKTsKJiM0MzsJCW1pbml4X2NoYWluX2NsZWFudXAoY2hhaW4sIHBhcnRpYWwpOwomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGlzIGlzIGhlbGQgb3ZlciBmcm9tIHRoZSBvcmlnaW5hbCBnZXRfYmxvY2sgbG9naWMsIHdoZXJlIGl0CiYjNDM7CSAqIGFjdGVkIGFzIGEgZ3VhcmQgaW4gY2FzZSB0cnVuY2F0ZSgpIGRlbGV0ZWQgYmxvY2tzIGZyb20gdW5kZXIgdGhhdAomIzQzOwkgKiBmdW5jdGlvbi4gVGhlcmUgc2hvdWxkIG5vdCBiZSBhIHJhY2Ugd2l0aCBpb21hcCBvcGVyYXRpb25zLCBidXQKJiM0MzsJICogd2UmIzM5O3JlIHJldGFpbmluZyB0aGUgZGVmZW5zaXZlIGNvZGluZyBoZXJlIHRvIGJlIGV4dHJhIHNhZmUganVzdCBpbgomIzQzOwkgKiBjYXNlLgomIzQzOwkgKi8KJiM0MzsJaWYgKGVyciA9PSAtRUFHQUlOKSB7CiYjNDM7CQltaW5peF9jaGFpbl9jbGVhbnVwKGNoYWluLCBwYXJ0aWFsKTsKJiM0MzsJCWdvdG8gcmVyZWFkOwomIzQzOwl9CiYjNDM7CiYjNDM7CWxlZnQgPSAoY2hhaW4gJiM0MzsgZGVwdGgpIC0gcGFydGlhbDsKJiM0MzsJZXJyID0gYWxsb2NfYnJhbmNoKGlub2RlLCBsZWZ0LCBvZmZzZXRzICYjNDM7IChwYXJ0aWFsIC0gY2hhaW4pLCBwYXJ0aWFsKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJbWluaXhfY2hhaW5fY2xlYW51cChjaGFpbiwgcGFydGlhbCk7CiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChzcGxpY2VfYnJhbmNoKGlub2RlLCBjaGFpbiwgcGFydGlhbCwgbGVmdCkgJmx0OyAwKSB7CiYjNDM7CQltaW5peF9jaGFpbl9jbGVhbnVwKGNoYWluLCBwYXJ0aWFsKTsKJiM0MzsJCWdvdG8gcmVyZWFkOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFN1Y2Nlc3NmdWwgYWxsb2NhdGlvbiwgbWFwcGluZyBpdC4gKi8KJiM0MzsJaW9tYXAtJmd0O2ZsYWdzID0gSU9NQVBfRl9ORVc7CiYjNDM7CXBoeXMgPSBibG9ja190b19jcHUoY2hhaW5bZGVwdGggLSAxXS5rZXkpOwomIzQzOwltaW5peF9pb21hcF9zZXRfbWFwcGVkKGlvbWFwLCBwaHlzLCBibGtiaXRzLCBpYmxvY2spOwomIzQzOwltaW5peF9jaGFpbl9jbGVhbnVwKGNoYWluLCBwYXJ0aWFsKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBtaW5peF9pb21hcF9lbmQgZW5kcyB1cCBiZWluZyBhIG5vcDsgc2luY2UgbWluaXggZG9lc24mIzM5O3QgaGF2ZSBhbnkgZXh0ZW50cyBvcgomIzQzOyAqIHRyYW5zYWN0aW9ucyB0byB3b3JyeSBhYm91dCwgdGhlcmUgaXNuJiMzOTt0IGFueXRoaW5nIHRvIHVwZGF0ZSBoZXJlLiBUaGUgb24tZGlzawomIzQzOyAqIGluZGlyZWN0IGJsb2NrcyBnZXQgZGlydGllZCBpbiBtaW5peF9pb21hcF9iZWdpbi4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IG1pbml4X2lvbWFwX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLAomIzQzOwlzc2l6ZV90IHdyaXR0ZW4sIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KZGlmZiAtLWdpdCBhL2ZzL21pbml4L2l0cmVlX2NvbW1vbi5jIGIvZnMvbWluaXgvaXRyZWVfY29tbW9uLmMKaW5kZXggYzNjZDJjNzVhZjljZS4uZDczYWIxY2FhY2ZlYyAxMDA2NDQKLS0tIGEvZnMvbWluaXgvaXRyZWVfY29tbW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbWluaXgvaXRyZWVfY29tbW9uLmMKQEAgLTMxMSw3ICYjNDM7MzExLDE1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0cnVuY2F0ZSAoc3RydWN0IGlub2RlICogaW5vZGUpCiAJbG9uZyBpYmxvY2s7CiAKIAlpYmxvY2sgPSAoaW5vZGUtJmd0O2lfc2l6ZSAmIzQzOyBzYi0mZ3Q7c19ibG9ja3NpemUgLTEpICZndDsmZ3Q7IHNiLSZndDtzX2Jsb2Nrc2l6ZV9iaXRzOwotCWJsb2NrX3RydW5jYXRlX3BhZ2UoaW5vZGUtJmd0O2lfbWFwcGluZywgaW5vZGUtJmd0O2lfc2l6ZSwgZ2V0X2Jsb2NrKTsKJiM0MzsKJiM0MzsJLyogRGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGlub2RlIGJlaW5nIHRydW5jYXRlZCBpcyBhIGRpcmVjdG9yeSBvciBub3QsCiYjNDM7CSAqIHdlIG5lZWQgdG8gZWl0aGVyIGNhbGwgaW9tYXBfdHJ1bmNhdGVfcGFnZSBvciBibG9ja190cnVuY2F0ZV9wYWdlLgomIzQzOwkgKi8KJiM0MzsJaWYgKFNfSVNESVIoaW5vZGUtJmd0O2lfbW9kZSkpCiYjNDM7CQlibG9ja190cnVuY2F0ZV9wYWdlKGlub2RlLSZndDtpX21hcHBpbmcsIGlub2RlLSZndDtpX3NpemUsIGdldF9ibG9jayk7CiYjNDM7CWVsc2UKJiM0MzsJCWlvbWFwX3RydW5jYXRlX3BhZ2UoaW5vZGUsIGlub2RlLSZndDtpX3NpemUsIE5VTEwsCiYjNDM7CQkJbWluaXhfaW9tYXBfb3BzX3Zlcihpbm9kZSksIE5VTEwsIE5VTEwpOwogCiAJbiA9IGJsb2NrX3RvX3BhdGgoaW5vZGUsIGlibG9jaywgb2Zmc2V0cyk7CiAJaWYgKCFuKQpkaWZmIC0tZ2l0IGEvZnMvbWluaXgvaXRyZWVfdjEuYyBiL2ZzL21pbml4L2l0cmVlX3YxLmMKaW5kZXggMWZlZDkwNjA0MmFhOC4uNThjMjlmNDQ0M2QzNyAxMDA2NDQKLS0tIGEvZnMvbWluaXgvaXRyZWVfdjEuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9pdHJlZV92MS5jCkBAIC00OSw2ICYjNDM7NDksMTggQEAgc3RhdGljIGludCBibG9ja190b19wYXRoKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBsb25nIGJsb2NrLCBpbnQgb2Zmc2V0c1tERVBUSF0pCiB9CiAKICNpbmNsdWRlICYjMzQ7aXRyZWVfY29tbW9uLmMmIzM0OwomIzQzOy8qIE5PVEEgQkVORToKJiM0MzsgKgomIzQzOyAqIFRoaXMgaXMgaWNreSB0byBtZSwgYnV0IGF0IHRoZSBzYW1lIHRpbWUgaGF2aW5nIGl0IGJlIGEgc3RhbmRhbG9uZSBDIGZpbGUKJiM0MzsgKiB0aGF0JiMzOTtzIGNvbXBpbGVkIHRvIG9iamVjdCBmb3JtIGFuZCBsaW5rZWQgc2VwYXJhdGVseSBsaWtlIGl0IGlzIGluIHhpYWZzIGlzCiYjNDM7ICogbXVjaCBuYXN0aWVyIGluIG1pbml4IGJlY2F1c2Ugb2YgdGhlIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgbWluaXggZnMgdGhhdAomIzQzOyAqIGhhdmUgc29tZSB2ZXJ5LCB2ZXJ5IGRpZmZlcmVudCBhc3BlY3RzLCBsaWtlIHRoZSBzaXplIG9mIGJsb2NrX3QuIEkgZG9uJiMzOTt0CiYjNDM7ICogbGlrZSBpdCwgYnV0IHNpbmNlIG1pbml4IGFscmVhZHkgaGFzIHRoaXMgcGF0dGVybiB3aGVyZSBhIGNvbW1vbiBpdHJlZSBmaWxlCiYjNDM7ICogaXMgaW5jbHVkZWQgaW4gdGhlIGl0cmVlX3YxIGFuZCBpdHJlZV92MihhbmQgdjMpIGZpbGVzLCBJJiMzOTttIGluY2x1ZGluZyBpb21hcC5jCiYjNDM7ICogaW4gdGhlc2UgZmlsZXMgYXMgd2VsbC4gSXQgZG9lcyBhdCBsZWFzdCBhdm9pZCBleHBvcnRpbmcgc29tZSBjdXJyZW50bHkKJiM0MzsgKiBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlbiYjMzk7dCBuZWVkZWQgYW55d2hlcmUgYnV0IGl0cmVlX2NvbW1vbi5jIGFuZCBpb21hcC5jLgomIzQzOyAqLwomIzQzOyNpbmNsdWRlICYjMzQ7aW9tYXAuYyYjMzQ7CiAKIGludCBWMV9taW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssCiAJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSkKQEAgLTYxLDcgJiM0Mzs3MywxOCBAQCB2b2lkIFYxX21pbml4X3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqIGlub2RlKQogCXRydW5jYXRlKGlub2RlKTsKIH0KIAotdW5zaWduZWQgVjFfbWluaXhfYmxvY2tzKGxvZmZfdCBzaXplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQomIzQzO3Vuc2lnbmVkIGludCBWMV9taW5peF9ibG9ja3MobG9mZl90IHNpemUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJcmV0dXJuIG5ibG9ja3Moc2l6ZSwgc2IpOwogfQomIzQzOwomIzQzO2ludCBWMV9taW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLAomIzQzOwl1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKQomIzQzO3sKJiM0MzsJcmV0dXJuIG1pbml4X2lvbWFwX2JlZ2luKGlub2RlLCBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsIGlvbWFwLCBzcmNtYXApOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYxX21pbml4X2lvbWFwX29wcyA9IHsKJiM0MzsJLmlvbWFwX2JlZ2luID0gVjFfbWluaXhfaW9tYXBfYmVnaW4sCiYjNDM7CS5pb21hcF9lbmQgICA9IG1pbml4X2lvbWFwX2VuZCwKJiM0Mzt9OwpkaWZmIC0tZ2l0IGEvZnMvbWluaXgvaXRyZWVfdjIuYyBiL2ZzL21pbml4L2l0cmVlX3YyLmMKaW5kZXggOWQwMGYzMWEyZDlkMS4uZmM3YTVhZThmYTFjYSAxMDA2NDQKLS0tIGEvZnMvbWluaXgvaXRyZWVfdjIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9pdHJlZV92Mi5jCkBAIC01Nyw2ICYjNDM7NTcsMTAgQEAgc3RhdGljIGludCBibG9ja190b19wYXRoKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBsb25nIGJsb2NrLCBpbnQgb2Zmc2V0c1tERVBUSF0pCiB9CiAKICNpbmNsdWRlICYjMzQ7aXRyZWVfY29tbW9uLmMmIzM0OwomIzQzOy8qIFNlZSB0aGUgbm90ZSBpbiBpdHJlZV92MSBpbiBhIGNvbW1lbnQgdGhhdCBzdGFydHMgJiMzNDtOT1RBIEJFTkUmIzM0OyBmb3IgYW4KJiM0MzsgKiBleHBsYW5hdGlvbiBmb3Igd2h5IGlvbWFwLmMgaXMgaW5jbHVkZWQgaGVyZS4KJiM0MzsgKi8KJiM0MzsjaW5jbHVkZSAmIzM0O2lvbWFwLmMmIzM0OwogCiBpbnQgVjJfbWluaXhfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBsb25nIGJsb2NrLAogCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpCkBAIC02OSw3ICYjNDM7NzMsMTggQEAgdm9pZCBWMl9taW5peF90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkKIAl0cnVuY2F0ZShpbm9kZSk7CiB9CiAKLXVuc2lnbmVkIFYyX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKJiM0Mzt1bnNpZ25lZCBpbnQgVjJfbWluaXhfYmxvY2tzKGxvZmZfdCBzaXplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCXJldHVybiBuYmxvY2tzKHNpemUsIHNiKTsKIH0KJiM0MzsKJiM0MztpbnQgVjJfbWluaXhfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCwKJiM0MzsJdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBzdHJ1Y3QgaW9tYXAgKnNyY21hcCkKJiM0Mzt7CiYjNDM7CXJldHVybiBtaW5peF9pb21hcF9iZWdpbihpbm9kZSwgb2Zmc2V0LCBsZW5ndGgsIGZsYWdzLCBpb21hcCwgc3JjbWFwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMl9taW5peF9pb21hcF9vcHMgPSB7CiYjNDM7CS5pb21hcF9iZWdpbiA9IFYyX21pbml4X2lvbWFwX2JlZ2luLAomIzQzOwkuaW9tYXBfZW5kICAgPSBtaW5peF9pb21hcF9lbmQsCiYjNDM7fTsKZGlmZiAtLWdpdCBhL2ZzL21pbml4L21pbml4LmggYi9mcy9taW5peC9taW5peC5oCmluZGV4IDc4NzIyY2UyMmUxZTEuLjkwMzU2MDRjNjhjYTEgMTAwNjQ0Ci0tLSBhL2ZzL21pbml4L21pbml4LmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbWluaXgvbWluaXguaApAQCAtNSw2ICYjNDM7NSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvZnMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wYWdlbWFwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWluaXhfZnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW9tYXAuaCZndDsKIAogI2RlZmluZSBJTk9ERV9WRVJTSU9OKGlub2RlKQltaW5peF9zYihpbm9kZS0mZ3Q7aV9zYiktJmd0O3NfdmVyc2lvbgogI2RlZmluZSBNSU5JWF9WMQkJMHgwMDAxCQkvKiBvcmlnaW5hbCBtaW5peCBmcyAqLwpAQCAtNTcsNiAmIzQzOzU4LDggQEAgdm9pZCBtaW5peF9mcmVlX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGxvbmcgYmxvY2spOwogdW5zaWduZWQgbG9uZyBtaW5peF9jb3VudF9mcmVlX2Jsb2NrcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIGludCBtaW5peF9nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKiwgY29uc3Qgc3RydWN0IHBhdGggKiwKIAkJc3RydWN0IGtzdGF0ICosIHUzMiwgdW5zaWduZWQgaW50KTsKJiM0MztpbnQgbWluaXhfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAomIzQzOwlzdHJ1Y3QgaWF0dHIgKmF0dHIpOwogaW50IG1pbml4X3ByZXBhcmVfY2h1bmsoc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuKTsKIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbWluaXhfZ2V0X21ldGFkYXRhX2JocyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIApAQCAtNzYsMTMgJiM0Mzs3OSwyMyBAQCBpbnQgbWluaXhfbWFrZV9lbXB0eShzdHJ1Y3QgaW5vZGUqLCBzdHJ1Y3QgaW5vZGUqKTsKIGludCBtaW5peF9lbXB0eV9kaXIoc3RydWN0IGlub2RlKik7CiBpbnQgbWluaXhfc2V0X2xpbmsoc3RydWN0IG1pbml4X2Rpcl9lbnRyeSAqZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCXN0cnVjdCBpbm9kZSAqaW5vZGUpOwomIzQzOwogc3RydWN0IG1pbml4X2Rpcl9lbnRyeSAqbWluaXhfZG90ZG90KHN0cnVjdCBpbm9kZSosIHN0cnVjdCBmb2xpbyAqKik7CiBpbm9fdCBtaW5peF9pbm9kZV9ieV9uYW1lKHN0cnVjdCBkZW50cnkqKTsKIAomIzQzO2ludCBWMV9taW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LAomIzQzOwlsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsCiYjNDM7CXN0cnVjdCBpb21hcCAqc3JjbWFwKTsKJiM0MztpbnQgVjJfbWluaXhfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwKJiM0MzsJbG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLAomIzQzOwlzdHJ1Y3QgaW9tYXAgKnNyY21hcCk7CiYjNDM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWluaXhfZmlsZV9pbm9kZV9vcGVyYXRpb25zOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X2Rpcl9pbm9kZV9vcGVyYXRpb25zOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWluaXhfZmlsZV9vcGVyYXRpb25zOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWluaXhfZGlyX29wZXJhdGlvbnM7CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgVjFfbWluaXhfaW9tYXBfb3BzOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYyX21pbml4X2lvbWFwX29wczsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbWluaXhfc2JfaW5mbyAqbWluaXhfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKQEAgLTk0LDExICYjNDM7MTA3LDE3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1pbml4X2lub2RlX2luZm8gKm1pbml4X2koc3RydWN0IGlub2RlICppbm9kZSkKIAlyZXR1cm4gY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgbWluaXhfaW5vZGVfaW5mbywgdmZzX2lub2RlKTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBtaW5peF9ibG9ja3NfbmVlZGVkKHVuc2lnbmVkIGJpdHMsIHVuc2lnbmVkIGJsb2Nrc2l6ZSkKJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBtaW5peF9ibG9ja3NfbmVlZGVkKHVuc2lnbmVkIGludCBiaXRzLCB1bnNpZ25lZCBpbnQgYmxvY2tzaXplKQogewogCXJldHVybiBESVZfUk9VTkRfVVBfUE9XMihiaXRzLCBibG9ja3NpemUgKiA4KTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IGlvbWFwX29wcyAqbWluaXhfaW9tYXBfb3BzX3ZlcihzdHJ1Y3QgaW5vZGUgKmlub2RlKQomIzQzO3sKJiM0MzsJcmV0dXJuIChJTk9ERV9WRVJTSU9OKGlub2RlKSA9PSBNSU5JWF9WMSkgPwomIzQzOwkJJmFtcDtWMV9taW5peF9pb21hcF9vcHMgOiAmYW1wO1YyX21pbml4X2lvbWFwX29wczsKJiM0Mzt9CiYjNDM7CiAjaWYgZGVmaW5lZChDT05GSUdfTUlOSVhfRlNfTkFUSVZFX0VORElBTikgJmFtcDsmYW1wOyBcCiAJZGVmaW5lZChDT05GSUdfTUlOSVhfRlNfQklHX0VORElBTl8xNkJJVF9JTkRFWEVEKQogCkBAIC0xMjgsNyAmIzQzOzE0Nyw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbWluaXhfYmxvY2tzX25lZWRlZCh1bnNpZ25lZCBiaXRzLCB1bnNpZ25lZCBibG9ja3NpemUpCiAgKiBiaWctZW5kaWFuIDE2Yml0IGluZGV4ZWQgYml0bWFwcwogICovCiAKLXN0YXRpYyBpbmxpbmUgaW50IG1pbml4X2ZpbmRfZmlyc3RfemVyb19iaXQoY29uc3Qgdm9pZCAqdmFkZHIsIHVuc2lnbmVkIHNpemUpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWluaXhfZmluZF9maXJzdF96ZXJvX2JpdChjb25zdCB2b2lkICp2YWRkciwgdW5zaWduZWQgaW50IHNpemUpCiB7CiAJY29uc3QgdW5zaWduZWQgc2hvcnQgKnAgPSB2YWRkciwgKmFkZHIgPSB2YWRkcjsKIAl1bnNpZ25lZCBzaG9ydCBudW07CmRpZmYgLS1naXQgYS9mcy9taW5peC9uYW1laS5jIGIvZnMvbWluaXgvbmFtZWkuYwppbmRleCA1NTI1YmEzNjdlZDc0Li41MmUxMTUwMTNhYmY4IDEwMDY0NAotLS0gYS9mcy9taW5peC9uYW1laS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L25hbWVpLmMKQEAgLTYsNiAmIzQzOzYsNyBAQAogICovCiAKICNpbmNsdWRlICYjMzQ7bWluaXguaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lvbWFwLmgmZ3Q7CiAKIHN0YXRpYyBpbnQgYWRkX25vbmRpcihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CkBAIC04NCwxMiAmIzQzOzg1LDE2IEBAIHN0YXRpYyBpbnQgbWluaXhfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiAJCXJldHVybiBQVFJfRVJSKGlub2RlKTsKIAogCW1pbml4X3NldF9pbm9kZShpbm9kZSwgMCk7Ci0JZXJyID0gcGFnZV9zeW1saW5rKGlub2RlLCBzeW1uYW1lLCBpKTsKJiM0MzsJZXJyID0gaW9tYXBfc3ltbGlua193cml0ZShpbm9kZSwgc3ltbmFtZSwgaSwgbWluaXhfaW9tYXBfb3BzX3Zlcihpbm9kZSksIE5VTEwsIE5VTEwpOwomIzQzOwogCWlmICh1bmxpa2VseShlcnIpKSB7CiAJCWlub2RlX2RlY19saW5rX2NvdW50KGlub2RlKTsKIAkJaXB1dChpbm9kZSk7CiAJCXJldHVybiBlcnI7CiAJfQomIzQzOwomIzQzOwlpX3NpemVfd3JpdGUoaW5vZGUsIGkgLSAxKTsKJiM0MzsKIAlyZXR1cm4gYWRkX25vbmRpcihkZW50cnksIGlub2RlKTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb21hcC5oIGIvaW5jbHVkZS9saW51eC9pb21hcC5oCmluZGV4IDhjNzU0ZWI5NzRmYmYuLmFiMjdhM2E1YjhkMmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW9tYXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmgKQEAgLTQ3MSw2ICYjNDM7NDcxLDkgQEAgbG9mZl90IGlvbWFwX3NlZWtfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LAogCQljb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMpOwogc2VjdG9yX3QgaW9tYXBfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYm5vLAogCQljb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMpOwomIzQzO2ludCBpb21hcF9zeW1saW5rX3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKnRhcmdldCwgaW50IGxlbiwKJiM0MzsJCWNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcywKJiM0MzsJCWNvbnN0IHN0cnVjdCBpb21hcF93cml0ZV9vcHMgKndyaXRlX29wcywgdm9pZCAqcHJpdmF0ZSk7CiAKIC8qCiAgKiBGbGFncyBmb3IgaW9tYXBfaW9lbmQtJmd0O2lvX2ZsYWdzLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM3OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDExODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNaW5peCBJL09tYXAgQ29udmVyc2lvbiBmb3IgU3ltbGlua3MqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIHRoYXQmIzM5O3Mgc3dhcHBpbmcgb3V0IHRoZSBvbGQgYGJ1ZmZlcl9oZWFkYC1iYXNlZCBibG9jayBJL08gaW4gdGhlIE1pbml4IGZpbGVzeXN0ZW0gZm9yIGBpb21hcGAgYnVmZmVyZWQgSS9PLiBUaGUgbWFpbiB0aGluZyB0aGF0IGNhdWdodCBteSBleWUgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgaW9tYXBfc3ltbGlua193cml0ZWAgYW5kIGl0cyB1c2UgaW4gYGZzL21pbml4L25hbWVpLmNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcy4KClRoZSBjb2RlJiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGl0JiMzOTtzIGFkZGluZyBgaW9tYXBfc3ltbGlua193cml0ZWAgdG8gYGZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNgIGFuZCB1cGRhdGluZyB2YXJpb3VzIE1pbml4IGZpbGVzIHRvIHVzZSB0aGUgbmV3IGZ1bmN0aW9uLiBMb29raW5nIGF0IHRoZSBkZWZpbml0aW9uLCBgaW9tYXBfc3ltbGlua193cml0ZWAgdGFrZXMgYSBzeW1saW5rIHRhcmdldCBzdHJpbmcgYW5kIGl0cyBsZW5ndGguIEl0IGNyZWF0ZXMgYSBga3ZlY2AsIGFuIGBpb21hcF9pdGVyYCwgYW5kIHVzZXMgYGlvdl9pdGVyX2t2ZWNgIHRvIHBvaW50IGFuIGBpb3ZgIHRvIHRoZSBnaXZlbiB0YXJnZXQgc3RyaW5nLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIGBsZW4gLSAxYCB1c2FnZSBpbiBgaW92X2xlbmAuIEluIGBtaW5peF9zeW1saW5rYCwgdGhlIGxlbmd0aCBgaWAgaXMgZGV0ZXJtaW5lZCBhcyBgc3RybGVuKHN5bW5hbWUpICYjNDM7IDFgIHdoaWNoIGluY2x1ZGVkIHRoZSBudWxsIHRlcm1pbmF0b3IuIGBpb21hcF9zeW1saW5rX3dyaXRlYCByZWNlaXZlcyBgbGVuYCBhcyBgaWAsIGJ1dCB1c2VzIGBsZW4gLSAxYCwgY29ycmVzcG9uZGluZyB0byBqdXN0IGBzdHJsZW4oc3ltbmFtZSlgLiBUaGlzIGxvb2tzIGEgYml0IGRpZmZlcmVudCBmcm9tIGhvdyBgcGFnZV9zeW1saW5rYCBoYW5kbGVkIHRoaXMsIHdoZXJlIGBwYWdlX3N5bWxpbmsoaW5vZGUsIHN5bW5hbWUsIGkpYCB3cm90ZSBgaWAgYnl0ZXMsIGluY2x1ZGluZyB0aGUgbnVsbCB0ZXJtaW5hdG9yLiBJdCBoYXMgYmVlbiBhIHdoaWxlLCBidXQgSSBzZWVtIHRvIHJlY2FsbCB0aGUgYHBhZ2Vfc3ltbGlua2Agcm91dGluZSB3cml0aW5nIHRoZSBudWxsIHRlcm1pbmF0b3IuIFNvLCBpdCBhcHBlYXJzIHRoYXQgYGlvbWFwX3N5bWxpbmtfd3JpdGVgIGlzIHdyaXRpbmcgYHN0cmxlbihzeW1uYW1lKWAgYnl0ZXMgaW5zdGVhZCBvZiBgc3RybGVuKHN5bW5hbWUpICYjNDM7IDFgLiBUaGlzIGNvdWxkIGxlYXZlIHRoZSByZXN0IG9mIHRoZSBibG9jayBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkLCBhbmQgdGhpcyBjb3VsZCBiZSBhIHNlY3VyaXR5IHJpc2suCgpUaGUga2V5IHF1ZXN0aW9uIHRoZW4gaXMsIHdoYXQgaGFwcGVucyB0byB0aGUgcmVzdCBvZiB0aGUgYmxvY2s/IFdpdGggYSBibG9jayBzaXplIG9mLCBzYXksIDEwMjQgYnl0ZXMgYW5kIGEgc3ltbGluayBvZiAxMCBieXRlcywgYXJlIHRoZSByZW1haW5pbmcgMTAxNCBieXRlcyBsZWZ0IHVuaW5pdGlhbGl6ZWQ/IEkgbmVlZCB0byBkaWcgaW50byBgaW9tYXBfd3JpdGVfaXRlcmAgb3IgYGlvbWFwX3dyaXRlX2JlZ2luYCB0byBzZWUgaG93IHRoZSB3cml0ZSBvcGVyYXRpb24gaGFuZGxlcyB0aGlzLiBJIHN1c3BlY3QgdGhhdCB3aGVuIHdyaXRpbmcgdG8gYSBuZXcgYmxvY2ssIHRoZSBmdW5jdGlvbiB3aWxsIGFsbG9jYXRlIGEgZm9saW8gYW5kIHplcm8gdGhlIHVud3JpdHRlbiBwYXJ0cy4gTm93LCBgaW9tYXBfd3JpdGVfaXRlcmAgY2FsbHMgYGlvbWFwX3dyaXRlX2JlZ2luYCwgd2hpY2ggY2FsbHMgYGlvbWFwX2dldF9mb2xpb2AsIHNvIEkgc2hvdWxkIHByb2JhYmx5IHZlcmlmeSBteSBhc3N1bXB0aW9ucy4gSG9wZWZ1bGx5LCBgaW9tYXBfZ2V0X2ZvbGlvYCBvciBgaW9tYXBfd3JpdGVfYmVnaW5gIHplcm8gdGhlIGZvbGlvIGlmIGl0IGlzIGEgbmV3IGJsb2NrLCBpZiBzbywgd2UgY2FuIGJlIHN1cmUgdGhlIGVudGlyZSBibG9jayBoYXMgYmVlbiBpbml0aWFsaXplZC4gVGltZSB0byBjaGVjayB0aG9zZSByb3V0aW5lcy4uLiBJIHRoaW5rIHRoZSBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgc2hvdWxkIGNvbWUgaW4gaGFuZHkgdG8gc2VhcmNoIGZvciBpbnN0YW5jZXMgb2YgYGlvbWFwX3dyaXRlX2JlZ2luYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9tYXBfd3JpdGVfYmVnaW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9pb21hcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz04NjI9aW9tYXBfd3JpdGVfZmFpbGVkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbilcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTg3NC1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6ODc1OnN0YXRpYyBpbnQgX19pb21hcF93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtODc2LVx0XHRjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGVfb3BzICp3cml0ZV9vcHMsIHNpemVfdCBsZW4sXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0xMDA0PXN0YXRpYyBsb2ZmX3QgaW9tYXBfdHJpbV9mb2xpb19yYW5nZShzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTEwMTgtXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjEwMTk6c3RhdGljIGludCBpb21hcF93cml0ZV9iZWdpbl9pbmxpbmUoY29uc3Qgc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTEwMjAtXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xMDMyLSAqL1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxMDMzOnN0YXRpYyBpbnQgaW9tYXBfd3JpdGVfYmVnaW4oc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTEwMzQtXHRcdGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZV9vcHMgKndyaXRlX29wcywgc3RydWN0IGZvbGlvICoqZm9saW9wLFxuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTEwMS1cdGlmIChzcmNtYXAtXHUwMDNldHlwZSA9PSBJT01BUF9JTkxJTkUpXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjExMDI6XHRcdHN0YXR1cyA9IGlvbWFwX3dyaXRlX2JlZ2luX2lubGluZShpdGVyLCBmb2xpbyk7XG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTExMDMtXHRlbHNlIGlmIChzcmNtYXAtXHUwMDNlZmxhZ3MgXHUwMDI2IElPTUFQX0ZfQlVGRkVSX0hFQUQpXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xMTA1LVx0ZWxzZVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxMTA2Olx0XHRzdGF0dXMgPSBfX2lvbWFwX3dyaXRlX2JlZ2luKGl0ZXIsIHdyaXRlX29wcywgbGVuLCBmb2xpbyk7XG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTExMDctXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0xMTg4PXN0YXRpYyBpbnQgaW9tYXBfd3JpdGVfaXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvdl9pdGVyICppLFxuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTIzMS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTIzMjpcdFx0c3RhdHVzID0gaW9tYXBfd3JpdGVfYmVnaW4oaXRlciwgd3JpdGVfb3BzLCBcdTAwMjZmb2xpbywgXHUwMDI2b2Zmc2V0LFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xMjMzLVx0XHRcdFx0XHUwMDI2Ynl0ZXMpO1xuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MTU3MT1zdGF0aWMgaW50IGlvbWFwX3Vuc2hhcmVfaXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE1ODYtXHRcdGJ5dGVzID0gbWluX3QodTY0LCBTSVpFX01BWCwgYnl0ZXMpO1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxNTg3Olx0XHRzdGF0dXMgPSBpb21hcF93cml0ZV9iZWdpbihpdGVyLCB3cml0ZV9vcHMsIFx1MDAyNmZvbGlvLCBcdTAwMjZvZmZzZXQsXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE1ODgtXHRcdFx0XHRcdTAwMjZieXRlcyk7XG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0xNjQ4PXN0YXRpYyBpbnQgaW9tYXBfemVyb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBib29sICpkaWRfemVybyxcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE2NjItXHRcdGJ5dGVzID0gbWluX3QodTY0LCBTSVpFX01BWCwgYnl0ZXMpO1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxNjYzOlx0XHRzdGF0dXMgPSBpb21hcF93cml0ZV9iZWdpbihpdGVyLCB3cml0ZV9vcHMsIFx1MDAyNmZvbGlvLCBcdTAwMjZvZmZzZXQsXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE2NjQtXHRcdFx0XHRcdTAwMjZieXRlcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjIxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIEJ1ZmZlcmVkIEkvTyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgYF9faW9tYXBfd3JpdGVfYmVnaW5gIHdvcmtzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGJ1ZmZlcmVkIEkvTy4gU28sIGxldCYjMzk7cyBoZWFkIG92ZXIgdG8gYGZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgbG9naWMgZm9yIG1hbmFnaW5nIHRob3NlIHdyaXRlIG9wZXJhdGlvbnMuIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGl0JiMzOTtzIGNvb3JkaW5hdGluZyB0aGluZ3MsIGhvdyBpdCBoYW5kbGVzIHRoZSBpbml0aWFsIHNldHVwLCBhbmQgd2hhdCB0aGUga2V5IGNvbnNpZGVyYXRpb25zIGFyZSBmb3IgcGVyZm9ybWFuY2UgYW5kIGRhdGEgaW50ZWdyaXR5LiBJJiMzOTttIGVzcGVjaWFsbHkgY3VyaW91cyBhYm91dCBhbnkgcmVjZW50IGNoYW5nZXMgb3IgcG90ZW50aWFsIGdvdGNoYXMgdGhhdCBtaWdodCBiZSBsdXJraW5nIGluIHRoZXJlLiBJdCYjMzk7cyB0aW1lIHRvIGdldCBoYW5kcy1vbiBhbmQgdHJhY2UgdGhyb3VnaCB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19pb21hcF93cml0ZV9iZWdpbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2lvbWFwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pb21hcC9idWZmZXJlZC1pby5jPTg2Mj1pb21hcF93cml0ZV9mYWlsZWQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuKVxuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtODc0LVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzo4NzU6c3RhdGljIGludCBfX2lvbWFwX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy04NzYtXHRcdGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZV9vcHMgKndyaXRlX29wcywgc2l6ZV90IGxlbixcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTEwMzM9c3RhdGljIGludCBpb21hcF93cml0ZV9iZWdpbihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTExMDUtXHRlbHNlXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjExMDY6XHRcdHN0YXR1cyA9IF9faW9tYXBfd3JpdGVfYmVnaW4oaXRlciwgd3JpdGVfb3BzLCBsZW4sIGZvbGlvKTtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTEwNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3MTcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0JiMzOTtzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoZSBjb2RlLCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb24sIGFuZCB0YWlsb3JlZCBmb3IgYSBmZWxsb3cgZXhwZXJ0OgoKKipEaXZpbmcgaW50byBgX19pb21hcF93cml0ZV9iZWdpbmAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHB1bGwgdXAgYF9faW9tYXBfd3JpdGVfYmVnaW5gLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIGlzbiYjMzk7dCBpdD8gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSB3cml0ZSBwYXRoIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIEkvTyBtYXAuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBoYW5kbGUgdGhlIGluaXRpYWwgc2V0dXAgYmVmb3JlIHRoZSBhY3R1YWwgd3JpdGUgaGFwcGVucyAtIHRoaW5ncyBsaWtlIGVuc3VyaW5nIHRoZSByZWxldmFudCBibG9ja3MgYXJlIGFsbG9jYXRlZCwgc2V0dGluZyB1cCBhbnkgbmVjZXNzYXJ5IG1ldGFkYXRhLCBhbmQgbWFraW5nIHN1cmUgdGhlIHdyaXRlIG9wZXJhdGlvbiBjYW4gcHJvY2VlZCBzYWZlbHkuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBoYW5kbGVzIHRoaW5ncyBsaWtlIGV4dGVudCBhbGxvY2F0aW9uLCB3aGV0aGVyIGl0IGRlYWxzIHdpdGggYW55IHByZS1hbGxvY2F0aW9uIHN0cmF0ZWdpZXMgdG8gbWluaW1pemUgZnJhZ21lbnRhdGlvbiwgYW5kIGhvdyBpdCBsb2NrcyBhbmQgc3luY2hyb25pemVzIHdpdGggb3RoZXIgY29uY3VycmVudCBvcGVyYXRpb25zLiBJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgYmxvY2sgZGV2aWNlIGFuZCBhbnkgcG90ZW50aWFsIGNhY2hpbmcgbGF5ZXJzLiBJJiMzOTtsbCBuZWVkIHRvIGRpc3NlY3QgaXRzIGVycm9yIGhhbmRsaW5nIGFuZCBob3cgaXQgZW5zdXJlcyBhdG9taWNpdHkgaW4gdGhlIGZhY2Ugb2YgcG9zc2libGUgaW50ZXJydXB0aW9ucy4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGVyZSB3aWxsIGJlIHNldmVyYWwgZWRnZSBjYXNlcyBhbmQgb3B0aW1pemF0aW9ucyBhdCBwbGF5IGhlcmUgdG8gZW5zdXJlIHBlcmZvcm1hbmNlIGFuZCByZWxpYWJpbGl0eS4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSB0YWNrbGVkIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NzU6XHRzdGF0aWMgaW50IF9faW9tYXBfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXG4gODc2Olx0XHRcdGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZV9vcHMgKndyaXRlX29wcywgc2l6ZV90IGxlbixcbiA4Nzc6XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbylcbiA4Nzg6XHR7XG4gODc5Olx0XHRzdHJ1Y3QgaW9tYXBfZm9saW9fc3RhdGUgKmlmcztcbiA4ODA6XHRcdGxvZmZfdCBwb3MgPSBpdGVyLVx1MDAzZXBvcztcbiA4ODE6XHRcdGxvZmZfdCBibG9ja19zaXplID0gaV9ibG9ja3NpemUoaXRlci1cdTAwM2Vpbm9kZSk7XG4gODgyOlx0XHRsb2ZmX3QgYmxvY2tfc3RhcnQgPSByb3VuZF9kb3duKHBvcywgYmxvY2tfc2l6ZSk7XG4gODgzOlx0XHRsb2ZmX3QgYmxvY2tfZW5kID0gcm91bmRfdXAocG9zICYjNDM7IGxlbiwgYmxvY2tfc2l6ZSk7XG4gODg0Olx0XHR1bnNpZ25lZCBpbnQgbnJfYmxvY2tzID0gaV9ibG9ja3NfcGVyX2ZvbGlvKGl0ZXItXHUwMDNlaW5vZGUsIGZvbGlvKTtcbiA4ODU6XHRcdHNpemVfdCBmcm9tID0gb2Zmc2V0X2luX2ZvbGlvKGZvbGlvLCBwb3MpLCB0byA9IGZyb20gJiM0MzsgbGVuO1xuIDg4NjpcdFx0c2l6ZV90IHBvZmYsIHBsZW47XG4gODg3Olx0XG4gODg4Olx0XHQvKlxuIDg4OTpcdFx0ICogSWYgdGhlIHdyaXRlIG9yIHplcm9pbmcgY29tcGxldGVseSBvdmVybGFwcyB0aGUgY3VycmVudCBmb2xpbywgdGhlblxuIDg5MDpcdFx0ICogZW50aXJlIGZvbGlvIHdpbGwgYmUgZGlydGllZCBzbyB0aGVyZSBpcyBubyBuZWVkIGZvclxuIDg5MTpcdFx0ICogcGVyLWJsb2NrIHN0YXRlIHRyYWNraW5nIHN0cnVjdHVyZXMgdG8gYmUgYXR0YWNoZWQgdG8gdGhpcyBmb2xpby5cbiA4OTI6XHRcdCAqIEZvciB0aGUgdW5zaGFyZSBjYXNlLCB3ZSBtdXN0IHJlYWQgaW4gdGhlIG9uZGlzayBjb250ZW50cyBiZWNhdXNlIHdlXG4gODkzOlx0XHQgKiBhcmUgbm90IGNoYW5naW5nIHBhZ2VjYWNoZSBjb250ZW50cy5cbiA4OTQ6XHRcdCAqL1xuIDg5NTpcdFx0aWYgKCEoaXRlci1cdTAwM2VmbGFncyBcdTAwMjYgSU9NQVBfVU5TSEFSRSkgXHUwMDI2XHUwMDI2IHBvcyBcdTAwM2M9IGZvbGlvX3Bvcyhmb2xpbykgXHUwMDI2XHUwMDI2XG4gODk2Olx0XHQgICAgcG9zICYjNDM7IGxlbiBcdTAwM2U9IGZvbGlvX25leHRfcG9zKGZvbGlvKSlcbiA4OTc6XHRcdFx0cmV0dXJuIDA7XG4gODk4Olx0XG4gODk5Olx0XHRpZnMgPSBpZnNfYWxsb2MoaXRlci1cdTAwM2Vpbm9kZSwgZm9saW8sIGl0ZXItXHUwMDNlZmxhZ3MpO1xuIDkwMDpcdFx0aWYgKChpdGVyLVx1MDAzZWZsYWdzIFx1MDAyNiBJT01BUF9OT1dBSVQpIFx1MDAyNlx1MDAyNiAhaWZzIFx1MDAyNlx1MDAyNiBucl9ibG9ja3MgXHUwMDNlIDEpXG4gOTAxOlx0XHRcdHJldHVybiAtRUFHQUlOO1xuIDkwMjpcdFxuIDkwMzpcdFx0aWYgKGZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKVxuIDkwNDpcdFx0XHRyZXR1cm4gMDtcbiA5MDU6XHRcbiA5MDY6XHRcdGRvIHtcbiA5MDc6XHRcdFx0aW9tYXBfYWRqdXN0X3JlYWRfcmFuZ2UoaXRlci1cdTAwM2Vpbm9kZSwgZm9saW8sIFx1MDAyNmJsb2NrX3N0YXJ0LFxuIDkwODpcdFx0XHRcdFx0YmxvY2tfZW5kIC0gYmxvY2tfc3RhcnQsIFx1MDAyNnBvZmYsIFx1MDAyNnBsZW4pO1xuIDkwOTpcdFx0XHRpZiAocGxlbiA9PSAwKVxuIDkxMDpcdFx0XHRcdGJyZWFrO1xuIDkxMTpcdFxuIDkxMjpcdFx0XHQvKlxuIDkxMzpcdFx0XHQgKiBJZiB0aGUgcmVhZCByYW5nZSB3aWxsIGJlIGVudGlyZWx5IG92ZXJ3cml0dGVuIGJ5IHRoZSB3cml0ZSxcbiA5MTQ6XHRcdFx0ICogd2UgY2FuIHNraXAgaGF2aW5nIHRvIHplcm8vcmVhZCBpdCBpbi5cbiA5MTU6XHRcdFx0ICovXG4gOTE2Olx0XHRcdGlmICghKGl0ZXItXHUwMDNlZmxhZ3MgXHUwMDI2IElPTUFQX1VOU0hBUkUpIFx1MDAyNlx1MDAyNiBmcm9tIFx1MDAzYz0gcG9mZiBcdTAwMjZcdTAwMjZcbiA5MTc6XHRcdFx0ICAgIHRvIFx1MDAzZT0gcG9mZiAmIzQzOyBwbGVuKVxuIDkxODpcdFx0XHRcdGNvbnRpbnVlO1xuIDkxOTpcdFxuIDkyMDpcdFx0XHRpZiAoaW9tYXBfYmxvY2tfbmVlZHNfemVyb2luZyhpdGVyLCBibG9ja19zdGFydCkpIHtcbiA5MjE6XHRcdFx0XHRpZiAoV0FSTl9PTl9PTkNFKGl0ZXItXHUwMDNlZmxhZ3MgXHUwMDI2IElPTUFQX1VOU0hBUkUpKVxuIDkyMjpcdFx0XHRcdFx0cmV0dXJuIC1FSU87XG4gOTIzOlx0XHRcdFx0Zm9saW9femVyb19zZWdtZW50cyhmb2xpbywgcG9mZiwgZnJvbSwgdG8sIHBvZmYgJiM0MzsgcGxlbik7XG4gOTI0Olx0XHRcdH0gZWxzZSB7XG4gOTI1Olx0XHRcdFx0Y29uc3Qgc3RydWN0IGlvbWFwICppb21hcCA9IGlvbWFwX2l0ZXJfc3JjbWFwKGl0ZXIpO1xuIDkyNjpcdFx0XHRcdGludCBzdGF0dXM7XG4gOTI3Olx0XG4gOTI4Olx0XHRcdFx0aWYgKGl0ZXItXHUwMDNlZmxhZ3MgXHUwMDI2IElPTUFQX05PV0FJVClcbiA5Mjk6XHRcdFx0XHRcdHJldHVybiAtRUFHQUlOO1xuIDkzMDpcdFxuIDkzMTpcdFx0XHRcdGlmICh3cml0ZV9vcHMgXHUwMDI2XHUwMDI2IHdyaXRlX29wcy1cdTAwM2VyZWFkX2ZvbGlvX3JhbmdlKVxuIDkzMjpcdFx0XHRcdFx0c3RhdHVzID0gd3JpdGVfb3BzLVx1MDAzZXJlYWRfZm9saW9fcmFuZ2UoaXRlcixcbiA5MzM6XHRcdFx0XHRcdFx0XHRmb2xpbywgYmxvY2tfc3RhcnQsIHBsZW4pO1xuIDkzNDpcdFx0XHRcdGVsc2VcbiA5MzU6XHRcdFx0XHRcdHN0YXR1cyA9IGlvbWFwX2Jpb19yZWFkX2ZvbGlvX3JhbmdlX3N5bmMoaXRlcixcbiA5MzY6XHRcdFx0XHRcdFx0XHRmb2xpbywgYmxvY2tfc3RhcnQsIHBsZW4pO1xuIDkzNzpcdFx0XHRcdGlmIChzdGF0dXMgXHUwMDNjIDApXG4gOTM4Olx0XHRcdFx0XHRmc2Vycm9yX3JlcG9ydF9pbyhpdGVyLVx1MDAzZWlub2RlLFxuIDkzOTpcdFx0XHRcdFx0XHRcdCAgRlNFUlJfQlVGRkVSRURfUkVBRCwgcG9zLFxuIDk0MDpcdFx0XHRcdFx0XHRcdCAgcGxlbiwgc3RhdHVzLCBHRlBfTk9GUyk7XG4gOTQxOlx0XHRcdFx0aWYgKHN0YXR1cylcbiA5NDI6XHRcdFx0XHRcdHJldHVybiBzdGF0dXM7XG4gOTQzOlx0XG4gOTQ0Olx0XHRcdFx0aWYgKGlvbWFwLVx1MDAzZWZsYWdzIFx1MDAyNiBJT01BUF9GX1pFUk9fVEFJTClcbiA5NDU6XHRcdFx0XHRcdGZvbGlvX3plcm9fc2VnbWVudChmb2xpbywgdG8sIHBvZmYgJiM0MzsgcGxlbik7XG4gOTQ2Olx0XHRcdH1cbiA5NDc6XHRcdFx0aW9tYXBfc2V0X3JhbmdlX3VwdG9kYXRlKGZvbGlvLCBwb2ZmLCBwbGVuKTtcbiA5NDg6XHRcdH0gd2hpbGUgKChibG9ja19zdGFydCAmIzQzOz0gcGxlbikgXHUwMDNjIGJsb2NrX2VuZCk7XG4gOTQ5Olx0XG4gOTUwOlx0XHRyZXR1cm4gMDtcbiA5NTE6XHR9XG4gOTUyOlx0XG4gOTUzOlx0c3RhdGljIHN0cnVjdCBmb2xpbyAqX19pb21hcF9nZXRfZm9saW8oc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXG4gOTU0Olx0XHRcdGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZV9vcHMgKndyaXRlX29wcywgc2l6ZV90IGxlbilcbiA5NTU6XHR7XG4gOTU2Olx0XHRsb2ZmX3QgcG9zID0gaXRlci1cdTAwM2Vwb3M7XG4gOTU3Olx0XG4gOTU4Olx0XHRpZiAoIW1hcHBpbmdfbGFyZ2VfZm9saW9fc3VwcG9ydChpdGVyLVx1MDAzZWlub2RlLVx1MDAzZWlfbWFwcGluZykpXG4gOTU5Olx0XHRcdGxlbiA9IG1pbl90KHNpemVfdCwgbGVuLCBQQUdFX1NJWkUgLSBvZmZzZXRfaW5fcGFnZShwb3MpKTtcbiA5NjA6XHRcbiA5NjE6XHRcdGlmIChpdGVyLVx1MDAzZWlvbWFwLmZsYWdzIFx1MDAyNiBJT01BUF9GX0ZPTElPX0JBVENIKSB7XG4gOTYyOlx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBmb2xpb19iYXRjaF9uZXh0KGl0ZXItXHUwMDNlZmJhdGNoKTtcbiA5NjM6XHRcbiA5NjQ6XHRcdFx0aWYgKCFmb2xpbylcbiA5NjU6XHRcdFx0XHRyZXR1cm4gTlVMTDtcbiA5NjY6XHRcbiA5Njc6XHRcdFx0LypcbiA5Njg6XHRcdFx0ICogVGhlIGZvbGlvIG1hcHBpbmcgZ2VuZXJhbGx5IHNob3VsZG4mIzM5O3QgaGF2ZSBjaGFuZ2VkIGJhc2VkIG9uXG4gOTY5Olx0XHRcdCAqIGZzIGxvY2tzLCBidXQgYmUgY29uc2lzdGVudCB3aXRoIGZpbGVtYXAgbG9va3VwIGFuZCByZXRyeVxuIDk3MDpcdFx0XHQgKiB0aGUgaXRlciBpZiBpdCBkb2VzLlxuIDk3MTpcdFx0XHQgKi9cbiA5NzI6XHRcdFx0Zm9saW9fbG9jayhmb2xpbyk7XG4gOTczOlx0XHRcdGlmICh1bmxpa2VseShmb2xpby1cdTAwM2VtYXBwaW5nICE9IGl0ZXItXHUwMDNlaW5vZGUtXHUwMDNlaV9tYXBwaW5nKSkge1xuIDk3NDpcdFx0XHRcdGl0ZXItXHUwMDNlaW9tYXAuZmxhZ3MgfD0gSU9NQVBfRl9TVEFMRTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2OTcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGBfX2lvbWFwX3dyaXRlX2JlZ2luYCBhbmQgWmVyb2luZyBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgX19pb21hcF93cml0ZV9iZWdpbmAgZnVuY3Rpb24gYW5kIEkgc2VlIHRoaXMgY3J1Y2lhbCBjaGVjazogYGlvbWFwX2Jsb2NrX25lZWRzX3plcm9pbmdgLiBJZiB0aGF0IHJldHVybnMgdHJ1ZSwgdGhlbiB3ZSBjYWxsIGBmb2xpb196ZXJvX3NlZ21lbnRzYC4gTXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYGZvbGlvX3plcm9fc2VnbWVudHNgIGlzIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSB1bndyaXR0ZW4gcGFydHMgb2YgdGhlIGJsb2NrIGFyZSB6ZXJvZWQgb3V0IGJlZm9yZSB3ZSB3cml0ZSBvdXIgbmV3IGRhdGEuIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIHplcm9pbmcgYmVmb3JlIGBmcm9tYCBhbmQgYWZ0ZXIgYHRvYCwgc2ltcGxlIGVub3VnaC4KCldhaXQgYSBtaW51dGUsIG15IGV4cGVydCBpbnR1aXRpb24gaXMgdGluZ2xpbmcuIFdoYXQgaGFwcGVucyBpZiB0aGlzIGlzbiYjMzk7dCBhICpuZXcqIGJsb2NrIGFsbG9jYXRpb24gYnV0IHJhdGhlciBhbiAqb3ZlcndyaXRlKj8gSWYgd2UmIzM5O3JlIG92ZXJ3cml0aW5nIGV4aXN0aW5nIGRhdGEsIGRvZXMgYGlvbWFwX2Jsb2NrX25lZWRzX3plcm9pbmdgICpzdGlsbCogcmV0dXJuIHRydWU/IEkgbmVlZCB0byBjaGVjayB0aGUgY29uZGl0aW9ucyB3aGVuIGBpb21hcF9ibG9ja19uZWVkc196ZXJvaW5nYCByZXR1cm5zIHRydWUuIFNwZWNpZmljYWxseSwgSSBrbm93IHRoYXQgd2hlbiB0aGUgYElPTUFQX0ZfTkVXYCBmbGFnIGlzIHNldCwgaXQgd2lsbCByZXR1cm4gdHJ1ZSwgYnV0IHdoYXQgYWJvdXQgb3RoZXIgc2NlbmFyaW9zPyBUaGlzIGlzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBpbXBhY3Qgb2YgdGhpcyBmdW5jdGlvbiwgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGZyb20gemVyb2luZyBhbHJlYWR5IGFsbG9jYXRlZCBkYXRhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb21hcF9ibG9ja19uZWVkc196ZXJvaW5nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MzE4PXN0YXRpYyB2b2lkIGlvbWFwX2FkanVzdF9yZWFkX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0zODEtXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjM4MjpzdGF0aWMgaW5saW5lIGJvb2wgaW9tYXBfYmxvY2tfbmVlZHNfemVyb2luZyhjb25zdCBzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMzgzLVx0XHRsb2ZmX3QgcG9zKVxuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9NTU3PXN0YXRpYyBpbnQgaW9tYXBfcmVhZF9mb2xpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtNjA5LVx0XHRcdGlvbWFwX3NldF9yYW5nZV91cHRvZGF0ZShmb2xpbywgcG9mZiwgcGxlbik7XG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjYxMDpcdFx0fSBlbHNlIGlmIChpb21hcF9ibG9ja19uZWVkc196ZXJvaW5nKGl0ZXIsIHBvcykpIHtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtNjExLVx0XHRcdC8qIHplcm8gcG9zdC1lb2YgYmxvY2tzIGFzIHRoZSBwYWdlIG1heSBiZSBtYXBwZWQgKi9cbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTg3NT1zdGF0aWMgaW50IF9faW9tYXBfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy05MTktXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjkyMDpcdFx0aWYgKGlvbWFwX2Jsb2NrX25lZWRzX3plcm9pbmcoaXRlciwgYmxvY2tfc3RhcnQpKSB7XG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTkyMS1cdFx0XHRpZiAoV0FSTl9PTl9PTkNFKGl0ZXItXHUwMDNlZmxhZ3MgXHUwMDI2IElPTUFQX1VOU0hBUkUpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTYxNwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBpb21hcF9ibG9ja19uZWVkc196ZXJvaW5nYC4gSGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmc6CgoqKkFuYWx5emluZyBgaW9tYXBfYmxvY2tfbmVlZHNfemVyb2luZ2AqKgoKQWxyaWdodCwgSSYjMzk7bSBwdWxsaW5nIHVwIHRoZSBjb2RlIGZvciBgaW9tYXBfYmxvY2tfbmVlZHNfemVyb2luZ2AuIEdpdmVuIHRoZSBuYW1lLCBJJiMzOTttIGltbWVkaWF0ZWx5IGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiBhIHNwZWNpZmljIGJsb2NrIG5lZWRzIHRvIGJlIGV4cGxpY2l0bHkgemVyb2VkIG91dCBiZWZvcmUgYmVpbmcgd3JpdHRlbiB0by4gVGhpcyBsaWtlbHkgcmVsYXRlcyB0byBob3cgd2UgaGFuZGxlIHNwYXJzZSBmaWxlcywgZGlyZWN0IEkvTywgYW5kIHBlcmhhcHMgZXZlbiB0aGluZ3MgbGlrZSBjb3B5LW9uLXdyaXRlIG1lY2hhbmlzbXMsIG9yIG1heWJlIGV2ZW4gc2VjdXJpdHkgY29uY2VybnMgYXJvdW5kIHJlc2lkdWFsIGRhdGEuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIGdvaW5nIHRvIGNoZWNrIHRoZSBibG9jayBtYXBwaW5nIHdpdGhpbiB0aGUgSS9PIGNvbnRleHQgYW5kIHRoZSBmaWxlJiMzOTtzIG1ldGFkYXRhIHRvIG1ha2UgdGhpcyBkZXRlcm1pbmF0aW9uLiBJdOKAmXMgZ290IHRvIGNvbnNpZGVyIGlmIHRoZSBibG9jayBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkIChsaWtlIGJ5IGEgcHJldmlvdXMgd3JpdGUpLCBvciBpZiBpdCYjMzk7cyBhICYjMzQ7aG9sZSYjMzQ7IGluIHRoZSBmaWxlLiBJIGFsc28gd29uZGVyIGlmIGl0IGZhY3RvcnMgaW4gYW55IHVzZXItc3VwcGxpZWQgZmxhZ3Mgb3IgaGludHMgcHJvdmlkZWQgZHVyaW5nIHRoZSBJL08gb3BlcmF0aW9uIGl0c2VsZi4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBibG9jayBkZXZpY2UgYW5kIHRoZSBmaWxlc3lzdGVtJiMzOTtzIGFsbG9jYXRpb24gc3RyYXRlZ3kgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuIE15IGV4cGVydGlzZSBpbiB0aGlzIGFyZWEgaXMgc3VjaCB0aGF0IEkgd291bGQgZ3Vlc3MgdGhlIHVuZGVybHlpbmcgbG9naWMgaXMgdG8gYXZvaWQgdW5uZWNlc3NhcnkgSS9PLCBhbmQgdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5IGFuZCBzZWN1cml0eSwgYnV0IEkgbmVlZCB0byBzZWUgdGhlIGRldGFpbHMgb2YgaG93IGl0IGFsbCB3b3Jrcy4gSeKAmWxsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGNoZWNrcyBmb3Igd2hldGhlciB0aGUgYmxvY2sgaXMgbWFwcGVkLCB3aGV0aGVyIHRoZSBmaWxlIGlzIHNwYXJzZSwgb3IgcGVyaGFwcyB3aGV0aGVyIHRoZXJlJiMzOTtzIHNvbWUgc3BlY2lhbCBmaWxlc3lzdGVtIGZlYXR1cmUgYXQgcGxheS4gVW5kZXJzdGFuZGluZyB0aGUgbnVhbmNlcyBvZiB0aGlzIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGJlIGtleSB0byBvcHRpbWl6aW5nIEkvTyBpbiB0aGlzIGNvbnRleHQuIExldCYjMzk7cyBzZWUgaG93IGl0JiMzOTtzIGltcGxlbWVudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM4MjpcdHN0YXRpYyBpbmxpbmUgYm9vbCBpb21hcF9ibG9ja19uZWVkc196ZXJvaW5nKGNvbnN0IHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxuIDM4MzpcdFx0XHRsb2ZmX3QgcG9zKVxuIDM4NDpcdHtcbiAzODU6XHRcdGNvbnN0IHN0cnVjdCBpb21hcCAqc3JjbWFwID0gaW9tYXBfaXRlcl9zcmNtYXAoaXRlcik7XG4gMzg2Olx0XG4gMzg3Olx0XHQvKlxuIDM4ODpcdFx0ICogSWYgdGhpcyBibG9jayBoYXMgbm90IGJlZW4gd3JpdHRlbiwgdGhlcmUmIzM5O3Mgbm90aGluZyB0byByZWFkXG4gMzg5Olx0XHQgKi9cbiAzOTA6XHRcdGlmIChzcmNtYXAtXHUwMDNldHlwZSAhPSBJT01BUF9NQVBQRUQpXG4gMzkxOlx0XHRcdHJldHVybiB0cnVlO1xuIDM5MjpcdFxuIDM5MzpcdFx0LypcbiAzOTQ6XHRcdCAqIE5ld2x5IGFsbG9jYXRlZCBibG9ja3MgaGF2ZSBub3QgYmVlbiB3cml0dGVuXG4gMzk1Olx0XHQgKi9cbiAzOTY6XHRcdGlmIChzcmNtYXAtXHUwMDNlZmxhZ3MgXHUwMDI2IElPTUFQX0ZfTkVXKVxuIDM5NzpcdFx0XHRyZXR1cm4gdHJ1ZTtcbiAzOTg6XHRcbiAzOTk6XHRcdC8qXG4gNDAwOlx0XHQgKiBmc3Zlcml0eSBtZXRhZGF0YSBpcyBzdG9yZWQgcGFzdCBpX3NpemUsIHdlIG5lZWQgdG8gcmVhZCBpdCBpbnN0ZWFkXG4gNDAxOlx0XHQgKiBvZiB6ZXJvaW5nXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzE2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTU3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJlYWRzIGluIE1pbml4IFN5bWxpbmsgSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW5pdGlhbCBjb25jZXJuIHdhcyBjZW50ZXJlZCBhcm91bmQgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggc3ltbGlua3MgaW4gdGhlIE1pbml4IGZpbGVzeXN0ZW0uIFRoZSBrZXkgb2JzZXJ2YXRpb24gaXMgdGhhdCB3aGVuIGEgbmV3IGJsb2NrIGlzIGFsbG9jYXRlZCwgYElPTUFQX0ZfTkVXYCBpcyBzZXQsIGFuZCB0aGUgYmxvY2sgaXMgemVyb2VkLiBUaGlzIGlzIGltcG9ydGFudC4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBzeW1saW5rIGNhc2UuIEkgaGFkIGEgaHlwb3RoZXNpcyB3aGVyZSBhIHN5bWxpbmsgYmVpbmcgd3JpdHRlbiBvdmVyIGFuIGV4aXN0aW5nIGJsb2NrIG1pZ2h0IGludHJvZHVjZSB1bmluaXRpYWxpemVkIGRhdGEuIEhvd2V2ZXIsIHRoZSBjb2RlIGZsb3cgaW4gYG1pbml4X3N5bWxpbmtgIGFuZCBzdWJzZXF1ZW50IGNhbGxzIHRvIGBpb21hcF9zeW1saW5rX3dyaXRlYCBudWxsaWZpZWQgdGhhdCBjb25jZXJuLiBUaGUgc3ltbGluayBwcm9jZXNzIGFsbG9jYXRlcyBhIG5ldyBpbm9kZSB3aXRoIHNpemUgemVybyBhbmQgdGhlbiB1c2VzIGBpb21hcF9zeW1saW5rX3dyaXRlYCB0byB3cml0ZSB0aGUgc3ltbGluayB0YXJnZXQuIENydWNpYWxseSwgdGhlIHRhcmdldCBpdHNlbGYgaXMgYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nLCBhbmQgYGlvbWFwX3N5bWxpbmtfd3JpdGVgIG9ubHkgd3JpdGVzIHVwIHRvIGBzdHJsZW4oc3ltbmFtZSlgIGJ5dGVzIGZyb20gdGhlIHRhcmdldC4gVGhlIGJsb2NrIGlzIHplcm9lZCBhcyBhIHNpZGUgZWZmZWN0LiBUaGVyZWZvcmUsIG5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBpcyB3cml0dGVuIHRvIHRoZSBkaXNrLgoKVGhlIGZvY3VzIHRoZW4gc2hpZnRlZCB0byBob3cgYSBzeW1saW5rIGlzIHJlYWQuIFRoYXQgcGF0aCBsZWQgbWUgdG8gdGhlIGBwYWdlX2dldF9saW5rYCBmdW5jdGlvbiwgd2hpY2gsIGFzIGEgc3ltbGluayBoYW5kbGVyLCBwdWxscyBmcm9tIHRoZSBwYWdlIGNhY2hlLiBJcyB0aGF0IGZ1bmN0aW9uIGRlc2lnbmVkIHRvIGhhbmRsZSBhIG51bGwtdGVybWluYXRlZCBzdHJpbmc/IFRoaXMgaXMgd2hlcmUgdGhlIGlzc3VlIG1pZ2h0IGJlLiBCdXQsIHRoZSBleGlzdGluZyB3cml0ZSBwYXRoIHplcm8tZmlsbHMgdGhlIHJlc3Qgb2YgdGhlIHBhZ2UuIFNvLCBpZiB0aGUgbGluayBpcyBzaG9ydGVyIHRoYW4gdGhlIHBhZ2Ugc2l6ZSwgaXQgd2lsbCBzdGlsbCBhcHBlYXIgbnVsbC10ZXJtaW5hdGVkLiBUaGlzIGluZGljYXRlcyB0aGF0IGl0JiMzOTtzIHNhZmUuCgpMZXQmIzM5O3MgbG9vayBhdCB0aGUgb3RoZXIgY29kZSBwYXRocyBsaWtlIHRoZSBgbWluaXhfZmlsZV93cml0ZV9pdGVyYCwgYG1pbml4X3dyaXRlcGFnZXNgLCBgbWluaXhfcmVhZF9mb2xpb2AsIGFuZCBgbWluaXhfcmVhZGFoZWFkYCBmdW5jdGlvbnMgdG8gdmVyaWZ5IHRoYXQgYW55IHJlbWFpbmluZyByZWFkLXJlbGF0ZWQgaXNzdWVzIGFyZSBoYW5kbGVkIGJ5IHRoZSBzdGFuZGFyZCBwcm9jZWR1cmVzLCBzdWNoIGFzIGJ1ZmZlciBhbmQgd3JpdGViYWNrIGZsb3dzLCBvciBieSB1c2VyLXNwYWNlIGlucHV0IHZhbGlkYXRpb24uIFRoZXNlIGFyZSBnZW5lcmljIEkvTyBwYXRocywgYW5kIGRhdGEgY29tZXMgZnJvbSBlaXRoZXIgdGhlIHVzZXIgc3BhY2Ugb3IgYmxvY2sgbGF5ZXIsIGFuZCBpbiBlaXRoZXIgY2FzZSwgdGhlIGRhdGEgc2hvdWxkIGJlIHNhZmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZ2VfZ2V0X2xpbmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvOXAvdmZzX2lub2RlX2RvdGwuYz05MjA9djlmc192ZnNfZ2V0X2xpbmtfZG90bChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvOXAvdmZzX2lub2RlX2RvdGwuYy05MjctXHRpZiAodjlzZXMtXHUwMDNlY2FjaGUgXHUwMDI2IChDQUNIRV9NRVRBfENBQ0hFX0xPT1NFKSlcbmZzLzlwL3Zmc19pbm9kZV9kb3RsLmM6OTI4Olx0XHRyZXR1cm4gcGFnZV9nZXRfbGluayhkZW50cnksIGlub2RlLCBkb25lKTtcbmZzLzlwL3Zmc19pbm9kZV9kb3RsLmMtOTI5LVxuLS1cbmZzL2FmZnMvc3ltbGluay5jPTcyPWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGFmZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0ge1xuZnMvYWZmcy9zeW1saW5rLmM6NzM6XHQuZ2V0X2xpbmtcdD0gcGFnZV9nZXRfbGluayxcbmZzL2FmZnMvc3ltbGluay5jLTc0LVx0LnNldGF0dHJcdD0gYWZmc19zZXRhdHRyLFxuLS1cbmZzL2J0cmZzL2lub2RlLmM9MTA4MTU9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGJ0cmZzX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbmZzL2J0cmZzL2lub2RlLmM6MTA4MTY6XHQuZ2V0X2xpbmtcdD0gcGFnZV9nZXRfbGluayxcbmZzL2J0cmZzL2lub2RlLmMtMTA4MTctXHQuZ2V0YXR0clx0PSBidHJmc19nZXRhdHRyLFxuLS1cbmZzL2NvZGEvY25vZGUuYz0yMD1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY29kYV9zeW1saW5rX2lub2RlX29wZXJhdGlvbnMgPSB7XG5mcy9jb2RhL2Nub2RlLmM6MjE6XHQuZ2V0X2xpbmtcdD0gcGFnZV9nZXRfbGluayxcbmZzL2NvZGEvY25vZGUuYy0yMi1cdC5zZXRhdHRyXHQ9IGNvZGFfc2V0YXR0cixcbi0tXG5mcy9lcm9mcy9pbm9kZS5jPTM4Nz1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBlcm9mc19zeW1saW5rX2lvcHMgPSB7XG5mcy9lcm9mcy9pbm9kZS5jOjM4ODpcdC5nZXRfbGluayA9IHBhZ2VfZ2V0X2xpbmssXG5mcy9lcm9mcy9pbm9kZS5jLTM4OS1cdC5nZXRhdHRyID0gZXJvZnNfZ2V0YXR0cixcbi0tXG5mcy9leHQyL3N5bWxpbmsuYz0yND1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBleHQyX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbmZzL2V4dDIvc3ltbGluay5jOjI1Olx0LmdldF9saW5rXHQ9IHBhZ2VfZ2V0X2xpbmssXG5mcy9leHQyL3N5bWxpbmsuYy0yNi1cdC5nZXRhdHRyXHQ9IGV4dDJfZ2V0YXR0cixcbi0tXG5mcy9mMmZzL25hbWVpLmM9NjM0PXN0YXRpYyBjb25zdCBjaGFyICpmMmZzX2dldF9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9mMmZzL25hbWVpLmMtNjM3LXtcbmZzL2YyZnMvbmFtZWkuYzo2Mzg6XHRjb25zdCBjaGFyICpsaW5rID0gcGFnZV9nZXRfbGluayhkZW50cnksIGlub2RlLCBkb25lKTtcbmZzL2YyZnMvbmFtZWkuYy02MzktXG4tLVxuZnMvZnVzZS9kaXIuYz0xODU0PXN0YXRpYyBjb25zdCBjaGFyICpmdXNlX2dldF9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9mdXNlL2Rpci5jLTE4NjUtXHRpZiAoZmMtXHUwMDNlY2FjaGVfc3ltbGlua3MpXG5mcy9mdXNlL2Rpci5jOjE4NjY6XHRcdHJldHVybiBwYWdlX2dldF9saW5rX3JhdyhkZW50cnksIGlub2RlLCBjYWxsYmFjayk7XG5mcy9mdXNlL2Rpci5jLTE4NjctXG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jPTQ0ND1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgaGZzcGx1c19zeW1saW5rX2lub2RlX29wZXJhdGlvbnMgPSB7XG5mcy9oZnNwbHVzL2lub2RlLmM6NDQ1Olx0LmdldF9saW5rXHQ9IHBhZ2VfZ2V0X2xpbmssXG5mcy9oZnNwbHVzL2lub2RlLmMtNDQ2LVx0LnNldGF0dHJcdD0gaGZzcGx1c19zZXRhdHRyLFxuLS1cbmZzL2pmcy9zeW1saW5rLmM9MTc9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgamZzX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbmZzL2pmcy9zeW1saW5rLmM6MTg6XHQuZ2V0X2xpbmtcdD0gcGFnZV9nZXRfbGluayxcbmZzL2pmcy9zeW1saW5rLmMtMTktXHQuc2V0YXR0clx0PSBqZnNfc2V0YXR0cixcbi0tXG5mcy9taW5peC9pbm9kZS5jPTU2OT1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWluaXhfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0ge1xuZnMvbWluaXgvaW5vZGUuYzo1NzA6XHQuZ2V0X2xpbmtcdD0gcGFnZV9nZXRfbGluayxcbmZzL21pbml4L2lub2RlLmMtNTcxLVx0LmdldGF0dHJcdD0gbWluaXhfZ2V0YXR0cixcbi0tXG5mcy9uYW1laS5jPTY0NTI9RVhQT1JUX1NZTUJPTCh2ZnNfZ2V0X2xpbmspO1xuLS1cbmZzL25hbWVpLmMtNjQ1NC0vKiBnZXQgdGhlIGxpbmsgY29udGVudHMgaW50byBwYWdlY2FjaGUgKi9cbmZzL25hbWVpLmM6NjQ1NTpzdGF0aWMgY2hhciAqX19wYWdlX2dldF9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbmZzL25hbWVpLmMtNjQ1Ni1cdFx0XHQgICAgIHN0cnVjdCBkZWxheWVkX2NhbGwgKmNhbGxiYWNrKVxuLS1cbmZzL25hbWVpLmMtNjQ3OC1cbmZzL25hbWVpLmM6NjQ3OTpjb25zdCBjaGFyICpwYWdlX2dldF9saW5rX3JhdyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9uYW1laS5jLTY0ODAtXHRcdFx0ICAgICAgc3RydWN0IGRlbGF5ZWRfY2FsbCAqY2FsbGJhY2spXG5mcy9uYW1laS5jLTY0ODEte1xuZnMvbmFtZWkuYzo2NDgyOlx0cmV0dXJuIF9fcGFnZV9nZXRfbGluayhkZW50cnksIGlub2RlLCBjYWxsYmFjayk7XG5mcy9uYW1laS5jLTY0ODMtfVxuZnMvbmFtZWkuYzo2NDg0OkVYUE9SVF9TWU1CT0xfR1BMKHBhZ2VfZ2V0X2xpbmtfcmF3KTtcbmZzL25hbWVpLmMtNjQ4NS1cbmZzL25hbWVpLmMtNjQ4Ni0vKipcbmZzL25hbWVpLmM6NjQ4NzogKiBwYWdlX2dldF9saW5rKCkgLSBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZ2V0X2xpbmsgaW5vZGVfb3BlcmF0aW9uLlxuZnMvbmFtZWkuYy02NDg4LSAqIEBkZW50cnk6IFRoZSBkaXJlY3RvcnkgZW50cnkgd2hpY2ggaXMgdGhlIHN5bWxpbmsuXG4tLVxuZnMvbmFtZWkuYy02NDk2LSAqL1xuZnMvbmFtZWkuYzo2NDk3OmNvbnN0IGNoYXIgKnBhZ2VfZ2V0X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZnMvbmFtZWkuYy02NDk4LVx0XHRcdFx0XHRzdHJ1Y3QgZGVsYXllZF9jYWxsICpjYWxsYmFjaylcbmZzL25hbWVpLmMtNjQ5OS17XG5mcy9uYW1laS5jOjY1MDA6XHRjaGFyICprYWRkciA9IF9fcGFnZV9nZXRfbGluayhkZW50cnksIGlub2RlLCBjYWxsYmFjayk7XG5mcy9uYW1laS5jLTY1MDEtXG4tLVxuZnMvbmFtZWkuYy02NTA1LX1cbmZzL25hbWVpLmM6NjUwNjpFWFBPUlRfU1lNQk9MKHBhZ2VfZ2V0X2xpbmspO1xuZnMvbmFtZWkuYy02NTA3LVxuLS1cbmZzL25hbWVpLmMtNjUxMS0gKlxuZnMvbmFtZWkuYzo2NTEyOiAqIFRoaXMgaXMgdXNlZCBpbnRlcm5hbGx5IGJ5IHBhZ2VfZ2V0X2xpbmsoKS4gIEl0IGlzIGV4cG9ydGVkIGZvciB1c2VcbmZzL25hbWVpLmM6NjUxMzogKiBieSBmaWxlc3lzdGVtcyB3aGljaCBuZWVkIHRvIGltcGxlbWVudCBhIHZhcmlhbnQgb2YgcGFnZV9nZXRfbGluaygpXG5mcy9uYW1laS5jLTY1MTQtICogdGhlbXNlbHZlcy4gIERlc3BpdGUgdGhlIGFwcGFyZW50IHN5bW1ldHJ5LCBmaWxlc3lzdGVtcyB3aGljaCB1c2VcbmZzL25hbWVpLmM6NjUxNTogKiBwYWdlX2dldF9saW5rKCkgZG8gbm90IG5lZWQgdG8gY2FsbCBwYWdlX3B1dF9saW5rKCkuXG5mcy9uYW1laS5jLTY1MTYtICpcbi0tXG5mcy9uYW1laS5jPTY1Mjg9aW50IHBhZ2VfcmVhZGxpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyIF9fdXNlciAqYnVmZmVyLCBpbnQgYnVmbGVuKVxuLS1cbmZzL25hbWVpLmMtNjUzMy1cdERFRklORV9ERUxBWUVEX0NBTEwoZG9uZSk7XG5mcy9uYW1laS5jOjY1MzQ6XHRsaW5rID0gcGFnZV9nZXRfbGluayhkZW50cnksIGRfaW5vZGUoZGVudHJ5KSwgXHUwMDI2ZG9uZSk7XG5mcy9uYW1laS5jLTY1MzUtXHRyZXMgPSBQVFJfRVJSKGxpbmspO1xuLS1cbmZzL25hbWVpLmM9NjU3OD1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBwYWdlX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbmZzL25hbWVpLmM6NjU3OTpcdC5nZXRfbGlua1x0PSBwYWdlX2dldF9saW5rLFxuZnMvbmFtZWkuYy02NTgwLX07XG4tLVxuZnMvbmlsZnMyL25hbWVpLmM9NTg0PWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG5pbGZzX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbmZzL25pbGZzMi9uYW1laS5jOjU4NTpcdC5nZXRfbGlua1x0PSBwYWdlX2dldF9saW5rLFxuZnMvbmlsZnMyL25hbWVpLmMtNTg2LVx0LnBlcm1pc3Npb24gICAgID0gbmlsZnNfcGVybWlzc2lvbixcbi0tXG5mcy9vY2ZzMi9zeW1saW5rLmM9ODQ9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgb2NmczJfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0ge1xuZnMvb2NmczIvc3ltbGluay5jOjg1Olx0LmdldF9saW5rXHQ9IHBhZ2VfZ2V0X2xpbmssXG5mcy9vY2ZzMi9zeW1saW5rLmMtODYtXHQuZ2V0YXR0clx0PSBvY2ZzMl9nZXRhdHRyLFxuLS1cbmZzL3NxdWFzaGZzL3N5bWxpbmsuYz0xMDU9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgc3F1YXNoZnNfc3ltbGlua19pbm9kZV9vcHMgPSB7XG5mcy9zcXVhc2hmcy9zeW1saW5rLmM6MTA2Olx0LmdldF9saW5rID0gcGFnZV9nZXRfbGluayxcbmZzL3NxdWFzaGZzL3N5bWxpbmsuYy0xMDctXHQubGlzdHhhdHRyID0gc3F1YXNoZnNfbGlzdHhhdHRyXG4tLVxuZnMvdWRmL3N5bWxpbmsuYz0xNjg9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdWRmX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbmZzL3VkZi9zeW1saW5rLmM6MTY5Olx0LmdldF9saW5rXHQ9IHBhZ2VfZ2V0X2xpbmssXG5mcy91ZGYvc3ltbGluay5jLTE3MC1cdC5nZXRhdHRyXHQ9IHVkZl9zeW1saW5rX2dldGF0dHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjQ2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwmIzM5O3MgTmFtZSBSZXNvbHV0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aG9zZSBmaWxlIHBhdGggbG9va3Vwcy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSByZWFkaW5nIHRoZSBgX19wYWdlX2dldF9saW5rYCBmdW5jdGlvbiwgd2hpY2ggcmVzaWRlcyBpbiBgZnMvbmFtZWkuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIG9yIGF0IGxlYXN0IGEgY3J1Y2lhbCBwYXJ0IG9mIHRoZSBtYWdpYywgaW4gbGlua2luZyBhIGZpbGUgbmFtZSB0byBpdHMgYXNzb2NpYXRlZCBpbm9kZS4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSBpbnZvbHZlZCBpbiBuYXZpZ2F0aW5nIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlLCBsaWtlbHkgZGVhbGluZyB3aXRoIGhvdyBkaXJlY3RvcnkgZW50cmllcyBhcmUgYWNjZXNzZWQgYW5kIHBvdGVudGlhbGx5IGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgdW5kZXJseWluZyBwYWdlIGNhY2hlLiBJIGltYWdpbmUgdGhlcmUgaXMgc29tZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBidWZmZXIgY2FjaGUgdG9vLCBidXQgSSYjMzk7bGwgc2VlIHdoZW4gSSByZWFkIGl0LiBMZXQmIzM5O3Mgc2VlIGhvdyBpdCBnZXRzIGV4ZWN1dGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL25hbWVpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NDU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY0NTU6XHRzdGF0aWMgY2hhciAqX19wYWdlX2dldF9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbjY0NTY6XHRcdFx0XHQgICAgIHN0cnVjdCBkZWxheWVkX2NhbGwgKmNhbGxiYWNrKVxuNjQ1NzpcdHtcbjY0NTg6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG42NDU5Olx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLVx1MDAzZWlfbWFwcGluZztcbjY0NjA6XHRcbjY0NjE6XHRcdGlmICghZGVudHJ5KSB7XG42NDYyOlx0XHRcdGZvbGlvID0gZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgMCk7XG42NDYzOlx0XHRcdGlmIChJU19FUlIoZm9saW8pKVxuNjQ2NDpcdFx0XHRcdHJldHVybiBFUlJfUFRSKC1FQ0hJTEQpO1xuNjQ2NTpcdFx0XHRpZiAoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKSB7XG42NDY2Olx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbjY0Njc6XHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUNISUxEKTtcbjY0Njg6XHRcdFx0fVxuNjQ2OTpcdFx0fSBlbHNlIHtcbjY0NzA6XHRcdFx0Zm9saW8gPSByZWFkX21hcHBpbmdfZm9saW8obWFwcGluZywgMCwgTlVMTCk7XG42NDcxOlx0XHRcdGlmIChJU19FUlIoZm9saW8pKVxuNjQ3MjpcdFx0XHRcdHJldHVybiBFUlJfQ0FTVChmb2xpbyk7XG42NDczOlx0XHR9XG42NDc0Olx0XHRzZXRfZGVsYXllZF9jYWxsKGNhbGxiYWNrLCBwYWdlX3B1dF9saW5rLCBmb2xpbyk7XG42NDc1Olx0XHRCVUdfT04obWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSBcdTAwMjYgX19HRlBfSElHSE1FTSk7XG42NDc2Olx0XHRyZXR1cm4gZm9saW9fYWRkcmVzcyhmb2xpbyk7XG42NDc3Olx0fVxuNjQ3ODpcdFxuNjQ3OTpcdGNvbnN0IGNoYXIgKnBhZ2VfZ2V0X2xpbmtfcmF3KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbjY0ODA6XHRcdFx0XHQgICAgICBzdHJ1Y3QgZGVsYXllZF9jYWxsICpjYWxsYmFjaylcbjY0ODE6XHR7XG42NDgyOlx0XHRyZXR1cm4gX19wYWdlX2dldF9saW5rKGRlbnRyeSwgaW5vZGUsIGNhbGxiYWNrKTtcbjY0ODM6XHR9XG42NDg0Olx0RVhQT1JUX1NZTUJPTF9HUEwocGFnZV9nZXRfbGlua19yYXcpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTM0NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6CgoqKkRlY29uc3RydWN0aW5nIGBwYWdlX2dldF9saW5rYCBhbmQgRm9saW8gQWRkcmVzc2luZyoqCgpBbHJpZ2h0LCBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgX19wYWdlX2dldF9saW5rYCBmdW5jdGlvbiBhbmQgaXQmIzM5O3Mgc3BpdHRpbmcgYmFjayBgZm9saW9fYWRkcmVzcyhmb2xpbylgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBqdXN0IGdpdmluZyB1cyB0aGUgYWRkcmVzcyBhc3NvY2lhdGVkIHdpdGggdGhlIGZvbGlvLiBCdXQgaG9sZCBvbiBhIHNlY29uZC4uLiBpcyBgcGFnZV9nZXRfbGlua2AgYWN0dWFsbHkgKmV4cGVjdGluZyogdGhhdCByZXR1cm5lZCBsaW5rIHRvIGJlIG51bGwtdGVybWluYXRlZD8gVGhhdCBmZWVscyBsaWtlIGEgcG90ZW50aWFsIGdvdGNoYSBJIG5lZWQgdG8gY29uZmlybS4gSXQgbWlnaHQgbm90IGJlIGV4cGxpY2l0bHkgc3RhdGVkLCBzbyBJIG5lZWQgdG8gZ28gYmFjayBhbmQgZXhhbWluZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHBhZ2VfZ2V0X2xpbmtgIGl0c2VsZi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB2ZXJpZnkgaWYgaXQmIzM5O3MgcmVseWluZyBvbiBhIG51bGwgdGVybWluYXRpb24gb3IgaGFuZGxpbmcgYSBsZW5ndGggaW4gc29tZSBvdGhlciB3YXkuIExldCYjMzk7cyBkaWcgaW50byB0aGUgY29kZSBhbmQgY2xhcmlmeSB0aGlzIGNydWNpYWwgcG9pbnQgdG8gYXZvaWQgYW55IHN1YnRsZSBtZW1vcnkgaXNzdWVzIG9yIHBvdGVudGlhbCBidWdzIGRvd24gdGhlIGxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbmFtZWkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY0ODYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjQ4NjpcdC8qKlxuNjQ4NzpcdCAqIHBhZ2VfZ2V0X2xpbmsoKSAtIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBnZXRfbGluayBpbm9kZV9vcGVyYXRpb24uXG42NDg4Olx0ICogQGRlbnRyeTogVGhlIGRpcmVjdG9yeSBlbnRyeSB3aGljaCBpcyB0aGUgc3ltbGluay5cbjY0ODk6XHQgKiBAaW5vZGU6IFRoZSBpbm9kZSBmb3IgdGhlIHN5bWxpbmsuXG42NDkwOlx0ICogQGNhbGxiYWNrOiBVc2VkIHRvIGRyb3AgdGhlIHJlZmVyZW5jZSB0byB0aGUgc3ltbGluay5cbjY0OTE6XHQgKlxuNjQ5MjpcdCAqIEZpbGVzeXN0ZW1zIHdoaWNoIHN0b3JlIHRoZWlyIHN5bWxpbmtzIGluIHRoZSBwYWdlIGNhY2hlIHNob3VsZCB1c2VcbjY0OTM6XHQgKiB0aGlzIHRvIGltcGxlbWVudCB0aGUgZ2V0X2xpbmsoKSBtZW1iZXIgb2YgdGhlaXIgaW5vZGVfb3BlcmF0aW9ucy5cbjY0OTQ6XHQgKlxuNjQ5NTpcdCAqIFJldHVybjogQSBwb2ludGVyIHRvIHRoZSBOVUwtdGVybWluYXRlZCBzeW1saW5rLlxuNjQ5NjpcdCAqL1xuNjQ5NzpcdGNvbnN0IGNoYXIgKnBhZ2VfZ2V0X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuNjQ5ODpcdFx0XHRcdFx0XHRzdHJ1Y3QgZGVsYXllZF9jYWxsICpjYWxsYmFjaylcbjY0OTk6XHR7XG42NTAwOlx0XHRjaGFyICprYWRkciA9IF9fcGFnZV9nZXRfbGluayhkZW50cnksIGlub2RlLCBjYWxsYmFjayk7XG42NTAxOlx0XG42NTAyOlx0XHRpZiAoIUlTX0VSUihrYWRkcikpXG42NTAzOlx0XHRcdG5kX3Rlcm1pbmF0ZV9saW5rKGthZGRyLCBpbm9kZS1cdTAwM2VpX3NpemUsIFBBR0VfU0laRSAtIDEpO1xuNjUwNDpcdFx0cmV0dXJuIGthZGRyO1xuNjUwNTpcdH1cbjY1MDY6XHRFWFBPUlRfU1lNQk9MKHBhZ2VfZ2V0X2xpbmspO1xuNjUwNzpcdFxuNjUwODpcdC8qKlxuNjUwOTpcdCAqIHBhZ2VfcHV0X2xpbmsoKSAtIERyb3AgdGhlIHJlZmVyZW5jZSB0byB0aGUgc3ltbGluay5cbjY1MTA6XHQgKiBAYXJnOiBUaGUgZm9saW8gd2hpY2ggY29udGFpbnMgdGhlIHN5bWxpbmsuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDUxCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjk2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBNaW5peCBGaWxlc3lzdGVtIElPTUFQIENvbnZlcnNpb24gZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGNvbnZlcnRpbmcgdGhlIE1pbml4IGZpbGVzeXN0ZW0gdG8gdXNlIGlvbWFwIGFuZCBteSBwcmltYXJ5IGNvbmNlcm4gaXMgd2hldGhlciBpdCBpbnRyb2R1Y2VzIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciB3cml0dGVuLiBGaXJzdCwgSSBzZWUgYHBhZ2VfZ2V0X2xpbmtgIGNhbGxzIGBuZF90ZXJtaW5hdGVfbGlua2AuIGBuZF90ZXJtaW5hdGVfbGlua2Agc2hvdWxkIG51bGwtdGVybWluYXRlIHRoZSBidWZmZXIsIGFuZCB0aGF0IHBhcnQgc2VlbXMgY29ycmVjdC4gSW4gYG1pbml4X3N5bWxpbmtgLCBhZnRlciB3cml0aW5nIHRoZSBzeW1saW5rIGRhdGEgdG8gZGlzaywgYGlub2RlLSZndDtpX3NpemVgIGlzIHNldCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBzeW1saW5rIHRhcmdldC4gYG5kX3Rlcm1pbmF0ZV9saW5rYCB0aGVuIGVuc3VyZXMgdGhlIG51bGwgdGVybWluYXRvciBpcyBpbiBwbGFjZSwgZWl0aGVyIGZyb20gdGhlIGluaXRpYWwgd3JpdGUgb3IgZnJvbSBgcGFnZV9nZXRfbGlua2AsIHNvIHRoYXQgc2VlbXMgc2FmZS4KCk5vdywgaWYgYG1pbml4X3N5bWxpbmtgIGZhaWxzIGFmdGVyIHdyaXRpbmcsIGl0IGNsZWFucyB1cCBhbmQgY2FsbHMgYGlwdXRgLCBldGMuIC0gYWxsIGdvb2QgdGhlcmUuIGBpYCBpcyBzZXQgdG8gYHN0cmxlbihzeW1uYW1lKSAmIzQzOyAxYCB0byBhY2NvbW1vZGF0ZSBmb3IgdGhlIG51bGwgdGVybWluYXRvci4gVGhlIGltcG9ydGFudCBwYXJ0IGlzIHRoYXQgYGkgLSAxYCBpcyB1c2VkIGFzIHRoZSB3cml0ZSBsZW5ndGguIEl0IHdyaXRlcyBleGFjdGx5IGBzdHJsZW4oc3ltbmFtZSlgIGJ5dGVzLiBUaGF0JiMzOTtzIGEgZ29vZCBjaGVjay4KCkkmIzM5O20gbm93IGxvb2tpbmcgYXQgdGhlIGJyb2FkZXIgY2hhbmdlcywgbGlrZSBgbWluaXhfd3JpdGVwYWdlc2AgdXNpbmcgYGlvbWFwX3dyaXRlcGFnZXNgLiBJdCBhbHNvIGhhcyBhc3NvY2lhdGVkIGNhbGxzIHRvIGBpb21hcF9iaW9fcmVhZF9mb2xpb2AsIGBpb21hcF9iaW9fcmVhZGFoZWFkYCwgYGlvbWFwX2RpcnR5X2ZvbGlvYCwgYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gLCBhbmQgbW9yZS4gYG1pbml4X2lvbWFwX2JlZ2luYCBpcyBhbHNvIGFkZGVkLiBJdCBsb29rcyBsaWtlIGBJT01BUF9GX05FV2AgaXMgdXNlZCwgc28gdW53cml0dGVuIHBhcnRzIG9mIHRoZSBibG9jayB3aWxsIGJlIHplcm9lZCwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEkmIzM5O2QgZXhwZWN0LiBUaGUga2V5IGhlcmUgaXMsIGlmIGBJT01BUF9XUklURWAgaXNuJiMzOTt0IHNldCwgdGhlbiB0aGUgcmVzdWx0IHdpbGwgYmUgYSBob2xlIGFuZCB0aGUgYGlvbWFwX2Jpb19yZWFkX2ZvbGlvYCBzaG91bGQgaGFuZGxlIHRoZSB6ZXJvaW5nIG9mIGEgcmVhZCBmcm9tIGEgaG9sZS4gU28gcmVhZGluZyBhbiB1bmFsbG9jYXRlZCBibG9jayBnZXRzIHplcm9lcy4KCk5leHQgdXAsIGBtaW5peF93cml0ZWJhY2tfcmFuZ2VgIGxvb2tzIGZpbmUgYXMgaXQgZmFsbHMgYmFjayB0byBhIG5vcm1hbCB3cml0ZWJhY2sgc2NlbmFyaW8uIEluIHRoZSBjYXNlIG9mIGBpb21hcF9zeW1saW5rX3dyaXRlYCwgdGhlIGBzeW1uYW1lYCBpdHNlbGYgaXMgaW5pdGlhbGl6ZWQgZnJvbSBWRlMgYW5kIHRodXMgaXQgaXMgc2FmZS4gYGlvbWFwX3N5bWxpbmtfd3JpdGVgIHdyaXRlcyBgaSAtIDFgIGJ5dGVzIGFuZCBpIGlzIGBzdHJsZW4oc3ltbmFtZSkgJiM0MzsgMWAuIFRoaXMgc2VlbXMgdmVyeSB1bmxpa2VseSB0byByZXN1bHQgaW4gdW5pbml0aWFsaXplZCByZWFkcy4KCkZvciBgbWluaXhfZmlsZV93cml0ZV9pdGVyYCwgdGhlIGNvZGUgdXNlcyBgaW92X2l0ZXIgKmZyb21gLCB3aGljaCBjb21lcyBmcm9tIHVzZXJzcGFjZSwgc28gaWYgdGhlIHVzZXIgaGFuZHMgb3ZlciBnYXJiYWdlLCBLTVNBTiB3aWxsIGNhdGNoIGl0IGJlZm9yZSB0aGUgZmlsZXN5c3RlbSBnZXRzIGl0LiBObyBpc3N1ZXMgdGhlcmUuCgpOb3csIEkmIzM5O20gZXhhbWluaW5nIHRoZSBvdGhlciBjb2RlIGNoYW5nZXMuIFRoZSBjaGFuZ2UgdXNlcyBgaW9tYXBfdHJ1bmNhdGVfcGFnZWAgdG8gemVybyB0aGUgdGFpbCBvZiB0aGUgcGFnZSwgd2hpY2ggaXMgZ29vZC4gVGhpcyBhdm9pZHMgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgZHVyaW5nIGxhdGVyIGV4dGVuc2lvbnMuIEkgc2VlIGBtaW5peF9zZXRhdHRyYCBhbmQgdGhlIHJlbGV2YW50IGNhbGxzIHRvIGB0cnVuY2F0ZV9zZXRzaXplYC4gVGhlIGZhY3QgdGhhdCBgbWluaXhfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zYCBub3cgaW5jbHVkZXMgYC5zZXRhdHRyID0gbWluaXhfc2V0YXR0cmAgaXMgaW50ZXJlc3RpbmcuIElzIHRoaXMgbmVlZGVkIGZvciB0cnVuY2F0aW9uIG9mIHN5bWxpbmtzPyBMaWtlbHkuIFRoaXMgYWdhaW4gZG9lc24mIzM5O3Qgc2VlbSBsaWtlIGl0IGV4cG9zZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKVGhlIGBtaW5peF9pb21hcF9iZWdpbmAgZnVuY3Rpb24gYXBwZWFycyB0byBoYW5kbGUgaW5pdGlhbGl6YXRpb24gYW5kIGluZGlyZWN0IGJsb2NrcyBpbiBhIHNhZmUgbWFubmVyLCB1c2luZyB0aGUgZmFtaWxpYXIgYGdldF9ibG9ja2AgbWV0aG9kb2xvZ3kgdGhhdCYjMzk7cyBiZWVuIHJldmlld2VkLiBUaGVyZSBpcyBhIGBibG9ja190b19wYXRoYCBhbmQgYGdldF9icmFuY2hgIHRoYXQgaGFuZGxlcyBpbml0aWFsaXphdGlvbiwgbGlrZSB0aGUgb2xkIGNvZGUuIFN0aWxsIG5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuCgpJJiMzOTttIGdvaW5nIHRocm91Z2ggYGlvbWFwX3N5bWxpbmtfd3JpdGVgLiBJIGNhbiBzZWUgdGhhdCB0aGlzIHVzZXMgc3RhY2sgdmFyaWFibGVzLCBhbmQgYGlvdl9pdGVyX2t2ZWNgIGluaXRpYWxpemVzIHRoZW0uIFNvLCBmdWxseSBpbml0aWFsaXplZC4gTm8gcHJvYmxlbXMuIGBtaW5peF93cml0ZXBhZ2VzYCBhbHNvIGlzIHNhZmUgYXMgaXQmIzM5O3MgY29ycmVjdGx5IGluaXRpYWxpemluZyB0aGUgYHdwY2Agc3RydWN0LiBgbWluaXhfZmlsZV93cml0ZV9pdGVyYCBpcyBzYWZlIHRvby4KCk92ZXJhbGwsIHRoaXMgcGF0Y2ggc2VlbXMgbGlrZSBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgY29udmVyc2lvbiB0byBpb21hcC4gSXQgZG9lc24mIzM5O3QgYXBwZWFyIHRvIGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcy4gVGhlIGNvZGUgaXMgY2FyZWZ1bGx5IGhhbmRsaW5nIGFsbG9jYXRpb25zIGFuZCByZWFkcyBhbmQgd3JpdGVzIHRvIGVuc3VyZSB0aGF0IG1lbW9yeSBpcyBwcm9wZXJseSBpbml0aWFsaXplZC4gS0FTQU4gaXMgc3VmZmljaWVudCBmb3IgdGhpcyBwYXRjaCBhcyBpdCBjYXRjaGVzIG91dCBvZiBib3VuZHMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIEkgZG9uJiMzOTt0IHNlZSBhbnkgbmVlZCBmb3IgS01TQU4uIFRoZSBjcml0aWNhbCBwYXJ0IGlzIHRvIGRvdWJsZSBjaGVjayBgaW9tYXBfc3ltbGlua193cml0ZWAsIHRvIG1ha2Ugc3VyZSB0aGF0IGl0JiMzOTtzIHNhZmUgdG8gdXNlIGFjcm9zcyBmaWxlc3lzdGVtcy4gVGhlIGxlbiBwYXJhbWV0ZXIgc2hvdWxkIGJlIGBzdHJsZW4odGFyZ2V0KSAmIzQzOyAxYCwgYW5kIGlmIHRoZSBsZW5ndGggaXMgYHN0cmxlbih0YXJnZXQpYCB0aGUgZmlsZSB3aWxsIGJlIHRydW5jYXRlZC4gVGhlIG90aGVyIGZpbGVzeXN0ZW1zIGFyZSB0YWtpbmcgYGxlbgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZ2Vfc3ltbGluayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9iZWZzL2xpbnV4dmZzLmM9Mjk5PXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmJlZnNfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubylcbi0tXG5mcy9iZWZzL2xpbnV4dmZzLmMtNDAxLVx0XHRpZiAoYmVmc19pbm8tXHUwMDNlaV9mbGFncyBcdTAwMjYgQkVGU19MT05HX1NZTUxJTkspIHtcbmZzL2JlZnMvbGludXh2ZnMuYzo0MDI6XHRcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNnBhZ2Vfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xuZnMvYmVmcy9saW51eHZmcy5jLTQwMy1cdFx0XHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xuLS1cbmZzL2NyYW1mcy9pbm9kZS5jPTkwPXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmdldF9jcmFtZnNfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9jcmFtZnMvaW5vZGUuYy0xMTUtXHRjYXNlIFNfSUZMTks6XG5mcy9jcmFtZnMvaW5vZGUuYzoxMTY6XHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZwYWdlX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucztcbmZzL2NyYW1mcy9pbm9kZS5jLTExNy1cdFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcbi0tXG5mcy9leHQyL25hbWVpLmM9MTU1PXN0YXRpYyBpbnQgZXh0Ml9zeW1saW5rIChzdHJ1Y3QgbW50X2lkbWFwICogaWRtYXAsIHN0cnVjdCBpbm9kZSAqIGRpcixcbi0tXG5mcy9leHQyL25hbWVpLmMtMTc5LVx0XHRpbm9kZS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHMgPSBcdTAwMjZleHQyX2FvcHM7XG5mcy9leHQyL25hbWVpLmM6MTgwOlx0XHRlcnIgPSBwYWdlX3N5bWxpbmsoaW5vZGUsIHN5bW5hbWUsIGwpO1xuZnMvZXh0Mi9uYW1laS5jLTE4MS1cdFx0aWYgKGVycilcbi0tXG5mcy9leHQ0L2lub2RlLmM9MTQyMz1zdGF0aWMgaW50IHdyaXRlX2VuZF9mbihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvaW5vZGUuYy0xNDM4LSAqIFdlIG5lZWQgdG8gcGljayB1cCB0aGUgbmV3IGlub2RlIHNpemUgd2hpY2ggZ2VuZXJpY19jb21taXRfd3JpdGUgZ2F2ZSB1c1xuZnMvZXh0NC9pbm9kZS5jOjE0Mzk6ICogYGlvY2JgIGNhbiBiZSBOVUxMIC0gZWcsIHdoZW4gY2FsbGVkIGZyb20gcGFnZV9zeW1saW5rKCkuXG5mcy9leHQ0L2lub2RlLmMtMTQ0MC0gKi9cbi0tXG5mcy9mMmZzL25hbWVpLmM9NjQ5PXN0YXRpYyBpbnQgZjJmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9mMmZzL25hbWVpLmMtNjk0LVxuZnMvZjJmcy9uYW1laS5jOjY5NTpcdGVyciA9IHBhZ2Vfc3ltbGluayhpbm9kZSwgZGlza19saW5rLm5hbWUsIGRpc2tfbGluay5sZW4pO1xuZnMvZjJmcy9uYW1laS5jLTY5Ni1cbi0tXG5mcy9oZnNwbHVzL2Rpci5jPTQ2Mz1zdGF0aWMgaW50IGhmc3BsdXNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvaGZzcGx1cy9kaXIuYy00NzctXG5mcy9oZnNwbHVzL2Rpci5jOjQ3ODpcdHJlcyA9IHBhZ2Vfc3ltbGluayhpbm9kZSwgc3ltbmFtZSwgc3RybGVuKHN5bW5hbWUpICYjNDM7IDEpO1xuZnMvaGZzcGx1cy9kaXIuYy00NzktXHRpZiAocmVzKVxuLS1cbmZzL2hwZnMvaW5vZGUuYz00ND12b2lkIGhwZnNfcmVhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmkpXG4tLVxuZnMvaHBmcy9pbm9kZS5jLTc5LVx0XHRcdGktXHUwMDNlaV9tb2RlID0gU19JRkxOSyB8IDA3Nzc7XG5mcy9ocGZzL2lub2RlLmM6ODA6XHRcdFx0aS1cdTAwM2VpX29wID0gXHUwMDI2cGFnZV9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7XG5mcy9ocGZzL2lub2RlLmMtODEtXHRcdFx0aW5vZGVfbm9oaWdobWVtKGkpO1xuLS1cbmZzL2hwZnMvbmFtZWkuYz0yOTI9c3RhdGljIGludCBocGZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL2hwZnMvbmFtZWkuYy0zMzctXHRpbm9kZV9ub2hpZ2htZW0ocmVzdWx0KTtcbmZzL2hwZnMvbmFtZWkuYzozMzg6XHRyZXN1bHQtXHUwMDNlaV9vcCA9IFx1MDAyNnBhZ2Vfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xuZnMvaHBmcy9uYW1laS5jLTMzOS1cdHJlc3VsdC1cdTAwM2VpX2RhdGEuYV9vcHMgPSBcdTAwMjZocGZzX3N5bWxpbmtfYW9wcztcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz04OTQ9c3RhdGljIHN0cnVjdCBpbm9kZSAqaHVnZXRsYmZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTkzOS1cdFx0Y2FzZSBTX0lGTE5LOlxuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTQwOlx0XHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZwYWdlX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucztcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk0MS1cdFx0XHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTEwMDE9c3RhdGljIGludCBodWdldGxiZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDExLVx0XHRpbnQgbCA9IHN0cmxlbihzeW1uYW1lKSYjNDM7MTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEwMTI6XHRcdGVycm9yID0gcGFnZV9zeW1saW5rKGlub2RlLCBzeW1uYW1lLCBsKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwMTMtXHRcdGlmICghZXJyb3IpXG4tLVxuZnMvaXNvZnMvaW5vZGUuYz0xMjcwPXN0YXRpYyBpbnQgaXNvZnNfcmVhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcmVsb2NhdGVkKVxuLS1cbmZzL2lzb2ZzL2lub2RlLmMtMTQ0NS1cdH0gZWxzZSBpZiAoU19JU0xOSyhpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG5mcy9pc29mcy9pbm9kZS5jOjE0NDY6XHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZwYWdlX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucztcbmZzL2lzb2ZzL2lub2RlLmMtMTQ0Ny1cdFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcbi0tXG5mcy9qZnMvaW5vZGUuYz0yND1zdHJ1Y3QgaW5vZGUgKmpmc19pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vKVxuLS1cbmZzL2pmcy9pbm9kZS5jLTQ5LVx0XHRpZiAoaW5vZGUtXHUwMDNlaV9zaXplIFx1MDAzZT0gSURBVEFTSVpFKSB7XG5mcy9qZnMvaW5vZGUuYzo1MDpcdFx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2cGFnZV9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7XG5mcy9qZnMvaW5vZGUuYy01MS1cdFx0XHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xuLS1cbmZzL25hbWVpLmM9NjU0MT1FWFBPUlRfU1lNQk9MKHBhZ2VfcmVhZGxpbmspO1xuZnMvbmFtZWkuYy02NTQyLVxuZnMvbmFtZWkuYzo2NTQzOmludCBwYWdlX3N5bWxpbmsoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqc3ltbmFtZSwgaW50IGxlbilcbmZzL25hbWVpLmMtNjU0NC17XG4tLVxuZnMvbmFtZWkuYy02NTc1LX1cbmZzL25hbWVpLmM6NjU3NjpFWFBPUlRfU1lNQk9MKHBhZ2Vfc3ltbGluayk7XG5mcy9uYW1laS5jLTY1NzctXG5mcy9uYW1laS5jOjY1Nzg6Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgcGFnZV9zeW1saW5rX2lub2RlX29wZXJhdGlvbnMgPSB7XG5mcy9uYW1laS5jLTY1NzktXHQuZ2V0X2xpbmtcdD0gcGFnZV9nZXRfbGluayxcbmZzL25hbWVpLmMtNjU4MC19O1xuZnMvbmFtZWkuYzo2NTgxOkVYUE9SVF9TWU1CT0wocGFnZV9zeW1saW5rX2lub2RlX29wZXJhdGlvbnMpO1xuLS1cbmZzL25pbGZzMi9uYW1laS5jPTE0MT1zdGF0aWMgaW50IG5pbGZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL25pbGZzMi9uYW1laS5jLTE2OC1cdGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcyA9IFx1MDAyNm5pbGZzX2FvcHM7XG5mcy9uaWxmczIvbmFtZWkuYzoxNjk6XHRlcnIgPSBwYWdlX3N5bWxpbmsoaW5vZGUsIHN5bW5hbWUsIGwpO1xuZnMvbmlsZnMyL25hbWVpLmMtMTcwLVx0aWYgKGVycilcbi0tXG5mcy9uaWxmczIvbmFtZWkuYy0xNzMtXHQvKiBtYXJrX2lub2RlX2RpcnR5KGlub2RlKTsgKi9cbmZzL25pbGZzMi9uYW1laS5jOjE3NDpcdC8qIHBhZ2Vfc3ltbGluaygpIGRvIHRoaXMgKi9cbmZzL25pbGZzMi9uYW1laS5jLTE3NS1cbi0tXG5mcy9xbng0L2lub2RlLmM9MjgzPXN0cnVjdCBpbm9kZSAqcW54NF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vKVxuLS1cbmZzL3FueDQvaW5vZGUuYy0zMzctXHR9IGVsc2UgaWYgKFNfSVNMTksoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuZnMvcW54NC9pbm9kZS5jOjMzODpcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNnBhZ2Vfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xuZnMvcW54NC9pbm9kZS5jLTMzOS1cdFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcbi0tXG5mcy9xbng2L2lub2RlLmM9NTExPXN0cnVjdCBpbm9kZSAqcW54Nl9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGlubylcbi0tXG5mcy9xbng2L2lub2RlLmMtNTcxLVx0fSBlbHNlIGlmIChTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbmZzL3FueDYvaW5vZGUuYzo1NzI6XHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZwYWdlX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucztcbmZzL3FueDYvaW5vZGUuYy01NzMtXHRcdGlub2RlX25vaGlnaG1lbShpbm9kZSk7XG4tLVxuZnMvcmFtZnMvaW5vZGUuYz01Nz1zdHJ1Y3QgaW5vZGUgKnJhbWZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL3JhbWZzL2lub2RlLmMtODQtXHRcdGNhc2UgU19JRkxOSzpcbmZzL3JhbWZzL2lub2RlLmM6ODU6XHRcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNnBhZ2Vfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xuZnMvcmFtZnMvaW5vZGUuYy04Ni1cdFx0XHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xuLS1cbmZzL3JhbWZzL2lub2RlLmM9MTM2PXN0YXRpYyBpbnQgcmFtZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvcmFtZnMvaW5vZGUuYy0xNTMtXG5mcy9yYW1mcy9pbm9kZS5jOjE1NDpcdFx0ZXJyb3IgPSBwYWdlX3N5bWxpbmsoaW5vZGUsIHN5bW5hbWUsIGwpO1xuZnMvcmFtZnMvaW5vZGUuYy0xNTUtXHRcdGlmICghZXJyb3IpIHtcbi0tXG5mcy9yb21mcy9zdXBlci5jPTI3Mz1zdGF0aWMgc3RydWN0IGlub2RlICpyb21mc19pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgcG9zKVxuLS1cbmZzL3JvbWZzL3N1cGVyLmMtMzQzLVx0Y2FzZSBST01GSF9TWU06XG5mcy9yb21mcy9zdXBlci5jOjM0NDpcdFx0aS1cdTAwM2VpX29wID0gXHUwMDI2cGFnZV9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7XG5mcy9yb21mcy9zdXBlci5jLTM0NS1cdFx0aW5vZGVfbm9oaWdobWVtKGkpO1xuLS1cbmZzL3Vmcy9pbm9kZS5jPTUyMD1zdGF0aWMgdm9pZCB1ZnNfc2V0X2lub2RlX29wcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL3Vmcy9pbm9kZS5jLTUzNS1cdFx0XHRpbm9kZS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHMgPSBcdTAwMjZ1ZnNfYW9wcztcbmZzL3Vmcy9pbm9kZS5jOjUzNjpcdFx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2cGFnZV9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7XG5mcy91ZnMvaW5vZGUuYy01MzctXHRcdFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcbi0tXG5mcy91ZnMvbmFtZWkuYz0xMDg9c3RhdGljIGludCB1ZnNfc3ltbGluayAoc3RydWN0IG1udF9pZG1hcCAqIGlkbWFwLCBzdHJ1Y3QgaW5vZGUgKiBkaXIsXG4tLVxuZnMvdWZzL25hbWVpLmMtMTI1LVx0XHQvKiBzbG93IHN5bWxpbmsgKi9cbmZzL3Vmcy9uYW1laS5jOjEyNjpcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNnBhZ2Vfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xuZnMvdWZzL25hbWVpLmMtMTI3LVx0XHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xuZnMvdWZzL25hbWVpLmMtMTI4LVx0XHRpbm9kZS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHMgPSBcdTAwMjZ1ZnNfYW9wcztcbmZzL3Vmcy9uYW1laS5jOjEyOTpcdFx0ZXJyID0gcGFnZV9zeW1saW5rKGlub2RlLCBzeW1uYW1lLCBsKTtcbmZzL3Vmcy9uYW1laS5jLTEzMC1cdFx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg4NTcKCQkJCQkJCW91dHB1dDogMjQ2CgkJCQkJCQl0aG91Z2h0czogMzE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1pbml4IEZpbGVzeXN0ZW0gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZXhhbWluZWQgdGhpcyBwYXRjaCBjb252ZXJ0aW5nIHRoZSBNaW5peCBmaWxlc3lzdGVtIHRvIGBpb21hcGAgYnVmZmVyZWQgSS9PLCBkaXRjaGluZyB0aGUgb2xkIGBidWZmZXJfaGVhZGAtYmFzZWQgYmxvY2sgSS9PLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGBpb21hcF9zeW1saW5rX3dyaXRlYC4gTXkgaW5pdGlhbCBjb25jZXJuLCBhcyBhbHdheXMsIGlzIGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgcG90ZW50aWFsIGxlYWtzLCBhbmQgY29udHJvbCBmbG93IGlzc3VlcyB0aGF0IGNhbiBpbnRyb2R1Y2UgdnVsbmVyYWJpbGl0aWVzLgoKTGV0JiMzOTtzIGJyZWFrIGl0IGRvd24uIGBpb21hcF9zeW1saW5rX3dyaXRlYCYjMzk7cyBiZWhhdmlvciBpcyBjb3JyZWN0LiBJIHNhdyB0aGF0IGBwYWdlX3N5bWxpbmtgIGlzIHVzZWQgd2l0aCBhIGxlbmd0aCBvZiBgc3RybGVuKHN5bW5hbWUpICYjNDM7IDFgLCBpbmNsdWRpbmcgdGhlIG51bGwgdGVybWluYXRvciwgYnV0IGBpb21hcF9zeW1saW5rX3dyaXRlYCBjb3JyZWN0bHkgc3VidHJhY3RzIHRoYXQgb25lIGJ5dGUsIHNvIGl0IHdyaXRlcyB0aGUgYWN0dWFsIGxlbmd0aCBvZiB0aGUgc3ltbGluayB0YXJnZXQuIEl0JiMzOTtzIHByb3Blcmx5IG51bGwtdGVybWluYXRlZCBzdHJpbmcgYW5kIGZ1bGx5IGluaXRpYWxpemVkIGJ5IHRoZSBWRlMsIHNvIEkgZG9uJiMzOTt0IHNlZSBhbiBpbW1lZGlhdGUgaXNzdWUgdGhlcmUuIEkmIzM5O20gc2F0aXNmaWVkIHRoYXQgdGhpcyBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBpbnRyb2R1Y2UgYSB2dWxuZXJhYmlsaXR5IGhlcmUuCgpUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgc2FmZSB3aXRoIHRoZSBgaW9tYXBfd3JpdGVfYmVnaW5gIGZ1bmN0aW9uLCB3aGljaCB6ZXJvcyBvdXQgbmV3IGJsb2NrcyBzaW5jZSBgSU9NQVBfRl9ORVdgIGlzIHNldCBmb3IgbmV3IGJsb2NrcywgZW5zdXJpbmcgdGhhdCBwcmV2aW91c2x5IHVud3JpdHRlbiBkYXRhIGlzIGhhbmRsZWQgY29ycmVjdGx5LiBBbmQgc2luY2UgdGhlIHN5bWxpbmsgaXMgZnVsbHkgaW5pdGlhbGl6ZWQsIGl0IGNhbiBiZSBoYW5kbGVkIHNhZmVseS4gVGhlIGBwYWdlX2dldF9saW5rYCBmdW5jdGlvbiBhZGRzIHRoZSBudWxsIHRlcm1pbmF0b3IgaW4gbWVtb3J5IHVwb24gcmVhZGluZywgc28gdGhhdCBpcyBmaW5lIGFzIHdlbGwuCgpUaGUgcmVzdCBvZiB0aGUgcGF0Y2ggcmVwbGFjZXMgc3RhbmRhcmQgcmVhZC93cml0ZS93cml0ZWJhY2sgZnVuY3Rpb25zIHdpdGggdGhlaXIgYGlvbWFwYCBjb3VudGVycGFydHMuIFRoaXMgc2VlbXMgdG8gYmUgYSBzdHJhaWdodGZvcndhcmQgc3Vic3RpdHV0aW9uIGFuZCBoYW5kbGVzIHVzZXItc3BhY2UgZGF0YSBhbmQgcGFnZSBjYWNoZSBvcGVyYXRpb25zIGFwcHJvcHJpYXRlbHkuCgpTaW5jZSB0aGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBubyBuZXcgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgY29udHJvbCBmbG93IGNoYW5nZXMsIEkmIzM5O20gY29uZmlkZW50IHRoZXJlIGFyZSBubyBuZXcgdnVsbmVyYWJpbGl0aWVzIGhlcmUuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGVycm9ycyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBzcGVjaWFsaXplZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXNuJiMzOTt0IHdhcnJhbnRlZC4gVGhpcyBwYXRjaCBhcHBlYXJzIHRvIGJlIGEgc2FmZSByZWZhY3RvcmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29udmVydHMgdGhlIG1pbml4IGZpbGVzeXN0ZW0gdG8gdXNlIGlvbWFwIGZvciBidWZmZXJlZCBJL08sIHJlcGxhY2luZyB0aGUgb2xkZXIgYnVmZmVyX2hlYWQgYmFzZWQgYmxvY2sgSS9PIGZ1bmN0aW9ucy4gSXQgaW50cm9kdWNlcyBgaW9tYXBfc3ltbGlua193cml0ZWAgd2hpY2ggd3JpdGVzIHN5bWxpbmsgdGFyZ2V0cyB0byBkaXNrLiBUaGUgc3ltbGluayB0YXJnZXQgaXMgYSBmdWxseSBpbml0aWFsaXplZCBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIHByb3ZpZGVkIGJ5IHRoZSBWRlMuIFRoZSB1bndyaXR0ZW4gcGFydHMgb2YgdGhlIG5ld2x5IGFsbG9jYXRlZCBibG9jayBhcmUgemVyb2VkIGJ5IGBpb21hcF93cml0ZV9iZWdpbmAgKHNpbmNlIGBJT01BUF9GX05FV2AgaXMgc2V0IGZvciBuZXcgYmxvY2tzKS4gV2hlbiByZWFkaW5nIHRoZSBzeW1saW5rLCBgcGFnZV9nZXRfbGlua2AgYWRkcyB0aGUgbnVsbCB0ZXJtaW5hdG9yIGluIG1lbW9yeS4gVGhlIHJlc3Qgb2YgdGhlIHBhdGNoIHJlcGxhY2VzIHN0YW5kYXJkIHJlYWQvd3JpdGUvd3JpdGViYWNrIGZ1bmN0aW9ucyB3aXRoIHRoZWlyIGlvbWFwIGVxdWl2YWxlbnRzLCB3aGljaCBoYW5kbGUgdXNlciBzcGFjZSBkYXRhIGFuZCBwYWdlIGNhY2hlIGNvcnJlY3RseS4gVGhlcmUgYXJlIG5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgaW5mby1sZWFrcywgb3IgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnZlcnRzIHRoZSBtaW5peCBmaWxlc3lzdGVtIHRvIHVzZSBpb21hcCBmb3IgYnVmZmVyZWQgSS9PLCByZXBsYWNpbmcgdGhlIG9sZGVyIGJ1ZmZlcl9oZWFkIGJhc2VkIGJsb2NrIEkvTyBmdW5jdGlvbnMuIEl0IGludHJvZHVjZXMgYGlvbWFwX3N5bWxpbmtfd3JpdGVgIHdoaWNoIHdyaXRlcyBzeW1saW5rIHRhcmdldHMgdG8gZGlzay4gVGhlIHN5bWxpbmsgdGFyZ2V0IGlzIGEgZnVsbHkgaW5pdGlhbGl6ZWQgbnVsbC10ZXJtaW5hdGVkIHN0cmluZyBwcm92aWRlZCBieSB0aGUgVkZTLiBUaGUgdW53cml0dGVuIHBhcnRzIG9mIHRoZSBuZXdseSBhbGxvY2F0ZWQgYmxvY2sgYXJlIHplcm9lZCBieSBgaW9tYXBfd3JpdGVfYmVnaW5gIChzaW5jZSBgSU9NQVBfRl9ORVdgIGlzIHNldCBmb3IgbmV3IGJsb2NrcykuIFdoZW4gcmVhZGluZyB0aGUgc3ltbGluaywgYHBhZ2VfZ2V0X2xpbmtgIGFkZHMgdGhlIG51bGwgdGVybWluYXRvciBpbiBtZW1vcnkuIFRoZSByZXN0IG9mIHRoZSBwYXRjaCByZXBsYWNlcyBzdGFuZGFyZCByZWFkL3dyaXRlL3dyaXRlYmFjayBmdW5jdGlvbnMgd2l0aCB0aGVpciBpb21hcCBlcXVpdmFsZW50cywgd2hpY2ggaGFuZGxlIHVzZXIgc3BhY2UgZGF0YSBhbmQgcGFnZSBjYWNoZSBjb3JyZWN0bHkuIFRoZXJlIGFyZSBubyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIGluZm8tbGVha3MsIG9yIHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjEwOjE5LjYxODg2NjU3N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzEzNDkzNTU1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNSU5JWF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvbWFwX3N5bWxpbmtfd3JpdGVcIixcbiAgICBcIlYxX21pbml4X2lvbWFwX2JlZ2luXCIsXG4gICAgXCJWMl9taW5peF9pb21hcF9iZWdpblwiLFxuICAgIFwibWluaXhfZmlsZV93cml0ZV9pdGVyXCIsXG4gICAgXCJtaW5peF93cml0ZXBhZ2VzXCIsXG4gICAgXCJtaW5peF9yZWFkX2ZvbGlvXCIsXG4gICAgXCJtaW5peF9yZWFkYWhlYWRcIixcbiAgICBcIm1pbml4X3dyaXRlYmFja19yYW5nZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29udmVydHMgdGhlIG1pbml4IGZpbGVzeXN0ZW0gdG8gdXNlIGlvbWFwIGZvciBidWZmZXJlZCBJL08sIHJlcGxhY2luZyB0aGUgb2xkZXIgYnVmZmVyX2hlYWQgYmFzZWQgYmxvY2sgSS9PIGZ1bmN0aW9ucy4gSXQgaW50cm9kdWNlcyBgaW9tYXBfc3ltbGlua193cml0ZWAgd2hpY2ggd3JpdGVzIHN5bWxpbmsgdGFyZ2V0cyB0byBkaXNrLiBUaGUgc3ltbGluayB0YXJnZXQgaXMgYSBmdWxseSBpbml0aWFsaXplZCBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIHByb3ZpZGVkIGJ5IHRoZSBWRlMuIFRoZSB1bndyaXR0ZW4gcGFydHMgb2YgdGhlIG5ld2x5IGFsbG9jYXRlZCBibG9jayBhcmUgemVyb2VkIGJ5IGBpb21hcF93cml0ZV9iZWdpbmAgKHNpbmNlIGBJT01BUF9GX05FV2AgaXMgc2V0IGZvciBuZXcgYmxvY2tzKS4gV2hlbiByZWFkaW5nIHRoZSBzeW1saW5rLCBgcGFnZV9nZXRfbGlua2AgYWRkcyB0aGUgbnVsbCB0ZXJtaW5hdG9yIGluIG1lbW9yeS4gVGhlIHJlc3Qgb2YgdGhlIHBhdGNoIHJlcGxhY2VzIHN0YW5kYXJkIHJlYWQvd3JpdGUvd3JpdGViYWNrIGZ1bmN0aW9ucyB3aXRoIHRoZWlyIGlvbWFwIGVxdWl2YWxlbnRzLCB3aGljaCBoYW5kbGUgdXNlciBzcGFjZSBkYXRhIGFuZCBwYWdlIGNhY2hlIGNvcnJlY3RseS4gVGhlcmUgYXJlIG5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgaW5mby1sZWFrcywgb3IgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtaWdyYXRlcyB0aGUgbWluaXggZmlsZXN5c3RlbSB0byB1c2UgaW9tYXAgZm9yIGJ1ZmZlcmVkIEkvTyBhbmQgc3ltbGlua3MuIFRoaXMgaW52b2x2ZXMgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWluaXggZmlsZSBvcGVyYXRpb25zLCBhZGRyZXNzIHNwYWNlIG9wZXJhdGlvbnMsIGFuZCBibG9jayBtYXBwaW5nIGxvZ2ljLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IG1vdW50aW5nIGEgbWluaXggZmlsZXN5c3RlbSBpbWFnZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTA6MTkuNjE4ODcxOTY3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODgwMjUwMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmOTRjNWEzZmZjZWQ3MzVmNTg0MmY2NzQ2M2RiYWYxMjUxOTE1ZmVhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDI2IDIyOjEwOjE4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMgYi9mcy9pb21hcC9idWZmZXJlZC1pby5jXFxuaW5kZXggMGE1ZWJmZGE5MGYxMi4uNWU4YWMzZmFkNjcxNCAxMDA2NDRcXG4tLS0gYS9mcy9pb21hcC9idWZmZXJlZC1pby5jXFxuKysrIGIvZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1xcbkBAIC0yMTAwLDMgKzIxMDAsMzcgQEAgaW9tYXBfd3JpdGVwYWdlcyhzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjKVxcbiBcXHRyZXR1cm4gZXJyb3I7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfd3JpdGVwYWdlcyk7XFxuK1xcbitpbnQgaW9tYXBfc3ltbGlua193cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICp0YXJnZXQsIGludCBsZW4sXFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyxcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IGlvbWFwX3dyaXRlX29wcyAqd3JpdGVfb3BzLCB2b2lkICpwcml2YXRlKVxcbit7XFxuK1xcdHN0cnVjdCBrdmVjIHZlYyA9IHtcXG4rXFx0XFx0Lmlvdl9iYXNlXFx0PSAodm9pZCAqKXRhcmdldCxcXG4rXFx0XFx0Lmlvdl9sZW5cXHQ9IGxlbiAtIDEsXFxuK1xcdH07XFxuK1xcdHN0cnVjdCBpb21hcF9pdGVyIGl0ZXIgPSB7XFxuK1xcdFxcdC5pbm9kZVxcdFxcdD0gaW5vZGUsXFxuK1xcdFxcdC5wb3NcXHRcXHQ9IDAsXFxuK1xcdFxcdC5sZW5cXHRcXHQ9IGxlbiAtIDEsXFxuK1xcdFxcdC5mbGFnc1xcdFxcdD0gSU9NQVBfV1JJVEUsXFxuK1xcdFxcdC5wcml2YXRlXFx0PSBwcml2YXRlLFxcbitcXHR9O1xcbitcXHRzdHJ1Y3QgaW92X2l0ZXIgaW92O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aW92X2l0ZXJfa3ZlYyhcXHUwMDI2aW92LCBJVEVSX1NPVVJDRSwgXFx1MDAyNnZlYywgMSwgbGVuIC0gMSk7XFxuK1xcbitcXHR3aGlsZSAoKHJldCA9IGlvbWFwX2l0ZXIoXFx1MDAyNml0ZXIsIG9wcykpIFxcdTAwM2UgMClcXG4rXFx0XFx0aXRlci5zdGF0dXMgPSBpb21hcF93cml0ZV9pdGVyKFxcdTAwMjZpdGVyLCBcXHUwMDI2aW92LCB3cml0ZV9vcHMpO1xcbitcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAodW5saWtlbHkoaXRlci5wb3MgPT0gMCkpXFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbitcXG4rXFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX3N5bWxpbmtfd3JpdGUpO1xcbmRpZmYgLS1naXQgYS9mcy9taW5peC9maWxlLmMgYi9mcy9taW5peC9maWxlLmNcXG5pbmRleCAwMmFhYmJkYjVkZWFhLi42NzY1ZjU3MWJkM2ZjIDEwMDY0NFxcbi0tLSBhL2ZzL21pbml4L2ZpbGUuY1xcbisrKyBiL2ZzL21pbml4L2ZpbGUuY1xcbkBAIC0xMCw2ICsxMCwzMiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnVmZmVyX2hlYWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcIm1pbml4LmhcXFwiXFxuIFxcbitzdGF0aWMgc3NpemVfdCBtaW5peF9maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuK3tcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGlvY2ItXFx1MDAzZWtpX2ZpbHAtXFx1MDAzZWZfbWFwcGluZy1cXHUwMDNlaG9zdDtcXG4rXFx0c3NpemVfdCByZXQ7XFxuK1xcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIoaW5vZGUpO1xcbitcXG4rXFx0aW5vZGVfbG9jayhpbm9kZSk7XFxuK1xcdHJldCA9IGdlbmVyaWNfd3JpdGVfY2hlY2tzKGlvY2IsIGZyb20pO1xcbitcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuK1xcdFxcdGdvdG8gdW5sb2NrO1xcbitcXG4rXFx0cmV0ID0gZmlsZV9tb2RpZmllZChpb2NiLVxcdTAwM2VraV9maWxwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcbitcXHRyZXQgPSBpb21hcF9maWxlX2J1ZmZlcmVkX3dyaXRlKGlvY2IsIGZyb20sIG9wcyxcXG4rXFx0XFx0XFx0TlVMTCwgTlVMTCk7XFxuK1xcbitcXHRpZiAocmV0IFxcdTAwM2UgMClcXG4rXFx0XFx0cmV0ID0gZ2VuZXJpY193cml0ZV9zeW5jKGlvY2IsIHJldCk7XFxuK1xcbit1bmxvY2s6XFxuK1xcdGlub2RlX3VubG9jayhpbm9kZSk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuIC8qXFxuICAqIFdlIGhhdmUgbW9zdGx5IE5VTExzIGhlcmU6IHRoZSBjdXJyZW50IGRlZmF1bHRzIGFyZSBPSyBmb3JcXG4gICogdGhlIG1pbml4IGZpbGVzeXN0ZW0uXFxuQEAgLTE3LDEzICs0MywxMyBAQFxcbiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4gXFx0Lmxsc2Vla1xcdFxcdD0gZ2VuZXJpY19maWxlX2xsc2VlayxcXG4gXFx0LnJlYWRfaXRlclxcdD0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcixcXG4tXFx0LndyaXRlX2l0ZXJcXHQ9IGdlbmVyaWNfZmlsZV93cml0ZV9pdGVyLFxcbitcXHQud3JpdGVfaXRlclxcdD0gbWluaXhfZmlsZV93cml0ZV9pdGVyLFxcbiBcXHQubW1hcF9wcmVwYXJlXFx0PSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLFxcbiBcXHQuZnN5bmNcXHRcXHQ9IHNpbXBsZV9mc3luYyxcXG4gXFx0LnNwbGljZV9yZWFkXFx0PSBmaWxlbWFwX3NwbGljZV9yZWFkLFxcbiB9O1xcbiBcXG4tc3RhdGljIGludCBtaW5peF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbitpbnQgbWluaXhfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gXFx0XFx0XFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKVxcbiB7XFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKGRlbnRyeSk7XFxuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2lub2RlLmMgYi9mcy9taW5peC9pbm9kZS5jXFxuaW5kZXggZGFmODNlNGZmMjVjOC4uMmJmNWVhOTIzNjBhMiAxMDA2NDRcXG4tLS0gYS9mcy9taW5peC9pbm9kZS5jXFxuKysrIGIvZnMvbWluaXgvaW5vZGUuY1xcbkBAIC00MzksNiArNDM5LDMxIEBAIHN0YXRpYyBpbnQgbWluaXhfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBzc2l6ZV90IG1pbml4X3dyaXRlYmFja19yYW5nZShzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLFxcbitcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1NjQgcG9zLCB1bnNpZ25lZCBpbnQgbGVuLCB1NjQgZW5kX3BvcylcXG4re1xcbitcXHRpbnQgZXJyb3I7XFxuK1xcbitcXHRpZiAocG9zIFxcdTAwM2Mgd3BjLVxcdTAwM2Vpb21hcC5vZmZzZXQgfHxcXG4rXFx0XFx0XFx0cG9zIFxcdTAwM2U9IHdwYy1cXHUwMDNlaW9tYXAub2Zmc2V0ICsgd3BjLVxcdTAwM2Vpb21hcC5sZW5ndGgpIHtcXG4rXFx0XFx0aWYgKElOT0RFX1ZFUlNJT04od3BjLVxcdTAwM2Vpbm9kZSkgPT0gTUlOSVhfVjEpXFxuK1xcdFxcdFxcdGVycm9yID0gVjFfbWluaXhfaW9tYXBfYmVnaW4od3BjLVxcdTAwM2Vpbm9kZSwgcG9zLCBsZW4sIElPTUFQX1dSSVRFLFxcbitcXHRcXHRcXHRcXHRcXHUwMDI2d3BjLVxcdTAwM2Vpb21hcCwgTlVMTCk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0ZXJyb3IgPSBWMl9taW5peF9pb21hcF9iZWdpbih3cGMtXFx1MDAzZWlub2RlLCBwb3MsIGxlbiwgSU9NQVBfV1JJVEUsXFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZ3cGMtXFx1MDAzZWlvbWFwLCBOVUxMKTtcXG4rXFx0XFx0aWYgKGVycm9yKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyb3I7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBpb21hcF9hZGRfdG9faW9lbmQod3BjLCBmb2xpbywgcG9zLCBlbmRfcG9zLCBsZW4pO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX3dyaXRlYmFja19vcHMgbWluaXhfd3JpdGViYWNrX29wcyA9IHtcXG4rXFx0LndyaXRlYmFja19yYW5nZSA9IG1pbml4X3dyaXRlYmFja19yYW5nZSxcXG4rXFx0LndyaXRlYmFja19zdWJtaXQgPSBpb21hcF9pb2VuZF93cml0ZWJhY2tfc3VibWl0LFxcbit9O1xcbitcXG4gc3RhdGljIGludCBtaW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssXFxuIFxcdFxcdCAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSlcXG4ge1xcbkBAIC00NDgsMTcgKzQ3Myw0NSBAQCBzdGF0aWMgaW50IG1pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jayxcXG4gXFx0XFx0cmV0dXJuIFYyX21pbml4X2dldF9ibG9jayhpbm9kZSwgYmxvY2ssIGJoX3Jlc3VsdCwgY3JlYXRlKTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBtaW5peF93cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbisvKiBUaGUgb2xkIG1pbml4X3dyaXRlcGFnZXMsIHByZXNlcnZlZCBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMuICovXFxuK3N0YXRpYyBpbnQgbWluaXhfYmxvY2tfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gXFx0XFx0c3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuIHtcXG4gXFx0cmV0dXJuIG1wYWdlX3dyaXRlcGFnZXMobWFwcGluZywgd2JjLCBtaW5peF9nZXRfYmxvY2spO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG1pbml4X3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuK1xcdFxcdHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbit7XFxuK1xcdHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4IHdwYyA9IHtcXG4rXFx0XFx0Lmlub2RlID0gbWFwcGluZy1cXHUwMDNlaG9zdCxcXG4rXFx0XFx0LndiYyA9IHdiYyxcXG4rXFx0XFx0Lm9wcyA9IFxcdTAwMjZtaW5peF93cml0ZWJhY2tfb3BzLFxcbitcXHR9O1xcbitcXHRyZXR1cm4gaW9tYXBfd3JpdGVwYWdlcyhcXHUwMDI2d3BjKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBtaW5peF9yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIoZm9saW8tXFx1MDAzZW1hcHBpbmctXFx1MDAzZWhvc3QpO1xcbitcXG4rXFx0aW9tYXBfYmlvX3JlYWRfZm9saW8oZm9saW8sIG9wcyk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKiBUaGUgb2xkIG1pbml4X3JlYWRfZm9saW8sIHByZXNlcnZlZCBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMuICovXFxuK3N0YXRpYyBpbnQgbWluaXhfYmxvY2tfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRyZXR1cm4gYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKGZvbGlvLCBtaW5peF9nZXRfYmxvY2spO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBtaW5peF9yZWFkYWhlYWQoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWMpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzID0gbWluaXhfaW9tYXBfb3BzX3ZlcihyYWMtXFx1MDAzZW1hcHBpbmctXFx1MDAzZWhvc3QpO1xcbitcXG4rXFx0aW9tYXBfYmlvX3JlYWRhaGVhZChyYWMsIG9wcyk7XFxuK31cXG4rXFxuIGludCBtaW5peF9wcmVwYXJlX2NodW5rKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbilcXG4ge1xcbiBcXHRyZXR1cm4gX19ibG9ja193cml0ZV9iZWdpbihmb2xpbywgcG9zLCBsZW4sIG1pbml4X2dldF9ibG9jayk7XFxuQEAgLTQ4OCwyNiArNTQxLDM1IEBAIHN0YXRpYyBpbnQgbWluaXhfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1zdGF0aWMgc2VjdG9yX3QgbWluaXhfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYmxvY2spXFxuLXtcXG4tXFx0cmV0dXJuIGdlbmVyaWNfYmxvY2tfYm1hcChtYXBwaW5nLGJsb2NrLG1pbml4X2dldF9ibG9jayk7XFxuLX1cXG4tXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG1pbml4X2FvcHMgPSB7XFxuLVxcdC5kaXJ0eV9mb2xpb1xcdD0gYmxvY2tfZGlydHlfZm9saW8sXFxuLVxcdC5pbnZhbGlkYXRlX2ZvbGlvID0gYmxvY2tfaW52YWxpZGF0ZV9mb2xpbyxcXG4rXFx0LmRpcnR5X2ZvbGlvXFx0PSBpb21hcF9kaXJ0eV9mb2xpbyxcXG4rXFx0LmludmFsaWRhdGVfZm9saW8gPSBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvLFxcbiBcXHQucmVhZF9mb2xpbyA9IG1pbml4X3JlYWRfZm9saW8sXFxuK1xcdC5yZWFkYWhlYWQgPSBtaW5peF9yZWFkYWhlYWQsXFxuIFxcdC53cml0ZXBhZ2VzID0gbWluaXhfd3JpdGVwYWdlcyxcXG4rXFx0Lm1pZ3JhdGVfZm9saW8gPSBmaWxlbWFwX21pZ3JhdGVfZm9saW8sXFxuK1xcdC5pc19wYXJ0aWFsbHlfdXB0b2RhdGUgPSBpb21hcF9pc19wYXJ0aWFsbHlfdXB0b2RhdGUsXFxuK1xcdC5yZWxlYXNlX2ZvbGlvID0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcXG4rXFx0LmVycm9yX3JlbW92ZV9mb2xpbyA9IGdlbmVyaWNfZXJyb3JfcmVtb3ZlX2ZvbGlvLFxcbit9O1xcbitcXG4rLyogQSBzcGVjaWFsIGFvcHMgZm9yIGRpcmVjdG9yaWVzIHRoYXQga2VlcHMgdXNpbmcgdGhlIGJ1ZmZlciBoZWFkIGNodW5rcywgYXRcXG4rICogbGVhc3QgZm9yIHRoZSB0aW1lIGJlaW5nLlxcbisgKi9cXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbWluaXhfZGlyX2FvcHMgPSB7XFxuK1xcdC5kaXJ0eV9mb2xpbyA9IGJsb2NrX2RpcnR5X2ZvbGlvLFxcbitcXHQuaW52YWxpZGF0ZV9mb2xpbyA9IGJsb2NrX2ludmFsaWRhdGVfZm9saW8sXFxuK1xcdC5yZWFkX2ZvbGlvID0gbWluaXhfYmxvY2tfcmVhZF9mb2xpbyxcXG4gXFx0LndyaXRlX2JlZ2luID0gbWluaXhfd3JpdGVfYmVnaW4sXFxuIFxcdC53cml0ZV9lbmQgPSBnZW5lcmljX3dyaXRlX2VuZCxcXG4gXFx0Lm1pZ3JhdGVfZm9saW8gPSBidWZmZXJfbWlncmF0ZV9mb2xpbyxcXG4tXFx0LmJtYXAgPSBtaW5peF9ibWFwLFxcbi1cXHQuZGlyZWN0X0lPID0gbm9vcF9kaXJlY3RfSU9cXG4rXFx0LndyaXRlcGFnZXMgPSBtaW5peF9ibG9ja193cml0ZXBhZ2VzLFxcbiB9O1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG4gXFx0LmdldF9saW5rXFx0PSBwYWdlX2dldF9saW5rLFxcbiBcXHQuZ2V0YXR0clxcdD0gbWluaXhfZ2V0YXR0cixcXG4rXFx0LnNldGF0dHJcXHQ9IG1pbml4X3NldGF0dHIsXFxuIH07XFxuIFxcbiB2b2lkIG1pbml4X3NldF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBkZXZfdCByZGV2KVxcbkBAIC01MTksNyArNTgxLDcgQEAgdm9pZCBtaW5peF9zZXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgZGV2X3QgcmRldilcXG4gXFx0fSBlbHNlIGlmIChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuIFxcdFxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNm1pbml4X2Rpcl9pbm9kZV9vcGVyYXRpb25zO1xcbiBcXHRcXHRpbm9kZS1cXHUwMDNlaV9mb3AgPSBcXHUwMDI2bWluaXhfZGlyX29wZXJhdGlvbnM7XFxuLVxcdFxcdGlub2RlLVxcdTAwM2VpX21hcHBpbmctXFx1MDAzZWFfb3BzID0gXFx1MDAyNm1pbml4X2FvcHM7XFxuK1xcdFxcdGlub2RlLVxcdTAwM2VpX21hcHBpbmctXFx1MDAzZWFfb3BzID0gXFx1MDAyNm1pbml4X2Rpcl9hb3BzO1xcbiBcXHR9IGVsc2UgaWYgKFNfSVNMTksoaW5vZGUtXFx1MDAzZWlfbW9kZSkpIHtcXG4gXFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2bWluaXhfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xcbiBcXHRcXHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xcbkBAIC03ODYsNCArODQ4LDMgQEAgbW9kdWxlX2luaXQoaW5pdF9taW5peF9mcylcXG4gbW9kdWxlX2V4aXQoZXhpdF9taW5peF9mcylcXG4gTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJNaW5peCBmaWxlIHN5c3RlbVxcXCIpO1xcbiBNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuLVxcbmRpZmYgLS1naXQgYS9mcy9taW5peC9pb21hcC5jIGIvZnMvbWluaXgvaW9tYXAuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOTBlMDE2YWFhMDFlYVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9mcy9taW5peC9pb21hcC5jXFxuQEAgLTAsMCArMSwxMjIgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisvKlxcbisgKiBpb21hcCBmdW5jdGlvbnMgZm9yIG1pbml4LlxcbisgKi9cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtaW5peF9jaGFpbl9jbGVhbnVwKEluZGlyZWN0ICpjaGFpbiwgSW5kaXJlY3QgKnBhcnRpYWwpXFxuK3tcXG4rXFx0d2hpbGUgKHBhcnRpYWwgXFx1MDAzZSBjaGFpbikge1xcbitcXHRcXHRicmVsc2UocGFydGlhbC1cXHUwMDNlYmgpO1xcbitcXHRcXHRwYXJ0aWFsLS07XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIG1pbml4X2lvbWFwX3NldF9tYXBwZWQoc3RydWN0IGlvbWFwICppb21hcCwgc2VjdG9yX3QgcGh5cyxcXG4rXFx0XFx0dW5zaWduZWQgaW50IGJsa2JpdHMsIHNlY3Rvcl90IGlibG9jaylcXG4re1xcbitcXHRpb21hcC1cXHUwMDNldHlwZSA9IElPTUFQX01BUFBFRDtcXG4rXFx0aW9tYXAtXFx1MDAzZWFkZHIgPSAodTY0KXBoeXMgXFx1MDAzY1xcdTAwM2MgYmxrYml0cztcXG4rXFx0aW9tYXAtXFx1MDAzZWxlbmd0aCA9IDEgXFx1MDAzY1xcdTAwM2MgYmxrYml0cztcXG4rXFx0aW9tYXAtXFx1MDAzZW9mZnNldCA9ICh1NjQpaWJsb2NrIFxcdTAwM2NcXHUwMDNjIGJsa2JpdHM7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtaW5peF9pb21hcF9zZXRfaG9sZShzdHJ1Y3QgaW9tYXAgKmlvbWFwLFxcbitcXHRcXHR1bnNpZ25lZCBpbnQgYmxrYml0cywgc2VjdG9yX3QgaWJsb2NrKVxcbit7XFxuK1xcdGlvbWFwLVxcdTAwM2V0eXBlID0gSU9NQVBfSE9MRTtcXG4rXFx0aW9tYXAtXFx1MDAzZWFkZHIgPSBJT01BUF9OVUxMX0FERFI7XFxuK1xcdGlvbWFwLVxcdTAwM2VsZW5ndGggPSAxIFxcdTAwM2NcXHUwMDNjIGJsa2JpdHM7XFxuK1xcdGlvbWFwLVxcdTAwM2VvZmZzZXQgPSAodTY0KWlibG9jayBcXHUwMDNjXFx1MDAzYyBibGtiaXRzO1xcbit9XFxuK1xcbisvKlxcbisgKiBtaW5peF9pb21hcF9iZWdpbiAtIG1hcCBhIGZpbGUgcmFuZ2UgdG8gZGlzayBibG9ja3MuIEl0IGFjdHMgYXMgYSByZXBsYWNlbWVudFxcbisgKiBmb3IgZ2V0X2Jsb2NrIGluIGl0cmVlX2NvbW1vbi5jLCBhdCBsZWFzdCBpbiB0aGUgaW1wb3J0YW50IHdheXMsIGFuZCBpc1xcbisgKiBhZGFwdGVkIGZyb20gaXQsIGJ1dCBpdCB1c2VzIGlvbWFwIGluc3RlYWQgb2YgYnVmZmVyX2hlYWQuXFxuKyAqL1xcbitzdGF0aWMgaW50IG1pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXFxuK1xcdHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApXFxuK3tcXG4rXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVxcdTAwM2VpX3NiO1xcbitcXHR1bnNpZ25lZCBpbnQgYmxrYml0cyA9IHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xcbitcXHRzZWN0b3JfdCBpYmxvY2sgPSBvZmZzZXQgXFx1MDAzZVxcdTAwM2UgYmxrYml0cztcXG4rXFx0aW50IGNyZWF0ZSA9IGZsYWdzIFxcdTAwMjYgSU9NQVBfV1JJVEU7XFxuK1xcbitcXHRpbnQgb2Zmc2V0c1tERVBUSF07XFxuK1xcdEluZGlyZWN0IGNoYWluW0RFUFRIXTtcXG4rXFx0SW5kaXJlY3QgKnBhcnRpYWw7XFxuK1xcdGludCBkZXB0aCA9IGJsb2NrX3RvX3BhdGgoaW5vZGUsIGlibG9jaywgb2Zmc2V0cyk7XFxuK1xcdGludCBsZWZ0O1xcbitcXHRpbnQgZXJyID0gLUVJTztcXG4rXFxuK1xcdHNlY3Rvcl90IHBoeXM7XFxuK1xcbitcXHQvKiBibG9jayBpcyBiZXlvbmQgbWF4IGZpbGUgc2l6ZSAqL1xcbitcXHRpZiAoZGVwdGggPT0gMClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpb21hcC1cXHUwMDNlYmRldiA9IGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2JkZXY7XFxuK1xcbityZXJlYWQ6XFxuK1xcdHBhcnRpYWwgPSBnZXRfYnJhbmNoKGlub2RlLCBkZXB0aCwgb2Zmc2V0cywgY2hhaW4sIFxcdTAwMjZlcnIpO1xcbitcXG4rXFx0LyogU2ltcGxlc3QgY2FzZSAtIGJsb2NrIGZvdW5kLCBubyBhbGxvY2F0aW9uIG5lZWRlZCAqL1xcbitcXHRpZiAoIXBhcnRpYWwpIHtcXG4rXFx0XFx0aW9tYXAtXFx1MDAzZWZsYWdzID0gMDtcXG4rXFx0XFx0cGh5cyA9IGJsb2NrX3RvX2NwdShjaGFpbltkZXB0aCAtIDFdLmtleSk7XFxuK1xcdFxcdHBhcnRpYWwgPSBjaGFpbitkZXB0aC0xO1xcbitcXHRcXHRtaW5peF9pb21hcF9zZXRfbWFwcGVkKGlvbWFwLCBwaHlzLCBibGtiaXRzLCBpYmxvY2spO1xcbitcXHRcXHRtaW5peF9jaGFpbl9jbGVhbnVwKGNoYWluLCBwYXJ0aWFsKTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0LyogTmV4dCBzaW1wbGUgY2FzZSAtIHBsYWluIGxvb2t1cCBvciBmYWlsZWQgcmVhZCBvZiBpbmRpcmVjdCBibG9jayAqL1xcbitcXHRpZiAoIWNyZWF0ZSB8fCBlcnIgPT0gLUVJTykge1xcbitcXHRcXHRtaW5peF9pb21hcF9zZXRfaG9sZShpb21hcCwgYmxrYml0cywgaWJsb2NrKTtcXG4rXFx0XFx0bWluaXhfY2hhaW5fY2xlYW51cChjaGFpbiwgcGFydGlhbCk7XFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoaXMgaXMgaGVsZCBvdmVyIGZyb20gdGhlIG9yaWdpbmFsIGdldF9ibG9jayBsb2dpYywgd2hlcmUgaXRcXG4rXFx0ICogYWN0ZWQgYXMgYSBndWFyZCBpbiBjYXNlIHRydW5jYXRlKCkgZGVsZXRlZCBibG9ja3MgZnJvbSB1bmRlciB0aGF0XFxuK1xcdCAqIGZ1bmN0aW9uLiBUaGVyZSBzaG91bGQgbm90IGJlIGEgcmFjZSB3aXRoIGlvbWFwIG9wZXJhdGlvbnMsIGJ1dFxcbitcXHQgKiB3ZSdyZSByZXRhaW5pbmcgdGhlIGRlZmVuc2l2ZSBjb2RpbmcgaGVyZSB0byBiZSBleHRyYSBzYWZlIGp1c3QgaW5cXG4rXFx0ICogY2FzZS5cXG4rXFx0ICovXFxuK1xcdGlmIChlcnIgPT0gLUVBR0FJTikge1xcbitcXHRcXHRtaW5peF9jaGFpbl9jbGVhbnVwKGNoYWluLCBwYXJ0aWFsKTtcXG4rXFx0XFx0Z290byByZXJlYWQ7XFxuK1xcdH1cXG4rXFxuK1xcdGxlZnQgPSAoY2hhaW4gKyBkZXB0aCkgLSBwYXJ0aWFsO1xcbitcXHRlcnIgPSBhbGxvY19icmFuY2goaW5vZGUsIGxlZnQsIG9mZnNldHMgKyAocGFydGlhbCAtIGNoYWluKSwgcGFydGlhbCk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0bWluaXhfY2hhaW5fY2xlYW51cChjaGFpbiwgcGFydGlhbCk7XFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChzcGxpY2VfYnJhbmNoKGlub2RlLCBjaGFpbiwgcGFydGlhbCwgbGVmdCkgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdG1pbml4X2NoYWluX2NsZWFudXAoY2hhaW4sIHBhcnRpYWwpO1xcbitcXHRcXHRnb3RvIHJlcmVhZDtcXG4rXFx0fVxcbitcXG4rXFx0LyogU3VjY2Vzc2Z1bCBhbGxvY2F0aW9uLCBtYXBwaW5nIGl0LiAqL1xcbitcXHRpb21hcC1cXHUwMDNlZmxhZ3MgPSBJT01BUF9GX05FVztcXG4rXFx0cGh5cyA9IGJsb2NrX3RvX2NwdShjaGFpbltkZXB0aCAtIDFdLmtleSk7XFxuK1xcdG1pbml4X2lvbWFwX3NldF9tYXBwZWQoaW9tYXAsIHBoeXMsIGJsa2JpdHMsIGlibG9jayk7XFxuK1xcdG1pbml4X2NoYWluX2NsZWFudXAoY2hhaW4sIHBhcnRpYWwpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rLypcXG4rICogbWluaXhfaW9tYXBfZW5kIGVuZHMgdXAgYmVpbmcgYSBub3A7IHNpbmNlIG1pbml4IGRvZXNuJ3QgaGF2ZSBhbnkgZXh0ZW50cyBvclxcbisgKiB0cmFuc2FjdGlvbnMgdG8gd29ycnkgYWJvdXQsIHRoZXJlIGlzbid0IGFueXRoaW5nIHRvIHVwZGF0ZSBoZXJlLiBUaGUgb24tZGlza1xcbisgKiBpbmRpcmVjdCBibG9ja3MgZ2V0IGRpcnRpZWQgaW4gbWluaXhfaW9tYXBfYmVnaW4uXFxuKyAqL1xcbitzdGF0aWMgaW50IG1pbml4X2lvbWFwX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxcbitcXHRzc2l6ZV90IHdyaXR0ZW4sIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcClcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbmRpZmYgLS1naXQgYS9mcy9taW5peC9pdHJlZV9jb21tb24uYyBiL2ZzL21pbml4L2l0cmVlX2NvbW1vbi5jXFxuaW5kZXggYzNjZDJjNzVhZjljZS4uZDczYWIxY2FhY2ZlYyAxMDA2NDRcXG4tLS0gYS9mcy9taW5peC9pdHJlZV9jb21tb24uY1xcbisrKyBiL2ZzL21pbml4L2l0cmVlX2NvbW1vbi5jXFxuQEAgLTMxMSw3ICszMTEsMTUgQEAgc3RhdGljIGlubGluZSB2b2lkIHRydW5jYXRlIChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcXG4gXFx0bG9uZyBpYmxvY2s7XFxuIFxcbiBcXHRpYmxvY2sgPSAoaW5vZGUtXFx1MDAzZWlfc2l6ZSArIHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSAtMSkgXFx1MDAzZVxcdTAwM2Ugc2ItXFx1MDAzZXNfYmxvY2tzaXplX2JpdHM7XFxuLVxcdGJsb2NrX3RydW5jYXRlX3BhZ2UoaW5vZGUtXFx1MDAzZWlfbWFwcGluZywgaW5vZGUtXFx1MDAzZWlfc2l6ZSwgZ2V0X2Jsb2NrKTtcXG4rXFxuK1xcdC8qIERlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBpbm9kZSBiZWluZyB0cnVuY2F0ZWQgaXMgYSBkaXJlY3Rvcnkgb3Igbm90LFxcbitcXHQgKiB3ZSBuZWVkIHRvIGVpdGhlciBjYWxsIGlvbWFwX3RydW5jYXRlX3BhZ2Ugb3IgYmxvY2tfdHJ1bmNhdGVfcGFnZS5cXG4rXFx0ICovXFxuK1xcdGlmIChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKVxcbitcXHRcXHRibG9ja190cnVuY2F0ZV9wYWdlKGlub2RlLVxcdTAwM2VpX21hcHBpbmcsIGlub2RlLVxcdTAwM2VpX3NpemUsIGdldF9ibG9jayk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0aW9tYXBfdHJ1bmNhdGVfcGFnZShpbm9kZSwgaW5vZGUtXFx1MDAzZWlfc2l6ZSwgTlVMTCxcXG4rXFx0XFx0XFx0bWluaXhfaW9tYXBfb3BzX3Zlcihpbm9kZSksIE5VTEwsIE5VTEwpO1xcbiBcXG4gXFx0biA9IGJsb2NrX3RvX3BhdGgoaW5vZGUsIGlibG9jaywgb2Zmc2V0cyk7XFxuIFxcdGlmICghbilcXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvaXRyZWVfdjEuYyBiL2ZzL21pbml4L2l0cmVlX3YxLmNcXG5pbmRleCAxZmVkOTA2MDQyYWE4Li41OGMyOWY0NDQzZDM3IDEwMDY0NFxcbi0tLSBhL2ZzL21pbml4L2l0cmVlX3YxLmNcXG4rKysgYi9mcy9taW5peC9pdHJlZV92MS5jXFxuQEAgLTQ5LDYgKzQ5LDE4IEBAIHN0YXRpYyBpbnQgYmxvY2tfdG9fcGF0aChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgbG9uZyBibG9jaywgaW50IG9mZnNldHNbREVQVEhdKVxcbiB9XFxuIFxcbiAjaW5jbHVkZSBcXFwiaXRyZWVfY29tbW9uLmNcXFwiXFxuKy8qIE5PVEEgQkVORTpcXG4rICpcXG4rICogVGhpcyBpcyBpY2t5IHRvIG1lLCBidXQgYXQgdGhlIHNhbWUgdGltZSBoYXZpbmcgaXQgYmUgYSBzdGFuZGFsb25lIEMgZmlsZVxcbisgKiB0aGF0J3MgY29tcGlsZWQgdG8gb2JqZWN0IGZvcm0gYW5kIGxpbmtlZCBzZXBhcmF0ZWx5IGxpa2UgaXQgaXMgaW4geGlhZnMgaXNcXG4rICogbXVjaCBuYXN0aWVyIGluIG1pbml4IGJlY2F1c2Ugb2YgdGhlIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgbWluaXggZnMgdGhhdFxcbisgKiBoYXZlIHNvbWUgdmVyeSwgdmVyeSBkaWZmZXJlbnQgYXNwZWN0cywgbGlrZSB0aGUgc2l6ZSBvZiBibG9ja190LiBJIGRvbid0XFxuKyAqIGxpa2UgaXQsIGJ1dCBzaW5jZSBtaW5peCBhbHJlYWR5IGhhcyB0aGlzIHBhdHRlcm4gd2hlcmUgYSBjb21tb24gaXRyZWUgZmlsZVxcbisgKiBpcyBpbmNsdWRlZCBpbiB0aGUgaXRyZWVfdjEgYW5kIGl0cmVlX3YyKGFuZCB2MykgZmlsZXMsIEknbSBpbmNsdWRpbmcgaW9tYXAuY1xcbisgKiBpbiB0aGVzZSBmaWxlcyBhcyB3ZWxsLiBJdCBkb2VzIGF0IGxlYXN0IGF2b2lkIGV4cG9ydGluZyBzb21lIGN1cnJlbnRseVxcbisgKiBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlbid0IG5lZWRlZCBhbnl3aGVyZSBidXQgaXRyZWVfY29tbW9uLmMgYW5kIGlvbWFwLmMuXFxuKyAqL1xcbisjaW5jbHVkZSBcXFwiaW9tYXAuY1xcXCJcXG4gXFxuIGludCBWMV9taW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssXFxuIFxcdFxcdFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKVxcbkBAIC02MSw3ICs3MywxOCBAQCB2b2lkIFYxX21pbml4X3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxcbiBcXHR0cnVuY2F0ZShpbm9kZSk7XFxuIH1cXG4gXFxuLXVuc2lnbmVkIFYxX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4rdW5zaWduZWQgaW50IFYxX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4ge1xcbiBcXHRyZXR1cm4gbmJsb2NrcyhzaXplLCBzYik7XFxuIH1cXG4rXFxuK2ludCBWMV9taW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxcbitcXHR1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKVxcbit7XFxuK1xcdHJldHVybiBtaW5peF9pb21hcF9iZWdpbihpbm9kZSwgb2Zmc2V0LCBsZW5ndGgsIGZsYWdzLCBpb21hcCwgc3JjbWFwKTtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMV9taW5peF9pb21hcF9vcHMgPSB7XFxuK1xcdC5pb21hcF9iZWdpbiA9IFYxX21pbml4X2lvbWFwX2JlZ2luLFxcbitcXHQuaW9tYXBfZW5kICAgPSBtaW5peF9pb21hcF9lbmQsXFxuK307XFxuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2l0cmVlX3YyLmMgYi9mcy9taW5peC9pdHJlZV92Mi5jXFxuaW5kZXggOWQwMGYzMWEyZDlkMS4uZmM3YTVhZThmYTFjYSAxMDA2NDRcXG4tLS0gYS9mcy9taW5peC9pdHJlZV92Mi5jXFxuKysrIGIvZnMvbWluaXgvaXRyZWVfdjIuY1xcbkBAIC01Nyw2ICs1NywxMCBAQCBzdGF0aWMgaW50IGJsb2NrX3RvX3BhdGgoc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssIGludCBvZmZzZXRzW0RFUFRIXSlcXG4gfVxcbiBcXG4gI2luY2x1ZGUgXFxcIml0cmVlX2NvbW1vbi5jXFxcIlxcbisvKiBTZWUgdGhlIG5vdGUgaW4gaXRyZWVfdjEgaW4gYSBjb21tZW50IHRoYXQgc3RhcnRzIFxcXCJOT1RBIEJFTkVcXFwiIGZvciBhblxcbisgKiBleHBsYW5hdGlvbiBmb3Igd2h5IGlvbWFwLmMgaXMgaW5jbHVkZWQgaGVyZS5cXG4rICovXFxuKyNpbmNsdWRlIFxcXCJpb21hcC5jXFxcIlxcbiBcXG4gaW50IFYyX21pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgbG9uZyBibG9jayxcXG4gXFx0XFx0XFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpXFxuQEAgLTY5LDcgKzczLDE4IEBAIHZvaWQgVjJfbWluaXhfdHJ1bmNhdGUoc3RydWN0IGlub2RlICogaW5vZGUpXFxuIFxcdHRydW5jYXRlKGlub2RlKTtcXG4gfVxcbiBcXG4tdW5zaWduZWQgVjJfbWluaXhfYmxvY2tzKGxvZmZfdCBzaXplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbit1bnNpZ25lZCBpbnQgVjJfbWluaXhfYmxvY2tzKGxvZmZfdCBzaXplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiB7XFxuIFxcdHJldHVybiBuYmxvY2tzKHNpemUsIHNiKTtcXG4gfVxcbitcXG4raW50IFYyX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXFxuK1xcdHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApXFxuK3tcXG4rXFx0cmV0dXJuIG1pbml4X2lvbWFwX2JlZ2luKGlub2RlLCBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsIGlvbWFwLCBzcmNtYXApO1xcbit9XFxuK1xcbitjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYyX21pbml4X2lvbWFwX29wcyA9IHtcXG4rXFx0LmlvbWFwX2JlZ2luID0gVjJfbWluaXhfaW9tYXBfYmVnaW4sXFxuK1xcdC5pb21hcF9lbmQgICA9IG1pbml4X2lvbWFwX2VuZCxcXG4rfTtcXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvbWluaXguaCBiL2ZzL21pbml4L21pbml4LmhcXG5pbmRleCA3ODcyMmNlMjJlMWUxLi45MDM1NjA0YzY4Y2ExIDEwMDY0NFxcbi0tLSBhL2ZzL21pbml4L21pbml4LmhcXG4rKysgYi9mcy9taW5peC9taW5peC5oXFxuQEAgLTUsNiArNSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZW1hcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWluaXhfZnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvbWFwLmhcXHUwMDNlXFxuIFxcbiAjZGVmaW5lIElOT0RFX1ZFUlNJT04oaW5vZGUpXFx0bWluaXhfc2IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VzX3ZlcnNpb25cXG4gI2RlZmluZSBNSU5JWF9WMVxcdFxcdDB4MDAwMVxcdFxcdC8qIG9yaWdpbmFsIG1pbml4IGZzICovXFxuQEAgLTU3LDYgKzU4LDggQEAgdm9pZCBtaW5peF9mcmVlX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGxvbmcgYmxvY2spO1xcbiB1bnNpZ25lZCBsb25nIG1pbml4X2NvdW50X2ZyZWVfYmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xcbiBpbnQgbWluaXhfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICosIGNvbnN0IHN0cnVjdCBwYXRoICosXFxuIFxcdFxcdHN0cnVjdCBrc3RhdCAqLCB1MzIsIHVuc2lnbmVkIGludCk7XFxuK2ludCBtaW5peF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuK1xcdHN0cnVjdCBpYXR0ciAqYXR0cik7XFxuIGludCBtaW5peF9wcmVwYXJlX2NodW5rKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbik7XFxuIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbWluaXhfZ2V0X21ldGFkYXRhX2JocyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gXFxuQEAgLTc2LDEzICs3OSwyMyBAQCBpbnQgbWluaXhfbWFrZV9lbXB0eShzdHJ1Y3QgaW5vZGUqLCBzdHJ1Y3QgaW5vZGUqKTtcXG4gaW50IG1pbml4X2VtcHR5X2RpcihzdHJ1Y3QgaW5vZGUqKTtcXG4gaW50IG1pbml4X3NldF9saW5rKHN0cnVjdCBtaW5peF9kaXJfZW50cnkgKmRlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4rXFxuIHN0cnVjdCBtaW5peF9kaXJfZW50cnkgKm1pbml4X2RvdGRvdChzdHJ1Y3QgaW5vZGUqLCBzdHJ1Y3QgZm9saW8gKiopO1xcbiBpbm9fdCBtaW5peF9pbm9kZV9ieV9uYW1lKHN0cnVjdCBkZW50cnkqKTtcXG4gXFxuK2ludCBWMV9taW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LFxcbitcXHRsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsXFxuK1xcdHN0cnVjdCBpb21hcCAqc3JjbWFwKTtcXG4raW50IFYyX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXFxuK1xcdGxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCxcXG4rXFx0c3RydWN0IGlvbWFwICpzcmNtYXApO1xcbitcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfaW5vZGVfb3BlcmF0aW9ucztcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X2Rpcl9pbm9kZV9vcGVyYXRpb25zO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9maWxlX29wZXJhdGlvbnM7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2Rpcl9vcGVyYXRpb25zO1xcbitleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMV9taW5peF9pb21hcF9vcHM7XFxuK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYyX21pbml4X2lvbWFwX29wcztcXG4gXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1pbml4X3NiX2luZm8gKm1pbml4X3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIHtcXG5AQCAtOTQsMTEgKzEwNywxNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtaW5peF9pbm9kZV9pbmZvICptaW5peF9pKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdHJldHVybiBjb250YWluZXJfb2YoaW5vZGUsIHN0cnVjdCBtaW5peF9pbm9kZV9pbmZvLCB2ZnNfaW5vZGUpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIG1pbml4X2Jsb2Nrc19uZWVkZWQodW5zaWduZWQgYml0cywgdW5zaWduZWQgYmxvY2tzaXplKVxcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBtaW5peF9ibG9ja3NfbmVlZGVkKHVuc2lnbmVkIGludCBiaXRzLCB1bnNpZ25lZCBpbnQgYmxvY2tzaXplKVxcbiB7XFxuIFxcdHJldHVybiBESVZfUk9VTkRfVVBfUE9XMihiaXRzLCBibG9ja3NpemUgKiA4KTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICptaW5peF9pb21hcF9vcHNfdmVyKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuK3tcXG4rXFx0cmV0dXJuIChJTk9ERV9WRVJTSU9OKGlub2RlKSA9PSBNSU5JWF9WMSkgP1xcbitcXHRcXHRcXHUwMDI2VjFfbWluaXhfaW9tYXBfb3BzIDogXFx1MDAyNlYyX21pbml4X2lvbWFwX29wcztcXG4rfVxcbitcXG4gI2lmIGRlZmluZWQoQ09ORklHX01JTklYX0ZTX05BVElWRV9FTkRJQU4pIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4gXFx0ZGVmaW5lZChDT05GSUdfTUlOSVhfRlNfQklHX0VORElBTl8xNkJJVF9JTkRFWEVEKVxcbiBcXG5AQCAtMTI4LDcgKzE0Nyw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbWluaXhfYmxvY2tzX25lZWRlZCh1bnNpZ25lZCBiaXRzLCB1bnNpZ25lZCBibG9ja3NpemUpXFxuICAqIGJpZy1lbmRpYW4gMTZiaXQgaW5kZXhlZCBiaXRtYXBzXFxuICAqL1xcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgbWluaXhfZmluZF9maXJzdF96ZXJvX2JpdChjb25zdCB2b2lkICp2YWRkciwgdW5zaWduZWQgc2l6ZSlcXG4rc3RhdGljIGlubGluZSBpbnQgbWluaXhfZmluZF9maXJzdF96ZXJvX2JpdChjb25zdCB2b2lkICp2YWRkciwgdW5zaWduZWQgaW50IHNpemUpXFxuIHtcXG4gXFx0Y29uc3QgdW5zaWduZWQgc2hvcnQgKnAgPSB2YWRkciwgKmFkZHIgPSB2YWRkcjtcXG4gXFx0dW5zaWduZWQgc2hvcnQgbnVtO1xcbmRpZmYgLS1naXQgYS9mcy9taW5peC9uYW1laS5jIGIvZnMvbWluaXgvbmFtZWkuY1xcbmluZGV4IDU1MjViYTM2N2VkNzQuLjUyZTExNTAxM2FiZjggMTAwNjQ0XFxuLS0tIGEvZnMvbWluaXgvbmFtZWkuY1xcbisrKyBiL2ZzL21pbml4L25hbWVpLmNcXG5AQCAtNiw2ICs2LDcgQEBcXG4gICovXFxuIFxcbiAjaW5jbHVkZSBcXFwibWluaXguaFxcXCJcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvbWFwLmhcXHUwMDNlXFxuIFxcbiBzdGF0aWMgaW50IGFkZF9ub25kaXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiB7XFxuQEAgLTg0LDEyICs4NSwxNiBAQCBzdGF0aWMgaW50IG1pbml4X3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRcXHRyZXR1cm4gUFRSX0VSUihpbm9kZSk7XFxuIFxcbiBcXHRtaW5peF9zZXRfaW5vZGUoaW5vZGUsIDApO1xcbi1cXHRlcnIgPSBwYWdlX3N5bWxpbmsoaW5vZGUsIHN5bW5hbWUsIGkpO1xcbitcXHRlcnIgPSBpb21hcF9zeW1saW5rX3dyaXRlKGlub2RlLCBzeW1uYW1lLCBpLCBtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKSwgTlVMTCwgTlVMTCk7XFxuK1xcbiBcXHRpZiAodW5saWtlbHkoZXJyKSkge1xcbiBcXHRcXHRpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7XFxuIFxcdFxcdGlwdXQoaW5vZGUpO1xcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuK1xcbitcXHRpX3NpemVfd3JpdGUoaW5vZGUsIGkgLSAxKTtcXG4rXFxuIFxcdHJldHVybiBhZGRfbm9uZGlyKGRlbnRyeSwgaW5vZGUpO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvbWFwLmggYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcXG5pbmRleCA4Yzc1NGViOTc0ZmJmLi5hYjI3YTNhNWI4ZDJjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvaW9tYXAuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvaW9tYXAuaFxcbkBAIC00NzEsNiArNDcxLDkgQEAgbG9mZl90IGlvbWFwX3NlZWtfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LFxcbiBcXHRcXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMpO1xcbiBzZWN0b3JfdCBpb21hcF9ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibm8sXFxuIFxcdFxcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyk7XFxuK2ludCBpb21hcF9zeW1saW5rX3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKnRhcmdldCwgaW50IGxlbixcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLFxcbitcXHRcXHRjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGVfb3BzICp3cml0ZV9vcHMsIHZvaWQgKnByaXZhdGUpO1xcbiBcXG4gLypcXG4gICogRmxhZ3MgZm9yIGlvbWFwX2lvZW5kLVxcdTAwM2Vpb19mbGFncy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTA6MjAuMTA3NjEzMDc2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjYxMjQ2MDAwMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUlOSVhfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb21hcF9zeW1saW5rX3dyaXRlXCIsXG4gICAgXCJWMV9taW5peF9pb21hcF9iZWdpblwiLFxuICAgIFwiVjJfbWluaXhfaW9tYXBfYmVnaW5cIixcbiAgICBcIm1pbml4X2ZpbGVfd3JpdGVfaXRlclwiLFxuICAgIFwibWluaXhfd3JpdGVwYWdlc1wiLFxuICAgIFwibWluaXhfcmVhZF9mb2xpb1wiLFxuICAgIFwibWluaXhfcmVhZGFoZWFkXCIsXG4gICAgXCJtaW5peF93cml0ZWJhY2tfcmFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtaWdyYXRlcyB0aGUgbWluaXggZmlsZXN5c3RlbSB0byB1c2UgaW9tYXAgZm9yIGJ1ZmZlcmVkIEkvTyBhbmQgc3ltbGlua3MuIFRoaXMgaW52b2x2ZXMgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWluaXggZmlsZSBvcGVyYXRpb25zLCBhZGRyZXNzIHNwYWNlIG9wZXJhdGlvbnMsIGFuZCBibG9jayBtYXBwaW5nIGxvZ2ljLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IG1vdW50aW5nIGEgbWluaXggZmlsZXN5c3RlbSBpbWFnZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjk0YzVhM2ZmY2VkNzM1ZjU4NDJmNjc0NjNkYmFmMTI1MTkxNWZlYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDIyOjEwOjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvaW9tYXAvYnVmZmVyZWQtaW8uYyBiL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNcbmluZGV4IDBhNWViZmRhOTBmMTIuLjVlOGFjM2ZhZDY3MTQgMTAwNjQ0XG4tLS0gYS9mcy9pb21hcC9idWZmZXJlZC1pby5jXG4rKysgYi9mcy9pb21hcC9idWZmZXJlZC1pby5jXG5AQCAtMjEwMCwzICsyMTAwLDM3IEBAIGlvbWFwX3dyaXRlcGFnZXMoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYylcbiBcdHJldHVybiBlcnJvcjtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfd3JpdGVwYWdlcyk7XG4rXG4raW50IGlvbWFwX3N5bWxpbmtfd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqdGFyZ2V0LCBpbnQgbGVuLFxuK1x0XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsXG4rXHRcdGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZV9vcHMgKndyaXRlX29wcywgdm9pZCAqcHJpdmF0ZSlcbit7XG4rXHRzdHJ1Y3Qga3ZlYyB2ZWMgPSB7XG4rXHRcdC5pb3ZfYmFzZVx0PSAodm9pZCAqKXRhcmdldCxcbitcdFx0Lmlvdl9sZW5cdD0gbGVuIC0gMSxcbitcdH07XG4rXHRzdHJ1Y3QgaW9tYXBfaXRlciBpdGVyID0ge1xuK1x0XHQuaW5vZGVcdFx0PSBpbm9kZSxcbitcdFx0LnBvc1x0XHQ9IDAsXG4rXHRcdC5sZW5cdFx0PSBsZW4gLSAxLFxuK1x0XHQuZmxhZ3NcdFx0PSBJT01BUF9XUklURSxcbitcdFx0LnByaXZhdGVcdD0gcHJpdmF0ZSxcbitcdH07XG4rXHRzdHJ1Y3QgaW92X2l0ZXIgaW92O1xuK1x0aW50IHJldDtcbitcbitcdGlvdl9pdGVyX2t2ZWMoXHUwMDI2aW92LCBJVEVSX1NPVVJDRSwgXHUwMDI2dmVjLCAxLCBsZW4gLSAxKTtcbitcbitcdHdoaWxlICgocmV0ID0gaW9tYXBfaXRlcihcdTAwMjZpdGVyLCBvcHMpKSBcdTAwM2UgMClcbitcdFx0aXRlci5zdGF0dXMgPSBpb21hcF93cml0ZV9pdGVyKFx1MDAyNml0ZXIsIFx1MDAyNmlvdiwgd3JpdGVfb3BzKTtcbitcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAodW5saWtlbHkoaXRlci5wb3MgPT0gMCkpXG4rXHRcdHJldHVybiAtRUlPO1xuK1xuK1x0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfc3ltbGlua193cml0ZSk7XG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvZmlsZS5jIGIvZnMvbWluaXgvZmlsZS5jXG5pbmRleCAwMmFhYmJkYjVkZWFhLi42NzY1ZjU3MWJkM2ZjIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvZmlsZS5jXG4rKysgYi9mcy9taW5peC9maWxlLmNcbkBAIC0xMCw2ICsxMCwzMiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J1ZmZlcl9oZWFkLmhcdTAwM2VcbiAjaW5jbHVkZSBcIm1pbml4LmhcIlxuIFxuK3N0YXRpYyBzc2l6ZV90IG1pbml4X2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbit7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaW9jYi1cdTAwM2VraV9maWxwLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuK1x0c3NpemVfdCByZXQ7XG4rXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKTtcbitcbitcdGlub2RlX2xvY2soaW5vZGUpO1xuK1x0cmV0ID0gZ2VuZXJpY193cml0ZV9jaGVja3MoaW9jYiwgZnJvbSk7XG4rXHRpZiAocmV0IFx1MDAzYz0gMClcbitcdFx0Z290byB1bmxvY2s7XG4rXG4rXHRyZXQgPSBmaWxlX21vZGlmaWVkKGlvY2ItXHUwMDNla2lfZmlscCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIHVubG9jaztcbitcbitcdHJldCA9IGlvbWFwX2ZpbGVfYnVmZmVyZWRfd3JpdGUoaW9jYiwgZnJvbSwgb3BzLFxuK1x0XHRcdE5VTEwsIE5VTEwpO1xuK1xuK1x0aWYgKHJldCBcdTAwM2UgMClcbitcdFx0cmV0ID0gZ2VuZXJpY193cml0ZV9zeW5jKGlvY2IsIHJldCk7XG4rXG4rdW5sb2NrOlxuK1x0aW5vZGVfdW5sb2NrKGlub2RlKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIC8qXG4gICogV2UgaGF2ZSBtb3N0bHkgTlVMTHMgaGVyZTogdGhlIGN1cnJlbnQgZGVmYXVsdHMgYXJlIE9LIGZvclxuICAqIHRoZSBtaW5peCBmaWxlc3lzdGVtLlxuQEAgLTE3LDEzICs0MywxMyBAQFxuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWluaXhfZmlsZV9vcGVyYXRpb25zID0ge1xuIFx0Lmxsc2Vla1x0XHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXG4gXHQucmVhZF9pdGVyXHQ9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsXG4tXHQud3JpdGVfaXRlclx0PSBnZW5lcmljX2ZpbGVfd3JpdGVfaXRlcixcbitcdC53cml0ZV9pdGVyXHQ9IG1pbml4X2ZpbGVfd3JpdGVfaXRlcixcbiBcdC5tbWFwX3ByZXBhcmVcdD0gZ2VuZXJpY19maWxlX21tYXBfcHJlcGFyZSxcbiBcdC5mc3luY1x0XHQ9IHNpbXBsZV9mc3luYyxcbiBcdC5zcGxpY2VfcmVhZFx0PSBmaWxlbWFwX3NwbGljZV9yZWFkLFxuIH07XG4gXG4tc3RhdGljIGludCBtaW5peF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK2ludCBtaW5peF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cilcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShkZW50cnkpO1xuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2lub2RlLmMgYi9mcy9taW5peC9pbm9kZS5jXG5pbmRleCBkYWY4M2U0ZmYyNWM4Li4yYmY1ZWE5MjM2MGEyIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvaW5vZGUuY1xuKysrIGIvZnMvbWluaXgvaW5vZGUuY1xuQEAgLTQzOSw2ICs0MzksMzEgQEAgc3RhdGljIGludCBtaW5peF9zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBzc2l6ZV90IG1pbml4X3dyaXRlYmFja19yYW5nZShzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLFxuK1x0c3RydWN0IGZvbGlvICpmb2xpbywgdTY0IHBvcywgdW5zaWduZWQgaW50IGxlbiwgdTY0IGVuZF9wb3MpXG4re1xuK1x0aW50IGVycm9yO1xuK1xuK1x0aWYgKHBvcyBcdTAwM2Mgd3BjLVx1MDAzZWlvbWFwLm9mZnNldCB8fFxuK1x0XHRcdHBvcyBcdTAwM2U9IHdwYy1cdTAwM2Vpb21hcC5vZmZzZXQgKyB3cGMtXHUwMDNlaW9tYXAubGVuZ3RoKSB7XG4rXHRcdGlmIChJTk9ERV9WRVJTSU9OKHdwYy1cdTAwM2Vpbm9kZSkgPT0gTUlOSVhfVjEpXG4rXHRcdFx0ZXJyb3IgPSBWMV9taW5peF9pb21hcF9iZWdpbih3cGMtXHUwMDNlaW5vZGUsIHBvcywgbGVuLCBJT01BUF9XUklURSxcbitcdFx0XHRcdFx1MDAyNndwYy1cdTAwM2Vpb21hcCwgTlVMTCk7XG4rXHRcdGVsc2VcbitcdFx0XHRlcnJvciA9IFYyX21pbml4X2lvbWFwX2JlZ2luKHdwYy1cdTAwM2Vpbm9kZSwgcG9zLCBsZW4sIElPTUFQX1dSSVRFLFxuK1x0XHRcdFx0XHUwMDI2d3BjLVx1MDAzZWlvbWFwLCBOVUxMKTtcbitcdFx0aWYgKGVycm9yKVxuK1x0XHRcdHJldHVybiBlcnJvcjtcbitcdH1cbitcbitcdHJldHVybiBpb21hcF9hZGRfdG9faW9lbmQod3BjLCBmb2xpbywgcG9zLCBlbmRfcG9zLCBsZW4pO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX3dyaXRlYmFja19vcHMgbWluaXhfd3JpdGViYWNrX29wcyA9IHtcbitcdC53cml0ZWJhY2tfcmFuZ2UgPSBtaW5peF93cml0ZWJhY2tfcmFuZ2UsXG4rXHQud3JpdGViYWNrX3N1Ym1pdCA9IGlvbWFwX2lvZW5kX3dyaXRlYmFja19zdWJtaXQsXG4rfTtcbitcbiBzdGF0aWMgaW50IG1pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jayxcbiBcdFx0ICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKVxuIHtcbkBAIC00NDgsMTcgKzQ3Myw0NSBAQCBzdGF0aWMgaW50IG1pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jayxcbiBcdFx0cmV0dXJuIFYyX21pbml4X2dldF9ibG9jayhpbm9kZSwgYmxvY2ssIGJoX3Jlc3VsdCwgY3JlYXRlKTtcbiB9XG4gXG4tc3RhdGljIGludCBtaW5peF93cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuKy8qIFRoZSBvbGQgbWluaXhfd3JpdGVwYWdlcywgcHJlc2VydmVkIGZvciBkaXJlY3Rvcnkgb3BlcmF0aW9ucy4gKi9cbitzdGF0aWMgaW50IG1pbml4X2Jsb2NrX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIHtcbiBcdHJldHVybiBtcGFnZV93cml0ZXBhZ2VzKG1hcHBpbmcsIHdiYywgbWluaXhfZ2V0X2Jsb2NrKTtcbiB9XG4gXG4rc3RhdGljIGludCBtaW5peF93cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuK1x0XHRzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbit7XG4rXHRzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCB3cGMgPSB7XG4rXHRcdC5pbm9kZSA9IG1hcHBpbmctXHUwMDNlaG9zdCxcbitcdFx0LndiYyA9IHdiYyxcbitcdFx0Lm9wcyA9IFx1MDAyNm1pbml4X3dyaXRlYmFja19vcHMsXG4rXHR9O1xuK1x0cmV0dXJuIGlvbWFwX3dyaXRlcGFnZXMoXHUwMDI2d3BjKTtcbit9XG4rXG4gc3RhdGljIGludCBtaW5peF9yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIoZm9saW8tXHUwMDNlbWFwcGluZy1cdTAwM2Vob3N0KTtcbitcbitcdGlvbWFwX2Jpb19yZWFkX2ZvbGlvKGZvbGlvLCBvcHMpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIFRoZSBvbGQgbWluaXhfcmVhZF9mb2xpbywgcHJlc2VydmVkIGZvciBkaXJlY3Rvcnkgb3BlcmF0aW9ucy4gKi9cbitzdGF0aWMgaW50IG1pbml4X2Jsb2NrX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0cmV0dXJuIGJsb2NrX3JlYWRfZnVsbF9mb2xpbyhmb2xpbywgbWluaXhfZ2V0X2Jsb2NrKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgbWluaXhfcmVhZGFoZWFkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIocmFjLVx1MDAzZW1hcHBpbmctXHUwMDNlaG9zdCk7XG4rXG4rXHRpb21hcF9iaW9fcmVhZGFoZWFkKHJhYywgb3BzKTtcbit9XG4rXG4gaW50IG1pbml4X3ByZXBhcmVfY2h1bmsoc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuKVxuIHtcbiBcdHJldHVybiBfX2Jsb2NrX3dyaXRlX2JlZ2luKGZvbGlvLCBwb3MsIGxlbiwgbWluaXhfZ2V0X2Jsb2NrKTtcbkBAIC00ODgsMjYgKzU0MSwzNSBAQCBzdGF0aWMgaW50IG1pbml4X3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBzZWN0b3JfdCBtaW5peF9ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibG9jaylcbi17XG4tXHRyZXR1cm4gZ2VuZXJpY19ibG9ja19ibWFwKG1hcHBpbmcsYmxvY2ssbWluaXhfZ2V0X2Jsb2NrKTtcbi19XG4tXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbWluaXhfYW9wcyA9IHtcbi1cdC5kaXJ0eV9mb2xpb1x0PSBibG9ja19kaXJ0eV9mb2xpbyxcbi1cdC5pbnZhbGlkYXRlX2ZvbGlvID0gYmxvY2tfaW52YWxpZGF0ZV9mb2xpbyxcbitcdC5kaXJ0eV9mb2xpb1x0PSBpb21hcF9kaXJ0eV9mb2xpbyxcbitcdC5pbnZhbGlkYXRlX2ZvbGlvID0gaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyxcbiBcdC5yZWFkX2ZvbGlvID0gbWluaXhfcmVhZF9mb2xpbyxcbitcdC5yZWFkYWhlYWQgPSBtaW5peF9yZWFkYWhlYWQsXG4gXHQud3JpdGVwYWdlcyA9IG1pbml4X3dyaXRlcGFnZXMsXG4rXHQubWlncmF0ZV9mb2xpbyA9IGZpbGVtYXBfbWlncmF0ZV9mb2xpbyxcbitcdC5pc19wYXJ0aWFsbHlfdXB0b2RhdGUgPSBpb21hcF9pc19wYXJ0aWFsbHlfdXB0b2RhdGUsXG4rXHQucmVsZWFzZV9mb2xpbyA9IGlvbWFwX3JlbGVhc2VfZm9saW8sXG4rXHQuZXJyb3JfcmVtb3ZlX2ZvbGlvID0gZ2VuZXJpY19lcnJvcl9yZW1vdmVfZm9saW8sXG4rfTtcbitcbisvKiBBIHNwZWNpYWwgYW9wcyBmb3IgZGlyZWN0b3JpZXMgdGhhdCBrZWVwcyB1c2luZyB0aGUgYnVmZmVyIGhlYWQgY2h1bmtzLCBhdFxuKyAqIGxlYXN0IGZvciB0aGUgdGltZSBiZWluZy5cbisgKi9cbitzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBtaW5peF9kaXJfYW9wcyA9IHtcbitcdC5kaXJ0eV9mb2xpbyA9IGJsb2NrX2RpcnR5X2ZvbGlvLFxuK1x0LmludmFsaWRhdGVfZm9saW8gPSBibG9ja19pbnZhbGlkYXRlX2ZvbGlvLFxuK1x0LnJlYWRfZm9saW8gPSBtaW5peF9ibG9ja19yZWFkX2ZvbGlvLFxuIFx0LndyaXRlX2JlZ2luID0gbWluaXhfd3JpdGVfYmVnaW4sXG4gXHQud3JpdGVfZW5kID0gZ2VuZXJpY193cml0ZV9lbmQsXG4gXHQubWlncmF0ZV9mb2xpbyA9IGJ1ZmZlcl9taWdyYXRlX2ZvbGlvLFxuLVx0LmJtYXAgPSBtaW5peF9ibWFwLFxuLVx0LmRpcmVjdF9JTyA9IG5vb3BfZGlyZWN0X0lPXG4rXHQud3JpdGVwYWdlcyA9IG1pbml4X2Jsb2NrX3dyaXRlcGFnZXMsXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWluaXhfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0ge1xuIFx0LmdldF9saW5rXHQ9IHBhZ2VfZ2V0X2xpbmssXG4gXHQuZ2V0YXR0clx0PSBtaW5peF9nZXRhdHRyLFxuK1x0LnNldGF0dHJcdD0gbWluaXhfc2V0YXR0cixcbiB9O1xuIFxuIHZvaWQgbWluaXhfc2V0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGRldl90IHJkZXYpXG5AQCAtNTE5LDcgKzU4MSw3IEBAIHZvaWQgbWluaXhfc2V0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGRldl90IHJkZXYpXG4gXHR9IGVsc2UgaWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuIFx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2bWluaXhfZGlyX2lub2RlX29wZXJhdGlvbnM7XG4gXHRcdGlub2RlLVx1MDAzZWlfZm9wID0gXHUwMDI2bWluaXhfZGlyX29wZXJhdGlvbnM7XG4tXHRcdGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcyA9IFx1MDAyNm1pbml4X2FvcHM7XG4rXHRcdGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcyA9IFx1MDAyNm1pbml4X2Rpcl9hb3BzO1xuIFx0fSBlbHNlIGlmIChTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbiBcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNm1pbml4X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucztcbiBcdFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcbkBAIC03ODYsNCArODQ4LDMgQEAgbW9kdWxlX2luaXQoaW5pdF9taW5peF9mcylcbiBtb2R1bGVfZXhpdChleGl0X21pbml4X2ZzKVxuIE1PRFVMRV9ERVNDUklQVElPTihcIk1pbml4IGZpbGUgc3lzdGVtXCIpO1xuIE1PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuLVxuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2lvbWFwLmMgYi9mcy9taW5peC9pb21hcC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOTBlMDE2YWFhMDFlYVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZnMvbWluaXgvaW9tYXAuY1xuQEAgLTAsMCArMSwxMjIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLypcbisgKiBpb21hcCBmdW5jdGlvbnMgZm9yIG1pbml4LlxuKyAqL1xuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBtaW5peF9jaGFpbl9jbGVhbnVwKEluZGlyZWN0ICpjaGFpbiwgSW5kaXJlY3QgKnBhcnRpYWwpXG4re1xuK1x0d2hpbGUgKHBhcnRpYWwgXHUwMDNlIGNoYWluKSB7XG4rXHRcdGJyZWxzZShwYXJ0aWFsLVx1MDAzZWJoKTtcbitcdFx0cGFydGlhbC0tO1xuK1x0fVxuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgbWluaXhfaW9tYXBfc2V0X21hcHBlZChzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBzZWN0b3JfdCBwaHlzLFxuK1x0XHR1bnNpZ25lZCBpbnQgYmxrYml0cywgc2VjdG9yX3QgaWJsb2NrKVxuK3tcbitcdGlvbWFwLVx1MDAzZXR5cGUgPSBJT01BUF9NQVBQRUQ7XG4rXHRpb21hcC1cdTAwM2VhZGRyID0gKHU2NClwaHlzIFx1MDAzY1x1MDAzYyBibGtiaXRzO1xuK1x0aW9tYXAtXHUwMDNlbGVuZ3RoID0gMSBcdTAwM2NcdTAwM2MgYmxrYml0cztcbitcdGlvbWFwLVx1MDAzZW9mZnNldCA9ICh1NjQpaWJsb2NrIFx1MDAzY1x1MDAzYyBibGtiaXRzO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgbWluaXhfaW9tYXBfc2V0X2hvbGUoc3RydWN0IGlvbWFwICppb21hcCxcbitcdFx0dW5zaWduZWQgaW50IGJsa2JpdHMsIHNlY3Rvcl90IGlibG9jaylcbit7XG4rXHRpb21hcC1cdTAwM2V0eXBlID0gSU9NQVBfSE9MRTtcbitcdGlvbWFwLVx1MDAzZWFkZHIgPSBJT01BUF9OVUxMX0FERFI7XG4rXHRpb21hcC1cdTAwM2VsZW5ndGggPSAxIFx1MDAzY1x1MDAzYyBibGtiaXRzO1xuK1x0aW9tYXAtXHUwMDNlb2Zmc2V0ID0gKHU2NClpYmxvY2sgXHUwMDNjXHUwMDNjIGJsa2JpdHM7XG4rfVxuK1xuKy8qXG4rICogbWluaXhfaW9tYXBfYmVnaW4gLSBtYXAgYSBmaWxlIHJhbmdlIHRvIGRpc2sgYmxvY2tzLiBJdCBhY3RzIGFzIGEgcmVwbGFjZW1lbnRcbisgKiBmb3IgZ2V0X2Jsb2NrIGluIGl0cmVlX2NvbW1vbi5jLCBhdCBsZWFzdCBpbiB0aGUgaW1wb3J0YW50IHdheXMsIGFuZCBpc1xuKyAqIGFkYXB0ZWQgZnJvbSBpdCwgYnV0IGl0IHVzZXMgaW9tYXAgaW5zdGVhZCBvZiBidWZmZXJfaGVhZC5cbisgKi9cbitzdGF0aWMgaW50IG1pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXG4rXHR1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKVxuK3tcbitcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuK1x0dW5zaWduZWQgaW50IGJsa2JpdHMgPSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xuK1x0c2VjdG9yX3QgaWJsb2NrID0gb2Zmc2V0IFx1MDAzZVx1MDAzZSBibGtiaXRzO1xuK1x0aW50IGNyZWF0ZSA9IGZsYWdzIFx1MDAyNiBJT01BUF9XUklURTtcbitcbitcdGludCBvZmZzZXRzW0RFUFRIXTtcbitcdEluZGlyZWN0IGNoYWluW0RFUFRIXTtcbitcdEluZGlyZWN0ICpwYXJ0aWFsO1xuK1x0aW50IGRlcHRoID0gYmxvY2tfdG9fcGF0aChpbm9kZSwgaWJsb2NrLCBvZmZzZXRzKTtcbitcdGludCBsZWZ0O1xuK1x0aW50IGVyciA9IC1FSU87XG4rXG4rXHRzZWN0b3JfdCBwaHlzO1xuK1xuK1x0LyogYmxvY2sgaXMgYmV5b25kIG1heCBmaWxlIHNpemUgKi9cbitcdGlmIChkZXB0aCA9PSAwKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlvbWFwLVx1MDAzZWJkZXYgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmRldjtcbitcbityZXJlYWQ6XG4rXHRwYXJ0aWFsID0gZ2V0X2JyYW5jaChpbm9kZSwgZGVwdGgsIG9mZnNldHMsIGNoYWluLCBcdTAwMjZlcnIpO1xuK1xuK1x0LyogU2ltcGxlc3QgY2FzZSAtIGJsb2NrIGZvdW5kLCBubyBhbGxvY2F0aW9uIG5lZWRlZCAqL1xuK1x0aWYgKCFwYXJ0aWFsKSB7XG4rXHRcdGlvbWFwLVx1MDAzZWZsYWdzID0gMDtcbitcdFx0cGh5cyA9IGJsb2NrX3RvX2NwdShjaGFpbltkZXB0aCAtIDFdLmtleSk7XG4rXHRcdHBhcnRpYWwgPSBjaGFpbitkZXB0aC0xO1xuK1x0XHRtaW5peF9pb21hcF9zZXRfbWFwcGVkKGlvbWFwLCBwaHlzLCBibGtiaXRzLCBpYmxvY2spO1xuK1x0XHRtaW5peF9jaGFpbl9jbGVhbnVwKGNoYWluLCBwYXJ0aWFsKTtcbitcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdC8qIE5leHQgc2ltcGxlIGNhc2UgLSBwbGFpbiBsb29rdXAgb3IgZmFpbGVkIHJlYWQgb2YgaW5kaXJlY3QgYmxvY2sgKi9cbitcdGlmICghY3JlYXRlIHx8IGVyciA9PSAtRUlPKSB7XG4rXHRcdG1pbml4X2lvbWFwX3NldF9ob2xlKGlvbWFwLCBibGtiaXRzLCBpYmxvY2spO1xuK1x0XHRtaW5peF9jaGFpbl9jbGVhbnVwKGNoYWluLCBwYXJ0aWFsKTtcbitcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBUaGlzIGlzIGhlbGQgb3ZlciBmcm9tIHRoZSBvcmlnaW5hbCBnZXRfYmxvY2sgbG9naWMsIHdoZXJlIGl0XG4rXHQgKiBhY3RlZCBhcyBhIGd1YXJkIGluIGNhc2UgdHJ1bmNhdGUoKSBkZWxldGVkIGJsb2NrcyBmcm9tIHVuZGVyIHRoYXRcbitcdCAqIGZ1bmN0aW9uLiBUaGVyZSBzaG91bGQgbm90IGJlIGEgcmFjZSB3aXRoIGlvbWFwIG9wZXJhdGlvbnMsIGJ1dFxuK1x0ICogd2UncmUgcmV0YWluaW5nIHRoZSBkZWZlbnNpdmUgY29kaW5nIGhlcmUgdG8gYmUgZXh0cmEgc2FmZSBqdXN0IGluXG4rXHQgKiBjYXNlLlxuK1x0ICovXG4rXHRpZiAoZXJyID09IC1FQUdBSU4pIHtcbitcdFx0bWluaXhfY2hhaW5fY2xlYW51cChjaGFpbiwgcGFydGlhbCk7XG4rXHRcdGdvdG8gcmVyZWFkO1xuK1x0fVxuK1xuK1x0bGVmdCA9IChjaGFpbiArIGRlcHRoKSAtIHBhcnRpYWw7XG4rXHRlcnIgPSBhbGxvY19icmFuY2goaW5vZGUsIGxlZnQsIG9mZnNldHMgKyAocGFydGlhbCAtIGNoYWluKSwgcGFydGlhbCk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdG1pbml4X2NoYWluX2NsZWFudXAoY2hhaW4sIHBhcnRpYWwpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0aWYgKHNwbGljZV9icmFuY2goaW5vZGUsIGNoYWluLCBwYXJ0aWFsLCBsZWZ0KSBcdTAwM2MgMCkge1xuK1x0XHRtaW5peF9jaGFpbl9jbGVhbnVwKGNoYWluLCBwYXJ0aWFsKTtcbitcdFx0Z290byByZXJlYWQ7XG4rXHR9XG4rXG4rXHQvKiBTdWNjZXNzZnVsIGFsbG9jYXRpb24sIG1hcHBpbmcgaXQuICovXG4rXHRpb21hcC1cdTAwM2VmbGFncyA9IElPTUFQX0ZfTkVXO1xuK1x0cGh5cyA9IGJsb2NrX3RvX2NwdShjaGFpbltkZXB0aCAtIDFdLmtleSk7XG4rXHRtaW5peF9pb21hcF9zZXRfbWFwcGVkKGlvbWFwLCBwaHlzLCBibGtiaXRzLCBpYmxvY2spO1xuK1x0bWluaXhfY2hhaW5fY2xlYW51cChjaGFpbiwgcGFydGlhbCk7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbisvKlxuKyAqIG1pbml4X2lvbWFwX2VuZCBlbmRzIHVwIGJlaW5nIGEgbm9wOyBzaW5jZSBtaW5peCBkb2Vzbid0IGhhdmUgYW55IGV4dGVudHMgb3JcbisgKiB0cmFuc2FjdGlvbnMgdG8gd29ycnkgYWJvdXQsIHRoZXJlIGlzbid0IGFueXRoaW5nIHRvIHVwZGF0ZSBoZXJlLiBUaGUgb24tZGlza1xuKyAqIGluZGlyZWN0IGJsb2NrcyBnZXQgZGlydGllZCBpbiBtaW5peF9pb21hcF9iZWdpbi5cbisgKi9cbitzdGF0aWMgaW50IG1pbml4X2lvbWFwX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxuK1x0c3NpemVfdCB3cml0dGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXApXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2l0cmVlX2NvbW1vbi5jIGIvZnMvbWluaXgvaXRyZWVfY29tbW9uLmNcbmluZGV4IGMzY2QyYzc1YWY5Y2UuLmQ3M2FiMWNhYWNmZWMgMTAwNjQ0XG4tLS0gYS9mcy9taW5peC9pdHJlZV9jb21tb24uY1xuKysrIGIvZnMvbWluaXgvaXRyZWVfY29tbW9uLmNcbkBAIC0zMTEsNyArMzExLDE1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0cnVuY2F0ZSAoc3RydWN0IGlub2RlICogaW5vZGUpXG4gXHRsb25nIGlibG9jaztcbiBcbiBcdGlibG9jayA9IChpbm9kZS1cdTAwM2VpX3NpemUgKyBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZSAtMSkgXHUwMDNlXHUwMDNlIHNiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHM7XG4tXHRibG9ja190cnVuY2F0ZV9wYWdlKGlub2RlLVx1MDAzZWlfbWFwcGluZywgaW5vZGUtXHUwMDNlaV9zaXplLCBnZXRfYmxvY2spO1xuK1xuK1x0LyogRGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGlub2RlIGJlaW5nIHRydW5jYXRlZCBpcyBhIGRpcmVjdG9yeSBvciBub3QsXG4rXHQgKiB3ZSBuZWVkIHRvIGVpdGhlciBjYWxsIGlvbWFwX3RydW5jYXRlX3BhZ2Ugb3IgYmxvY2tfdHJ1bmNhdGVfcGFnZS5cbitcdCAqL1xuK1x0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSlcbitcdFx0YmxvY2tfdHJ1bmNhdGVfcGFnZShpbm9kZS1cdTAwM2VpX21hcHBpbmcsIGlub2RlLVx1MDAzZWlfc2l6ZSwgZ2V0X2Jsb2NrKTtcbitcdGVsc2VcbitcdFx0aW9tYXBfdHJ1bmNhdGVfcGFnZShpbm9kZSwgaW5vZGUtXHUwMDNlaV9zaXplLCBOVUxMLFxuK1x0XHRcdG1pbml4X2lvbWFwX29wc192ZXIoaW5vZGUpLCBOVUxMLCBOVUxMKTtcbiBcbiBcdG4gPSBibG9ja190b19wYXRoKGlub2RlLCBpYmxvY2ssIG9mZnNldHMpO1xuIFx0aWYgKCFuKVxuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2l0cmVlX3YxLmMgYi9mcy9taW5peC9pdHJlZV92MS5jXG5pbmRleCAxZmVkOTA2MDQyYWE4Li41OGMyOWY0NDQzZDM3IDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvaXRyZWVfdjEuY1xuKysrIGIvZnMvbWluaXgvaXRyZWVfdjEuY1xuQEAgLTQ5LDYgKzQ5LDE4IEBAIHN0YXRpYyBpbnQgYmxvY2tfdG9fcGF0aChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgbG9uZyBibG9jaywgaW50IG9mZnNldHNbREVQVEhdKVxuIH1cbiBcbiAjaW5jbHVkZSBcIml0cmVlX2NvbW1vbi5jXCJcbisvKiBOT1RBIEJFTkU6XG4rICpcbisgKiBUaGlzIGlzIGlja3kgdG8gbWUsIGJ1dCBhdCB0aGUgc2FtZSB0aW1lIGhhdmluZyBpdCBiZSBhIHN0YW5kYWxvbmUgQyBmaWxlXG4rICogdGhhdCdzIGNvbXBpbGVkIHRvIG9iamVjdCBmb3JtIGFuZCBsaW5rZWQgc2VwYXJhdGVseSBsaWtlIGl0IGlzIGluIHhpYWZzIGlzXG4rICogbXVjaCBuYXN0aWVyIGluIG1pbml4IGJlY2F1c2Ugb2YgdGhlIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgbWluaXggZnMgdGhhdFxuKyAqIGhhdmUgc29tZSB2ZXJ5LCB2ZXJ5IGRpZmZlcmVudCBhc3BlY3RzLCBsaWtlIHRoZSBzaXplIG9mIGJsb2NrX3QuIEkgZG9uJ3RcbisgKiBsaWtlIGl0LCBidXQgc2luY2UgbWluaXggYWxyZWFkeSBoYXMgdGhpcyBwYXR0ZXJuIHdoZXJlIGEgY29tbW9uIGl0cmVlIGZpbGVcbisgKiBpcyBpbmNsdWRlZCBpbiB0aGUgaXRyZWVfdjEgYW5kIGl0cmVlX3YyKGFuZCB2MykgZmlsZXMsIEknbSBpbmNsdWRpbmcgaW9tYXAuY1xuKyAqIGluIHRoZXNlIGZpbGVzIGFzIHdlbGwuIEl0IGRvZXMgYXQgbGVhc3QgYXZvaWQgZXhwb3J0aW5nIHNvbWUgY3VycmVudGx5XG4rICogc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGFyZW4ndCBuZWVkZWQgYW55d2hlcmUgYnV0IGl0cmVlX2NvbW1vbi5jIGFuZCBpb21hcC5jLlxuKyAqL1xuKyNpbmNsdWRlIFwiaW9tYXAuY1wiXG4gXG4gaW50IFYxX21pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgbG9uZyBibG9jayxcbiBcdFx0XHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSlcbkBAIC02MSw3ICs3MywxOCBAQCB2b2lkIFYxX21pbml4X3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuIFx0dHJ1bmNhdGUoaW5vZGUpO1xuIH1cbiBcbi11bnNpZ25lZCBWMV9taW5peF9ibG9ja3MobG9mZl90IHNpemUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4rdW5zaWduZWQgaW50IFYxX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiB7XG4gXHRyZXR1cm4gbmJsb2NrcyhzaXplLCBzYik7XG4gfVxuK1xuK2ludCBWMV9taW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxuK1x0dW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBzdHJ1Y3QgaW9tYXAgKnNyY21hcClcbit7XG4rXHRyZXR1cm4gbWluaXhfaW9tYXBfYmVnaW4oaW5vZGUsIG9mZnNldCwgbGVuZ3RoLCBmbGFncywgaW9tYXAsIHNyY21hcCk7XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCBpb21hcF9vcHMgVjFfbWluaXhfaW9tYXBfb3BzID0ge1xuK1x0LmlvbWFwX2JlZ2luID0gVjFfbWluaXhfaW9tYXBfYmVnaW4sXG4rXHQuaW9tYXBfZW5kICAgPSBtaW5peF9pb21hcF9lbmQsXG4rfTtcbmRpZmYgLS1naXQgYS9mcy9taW5peC9pdHJlZV92Mi5jIGIvZnMvbWluaXgvaXRyZWVfdjIuY1xuaW5kZXggOWQwMGYzMWEyZDlkMS4uZmM3YTVhZThmYTFjYSAxMDA2NDRcbi0tLSBhL2ZzL21pbml4L2l0cmVlX3YyLmNcbisrKyBiL2ZzL21pbml4L2l0cmVlX3YyLmNcbkBAIC01Nyw2ICs1NywxMCBAQCBzdGF0aWMgaW50IGJsb2NrX3RvX3BhdGgoc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssIGludCBvZmZzZXRzW0RFUFRIXSlcbiB9XG4gXG4gI2luY2x1ZGUgXCJpdHJlZV9jb21tb24uY1wiXG4rLyogU2VlIHRoZSBub3RlIGluIGl0cmVlX3YxIGluIGEgY29tbWVudCB0aGF0IHN0YXJ0cyBcIk5PVEEgQkVORVwiIGZvciBhblxuKyAqIGV4cGxhbmF0aW9uIGZvciB3aHkgaW9tYXAuYyBpcyBpbmNsdWRlZCBoZXJlLlxuKyAqL1xuKyNpbmNsdWRlIFwiaW9tYXAuY1wiXG4gXG4gaW50IFYyX21pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgbG9uZyBibG9jayxcbiBcdFx0XHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSlcbkBAIC02OSw3ICs3MywxOCBAQCB2b2lkIFYyX21pbml4X3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuIFx0dHJ1bmNhdGUoaW5vZGUpO1xuIH1cbiBcbi11bnNpZ25lZCBWMl9taW5peF9ibG9ja3MobG9mZl90IHNpemUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4rdW5zaWduZWQgaW50IFYyX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiB7XG4gXHRyZXR1cm4gbmJsb2NrcyhzaXplLCBzYik7XG4gfVxuK1xuK2ludCBWMl9taW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxuK1x0dW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBzdHJ1Y3QgaW9tYXAgKnNyY21hcClcbit7XG4rXHRyZXR1cm4gbWluaXhfaW9tYXBfYmVnaW4oaW5vZGUsIG9mZnNldCwgbGVuZ3RoLCBmbGFncywgaW9tYXAsIHNyY21hcCk7XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCBpb21hcF9vcHMgVjJfbWluaXhfaW9tYXBfb3BzID0ge1xuK1x0LmlvbWFwX2JlZ2luID0gVjJfbWluaXhfaW9tYXBfYmVnaW4sXG4rXHQuaW9tYXBfZW5kICAgPSBtaW5peF9pb21hcF9lbmQsXG4rfTtcbmRpZmYgLS1naXQgYS9mcy9taW5peC9taW5peC5oIGIvZnMvbWluaXgvbWluaXguaFxuaW5kZXggNzg3MjJjZTIyZTFlMS4uOTAzNTYwNGM2OGNhMSAxMDA2NDRcbi0tLSBhL2ZzL21pbml4L21pbml4LmhcbisrKyBiL2ZzL21pbml4L21pbml4LmhcbkBAIC01LDYgKzUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlbWFwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9taW5peF9mcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW9tYXAuaFx1MDAzZVxuIFxuICNkZWZpbmUgSU5PREVfVkVSU0lPTihpbm9kZSlcdG1pbml4X3NiKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfdmVyc2lvblxuICNkZWZpbmUgTUlOSVhfVjFcdFx0MHgwMDAxXHRcdC8qIG9yaWdpbmFsIG1pbml4IGZzICovXG5AQCAtNTcsNiArNTgsOCBAQCB2b2lkIG1pbml4X2ZyZWVfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgbG9uZyBibG9jayk7XG4gdW5zaWduZWQgbG9uZyBtaW5peF9jb3VudF9mcmVlX2Jsb2NrcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbiBpbnQgbWluaXhfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICosIGNvbnN0IHN0cnVjdCBwYXRoICosXG4gXHRcdHN0cnVjdCBrc3RhdCAqLCB1MzIsIHVuc2lnbmVkIGludCk7XG4raW50IG1pbml4X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbitcdHN0cnVjdCBpYXR0ciAqYXR0cik7XG4gaW50IG1pbml4X3ByZXBhcmVfY2h1bmsoc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuKTtcbiBzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1pbml4X2dldF9tZXRhZGF0YV9iaHMoc3RydWN0IGlub2RlICppbm9kZSk7XG4gXG5AQCAtNzYsMTMgKzc5LDIzIEBAIGludCBtaW5peF9tYWtlX2VtcHR5KHN0cnVjdCBpbm9kZSosIHN0cnVjdCBpbm9kZSopO1xuIGludCBtaW5peF9lbXB0eV9kaXIoc3RydWN0IGlub2RlKik7XG4gaW50IG1pbml4X3NldF9saW5rKHN0cnVjdCBtaW5peF9kaXJfZW50cnkgKmRlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbitcbiBzdHJ1Y3QgbWluaXhfZGlyX2VudHJ5ICptaW5peF9kb3Rkb3Qoc3RydWN0IGlub2RlKiwgc3RydWN0IGZvbGlvICoqKTtcbiBpbm9fdCBtaW5peF9pbm9kZV9ieV9uYW1lKHN0cnVjdCBkZW50cnkqKTtcbiBcbitpbnQgVjFfbWluaXhfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCxcbitcdGxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCxcbitcdHN0cnVjdCBpb21hcCAqc3JjbWFwKTtcbitpbnQgVjJfbWluaXhfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCxcbitcdGxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCxcbitcdHN0cnVjdCBpb21hcCAqc3JjbWFwKTtcbitcbiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWluaXhfZmlsZV9pbm9kZV9vcGVyYXRpb25zO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBtaW5peF9kaXJfaW5vZGVfb3BlcmF0aW9ucztcbiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9maWxlX29wZXJhdGlvbnM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWluaXhfZGlyX29wZXJhdGlvbnM7XG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgVjFfbWluaXhfaW9tYXBfb3BzO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYyX21pbml4X2lvbWFwX29wcztcbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBtaW5peF9zYl9pbmZvICptaW5peF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIHtcbkBAIC05NCwxMSArMTA3LDE3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1pbml4X2lub2RlX2luZm8gKm1pbml4X2koc3RydWN0IGlub2RlICppbm9kZSlcbiBcdHJldHVybiBjb250YWluZXJfb2YoaW5vZGUsIHN0cnVjdCBtaW5peF9pbm9kZV9pbmZvLCB2ZnNfaW5vZGUpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIG1pbml4X2Jsb2Nrc19uZWVkZWQodW5zaWduZWQgYml0cywgdW5zaWduZWQgYmxvY2tzaXplKVxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1pbml4X2Jsb2Nrc19uZWVkZWQodW5zaWduZWQgaW50IGJpdHMsIHVuc2lnbmVkIGludCBibG9ja3NpemUpXG4ge1xuIFx0cmV0dXJuIERJVl9ST1VORF9VUF9QT1cyKGJpdHMsIGJsb2Nrc2l6ZSAqIDgpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm1pbml4X2lvbWFwX29wc192ZXIoc3RydWN0IGlub2RlICppbm9kZSlcbit7XG4rXHRyZXR1cm4gKElOT0RFX1ZFUlNJT04oaW5vZGUpID09IE1JTklYX1YxKSA/XG4rXHRcdFx1MDAyNlYxX21pbml4X2lvbWFwX29wcyA6IFx1MDAyNlYyX21pbml4X2lvbWFwX29wcztcbit9XG4rXG4gI2lmIGRlZmluZWQoQ09ORklHX01JTklYX0ZTX05BVElWRV9FTkRJQU4pIFx1MDAyNlx1MDAyNiBcXFxuIFx0ZGVmaW5lZChDT05GSUdfTUlOSVhfRlNfQklHX0VORElBTl8xNkJJVF9JTkRFWEVEKVxuIFxuQEAgLTEyOCw3ICsxNDcsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIG1pbml4X2Jsb2Nrc19uZWVkZWQodW5zaWduZWQgYml0cywgdW5zaWduZWQgYmxvY2tzaXplKVxuICAqIGJpZy1lbmRpYW4gMTZiaXQgaW5kZXhlZCBiaXRtYXBzXG4gICovXG4gXG4tc3RhdGljIGlubGluZSBpbnQgbWluaXhfZmluZF9maXJzdF96ZXJvX2JpdChjb25zdCB2b2lkICp2YWRkciwgdW5zaWduZWQgc2l6ZSlcbitzdGF0aWMgaW5saW5lIGludCBtaW5peF9maW5kX2ZpcnN0X3plcm9fYml0KGNvbnN0IHZvaWQgKnZhZGRyLCB1bnNpZ25lZCBpbnQgc2l6ZSlcbiB7XG4gXHRjb25zdCB1bnNpZ25lZCBzaG9ydCAqcCA9IHZhZGRyLCAqYWRkciA9IHZhZGRyO1xuIFx0dW5zaWduZWQgc2hvcnQgbnVtO1xuZGlmZiAtLWdpdCBhL2ZzL21pbml4L25hbWVpLmMgYi9mcy9taW5peC9uYW1laS5jXG5pbmRleCA1NTI1YmEzNjdlZDc0Li41MmUxMTUwMTNhYmY4IDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvbmFtZWkuY1xuKysrIGIvZnMvbWluaXgvbmFtZWkuY1xuQEAgLTYsNiArNiw3IEBAXG4gICovXG4gXG4gI2luY2x1ZGUgXCJtaW5peC5oXCJcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pb21hcC5oXHUwMDNlXG4gXG4gc3RhdGljIGludCBhZGRfbm9uZGlyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG5AQCAtODQsMTIgKzg1LDE2IEBAIHN0YXRpYyBpbnQgbWluaXhfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdHJldHVybiBQVFJfRVJSKGlub2RlKTtcbiBcbiBcdG1pbml4X3NldF9pbm9kZShpbm9kZSwgMCk7XG4tXHRlcnIgPSBwYWdlX3N5bWxpbmsoaW5vZGUsIHN5bW5hbWUsIGkpO1xuK1x0ZXJyID0gaW9tYXBfc3ltbGlua193cml0ZShpbm9kZSwgc3ltbmFtZSwgaSwgbWluaXhfaW9tYXBfb3BzX3Zlcihpbm9kZSksIE5VTEwsIE5VTEwpO1xuK1xuIFx0aWYgKHVubGlrZWx5KGVycikpIHtcbiBcdFx0aW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpO1xuIFx0XHRpcHV0KGlub2RlKTtcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbitcbitcdGlfc2l6ZV93cml0ZShpbm9kZSwgaSAtIDEpO1xuK1xuIFx0cmV0dXJuIGFkZF9ub25kaXIoZGVudHJ5LCBpbm9kZSk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW9tYXAuaCBiL2luY2x1ZGUvbGludXgvaW9tYXAuaFxuaW5kZXggOGM3NTRlYjk3NGZiZi4uYWIyN2EzYTViOGQyYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaW9tYXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9pb21hcC5oXG5AQCAtNDcxLDYgKzQ3MSw5IEBAIGxvZmZfdCBpb21hcF9zZWVrX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCxcbiBcdFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzKTtcbiBzZWN0b3JfdCBpb21hcF9ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibm8sXG4gXHRcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyk7XG4raW50IGlvbWFwX3N5bWxpbmtfd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqdGFyZ2V0LCBpbnQgbGVuLFxuK1x0XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsXG4rXHRcdGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZV9vcHMgKndyaXRlX29wcywgdm9pZCAqcHJpdmF0ZSk7XG4gXG4gLypcbiAgKiBGbGFncyBmb3IgaW9tYXBfaW9lbmQtXHUwMDNlaW9fZmxhZ3MuXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMDoyMC4xMDc2MTQyNDZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTM3NTE3OTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1pbml4IElPTUFQIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIHByZXR0eSBzdWJzdGFudGlhbCBjaGFuZ2UgdG8gdGhlIE1pbml4IGZpbGVzeXN0ZW0uIEl0J3MgbW92aW5nIE1pbml4IHRvIHVzZSBpb21hcCBmb3IgYnVmZmVyZWQgSS9PLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IGFyY2hpdGVjdHVyYWwgc2hpZnQuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB0aGUga2V5IG5ldyBjb21wb25lbnQgaXMgYGlvbWFwX3N5bWxpbmtfd3JpdGVgIGluIGBmcy9pb21hcC9idWZmZXJlZC1pby5jYCwgYW5kIHRoZSBpbnRlZ3JhdGlvbiBpcyBkb25lIGluIGBmcy9taW5peC9uYW1laS5jYC4gIFNpbmNlIE1pbml4IGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdlJ2QgZW5jb3VudGVyIGluIGNlcnRhaW4gdmlydHVhbGl6YXRpb24gc2V0dXBzLCB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suICpXb3J0aEZ1enppbmc9dHJ1ZSogaXMgYSBnby5cblxuTm93LCBsZXQncyBicmVhayBkb3duIHRoZSBmdW5jdGlvbnMgdGhhdCBuZWVkIGNhcmVmdWwgYXR0ZW50aW9uLiBJJ2xsIG5lZWQgdG8gZm9jdXMgb24gdGhlc2UgYXJlYXM6XG5cbiogICAqKmBpb21hcF9zeW1saW5rX3dyaXRlYCoqOiBUaGUgbmV3IGtpZCBvbiB0aGUgYmxvY2sgZm9yIHN5bWxpbmsgd3JpdGVzLCBzbyB0aGF0IGlzIGEgZ29vZCBmaXJzdCBzdG9wLlxuKiAgICoqYG1pbml4X2ZpbGVfd3JpdGVfaXRlcmAsIGBtaW5peF93cml0ZWJhY2tfcmFuZ2VgLCBgbWluaXhfd3JpdGVwYWdlc2AsIGBtaW5peF9yZWFkX2ZvbGlvYCwgYG1pbml4X3JlYWRhaGVhZGAqKjogVGhlc2UgZnVuY3Rpb25zIGluIGBmcy9taW5peC9maWxlLmNgIGFuZCBgZnMvbWluaXgvaW5vZGUuY2AgcmVwcmVzZW50IHRoZSBjb3JlIGZpbGUgb3BlcmF0aW9ucyBhbmQgd3JpdGViYWNrIG1lY2hhbmlzbXMgd2l0aGluIHRoZSBNaW5peCBmaWxlc3lzdGVtIGl0c2VsZiwgYW5kIHdpbGwgaGF2ZSB0byBiZSB0ZXN0ZWQgdGhvcm91Z2hseSB3aXRoIHRoZSBpb21hcCB0cmFuc2l0aW9uLlxuKiAgICoqYG1pbml4X2lvbWFwX2JlZ2luYCwgYFYxX21pbml4X2lvbWFwX2JlZ2luYCwgYFYyX21pbml4X2lvbWFwX2JlZ2luYCoqOiBUaGVzZSBpb21hcC1zcGVjaWZpYyBmdW5jdGlvbnMgYXJlIHdoZXJlIHRoZSBNaW5peCBmaWxlc3lzdGVtIG5vdyBpbnRlcmZhY2VzIHdpdGggaW9tYXAsIHNvIHRoZXkgYXJlIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgaW50ZWdyYXRpb24gd29ya3MuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoYXQgYENPTkZJR19NSU5JWF9GU2AgaXMgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb24sIHdoaWNoIGxvb2tzIGdvb2QuICBUaGlzIHByb3ZpZGVzIHRoZSBmb3VuZGF0aW9uLCBhbmQgbm93IEkgY2FuIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGVzZSBmdW5jdGlvbnMgYW5kIHRoZSBuZXcgaW9tYXAgaW50ZWdyYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cyBhbmQgYW55IHBvdGVudGlhbCBwaXRmYWxscy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM4MSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjEwOjI3LjA0NTEzNDg4OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODE2MTAxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUlOSVhfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbWluaXgvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9taW5peC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvbWluaXgvS2NvbmZpZzoyOmNvbmZpZyBNSU5JWF9GU1xcbmZzL21pbml4L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTWluaXggZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL21pbml4L0tjb25maWctMjAtXFxuZnMvbWluaXgvS2NvbmZpZzoyMTpjb25maWcgTUlOSVhfRlNfTkFUSVZFX0VORElBTlxcbmZzL21pbml4L0tjb25maWctMjItXFx0ZGVmX2Jvb2wgTUlOSVhfRlNcXG4tLVxcbmZzL21pbml4L0tjb25maWctMjQtXFxuZnMvbWluaXgvS2NvbmZpZzoyNTpjb25maWcgTUlOSVhfRlNfQklHX0VORElBTl8xNkJJVF9JTkRFWEVEXFxuZnMvbWluaXgvS2NvbmZpZy0yNi1cXHRkZWZfYm9vbCBNSU5JWF9GU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMDoyNy4wOTMzMDEwMzZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTU5NTg2NzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQ2hlY2tsaXN0KipcblxuT2theSwgc28gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBJJ20gbG9va2luZyBhdCBoYXMgYE1JTklYX0ZTYCBlbmFibGVkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJSaWdodCwgd2hhdCBlbHNlIGRvIEkgbmVlZCB0byBjb25zaWRlciB3aXRoIHRoaXM/XCIgR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIGFscmVhZHkga25vdyB0aGF0IGBNSU5JWF9GU2AgbGlrZWx5IGRlcGVuZHMgb24gb3RoZXIgZnVuZGFtZW50YWwgY29tcG9uZW50cy4gTGV0J3Mgc2VlLi4uIGEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IGBNSU5JWF9GU2Agc3BlY2lmaWNhbGx5IHJlcXVpcmVzIGBCTE9DS2AuIFRoaXMgbWVhbnMgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBgQkxPQ0tgIGNvbmZpZ3VyYXRpb24gaXMgYWxzbyBjb3JyZWN0bHkgc2V0LCBvciB0aGF0IEkgaGF2ZSBhIHBsYW4gdG8gaW1wbGVtZW50IGl0LiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgbXkgY29uZmlndXJhdGlvbiBzdGVwcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0MjAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMDozMC42NTI4OTIzNjNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcwMjI4MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9taW5peC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL21pbml4L0tjb25maWc9Mj1jb25maWcgTUlOSVhfRlNcXG5mcy9taW5peC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk1pbml4IGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuZnMvbWluaXgvS2NvbmZpZzo0OlxcdGRlcGVuZHMgb24gQkxPQ0tcXG5mcy9taW5peC9LY29uZmlnLTUtXFx0c2VsZWN0IEJVRkZFUl9IRUFEXFxuLS1cXG5mcy9taW5peC9LY29uZmlnPTIxPWNvbmZpZyBNSU5JWF9GU19OQVRJVkVfRU5ESUFOXFxuZnMvbWluaXgvS2NvbmZpZy0yMi1cXHRkZWZfYm9vbCBNSU5JWF9GU1xcbmZzL21pbml4L0tjb25maWc6MjM6XFx0ZGVwZW5kcyBvbiBNSUNST0JMQVpFIHx8IE1JUFMgfHwgUzM5MCB8fCBTVVBFUkggfHwgU1BBUkMgfHwgWFRFTlNBIHx8IChNNjhLIFxcdTAwMjZcXHUwMDI2ICFNTVUpXFxuZnMvbWluaXgvS2NvbmZpZy0yNC1cXG5mcy9taW5peC9LY29uZmlnPTI1PWNvbmZpZyBNSU5JWF9GU19CSUdfRU5ESUFOXzE2QklUX0lOREVYRURcXG5mcy9taW5peC9LY29uZmlnLTI2LVxcdGRlZl9ib29sIE1JTklYX0ZTXFxuZnMvbWluaXgvS2NvbmZpZzoyNzpcXHRkZXBlbmRzIG9uIE02OEsgXFx1MDAyNlxcdTAwMjYgTU1VXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjEwOjMwLjcxOTkyMDgxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU0MjE5NTcyMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNaW5peCBGaWxlc3lzdGVtIEkvTyBBUEkgRW50cnlwb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgTUlOSVggZmlsZXN5c3RlbSwgYW5kIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBgTUlOSVhfRlNgIGlzIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggaW50cm9kdWNlcywgc3BlY2lmaWNhbGx5IHRob3NlIGFjdGluZyBhcyBBUEkgZW50cnlwb2ludHMsIGlkZWFsbHkgbm9uLXN0YXRpYyBvbmVzIHRvIG1ha2Ugc3VyZSBzeXprYWxsZXIgY2FuIGZpbmQgdGhlbSwgYWx0aG91Z2ggdGhlIHByb21wdCBzYXlzIGZ1bmN0aW9ucyBhc3NpZ25lZCB0byBmdW5jdGlvbiBwb2ludGVycyBtYXkgbm90IGJlIGlubGluZWQuXG5cbkxldCdzIHdhbGsgdGhyb3VnaCB0aGUgY2FuZGlkYXRlIGZ1bmN0aW9ucy4gSSBoYXZlOlxuXG4qICAgYGlvbWFwX3N5bWxpbmtfd3JpdGVgXG4qICAgYG1pbml4X2ZpbGVfd3JpdGVfaXRlcmBcbiogICBgbWluaXhfd3JpdGViYWNrX3JhbmdlYFxuKiAgIGBtaW5peF93cml0ZXBhZ2VzYFxuKiAgIGBtaW5peF9yZWFkX2ZvbGlvYFxuKiAgIGBtaW5peF9yZWFkYWhlYWRgXG4qICAgYG1pbml4X2lvbWFwX2JlZ2luYFxuKiAgIGBWMV9taW5peF9pb21hcF9iZWdpbmBcbiogICBgVjJfbWluaXhfaW9tYXBfYmVnaW5gXG5cbk5vdywgaW5pdGlhbGx5LCBJJ20gbm90aW5nIHRoYXQgYSBudW1iZXIgb2YgdGhvc2UgZnVuY3Rpb25zIGFyZSBzdGF0aWMsIHdoaWNoIHJhaXNlcyBhIGZsYWcgYmVjYXVzZSBzdGF0aWMgZnVuY3Rpb25zIGNhbiBiZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gSG93ZXZlciwgSSBrbm93IHRoZSBwcm9tcHQgYWxzbyBtZW50aW9ucyBmdW5jdGlvbiBwb2ludGVycywgc28gaXQncyBhIGJpdCBtb3JlIG51YW5jZWQuXG5cbkkgc2VlIHRoYXQgYG1pbml4X3dyaXRlYmFja19yYW5nZWAsIGBtaW5peF93cml0ZXBhZ2VzYCwgYG1pbml4X3JlYWRfZm9saW9gLCBgbWluaXhfcmVhZGFoZWFkYCwgYW5kIGBtaW5peF9pb21hcF9iZWdpbmAsIGFyZSBhbGwgc3RhdGljLiBUaGUgc3RhdGljIG5hdHVyZSBpbXBsaWVzIGludGVybmFsIHVzZSwgYnV0IEkga25vdyB0aGF0IGBtaW5peF93cml0ZXBhZ2VzYCwgYG1pbml4X3JlYWRfZm9saW9gLCBhbmQgYG1pbml4X3JlYWRhaGVhZGAsIGFyZSBhc3NpZ25lZCB0byB0aGUgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zIHN0cnVjdCAoYG1pbml4X2FvcHNgKSwgYW5kIGBtaW5peF9maWxlX3dyaXRlX2l0ZXJgIGlzIGFzc2lnbmVkIHRvIGBtaW5peF9maWxlX29wZXJhdGlvbnMud3JpdGVfaXRlcmAsIHNvIHRoZXkgd29uJ3QgYmUgaW5saW5lZC5cblxuYG1pbml4X2lvbWFwX2JlZ2luYCBpcyB1c2VkIGJ5IHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBgVjFfbWluaXhfaW9tYXBfYmVnaW5gIGFuZCBgVjJfbWluaXhfaW9tYXBfYmVnaW5gLiBTaW5jZSB0aG9zZSBhcmVuJ3Qgc3RhdGljLCB0aGV5IGFyZSBlbnRyeXBvaW50cy5cblxuU28sIEkgd2lsbCBhZGQgdGhlc2UgYXMgZW50cnlwb2ludHM6IGBpb21hcF9zeW1saW5rX3dyaXRlYCwgYFYxX21pbml4X2lvbWFwX2JlZ2luYCwgYW5kIGBWMl9taW5peF9pb21hcF9iZWdpbmAsIGFzIHdlbGwgYXMgYG1pbml4X2ZpbGVfd3JpdGVfaXRlcmAsIGBtaW5peF93cml0ZXBhZ2VzYCwgYG1pbml4X3JlYWRfZm9saW9gLCBgbWluaXhfcmVhZGFoZWFkYCwgYW5kIGBtaW5peF93cml0ZWJhY2tfcmFuZ2VgLiBJIGtub3cgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzIGluIGEgc3RydWN0LCBzbyBpdCBpcyB1bmxpa2VseSB0aGF0IHRoZXkgYXJlIGlubGluZWQuXG5cblRoZSBjb2RlIHJldmlldyBpbmRpY2F0ZXMgdGhhdCBhbGwgZnVuY3Rpb25zIGFyZSBuZXcuIGBpb21hcF9zeW1saW5rX3dyaXRlYCBpcyBpbiBgZnMvaW9tYXAvYnVmZmVyZWQtaW8uY2AsIGBtaW5peF9maWxlX3dyaXRlX2l0ZXJgIGlzIGluIGBmcy9taW5peC9maWxlLmNgLCBgbWluaXhfd3JpdGViYWNrX3JhbmdlYCwgYG1pbml4X3dyaXRlcGFnZXNgLCBgbWluaXhfcmVhZF9mb2xpb2AsIGFuZCBgbWluaXhfcmVhZGFoZWFkYCwgYXJlIGluIGBmcy9taW5peC9pbm9kZS5jYCwgYW5kIGBtaW5peF9pb21hcF9iZWdpbmAgaXMgaW4gYGZzL21pbml4L2lvbWFwLmNgLCBgVjFfbWluaXhfaW9tYXBfYmVnaW5gIGlzIGluIGBmcy9taW5peC9pdHJlZV92MS5jYCwgYW5kIGBWMl9taW5peF9pb21hcF9iZWdpbmAgaXMgaW4gYGZzL21pbml4L2l0cmVlX3YyLmNgLlxuXG5UaGUga2V5IGNoYW5nZSBpcyB0aGUgbWlncmF0aW9uIHRvIGlvbWFwIGZvciBidWZmZXJlZCBJL08gYW5kIHN5bWxpbmtzLCB3aGljaCBpbnZvbHZlcyBtb2RpZmljYXRpb25zIGluIGZpbGUgb3BlcmF0aW9ucywgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zLCBhbmQgYmxvY2sgbWFwcGluZy4gVGhpcyBpcyBhbGwgdmVyeSByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBieSBzaW1wbHkgbW91bnRpbmcgYSBtaW5peCBmaWxlc3lzdGVtIGltYWdlLlxuXG5IZXJlJ3MgbXkgZmluYWwgbGlzdCBmb3IgY29uc2lkZXJhdGlvbjpcblxuKiAgIGBpb21hcF9zeW1saW5rX3dyaXRlYFxuKiAgIGBWMV9taW5peF9pb21hcF9iZWdpbmBcbiogICBgVjJfbWluaXhfaW9tYXBfYmVnaW5gXG4qICAgYG1pbml4X2ZpbGVfd3JpdGVfaXRlcmBcbiogICBgbWluaXhfd3JpdGVwYWdlc2BcbiogICBgbWluaXhfcmVhZF9mb2xpb2BcbiogICBgbWluaXhfcmVhZGFoZWFkYFxuKiAgIGBtaW5peF93cml0ZWJhY2tfcmFuZ2VgXG5cbkFuZCB0aGUgcmVxdWlyZWQgY29uZmlnOiBgTUlOSVhfRlNgXG5cbk5vdyBJIGFtIHJlYWR5IHRvIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDg2NSwiT3V0cHV0VG9rZW5zIjoxODAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjEwOjQ2LjE0MTg4MDc5N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTAzMjk0MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1JTklYX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9tYXBfc3ltbGlua193cml0ZVwiLFxuICAgIFwiVjFfbWluaXhfaW9tYXBfYmVnaW5cIixcbiAgICBcIlYyX21pbml4X2lvbWFwX2JlZ2luXCIsXG4gICAgXCJtaW5peF9maWxlX3dyaXRlX2l0ZXJcIixcbiAgICBcIm1pbml4X3dyaXRlcGFnZXNcIixcbiAgICBcIm1pbml4X3JlYWRfZm9saW9cIixcbiAgICBcIm1pbml4X3JlYWRhaGVhZFwiLFxuICAgIFwibWluaXhfd3JpdGViYWNrX3JhbmdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWlncmF0ZXMgdGhlIG1pbml4IGZpbGVzeXN0ZW0gdG8gdXNlIGlvbWFwIGZvciBidWZmZXJlZCBJL08gYW5kIHN5bWxpbmtzLiBUaGlzIGludm9sdmVzIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIG1pbml4IGZpbGUgb3BlcmF0aW9ucywgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zLCBhbmQgYmxvY2sgbWFwcGluZyBsb2dpYy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBtb3VudGluZyBhIG1pbml4IGZpbGVzeXN0ZW0gaW1hZ2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUlOSVhfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb21hcF9zeW1saW5rX3dyaXRlXCIsXG4gICAgXCJWMV9taW5peF9pb21hcF9iZWdpblwiLFxuICAgIFwiVjJfbWluaXhfaW9tYXBfYmVnaW5cIixcbiAgICBcIm1pbml4X2ZpbGVfd3JpdGVfaXRlclwiLFxuICAgIFwibWluaXhfd3JpdGVwYWdlc1wiLFxuICAgIFwibWluaXhfcmVhZF9mb2xpb1wiLFxuICAgIFwibWluaXhfcmVhZGFoZWFkXCIsXG4gICAgXCJtaW5peF93cml0ZWJhY2tfcmFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtaWdyYXRlcyB0aGUgbWluaXggZmlsZXN5c3RlbSB0byB1c2UgaW9tYXAgZm9yIGJ1ZmZlcmVkIEkvTyBhbmQgc3ltbGlua3MuIFRoaXMgaW52b2x2ZXMgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWluaXggZmlsZSBvcGVyYXRpb25zLCBhZGRyZXNzIHNwYWNlIG9wZXJhdGlvbnMsIGFuZCBibG9jayBtYXBwaW5nIGxvZ2ljLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IG1vdW50aW5nIGEgbWluaXggZmlsZXN5c3RlbSBpbWFnZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTA6NDYuMjMyMjE3NzEzWiIsIlNlcSI6OSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwNTIxNTc0OTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTA6NDYuMjMyOTEzNzAzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjkwNTIwODc1NzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb252ZXJ0cyB0aGUgbWluaXggZmlsZXN5c3RlbSB0byB1c2UgaW9tYXAgZm9yIGJ1ZmZlcmVkIEkvTywgcmVwbGFjaW5nIHRoZSBvbGRlciBidWZmZXJfaGVhZCBiYXNlZCBibG9jayBJL08gZnVuY3Rpb25zLiBJdCBpbnRyb2R1Y2VzIGBpb21hcF9zeW1saW5rX3dyaXRlYCB3aGljaCB3cml0ZXMgc3ltbGluayB0YXJnZXRzIHRvIGRpc2suIFRoZSBzeW1saW5rIHRhcmdldCBpcyBhIGZ1bGx5IGluaXRpYWxpemVkIG51bGwtdGVybWluYXRlZCBzdHJpbmcgcHJvdmlkZWQgYnkgdGhlIFZGUy4gVGhlIHVud3JpdHRlbiBwYXJ0cyBvZiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJsb2NrIGFyZSB6ZXJvZWQgYnkgYGlvbWFwX3dyaXRlX2JlZ2luYCAoc2luY2UgYElPTUFQX0ZfTkVXYCBpcyBzZXQgZm9yIG5ldyBibG9ja3MpLiBXaGVuIHJlYWRpbmcgdGhlIHN5bWxpbmssIGBwYWdlX2dldF9saW5rYCBhZGRzIHRoZSBudWxsIHRlcm1pbmF0b3IgaW4gbWVtb3J5LiBUaGUgcmVzdCBvZiB0aGUgcGF0Y2ggcmVwbGFjZXMgc3RhbmRhcmQgcmVhZC93cml0ZS93cml0ZWJhY2sgZnVuY3Rpb25zIHdpdGggdGhlaXIgaW9tYXAgZXF1aXZhbGVudHMsIHdoaWNoIGhhbmRsZSB1c2VyIHNwYWNlIGRhdGEgYW5kIHBhZ2UgY2FjaGUgY29ycmVjdGx5LiBUaGVyZSBhcmUgbm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBpbmZvLWxlYWtzLCBvciB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdy4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY5NGM1YTNmZmNlZDczNWY1ODQyZjY3NDYzZGJhZjEyNTE5MTVmZWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAyMjoxMDoxOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMgYi9mcy9pb21hcC9idWZmZXJlZC1pby5jXG5pbmRleCAwYTVlYmZkYTkwZjEyLi41ZThhYzNmYWQ2NzE0IDEwMDY0NFxuLS0tIGEvZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1xuKysrIGIvZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1xuQEAgLTIxMDAsMyArMjEwMCwzNyBAQCBpb21hcF93cml0ZXBhZ2VzKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMpXG4gXHRyZXR1cm4gZXJyb3I7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX3dyaXRlcGFnZXMpO1xuK1xuK2ludCBpb21hcF9zeW1saW5rX3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKnRhcmdldCwgaW50IGxlbixcbitcdFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLFxuK1x0XHRjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGVfb3BzICp3cml0ZV9vcHMsIHZvaWQgKnByaXZhdGUpXG4re1xuK1x0c3RydWN0IGt2ZWMgdmVjID0ge1xuK1x0XHQuaW92X2Jhc2VcdD0gKHZvaWQgKil0YXJnZXQsXG4rXHRcdC5pb3ZfbGVuXHQ9IGxlbiAtIDEsXG4rXHR9O1xuK1x0c3RydWN0IGlvbWFwX2l0ZXIgaXRlciA9IHtcbitcdFx0Lmlub2RlXHRcdD0gaW5vZGUsXG4rXHRcdC5wb3NcdFx0PSAwLFxuK1x0XHQubGVuXHRcdD0gbGVuIC0gMSxcbitcdFx0LmZsYWdzXHRcdD0gSU9NQVBfV1JJVEUsXG4rXHRcdC5wcml2YXRlXHQ9IHByaXZhdGUsXG4rXHR9O1xuK1x0c3RydWN0IGlvdl9pdGVyIGlvdjtcbitcdGludCByZXQ7XG4rXG4rXHRpb3ZfaXRlcl9rdmVjKFx1MDAyNmlvdiwgSVRFUl9TT1VSQ0UsIFx1MDAyNnZlYywgMSwgbGVuIC0gMSk7XG4rXG4rXHR3aGlsZSAoKHJldCA9IGlvbWFwX2l0ZXIoXHUwMDI2aXRlciwgb3BzKSkgXHUwMDNlIDApXG4rXHRcdGl0ZXIuc3RhdHVzID0gaW9tYXBfd3JpdGVfaXRlcihcdTAwMjZpdGVyLCBcdTAwMjZpb3YsIHdyaXRlX29wcyk7XG4rXG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKHVubGlrZWx5KGl0ZXIucG9zID09IDApKVxuK1x0XHRyZXR1cm4gLUVJTztcbitcbitcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX3N5bWxpbmtfd3JpdGUpO1xuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2ZpbGUuYyBiL2ZzL21pbml4L2ZpbGUuY1xuaW5kZXggMDJhYWJiZGI1ZGVhYS4uNjc2NWY1NzFiZDNmYyAxMDA2NDRcbi0tLSBhL2ZzL21pbml4L2ZpbGUuY1xuKysrIGIvZnMvbWluaXgvZmlsZS5jXG5AQCAtMTAsNiArMTAsMzIgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idWZmZXJfaGVhZC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJtaW5peC5oXCJcbiBcbitzdGF0aWMgc3NpemVfdCBtaW5peF9maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4re1xuK1x0c3RydWN0IGlub2RlICppbm9kZSA9IGlvY2ItXHUwMDNla2lfZmlscC1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbitcdHNzaXplX3QgcmV0O1xuK1x0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzID0gbWluaXhfaW9tYXBfb3BzX3Zlcihpbm9kZSk7XG4rXG4rXHRpbm9kZV9sb2NrKGlub2RlKTtcbitcdHJldCA9IGdlbmVyaWNfd3JpdGVfY2hlY2tzKGlvY2IsIGZyb20pO1xuK1x0aWYgKHJldCBcdTAwM2M9IDApXG4rXHRcdGdvdG8gdW5sb2NrO1xuK1xuK1x0cmV0ID0gZmlsZV9tb2RpZmllZChpb2NiLVx1MDAzZWtpX2ZpbHApO1xuK1x0aWYgKHJldClcbitcdFx0Z290byB1bmxvY2s7XG4rXG4rXHRyZXQgPSBpb21hcF9maWxlX2J1ZmZlcmVkX3dyaXRlKGlvY2IsIGZyb20sIG9wcyxcbitcdFx0XHROVUxMLCBOVUxMKTtcbitcbitcdGlmIChyZXQgXHUwMDNlIDApXG4rXHRcdHJldCA9IGdlbmVyaWNfd3JpdGVfc3luYyhpb2NiLCByZXQpO1xuK1xuK3VubG9jazpcbitcdGlub2RlX3VubG9jayhpbm9kZSk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiAvKlxuICAqIFdlIGhhdmUgbW9zdGx5IE5VTExzIGhlcmU6IHRoZSBjdXJyZW50IGRlZmF1bHRzIGFyZSBPSyBmb3JcbiAgKiB0aGUgbWluaXggZmlsZXN5c3RlbS5cbkBAIC0xNywxMyArNDMsMTMgQEBcbiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfb3BlcmF0aW9ucyA9IHtcbiBcdC5sbHNlZWtcdFx0PSBnZW5lcmljX2ZpbGVfbGxzZWVrLFxuIFx0LnJlYWRfaXRlclx0PSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyLFxuLVx0LndyaXRlX2l0ZXJcdD0gZ2VuZXJpY19maWxlX3dyaXRlX2l0ZXIsXG4rXHQud3JpdGVfaXRlclx0PSBtaW5peF9maWxlX3dyaXRlX2l0ZXIsXG4gXHQubW1hcF9wcmVwYXJlXHQ9IGdlbmVyaWNfZmlsZV9tbWFwX3ByZXBhcmUsXG4gXHQuZnN5bmNcdFx0PSBzaW1wbGVfZnN5bmMsXG4gXHQuc3BsaWNlX3JlYWRcdD0gZmlsZW1hcF9zcGxpY2VfcmVhZCxcbiB9O1xuIFxuLXN0YXRpYyBpbnQgbWluaXhfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitpbnQgbWluaXhfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUoZGVudHJ5KTtcbmRpZmYgLS1naXQgYS9mcy9taW5peC9pbm9kZS5jIGIvZnMvbWluaXgvaW5vZGUuY1xuaW5kZXggZGFmODNlNGZmMjVjOC4uMmJmNWVhOTIzNjBhMiAxMDA2NDRcbi0tLSBhL2ZzL21pbml4L2lub2RlLmNcbisrKyBiL2ZzL21pbml4L2lub2RlLmNcbkBAIC00MzksNiArNDM5LDMxIEBAIHN0YXRpYyBpbnQgbWluaXhfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZilcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgc3NpemVfdCBtaW5peF93cml0ZWJhY2tfcmFuZ2Uoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYyxcbitcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHU2NCBwb3MsIHVuc2lnbmVkIGludCBsZW4sIHU2NCBlbmRfcG9zKVxuK3tcbitcdGludCBlcnJvcjtcbitcbitcdGlmIChwb3MgXHUwMDNjIHdwYy1cdTAwM2Vpb21hcC5vZmZzZXQgfHxcbitcdFx0XHRwb3MgXHUwMDNlPSB3cGMtXHUwMDNlaW9tYXAub2Zmc2V0ICsgd3BjLVx1MDAzZWlvbWFwLmxlbmd0aCkge1xuK1x0XHRpZiAoSU5PREVfVkVSU0lPTih3cGMtXHUwMDNlaW5vZGUpID09IE1JTklYX1YxKVxuK1x0XHRcdGVycm9yID0gVjFfbWluaXhfaW9tYXBfYmVnaW4od3BjLVx1MDAzZWlub2RlLCBwb3MsIGxlbiwgSU9NQVBfV1JJVEUsXG4rXHRcdFx0XHRcdTAwMjZ3cGMtXHUwMDNlaW9tYXAsIE5VTEwpO1xuK1x0XHRlbHNlXG4rXHRcdFx0ZXJyb3IgPSBWMl9taW5peF9pb21hcF9iZWdpbih3cGMtXHUwMDNlaW5vZGUsIHBvcywgbGVuLCBJT01BUF9XUklURSxcbitcdFx0XHRcdFx1MDAyNndwYy1cdTAwM2Vpb21hcCwgTlVMTCk7XG4rXHRcdGlmIChlcnJvcilcbitcdFx0XHRyZXR1cm4gZXJyb3I7XG4rXHR9XG4rXG4rXHRyZXR1cm4gaW9tYXBfYWRkX3RvX2lvZW5kKHdwYywgZm9saW8sIHBvcywgZW5kX3BvcywgbGVuKTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZWJhY2tfb3BzIG1pbml4X3dyaXRlYmFja19vcHMgPSB7XG4rXHQud3JpdGViYWNrX3JhbmdlID0gbWluaXhfd3JpdGViYWNrX3JhbmdlLFxuK1x0LndyaXRlYmFja19zdWJtaXQgPSBpb21hcF9pb2VuZF93cml0ZWJhY2tfc3VibWl0LFxuK307XG4rXG4gc3RhdGljIGludCBtaW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssXG4gXHRcdCAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSlcbiB7XG5AQCAtNDQ4LDE3ICs0NzMsNDUgQEAgc3RhdGljIGludCBtaW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssXG4gXHRcdHJldHVybiBWMl9taW5peF9nZXRfYmxvY2soaW5vZGUsIGJsb2NrLCBiaF9yZXN1bHQsIGNyZWF0ZSk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbWluaXhfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbisvKiBUaGUgb2xkIG1pbml4X3dyaXRlcGFnZXMsIHByZXNlcnZlZCBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMuICovXG4rc3RhdGljIGludCBtaW5peF9ibG9ja193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiB7XG4gXHRyZXR1cm4gbXBhZ2Vfd3JpdGVwYWdlcyhtYXBwaW5nLCB3YmMsIG1pbml4X2dldF9ibG9jayk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgbWluaXhfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbitcdFx0c3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4re1xuK1x0c3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggd3BjID0ge1xuK1x0XHQuaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3QsXG4rXHRcdC53YmMgPSB3YmMsXG4rXHRcdC5vcHMgPSBcdTAwMjZtaW5peF93cml0ZWJhY2tfb3BzLFxuK1x0fTtcbitcdHJldHVybiBpb21hcF93cml0ZXBhZ2VzKFx1MDAyNndwYyk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgbWluaXhfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGZvbGlvLVx1MDAzZW1hcHBpbmctXHUwMDNlaG9zdCk7XG4rXG4rXHRpb21hcF9iaW9fcmVhZF9mb2xpbyhmb2xpbywgb3BzKTtcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBUaGUgb2xkIG1pbml4X3JlYWRfZm9saW8sIHByZXNlcnZlZCBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMuICovXG4rc3RhdGljIGludCBtaW5peF9ibG9ja19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBibG9ja19yZWFkX2Z1bGxfZm9saW8oZm9saW8sIG1pbml4X2dldF9ibG9jayk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIG1pbml4X3JlYWRhaGVhZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhYylcbit7XG4rXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKHJhYy1cdTAwM2VtYXBwaW5nLVx1MDAzZWhvc3QpO1xuK1xuK1x0aW9tYXBfYmlvX3JlYWRhaGVhZChyYWMsIG9wcyk7XG4rfVxuK1xuIGludCBtaW5peF9wcmVwYXJlX2NodW5rKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbilcbiB7XG4gXHRyZXR1cm4gX19ibG9ja193cml0ZV9iZWdpbihmb2xpbywgcG9zLCBsZW4sIG1pbml4X2dldF9ibG9jayk7XG5AQCAtNDg4LDI2ICs1NDEsMzUgQEAgc3RhdGljIGludCBtaW5peF93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgc2VjdG9yX3QgbWluaXhfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYmxvY2spXG4te1xuLVx0cmV0dXJuIGdlbmVyaWNfYmxvY2tfYm1hcChtYXBwaW5nLGJsb2NrLG1pbml4X2dldF9ibG9jayk7XG4tfVxuLVxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG1pbml4X2FvcHMgPSB7XG4tXHQuZGlydHlfZm9saW9cdD0gYmxvY2tfZGlydHlfZm9saW8sXG4tXHQuaW52YWxpZGF0ZV9mb2xpbyA9IGJsb2NrX2ludmFsaWRhdGVfZm9saW8sXG4rXHQuZGlydHlfZm9saW9cdD0gaW9tYXBfZGlydHlfZm9saW8sXG4rXHQuaW52YWxpZGF0ZV9mb2xpbyA9IGlvbWFwX2ludmFsaWRhdGVfZm9saW8sXG4gXHQucmVhZF9mb2xpbyA9IG1pbml4X3JlYWRfZm9saW8sXG4rXHQucmVhZGFoZWFkID0gbWluaXhfcmVhZGFoZWFkLFxuIFx0LndyaXRlcGFnZXMgPSBtaW5peF93cml0ZXBhZ2VzLFxuK1x0Lm1pZ3JhdGVfZm9saW8gPSBmaWxlbWFwX21pZ3JhdGVfZm9saW8sXG4rXHQuaXNfcGFydGlhbGx5X3VwdG9kYXRlID0gaW9tYXBfaXNfcGFydGlhbGx5X3VwdG9kYXRlLFxuK1x0LnJlbGVhc2VfZm9saW8gPSBpb21hcF9yZWxlYXNlX2ZvbGlvLFxuK1x0LmVycm9yX3JlbW92ZV9mb2xpbyA9IGdlbmVyaWNfZXJyb3JfcmVtb3ZlX2ZvbGlvLFxuK307XG4rXG4rLyogQSBzcGVjaWFsIGFvcHMgZm9yIGRpcmVjdG9yaWVzIHRoYXQga2VlcHMgdXNpbmcgdGhlIGJ1ZmZlciBoZWFkIGNodW5rcywgYXRcbisgKiBsZWFzdCBmb3IgdGhlIHRpbWUgYmVpbmcuXG4rICovXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbWluaXhfZGlyX2FvcHMgPSB7XG4rXHQuZGlydHlfZm9saW8gPSBibG9ja19kaXJ0eV9mb2xpbyxcbitcdC5pbnZhbGlkYXRlX2ZvbGlvID0gYmxvY2tfaW52YWxpZGF0ZV9mb2xpbyxcbitcdC5yZWFkX2ZvbGlvID0gbWluaXhfYmxvY2tfcmVhZF9mb2xpbyxcbiBcdC53cml0ZV9iZWdpbiA9IG1pbml4X3dyaXRlX2JlZ2luLFxuIFx0LndyaXRlX2VuZCA9IGdlbmVyaWNfd3JpdGVfZW5kLFxuIFx0Lm1pZ3JhdGVfZm9saW8gPSBidWZmZXJfbWlncmF0ZV9mb2xpbyxcbi1cdC5ibWFwID0gbWluaXhfYm1hcCxcbi1cdC5kaXJlY3RfSU8gPSBub29wX2RpcmVjdF9JT1xuK1x0LndyaXRlcGFnZXMgPSBtaW5peF9ibG9ja193cml0ZXBhZ2VzLFxuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbiBcdC5nZXRfbGlua1x0PSBwYWdlX2dldF9saW5rLFxuIFx0LmdldGF0dHJcdD0gbWluaXhfZ2V0YXR0cixcbitcdC5zZXRhdHRyXHQ9IG1pbml4X3NldGF0dHIsXG4gfTtcbiBcbiB2b2lkIG1pbml4X3NldF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBkZXZfdCByZGV2KVxuQEAgLTUxOSw3ICs1ODEsNyBAQCB2b2lkIG1pbml4X3NldF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBkZXZfdCByZGV2KVxuIFx0fSBlbHNlIGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbiBcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNm1pbml4X2Rpcl9pbm9kZV9vcGVyYXRpb25zO1xuIFx0XHRpbm9kZS1cdTAwM2VpX2ZvcCA9IFx1MDAyNm1pbml4X2Rpcl9vcGVyYXRpb25zO1xuLVx0XHRpbm9kZS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHMgPSBcdTAwMjZtaW5peF9hb3BzO1xuK1x0XHRpbm9kZS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHMgPSBcdTAwMjZtaW5peF9kaXJfYW9wcztcbiBcdH0gZWxzZSBpZiAoU19JU0xOSyhpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4gXHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZtaW5peF9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7XG4gXHRcdGlub2RlX25vaGlnaG1lbShpbm9kZSk7XG5AQCAtNzg2LDQgKzg0OCwzIEBAIG1vZHVsZV9pbml0KGluaXRfbWluaXhfZnMpXG4gbW9kdWxlX2V4aXQoZXhpdF9taW5peF9mcylcbiBNT0RVTEVfREVTQ1JJUFRJT04oXCJNaW5peCBmaWxlIHN5c3RlbVwiKTtcbiBNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbi1cbmRpZmYgLS1naXQgYS9mcy9taW5peC9pb21hcC5jIGIvZnMvbWluaXgvaW9tYXAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjkwZTAxNmFhYTAxZWFcbi0tLSAvZGV2L251bGxcbisrKyBiL2ZzL21pbml4L2lvbWFwLmNcbkBAIC0wLDAgKzEsMTIyIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKy8qXG4rICogaW9tYXAgZnVuY3Rpb25zIGZvciBtaW5peC5cbisgKi9cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgbWluaXhfY2hhaW5fY2xlYW51cChJbmRpcmVjdCAqY2hhaW4sIEluZGlyZWN0ICpwYXJ0aWFsKVxuK3tcbitcdHdoaWxlIChwYXJ0aWFsIFx1MDAzZSBjaGFpbikge1xuK1x0XHRicmVsc2UocGFydGlhbC1cdTAwM2ViaCk7XG4rXHRcdHBhcnRpYWwtLTtcbitcdH1cbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIG1pbml4X2lvbWFwX3NldF9tYXBwZWQoc3RydWN0IGlvbWFwICppb21hcCwgc2VjdG9yX3QgcGh5cyxcbitcdFx0dW5zaWduZWQgaW50IGJsa2JpdHMsIHNlY3Rvcl90IGlibG9jaylcbit7XG4rXHRpb21hcC1cdTAwM2V0eXBlID0gSU9NQVBfTUFQUEVEO1xuK1x0aW9tYXAtXHUwMDNlYWRkciA9ICh1NjQpcGh5cyBcdTAwM2NcdTAwM2MgYmxrYml0cztcbitcdGlvbWFwLVx1MDAzZWxlbmd0aCA9IDEgXHUwMDNjXHUwMDNjIGJsa2JpdHM7XG4rXHRpb21hcC1cdTAwM2VvZmZzZXQgPSAodTY0KWlibG9jayBcdTAwM2NcdTAwM2MgYmxrYml0cztcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIG1pbml4X2lvbWFwX3NldF9ob2xlKHN0cnVjdCBpb21hcCAqaW9tYXAsXG4rXHRcdHVuc2lnbmVkIGludCBibGtiaXRzLCBzZWN0b3JfdCBpYmxvY2spXG4re1xuK1x0aW9tYXAtXHUwMDNldHlwZSA9IElPTUFQX0hPTEU7XG4rXHRpb21hcC1cdTAwM2VhZGRyID0gSU9NQVBfTlVMTF9BRERSO1xuK1x0aW9tYXAtXHUwMDNlbGVuZ3RoID0gMSBcdTAwM2NcdTAwM2MgYmxrYml0cztcbitcdGlvbWFwLVx1MDAzZW9mZnNldCA9ICh1NjQpaWJsb2NrIFx1MDAzY1x1MDAzYyBibGtiaXRzO1xuK31cbitcbisvKlxuKyAqIG1pbml4X2lvbWFwX2JlZ2luIC0gbWFwIGEgZmlsZSByYW5nZSB0byBkaXNrIGJsb2Nrcy4gSXQgYWN0cyBhcyBhIHJlcGxhY2VtZW50XG4rICogZm9yIGdldF9ibG9jayBpbiBpdHJlZV9jb21tb24uYywgYXQgbGVhc3QgaW4gdGhlIGltcG9ydGFudCB3YXlzLCBhbmQgaXNcbisgKiBhZGFwdGVkIGZyb20gaXQsIGJ1dCBpdCB1c2VzIGlvbWFwIGluc3RlYWQgb2YgYnVmZmVyX2hlYWQuXG4rICovXG4rc3RhdGljIGludCBtaW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxuK1x0dW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBzdHJ1Y3QgaW9tYXAgKnNyY21hcClcbit7XG4rXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbitcdHVuc2lnbmVkIGludCBibGtiaXRzID0gc2ItXHUwMDNlc19ibG9ja3NpemVfYml0cztcbitcdHNlY3Rvcl90IGlibG9jayA9IG9mZnNldCBcdTAwM2VcdTAwM2UgYmxrYml0cztcbitcdGludCBjcmVhdGUgPSBmbGFncyBcdTAwMjYgSU9NQVBfV1JJVEU7XG4rXG4rXHRpbnQgb2Zmc2V0c1tERVBUSF07XG4rXHRJbmRpcmVjdCBjaGFpbltERVBUSF07XG4rXHRJbmRpcmVjdCAqcGFydGlhbDtcbitcdGludCBkZXB0aCA9IGJsb2NrX3RvX3BhdGgoaW5vZGUsIGlibG9jaywgb2Zmc2V0cyk7XG4rXHRpbnQgbGVmdDtcbitcdGludCBlcnIgPSAtRUlPO1xuK1xuK1x0c2VjdG9yX3QgcGh5cztcbitcbitcdC8qIGJsb2NrIGlzIGJleW9uZCBtYXggZmlsZSBzaXplICovXG4rXHRpZiAoZGVwdGggPT0gMClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpb21hcC1cdTAwM2ViZGV2ID0gaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2JkZXY7XG4rXG4rcmVyZWFkOlxuK1x0cGFydGlhbCA9IGdldF9icmFuY2goaW5vZGUsIGRlcHRoLCBvZmZzZXRzLCBjaGFpbiwgXHUwMDI2ZXJyKTtcbitcbitcdC8qIFNpbXBsZXN0IGNhc2UgLSBibG9jayBmb3VuZCwgbm8gYWxsb2NhdGlvbiBuZWVkZWQgKi9cbitcdGlmICghcGFydGlhbCkge1xuK1x0XHRpb21hcC1cdTAwM2VmbGFncyA9IDA7XG4rXHRcdHBoeXMgPSBibG9ja190b19jcHUoY2hhaW5bZGVwdGggLSAxXS5rZXkpO1xuK1x0XHRwYXJ0aWFsID0gY2hhaW4rZGVwdGgtMTtcbitcdFx0bWluaXhfaW9tYXBfc2V0X21hcHBlZChpb21hcCwgcGh5cywgYmxrYml0cywgaWJsb2NrKTtcbitcdFx0bWluaXhfY2hhaW5fY2xlYW51cChjaGFpbiwgcGFydGlhbCk7XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHQvKiBOZXh0IHNpbXBsZSBjYXNlIC0gcGxhaW4gbG9va3VwIG9yIGZhaWxlZCByZWFkIG9mIGluZGlyZWN0IGJsb2NrICovXG4rXHRpZiAoIWNyZWF0ZSB8fCBlcnIgPT0gLUVJTykge1xuK1x0XHRtaW5peF9pb21hcF9zZXRfaG9sZShpb21hcCwgYmxrYml0cywgaWJsb2NrKTtcbitcdFx0bWluaXhfY2hhaW5fY2xlYW51cChjaGFpbiwgcGFydGlhbCk7XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogVGhpcyBpcyBoZWxkIG92ZXIgZnJvbSB0aGUgb3JpZ2luYWwgZ2V0X2Jsb2NrIGxvZ2ljLCB3aGVyZSBpdFxuK1x0ICogYWN0ZWQgYXMgYSBndWFyZCBpbiBjYXNlIHRydW5jYXRlKCkgZGVsZXRlZCBibG9ja3MgZnJvbSB1bmRlciB0aGF0XG4rXHQgKiBmdW5jdGlvbi4gVGhlcmUgc2hvdWxkIG5vdCBiZSBhIHJhY2Ugd2l0aCBpb21hcCBvcGVyYXRpb25zLCBidXRcbitcdCAqIHdlJ3JlIHJldGFpbmluZyB0aGUgZGVmZW5zaXZlIGNvZGluZyBoZXJlIHRvIGJlIGV4dHJhIHNhZmUganVzdCBpblxuK1x0ICogY2FzZS5cbitcdCAqL1xuK1x0aWYgKGVyciA9PSAtRUFHQUlOKSB7XG4rXHRcdG1pbml4X2NoYWluX2NsZWFudXAoY2hhaW4sIHBhcnRpYWwpO1xuK1x0XHRnb3RvIHJlcmVhZDtcbitcdH1cbitcbitcdGxlZnQgPSAoY2hhaW4gKyBkZXB0aCkgLSBwYXJ0aWFsO1xuK1x0ZXJyID0gYWxsb2NfYnJhbmNoKGlub2RlLCBsZWZ0LCBvZmZzZXRzICsgKHBhcnRpYWwgLSBjaGFpbiksIHBhcnRpYWwpO1xuK1x0aWYgKGVycikge1xuK1x0XHRtaW5peF9jaGFpbl9jbGVhbnVwKGNoYWluLCBwYXJ0aWFsKTtcbitcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdGlmIChzcGxpY2VfYnJhbmNoKGlub2RlLCBjaGFpbiwgcGFydGlhbCwgbGVmdCkgXHUwMDNjIDApIHtcbitcdFx0bWluaXhfY2hhaW5fY2xlYW51cChjaGFpbiwgcGFydGlhbCk7XG4rXHRcdGdvdG8gcmVyZWFkO1xuK1x0fVxuK1xuK1x0LyogU3VjY2Vzc2Z1bCBhbGxvY2F0aW9uLCBtYXBwaW5nIGl0LiAqL1xuK1x0aW9tYXAtXHUwMDNlZmxhZ3MgPSBJT01BUF9GX05FVztcbitcdHBoeXMgPSBibG9ja190b19jcHUoY2hhaW5bZGVwdGggLSAxXS5rZXkpO1xuK1x0bWluaXhfaW9tYXBfc2V0X21hcHBlZChpb21hcCwgcGh5cywgYmxrYml0cywgaWJsb2NrKTtcbitcdG1pbml4X2NoYWluX2NsZWFudXAoY2hhaW4sIHBhcnRpYWwpO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rLypcbisgKiBtaW5peF9pb21hcF9lbmQgZW5kcyB1cCBiZWluZyBhIG5vcDsgc2luY2UgbWluaXggZG9lc24ndCBoYXZlIGFueSBleHRlbnRzIG9yXG4rICogdHJhbnNhY3Rpb25zIHRvIHdvcnJ5IGFib3V0LCB0aGVyZSBpc24ndCBhbnl0aGluZyB0byB1cGRhdGUgaGVyZS4gVGhlIG9uLWRpc2tcbisgKiBpbmRpcmVjdCBibG9ja3MgZ2V0IGRpcnRpZWQgaW4gbWluaXhfaW9tYXBfYmVnaW4uXG4rICovXG4rc3RhdGljIGludCBtaW5peF9pb21hcF9lbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCxcbitcdHNzaXplX3Qgd3JpdHRlbiwgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwKVxuK3tcbitcdHJldHVybiAwO1xuK31cbmRpZmYgLS1naXQgYS9mcy9taW5peC9pdHJlZV9jb21tb24uYyBiL2ZzL21pbml4L2l0cmVlX2NvbW1vbi5jXG5pbmRleCBjM2NkMmM3NWFmOWNlLi5kNzNhYjFjYWFjZmVjIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvaXRyZWVfY29tbW9uLmNcbisrKyBiL2ZzL21pbml4L2l0cmVlX2NvbW1vbi5jXG5AQCAtMzExLDcgKzMxMSwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdHJ1bmNhdGUgKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuIFx0bG9uZyBpYmxvY2s7XG4gXG4gXHRpYmxvY2sgPSAoaW5vZGUtXHUwMDNlaV9zaXplICsgc2ItXHUwMDNlc19ibG9ja3NpemUgLTEpIFx1MDAzZVx1MDAzZSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xuLVx0YmxvY2tfdHJ1bmNhdGVfcGFnZShpbm9kZS1cdTAwM2VpX21hcHBpbmcsIGlub2RlLVx1MDAzZWlfc2l6ZSwgZ2V0X2Jsb2NrKTtcbitcbitcdC8qIERlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBpbm9kZSBiZWluZyB0cnVuY2F0ZWQgaXMgYSBkaXJlY3Rvcnkgb3Igbm90LFxuK1x0ICogd2UgbmVlZCB0byBlaXRoZXIgY2FsbCBpb21hcF90cnVuY2F0ZV9wYWdlIG9yIGJsb2NrX3RydW5jYXRlX3BhZ2UuXG4rXHQgKi9cbitcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpXG4rXHRcdGJsb2NrX3RydW5jYXRlX3BhZ2UoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBpbm9kZS1cdTAwM2VpX3NpemUsIGdldF9ibG9jayk7XG4rXHRlbHNlXG4rXHRcdGlvbWFwX3RydW5jYXRlX3BhZ2UoaW5vZGUsIGlub2RlLVx1MDAzZWlfc2l6ZSwgTlVMTCxcbitcdFx0XHRtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKSwgTlVMTCwgTlVMTCk7XG4gXG4gXHRuID0gYmxvY2tfdG9fcGF0aChpbm9kZSwgaWJsb2NrLCBvZmZzZXRzKTtcbiBcdGlmICghbilcbmRpZmYgLS1naXQgYS9mcy9taW5peC9pdHJlZV92MS5jIGIvZnMvbWluaXgvaXRyZWVfdjEuY1xuaW5kZXggMWZlZDkwNjA0MmFhOC4uNThjMjlmNDQ0M2QzNyAxMDA2NDRcbi0tLSBhL2ZzL21pbml4L2l0cmVlX3YxLmNcbisrKyBiL2ZzL21pbml4L2l0cmVlX3YxLmNcbkBAIC00OSw2ICs0OSwxOCBAQCBzdGF0aWMgaW50IGJsb2NrX3RvX3BhdGgoc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssIGludCBvZmZzZXRzW0RFUFRIXSlcbiB9XG4gXG4gI2luY2x1ZGUgXCJpdHJlZV9jb21tb24uY1wiXG4rLyogTk9UQSBCRU5FOlxuKyAqXG4rICogVGhpcyBpcyBpY2t5IHRvIG1lLCBidXQgYXQgdGhlIHNhbWUgdGltZSBoYXZpbmcgaXQgYmUgYSBzdGFuZGFsb25lIEMgZmlsZVxuKyAqIHRoYXQncyBjb21waWxlZCB0byBvYmplY3QgZm9ybSBhbmQgbGlua2VkIHNlcGFyYXRlbHkgbGlrZSBpdCBpcyBpbiB4aWFmcyBpc1xuKyAqIG11Y2ggbmFzdGllciBpbiBtaW5peCBiZWNhdXNlIG9mIHRoZSBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIG1pbml4IGZzIHRoYXRcbisgKiBoYXZlIHNvbWUgdmVyeSwgdmVyeSBkaWZmZXJlbnQgYXNwZWN0cywgbGlrZSB0aGUgc2l6ZSBvZiBibG9ja190LiBJIGRvbid0XG4rICogbGlrZSBpdCwgYnV0IHNpbmNlIG1pbml4IGFscmVhZHkgaGFzIHRoaXMgcGF0dGVybiB3aGVyZSBhIGNvbW1vbiBpdHJlZSBmaWxlXG4rICogaXMgaW5jbHVkZWQgaW4gdGhlIGl0cmVlX3YxIGFuZCBpdHJlZV92MihhbmQgdjMpIGZpbGVzLCBJJ20gaW5jbHVkaW5nIGlvbWFwLmNcbisgKiBpbiB0aGVzZSBmaWxlcyBhcyB3ZWxsLiBJdCBkb2VzIGF0IGxlYXN0IGF2b2lkIGV4cG9ydGluZyBzb21lIGN1cnJlbnRseVxuKyAqIHN0YXRpYyBmdW5jdGlvbnMgdGhhdCBhcmVuJ3QgbmVlZGVkIGFueXdoZXJlIGJ1dCBpdHJlZV9jb21tb24uYyBhbmQgaW9tYXAuYy5cbisgKi9cbisjaW5jbHVkZSBcImlvbWFwLmNcIlxuIFxuIGludCBWMV9taW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssXG4gXHRcdFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpXG5AQCAtNjEsNyArNzMsMTggQEAgdm9pZCBWMV9taW5peF90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcbiBcdHRydW5jYXRlKGlub2RlKTtcbiB9XG4gXG4tdW5zaWduZWQgVjFfbWluaXhfYmxvY2tzKGxvZmZfdCBzaXplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuK3Vuc2lnbmVkIGludCBWMV9taW5peF9ibG9ja3MobG9mZl90IHNpemUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4ge1xuIFx0cmV0dXJuIG5ibG9ja3Moc2l6ZSwgc2IpO1xuIH1cbitcbitpbnQgVjFfbWluaXhfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCxcbitcdHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApXG4re1xuK1x0cmV0dXJuIG1pbml4X2lvbWFwX2JlZ2luKGlub2RlLCBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsIGlvbWFwLCBzcmNtYXApO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYxX21pbml4X2lvbWFwX29wcyA9IHtcbitcdC5pb21hcF9iZWdpbiA9IFYxX21pbml4X2lvbWFwX2JlZ2luLFxuK1x0LmlvbWFwX2VuZCAgID0gbWluaXhfaW9tYXBfZW5kLFxuK307XG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvaXRyZWVfdjIuYyBiL2ZzL21pbml4L2l0cmVlX3YyLmNcbmluZGV4IDlkMDBmMzFhMmQ5ZDEuLmZjN2E1YWU4ZmExY2EgMTAwNjQ0XG4tLS0gYS9mcy9taW5peC9pdHJlZV92Mi5jXG4rKysgYi9mcy9taW5peC9pdHJlZV92Mi5jXG5AQCAtNTcsNiArNTcsMTAgQEAgc3RhdGljIGludCBibG9ja190b19wYXRoKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBsb25nIGJsb2NrLCBpbnQgb2Zmc2V0c1tERVBUSF0pXG4gfVxuIFxuICNpbmNsdWRlIFwiaXRyZWVfY29tbW9uLmNcIlxuKy8qIFNlZSB0aGUgbm90ZSBpbiBpdHJlZV92MSBpbiBhIGNvbW1lbnQgdGhhdCBzdGFydHMgXCJOT1RBIEJFTkVcIiBmb3IgYW5cbisgKiBleHBsYW5hdGlvbiBmb3Igd2h5IGlvbWFwLmMgaXMgaW5jbHVkZWQgaGVyZS5cbisgKi9cbisjaW5jbHVkZSBcImlvbWFwLmNcIlxuIFxuIGludCBWMl9taW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssXG4gXHRcdFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpXG5AQCAtNjksNyArNzMsMTggQEAgdm9pZCBWMl9taW5peF90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcbiBcdHRydW5jYXRlKGlub2RlKTtcbiB9XG4gXG4tdW5zaWduZWQgVjJfbWluaXhfYmxvY2tzKGxvZmZfdCBzaXplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuK3Vuc2lnbmVkIGludCBWMl9taW5peF9ibG9ja3MobG9mZl90IHNpemUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4ge1xuIFx0cmV0dXJuIG5ibG9ja3Moc2l6ZSwgc2IpO1xuIH1cbitcbitpbnQgVjJfbWluaXhfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCxcbitcdHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApXG4re1xuK1x0cmV0dXJuIG1pbml4X2lvbWFwX2JlZ2luKGlub2RlLCBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsIGlvbWFwLCBzcmNtYXApO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYyX21pbml4X2lvbWFwX29wcyA9IHtcbitcdC5pb21hcF9iZWdpbiA9IFYyX21pbml4X2lvbWFwX2JlZ2luLFxuK1x0LmlvbWFwX2VuZCAgID0gbWluaXhfaW9tYXBfZW5kLFxuK307XG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvbWluaXguaCBiL2ZzL21pbml4L21pbml4LmhcbmluZGV4IDc4NzIyY2UyMmUxZTEuLjkwMzU2MDRjNjhjYTEgMTAwNjQ0XG4tLS0gYS9mcy9taW5peC9taW5peC5oXG4rKysgYi9mcy9taW5peC9taW5peC5oXG5AQCAtNSw2ICs1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZW1hcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWluaXhfZnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbWFwLmhcdTAwM2VcbiBcbiAjZGVmaW5lIElOT0RFX1ZFUlNJT04oaW5vZGUpXHRtaW5peF9zYihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX3ZlcnNpb25cbiAjZGVmaW5lIE1JTklYX1YxXHRcdDB4MDAwMVx0XHQvKiBvcmlnaW5hbCBtaW5peCBmcyAqL1xuQEAgLTU3LDYgKzU4LDggQEAgdm9pZCBtaW5peF9mcmVlX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGxvbmcgYmxvY2spO1xuIHVuc2lnbmVkIGxvbmcgbWluaXhfY291bnRfZnJlZV9ibG9ja3Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG4gaW50IG1pbml4X2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqLCBjb25zdCBzdHJ1Y3QgcGF0aCAqLFxuIFx0XHRzdHJ1Y3Qga3N0YXQgKiwgdTMyLCB1bnNpZ25lZCBpbnQpO1xuK2ludCBtaW5peF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4rXHRzdHJ1Y3QgaWF0dHIgKmF0dHIpO1xuIGludCBtaW5peF9wcmVwYXJlX2NodW5rKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbik7XG4gc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptaW5peF9nZXRfbWV0YWRhdGFfYmhzKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIFxuQEAgLTc2LDEzICs3OSwyMyBAQCBpbnQgbWluaXhfbWFrZV9lbXB0eShzdHJ1Y3QgaW5vZGUqLCBzdHJ1Y3QgaW5vZGUqKTtcbiBpbnQgbWluaXhfZW1wdHlfZGlyKHN0cnVjdCBpbm9kZSopO1xuIGludCBtaW5peF9zZXRfbGluayhzdHJ1Y3QgbWluaXhfZGlyX2VudHJ5ICpkZSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0c3RydWN0IGlub2RlICppbm9kZSk7XG4rXG4gc3RydWN0IG1pbml4X2Rpcl9lbnRyeSAqbWluaXhfZG90ZG90KHN0cnVjdCBpbm9kZSosIHN0cnVjdCBmb2xpbyAqKik7XG4gaW5vX3QgbWluaXhfaW5vZGVfYnlfbmFtZShzdHJ1Y3QgZGVudHJ5Kik7XG4gXG4raW50IFYxX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4rXHRsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsXG4rXHRzdHJ1Y3QgaW9tYXAgKnNyY21hcCk7XG4raW50IFYyX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4rXHRsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsXG4rXHRzdHJ1Y3QgaW9tYXAgKnNyY21hcCk7XG4rXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfaW5vZGVfb3BlcmF0aW9ucztcbiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWluaXhfZGlyX2lub2RlX29wZXJhdGlvbnM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWluaXhfZmlsZV9vcGVyYXRpb25zO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2Rpcl9vcGVyYXRpb25zO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYxX21pbml4X2lvbWFwX29wcztcbitleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMl9taW5peF9pb21hcF9vcHM7XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgbWluaXhfc2JfaW5mbyAqbWluaXhfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiB7XG5AQCAtOTQsMTEgKzEwNywxNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtaW5peF9pbm9kZV9pbmZvICptaW5peF9pKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRyZXR1cm4gY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgbWluaXhfaW5vZGVfaW5mbywgdmZzX2lub2RlKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBtaW5peF9ibG9ja3NfbmVlZGVkKHVuc2lnbmVkIGJpdHMsIHVuc2lnbmVkIGJsb2Nrc2l6ZSlcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBtaW5peF9ibG9ja3NfbmVlZGVkKHVuc2lnbmVkIGludCBiaXRzLCB1bnNpZ25lZCBpbnQgYmxvY2tzaXplKVxuIHtcbiBcdHJldHVybiBESVZfUk9VTkRfVVBfUE9XMihiaXRzLCBibG9ja3NpemUgKiA4KTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICptaW5peF9pb21hcF9vcHNfdmVyKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4re1xuK1x0cmV0dXJuIChJTk9ERV9WRVJTSU9OKGlub2RlKSA9PSBNSU5JWF9WMSkgP1xuK1x0XHRcdTAwMjZWMV9taW5peF9pb21hcF9vcHMgOiBcdTAwMjZWMl9taW5peF9pb21hcF9vcHM7XG4rfVxuK1xuICNpZiBkZWZpbmVkKENPTkZJR19NSU5JWF9GU19OQVRJVkVfRU5ESUFOKSBcdTAwMjZcdTAwMjYgXFxcbiBcdGRlZmluZWQoQ09ORklHX01JTklYX0ZTX0JJR19FTkRJQU5fMTZCSVRfSU5ERVhFRClcbiBcbkBAIC0xMjgsNyArMTQ3LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBtaW5peF9ibG9ja3NfbmVlZGVkKHVuc2lnbmVkIGJpdHMsIHVuc2lnbmVkIGJsb2Nrc2l6ZSlcbiAgKiBiaWctZW5kaWFuIDE2Yml0IGluZGV4ZWQgYml0bWFwc1xuICAqL1xuIFxuLXN0YXRpYyBpbmxpbmUgaW50IG1pbml4X2ZpbmRfZmlyc3RfemVyb19iaXQoY29uc3Qgdm9pZCAqdmFkZHIsIHVuc2lnbmVkIHNpemUpXG4rc3RhdGljIGlubGluZSBpbnQgbWluaXhfZmluZF9maXJzdF96ZXJvX2JpdChjb25zdCB2b2lkICp2YWRkciwgdW5zaWduZWQgaW50IHNpemUpXG4ge1xuIFx0Y29uc3QgdW5zaWduZWQgc2hvcnQgKnAgPSB2YWRkciwgKmFkZHIgPSB2YWRkcjtcbiBcdHVuc2lnbmVkIHNob3J0IG51bTtcbmRpZmYgLS1naXQgYS9mcy9taW5peC9uYW1laS5jIGIvZnMvbWluaXgvbmFtZWkuY1xuaW5kZXggNTUyNWJhMzY3ZWQ3NC4uNTJlMTE1MDEzYWJmOCAxMDA2NDRcbi0tLSBhL2ZzL21pbml4L25hbWVpLmNcbisrKyBiL2ZzL21pbml4L25hbWVpLmNcbkBAIC02LDYgKzYsNyBAQFxuICAqL1xuIFxuICNpbmNsdWRlIFwibWluaXguaFwiXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW9tYXAuaFx1MDAzZVxuIFxuIHN0YXRpYyBpbnQgYWRkX25vbmRpcihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4ge1xuQEAgLTg0LDEyICs4NSwxNiBAQCBzdGF0aWMgaW50IG1pbml4X3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRyZXR1cm4gUFRSX0VSUihpbm9kZSk7XG4gXG4gXHRtaW5peF9zZXRfaW5vZGUoaW5vZGUsIDApO1xuLVx0ZXJyID0gcGFnZV9zeW1saW5rKGlub2RlLCBzeW1uYW1lLCBpKTtcbitcdGVyciA9IGlvbWFwX3N5bWxpbmtfd3JpdGUoaW5vZGUsIHN5bW5hbWUsIGksIG1pbml4X2lvbWFwX29wc192ZXIoaW5vZGUpLCBOVUxMLCBOVUxMKTtcbitcbiBcdGlmICh1bmxpa2VseShlcnIpKSB7XG4gXHRcdGlub2RlX2RlY19saW5rX2NvdW50KGlub2RlKTtcbiBcdFx0aXB1dChpbm9kZSk7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4rXG4rXHRpX3NpemVfd3JpdGUoaW5vZGUsIGkgLSAxKTtcbitcbiBcdHJldHVybiBhZGRfbm9uZGlyKGRlbnRyeSwgaW5vZGUpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvbWFwLmggYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcbmluZGV4IDhjNzU0ZWI5NzRmYmYuLmFiMjdhM2E1YjhkMmMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcbisrKyBiL2luY2x1ZGUvbGludXgvaW9tYXAuaFxuQEAgLTQ3MSw2ICs0NzEsOSBAQCBsb2ZmX3QgaW9tYXBfc2Vla19kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4gXHRcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyk7XG4gc2VjdG9yX3QgaW9tYXBfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYm5vLFxuIFx0XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMpO1xuK2ludCBpb21hcF9zeW1saW5rX3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKnRhcmdldCwgaW50IGxlbixcbitcdFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLFxuK1x0XHRjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGVfb3BzICp3cml0ZV9vcHMsIHZvaWQgKnByaXZhdGUpO1xuIFxuIC8qXG4gICogRmxhZ3MgZm9yIGlvbWFwX2lvZW5kLVx1MDAzZWlvX2ZsYWdzLlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTA6NDYuMjMyOTE0ODAzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMjY4MTAxODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWluaXggSS9PbWFwIENvbnZlcnNpb24gZm9yIFN5bWxpbmtzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMgdGhhdCdzIHN3YXBwaW5nIG91dCB0aGUgb2xkIGBidWZmZXJfaGVhZGAtYmFzZWQgYmxvY2sgSS9PIGluIHRoZSBNaW5peCBmaWxlc3lzdGVtIGZvciBgaW9tYXBgIGJ1ZmZlcmVkIEkvTy4gVGhlIG1haW4gdGhpbmcgdGhhdCBjYXVnaHQgbXkgZXllIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYGlvbWFwX3N5bWxpbmtfd3JpdGVgIGFuZCBpdHMgdXNlIGluIGBmcy9taW5peC9uYW1laS5jYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MuXG5cblRoZSBjb2RlJ3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgaXQncyBhZGRpbmcgYGlvbWFwX3N5bWxpbmtfd3JpdGVgIHRvIGBmcy9pb21hcC9idWZmZXJlZC1pby5jYCBhbmQgdXBkYXRpbmcgdmFyaW91cyBNaW5peCBmaWxlcyB0byB1c2UgdGhlIG5ldyBmdW5jdGlvbi4gTG9va2luZyBhdCB0aGUgZGVmaW5pdGlvbiwgYGlvbWFwX3N5bWxpbmtfd3JpdGVgIHRha2VzIGEgc3ltbGluayB0YXJnZXQgc3RyaW5nIGFuZCBpdHMgbGVuZ3RoLiBJdCBjcmVhdGVzIGEgYGt2ZWNgLCBhbiBgaW9tYXBfaXRlcmAsIGFuZCB1c2VzIGBpb3ZfaXRlcl9rdmVjYCB0byBwb2ludCBhbiBgaW92YCB0byB0aGUgZ2l2ZW4gdGFyZ2V0IHN0cmluZy5cblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIGBsZW4gLSAxYCB1c2FnZSBpbiBgaW92X2xlbmAuIEluIGBtaW5peF9zeW1saW5rYCwgdGhlIGxlbmd0aCBgaWAgaXMgZGV0ZXJtaW5lZCBhcyBgc3RybGVuKHN5bW5hbWUpICsgMWAgd2hpY2ggaW5jbHVkZWQgdGhlIG51bGwgdGVybWluYXRvci4gYGlvbWFwX3N5bWxpbmtfd3JpdGVgIHJlY2VpdmVzIGBsZW5gIGFzIGBpYCwgYnV0IHVzZXMgYGxlbiAtIDFgLCBjb3JyZXNwb25kaW5nIHRvIGp1c3QgYHN0cmxlbihzeW1uYW1lKWAuIFRoaXMgbG9va3MgYSBiaXQgZGlmZmVyZW50IGZyb20gaG93IGBwYWdlX3N5bWxpbmtgIGhhbmRsZWQgdGhpcywgd2hlcmUgYHBhZ2Vfc3ltbGluayhpbm9kZSwgc3ltbmFtZSwgaSlgIHdyb3RlIGBpYCBieXRlcywgaW5jbHVkaW5nIHRoZSBudWxsIHRlcm1pbmF0b3IuIEl0IGhhcyBiZWVuIGEgd2hpbGUsIGJ1dCBJIHNlZW0gdG8gcmVjYWxsIHRoZSBgcGFnZV9zeW1saW5rYCByb3V0aW5lIHdyaXRpbmcgdGhlIG51bGwgdGVybWluYXRvci4gU28sIGl0IGFwcGVhcnMgdGhhdCBgaW9tYXBfc3ltbGlua193cml0ZWAgaXMgd3JpdGluZyBgc3RybGVuKHN5bW5hbWUpYCBieXRlcyBpbnN0ZWFkIG9mIGBzdHJsZW4oc3ltbmFtZSkgKyAxYC4gVGhpcyBjb3VsZCBsZWF2ZSB0aGUgcmVzdCBvZiB0aGUgYmxvY2sgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCwgYW5kIHRoaXMgY291bGQgYmUgYSBzZWN1cml0eSByaXNrLlxuXG5UaGUga2V5IHF1ZXN0aW9uIHRoZW4gaXMsIHdoYXQgaGFwcGVucyB0byB0aGUgcmVzdCBvZiB0aGUgYmxvY2s/IFdpdGggYSBibG9jayBzaXplIG9mLCBzYXksIDEwMjQgYnl0ZXMgYW5kIGEgc3ltbGluayBvZiAxMCBieXRlcywgYXJlIHRoZSByZW1haW5pbmcgMTAxNCBieXRlcyBsZWZ0IHVuaW5pdGlhbGl6ZWQ/IEkgbmVlZCB0byBkaWcgaW50byBgaW9tYXBfd3JpdGVfaXRlcmAgb3IgYGlvbWFwX3dyaXRlX2JlZ2luYCB0byBzZWUgaG93IHRoZSB3cml0ZSBvcGVyYXRpb24gaGFuZGxlcyB0aGlzLiBJIHN1c3BlY3QgdGhhdCB3aGVuIHdyaXRpbmcgdG8gYSBuZXcgYmxvY2ssIHRoZSBmdW5jdGlvbiB3aWxsIGFsbG9jYXRlIGEgZm9saW8gYW5kIHplcm8gdGhlIHVud3JpdHRlbiBwYXJ0cy4gTm93LCBgaW9tYXBfd3JpdGVfaXRlcmAgY2FsbHMgYGlvbWFwX3dyaXRlX2JlZ2luYCwgd2hpY2ggY2FsbHMgYGlvbWFwX2dldF9mb2xpb2AsIHNvIEkgc2hvdWxkIHByb2JhYmx5IHZlcmlmeSBteSBhc3N1bXB0aW9ucy4gSG9wZWZ1bGx5LCBgaW9tYXBfZ2V0X2ZvbGlvYCBvciBgaW9tYXBfd3JpdGVfYmVnaW5gIHplcm8gdGhlIGZvbGlvIGlmIGl0IGlzIGEgbmV3IGJsb2NrLCBpZiBzbywgd2UgY2FuIGJlIHN1cmUgdGhlIGVudGlyZSBibG9jayBoYXMgYmVlbiBpbml0aWFsaXplZC4gVGltZSB0byBjaGVjayB0aG9zZSByb3V0aW5lcy4uLiBJIHRoaW5rIHRoZSBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgc2hvdWxkIGNvbWUgaW4gaGFuZHkgdG8gc2VhcmNoIGZvciBpbnN0YW5jZXMgb2YgYGlvbWFwX3dyaXRlX2JlZ2luYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM3OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExODMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMDo1OS41MDEwMjEyMDNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDcyMjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvbWFwX3dyaXRlX2JlZ2luXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2lvbWFwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9pb21hcC9idWZmZXJlZC1pby5jPTg2Mj1pb21hcF93cml0ZV9mYWlsZWQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuKVxcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy04NzQtXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzo4NzU6c3RhdGljIGludCBfX2lvbWFwX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtODc2LVxcdFxcdGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZV9vcHMgKndyaXRlX29wcywgc2l6ZV90IGxlbixcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MTAwND1zdGF0aWMgbG9mZl90IGlvbWFwX3RyaW1fZm9saW9fcmFuZ2Uoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTEwMTgtXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxMDE5OnN0YXRpYyBpbnQgaW9tYXBfd3JpdGVfYmVnaW5faW5saW5lKGNvbnN0IHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTAyMC1cXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xMDMyLSAqL1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTAzMzpzdGF0aWMgaW50IGlvbWFwX3dyaXRlX2JlZ2luKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTAzNC1cXHRcXHRjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGVfb3BzICp3cml0ZV9vcHMsIHN0cnVjdCBmb2xpbyAqKmZvbGlvcCxcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTEwMS1cXHRpZiAoc3JjbWFwLVxcdTAwM2V0eXBlID09IElPTUFQX0lOTElORSlcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjExMDI6XFx0XFx0c3RhdHVzID0gaW9tYXBfd3JpdGVfYmVnaW5faW5saW5lKGl0ZXIsIGZvbGlvKTtcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTExMDMtXFx0ZWxzZSBpZiAoc3JjbWFwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPTUFQX0ZfQlVGRkVSX0hFQUQpXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTExMDUtXFx0ZWxzZVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTEwNjpcXHRcXHRzdGF0dXMgPSBfX2lvbWFwX3dyaXRlX2JlZ2luKGl0ZXIsIHdyaXRlX29wcywgbGVuLCBmb2xpbyk7XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xMTA3LVxcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0xMTg4PXN0YXRpYyBpbnQgaW9tYXBfd3JpdGVfaXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvdl9pdGVyICppLFxcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xMjMxLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTIzMjpcXHRcXHRzdGF0dXMgPSBpb21hcF93cml0ZV9iZWdpbihpdGVyLCB3cml0ZV9vcHMsIFxcdTAwMjZmb2xpbywgXFx1MDAyNm9mZnNldCxcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTEyMzMtXFx0XFx0XFx0XFx0XFx1MDAyNmJ5dGVzKTtcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MTU3MT1zdGF0aWMgaW50IGlvbWFwX3Vuc2hhcmVfaXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTU4Ni1cXHRcXHRieXRlcyA9IG1pbl90KHU2NCwgU0laRV9NQVgsIGJ5dGVzKTtcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjE1ODc6XFx0XFx0c3RhdHVzID0gaW9tYXBfd3JpdGVfYmVnaW4oaXRlciwgd3JpdGVfb3BzLCBcXHUwMDI2Zm9saW8sIFxcdTAwMjZvZmZzZXQsXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNTg4LVxcdFxcdFxcdFxcdFxcdTAwMjZieXRlcyk7XFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTE2NDg9c3RhdGljIGludCBpb21hcF96ZXJvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIGJvb2wgKmRpZF96ZXJvLFxcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNjYyLVxcdFxcdGJ5dGVzID0gbWluX3QodTY0LCBTSVpFX01BWCwgYnl0ZXMpO1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTY2MzpcXHRcXHRzdGF0dXMgPSBpb21hcF93cml0ZV9iZWdpbihpdGVyLCB3cml0ZV9vcHMsIFxcdTAwMjZmb2xpbywgXFx1MDAyNm9mZnNldCxcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE2NjQtXFx0XFx0XFx0XFx0XFx1MDAyNmJ5dGVzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTA6NTkuNTQ1NDk5NDIxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0ODQ5OTM1NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIEJ1ZmZlcmVkIEkvTyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyBgX19pb21hcF93cml0ZV9iZWdpbmAgd29ya3MsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYnVmZmVyZWQgSS9PLiBTbywgbGV0J3MgaGVhZCBvdmVyIHRvIGBmcy9pb21hcC9idWZmZXJlZC1pby5jYC4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgbG9naWMgZm9yIG1hbmFnaW5nIHRob3NlIHdyaXRlIG9wZXJhdGlvbnMuIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGl0J3MgY29vcmRpbmF0aW5nIHRoaW5ncywgaG93IGl0IGhhbmRsZXMgdGhlIGluaXRpYWwgc2V0dXAsIGFuZCB3aGF0IHRoZSBrZXkgY29uc2lkZXJhdGlvbnMgYXJlIGZvciBwZXJmb3JtYW5jZSBhbmQgZGF0YSBpbnRlZ3JpdHkuIEknbSBlc3BlY2lhbGx5IGN1cmlvdXMgYWJvdXQgYW55IHJlY2VudCBjaGFuZ2VzIG9yIHBvdGVudGlhbCBnb3RjaGFzIHRoYXQgbWlnaHQgYmUgbHVya2luZyBpbiB0aGVyZS4gSXQncyB0aW1lIHRvIGdldCBoYW5kcy1vbiBhbmQgdHJhY2UgdGhyb3VnaCB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMjEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMTowMy4wMzA0OTYzNDFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTI1NTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9faW9tYXBfd3JpdGVfYmVnaW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaW9tYXAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9ODYyPWlvbWFwX3dyaXRlX2ZhaWxlZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4pXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTg3NC1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjg3NTpzdGF0aWMgaW50IF9faW9tYXBfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy04NzYtXFx0XFx0Y29uc3Qgc3RydWN0IGlvbWFwX3dyaXRlX29wcyAqd3JpdGVfb3BzLCBzaXplX3QgbGVuLFxcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0xMDMzPXN0YXRpYyBpbnQgaW9tYXBfd3JpdGVfYmVnaW4oc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTExMDUtXFx0ZWxzZVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTEwNjpcXHRcXHRzdGF0dXMgPSBfX2lvbWFwX3dyaXRlX2JlZ2luKGl0ZXIsIHdyaXRlX29wcywgbGVuLCBmb2xpbyk7XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xMTA3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMTowMy4wNzQwMjc2MloiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjA3MzkwMjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoZSBjb2RlLCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb24sIGFuZCB0YWlsb3JlZCBmb3IgYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIGBfX2lvbWFwX3dyaXRlX2JlZ2luYCoqXG5cbkFscmlnaHQsIGxldCdzIHB1bGwgdXAgYF9faW9tYXBfd3JpdGVfYmVnaW5gLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIGlzbid0IGl0PyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHdyaXRlIHBhdGggYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgSS9PIG1hcC4gU3BlY2lmaWNhbGx5LCBJJ20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBpbml0aWFsIHNldHVwIGJlZm9yZSB0aGUgYWN0dWFsIHdyaXRlIGhhcHBlbnMgLSB0aGluZ3MgbGlrZSBlbnN1cmluZyB0aGUgcmVsZXZhbnQgYmxvY2tzIGFyZSBhbGxvY2F0ZWQsIHNldHRpbmcgdXAgYW55IG5lY2Vzc2FyeSBtZXRhZGF0YSwgYW5kIG1ha2luZyBzdXJlIHRoZSB3cml0ZSBvcGVyYXRpb24gY2FuIHByb2NlZWQgc2FmZWx5LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBoYW5kbGVzIHRoaW5ncyBsaWtlIGV4dGVudCBhbGxvY2F0aW9uLCB3aGV0aGVyIGl0IGRlYWxzIHdpdGggYW55IHByZS1hbGxvY2F0aW9uIHN0cmF0ZWdpZXMgdG8gbWluaW1pemUgZnJhZ21lbnRhdGlvbiwgYW5kIGhvdyBpdCBsb2NrcyBhbmQgc3luY2hyb25pemVzIHdpdGggb3RoZXIgY29uY3VycmVudCBvcGVyYXRpb25zLiBJJ20gYWxzbyBjdXJpb3VzIGFib3V0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBibG9jayBkZXZpY2UgYW5kIGFueSBwb3RlbnRpYWwgY2FjaGluZyBsYXllcnMuIEknbGwgbmVlZCB0byBkaXNzZWN0IGl0cyBlcnJvciBoYW5kbGluZyBhbmQgaG93IGl0IGVuc3VyZXMgYXRvbWljaXR5IGluIHRoZSBmYWNlIG9mIHBvc3NpYmxlIGludGVycnVwdGlvbnMuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhlcmUgd2lsbCBiZSBzZXZlcmFsIGVkZ2UgY2FzZXMgYW5kIG9wdGltaXphdGlvbnMgYXQgcGxheSBoZXJlIHRvIGVuc3VyZSBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHkuIExldCdzIHNlZSBob3cgdGhleSB0YWNrbGVkIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjcxNywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjExOjA3LjY4MTQyMDMxMloiLCJTZXEiOjE2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzg4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NzUsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODc1OlxcdHN0YXRpYyBpbnQgX19pb21hcF93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcXG4gODc2OlxcdFxcdFxcdGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZV9vcHMgKndyaXRlX29wcywgc2l6ZV90IGxlbixcXG4gODc3OlxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIDg3ODpcXHR7XFxuIDg3OTpcXHRcXHRzdHJ1Y3QgaW9tYXBfZm9saW9fc3RhdGUgKmlmcztcXG4gODgwOlxcdFxcdGxvZmZfdCBwb3MgPSBpdGVyLVxcdTAwM2Vwb3M7XFxuIDg4MTpcXHRcXHRsb2ZmX3QgYmxvY2tfc2l6ZSA9IGlfYmxvY2tzaXplKGl0ZXItXFx1MDAzZWlub2RlKTtcXG4gODgyOlxcdFxcdGxvZmZfdCBibG9ja19zdGFydCA9IHJvdW5kX2Rvd24ocG9zLCBibG9ja19zaXplKTtcXG4gODgzOlxcdFxcdGxvZmZfdCBibG9ja19lbmQgPSByb3VuZF91cChwb3MgKyBsZW4sIGJsb2NrX3NpemUpO1xcbiA4ODQ6XFx0XFx0dW5zaWduZWQgaW50IG5yX2Jsb2NrcyA9IGlfYmxvY2tzX3Blcl9mb2xpbyhpdGVyLVxcdTAwM2Vpbm9kZSwgZm9saW8pO1xcbiA4ODU6XFx0XFx0c2l6ZV90IGZyb20gPSBvZmZzZXRfaW5fZm9saW8oZm9saW8sIHBvcyksIHRvID0gZnJvbSArIGxlbjtcXG4gODg2OlxcdFxcdHNpemVfdCBwb2ZmLCBwbGVuO1xcbiA4ODc6XFx0XFxuIDg4ODpcXHRcXHQvKlxcbiA4ODk6XFx0XFx0ICogSWYgdGhlIHdyaXRlIG9yIHplcm9pbmcgY29tcGxldGVseSBvdmVybGFwcyB0aGUgY3VycmVudCBmb2xpbywgdGhlblxcbiA4OTA6XFx0XFx0ICogZW50aXJlIGZvbGlvIHdpbGwgYmUgZGlydGllZCBzbyB0aGVyZSBpcyBubyBuZWVkIGZvclxcbiA4OTE6XFx0XFx0ICogcGVyLWJsb2NrIHN0YXRlIHRyYWNraW5nIHN0cnVjdHVyZXMgdG8gYmUgYXR0YWNoZWQgdG8gdGhpcyBmb2xpby5cXG4gODkyOlxcdFxcdCAqIEZvciB0aGUgdW5zaGFyZSBjYXNlLCB3ZSBtdXN0IHJlYWQgaW4gdGhlIG9uZGlzayBjb250ZW50cyBiZWNhdXNlIHdlXFxuIDg5MzpcXHRcXHQgKiBhcmUgbm90IGNoYW5naW5nIHBhZ2VjYWNoZSBjb250ZW50cy5cXG4gODk0OlxcdFxcdCAqL1xcbiA4OTU6XFx0XFx0aWYgKCEoaXRlci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT01BUF9VTlNIQVJFKSBcXHUwMDI2XFx1MDAyNiBwb3MgXFx1MDAzYz0gZm9saW9fcG9zKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbiA4OTY6XFx0XFx0ICAgIHBvcyArIGxlbiBcXHUwMDNlPSBmb2xpb19uZXh0X3Bvcyhmb2xpbykpXFxuIDg5NzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gODk4OlxcdFxcbiA4OTk6XFx0XFx0aWZzID0gaWZzX2FsbG9jKGl0ZXItXFx1MDAzZWlub2RlLCBmb2xpbywgaXRlci1cXHUwMDNlZmxhZ3MpO1xcbiA5MDA6XFx0XFx0aWYgKChpdGVyLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPTUFQX05PV0FJVCkgXFx1MDAyNlxcdTAwMjYgIWlmcyBcXHUwMDI2XFx1MDAyNiBucl9ibG9ja3MgXFx1MDAzZSAxKVxcbiA5MDE6XFx0XFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuIDkwMjpcXHRcXG4gOTAzOlxcdFxcdGlmIChmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSlcXG4gOTA0OlxcdFxcdFxcdHJldHVybiAwO1xcbiA5MDU6XFx0XFxuIDkwNjpcXHRcXHRkbyB7XFxuIDkwNzpcXHRcXHRcXHRpb21hcF9hZGp1c3RfcmVhZF9yYW5nZShpdGVyLVxcdTAwM2Vpbm9kZSwgZm9saW8sIFxcdTAwMjZibG9ja19zdGFydCxcXG4gOTA4OlxcdFxcdFxcdFxcdFxcdGJsb2NrX2VuZCAtIGJsb2NrX3N0YXJ0LCBcXHUwMDI2cG9mZiwgXFx1MDAyNnBsZW4pO1xcbiA5MDk6XFx0XFx0XFx0aWYgKHBsZW4gPT0gMClcXG4gOTEwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA5MTE6XFx0XFxuIDkxMjpcXHRcXHRcXHQvKlxcbiA5MTM6XFx0XFx0XFx0ICogSWYgdGhlIHJlYWQgcmFuZ2Ugd2lsbCBiZSBlbnRpcmVseSBvdmVyd3JpdHRlbiBieSB0aGUgd3JpdGUsXFxuIDkxNDpcXHRcXHRcXHQgKiB3ZSBjYW4gc2tpcCBoYXZpbmcgdG8gemVyby9yZWFkIGl0IGluLlxcbiA5MTU6XFx0XFx0XFx0ICovXFxuIDkxNjpcXHRcXHRcXHRpZiAoIShpdGVyLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPTUFQX1VOU0hBUkUpIFxcdTAwMjZcXHUwMDI2IGZyb20gXFx1MDAzYz0gcG9mZiBcXHUwMDI2XFx1MDAyNlxcbiA5MTc6XFx0XFx0XFx0ICAgIHRvIFxcdTAwM2U9IHBvZmYgKyBwbGVuKVxcbiA5MTg6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDkxOTpcXHRcXG4gOTIwOlxcdFxcdFxcdGlmIChpb21hcF9ibG9ja19uZWVkc196ZXJvaW5nKGl0ZXIsIGJsb2NrX3N0YXJ0KSkge1xcbiA5MjE6XFx0XFx0XFx0XFx0aWYgKFdBUk5fT05fT05DRShpdGVyLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPTUFQX1VOU0hBUkUpKVxcbiA5MjI6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIDkyMzpcXHRcXHRcXHRcXHRmb2xpb196ZXJvX3NlZ21lbnRzKGZvbGlvLCBwb2ZmLCBmcm9tLCB0bywgcG9mZiArIHBsZW4pO1xcbiA5MjQ6XFx0XFx0XFx0fSBlbHNlIHtcXG4gOTI1OlxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBpb21hcCAqaW9tYXAgPSBpb21hcF9pdGVyX3NyY21hcChpdGVyKTtcXG4gOTI2OlxcdFxcdFxcdFxcdGludCBzdGF0dXM7XFxuIDkyNzpcXHRcXG4gOTI4OlxcdFxcdFxcdFxcdGlmIChpdGVyLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPTUFQX05PV0FJVClcXG4gOTI5OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbiA5MzA6XFx0XFxuIDkzMTpcXHRcXHRcXHRcXHRpZiAod3JpdGVfb3BzIFxcdTAwMjZcXHUwMDI2IHdyaXRlX29wcy1cXHUwMDNlcmVhZF9mb2xpb19yYW5nZSlcXG4gOTMyOlxcdFxcdFxcdFxcdFxcdHN0YXR1cyA9IHdyaXRlX29wcy1cXHUwMDNlcmVhZF9mb2xpb19yYW5nZShpdGVyLFxcbiA5MzM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0Zm9saW8sIGJsb2NrX3N0YXJ0LCBwbGVuKTtcXG4gOTM0OlxcdFxcdFxcdFxcdGVsc2VcXG4gOTM1OlxcdFxcdFxcdFxcdFxcdHN0YXR1cyA9IGlvbWFwX2Jpb19yZWFkX2ZvbGlvX3JhbmdlX3N5bmMoaXRlcixcXG4gOTM2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGZvbGlvLCBibG9ja19zdGFydCwgcGxlbik7XFxuIDkzNzpcXHRcXHRcXHRcXHRpZiAoc3RhdHVzIFxcdTAwM2MgMClcXG4gOTM4OlxcdFxcdFxcdFxcdFxcdGZzZXJyb3JfcmVwb3J0X2lvKGl0ZXItXFx1MDAzZWlub2RlLFxcbiA5Mzk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBGU0VSUl9CVUZGRVJFRF9SRUFELCBwb3MsXFxuIDk0MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHBsZW4sIHN0YXR1cywgR0ZQX05PRlMpO1xcbiA5NDE6XFx0XFx0XFx0XFx0aWYgKHN0YXR1cylcXG4gOTQyOlxcdFxcdFxcdFxcdFxcdHJldHVybiBzdGF0dXM7XFxuIDk0MzpcXHRcXG4gOTQ0OlxcdFxcdFxcdFxcdGlmIChpb21hcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT01BUF9GX1pFUk9fVEFJTClcXG4gOTQ1OlxcdFxcdFxcdFxcdFxcdGZvbGlvX3plcm9fc2VnbWVudChmb2xpbywgdG8sIHBvZmYgKyBwbGVuKTtcXG4gOTQ2OlxcdFxcdFxcdH1cXG4gOTQ3OlxcdFxcdFxcdGlvbWFwX3NldF9yYW5nZV91cHRvZGF0ZShmb2xpbywgcG9mZiwgcGxlbik7XFxuIDk0ODpcXHRcXHR9IHdoaWxlICgoYmxvY2tfc3RhcnQgKz0gcGxlbikgXFx1MDAzYyBibG9ja19lbmQpO1xcbiA5NDk6XFx0XFxuIDk1MDpcXHRcXHRyZXR1cm4gMDtcXG4gOTUxOlxcdH1cXG4gOTUyOlxcdFxcbiA5NTM6XFx0c3RhdGljIHN0cnVjdCBmb2xpbyAqX19pb21hcF9nZXRfZm9saW8oc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXFxuIDk1NDpcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGVfb3BzICp3cml0ZV9vcHMsIHNpemVfdCBsZW4pXFxuIDk1NTpcXHR7XFxuIDk1NjpcXHRcXHRsb2ZmX3QgcG9zID0gaXRlci1cXHUwMDNlcG9zO1xcbiA5NTc6XFx0XFxuIDk1ODpcXHRcXHRpZiAoIW1hcHBpbmdfbGFyZ2VfZm9saW9fc3VwcG9ydChpdGVyLVxcdTAwM2Vpbm9kZS1cXHUwMDNlaV9tYXBwaW5nKSlcXG4gOTU5OlxcdFxcdFxcdGxlbiA9IG1pbl90KHNpemVfdCwgbGVuLCBQQUdFX1NJWkUgLSBvZmZzZXRfaW5fcGFnZShwb3MpKTtcXG4gOTYwOlxcdFxcbiA5NjE6XFx0XFx0aWYgKGl0ZXItXFx1MDAzZWlvbWFwLmZsYWdzIFxcdTAwMjYgSU9NQVBfRl9GT0xJT19CQVRDSCkge1xcbiA5NjI6XFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGZvbGlvX2JhdGNoX25leHQoaXRlci1cXHUwMDNlZmJhdGNoKTtcXG4gOTYzOlxcdFxcbiA5NjQ6XFx0XFx0XFx0aWYgKCFmb2xpbylcXG4gOTY1OlxcdFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA5NjY6XFx0XFxuIDk2NzpcXHRcXHRcXHQvKlxcbiA5Njg6XFx0XFx0XFx0ICogVGhlIGZvbGlvIG1hcHBpbmcgZ2VuZXJhbGx5IHNob3VsZG4ndCBoYXZlIGNoYW5nZWQgYmFzZWQgb25cXG4gOTY5OlxcdFxcdFxcdCAqIGZzIGxvY2tzLCBidXQgYmUgY29uc2lzdGVudCB3aXRoIGZpbGVtYXAgbG9va3VwIGFuZCByZXRyeVxcbiA5NzA6XFx0XFx0XFx0ICogdGhlIGl0ZXIgaWYgaXQgZG9lcy5cXG4gOTcxOlxcdFxcdFxcdCAqL1xcbiA5NzI6XFx0XFx0XFx0Zm9saW9fbG9jayhmb2xpbyk7XFxuIDk3MzpcXHRcXHRcXHRpZiAodW5saWtlbHkoZm9saW8tXFx1MDAzZW1hcHBpbmcgIT0gaXRlci1cXHUwMDNlaW5vZGUtXFx1MDAzZWlfbWFwcGluZykpIHtcXG4gOTc0OlxcdFxcdFxcdFxcdGl0ZXItXFx1MDAzZWlvbWFwLmZsYWdzIHw9IElPTUFQX0ZfU1RBTEU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjExOjA3LjY4MTYwMDQ0MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjgyNzAxODQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgX19pb21hcF93cml0ZV9iZWdpbmAgYW5kIFplcm9pbmcgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBfX2lvbWFwX3dyaXRlX2JlZ2luYCBmdW5jdGlvbiBhbmQgSSBzZWUgdGhpcyBjcnVjaWFsIGNoZWNrOiBgaW9tYXBfYmxvY2tfbmVlZHNfemVyb2luZ2AuIElmIHRoYXQgcmV0dXJucyB0cnVlLCB0aGVuIHdlIGNhbGwgYGZvbGlvX3plcm9fc2VnbWVudHNgLiBNeSBpbml0aWFsIHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgZm9saW9femVyb19zZWdtZW50c2AgaXMgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIHVud3JpdHRlbiBwYXJ0cyBvZiB0aGUgYmxvY2sgYXJlIHplcm9lZCBvdXQgYmVmb3JlIHdlIHdyaXRlIG91ciBuZXcgZGF0YS4gSXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgemVyb2luZyBiZWZvcmUgYGZyb21gIGFuZCBhZnRlciBgdG9gLCBzaW1wbGUgZW5vdWdoLlxuXG5XYWl0IGEgbWludXRlLCBteSBleHBlcnQgaW50dWl0aW9uIGlzIHRpbmdsaW5nLiBXaGF0IGhhcHBlbnMgaWYgdGhpcyBpc24ndCBhICpuZXcqIGJsb2NrIGFsbG9jYXRpb24gYnV0IHJhdGhlciBhbiAqb3ZlcndyaXRlKj8gSWYgd2UncmUgb3ZlcndyaXRpbmcgZXhpc3RpbmcgZGF0YSwgZG9lcyBgaW9tYXBfYmxvY2tfbmVlZHNfemVyb2luZ2AgKnN0aWxsKiByZXR1cm4gdHJ1ZT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25kaXRpb25zIHdoZW4gYGlvbWFwX2Jsb2NrX25lZWRzX3plcm9pbmdgIHJldHVybnMgdHJ1ZS4gU3BlY2lmaWNhbGx5LCBJIGtub3cgdGhhdCB3aGVuIHRoZSBgSU9NQVBfRl9ORVdgIGZsYWcgaXMgc2V0LCBpdCB3aWxsIHJldHVybiB0cnVlLCBidXQgd2hhdCBhYm91dCBvdGhlciBzY2VuYXJpb3M/IFRoaXMgaXMgZXNzZW50aWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIGltcGFjdCBvZiB0aGlzIGZ1bmN0aW9uLCBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgZnJvbSB6ZXJvaW5nIGFscmVhZHkgYWxsb2NhdGVkIGRhdGEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Njk3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTE6MTIuOTY0MzA0ODg1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODI4ODgyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb21hcF9ibG9ja19uZWVkc196ZXJvaW5nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2lvbWFwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9pb21hcC9idWZmZXJlZC1pby5jPTMxOD1zdGF0aWMgdm9pZCBpb21hcF9hZGp1c3RfcmVhZF9yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0zODEtXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzozODI6c3RhdGljIGlubGluZSBib29sIGlvbWFwX2Jsb2NrX25lZWRzX3plcm9pbmcoY29uc3Qgc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0zODMtXFx0XFx0bG9mZl90IHBvcylcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9NTU3PXN0YXRpYyBpbnQgaW9tYXBfcmVhZF9mb2xpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy02MDktXFx0XFx0XFx0aW9tYXBfc2V0X3JhbmdlX3VwdG9kYXRlKGZvbGlvLCBwb2ZmLCBwbGVuKTtcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjYxMDpcXHRcXHR9IGVsc2UgaWYgKGlvbWFwX2Jsb2NrX25lZWRzX3plcm9pbmcoaXRlciwgcG9zKSkge1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtNjExLVxcdFxcdFxcdC8qIHplcm8gcG9zdC1lb2YgYmxvY2tzIGFzIHRoZSBwYWdlIG1heSBiZSBtYXBwZWQgKi9cXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9ODc1PXN0YXRpYyBpbnQgX19pb21hcF93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtOTE5LVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6OTIwOlxcdFxcdGlmIChpb21hcF9ibG9ja19uZWVkc196ZXJvaW5nKGl0ZXIsIGJsb2NrX3N0YXJ0KSkge1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtOTIxLVxcdFxcdFxcdGlmIChXQVJOX09OX09OQ0UoaXRlci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT01BUF9VTlNIQVJFKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTE6MTMuMDEyNTk4NjAyWiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NDQxMDgzNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byBgaW9tYXBfYmxvY2tfbmVlZHNfemVyb2luZ2AuIEhlcmUncyB3aGF0IEknbSB0aGlua2luZzpcblxuKipBbmFseXppbmcgYGlvbWFwX2Jsb2NrX25lZWRzX3plcm9pbmdgKipcblxuQWxyaWdodCwgSSdtIHB1bGxpbmcgdXAgdGhlIGNvZGUgZm9yIGBpb21hcF9ibG9ja19uZWVkc196ZXJvaW5nYC4gR2l2ZW4gdGhlIG5hbWUsIEknbSBpbW1lZGlhdGVseSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgYSBzcGVjaWZpYyBibG9jayBuZWVkcyB0byBiZSBleHBsaWNpdGx5IHplcm9lZCBvdXQgYmVmb3JlIGJlaW5nIHdyaXR0ZW4gdG8uIFRoaXMgbGlrZWx5IHJlbGF0ZXMgdG8gaG93IHdlIGhhbmRsZSBzcGFyc2UgZmlsZXMsIGRpcmVjdCBJL08sIGFuZCBwZXJoYXBzIGV2ZW4gdGhpbmdzIGxpa2UgY29weS1vbi13cml0ZSBtZWNoYW5pc21zLCBvciBtYXliZSBldmVuIHNlY3VyaXR5IGNvbmNlcm5zIGFyb3VuZCByZXNpZHVhbCBkYXRhLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGdvaW5nIHRvIGNoZWNrIHRoZSBibG9jayBtYXBwaW5nIHdpdGhpbiB0aGUgSS9PIGNvbnRleHQgYW5kIHRoZSBmaWxlJ3MgbWV0YWRhdGEgdG8gbWFrZSB0aGlzIGRldGVybWluYXRpb24uIEl04oCZcyBnb3QgdG8gY29uc2lkZXIgaWYgdGhlIGJsb2NrIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQgKGxpa2UgYnkgYSBwcmV2aW91cyB3cml0ZSksIG9yIGlmIGl0J3MgYSBcImhvbGVcIiBpbiB0aGUgZmlsZS4gSSBhbHNvIHdvbmRlciBpZiBpdCBmYWN0b3JzIGluIGFueSB1c2VyLXN1cHBsaWVkIGZsYWdzIG9yIGhpbnRzIHByb3ZpZGVkIGR1cmluZyB0aGUgSS9PIG9wZXJhdGlvbiBpdHNlbGYuIEknbGwgbmVlZCB0byBsb29rIGF0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBibG9jayBkZXZpY2UgYW5kIHRoZSBmaWxlc3lzdGVtJ3MgYWxsb2NhdGlvbiBzdHJhdGVneSB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4gTXkgZXhwZXJ0aXNlIGluIHRoaXMgYXJlYSBpcyBzdWNoIHRoYXQgSSB3b3VsZCBndWVzcyB0aGUgdW5kZXJseWluZyBsb2dpYyBpcyB0byBhdm9pZCB1bm5lY2Vzc2FyeSBJL08sIGFuZCB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgYW5kIHNlY3VyaXR5LCBidXQgSSBuZWVkIHRvIHNlZSB0aGUgZGV0YWlscyBvZiBob3cgaXQgYWxsIHdvcmtzLiBJ4oCZbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgY2hlY2tzIGZvciB3aGV0aGVyIHRoZSBibG9jayBpcyBtYXBwZWQsIHdoZXRoZXIgdGhlIGZpbGUgaXMgc3BhcnNlLCBvciBwZXJoYXBzIHdoZXRoZXIgdGhlcmUncyBzb21lIHNwZWNpYWwgZmlsZXN5c3RlbSBmZWF0dXJlIGF0IHBsYXkuIFVuZGVyc3RhbmRpbmcgdGhlIG51YW5jZXMgb2YgdGhpcyBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSBrZXkgdG8gb3B0aW1pemluZyBJL08gaW4gdGhpcyBjb250ZXh0LiBMZXQncyBzZWUgaG93IGl0J3MgaW1wbGVtZW50ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjE3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTE6MTcuOTU2NzA5MjdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzgyLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzgyOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBpb21hcF9ibG9ja19uZWVkc196ZXJvaW5nKGNvbnN0IHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxcbiAzODM6XFx0XFx0XFx0bG9mZl90IHBvcylcXG4gMzg0OlxcdHtcXG4gMzg1OlxcdFxcdGNvbnN0IHN0cnVjdCBpb21hcCAqc3JjbWFwID0gaW9tYXBfaXRlcl9zcmNtYXAoaXRlcik7XFxuIDM4NjpcXHRcXG4gMzg3OlxcdFxcdC8qXFxuIDM4ODpcXHRcXHQgKiBJZiB0aGlzIGJsb2NrIGhhcyBub3QgYmVlbiB3cml0dGVuLCB0aGVyZSdzIG5vdGhpbmcgdG8gcmVhZFxcbiAzODk6XFx0XFx0ICovXFxuIDM5MDpcXHRcXHRpZiAoc3JjbWFwLVxcdTAwM2V0eXBlICE9IElPTUFQX01BUFBFRClcXG4gMzkxOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiAzOTI6XFx0XFxuIDM5MzpcXHRcXHQvKlxcbiAzOTQ6XFx0XFx0ICogTmV3bHkgYWxsb2NhdGVkIGJsb2NrcyBoYXZlIG5vdCBiZWVuIHdyaXR0ZW5cXG4gMzk1OlxcdFxcdCAqL1xcbiAzOTY6XFx0XFx0aWYgKHNyY21hcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT01BUF9GX05FVylcXG4gMzk3OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiAzOTg6XFx0XFxuIDM5OTpcXHRcXHQvKlxcbiA0MDA6XFx0XFx0ICogZnN2ZXJpdHkgbWV0YWRhdGEgaXMgc3RvcmVkIHBhc3QgaV9zaXplLCB3ZSBuZWVkIHRvIHJlYWQgaXQgaW5zdGVhZFxcbiA0MDE6XFx0XFx0ICogb2YgemVyb2luZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMToxNy45NTY4Njc1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1OTAwOTcwNTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgUmVhZHMgaW4gTWluaXggU3ltbGluayBIYW5kbGluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW5pdGlhbCBjb25jZXJuIHdhcyBjZW50ZXJlZCBhcm91bmQgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggc3ltbGlua3MgaW4gdGhlIE1pbml4IGZpbGVzeXN0ZW0uIFRoZSBrZXkgb2JzZXJ2YXRpb24gaXMgdGhhdCB3aGVuIGEgbmV3IGJsb2NrIGlzIGFsbG9jYXRlZCwgYElPTUFQX0ZfTkVXYCBpcyBzZXQsIGFuZCB0aGUgYmxvY2sgaXMgemVyb2VkLiBUaGlzIGlzIGltcG9ydGFudC5cblxuTm93LCBsZXQncyBjb25zaWRlciB0aGUgc3ltbGluayBjYXNlLiBJIGhhZCBhIGh5cG90aGVzaXMgd2hlcmUgYSBzeW1saW5rIGJlaW5nIHdyaXR0ZW4gb3ZlciBhbiBleGlzdGluZyBibG9jayBtaWdodCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBkYXRhLiBIb3dldmVyLCB0aGUgY29kZSBmbG93IGluIGBtaW5peF9zeW1saW5rYCBhbmQgc3Vic2VxdWVudCBjYWxscyB0byBgaW9tYXBfc3ltbGlua193cml0ZWAgbnVsbGlmaWVkIHRoYXQgY29uY2Vybi4gVGhlIHN5bWxpbmsgcHJvY2VzcyBhbGxvY2F0ZXMgYSBuZXcgaW5vZGUgd2l0aCBzaXplIHplcm8gYW5kIHRoZW4gdXNlcyBgaW9tYXBfc3ltbGlua193cml0ZWAgdG8gd3JpdGUgdGhlIHN5bWxpbmsgdGFyZ2V0LiBDcnVjaWFsbHksIHRoZSB0YXJnZXQgaXRzZWxmIGlzIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZywgYW5kIGBpb21hcF9zeW1saW5rX3dyaXRlYCBvbmx5IHdyaXRlcyB1cCB0byBgc3RybGVuKHN5bW5hbWUpYCBieXRlcyBmcm9tIHRoZSB0YXJnZXQuIFRoZSBibG9jayBpcyB6ZXJvZWQgYXMgYSBzaWRlIGVmZmVjdC4gVGhlcmVmb3JlLCBubyB1bmluaXRpYWxpemVkIGRhdGEgaXMgd3JpdHRlbiB0byB0aGUgZGlzay5cblxuVGhlIGZvY3VzIHRoZW4gc2hpZnRlZCB0byBob3cgYSBzeW1saW5rIGlzIHJlYWQuIFRoYXQgcGF0aCBsZWQgbWUgdG8gdGhlIGBwYWdlX2dldF9saW5rYCBmdW5jdGlvbiwgd2hpY2gsIGFzIGEgc3ltbGluayBoYW5kbGVyLCBwdWxscyBmcm9tIHRoZSBwYWdlIGNhY2hlLiBJcyB0aGF0IGZ1bmN0aW9uIGRlc2lnbmVkIHRvIGhhbmRsZSBhIG51bGwtdGVybWluYXRlZCBzdHJpbmc/IFRoaXMgaXMgd2hlcmUgdGhlIGlzc3VlIG1pZ2h0IGJlLiBCdXQsIHRoZSBleGlzdGluZyB3cml0ZSBwYXRoIHplcm8tZmlsbHMgdGhlIHJlc3Qgb2YgdGhlIHBhZ2UuIFNvLCBpZiB0aGUgbGluayBpcyBzaG9ydGVyIHRoYW4gdGhlIHBhZ2Ugc2l6ZSwgaXQgd2lsbCBzdGlsbCBhcHBlYXIgbnVsbC10ZXJtaW5hdGVkLiBUaGlzIGluZGljYXRlcyB0aGF0IGl0J3Mgc2FmZS5cblxuTGV0J3MgbG9vayBhdCB0aGUgb3RoZXIgY29kZSBwYXRocyBsaWtlIHRoZSBgbWluaXhfZmlsZV93cml0ZV9pdGVyYCwgYG1pbml4X3dyaXRlcGFnZXNgLCBgbWluaXhfcmVhZF9mb2xpb2AsIGFuZCBgbWluaXhfcmVhZGFoZWFkYCBmdW5jdGlvbnMgdG8gdmVyaWZ5IHRoYXQgYW55IHJlbWFpbmluZyByZWFkLXJlbGF0ZWQgaXNzdWVzIGFyZSBoYW5kbGVkIGJ5IHRoZSBzdGFuZGFyZCBwcm9jZWR1cmVzLCBzdWNoIGFzIGJ1ZmZlciBhbmQgd3JpdGViYWNrIGZsb3dzLCBvciBieSB1c2VyLXNwYWNlIGlucHV0IHZhbGlkYXRpb24uIFRoZXNlIGFyZSBnZW5lcmljIEkvTyBwYXRocywgYW5kIGRhdGEgY29tZXMgZnJvbSBlaXRoZXIgdGhlIHVzZXIgc3BhY2Ugb3IgYmxvY2sgbGF5ZXIsIGFuZCBpbiBlaXRoZXIgY2FzZSwgdGhlIGRhdGEgc2hvdWxkIGJlIHNhZmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzE2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU3NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjExOjMzLjg1Nzg0MTQ0N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc4MDEyMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZV9nZXRfbGlua1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvOXAvdmZzX2lub2RlX2RvdGwuYz05MjA9djlmc192ZnNfZ2V0X2xpbmtfZG90bChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jLTkyNy1cXHRpZiAodjlzZXMtXFx1MDAzZWNhY2hlIFxcdTAwMjYgKENBQ0hFX01FVEF8Q0FDSEVfTE9PU0UpKVxcbmZzLzlwL3Zmc19pbm9kZV9kb3RsLmM6OTI4OlxcdFxcdHJldHVybiBwYWdlX2dldF9saW5rKGRlbnRyeSwgaW5vZGUsIGRvbmUpO1xcbmZzLzlwL3Zmc19pbm9kZV9kb3RsLmMtOTI5LVxcbi0tXFxuZnMvYWZmcy9zeW1saW5rLmM9NzI9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYWZmc19zeW1saW5rX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuZnMvYWZmcy9zeW1saW5rLmM6NzM6XFx0LmdldF9saW5rXFx0PSBwYWdlX2dldF9saW5rLFxcbmZzL2FmZnMvc3ltbGluay5jLTc0LVxcdC5zZXRhdHRyXFx0PSBhZmZzX3NldGF0dHIsXFxuLS1cXG5mcy9idHJmcy9pbm9kZS5jPTEwODE1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBidHJmc19zeW1saW5rX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuZnMvYnRyZnMvaW5vZGUuYzoxMDgxNjpcXHQuZ2V0X2xpbmtcXHQ9IHBhZ2VfZ2V0X2xpbmssXFxuZnMvYnRyZnMvaW5vZGUuYy0xMDgxNy1cXHQuZ2V0YXR0clxcdD0gYnRyZnNfZ2V0YXR0cixcXG4tLVxcbmZzL2NvZGEvY25vZGUuYz0yMD1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY29kYV9zeW1saW5rX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuZnMvY29kYS9jbm9kZS5jOjIxOlxcdC5nZXRfbGlua1xcdD0gcGFnZV9nZXRfbGluayxcXG5mcy9jb2RhL2Nub2RlLmMtMjItXFx0LnNldGF0dHJcXHQ9IGNvZGFfc2V0YXR0cixcXG4tLVxcbmZzL2Vyb2ZzL2lub2RlLmM9Mzg3PWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGVyb2ZzX3N5bWxpbmtfaW9wcyA9IHtcXG5mcy9lcm9mcy9pbm9kZS5jOjM4ODpcXHQuZ2V0X2xpbmsgPSBwYWdlX2dldF9saW5rLFxcbmZzL2Vyb2ZzL2lub2RlLmMtMzg5LVxcdC5nZXRhdHRyID0gZXJvZnNfZ2V0YXR0cixcXG4tLVxcbmZzL2V4dDIvc3ltbGluay5jPTI0PWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGV4dDJfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0ge1xcbmZzL2V4dDIvc3ltbGluay5jOjI1OlxcdC5nZXRfbGlua1xcdD0gcGFnZV9nZXRfbGluayxcXG5mcy9leHQyL3N5bWxpbmsuYy0yNi1cXHQuZ2V0YXR0clxcdD0gZXh0Ml9nZXRhdHRyLFxcbi0tXFxuZnMvZjJmcy9uYW1laS5jPTYzND1zdGF0aWMgY29uc3QgY2hhciAqZjJmc19nZXRfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9mMmZzL25hbWVpLmMtNjM3LXtcXG5mcy9mMmZzL25hbWVpLmM6NjM4OlxcdGNvbnN0IGNoYXIgKmxpbmsgPSBwYWdlX2dldF9saW5rKGRlbnRyeSwgaW5vZGUsIGRvbmUpO1xcbmZzL2YyZnMvbmFtZWkuYy02MzktXFxuLS1cXG5mcy9mdXNlL2Rpci5jPTE4NTQ9c3RhdGljIGNvbnN0IGNoYXIgKmZ1c2VfZ2V0X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZnVzZS9kaXIuYy0xODY1LVxcdGlmIChmYy1cXHUwMDNlY2FjaGVfc3ltbGlua3MpXFxuZnMvZnVzZS9kaXIuYzoxODY2OlxcdFxcdHJldHVybiBwYWdlX2dldF9saW5rX3JhdyhkZW50cnksIGlub2RlLCBjYWxsYmFjayk7XFxuZnMvZnVzZS9kaXIuYy0xODY3LVxcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jPTQ0ND1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgaGZzcGx1c19zeW1saW5rX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuZnMvaGZzcGx1cy9pbm9kZS5jOjQ0NTpcXHQuZ2V0X2xpbmtcXHQ9IHBhZ2VfZ2V0X2xpbmssXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTQ0Ni1cXHQuc2V0YXR0clxcdD0gaGZzcGx1c19zZXRhdHRyLFxcbi0tXFxuZnMvamZzL3N5bWxpbmsuYz0xNz1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBqZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0ge1xcbmZzL2pmcy9zeW1saW5rLmM6MTg6XFx0LmdldF9saW5rXFx0PSBwYWdlX2dldF9saW5rLFxcbmZzL2pmcy9zeW1saW5rLmMtMTktXFx0LnNldGF0dHJcXHQ9IGpmc19zZXRhdHRyLFxcbi0tXFxuZnMvbWluaXgvaW5vZGUuYz01Njk9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG5mcy9taW5peC9pbm9kZS5jOjU3MDpcXHQuZ2V0X2xpbmtcXHQ9IHBhZ2VfZ2V0X2xpbmssXFxuZnMvbWluaXgvaW5vZGUuYy01NzEtXFx0LmdldGF0dHJcXHQ9IG1pbml4X2dldGF0dHIsXFxuLS1cXG5mcy9uYW1laS5jPTY0NTI9RVhQT1JUX1NZTUJPTCh2ZnNfZ2V0X2xpbmspO1xcbi0tXFxuZnMvbmFtZWkuYy02NDU0LS8qIGdldCB0aGUgbGluayBjb250ZW50cyBpbnRvIHBhZ2VjYWNoZSAqL1xcbmZzL25hbWVpLmM6NjQ1NTpzdGF0aWMgY2hhciAqX19wYWdlX2dldF9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcXG5mcy9uYW1laS5jLTY0NTYtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGVsYXllZF9jYWxsICpjYWxsYmFjaylcXG4tLVxcbmZzL25hbWVpLmMtNjQ3OC1cXG5mcy9uYW1laS5jOjY0Nzk6Y29uc3QgY2hhciAqcGFnZV9nZXRfbGlua19yYXcoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbmZzL25hbWVpLmMtNjQ4MC1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGVsYXllZF9jYWxsICpjYWxsYmFjaylcXG5mcy9uYW1laS5jLTY0ODEte1xcbmZzL25hbWVpLmM6NjQ4MjpcXHRyZXR1cm4gX19wYWdlX2dldF9saW5rKGRlbnRyeSwgaW5vZGUsIGNhbGxiYWNrKTtcXG5mcy9uYW1laS5jLTY0ODMtfVxcbmZzL25hbWVpLmM6NjQ4NDpFWFBPUlRfU1lNQk9MX0dQTChwYWdlX2dldF9saW5rX3Jhdyk7XFxuZnMvbmFtZWkuYy02NDg1LVxcbmZzL25hbWVpLmMtNjQ4Ni0vKipcXG5mcy9uYW1laS5jOjY0ODc6ICogcGFnZV9nZXRfbGluaygpIC0gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIGdldF9saW5rIGlub2RlX29wZXJhdGlvbi5cXG5mcy9uYW1laS5jLTY0ODgtICogQGRlbnRyeTogVGhlIGRpcmVjdG9yeSBlbnRyeSB3aGljaCBpcyB0aGUgc3ltbGluay5cXG4tLVxcbmZzL25hbWVpLmMtNjQ5Ni0gKi9cXG5mcy9uYW1laS5jOjY0OTc6Y29uc3QgY2hhciAqcGFnZV9nZXRfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvbmFtZWkuYy02NDk4LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBkZWxheWVkX2NhbGwgKmNhbGxiYWNrKVxcbmZzL25hbWVpLmMtNjQ5OS17XFxuZnMvbmFtZWkuYzo2NTAwOlxcdGNoYXIgKmthZGRyID0gX19wYWdlX2dldF9saW5rKGRlbnRyeSwgaW5vZGUsIGNhbGxiYWNrKTtcXG5mcy9uYW1laS5jLTY1MDEtXFxuLS1cXG5mcy9uYW1laS5jLTY1MDUtfVxcbmZzL25hbWVpLmM6NjUwNjpFWFBPUlRfU1lNQk9MKHBhZ2VfZ2V0X2xpbmspO1xcbmZzL25hbWVpLmMtNjUwNy1cXG4tLVxcbmZzL25hbWVpLmMtNjUxMS0gKlxcbmZzL25hbWVpLmM6NjUxMjogKiBUaGlzIGlzIHVzZWQgaW50ZXJuYWxseSBieSBwYWdlX2dldF9saW5rKCkuICBJdCBpcyBleHBvcnRlZCBmb3IgdXNlXFxuZnMvbmFtZWkuYzo2NTEzOiAqIGJ5IGZpbGVzeXN0ZW1zIHdoaWNoIG5lZWQgdG8gaW1wbGVtZW50IGEgdmFyaWFudCBvZiBwYWdlX2dldF9saW5rKClcXG5mcy9uYW1laS5jLTY1MTQtICogdGhlbXNlbHZlcy4gIERlc3BpdGUgdGhlIGFwcGFyZW50IHN5bW1ldHJ5LCBmaWxlc3lzdGVtcyB3aGljaCB1c2VcXG5mcy9uYW1laS5jOjY1MTU6ICogcGFnZV9nZXRfbGluaygpIGRvIG5vdCBuZWVkIHRvIGNhbGwgcGFnZV9wdXRfbGluaygpLlxcbmZzL25hbWVpLmMtNjUxNi0gKlxcbi0tXFxuZnMvbmFtZWkuYz02NTI4PWludCBwYWdlX3JlYWRsaW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwgaW50IGJ1ZmxlbilcXG4tLVxcbmZzL25hbWVpLmMtNjUzMy1cXHRERUZJTkVfREVMQVlFRF9DQUxMKGRvbmUpO1xcbmZzL25hbWVpLmM6NjUzNDpcXHRsaW5rID0gcGFnZV9nZXRfbGluayhkZW50cnksIGRfaW5vZGUoZGVudHJ5KSwgXFx1MDAyNmRvbmUpO1xcbmZzL25hbWVpLmMtNjUzNS1cXHRyZXMgPSBQVFJfRVJSKGxpbmspO1xcbi0tXFxuZnMvbmFtZWkuYz02NTc4PWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHBhZ2Vfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0ge1xcbmZzL25hbWVpLmM6NjU3OTpcXHQuZ2V0X2xpbmtcXHQ9IHBhZ2VfZ2V0X2xpbmssXFxuZnMvbmFtZWkuYy02NTgwLX07XFxuLS1cXG5mcy9uaWxmczIvbmFtZWkuYz01ODQ9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbmlsZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0ge1xcbmZzL25pbGZzMi9uYW1laS5jOjU4NTpcXHQuZ2V0X2xpbmtcXHQ9IHBhZ2VfZ2V0X2xpbmssXFxuZnMvbmlsZnMyL25hbWVpLmMtNTg2LVxcdC5wZXJtaXNzaW9uICAgICA9IG5pbGZzX3Blcm1pc3Npb24sXFxuLS1cXG5mcy9vY2ZzMi9zeW1saW5rLmM9ODQ9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgb2NmczJfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0ge1xcbmZzL29jZnMyL3N5bWxpbmsuYzo4NTpcXHQuZ2V0X2xpbmtcXHQ9IHBhZ2VfZ2V0X2xpbmssXFxuZnMvb2NmczIvc3ltbGluay5jLTg2LVxcdC5nZXRhdHRyXFx0PSBvY2ZzMl9nZXRhdHRyLFxcbi0tXFxuZnMvc3F1YXNoZnMvc3ltbGluay5jPTEwNT1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBzcXVhc2hmc19zeW1saW5rX2lub2RlX29wcyA9IHtcXG5mcy9zcXVhc2hmcy9zeW1saW5rLmM6MTA2OlxcdC5nZXRfbGluayA9IHBhZ2VfZ2V0X2xpbmssXFxuZnMvc3F1YXNoZnMvc3ltbGluay5jLTEwNy1cXHQubGlzdHhhdHRyID0gc3F1YXNoZnNfbGlzdHhhdHRyXFxuLS1cXG5mcy91ZGYvc3ltbGluay5jPTE2OD1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB1ZGZfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0ge1xcbmZzL3VkZi9zeW1saW5rLmM6MTY5OlxcdC5nZXRfbGlua1xcdD0gcGFnZV9nZXRfbGluayxcXG5mcy91ZGYvc3ltbGluay5jLTE3MC1cXHQuZ2V0YXR0clxcdD0gdWRmX3N5bWxpbmtfZ2V0YXR0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTE6MzMuOTM1NjQ4MjYzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NzA2NDc2ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwncyBOYW1lIFJlc29sdXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhvc2UgZmlsZSBwYXRoIGxvb2t1cHMuIEknbSBnb2luZyB0byBzdGFydCBieSByZWFkaW5nIHRoZSBgX19wYWdlX2dldF9saW5rYCBmdW5jdGlvbiwgd2hpY2ggcmVzaWRlcyBpbiBgZnMvbmFtZWkuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIG9yIGF0IGxlYXN0IGEgY3J1Y2lhbCBwYXJ0IG9mIHRoZSBtYWdpYywgaW4gbGlua2luZyBhIGZpbGUgbmFtZSB0byBpdHMgYXNzb2NpYXRlZCBpbm9kZS4gSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIGludm9sdmVkIGluIG5hdmlnYXRpbmcgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUsIGxpa2VseSBkZWFsaW5nIHdpdGggaG93IGRpcmVjdG9yeSBlbnRyaWVzIGFyZSBhY2Nlc3NlZCBhbmQgcG90ZW50aWFsbHkgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSB1bmRlcmx5aW5nIHBhZ2UgY2FjaGUuIEkgaW1hZ2luZSB0aGVyZSBpcyBzb21lIGludGVyYWN0aW9uIHdpdGggdGhlIGJ1ZmZlciBjYWNoZSB0b28sIGJ1dCBJJ2xsIHNlZSB3aGVuIEkgcmVhZCBpdC4gTGV0J3Mgc2VlIGhvdyBpdCBnZXRzIGV4ZWN1dGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDY0NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjExOjM3LjYwNjI5OTQzNloiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODA4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvbmFtZWkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NDU1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2NDU1OlxcdHN0YXRpYyBjaGFyICpfX3BhZ2VfZ2V0X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbjY0NTY6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGVsYXllZF9jYWxsICpjYWxsYmFjaylcXG42NDU3OlxcdHtcXG42NDU4OlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuNjQ1OTpcXHRcXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLVxcdTAwM2VpX21hcHBpbmc7XFxuNjQ2MDpcXHRcXG42NDYxOlxcdFxcdGlmICghZGVudHJ5KSB7XFxuNjQ2MjpcXHRcXHRcXHRmb2xpbyA9IGZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIDApO1xcbjY0NjM6XFx0XFx0XFx0aWYgKElTX0VSUihmb2xpbykpXFxuNjQ2NDpcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUNISUxEKTtcXG42NDY1OlxcdFxcdFxcdGlmICghZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpIHtcXG42NDY2OlxcdFxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuNjQ2NzpcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUNISUxEKTtcXG42NDY4OlxcdFxcdFxcdH1cXG42NDY5OlxcdFxcdH0gZWxzZSB7XFxuNjQ3MDpcXHRcXHRcXHRmb2xpbyA9IHJlYWRfbWFwcGluZ19mb2xpbyhtYXBwaW5nLCAwLCBOVUxMKTtcXG42NDcxOlxcdFxcdFxcdGlmIChJU19FUlIoZm9saW8pKVxcbjY0NzI6XFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9DQVNUKGZvbGlvKTtcXG42NDczOlxcdFxcdH1cXG42NDc0OlxcdFxcdHNldF9kZWxheWVkX2NhbGwoY2FsbGJhY2ssIHBhZ2VfcHV0X2xpbmssIGZvbGlvKTtcXG42NDc1OlxcdFxcdEJVR19PTihtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpIFxcdTAwMjYgX19HRlBfSElHSE1FTSk7XFxuNjQ3NjpcXHRcXHRyZXR1cm4gZm9saW9fYWRkcmVzcyhmb2xpbyk7XFxuNjQ3NzpcXHR9XFxuNjQ3ODpcXHRcXG42NDc5OlxcdGNvbnN0IGNoYXIgKnBhZ2VfZ2V0X2xpbmtfcmF3KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcXG42NDgwOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBkZWxheWVkX2NhbGwgKmNhbGxiYWNrKVxcbjY0ODE6XFx0e1xcbjY0ODI6XFx0XFx0cmV0dXJuIF9fcGFnZV9nZXRfbGluayhkZW50cnksIGlub2RlLCBjYWxsYmFjayk7XFxuNjQ4MzpcXHR9XFxuNjQ4NDpcXHRFWFBPUlRfU1lNQk9MX0dQTChwYWdlX2dldF9saW5rX3Jhdyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjExOjM3LjYwNjg4NDYzNloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTQwMTU4ODczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOlxuXG4qKkRlY29uc3RydWN0aW5nIGBwYWdlX2dldF9saW5rYCBhbmQgRm9saW8gQWRkcmVzc2luZyoqXG5cbkFscmlnaHQsIEknbSBsb29raW5nIGF0IHRoaXMgYF9fcGFnZV9nZXRfbGlua2AgZnVuY3Rpb24gYW5kIGl0J3Mgc3BpdHRpbmcgYmFjayBgZm9saW9fYWRkcmVzcyhmb2xpbylgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBqdXN0IGdpdmluZyB1cyB0aGUgYWRkcmVzcyBhc3NvY2lhdGVkIHdpdGggdGhlIGZvbGlvLiBCdXQgaG9sZCBvbiBhIHNlY29uZC4uLiBpcyBgcGFnZV9nZXRfbGlua2AgYWN0dWFsbHkgKmV4cGVjdGluZyogdGhhdCByZXR1cm5lZCBsaW5rIHRvIGJlIG51bGwtdGVybWluYXRlZD8gVGhhdCBmZWVscyBsaWtlIGEgcG90ZW50aWFsIGdvdGNoYSBJIG5lZWQgdG8gY29uZmlybS4gSXQgbWlnaHQgbm90IGJlIGV4cGxpY2l0bHkgc3RhdGVkLCBzbyBJIG5lZWQgdG8gZ28gYmFjayBhbmQgZXhhbWluZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHBhZ2VfZ2V0X2xpbmtgIGl0c2VsZi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB2ZXJpZnkgaWYgaXQncyByZWx5aW5nIG9uIGEgbnVsbCB0ZXJtaW5hdGlvbiBvciBoYW5kbGluZyBhIGxlbmd0aCBpbiBzb21lIG90aGVyIHdheS4gTGV0J3MgZGlnIGludG8gdGhlIGNvZGUgYW5kIGNsYXJpZnkgdGhpcyBjcnVjaWFsIHBvaW50IHRvIGF2b2lkIGFueSBzdWJ0bGUgbWVtb3J5IGlzc3VlcyBvciBwb3RlbnRpYWwgYnVncyBkb3duIHRoZSBsaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTM0NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTE6NDEuNzQ3MDQ3NTg5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9uYW1laS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY0ODYsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY0ODY6XFx0LyoqXFxuNjQ4NzpcXHQgKiBwYWdlX2dldF9saW5rKCkgLSBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZ2V0X2xpbmsgaW5vZGVfb3BlcmF0aW9uLlxcbjY0ODg6XFx0ICogQGRlbnRyeTogVGhlIGRpcmVjdG9yeSBlbnRyeSB3aGljaCBpcyB0aGUgc3ltbGluay5cXG42NDg5OlxcdCAqIEBpbm9kZTogVGhlIGlub2RlIGZvciB0aGUgc3ltbGluay5cXG42NDkwOlxcdCAqIEBjYWxsYmFjazogVXNlZCB0byBkcm9wIHRoZSByZWZlcmVuY2UgdG8gdGhlIHN5bWxpbmsuXFxuNjQ5MTpcXHQgKlxcbjY0OTI6XFx0ICogRmlsZXN5c3RlbXMgd2hpY2ggc3RvcmUgdGhlaXIgc3ltbGlua3MgaW4gdGhlIHBhZ2UgY2FjaGUgc2hvdWxkIHVzZVxcbjY0OTM6XFx0ICogdGhpcyB0byBpbXBsZW1lbnQgdGhlIGdldF9saW5rKCkgbWVtYmVyIG9mIHRoZWlyIGlub2RlX29wZXJhdGlvbnMuXFxuNjQ5NDpcXHQgKlxcbjY0OTU6XFx0ICogUmV0dXJuOiBBIHBvaW50ZXIgdG8gdGhlIE5VTC10ZXJtaW5hdGVkIHN5bWxpbmsuXFxuNjQ5NjpcXHQgKi9cXG42NDk3OlxcdGNvbnN0IGNoYXIgKnBhZ2VfZ2V0X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbjY0OTg6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGRlbGF5ZWRfY2FsbCAqY2FsbGJhY2spXFxuNjQ5OTpcXHR7XFxuNjUwMDpcXHRcXHRjaGFyICprYWRkciA9IF9fcGFnZV9nZXRfbGluayhkZW50cnksIGlub2RlLCBjYWxsYmFjayk7XFxuNjUwMTpcXHRcXG42NTAyOlxcdFxcdGlmICghSVNfRVJSKGthZGRyKSlcXG42NTAzOlxcdFxcdFxcdG5kX3Rlcm1pbmF0ZV9saW5rKGthZGRyLCBpbm9kZS1cXHUwMDNlaV9zaXplLCBQQUdFX1NJWkUgLSAxKTtcXG42NTA0OlxcdFxcdHJldHVybiBrYWRkcjtcXG42NTA1OlxcdH1cXG42NTA2OlxcdEVYUE9SVF9TWU1CT0wocGFnZV9nZXRfbGluayk7XFxuNjUwNzpcXHRcXG42NTA4OlxcdC8qKlxcbjY1MDk6XFx0ICogcGFnZV9wdXRfbGluaygpIC0gRHJvcCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBzeW1saW5rLlxcbjY1MTA6XFx0ICogQGFyZzogVGhlIGZvbGlvIHdoaWNoIGNvbnRhaW5zIHRoZSBzeW1saW5rLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMTo0MS43NDcyODQ0ODlaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY4NDkxMDE4NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgTWluaXggRmlsZXN5c3RlbSBJT01BUCBDb252ZXJzaW9uIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBjb252ZXJ0aW5nIHRoZSBNaW5peCBmaWxlc3lzdGVtIHRvIHVzZSBpb21hcCBhbmQgbXkgcHJpbWFyeSBjb25jZXJuIGlzIHdoZXRoZXIgaXQgaW50cm9kdWNlcyBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3Igd3JpdHRlbi4gRmlyc3QsIEkgc2VlIGBwYWdlX2dldF9saW5rYCBjYWxscyBgbmRfdGVybWluYXRlX2xpbmtgLiBgbmRfdGVybWluYXRlX2xpbmtgIHNob3VsZCBudWxsLXRlcm1pbmF0ZSB0aGUgYnVmZmVyLCBhbmQgdGhhdCBwYXJ0IHNlZW1zIGNvcnJlY3QuIEluIGBtaW5peF9zeW1saW5rYCwgYWZ0ZXIgd3JpdGluZyB0aGUgc3ltbGluayBkYXRhIHRvIGRpc2ssIGBpbm9kZS1cdTAwM2VpX3NpemVgIGlzIHNldCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBzeW1saW5rIHRhcmdldC4gYG5kX3Rlcm1pbmF0ZV9saW5rYCB0aGVuIGVuc3VyZXMgdGhlIG51bGwgdGVybWluYXRvciBpcyBpbiBwbGFjZSwgZWl0aGVyIGZyb20gdGhlIGluaXRpYWwgd3JpdGUgb3IgZnJvbSBgcGFnZV9nZXRfbGlua2AsIHNvIHRoYXQgc2VlbXMgc2FmZS5cblxuTm93LCBpZiBgbWluaXhfc3ltbGlua2AgZmFpbHMgYWZ0ZXIgd3JpdGluZywgaXQgY2xlYW5zIHVwIGFuZCBjYWxscyBgaXB1dGAsIGV0Yy4gLSBhbGwgZ29vZCB0aGVyZS4gYGlgIGlzIHNldCB0byBgc3RybGVuKHN5bW5hbWUpICsgMWAgdG8gYWNjb21tb2RhdGUgZm9yIHRoZSBudWxsIHRlcm1pbmF0b3IuIFRoZSBpbXBvcnRhbnQgcGFydCBpcyB0aGF0IGBpIC0gMWAgaXMgdXNlZCBhcyB0aGUgd3JpdGUgbGVuZ3RoLiBJdCB3cml0ZXMgZXhhY3RseSBgc3RybGVuKHN5bW5hbWUpYCBieXRlcy4gVGhhdCdzIGEgZ29vZCBjaGVjay5cblxuSSdtIG5vdyBsb29raW5nIGF0IHRoZSBicm9hZGVyIGNoYW5nZXMsIGxpa2UgYG1pbml4X3dyaXRlcGFnZXNgIHVzaW5nIGBpb21hcF93cml0ZXBhZ2VzYC4gSXQgYWxzbyBoYXMgYXNzb2NpYXRlZCBjYWxscyB0byBgaW9tYXBfYmlvX3JlYWRfZm9saW9gLCBgaW9tYXBfYmlvX3JlYWRhaGVhZGAsIGBpb21hcF9kaXJ0eV9mb2xpb2AsIGBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvYCwgYW5kIG1vcmUuIGBtaW5peF9pb21hcF9iZWdpbmAgaXMgYWxzbyBhZGRlZC4gSXQgbG9va3MgbGlrZSBgSU9NQVBfRl9ORVdgIGlzIHVzZWQsIHNvIHVud3JpdHRlbiBwYXJ0cyBvZiB0aGUgYmxvY2sgd2lsbCBiZSB6ZXJvZWQsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJJ2QgZXhwZWN0LiBUaGUga2V5IGhlcmUgaXMsIGlmIGBJT01BUF9XUklURWAgaXNuJ3Qgc2V0LCB0aGVuIHRoZSByZXN1bHQgd2lsbCBiZSBhIGhvbGUgYW5kIHRoZSBgaW9tYXBfYmlvX3JlYWRfZm9saW9gIHNob3VsZCBoYW5kbGUgdGhlIHplcm9pbmcgb2YgYSByZWFkIGZyb20gYSBob2xlLiBTbyByZWFkaW5nIGFuIHVuYWxsb2NhdGVkIGJsb2NrIGdldHMgemVyb2VzLlxuXG5OZXh0IHVwLCBgbWluaXhfd3JpdGViYWNrX3JhbmdlYCBsb29rcyBmaW5lIGFzIGl0IGZhbGxzIGJhY2sgdG8gYSBub3JtYWwgd3JpdGViYWNrIHNjZW5hcmlvLiBJbiB0aGUgY2FzZSBvZiBgaW9tYXBfc3ltbGlua193cml0ZWAsIHRoZSBgc3ltbmFtZWAgaXRzZWxmIGlzIGluaXRpYWxpemVkIGZyb20gVkZTIGFuZCB0aHVzIGl0IGlzIHNhZmUuIGBpb21hcF9zeW1saW5rX3dyaXRlYCB3cml0ZXMgYGkgLSAxYCBieXRlcyBhbmQgaSBpcyBgc3RybGVuKHN5bW5hbWUpICsgMWAuIFRoaXMgc2VlbXMgdmVyeSB1bmxpa2VseSB0byByZXN1bHQgaW4gdW5pbml0aWFsaXplZCByZWFkcy5cblxuRm9yIGBtaW5peF9maWxlX3dyaXRlX2l0ZXJgLCB0aGUgY29kZSB1c2VzIGBpb3ZfaXRlciAqZnJvbWAsIHdoaWNoIGNvbWVzIGZyb20gdXNlcnNwYWNlLCBzbyBpZiB0aGUgdXNlciBoYW5kcyBvdmVyIGdhcmJhZ2UsIEtNU0FOIHdpbGwgY2F0Y2ggaXQgYmVmb3JlIHRoZSBmaWxlc3lzdGVtIGdldHMgaXQuIE5vIGlzc3VlcyB0aGVyZS5cblxuTm93LCBJJ20gZXhhbWluaW5nIHRoZSBvdGhlciBjb2RlIGNoYW5nZXMuIFRoZSBjaGFuZ2UgdXNlcyBgaW9tYXBfdHJ1bmNhdGVfcGFnZWAgdG8gemVybyB0aGUgdGFpbCBvZiB0aGUgcGFnZSwgd2hpY2ggaXMgZ29vZC4gVGhpcyBhdm9pZHMgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgZHVyaW5nIGxhdGVyIGV4dGVuc2lvbnMuIEkgc2VlIGBtaW5peF9zZXRhdHRyYCBhbmQgdGhlIHJlbGV2YW50IGNhbGxzIHRvIGB0cnVuY2F0ZV9zZXRzaXplYC4gVGhlIGZhY3QgdGhhdCBgbWluaXhfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zYCBub3cgaW5jbHVkZXMgYC5zZXRhdHRyID0gbWluaXhfc2V0YXR0cmAgaXMgaW50ZXJlc3RpbmcuIElzIHRoaXMgbmVlZGVkIGZvciB0cnVuY2F0aW9uIG9mIHN5bWxpbmtzPyBMaWtlbHkuIFRoaXMgYWdhaW4gZG9lc24ndCBzZWVtIGxpa2UgaXQgZXhwb3NlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cblRoZSBgbWluaXhfaW9tYXBfYmVnaW5gIGZ1bmN0aW9uIGFwcGVhcnMgdG8gaGFuZGxlIGluaXRpYWxpemF0aW9uIGFuZCBpbmRpcmVjdCBibG9ja3MgaW4gYSBzYWZlIG1hbm5lciwgdXNpbmcgdGhlIGZhbWlsaWFyIGBnZXRfYmxvY2tgIG1ldGhvZG9sb2d5IHRoYXQncyBiZWVuIHJldmlld2VkLiBUaGVyZSBpcyBhIGBibG9ja190b19wYXRoYCBhbmQgYGdldF9icmFuY2hgIHRoYXQgaGFuZGxlcyBpbml0aWFsaXphdGlvbiwgbGlrZSB0aGUgb2xkIGNvZGUuIFN0aWxsIG5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuXG5cbkknbSBnb2luZyB0aHJvdWdoIGBpb21hcF9zeW1saW5rX3dyaXRlYC4gSSBjYW4gc2VlIHRoYXQgdGhpcyB1c2VzIHN0YWNrIHZhcmlhYmxlcywgYW5kIGBpb3ZfaXRlcl9rdmVjYCBpbml0aWFsaXplcyB0aGVtLiBTbywgZnVsbHkgaW5pdGlhbGl6ZWQuIE5vIHByb2JsZW1zLiBgbWluaXhfd3JpdGVwYWdlc2AgYWxzbyBpcyBzYWZlIGFzIGl0J3MgY29ycmVjdGx5IGluaXRpYWxpemluZyB0aGUgYHdwY2Agc3RydWN0LiBgbWluaXhfZmlsZV93cml0ZV9pdGVyYCBpcyBzYWZlIHRvby5cblxuT3ZlcmFsbCwgdGhpcyBwYXRjaCBzZWVtcyBsaWtlIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBjb252ZXJzaW9uIHRvIGlvbWFwLiBJdCBkb2Vzbid0IGFwcGVhciB0byBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMuIFRoZSBjb2RlIGlzIGNhcmVmdWxseSBoYW5kbGluZyBhbGxvY2F0aW9ucyBhbmQgcmVhZHMgYW5kIHdyaXRlcyB0byBlbnN1cmUgdGhhdCBtZW1vcnkgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIEtBU0FOIGlzIHN1ZmZpY2llbnQgZm9yIHRoaXMgcGF0Y2ggYXMgaXQgY2F0Y2hlcyBvdXQgb2YgYm91bmRzIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzLiBJIGRvbid0IHNlZSBhbnkgbmVlZCBmb3IgS01TQU4uIFRoZSBjcml0aWNhbCBwYXJ0IGlzIHRvIGRvdWJsZSBjaGVjayBgaW9tYXBfc3ltbGlua193cml0ZWAsIHRvIG1ha2Ugc3VyZSB0aGF0IGl0J3Mgc2FmZSB0byB1c2UgYWNyb3NzIGZpbGVzeXN0ZW1zLiBUaGUgbGVuIHBhcmFtZXRlciBzaG91bGQgYmUgYHN0cmxlbih0YXJnZXQpICsgMWAsIGFuZCBpZiB0aGUgbGVuZ3RoIGlzIGBzdHJsZW4odGFyZ2V0KWAgdGhlIGZpbGUgd2lsbCBiZSB0cnVuY2F0ZWQuIFRoZSBvdGhlciBmaWxlc3lzdGVtcyBhcmUgdGFraW5nIGBsZW5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDUxLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk2OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjEyOjA4LjU5NjM4ODgyNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA0Njk5OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZV9zeW1saW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9iZWZzL2xpbnV4dmZzLmM9Mjk5PXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmJlZnNfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubylcXG4tLVxcbmZzL2JlZnMvbGludXh2ZnMuYy00MDEtXFx0XFx0aWYgKGJlZnNfaW5vLVxcdTAwM2VpX2ZsYWdzIFxcdTAwMjYgQkVGU19MT05HX1NZTUxJTkspIHtcXG5mcy9iZWZzL2xpbnV4dmZzLmM6NDAyOlxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNnBhZ2Vfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xcbmZzL2JlZnMvbGludXh2ZnMuYy00MDMtXFx0XFx0XFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcXG4tLVxcbmZzL2NyYW1mcy9pbm9kZS5jPTkwPXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmdldF9jcmFtZnNfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2NyYW1mcy9pbm9kZS5jLTExNS1cXHRjYXNlIFNfSUZMTks6XFxuZnMvY3JhbWZzL2lub2RlLmM6MTE2OlxcdFxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNnBhZ2Vfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xcbmZzL2NyYW1mcy9pbm9kZS5jLTExNy1cXHRcXHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xcbi0tXFxuZnMvZXh0Mi9uYW1laS5jPTE1NT1zdGF0aWMgaW50IGV4dDJfc3ltbGluayAoc3RydWN0IG1udF9pZG1hcCAqIGlkbWFwLCBzdHJ1Y3QgaW5vZGUgKiBkaXIsXFxuLS1cXG5mcy9leHQyL25hbWVpLmMtMTc5LVxcdFxcdGlub2RlLVxcdTAwM2VpX21hcHBpbmctXFx1MDAzZWFfb3BzID0gXFx1MDAyNmV4dDJfYW9wcztcXG5mcy9leHQyL25hbWVpLmM6MTgwOlxcdFxcdGVyciA9IHBhZ2Vfc3ltbGluayhpbm9kZSwgc3ltbmFtZSwgbCk7XFxuZnMvZXh0Mi9uYW1laS5jLTE4MS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTE0MjM9c3RhdGljIGludCB3cml0ZV9lbmRfZm4oaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy0xNDM4LSAqIFdlIG5lZWQgdG8gcGljayB1cCB0aGUgbmV3IGlub2RlIHNpemUgd2hpY2ggZ2VuZXJpY19jb21taXRfd3JpdGUgZ2F2ZSB1c1xcbmZzL2V4dDQvaW5vZGUuYzoxNDM5OiAqIGBpb2NiYCBjYW4gYmUgTlVMTCAtIGVnLCB3aGVuIGNhbGxlZCBmcm9tIHBhZ2Vfc3ltbGluaygpLlxcbmZzL2V4dDQvaW5vZGUuYy0xNDQwLSAqL1xcbi0tXFxuZnMvZjJmcy9uYW1laS5jPTY0OT1zdGF0aWMgaW50IGYyZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9mMmZzL25hbWVpLmMtNjk0LVxcbmZzL2YyZnMvbmFtZWkuYzo2OTU6XFx0ZXJyID0gcGFnZV9zeW1saW5rKGlub2RlLCBkaXNrX2xpbmsubmFtZSwgZGlza19saW5rLmxlbik7XFxuZnMvZjJmcy9uYW1laS5jLTY5Ni1cXG4tLVxcbmZzL2hmc3BsdXMvZGlyLmM9NDYzPXN0YXRpYyBpbnQgaGZzcGx1c19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL2hmc3BsdXMvZGlyLmMtNDc3LVxcbmZzL2hmc3BsdXMvZGlyLmM6NDc4OlxcdHJlcyA9IHBhZ2Vfc3ltbGluayhpbm9kZSwgc3ltbmFtZSwgc3RybGVuKHN5bW5hbWUpICsgMSk7XFxuZnMvaGZzcGx1cy9kaXIuYy00NzktXFx0aWYgKHJlcylcXG4tLVxcbmZzL2hwZnMvaW5vZGUuYz00ND12b2lkIGhwZnNfcmVhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmkpXFxuLS1cXG5mcy9ocGZzL2lub2RlLmMtNzktXFx0XFx0XFx0aS1cXHUwMDNlaV9tb2RlID0gU19JRkxOSyB8IDA3Nzc7XFxuZnMvaHBmcy9pbm9kZS5jOjgwOlxcdFxcdFxcdGktXFx1MDAzZWlfb3AgPSBcXHUwMDI2cGFnZV9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7XFxuZnMvaHBmcy9pbm9kZS5jLTgxLVxcdFxcdFxcdGlub2RlX25vaGlnaG1lbShpKTtcXG4tLVxcbmZzL2hwZnMvbmFtZWkuYz0yOTI9c3RhdGljIGludCBocGZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvaHBmcy9uYW1laS5jLTMzNy1cXHRpbm9kZV9ub2hpZ2htZW0ocmVzdWx0KTtcXG5mcy9ocGZzL25hbWVpLmM6MzM4OlxcdHJlc3VsdC1cXHUwMDNlaV9vcCA9IFxcdTAwMjZwYWdlX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucztcXG5mcy9ocGZzL25hbWVpLmMtMzM5LVxcdHJlc3VsdC1cXHUwMDNlaV9kYXRhLmFfb3BzID0gXFx1MDAyNmhwZnNfc3ltbGlua19hb3BzO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM9ODk0PXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTkzOS1cXHRcXHRjYXNlIFNfSUZMTks6XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTQwOlxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNnBhZ2Vfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk0MS1cXHRcXHRcXHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM9MTAwMT1zdGF0aWMgaW50IGh1Z2V0bGJmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTAxMS1cXHRcXHRpbnQgbCA9IHN0cmxlbihzeW1uYW1lKSsxO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEwMTI6XFx0XFx0ZXJyb3IgPSBwYWdlX3N5bWxpbmsoaW5vZGUsIHN5bW5hbWUsIGwpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwMTMtXFx0XFx0aWYgKCFlcnJvcilcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmM9MTI3MD1zdGF0aWMgaW50IGlzb2ZzX3JlYWRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHJlbG9jYXRlZClcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtMTQ0NS1cXHR9IGVsc2UgaWYgKFNfSVNMTksoaW5vZGUtXFx1MDAzZWlfbW9kZSkpIHtcXG5mcy9pc29mcy9pbm9kZS5jOjE0NDY6XFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2cGFnZV9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7XFxuZnMvaXNvZnMvaW5vZGUuYy0xNDQ3LVxcdFxcdGlub2RlX25vaGlnaG1lbShpbm9kZSk7XFxuLS1cXG5mcy9qZnMvaW5vZGUuYz0yND1zdHJ1Y3QgaW5vZGUgKmpmc19pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vKVxcbi0tXFxuZnMvamZzL2lub2RlLmMtNDktXFx0XFx0aWYgKGlub2RlLVxcdTAwM2VpX3NpemUgXFx1MDAzZT0gSURBVEFTSVpFKSB7XFxuZnMvamZzL2lub2RlLmM6NTA6XFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2cGFnZV9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7XFxuZnMvamZzL2lub2RlLmMtNTEtXFx0XFx0XFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcXG4tLVxcbmZzL25hbWVpLmM9NjU0MT1FWFBPUlRfU1lNQk9MKHBhZ2VfcmVhZGxpbmspO1xcbmZzL25hbWVpLmMtNjU0Mi1cXG5mcy9uYW1laS5jOjY1NDM6aW50IHBhZ2Vfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpzeW1uYW1lLCBpbnQgbGVuKVxcbmZzL25hbWVpLmMtNjU0NC17XFxuLS1cXG5mcy9uYW1laS5jLTY1NzUtfVxcbmZzL25hbWVpLmM6NjU3NjpFWFBPUlRfU1lNQk9MKHBhZ2Vfc3ltbGluayk7XFxuZnMvbmFtZWkuYy02NTc3LVxcbmZzL25hbWVpLmM6NjU3ODpjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBwYWdlX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG5mcy9uYW1laS5jLTY1NzktXFx0LmdldF9saW5rXFx0PSBwYWdlX2dldF9saW5rLFxcbmZzL25hbWVpLmMtNjU4MC19O1xcbmZzL25hbWVpLmM6NjU4MTpFWFBPUlRfU1lNQk9MKHBhZ2Vfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zKTtcXG4tLVxcbmZzL25pbGZzMi9uYW1laS5jPTE0MT1zdGF0aWMgaW50IG5pbGZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvbmlsZnMyL25hbWVpLmMtMTY4LVxcdGlub2RlLVxcdTAwM2VpX21hcHBpbmctXFx1MDAzZWFfb3BzID0gXFx1MDAyNm5pbGZzX2FvcHM7XFxuZnMvbmlsZnMyL25hbWVpLmM6MTY5OlxcdGVyciA9IHBhZ2Vfc3ltbGluayhpbm9kZSwgc3ltbmFtZSwgbCk7XFxuZnMvbmlsZnMyL25hbWVpLmMtMTcwLVxcdGlmIChlcnIpXFxuLS1cXG5mcy9uaWxmczIvbmFtZWkuYy0xNzMtXFx0LyogbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7ICovXFxuZnMvbmlsZnMyL25hbWVpLmM6MTc0OlxcdC8qIHBhZ2Vfc3ltbGluaygpIGRvIHRoaXMgKi9cXG5mcy9uaWxmczIvbmFtZWkuYy0xNzUtXFxuLS1cXG5mcy9xbng0L2lub2RlLmM9MjgzPXN0cnVjdCBpbm9kZSAqcW54NF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vKVxcbi0tXFxuZnMvcW54NC9pbm9kZS5jLTMzNy1cXHR9IGVsc2UgaWYgKFNfSVNMTksoaW5vZGUtXFx1MDAzZWlfbW9kZSkpIHtcXG5mcy9xbng0L2lub2RlLmM6MzM4OlxcdFxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNnBhZ2Vfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xcbmZzL3FueDQvaW5vZGUuYy0zMzktXFx0XFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcXG4tLVxcbmZzL3FueDYvaW5vZGUuYz01MTE9c3RydWN0IGlub2RlICpxbng2X2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgaW5vKVxcbi0tXFxuZnMvcW54Ni9pbm9kZS5jLTU3MS1cXHR9IGVsc2UgaWYgKFNfSVNMTksoaW5vZGUtXFx1MDAzZWlfbW9kZSkpIHtcXG5mcy9xbng2L2lub2RlLmM6NTcyOlxcdFxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNnBhZ2Vfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xcbmZzL3FueDYvaW5vZGUuYy01NzMtXFx0XFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcXG4tLVxcbmZzL3JhbWZzL2lub2RlLmM9NTc9c3RydWN0IGlub2RlICpyYW1mc19nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL3JhbWZzL2lub2RlLmMtODQtXFx0XFx0Y2FzZSBTX0lGTE5LOlxcbmZzL3JhbWZzL2lub2RlLmM6ODU6XFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2cGFnZV9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7XFxuZnMvcmFtZnMvaW5vZGUuYy04Ni1cXHRcXHRcXHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xcbi0tXFxuZnMvcmFtZnMvaW5vZGUuYz0xMzY9c3RhdGljIGludCByYW1mc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL3JhbWZzL2lub2RlLmMtMTUzLVxcbmZzL3JhbWZzL2lub2RlLmM6MTU0OlxcdFxcdGVycm9yID0gcGFnZV9zeW1saW5rKGlub2RlLCBzeW1uYW1lLCBsKTtcXG5mcy9yYW1mcy9pbm9kZS5jLTE1NS1cXHRcXHRpZiAoIWVycm9yKSB7XFxuLS1cXG5mcy9yb21mcy9zdXBlci5jPTI3Mz1zdGF0aWMgc3RydWN0IGlub2RlICpyb21mc19pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgcG9zKVxcbi0tXFxuZnMvcm9tZnMvc3VwZXIuYy0zNDMtXFx0Y2FzZSBST01GSF9TWU06XFxuZnMvcm9tZnMvc3VwZXIuYzozNDQ6XFx0XFx0aS1cXHUwMDNlaV9vcCA9IFxcdTAwMjZwYWdlX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucztcXG5mcy9yb21mcy9zdXBlci5jLTM0NS1cXHRcXHRpbm9kZV9ub2hpZ2htZW0oaSk7XFxuLS1cXG5mcy91ZnMvaW5vZGUuYz01MjA9c3RhdGljIHZvaWQgdWZzX3NldF9pbm9kZV9vcHMoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL3Vmcy9pbm9kZS5jLTUzNS1cXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLVxcdTAwM2VhX29wcyA9IFxcdTAwMjZ1ZnNfYW9wcztcXG5mcy91ZnMvaW5vZGUuYzo1MzY6XFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2cGFnZV9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7XFxuZnMvdWZzL2lub2RlLmMtNTM3LVxcdFxcdFxcdGlub2RlX25vaGlnaG1lbShpbm9kZSk7XFxuLS1cXG5mcy91ZnMvbmFtZWkuYz0xMDg9c3RhdGljIGludCB1ZnNfc3ltbGluayAoc3RydWN0IG1udF9pZG1hcCAqIGlkbWFwLCBzdHJ1Y3QgaW5vZGUgKiBkaXIsXFxuLS1cXG5mcy91ZnMvbmFtZWkuYy0xMjUtXFx0XFx0Lyogc2xvdyBzeW1saW5rICovXFxuZnMvdWZzL25hbWVpLmM6MTI2OlxcdFxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNnBhZ2Vfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xcbmZzL3Vmcy9uYW1laS5jLTEyNy1cXHRcXHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xcbmZzL3Vmcy9uYW1laS5jLTEyOC1cXHRcXHRpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLVxcdTAwM2VhX29wcyA9IFxcdTAwMjZ1ZnNfYW9wcztcXG5mcy91ZnMvbmFtZWkuYzoxMjk6XFx0XFx0ZXJyID0gcGFnZV9zeW1saW5rKGlub2RlLCBzeW1uYW1lLCBsKTtcXG5mcy91ZnMvbmFtZWkuYy0xMzAtXFx0XFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTI6MDguNjc2ODY3NTcyWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwNzY4OTYyMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTWluaXggRmlsZXN5c3RlbSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZXhhbWluZWQgdGhpcyBwYXRjaCBjb252ZXJ0aW5nIHRoZSBNaW5peCBmaWxlc3lzdGVtIHRvIGBpb21hcGAgYnVmZmVyZWQgSS9PLCBkaXRjaGluZyB0aGUgb2xkIGBidWZmZXJfaGVhZGAtYmFzZWQgYmxvY2sgSS9PLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGBpb21hcF9zeW1saW5rX3dyaXRlYC4gTXkgaW5pdGlhbCBjb25jZXJuLCBhcyBhbHdheXMsIGlzIGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgcG90ZW50aWFsIGxlYWtzLCBhbmQgY29udHJvbCBmbG93IGlzc3VlcyB0aGF0IGNhbiBpbnRyb2R1Y2UgdnVsbmVyYWJpbGl0aWVzLlxuXG5MZXQncyBicmVhayBpdCBkb3duLiBgaW9tYXBfc3ltbGlua193cml0ZWAncyBiZWhhdmlvciBpcyBjb3JyZWN0LiBJIHNhdyB0aGF0IGBwYWdlX3N5bWxpbmtgIGlzIHVzZWQgd2l0aCBhIGxlbmd0aCBvZiBgc3RybGVuKHN5bW5hbWUpICsgMWAsIGluY2x1ZGluZyB0aGUgbnVsbCB0ZXJtaW5hdG9yLCBidXQgYGlvbWFwX3N5bWxpbmtfd3JpdGVgIGNvcnJlY3RseSBzdWJ0cmFjdHMgdGhhdCBvbmUgYnl0ZSwgc28gaXQgd3JpdGVzIHRoZSBhY3R1YWwgbGVuZ3RoIG9mIHRoZSBzeW1saW5rIHRhcmdldC4gSXQncyBwcm9wZXJseSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIGFuZCBmdWxseSBpbml0aWFsaXplZCBieSB0aGUgVkZTLCBzbyBJIGRvbid0IHNlZSBhbiBpbW1lZGlhdGUgaXNzdWUgdGhlcmUuIEknbSBzYXRpc2ZpZWQgdGhhdCB0aGlzIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IGludHJvZHVjZSBhIHZ1bG5lcmFiaWxpdHkgaGVyZS5cblxuVGhlIHBhdGNoIHNlZW1zIHRvIGJlIHNhZmUgd2l0aCB0aGUgYGlvbWFwX3dyaXRlX2JlZ2luYCBmdW5jdGlvbiwgd2hpY2ggemVyb3Mgb3V0IG5ldyBibG9ja3Mgc2luY2UgYElPTUFQX0ZfTkVXYCBpcyBzZXQgZm9yIG5ldyBibG9ja3MsIGVuc3VyaW5nIHRoYXQgcHJldmlvdXNseSB1bndyaXR0ZW4gZGF0YSBpcyBoYW5kbGVkIGNvcnJlY3RseS4gQW5kIHNpbmNlIHRoZSBzeW1saW5rIGlzIGZ1bGx5IGluaXRpYWxpemVkLCBpdCBjYW4gYmUgaGFuZGxlZCBzYWZlbHkuIFRoZSBgcGFnZV9nZXRfbGlua2AgZnVuY3Rpb24gYWRkcyB0aGUgbnVsbCB0ZXJtaW5hdG9yIGluIG1lbW9yeSB1cG9uIHJlYWRpbmcsIHNvIHRoYXQgaXMgZmluZSBhcyB3ZWxsLlxuXG5UaGUgcmVzdCBvZiB0aGUgcGF0Y2ggcmVwbGFjZXMgc3RhbmRhcmQgcmVhZC93cml0ZS93cml0ZWJhY2sgZnVuY3Rpb25zIHdpdGggdGhlaXIgYGlvbWFwYCBjb3VudGVycGFydHMuIFRoaXMgc2VlbXMgdG8gYmUgYSBzdHJhaWdodGZvcndhcmQgc3Vic3RpdHV0aW9uIGFuZCBoYW5kbGVzIHVzZXItc3BhY2UgZGF0YSBhbmQgcGFnZSBjYWNoZSBvcGVyYXRpb25zIGFwcHJvcHJpYXRlbHkuXG5cblNpbmNlIHRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIG5ldyB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciBjb250cm9sIGZsb3cgY2hhbmdlcywgSSdtIGNvbmZpZGVudCB0aGVyZSBhcmUgbm8gbmV3IHZ1bG5lcmFiaWxpdGllcyBoZXJlLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBlcnJvcnMgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgc3BlY2lhbGl6ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzbid0IHdhcnJhbnRlZC4gVGhpcyBwYXRjaCBhcHBlYXJzIHRvIGJlIGEgc2FmZSByZWZhY3RvcmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg4NTcsIk91dHB1dFRva2VucyI6MjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjEyOjE2Ljc1Mzc2Njc1NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29udmVydHMgdGhlIG1pbml4IGZpbGVzeXN0ZW0gdG8gdXNlIGlvbWFwIGZvciBidWZmZXJlZCBJL08sIHJlcGxhY2luZyB0aGUgb2xkZXIgYnVmZmVyX2hlYWQgYmFzZWQgYmxvY2sgSS9PIGZ1bmN0aW9ucy4gSXQgaW50cm9kdWNlcyBgaW9tYXBfc3ltbGlua193cml0ZWAgd2hpY2ggd3JpdGVzIHN5bWxpbmsgdGFyZ2V0cyB0byBkaXNrLiBUaGUgc3ltbGluayB0YXJnZXQgaXMgYSBmdWxseSBpbml0aWFsaXplZCBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIHByb3ZpZGVkIGJ5IHRoZSBWRlMuIFRoZSB1bndyaXR0ZW4gcGFydHMgb2YgdGhlIG5ld2x5IGFsbG9jYXRlZCBibG9jayBhcmUgemVyb2VkIGJ5IGBpb21hcF93cml0ZV9iZWdpbmAgKHNpbmNlIGBJT01BUF9GX05FV2AgaXMgc2V0IGZvciBuZXcgYmxvY2tzKS4gV2hlbiByZWFkaW5nIHRoZSBzeW1saW5rLCBgcGFnZV9nZXRfbGlua2AgYWRkcyB0aGUgbnVsbCB0ZXJtaW5hdG9yIGluIG1lbW9yeS4gVGhlIHJlc3Qgb2YgdGhlIHBhdGNoIHJlcGxhY2VzIHN0YW5kYXJkIHJlYWQvd3JpdGUvd3JpdGViYWNrIGZ1bmN0aW9ucyB3aXRoIHRoZWlyIGlvbWFwIGVxdWl2YWxlbnRzLCB3aGljaCBoYW5kbGUgdXNlciBzcGFjZSBkYXRhIGFuZCBwYWdlIGNhY2hlIGNvcnJlY3RseS4gVGhlcmUgYXJlIG5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgaW5mby1sZWFrcywgb3IgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb252ZXJ0cyB0aGUgbWluaXggZmlsZXN5c3RlbSB0byB1c2UgaW9tYXAgZm9yIGJ1ZmZlcmVkIEkvTywgcmVwbGFjaW5nIHRoZSBvbGRlciBidWZmZXJfaGVhZCBiYXNlZCBibG9jayBJL08gZnVuY3Rpb25zLiBJdCBpbnRyb2R1Y2VzIGBpb21hcF9zeW1saW5rX3dyaXRlYCB3aGljaCB3cml0ZXMgc3ltbGluayB0YXJnZXRzIHRvIGRpc2suIFRoZSBzeW1saW5rIHRhcmdldCBpcyBhIGZ1bGx5IGluaXRpYWxpemVkIG51bGwtdGVybWluYXRlZCBzdHJpbmcgcHJvdmlkZWQgYnkgdGhlIFZGUy4gVGhlIHVud3JpdHRlbiBwYXJ0cyBvZiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJsb2NrIGFyZSB6ZXJvZWQgYnkgYGlvbWFwX3dyaXRlX2JlZ2luYCAoc2luY2UgYElPTUFQX0ZfTkVXYCBpcyBzZXQgZm9yIG5ldyBibG9ja3MpLiBXaGVuIHJlYWRpbmcgdGhlIHN5bWxpbmssIGBwYWdlX2dldF9saW5rYCBhZGRzIHRoZSBudWxsIHRlcm1pbmF0b3IgaW4gbWVtb3J5LiBUaGUgcmVzdCBvZiB0aGUgcGF0Y2ggcmVwbGFjZXMgc3RhbmRhcmQgcmVhZC93cml0ZS93cml0ZWJhY2sgZnVuY3Rpb25zIHdpdGggdGhlaXIgaW9tYXAgZXF1aXZhbGVudHMsIHdoaWNoIGhhbmRsZSB1c2VyIHNwYWNlIGRhdGEgYW5kIHBhZ2UgY2FjaGUgY29ycmVjdGx5LiBUaGVyZSBhcmUgbm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBpbmZvLWxlYWtzLCBvciB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdy4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkb9mz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-26 21:52:26 +0000 UTC FinishedAt: 2026-08-26 22:12:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MINIX_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MINIX_FS" ], "series_id": "cc160969-0ec8-4964-9cad-bfc2f2ac1dbb" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "iomap_symlink_write", "V1_minix_iomap_begin", "V2_minix_iomap_begin", "minix_file_write_iter", "minix_writepages", "minix_read_folio", "minix_readahead", "minix_writeback_range" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01JTklYX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9tYXBfc3ltbGlua193cml0ZSYjMzQ7LAogICAgJiMzNDtWMV9taW5peF9pb21hcF9iZWdpbiYjMzQ7LAogICAgJiMzNDtWMl9taW5peF9pb21hcF9iZWdpbiYjMzQ7LAogICAgJiMzNDttaW5peF9maWxlX3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7bWluaXhfd3JpdGVwYWdlcyYjMzQ7LAogICAgJiMzNDttaW5peF9yZWFkX2ZvbGlvJiMzNDssCiAgICAmIzM0O21pbml4X3JlYWRhaGVhZCYjMzQ7LAogICAgJiMzNDttaW5peF93cml0ZWJhY2tfcmFuZ2UmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb252ZXJ0cyB0aGUgbWluaXggZmlsZXN5c3RlbSB0byB1c2UgaW9tYXAgZm9yIGJ1ZmZlcmVkIEkvTywgcmVwbGFjaW5nIHRoZSBvbGRlciBidWZmZXJfaGVhZCBiYXNlZCBibG9jayBJL08gZnVuY3Rpb25zLiBJdCBpbnRyb2R1Y2VzIGBpb21hcF9zeW1saW5rX3dyaXRlYCB3aGljaCB3cml0ZXMgc3ltbGluayB0YXJnZXRzIHRvIGRpc2suIFRoZSBzeW1saW5rIHRhcmdldCBpcyBhIGZ1bGx5IGluaXRpYWxpemVkIG51bGwtdGVybWluYXRlZCBzdHJpbmcgcHJvdmlkZWQgYnkgdGhlIFZGUy4gVGhlIHVud3JpdHRlbiBwYXJ0cyBvZiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJsb2NrIGFyZSB6ZXJvZWQgYnkgYGlvbWFwX3dyaXRlX2JlZ2luYCAoc2luY2UgYElPTUFQX0ZfTkVXYCBpcyBzZXQgZm9yIG5ldyBibG9ja3MpLiBXaGVuIHJlYWRpbmcgdGhlIHN5bWxpbmssIGBwYWdlX2dldF9saW5rYCBhZGRzIHRoZSBudWxsIHRlcm1pbmF0b3IgaW4gbWVtb3J5LiBUaGUgcmVzdCBvZiB0aGUgcGF0Y2ggcmVwbGFjZXMgc3RhbmRhcmQgcmVhZC93cml0ZS93cml0ZWJhY2sgZnVuY3Rpb25zIHdpdGggdGhlaXIgaW9tYXAgZXF1aXZhbGVudHMsIHdoaWNoIGhhbmRsZSB1c2VyIHNwYWNlIGRhdGEgYW5kIHBhZ2UgY2FjaGUgY29ycmVjdGx5LiBUaGVyZSBhcmUgbm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBpbmZvLWxlYWtzLCBvciB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdy4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtaWdyYXRlcyB0aGUgbWluaXggZmlsZXN5c3RlbSB0byB1c2UgaW9tYXAgZm9yIGJ1ZmZlcmVkIEkvTyBhbmQgc3ltbGlua3MuIFRoaXMgaW52b2x2ZXMgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWluaXggZmlsZSBvcGVyYXRpb25zLCBhZGRyZXNzIHNwYWNlIG9wZXJhdGlvbnMsIGFuZCBibG9jayBtYXBwaW5nIGxvZ2ljLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IG1vdW50aW5nIGEgbWluaXggZmlsZXN5c3RlbSBpbWFnZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjoxMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY5NGM1YTNmZmNlZDczNWY1ODQyZjY3NDYzZGJhZjEyNTE5MTVmZWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAyMjoxMDoxOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9pb21hcC9idWZmZXJlZC1pby5jIGIvZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1xuaW5kZXggMGE1ZWJmZGE5MGYxMi4uNWU4YWMzZmFkNjcxNCAxMDA2NDRcbi0tLSBhL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNcbkBAIC0yMTAwLDMgJiM0MzsyMTAwLDM3IEBAIGlvbWFwX3dyaXRlcGFnZXMoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYylcbiBcdHJldHVybiBlcnJvcjtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfd3JpdGVwYWdlcyk7XG4mIzQzO1xuJiM0MztpbnQgaW9tYXBfc3ltbGlua193cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICp0YXJnZXQsIGludCBsZW4sXG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsXG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGVfb3BzICp3cml0ZV9vcHMsIHZvaWQgKnByaXZhdGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZlYyB2ZWMgPSB7XG4mIzQzO1x0XHQuaW92X2Jhc2VcdD0gKHZvaWQgKil0YXJnZXQsXG4mIzQzO1x0XHQuaW92X2xlblx0PSBsZW4gLSAxLFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IGlvbWFwX2l0ZXIgaXRlciA9IHtcbiYjNDM7XHRcdC5pbm9kZVx0XHQ9IGlub2RlLFxuJiM0MztcdFx0LnBvc1x0XHQ9IDAsXG4mIzQzO1x0XHQubGVuXHRcdD0gbGVuIC0gMSxcbiYjNDM7XHRcdC5mbGFnc1x0XHQ9IElPTUFQX1dSSVRFLFxuJiM0MztcdFx0LnByaXZhdGVcdD0gcHJpdmF0ZSxcbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCBpb3ZfaXRlciBpb3Y7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aW92X2l0ZXJfa3ZlYyhcdTAwMjZpb3YsIElURVJfU09VUkNFLCBcdTAwMjZ2ZWMsIDEsIGxlbiAtIDEpO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoKHJldCA9IGlvbWFwX2l0ZXIoXHUwMDI2aXRlciwgb3BzKSkgXHUwMDNlIDApXG4mIzQzO1x0XHRpdGVyLnN0YXR1cyA9IGlvbWFwX3dyaXRlX2l0ZXIoXHUwMDI2aXRlciwgXHUwMDI2aW92LCB3cml0ZV9vcHMpO1xuJiM0MztcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGl0ZXIucG9zID09IDApKVxuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4mIzQzO1xuJiM0MztcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX3N5bWxpbmtfd3JpdGUpO1xuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2ZpbGUuYyBiL2ZzL21pbml4L2ZpbGUuY1xuaW5kZXggMDJhYWJiZGI1ZGVhYS4uNjc2NWY1NzFiZDNmYyAxMDA2NDRcbi0tLSBhL2ZzL21pbml4L2ZpbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbWluaXgvZmlsZS5jXG5AQCAtMTAsNiAmIzQzOzEwLDMyIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnVmZmVyX2hlYWQuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O21pbml4LmhcJiMzNDtcbiBcbiYjNDM7c3RhdGljIHNzaXplX3QgbWluaXhfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZSA9IGlvY2ItXHUwMDNla2lfZmlscC1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbiYjNDM7XHRzc2l6ZV90IHJldDtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKTtcbiYjNDM7XG4mIzQzO1x0aW5vZGVfbG9jayhpbm9kZSk7XG4mIzQzO1x0cmV0ID0gZ2VuZXJpY193cml0ZV9jaGVja3MoaW9jYiwgZnJvbSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2M9IDApXG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZmlsZV9tb2RpZmllZChpb2NiLVx1MDAzZWtpX2ZpbHApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiYjNDM7XG4mIzQzO1x0cmV0ID0gaW9tYXBfZmlsZV9idWZmZXJlZF93cml0ZShpb2NiLCBmcm9tLCBvcHMsXG4mIzQzO1x0XHRcdE5VTEwsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRpZiAocmV0IFx1MDAzZSAwKVxuJiM0MztcdFx0cmV0ID0gZ2VuZXJpY193cml0ZV9zeW5jKGlvY2IsIHJldCk7XG4mIzQzO1xuJiM0Mzt1bmxvY2s6XG4mIzQzO1x0aW5vZGVfdW5sb2NrKGlub2RlKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogV2UgaGF2ZSBtb3N0bHkgTlVMTHMgaGVyZTogdGhlIGN1cnJlbnQgZGVmYXVsdHMgYXJlIE9LIGZvclxuICAqIHRoZSBtaW5peCBmaWxlc3lzdGVtLlxuQEAgLTE3LDEzICYjNDM7NDMsMTMgQEBcbiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfb3BlcmF0aW9ucyA9IHtcbiBcdC5sbHNlZWtcdFx0PSBnZW5lcmljX2ZpbGVfbGxzZWVrLFxuIFx0LnJlYWRfaXRlclx0PSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyLFxuLVx0LndyaXRlX2l0ZXJcdD0gZ2VuZXJpY19maWxlX3dyaXRlX2l0ZXIsXG4mIzQzO1x0LndyaXRlX2l0ZXJcdD0gbWluaXhfZmlsZV93cml0ZV9pdGVyLFxuIFx0Lm1tYXBfcHJlcGFyZVx0PSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLFxuIFx0LmZzeW5jXHRcdD0gc2ltcGxlX2ZzeW5jLFxuIFx0LnNwbGljZV9yZWFkXHQ9IGZpbGVtYXBfc3BsaWNlX3JlYWQsXG4gfTtcbiBcbi1zdGF0aWMgaW50IG1pbml4X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4mIzQzO2ludCBtaW5peF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cilcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShkZW50cnkpO1xuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2lub2RlLmMgYi9mcy9taW5peC9pbm9kZS5jXG5pbmRleCBkYWY4M2U0ZmYyNWM4Li4yYmY1ZWE5MjM2MGEyIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbWluaXgvaW5vZGUuY1xuQEAgLTQzOSw2ICYjNDM7NDM5LDMxIEBAIHN0YXRpYyBpbnQgbWluaXhfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZilcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIHNzaXplX3QgbWluaXhfd3JpdGViYWNrX3JhbmdlKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsXG4mIzQzO1x0c3RydWN0IGZvbGlvICpmb2xpbywgdTY0IHBvcywgdW5zaWduZWQgaW50IGxlbiwgdTY0IGVuZF9wb3MpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyb3I7XG4mIzQzO1xuJiM0MztcdGlmIChwb3MgXHUwMDNjIHdwYy1cdTAwM2Vpb21hcC5vZmZzZXQgfHxcbiYjNDM7XHRcdFx0cG9zIFx1MDAzZT0gd3BjLVx1MDAzZWlvbWFwLm9mZnNldCAmIzQzOyB3cGMtXHUwMDNlaW9tYXAubGVuZ3RoKSB7XG4mIzQzO1x0XHRpZiAoSU5PREVfVkVSU0lPTih3cGMtXHUwMDNlaW5vZGUpID09IE1JTklYX1YxKVxuJiM0MztcdFx0XHRlcnJvciA9IFYxX21pbml4X2lvbWFwX2JlZ2luKHdwYy1cdTAwM2Vpbm9kZSwgcG9zLCBsZW4sIElPTUFQX1dSSVRFLFxuJiM0MztcdFx0XHRcdFx1MDAyNndwYy1cdTAwM2Vpb21hcCwgTlVMTCk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGVycm9yID0gVjJfbWluaXhfaW9tYXBfYmVnaW4od3BjLVx1MDAzZWlub2RlLCBwb3MsIGxlbiwgSU9NQVBfV1JJVEUsXG4mIzQzO1x0XHRcdFx0XHUwMDI2d3BjLVx1MDAzZWlvbWFwLCBOVUxMKTtcbiYjNDM7XHRcdGlmIChlcnJvcilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGlvbWFwX2FkZF90b19pb2VuZCh3cGMsIGZvbGlvLCBwb3MsIGVuZF9wb3MsIGxlbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGViYWNrX29wcyBtaW5peF93cml0ZWJhY2tfb3BzID0ge1xuJiM0MztcdC53cml0ZWJhY2tfcmFuZ2UgPSBtaW5peF93cml0ZWJhY2tfcmFuZ2UsXG4mIzQzO1x0LndyaXRlYmFja19zdWJtaXQgPSBpb21hcF9pb2VuZF93cml0ZWJhY2tfc3VibWl0LFxuJiM0Mzt9O1xuJiM0MztcbiBzdGF0aWMgaW50IG1pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jayxcbiBcdFx0ICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKVxuIHtcbkBAIC00NDgsMTcgJiM0Mzs0NzMsNDUgQEAgc3RhdGljIGludCBtaW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssXG4gXHRcdHJldHVybiBWMl9taW5peF9nZXRfYmxvY2soaW5vZGUsIGJsb2NrLCBiaF9yZXN1bHQsIGNyZWF0ZSk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbWluaXhfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiYjNDM7LyogVGhlIG9sZCBtaW5peF93cml0ZXBhZ2VzLCBwcmVzZXJ2ZWQgZm9yIGRpcmVjdG9yeSBvcGVyYXRpb25zLiAqL1xuJiM0MztzdGF0aWMgaW50IG1pbml4X2Jsb2NrX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIHtcbiBcdHJldHVybiBtcGFnZV93cml0ZXBhZ2VzKG1hcHBpbmcsIHdiYywgbWluaXhfZ2V0X2Jsb2NrKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgbWluaXhfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiYjNDM7XHRcdHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggd3BjID0ge1xuJiM0MztcdFx0Lmlub2RlID0gbWFwcGluZy1cdTAwM2Vob3N0LFxuJiM0MztcdFx0LndiYyA9IHdiYyxcbiYjNDM7XHRcdC5vcHMgPSBcdTAwMjZtaW5peF93cml0ZWJhY2tfb3BzLFxuJiM0MztcdH07XG4mIzQzO1x0cmV0dXJuIGlvbWFwX3dyaXRlcGFnZXMoXHUwMDI2d3BjKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG1pbml4X3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGZvbGlvLVx1MDAzZW1hcHBpbmctXHUwMDNlaG9zdCk7XG4mIzQzO1xuJiM0MztcdGlvbWFwX2Jpb19yZWFkX2ZvbGlvKGZvbGlvLCBvcHMpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBUaGUgb2xkIG1pbml4X3JlYWRfZm9saW8sIHByZXNlcnZlZCBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMuICovXG4mIzQzO3N0YXRpYyBpbnQgbWluaXhfYmxvY2tfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKGZvbGlvLCBtaW5peF9nZXRfYmxvY2spO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgbWluaXhfcmVhZGFoZWFkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzID0gbWluaXhfaW9tYXBfb3BzX3ZlcihyYWMtXHUwMDNlbWFwcGluZy1cdTAwM2Vob3N0KTtcbiYjNDM7XG4mIzQzO1x0aW9tYXBfYmlvX3JlYWRhaGVhZChyYWMsIG9wcyk7XG4mIzQzO31cbiYjNDM7XG4gaW50IG1pbml4X3ByZXBhcmVfY2h1bmsoc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuKVxuIHtcbiBcdHJldHVybiBfX2Jsb2NrX3dyaXRlX2JlZ2luKGZvbGlvLCBwb3MsIGxlbiwgbWluaXhfZ2V0X2Jsb2NrKTtcbkBAIC00ODgsMjYgJiM0Mzs1NDEsMzUgQEAgc3RhdGljIGludCBtaW5peF93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgc2VjdG9yX3QgbWluaXhfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYmxvY2spXG4te1xuLVx0cmV0dXJuIGdlbmVyaWNfYmxvY2tfYm1hcChtYXBwaW5nLGJsb2NrLG1pbml4X2dldF9ibG9jayk7XG4tfVxuLVxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG1pbml4X2FvcHMgPSB7XG4tXHQuZGlydHlfZm9saW9cdD0gYmxvY2tfZGlydHlfZm9saW8sXG4tXHQuaW52YWxpZGF0ZV9mb2xpbyA9IGJsb2NrX2ludmFsaWRhdGVfZm9saW8sXG4mIzQzO1x0LmRpcnR5X2ZvbGlvXHQ9IGlvbWFwX2RpcnR5X2ZvbGlvLFxuJiM0MztcdC5pbnZhbGlkYXRlX2ZvbGlvID0gaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyxcbiBcdC5yZWFkX2ZvbGlvID0gbWluaXhfcmVhZF9mb2xpbyxcbiYjNDM7XHQucmVhZGFoZWFkID0gbWluaXhfcmVhZGFoZWFkLFxuIFx0LndyaXRlcGFnZXMgPSBtaW5peF93cml0ZXBhZ2VzLFxuJiM0MztcdC5taWdyYXRlX2ZvbGlvID0gZmlsZW1hcF9taWdyYXRlX2ZvbGlvLFxuJiM0MztcdC5pc19wYXJ0aWFsbHlfdXB0b2RhdGUgPSBpb21hcF9pc19wYXJ0aWFsbHlfdXB0b2RhdGUsXG4mIzQzO1x0LnJlbGVhc2VfZm9saW8gPSBpb21hcF9yZWxlYXNlX2ZvbGlvLFxuJiM0MztcdC5lcnJvcl9yZW1vdmVfZm9saW8gPSBnZW5lcmljX2Vycm9yX3JlbW92ZV9mb2xpbyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qIEEgc3BlY2lhbCBhb3BzIGZvciBkaXJlY3RvcmllcyB0aGF0IGtlZXBzIHVzaW5nIHRoZSBidWZmZXIgaGVhZCBjaHVua3MsIGF0XG4mIzQzOyAqIGxlYXN0IGZvciB0aGUgdGltZSBiZWluZy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG1pbml4X2Rpcl9hb3BzID0ge1xuJiM0MztcdC5kaXJ0eV9mb2xpbyA9IGJsb2NrX2RpcnR5X2ZvbGlvLFxuJiM0MztcdC5pbnZhbGlkYXRlX2ZvbGlvID0gYmxvY2tfaW52YWxpZGF0ZV9mb2xpbyxcbiYjNDM7XHQucmVhZF9mb2xpbyA9IG1pbml4X2Jsb2NrX3JlYWRfZm9saW8sXG4gXHQud3JpdGVfYmVnaW4gPSBtaW5peF93cml0ZV9iZWdpbixcbiBcdC53cml0ZV9lbmQgPSBnZW5lcmljX3dyaXRlX2VuZCxcbiBcdC5taWdyYXRlX2ZvbGlvID0gYnVmZmVyX21pZ3JhdGVfZm9saW8sXG4tXHQuYm1hcCA9IG1pbml4X2JtYXAsXG4tXHQuZGlyZWN0X0lPID0gbm9vcF9kaXJlY3RfSU9cbiYjNDM7XHQud3JpdGVwYWdlcyA9IG1pbml4X2Jsb2NrX3dyaXRlcGFnZXMsXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWluaXhfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0ge1xuIFx0LmdldF9saW5rXHQ9IHBhZ2VfZ2V0X2xpbmssXG4gXHQuZ2V0YXR0clx0PSBtaW5peF9nZXRhdHRyLFxuJiM0MztcdC5zZXRhdHRyXHQ9IG1pbml4X3NldGF0dHIsXG4gfTtcbiBcbiB2b2lkIG1pbml4X3NldF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBkZXZfdCByZGV2KVxuQEAgLTUxOSw3ICYjNDM7NTgxLDcgQEAgdm9pZCBtaW5peF9zZXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgZGV2X3QgcmRldilcbiBcdH0gZWxzZSBpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4gXHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZtaW5peF9kaXJfaW5vZGVfb3BlcmF0aW9ucztcbiBcdFx0aW5vZGUtXHUwMDNlaV9mb3AgPSBcdTAwMjZtaW5peF9kaXJfb3BlcmF0aW9ucztcbi1cdFx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID0gXHUwMDI2bWluaXhfYW9wcztcbiYjNDM7XHRcdGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcyA9IFx1MDAyNm1pbml4X2Rpcl9hb3BzO1xuIFx0fSBlbHNlIGlmIChTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbiBcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNm1pbml4X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucztcbiBcdFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcbkBAIC03ODYsNCAmIzQzOzg0OCwzIEBAIG1vZHVsZV9pbml0KGluaXRfbWluaXhfZnMpXG4gbW9kdWxlX2V4aXQoZXhpdF9taW5peF9mcylcbiBNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7TWluaXggZmlsZSBzeXN0ZW1cJiMzNDspO1xuIE1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4tXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvaW9tYXAuYyBiL2ZzL21pbml4L2lvbWFwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi45MGUwMTZhYWEwMWVhXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9pb21hcC5jXG5AQCAtMCwwICYjNDM7MSwxMjIgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKlxuJiM0MzsgKiBpb21hcCBmdW5jdGlvbnMgZm9yIG1pbml4LlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtaW5peF9jaGFpbl9jbGVhbnVwKEluZGlyZWN0ICpjaGFpbiwgSW5kaXJlY3QgKnBhcnRpYWwpXG4mIzQzO3tcbiYjNDM7XHR3aGlsZSAocGFydGlhbCBcdTAwM2UgY2hhaW4pIHtcbiYjNDM7XHRcdGJyZWxzZShwYXJ0aWFsLVx1MDAzZWJoKTtcbiYjNDM7XHRcdHBhcnRpYWwtLTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtaW5peF9pb21hcF9zZXRfbWFwcGVkKHN0cnVjdCBpb21hcCAqaW9tYXAsIHNlY3Rvcl90IHBoeXMsXG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgYmxrYml0cywgc2VjdG9yX3QgaWJsb2NrKVxuJiM0Mzt7XG4mIzQzO1x0aW9tYXAtXHUwMDNldHlwZSA9IElPTUFQX01BUFBFRDtcbiYjNDM7XHRpb21hcC1cdTAwM2VhZGRyID0gKHU2NClwaHlzIFx1MDAzY1x1MDAzYyBibGtiaXRzO1xuJiM0MztcdGlvbWFwLVx1MDAzZWxlbmd0aCA9IDEgXHUwMDNjXHUwMDNjIGJsa2JpdHM7XG4mIzQzO1x0aW9tYXAtXHUwMDNlb2Zmc2V0ID0gKHU2NClpYmxvY2sgXHUwMDNjXHUwMDNjIGJsa2JpdHM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtaW5peF9pb21hcF9zZXRfaG9sZShzdHJ1Y3QgaW9tYXAgKmlvbWFwLFxuJiM0MztcdFx0dW5zaWduZWQgaW50IGJsa2JpdHMsIHNlY3Rvcl90IGlibG9jaylcbiYjNDM7e1xuJiM0MztcdGlvbWFwLVx1MDAzZXR5cGUgPSBJT01BUF9IT0xFO1xuJiM0MztcdGlvbWFwLVx1MDAzZWFkZHIgPSBJT01BUF9OVUxMX0FERFI7XG4mIzQzO1x0aW9tYXAtXHUwMDNlbGVuZ3RoID0gMSBcdTAwM2NcdTAwM2MgYmxrYml0cztcbiYjNDM7XHRpb21hcC1cdTAwM2VvZmZzZXQgPSAodTY0KWlibG9jayBcdTAwM2NcdTAwM2MgYmxrYml0cztcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogbWluaXhfaW9tYXBfYmVnaW4gLSBtYXAgYSBmaWxlIHJhbmdlIHRvIGRpc2sgYmxvY2tzLiBJdCBhY3RzIGFzIGEgcmVwbGFjZW1lbnRcbiYjNDM7ICogZm9yIGdldF9ibG9jayBpbiBpdHJlZV9jb21tb24uYywgYXQgbGVhc3QgaW4gdGhlIGltcG9ydGFudCB3YXlzLCBhbmQgaXNcbiYjNDM7ICogYWRhcHRlZCBmcm9tIGl0LCBidXQgaXQgdXNlcyBpb21hcCBpbnN0ZWFkIG9mIGJ1ZmZlcl9oZWFkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBtaW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxuJiM0MztcdHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgYmxrYml0cyA9IHNiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHM7XG4mIzQzO1x0c2VjdG9yX3QgaWJsb2NrID0gb2Zmc2V0IFx1MDAzZVx1MDAzZSBibGtiaXRzO1xuJiM0MztcdGludCBjcmVhdGUgPSBmbGFncyBcdTAwMjYgSU9NQVBfV1JJVEU7XG4mIzQzO1xuJiM0MztcdGludCBvZmZzZXRzW0RFUFRIXTtcbiYjNDM7XHRJbmRpcmVjdCBjaGFpbltERVBUSF07XG4mIzQzO1x0SW5kaXJlY3QgKnBhcnRpYWw7XG4mIzQzO1x0aW50IGRlcHRoID0gYmxvY2tfdG9fcGF0aChpbm9kZSwgaWJsb2NrLCBvZmZzZXRzKTtcbiYjNDM7XHRpbnQgbGVmdDtcbiYjNDM7XHRpbnQgZXJyID0gLUVJTztcbiYjNDM7XG4mIzQzO1x0c2VjdG9yX3QgcGh5cztcbiYjNDM7XG4mIzQzO1x0LyogYmxvY2sgaXMgYmV5b25kIG1heCBmaWxlIHNpemUgKi9cbiYjNDM7XHRpZiAoZGVwdGggPT0gMClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpb21hcC1cdTAwM2ViZGV2ID0gaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2JkZXY7XG4mIzQzO1xuJiM0MztyZXJlYWQ6XG4mIzQzO1x0cGFydGlhbCA9IGdldF9icmFuY2goaW5vZGUsIGRlcHRoLCBvZmZzZXRzLCBjaGFpbiwgXHUwMDI2ZXJyKTtcbiYjNDM7XG4mIzQzO1x0LyogU2ltcGxlc3QgY2FzZSAtIGJsb2NrIGZvdW5kLCBubyBhbGxvY2F0aW9uIG5lZWRlZCAqL1xuJiM0MztcdGlmICghcGFydGlhbCkge1xuJiM0MztcdFx0aW9tYXAtXHUwMDNlZmxhZ3MgPSAwO1xuJiM0MztcdFx0cGh5cyA9IGJsb2NrX3RvX2NwdShjaGFpbltkZXB0aCAtIDFdLmtleSk7XG4mIzQzO1x0XHRwYXJ0aWFsID0gY2hhaW4mIzQzO2RlcHRoLTE7XG4mIzQzO1x0XHRtaW5peF9pb21hcF9zZXRfbWFwcGVkKGlvbWFwLCBwaHlzLCBibGtiaXRzLCBpYmxvY2spO1xuJiM0MztcdFx0bWluaXhfY2hhaW5fY2xlYW51cChjaGFpbiwgcGFydGlhbCk7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogTmV4dCBzaW1wbGUgY2FzZSAtIHBsYWluIGxvb2t1cCBvciBmYWlsZWQgcmVhZCBvZiBpbmRpcmVjdCBibG9jayAqL1xuJiM0MztcdGlmICghY3JlYXRlIHx8IGVyciA9PSAtRUlPKSB7XG4mIzQzO1x0XHRtaW5peF9pb21hcF9zZXRfaG9sZShpb21hcCwgYmxrYml0cywgaWJsb2NrKTtcbiYjNDM7XHRcdG1pbml4X2NoYWluX2NsZWFudXAoY2hhaW4sIHBhcnRpYWwpO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhpcyBpcyBoZWxkIG92ZXIgZnJvbSB0aGUgb3JpZ2luYWwgZ2V0X2Jsb2NrIGxvZ2ljLCB3aGVyZSBpdFxuJiM0MztcdCAqIGFjdGVkIGFzIGEgZ3VhcmQgaW4gY2FzZSB0cnVuY2F0ZSgpIGRlbGV0ZWQgYmxvY2tzIGZyb20gdW5kZXIgdGhhdFxuJiM0MztcdCAqIGZ1bmN0aW9uLiBUaGVyZSBzaG91bGQgbm90IGJlIGEgcmFjZSB3aXRoIGlvbWFwIG9wZXJhdGlvbnMsIGJ1dFxuJiM0MztcdCAqIHdlJiMzOTtyZSByZXRhaW5pbmcgdGhlIGRlZmVuc2l2ZSBjb2RpbmcgaGVyZSB0byBiZSBleHRyYSBzYWZlIGp1c3QgaW5cbiYjNDM7XHQgKiBjYXNlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChlcnIgPT0gLUVBR0FJTikge1xuJiM0MztcdFx0bWluaXhfY2hhaW5fY2xlYW51cChjaGFpbiwgcGFydGlhbCk7XG4mIzQzO1x0XHRnb3RvIHJlcmVhZDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGxlZnQgPSAoY2hhaW4gJiM0MzsgZGVwdGgpIC0gcGFydGlhbDtcbiYjNDM7XHRlcnIgPSBhbGxvY19icmFuY2goaW5vZGUsIGxlZnQsIG9mZnNldHMgJiM0MzsgKHBhcnRpYWwgLSBjaGFpbiksIHBhcnRpYWwpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdG1pbml4X2NoYWluX2NsZWFudXAoY2hhaW4sIHBhcnRpYWwpO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChzcGxpY2VfYnJhbmNoKGlub2RlLCBjaGFpbiwgcGFydGlhbCwgbGVmdCkgXHUwMDNjIDApIHtcbiYjNDM7XHRcdG1pbml4X2NoYWluX2NsZWFudXAoY2hhaW4sIHBhcnRpYWwpO1xuJiM0MztcdFx0Z290byByZXJlYWQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBTdWNjZXNzZnVsIGFsbG9jYXRpb24sIG1hcHBpbmcgaXQuICovXG4mIzQzO1x0aW9tYXAtXHUwMDNlZmxhZ3MgPSBJT01BUF9GX05FVztcbiYjNDM7XHRwaHlzID0gYmxvY2tfdG9fY3B1KGNoYWluW2RlcHRoIC0gMV0ua2V5KTtcbiYjNDM7XHRtaW5peF9pb21hcF9zZXRfbWFwcGVkKGlvbWFwLCBwaHlzLCBibGtiaXRzLCBpYmxvY2spO1xuJiM0MztcdG1pbml4X2NoYWluX2NsZWFudXAoY2hhaW4sIHBhcnRpYWwpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBtaW5peF9pb21hcF9lbmQgZW5kcyB1cCBiZWluZyBhIG5vcDsgc2luY2UgbWluaXggZG9lc24mIzM5O3QgaGF2ZSBhbnkgZXh0ZW50cyBvclxuJiM0MzsgKiB0cmFuc2FjdGlvbnMgdG8gd29ycnkgYWJvdXQsIHRoZXJlIGlzbiYjMzk7dCBhbnl0aGluZyB0byB1cGRhdGUgaGVyZS4gVGhlIG9uLWRpc2tcbiYjNDM7ICogaW5kaXJlY3QgYmxvY2tzIGdldCBkaXJ0aWVkIGluIG1pbml4X2lvbWFwX2JlZ2luLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBtaW5peF9pb21hcF9lbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCxcbiYjNDM7XHRzc2l6ZV90IHdyaXR0ZW4sIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvaXRyZWVfY29tbW9uLmMgYi9mcy9taW5peC9pdHJlZV9jb21tb24uY1xuaW5kZXggYzNjZDJjNzVhZjljZS4uZDczYWIxY2FhY2ZlYyAxMDA2NDRcbi0tLSBhL2ZzL21pbml4L2l0cmVlX2NvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9pdHJlZV9jb21tb24uY1xuQEAgLTMxMSw3ICYjNDM7MzExLDE1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0cnVuY2F0ZSAoc3RydWN0IGlub2RlICogaW5vZGUpXG4gXHRsb25nIGlibG9jaztcbiBcbiBcdGlibG9jayA9IChpbm9kZS1cdTAwM2VpX3NpemUgJiM0Mzsgc2ItXHUwMDNlc19ibG9ja3NpemUgLTEpIFx1MDAzZVx1MDAzZSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xuLVx0YmxvY2tfdHJ1bmNhdGVfcGFnZShpbm9kZS1cdTAwM2VpX21hcHBpbmcsIGlub2RlLVx1MDAzZWlfc2l6ZSwgZ2V0X2Jsb2NrKTtcbiYjNDM7XG4mIzQzO1x0LyogRGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGlub2RlIGJlaW5nIHRydW5jYXRlZCBpcyBhIGRpcmVjdG9yeSBvciBub3QsXG4mIzQzO1x0ICogd2UgbmVlZCB0byBlaXRoZXIgY2FsbCBpb21hcF90cnVuY2F0ZV9wYWdlIG9yIGJsb2NrX3RydW5jYXRlX3BhZ2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSlcbiYjNDM7XHRcdGJsb2NrX3RydW5jYXRlX3BhZ2UoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBpbm9kZS1cdTAwM2VpX3NpemUsIGdldF9ibG9jayk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0aW9tYXBfdHJ1bmNhdGVfcGFnZShpbm9kZSwgaW5vZGUtXHUwMDNlaV9zaXplLCBOVUxMLFxuJiM0MztcdFx0XHRtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKSwgTlVMTCwgTlVMTCk7XG4gXG4gXHRuID0gYmxvY2tfdG9fcGF0aChpbm9kZSwgaWJsb2NrLCBvZmZzZXRzKTtcbiBcdGlmICghbilcbmRpZmYgLS1naXQgYS9mcy9taW5peC9pdHJlZV92MS5jIGIvZnMvbWluaXgvaXRyZWVfdjEuY1xuaW5kZXggMWZlZDkwNjA0MmFhOC4uNThjMjlmNDQ0M2QzNyAxMDA2NDRcbi0tLSBhL2ZzL21pbml4L2l0cmVlX3YxLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L2l0cmVlX3YxLmNcbkBAIC00OSw2ICYjNDM7NDksMTggQEAgc3RhdGljIGludCBibG9ja190b19wYXRoKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBsb25nIGJsb2NrLCBpbnQgb2Zmc2V0c1tERVBUSF0pXG4gfVxuIFxuICNpbmNsdWRlIFwmIzM0O2l0cmVlX2NvbW1vbi5jXCYjMzQ7XG4mIzQzOy8qIE5PVEEgQkVORTpcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBpcyBpY2t5IHRvIG1lLCBidXQgYXQgdGhlIHNhbWUgdGltZSBoYXZpbmcgaXQgYmUgYSBzdGFuZGFsb25lIEMgZmlsZVxuJiM0MzsgKiB0aGF0JiMzOTtzIGNvbXBpbGVkIHRvIG9iamVjdCBmb3JtIGFuZCBsaW5rZWQgc2VwYXJhdGVseSBsaWtlIGl0IGlzIGluIHhpYWZzIGlzXG4mIzQzOyAqIG11Y2ggbmFzdGllciBpbiBtaW5peCBiZWNhdXNlIG9mIHRoZSBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIG1pbml4IGZzIHRoYXRcbiYjNDM7ICogaGF2ZSBzb21lIHZlcnksIHZlcnkgZGlmZmVyZW50IGFzcGVjdHMsIGxpa2UgdGhlIHNpemUgb2YgYmxvY2tfdC4gSSBkb24mIzM5O3RcbiYjNDM7ICogbGlrZSBpdCwgYnV0IHNpbmNlIG1pbml4IGFscmVhZHkgaGFzIHRoaXMgcGF0dGVybiB3aGVyZSBhIGNvbW1vbiBpdHJlZSBmaWxlXG4mIzQzOyAqIGlzIGluY2x1ZGVkIGluIHRoZSBpdHJlZV92MSBhbmQgaXRyZWVfdjIoYW5kIHYzKSBmaWxlcywgSSYjMzk7bSBpbmNsdWRpbmcgaW9tYXAuY1xuJiM0MzsgKiBpbiB0aGVzZSBmaWxlcyBhcyB3ZWxsLiBJdCBkb2VzIGF0IGxlYXN0IGF2b2lkIGV4cG9ydGluZyBzb21lIGN1cnJlbnRseVxuJiM0MzsgKiBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlbiYjMzk7dCBuZWVkZWQgYW55d2hlcmUgYnV0IGl0cmVlX2NvbW1vbi5jIGFuZCBpb21hcC5jLlxuJiM0MzsgKi9cbiYjNDM7I2luY2x1ZGUgXCYjMzQ7aW9tYXAuY1wmIzM0O1xuIFxuIGludCBWMV9taW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssXG4gXHRcdFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpXG5AQCAtNjEsNyAmIzQzOzczLDE4IEBAIHZvaWQgVjFfbWluaXhfdHJ1bmNhdGUoc3RydWN0IGlub2RlICogaW5vZGUpXG4gXHR0cnVuY2F0ZShpbm9kZSk7XG4gfVxuIFxuLXVuc2lnbmVkIFYxX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiYjNDM7dW5zaWduZWQgaW50IFYxX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiB7XG4gXHRyZXR1cm4gbmJsb2NrcyhzaXplLCBzYik7XG4gfVxuJiM0MztcbiYjNDM7aW50IFYxX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXG4mIzQzO1x0dW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBzdHJ1Y3QgaW9tYXAgKnNyY21hcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBtaW5peF9pb21hcF9iZWdpbihpbm9kZSwgb2Zmc2V0LCBsZW5ndGgsIGZsYWdzLCBpb21hcCwgc3JjbWFwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMV9taW5peF9pb21hcF9vcHMgPSB7XG4mIzQzO1x0LmlvbWFwX2JlZ2luID0gVjFfbWluaXhfaW9tYXBfYmVnaW4sXG4mIzQzO1x0LmlvbWFwX2VuZCAgID0gbWluaXhfaW9tYXBfZW5kLFxuJiM0Mzt9O1xuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2l0cmVlX3YyLmMgYi9mcy9taW5peC9pdHJlZV92Mi5jXG5pbmRleCA5ZDAwZjMxYTJkOWQxLi5mYzdhNWFlOGZhMWNhIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvaXRyZWVfdjIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbWluaXgvaXRyZWVfdjIuY1xuQEAgLTU3LDYgJiM0Mzs1NywxMCBAQCBzdGF0aWMgaW50IGJsb2NrX3RvX3BhdGgoc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssIGludCBvZmZzZXRzW0RFUFRIXSlcbiB9XG4gXG4gI2luY2x1ZGUgXCYjMzQ7aXRyZWVfY29tbW9uLmNcJiMzNDtcbiYjNDM7LyogU2VlIHRoZSBub3RlIGluIGl0cmVlX3YxIGluIGEgY29tbWVudCB0aGF0IHN0YXJ0cyBcJiMzNDtOT1RBIEJFTkVcJiMzNDsgZm9yIGFuXG4mIzQzOyAqIGV4cGxhbmF0aW9uIGZvciB3aHkgaW9tYXAuYyBpcyBpbmNsdWRlZCBoZXJlLlxuJiM0MzsgKi9cbiYjNDM7I2luY2x1ZGUgXCYjMzQ7aW9tYXAuY1wmIzM0O1xuIFxuIGludCBWMl9taW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssXG4gXHRcdFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpXG5AQCAtNjksNyAmIzQzOzczLDE4IEBAIHZvaWQgVjJfbWluaXhfdHJ1bmNhdGUoc3RydWN0IGlub2RlICogaW5vZGUpXG4gXHR0cnVuY2F0ZShpbm9kZSk7XG4gfVxuIFxuLXVuc2lnbmVkIFYyX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiYjNDM7dW5zaWduZWQgaW50IFYyX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiB7XG4gXHRyZXR1cm4gbmJsb2NrcyhzaXplLCBzYik7XG4gfVxuJiM0MztcbiYjNDM7aW50IFYyX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXG4mIzQzO1x0dW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBzdHJ1Y3QgaW9tYXAgKnNyY21hcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBtaW5peF9pb21hcF9iZWdpbihpbm9kZSwgb2Zmc2V0LCBsZW5ndGgsIGZsYWdzLCBpb21hcCwgc3JjbWFwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMl9taW5peF9pb21hcF9vcHMgPSB7XG4mIzQzO1x0LmlvbWFwX2JlZ2luID0gVjJfbWluaXhfaW9tYXBfYmVnaW4sXG4mIzQzO1x0LmlvbWFwX2VuZCAgID0gbWluaXhfaW9tYXBfZW5kLFxuJiM0Mzt9O1xuZGlmZiAtLWdpdCBhL2ZzL21pbml4L21pbml4LmggYi9mcy9taW5peC9taW5peC5oXG5pbmRleCA3ODcyMmNlMjJlMWUxLi45MDM1NjA0YzY4Y2ExIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvbWluaXguaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbWluaXgvbWluaXguaFxuQEAgLTUsNiAmIzQzOzUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlbWFwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9taW5peF9mcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbWFwLmhcdTAwM2VcbiBcbiAjZGVmaW5lIElOT0RFX1ZFUlNJT04oaW5vZGUpXHRtaW5peF9zYihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX3ZlcnNpb25cbiAjZGVmaW5lIE1JTklYX1YxXHRcdDB4MDAwMVx0XHQvKiBvcmlnaW5hbCBtaW5peCBmcyAqL1xuQEAgLTU3LDYgJiM0Mzs1OCw4IEBAIHZvaWQgbWluaXhfZnJlZV9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsb25nIGJsb2NrKTtcbiB1bnNpZ25lZCBsb25nIG1pbml4X2NvdW50X2ZyZWVfYmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuIGludCBtaW5peF9nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKiwgY29uc3Qgc3RydWN0IHBhdGggKixcbiBcdFx0c3RydWN0IGtzdGF0ICosIHUzMiwgdW5zaWduZWQgaW50KTtcbiYjNDM7aW50IG1pbml4X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiYjNDM7XHRzdHJ1Y3QgaWF0dHIgKmF0dHIpO1xuIGludCBtaW5peF9wcmVwYXJlX2NodW5rKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbik7XG4gc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptaW5peF9nZXRfbWV0YWRhdGFfYmhzKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIFxuQEAgLTc2LDEzICYjNDM7NzksMjMgQEAgaW50IG1pbml4X21ha2VfZW1wdHkoc3RydWN0IGlub2RlKiwgc3RydWN0IGlub2RlKik7XG4gaW50IG1pbml4X2VtcHR5X2RpcihzdHJ1Y3QgaW5vZGUqKTtcbiBpbnQgbWluaXhfc2V0X2xpbmsoc3RydWN0IG1pbml4X2Rpcl9lbnRyeSAqZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuJiM0MztcbiBzdHJ1Y3QgbWluaXhfZGlyX2VudHJ5ICptaW5peF9kb3Rkb3Qoc3RydWN0IGlub2RlKiwgc3RydWN0IGZvbGlvICoqKTtcbiBpbm9fdCBtaW5peF9pbm9kZV9ieV9uYW1lKHN0cnVjdCBkZW50cnkqKTtcbiBcbiYjNDM7aW50IFYxX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4mIzQzO1x0bG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLFxuJiM0MztcdHN0cnVjdCBpb21hcCAqc3JjbWFwKTtcbiYjNDM7aW50IFYyX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4mIzQzO1x0bG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLFxuJiM0MztcdHN0cnVjdCBpb21hcCAqc3JjbWFwKTtcbiYjNDM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfaW5vZGVfb3BlcmF0aW9ucztcbiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWluaXhfZGlyX2lub2RlX29wZXJhdGlvbnM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWluaXhfZmlsZV9vcGVyYXRpb25zO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2Rpcl9vcGVyYXRpb25zO1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMV9taW5peF9pb21hcF9vcHM7XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYyX21pbml4X2lvbWFwX29wcztcbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBtaW5peF9zYl9pbmZvICptaW5peF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIHtcbkBAIC05NCwxMSAmIzQzOzEwNywxNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtaW5peF9pbm9kZV9pbmZvICptaW5peF9pKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRyZXR1cm4gY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgbWluaXhfaW5vZGVfaW5mbywgdmZzX2lub2RlKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBtaW5peF9ibG9ja3NfbmVlZGVkKHVuc2lnbmVkIGJpdHMsIHVuc2lnbmVkIGJsb2Nrc2l6ZSlcbiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWluaXhfYmxvY2tzX25lZWRlZCh1bnNpZ25lZCBpbnQgYml0cywgdW5zaWduZWQgaW50IGJsb2Nrc2l6ZSlcbiB7XG4gXHRyZXR1cm4gRElWX1JPVU5EX1VQX1BPVzIoYml0cywgYmxvY2tzaXplICogOCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm1pbml4X2lvbWFwX29wc192ZXIoc3RydWN0IGlub2RlICppbm9kZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiAoSU5PREVfVkVSU0lPTihpbm9kZSkgPT0gTUlOSVhfVjEpID9cbiYjNDM7XHRcdFx1MDAyNlYxX21pbml4X2lvbWFwX29wcyA6IFx1MDAyNlYyX21pbml4X2lvbWFwX29wcztcbiYjNDM7fVxuJiM0MztcbiAjaWYgZGVmaW5lZChDT05GSUdfTUlOSVhfRlNfTkFUSVZFX0VORElBTikgXHUwMDI2XHUwMDI2IFxcXG4gXHRkZWZpbmVkKENPTkZJR19NSU5JWF9GU19CSUdfRU5ESUFOXzE2QklUX0lOREVYRUQpXG4gXG5AQCAtMTI4LDcgJiM0MzsxNDcsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIG1pbml4X2Jsb2Nrc19uZWVkZWQodW5zaWduZWQgYml0cywgdW5zaWduZWQgYmxvY2tzaXplKVxuICAqIGJpZy1lbmRpYW4gMTZiaXQgaW5kZXhlZCBiaXRtYXBzXG4gICovXG4gXG4tc3RhdGljIGlubGluZSBpbnQgbWluaXhfZmluZF9maXJzdF96ZXJvX2JpdChjb25zdCB2b2lkICp2YWRkciwgdW5zaWduZWQgc2l6ZSlcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWluaXhfZmluZF9maXJzdF96ZXJvX2JpdChjb25zdCB2b2lkICp2YWRkciwgdW5zaWduZWQgaW50IHNpemUpXG4ge1xuIFx0Y29uc3QgdW5zaWduZWQgc2hvcnQgKnAgPSB2YWRkciwgKmFkZHIgPSB2YWRkcjtcbiBcdHVuc2lnbmVkIHNob3J0IG51bTtcbmRpZmYgLS1naXQgYS9mcy9taW5peC9uYW1laS5jIGIvZnMvbWluaXgvbmFtZWkuY1xuaW5kZXggNTUyNWJhMzY3ZWQ3NC4uNTJlMTE1MDEzYWJmOCAxMDA2NDRcbi0tLSBhL2ZzL21pbml4L25hbWVpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L25hbWVpLmNcbkBAIC02LDYgJiM0Mzs2LDcgQEBcbiAgKi9cbiBcbiAjaW5jbHVkZSBcJiMzNDttaW5peC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbWFwLmhcdTAwM2VcbiBcbiBzdGF0aWMgaW50IGFkZF9ub25kaXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbkBAIC04NCwxMiAmIzQzOzg1LDE2IEBAIHN0YXRpYyBpbnQgbWluaXhfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdHJldHVybiBQVFJfRVJSKGlub2RlKTtcbiBcbiBcdG1pbml4X3NldF9pbm9kZShpbm9kZSwgMCk7XG4tXHRlcnIgPSBwYWdlX3N5bWxpbmsoaW5vZGUsIHN5bW5hbWUsIGkpO1xuJiM0MztcdGVyciA9IGlvbWFwX3N5bWxpbmtfd3JpdGUoaW5vZGUsIHN5bW5hbWUsIGksIG1pbml4X2lvbWFwX29wc192ZXIoaW5vZGUpLCBOVUxMLCBOVUxMKTtcbiYjNDM7XG4gXHRpZiAodW5saWtlbHkoZXJyKSkge1xuIFx0XHRpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7XG4gXHRcdGlwdXQoaW5vZGUpO1xuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuJiM0MztcbiYjNDM7XHRpX3NpemVfd3JpdGUoaW5vZGUsIGkgLSAxKTtcbiYjNDM7XG4gXHRyZXR1cm4gYWRkX25vbmRpcihkZW50cnksIGlub2RlKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb21hcC5oIGIvaW5jbHVkZS9saW51eC9pb21hcC5oXG5pbmRleCA4Yzc1NGViOTc0ZmJmLi5hYjI3YTNhNWI4ZDJjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9pb21hcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcbkBAIC00NzEsNiAmIzQzOzQ3MSw5IEBAIGxvZmZfdCBpb21hcF9zZWVrX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCxcbiBcdFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzKTtcbiBzZWN0b3JfdCBpb21hcF9ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibm8sXG4gXHRcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyk7XG4mIzQzO2ludCBpb21hcF9zeW1saW5rX3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKnRhcmdldCwgaW50IGxlbixcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyxcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZV9vcHMgKndyaXRlX29wcywgdm9pZCAqcHJpdmF0ZSk7XG4gXG4gLypcbiAgKiBGbGFncyBmb3IgaW9tYXBfaW9lbmQtXHUwMDNlaW9fZmxhZ3MuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01JTklYX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9tYXBfc3ltbGlua193cml0ZSYjMzQ7LAogICAgJiMzNDtWMV9taW5peF9pb21hcF9iZWdpbiYjMzQ7LAogICAgJiMzNDtWMl9taW5peF9pb21hcF9iZWdpbiYjMzQ7LAogICAgJiMzNDttaW5peF9maWxlX3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7bWluaXhfd3JpdGVwYWdlcyYjMzQ7LAogICAgJiMzNDttaW5peF9yZWFkX2ZvbGlvJiMzNDssCiAgICAmIzM0O21pbml4X3JlYWRhaGVhZCYjMzQ7LAogICAgJiMzNDttaW5peF93cml0ZWJhY2tfcmFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWlncmF0ZXMgdGhlIG1pbml4IGZpbGVzeXN0ZW0gdG8gdXNlIGlvbWFwIGZvciBidWZmZXJlZCBJL08gYW5kIHN5bWxpbmtzLiBUaGlzIGludm9sdmVzIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIG1pbml4IGZpbGUgb3BlcmF0aW9ucywgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zLCBhbmQgYmxvY2sgbWFwcGluZyBsb2dpYy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBtb3VudGluZyBhIG1pbml4IGZpbGVzeXN0ZW0gaW1hZ2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmOTRjNWEzZmZjZWQ3MzVmNTg0MmY2NzQ2M2RiYWYxMjUxOTE1ZmVhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMjYgMjI6MTA6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9pb21hcC9idWZmZXJlZC1pby5jIGIvZnMvaW9tYXAvYnVmZmVyZWQtaW8uYwppbmRleCAwYTVlYmZkYTkwZjEyLi41ZThhYzNmYWQ2NzE0IDEwMDY0NAotLS0gYS9mcy9pb21hcC9idWZmZXJlZC1pby5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMKQEAgLTIxMDAsMyAmIzQzOzIxMDAsMzcgQEAgaW9tYXBfd3JpdGVwYWdlcyhzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjKQogCXJldHVybiBlcnJvcjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX3dyaXRlcGFnZXMpOwomIzQzOwomIzQzO2ludCBpb21hcF9zeW1saW5rX3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKnRhcmdldCwgaW50IGxlbiwKJiM0MzsJCWNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcywKJiM0MzsJCWNvbnN0IHN0cnVjdCBpb21hcF93cml0ZV9vcHMgKndyaXRlX29wcywgdm9pZCAqcHJpdmF0ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdmVjIHZlYyA9IHsKJiM0MzsJCS5pb3ZfYmFzZQk9ICh2b2lkICopdGFyZ2V0LAomIzQzOwkJLmlvdl9sZW4JPSBsZW4gLSAxLAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgaW9tYXBfaXRlciBpdGVyID0gewomIzQzOwkJLmlub2RlCQk9IGlub2RlLAomIzQzOwkJLnBvcwkJPSAwLAomIzQzOwkJLmxlbgkJPSBsZW4gLSAxLAomIzQzOwkJLmZsYWdzCQk9IElPTUFQX1dSSVRFLAomIzQzOwkJLnByaXZhdGUJPSBwcml2YXRlLAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgaW92X2l0ZXIgaW92OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpb3ZfaXRlcl9rdmVjKCZhbXA7aW92LCBJVEVSX1NPVVJDRSwgJmFtcDt2ZWMsIDEsIGxlbiAtIDEpOwomIzQzOwomIzQzOwl3aGlsZSAoKHJldCA9IGlvbWFwX2l0ZXIoJmFtcDtpdGVyLCBvcHMpKSAmZ3Q7IDApCiYjNDM7CQlpdGVyLnN0YXR1cyA9IGlvbWFwX3dyaXRlX2l0ZXIoJmFtcDtpdGVyLCAmYW1wO2lvdiwgd3JpdGVfb3BzKTsKJiM0MzsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoaXRlci5wb3MgPT0gMCkpCiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsKJiM0MzsJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9zeW1saW5rX3dyaXRlKTsKZGlmZiAtLWdpdCBhL2ZzL21pbml4L2ZpbGUuYyBiL2ZzL21pbml4L2ZpbGUuYwppbmRleCAwMmFhYmJkYjVkZWFhLi42NzY1ZjU3MWJkM2ZjIDEwMDY0NAotLS0gYS9mcy9taW5peC9maWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbWluaXgvZmlsZS5jCkBAIC0xMCw2ICYjNDM7MTAsMzIgQEAKICNpbmNsdWRlICZsdDtsaW51eC9idWZmZXJfaGVhZC5oJmd0OwogI2luY2x1ZGUgJiMzNDttaW5peC5oJiMzNDsKIAomIzQzO3N0YXRpYyBzc2l6ZV90IG1pbml4X2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBpb2NiLSZndDtraV9maWxwLSZndDtmX21hcHBpbmctJmd0O2hvc3Q7CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwljb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKTsKJiM0MzsKJiM0MzsJaW5vZGVfbG9jayhpbm9kZSk7CiYjNDM7CXJldCA9IGdlbmVyaWNfd3JpdGVfY2hlY2tzKGlvY2IsIGZyb20pOwomIzQzOwlpZiAocmV0ICZsdDs9IDApCiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsKJiM0MzsJcmV0ID0gZmlsZV9tb2RpZmllZChpb2NiLSZndDtraV9maWxwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwomIzQzOwlyZXQgPSBpb21hcF9maWxlX2J1ZmZlcmVkX3dyaXRlKGlvY2IsIGZyb20sIG9wcywKJiM0MzsJCQlOVUxMLCBOVUxMKTsKJiM0MzsKJiM0MzsJaWYgKHJldCAmZ3Q7IDApCiYjNDM7CQlyZXQgPSBnZW5lcmljX3dyaXRlX3N5bmMoaW9jYiwgcmV0KTsKJiM0MzsKJiM0Mzt1bmxvY2s6CiYjNDM7CWlub2RlX3VubG9jayhpbm9kZSk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogLyoKICAqIFdlIGhhdmUgbW9zdGx5IE5VTExzIGhlcmU6IHRoZSBjdXJyZW50IGRlZmF1bHRzIGFyZSBPSyBmb3IKICAqIHRoZSBtaW5peCBmaWxlc3lzdGVtLgpAQCAtMTcsMTMgJiM0Mzs0MywxMyBAQAogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9maWxlX29wZXJhdGlvbnMgPSB7CiAJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogCS5yZWFkX2l0ZXIJPSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyLAotCS53cml0ZV9pdGVyCT0gZ2VuZXJpY19maWxlX3dyaXRlX2l0ZXIsCiYjNDM7CS53cml0ZV9pdGVyCT0gbWluaXhfZmlsZV93cml0ZV9pdGVyLAogCS5tbWFwX3ByZXBhcmUJPSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLAogCS5mc3luYwkJPSBzaW1wbGVfZnN5bmMsCiAJLnNwbGljZV9yZWFkCT0gZmlsZW1hcF9zcGxpY2VfcmVhZCwKIH07CiAKLXN0YXRpYyBpbnQgbWluaXhfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MztpbnQgbWluaXhfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cikKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShkZW50cnkpOwpkaWZmIC0tZ2l0IGEvZnMvbWluaXgvaW5vZGUuYyBiL2ZzL21pbml4L2lub2RlLmMKaW5kZXggZGFmODNlNGZmMjVjOC4uMmJmNWVhOTIzNjBhMiAxMDA2NDQKLS0tIGEvZnMvbWluaXgvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9pbm9kZS5jCkBAIC00MzksNiAmIzQzOzQzOSwzMSBAQCBzdGF0aWMgaW50IG1pbml4X3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgc3NpemVfdCBtaW5peF93cml0ZWJhY2tfcmFuZ2Uoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYywKJiM0MzsJc3RydWN0IGZvbGlvICpmb2xpbywgdTY0IHBvcywgdW5zaWduZWQgaW50IGxlbiwgdTY0IGVuZF9wb3MpCiYjNDM7ewomIzQzOwlpbnQgZXJyb3I7CiYjNDM7CiYjNDM7CWlmIChwb3MgJmx0OyB3cGMtJmd0O2lvbWFwLm9mZnNldCB8fAomIzQzOwkJCXBvcyAmZ3Q7PSB3cGMtJmd0O2lvbWFwLm9mZnNldCAmIzQzOyB3cGMtJmd0O2lvbWFwLmxlbmd0aCkgewomIzQzOwkJaWYgKElOT0RFX1ZFUlNJT04od3BjLSZndDtpbm9kZSkgPT0gTUlOSVhfVjEpCiYjNDM7CQkJZXJyb3IgPSBWMV9taW5peF9pb21hcF9iZWdpbih3cGMtJmd0O2lub2RlLCBwb3MsIGxlbiwgSU9NQVBfV1JJVEUsCiYjNDM7CQkJCSZhbXA7d3BjLSZndDtpb21hcCwgTlVMTCk7CiYjNDM7CQllbHNlCiYjNDM7CQkJZXJyb3IgPSBWMl9taW5peF9pb21hcF9iZWdpbih3cGMtJmd0O2lub2RlLCBwb3MsIGxlbiwgSU9NQVBfV1JJVEUsCiYjNDM7CQkJCSZhbXA7d3BjLSZndDtpb21hcCwgTlVMTCk7CiYjNDM7CQlpZiAoZXJyb3IpCiYjNDM7CQkJcmV0dXJuIGVycm9yOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBpb21hcF9hZGRfdG9faW9lbmQod3BjLCBmb2xpbywgcG9zLCBlbmRfcG9zLCBsZW4pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX3dyaXRlYmFja19vcHMgbWluaXhfd3JpdGViYWNrX29wcyA9IHsKJiM0MzsJLndyaXRlYmFja19yYW5nZSA9IG1pbml4X3dyaXRlYmFja19yYW5nZSwKJiM0MzsJLndyaXRlYmFja19zdWJtaXQgPSBpb21hcF9pb2VuZF93cml0ZWJhY2tfc3VibWl0LAomIzQzO307CiYjNDM7CiBzdGF0aWMgaW50IG1pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jaywKIAkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKQogewpAQCAtNDQ4LDE3ICYjNDM7NDczLDQ1IEBAIHN0YXRpYyBpbnQgbWluaXhfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsb2NrLAogCQlyZXR1cm4gVjJfbWluaXhfZ2V0X2Jsb2NrKGlub2RlLCBibG9jaywgYmhfcmVzdWx0LCBjcmVhdGUpOwogfQogCi1zdGF0aWMgaW50IG1pbml4X3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiYjNDM7LyogVGhlIG9sZCBtaW5peF93cml0ZXBhZ2VzLCBwcmVzZXJ2ZWQgZm9yIGRpcmVjdG9yeSBvcGVyYXRpb25zLiAqLwomIzQzO3N0YXRpYyBpbnQgbWluaXhfYmxvY2tfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiB7CiAJcmV0dXJuIG1wYWdlX3dyaXRlcGFnZXMobWFwcGluZywgd2JjLCBtaW5peF9nZXRfYmxvY2spOwogfQogCiYjNDM7c3RhdGljIGludCBtaW5peF93cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAomIzQzOwkJc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCB3cGMgPSB7CiYjNDM7CQkuaW5vZGUgPSBtYXBwaW5nLSZndDtob3N0LAomIzQzOwkJLndiYyA9IHdiYywKJiM0MzsJCS5vcHMgPSAmYW1wO21pbml4X3dyaXRlYmFja19vcHMsCiYjNDM7CX07CiYjNDM7CXJldHVybiBpb21hcF93cml0ZXBhZ2VzKCZhbXA7d3BjKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG1pbml4X3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGZvbGlvLSZndDttYXBwaW5nLSZndDtob3N0KTsKJiM0MzsKJiM0MzsJaW9tYXBfYmlvX3JlYWRfZm9saW8oZm9saW8sIG9wcyk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBUaGUgb2xkIG1pbml4X3JlYWRfZm9saW8sIHByZXNlcnZlZCBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMuICovCiYjNDM7c3RhdGljIGludCBtaW5peF9ibG9ja19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCXJldHVybiBibG9ja19yZWFkX2Z1bGxfZm9saW8oZm9saW8sIG1pbml4X2dldF9ibG9jayk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBtaW5peF9yZWFkYWhlYWQoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWMpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKHJhYy0mZ3Q7bWFwcGluZy0mZ3Q7aG9zdCk7CiYjNDM7CiYjNDM7CWlvbWFwX2Jpb19yZWFkYWhlYWQocmFjLCBvcHMpOwomIzQzO30KJiM0MzsKIGludCBtaW5peF9wcmVwYXJlX2NodW5rKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbikKIHsKIAlyZXR1cm4gX19ibG9ja193cml0ZV9iZWdpbihmb2xpbywgcG9zLCBsZW4sIG1pbml4X2dldF9ibG9jayk7CkBAIC00ODgsMjYgJiM0Mzs1NDEsMzUgQEAgc3RhdGljIGludCBtaW5peF93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHNlY3Rvcl90IG1pbml4X2JtYXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHNlY3Rvcl90IGJsb2NrKQotewotCXJldHVybiBnZW5lcmljX2Jsb2NrX2JtYXAobWFwcGluZyxibG9jayxtaW5peF9nZXRfYmxvY2spOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBtaW5peF9hb3BzID0gewotCS5kaXJ0eV9mb2xpbwk9IGJsb2NrX2RpcnR5X2ZvbGlvLAotCS5pbnZhbGlkYXRlX2ZvbGlvID0gYmxvY2tfaW52YWxpZGF0ZV9mb2xpbywKJiM0MzsJLmRpcnR5X2ZvbGlvCT0gaW9tYXBfZGlydHlfZm9saW8sCiYjNDM7CS5pbnZhbGlkYXRlX2ZvbGlvID0gaW9tYXBfaW52YWxpZGF0ZV9mb2xpbywKIAkucmVhZF9mb2xpbyA9IG1pbml4X3JlYWRfZm9saW8sCiYjNDM7CS5yZWFkYWhlYWQgPSBtaW5peF9yZWFkYWhlYWQsCiAJLndyaXRlcGFnZXMgPSBtaW5peF93cml0ZXBhZ2VzLAomIzQzOwkubWlncmF0ZV9mb2xpbyA9IGZpbGVtYXBfbWlncmF0ZV9mb2xpbywKJiM0MzsJLmlzX3BhcnRpYWxseV91cHRvZGF0ZSA9IGlvbWFwX2lzX3BhcnRpYWxseV91cHRvZGF0ZSwKJiM0MzsJLnJlbGVhc2VfZm9saW8gPSBpb21hcF9yZWxlYXNlX2ZvbGlvLAomIzQzOwkuZXJyb3JfcmVtb3ZlX2ZvbGlvID0gZ2VuZXJpY19lcnJvcl9yZW1vdmVfZm9saW8sCiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBBIHNwZWNpYWwgYW9wcyBmb3IgZGlyZWN0b3JpZXMgdGhhdCBrZWVwcyB1c2luZyB0aGUgYnVmZmVyIGhlYWQgY2h1bmtzLCBhdAomIzQzOyAqIGxlYXN0IGZvciB0aGUgdGltZSBiZWluZy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBtaW5peF9kaXJfYW9wcyA9IHsKJiM0MzsJLmRpcnR5X2ZvbGlvID0gYmxvY2tfZGlydHlfZm9saW8sCiYjNDM7CS5pbnZhbGlkYXRlX2ZvbGlvID0gYmxvY2tfaW52YWxpZGF0ZV9mb2xpbywKJiM0MzsJLnJlYWRfZm9saW8gPSBtaW5peF9ibG9ja19yZWFkX2ZvbGlvLAogCS53cml0ZV9iZWdpbiA9IG1pbml4X3dyaXRlX2JlZ2luLAogCS53cml0ZV9lbmQgPSBnZW5lcmljX3dyaXRlX2VuZCwKIAkubWlncmF0ZV9mb2xpbyA9IGJ1ZmZlcl9taWdyYXRlX2ZvbGlvLAotCS5ibWFwID0gbWluaXhfYm1hcCwKLQkuZGlyZWN0X0lPID0gbm9vcF9kaXJlY3RfSU8KJiM0MzsJLndyaXRlcGFnZXMgPSBtaW5peF9ibG9ja193cml0ZXBhZ2VzLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHsKIAkuZ2V0X2xpbmsJPSBwYWdlX2dldF9saW5rLAogCS5nZXRhdHRyCT0gbWluaXhfZ2V0YXR0ciwKJiM0MzsJLnNldGF0dHIJPSBtaW5peF9zZXRhdHRyLAogfTsKIAogdm9pZCBtaW5peF9zZXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgZGV2X3QgcmRldikKQEAgLTUxOSw3ICYjNDM7NTgxLDcgQEAgdm9pZCBtaW5peF9zZXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgZGV2X3QgcmRldikKIAl9IGVsc2UgaWYgKFNfSVNESVIoaW5vZGUtJmd0O2lfbW9kZSkpIHsKIAkJaW5vZGUtJmd0O2lfb3AgPSAmYW1wO21pbml4X2Rpcl9pbm9kZV9vcGVyYXRpb25zOwogCQlpbm9kZS0mZ3Q7aV9mb3AgPSAmYW1wO21pbml4X2Rpcl9vcGVyYXRpb25zOwotCQlpbm9kZS0mZ3Q7aV9tYXBwaW5nLSZndDthX29wcyA9ICZhbXA7bWluaXhfYW9wczsKJiM0MzsJCWlub2RlLSZndDtpX21hcHBpbmctJmd0O2Ffb3BzID0gJmFtcDttaW5peF9kaXJfYW9wczsKIAl9IGVsc2UgaWYgKFNfSVNMTksoaW5vZGUtJmd0O2lfbW9kZSkpIHsKIAkJaW5vZGUtJmd0O2lfb3AgPSAmYW1wO21pbml4X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKIAkJaW5vZGVfbm9oaWdobWVtKGlub2RlKTsKQEAgLTc4Niw0ICYjNDM7ODQ4LDMgQEAgbW9kdWxlX2luaXQoaW5pdF9taW5peF9mcykKIG1vZHVsZV9leGl0KGV4aXRfbWluaXhfZnMpCiBNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtNaW5peCBmaWxlIHN5c3RlbSYjMzQ7KTsKIE1PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwotCmRpZmYgLS1naXQgYS9mcy9taW5peC9pb21hcC5jIGIvZnMvbWluaXgvaW9tYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi45MGUwMTZhYWEwMWVhCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbWluaXgvaW9tYXAuYwpAQCAtMCwwICYjNDM7MSwxMjIgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7LyoKJiM0MzsgKiBpb21hcCBmdW5jdGlvbnMgZm9yIG1pbml4LgomIzQzOyAqLwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtaW5peF9jaGFpbl9jbGVhbnVwKEluZGlyZWN0ICpjaGFpbiwgSW5kaXJlY3QgKnBhcnRpYWwpCiYjNDM7ewomIzQzOwl3aGlsZSAocGFydGlhbCAmZ3Q7IGNoYWluKSB7CiYjNDM7CQlicmVsc2UocGFydGlhbC0mZ3Q7YmgpOwomIzQzOwkJcGFydGlhbC0tOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtaW5peF9pb21hcF9zZXRfbWFwcGVkKHN0cnVjdCBpb21hcCAqaW9tYXAsIHNlY3Rvcl90IHBoeXMsCiYjNDM7CQl1bnNpZ25lZCBpbnQgYmxrYml0cywgc2VjdG9yX3QgaWJsb2NrKQomIzQzO3sKJiM0MzsJaW9tYXAtJmd0O3R5cGUgPSBJT01BUF9NQVBQRUQ7CiYjNDM7CWlvbWFwLSZndDthZGRyID0gKHU2NClwaHlzICZsdDsmbHQ7IGJsa2JpdHM7CiYjNDM7CWlvbWFwLSZndDtsZW5ndGggPSAxICZsdDsmbHQ7IGJsa2JpdHM7CiYjNDM7CWlvbWFwLSZndDtvZmZzZXQgPSAodTY0KWlibG9jayAmbHQ7Jmx0OyBibGtiaXRzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbWluaXhfaW9tYXBfc2V0X2hvbGUoc3RydWN0IGlvbWFwICppb21hcCwKJiM0MzsJCXVuc2lnbmVkIGludCBibGtiaXRzLCBzZWN0b3JfdCBpYmxvY2spCiYjNDM7ewomIzQzOwlpb21hcC0mZ3Q7dHlwZSA9IElPTUFQX0hPTEU7CiYjNDM7CWlvbWFwLSZndDthZGRyID0gSU9NQVBfTlVMTF9BRERSOwomIzQzOwlpb21hcC0mZ3Q7bGVuZ3RoID0gMSAmbHQ7Jmx0OyBibGtiaXRzOwomIzQzOwlpb21hcC0mZ3Q7b2Zmc2V0ID0gKHU2NClpYmxvY2sgJmx0OyZsdDsgYmxrYml0czsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBtaW5peF9pb21hcF9iZWdpbiAtIG1hcCBhIGZpbGUgcmFuZ2UgdG8gZGlzayBibG9ja3MuIEl0IGFjdHMgYXMgYSByZXBsYWNlbWVudAomIzQzOyAqIGZvciBnZXRfYmxvY2sgaW4gaXRyZWVfY29tbW9uLmMsIGF0IGxlYXN0IGluIHRoZSBpbXBvcnRhbnQgd2F5cywgYW5kIGlzCiYjNDM7ICogYWRhcHRlZCBmcm9tIGl0LCBidXQgaXQgdXNlcyBpb21hcCBpbnN0ZWFkIG9mIGJ1ZmZlcl9oZWFkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgbWluaXhfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCwKJiM0MzsJdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBzdHJ1Y3QgaW9tYXAgKnNyY21hcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0mZ3Q7aV9zYjsKJiM0MzsJdW5zaWduZWQgaW50IGJsa2JpdHMgPSBzYi0mZ3Q7c19ibG9ja3NpemVfYml0czsKJiM0MzsJc2VjdG9yX3QgaWJsb2NrID0gb2Zmc2V0ICZndDsmZ3Q7IGJsa2JpdHM7CiYjNDM7CWludCBjcmVhdGUgPSBmbGFncyAmYW1wOyBJT01BUF9XUklURTsKJiM0MzsKJiM0MzsJaW50IG9mZnNldHNbREVQVEhdOwomIzQzOwlJbmRpcmVjdCBjaGFpbltERVBUSF07CiYjNDM7CUluZGlyZWN0ICpwYXJ0aWFsOwomIzQzOwlpbnQgZGVwdGggPSBibG9ja190b19wYXRoKGlub2RlLCBpYmxvY2ssIG9mZnNldHMpOwomIzQzOwlpbnQgbGVmdDsKJiM0MzsJaW50IGVyciA9IC1FSU87CiYjNDM7CiYjNDM7CXNlY3Rvcl90IHBoeXM7CiYjNDM7CiYjNDM7CS8qIGJsb2NrIGlzIGJleW9uZCBtYXggZmlsZSBzaXplICovCiYjNDM7CWlmIChkZXB0aCA9PSAwKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlvbWFwLSZndDtiZGV2ID0gaW5vZGUtJmd0O2lfc2ItJmd0O3NfYmRldjsKJiM0MzsKJiM0MztyZXJlYWQ6CiYjNDM7CXBhcnRpYWwgPSBnZXRfYnJhbmNoKGlub2RlLCBkZXB0aCwgb2Zmc2V0cywgY2hhaW4sICZhbXA7ZXJyKTsKJiM0MzsKJiM0MzsJLyogU2ltcGxlc3QgY2FzZSAtIGJsb2NrIGZvdW5kLCBubyBhbGxvY2F0aW9uIG5lZWRlZCAqLwomIzQzOwlpZiAoIXBhcnRpYWwpIHsKJiM0MzsJCWlvbWFwLSZndDtmbGFncyA9IDA7CiYjNDM7CQlwaHlzID0gYmxvY2tfdG9fY3B1KGNoYWluW2RlcHRoIC0gMV0ua2V5KTsKJiM0MzsJCXBhcnRpYWwgPSBjaGFpbiYjNDM7ZGVwdGgtMTsKJiM0MzsJCW1pbml4X2lvbWFwX3NldF9tYXBwZWQoaW9tYXAsIHBoeXMsIGJsa2JpdHMsIGlibG9jayk7CiYjNDM7CQltaW5peF9jaGFpbl9jbGVhbnVwKGNoYWluLCBwYXJ0aWFsKTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogTmV4dCBzaW1wbGUgY2FzZSAtIHBsYWluIGxvb2t1cCBvciBmYWlsZWQgcmVhZCBvZiBpbmRpcmVjdCBibG9jayAqLwomIzQzOwlpZiAoIWNyZWF0ZSB8fCBlcnIgPT0gLUVJTykgewomIzQzOwkJbWluaXhfaW9tYXBfc2V0X2hvbGUoaW9tYXAsIGJsa2JpdHMsIGlibG9jayk7CiYjNDM7CQltaW5peF9jaGFpbl9jbGVhbnVwKGNoYWluLCBwYXJ0aWFsKTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhpcyBpcyBoZWxkIG92ZXIgZnJvbSB0aGUgb3JpZ2luYWwgZ2V0X2Jsb2NrIGxvZ2ljLCB3aGVyZSBpdAomIzQzOwkgKiBhY3RlZCBhcyBhIGd1YXJkIGluIGNhc2UgdHJ1bmNhdGUoKSBkZWxldGVkIGJsb2NrcyBmcm9tIHVuZGVyIHRoYXQKJiM0MzsJICogZnVuY3Rpb24uIFRoZXJlIHNob3VsZCBub3QgYmUgYSByYWNlIHdpdGggaW9tYXAgb3BlcmF0aW9ucywgYnV0CiYjNDM7CSAqIHdlJiMzOTtyZSByZXRhaW5pbmcgdGhlIGRlZmVuc2l2ZSBjb2RpbmcgaGVyZSB0byBiZSBleHRyYSBzYWZlIGp1c3QgaW4KJiM0MzsJICogY2FzZS4KJiM0MzsJICovCiYjNDM7CWlmIChlcnIgPT0gLUVBR0FJTikgewomIzQzOwkJbWluaXhfY2hhaW5fY2xlYW51cChjaGFpbiwgcGFydGlhbCk7CiYjNDM7CQlnb3RvIHJlcmVhZDsKJiM0MzsJfQomIzQzOwomIzQzOwlsZWZ0ID0gKGNoYWluICYjNDM7IGRlcHRoKSAtIHBhcnRpYWw7CiYjNDM7CWVyciA9IGFsbG9jX2JyYW5jaChpbm9kZSwgbGVmdCwgb2Zmc2V0cyAmIzQzOyAocGFydGlhbCAtIGNoYWluKSwgcGFydGlhbCk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCW1pbml4X2NoYWluX2NsZWFudXAoY2hhaW4sIHBhcnRpYWwpOwomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoc3BsaWNlX2JyYW5jaChpbm9kZSwgY2hhaW4sIHBhcnRpYWwsIGxlZnQpICZsdDsgMCkgewomIzQzOwkJbWluaXhfY2hhaW5fY2xlYW51cChjaGFpbiwgcGFydGlhbCk7CiYjNDM7CQlnb3RvIHJlcmVhZDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTdWNjZXNzZnVsIGFsbG9jYXRpb24sIG1hcHBpbmcgaXQuICovCiYjNDM7CWlvbWFwLSZndDtmbGFncyA9IElPTUFQX0ZfTkVXOwomIzQzOwlwaHlzID0gYmxvY2tfdG9fY3B1KGNoYWluW2RlcHRoIC0gMV0ua2V5KTsKJiM0MzsJbWluaXhfaW9tYXBfc2V0X21hcHBlZChpb21hcCwgcGh5cywgYmxrYml0cywgaWJsb2NrKTsKJiM0MzsJbWluaXhfY2hhaW5fY2xlYW51cChjaGFpbiwgcGFydGlhbCk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogbWluaXhfaW9tYXBfZW5kIGVuZHMgdXAgYmVpbmcgYSBub3A7IHNpbmNlIG1pbml4IGRvZXNuJiMzOTt0IGhhdmUgYW55IGV4dGVudHMgb3IKJiM0MzsgKiB0cmFuc2FjdGlvbnMgdG8gd29ycnkgYWJvdXQsIHRoZXJlIGlzbiYjMzk7dCBhbnl0aGluZyB0byB1cGRhdGUgaGVyZS4gVGhlIG9uLWRpc2sKJiM0MzsgKiBpbmRpcmVjdCBibG9ja3MgZ2V0IGRpcnRpZWQgaW4gbWluaXhfaW9tYXBfYmVnaW4uCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBtaW5peF9pb21hcF9lbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCwKJiM0MzsJc3NpemVfdCB3cml0dGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXApCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CmRpZmYgLS1naXQgYS9mcy9taW5peC9pdHJlZV9jb21tb24uYyBiL2ZzL21pbml4L2l0cmVlX2NvbW1vbi5jCmluZGV4IGMzY2QyYzc1YWY5Y2UuLmQ3M2FiMWNhYWNmZWMgMTAwNjQ0Ci0tLSBhL2ZzL21pbml4L2l0cmVlX2NvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L2l0cmVlX2NvbW1vbi5jCkBAIC0zMTEsNyAmIzQzOzMxMSwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdHJ1bmNhdGUgKHN0cnVjdCBpbm9kZSAqIGlub2RlKQogCWxvbmcgaWJsb2NrOwogCiAJaWJsb2NrID0gKGlub2RlLSZndDtpX3NpemUgJiM0Mzsgc2ItJmd0O3NfYmxvY2tzaXplIC0xKSAmZ3Q7Jmd0OyBzYi0mZ3Q7c19ibG9ja3NpemVfYml0czsKLQlibG9ja190cnVuY2F0ZV9wYWdlKGlub2RlLSZndDtpX21hcHBpbmcsIGlub2RlLSZndDtpX3NpemUsIGdldF9ibG9jayk7CiYjNDM7CiYjNDM7CS8qIERlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBpbm9kZSBiZWluZyB0cnVuY2F0ZWQgaXMgYSBkaXJlY3Rvcnkgb3Igbm90LAomIzQzOwkgKiB3ZSBuZWVkIHRvIGVpdGhlciBjYWxsIGlvbWFwX3RydW5jYXRlX3BhZ2Ugb3IgYmxvY2tfdHJ1bmNhdGVfcGFnZS4KJiM0MzsJICovCiYjNDM7CWlmIChTX0lTRElSKGlub2RlLSZndDtpX21vZGUpKQomIzQzOwkJYmxvY2tfdHJ1bmNhdGVfcGFnZShpbm9kZS0mZ3Q7aV9tYXBwaW5nLCBpbm9kZS0mZ3Q7aV9zaXplLCBnZXRfYmxvY2spOwomIzQzOwllbHNlCiYjNDM7CQlpb21hcF90cnVuY2F0ZV9wYWdlKGlub2RlLCBpbm9kZS0mZ3Q7aV9zaXplLCBOVUxMLAomIzQzOwkJCW1pbml4X2lvbWFwX29wc192ZXIoaW5vZGUpLCBOVUxMLCBOVUxMKTsKIAogCW4gPSBibG9ja190b19wYXRoKGlub2RlLCBpYmxvY2ssIG9mZnNldHMpOwogCWlmICghbikKZGlmZiAtLWdpdCBhL2ZzL21pbml4L2l0cmVlX3YxLmMgYi9mcy9taW5peC9pdHJlZV92MS5jCmluZGV4IDFmZWQ5MDYwNDJhYTguLjU4YzI5ZjQ0NDNkMzcgMTAwNjQ0Ci0tLSBhL2ZzL21pbml4L2l0cmVlX3YxLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbWluaXgvaXRyZWVfdjEuYwpAQCAtNDksNiAmIzQzOzQ5LDE4IEBAIHN0YXRpYyBpbnQgYmxvY2tfdG9fcGF0aChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgbG9uZyBibG9jaywgaW50IG9mZnNldHNbREVQVEhdKQogfQogCiAjaW5jbHVkZSAmIzM0O2l0cmVlX2NvbW1vbi5jJiMzNDsKJiM0MzsvKiBOT1RBIEJFTkU6CiYjNDM7ICoKJiM0MzsgKiBUaGlzIGlzIGlja3kgdG8gbWUsIGJ1dCBhdCB0aGUgc2FtZSB0aW1lIGhhdmluZyBpdCBiZSBhIHN0YW5kYWxvbmUgQyBmaWxlCiYjNDM7ICogdGhhdCYjMzk7cyBjb21waWxlZCB0byBvYmplY3QgZm9ybSBhbmQgbGlua2VkIHNlcGFyYXRlbHkgbGlrZSBpdCBpcyBpbiB4aWFmcyBpcwomIzQzOyAqIG11Y2ggbmFzdGllciBpbiBtaW5peCBiZWNhdXNlIG9mIHRoZSBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIG1pbml4IGZzIHRoYXQKJiM0MzsgKiBoYXZlIHNvbWUgdmVyeSwgdmVyeSBkaWZmZXJlbnQgYXNwZWN0cywgbGlrZSB0aGUgc2l6ZSBvZiBibG9ja190LiBJIGRvbiYjMzk7dAomIzQzOyAqIGxpa2UgaXQsIGJ1dCBzaW5jZSBtaW5peCBhbHJlYWR5IGhhcyB0aGlzIHBhdHRlcm4gd2hlcmUgYSBjb21tb24gaXRyZWUgZmlsZQomIzQzOyAqIGlzIGluY2x1ZGVkIGluIHRoZSBpdHJlZV92MSBhbmQgaXRyZWVfdjIoYW5kIHYzKSBmaWxlcywgSSYjMzk7bSBpbmNsdWRpbmcgaW9tYXAuYwomIzQzOyAqIGluIHRoZXNlIGZpbGVzIGFzIHdlbGwuIEl0IGRvZXMgYXQgbGVhc3QgYXZvaWQgZXhwb3J0aW5nIHNvbWUgY3VycmVudGx5CiYjNDM7ICogc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGFyZW4mIzM5O3QgbmVlZGVkIGFueXdoZXJlIGJ1dCBpdHJlZV9jb21tb24uYyBhbmQgaW9tYXAuYy4KJiM0MzsgKi8KJiM0MzsjaW5jbHVkZSAmIzM0O2lvbWFwLmMmIzM0OwogCiBpbnQgVjFfbWluaXhfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBsb25nIGJsb2NrLAogCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpCkBAIC02MSw3ICYjNDM7NzMsMTggQEAgdm9pZCBWMV9taW5peF90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkKIAl0cnVuY2F0ZShpbm9kZSk7CiB9CiAKLXVuc2lnbmVkIFYxX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKJiM0Mzt1bnNpZ25lZCBpbnQgVjFfbWluaXhfYmxvY2tzKGxvZmZfdCBzaXplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCXJldHVybiBuYmxvY2tzKHNpemUsIHNiKTsKIH0KJiM0MzsKJiM0MztpbnQgVjFfbWluaXhfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCwKJiM0MzsJdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBzdHJ1Y3QgaW9tYXAgKnNyY21hcCkKJiM0Mzt7CiYjNDM7CXJldHVybiBtaW5peF9pb21hcF9iZWdpbihpbm9kZSwgb2Zmc2V0LCBsZW5ndGgsIGZsYWdzLCBpb21hcCwgc3JjbWFwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMV9taW5peF9pb21hcF9vcHMgPSB7CiYjNDM7CS5pb21hcF9iZWdpbiA9IFYxX21pbml4X2lvbWFwX2JlZ2luLAomIzQzOwkuaW9tYXBfZW5kICAgPSBtaW5peF9pb21hcF9lbmQsCiYjNDM7fTsKZGlmZiAtLWdpdCBhL2ZzL21pbml4L2l0cmVlX3YyLmMgYi9mcy9taW5peC9pdHJlZV92Mi5jCmluZGV4IDlkMDBmMzFhMmQ5ZDEuLmZjN2E1YWU4ZmExY2EgMTAwNjQ0Ci0tLSBhL2ZzL21pbml4L2l0cmVlX3YyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbWluaXgvaXRyZWVfdjIuYwpAQCAtNTcsNiAmIzQzOzU3LDEwIEBAIHN0YXRpYyBpbnQgYmxvY2tfdG9fcGF0aChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgbG9uZyBibG9jaywgaW50IG9mZnNldHNbREVQVEhdKQogfQogCiAjaW5jbHVkZSAmIzM0O2l0cmVlX2NvbW1vbi5jJiMzNDsKJiM0MzsvKiBTZWUgdGhlIG5vdGUgaW4gaXRyZWVfdjEgaW4gYSBjb21tZW50IHRoYXQgc3RhcnRzICYjMzQ7Tk9UQSBCRU5FJiMzNDsgZm9yIGFuCiYjNDM7ICogZXhwbGFuYXRpb24gZm9yIHdoeSBpb21hcC5jIGlzIGluY2x1ZGVkIGhlcmUuCiYjNDM7ICovCiYjNDM7I2luY2x1ZGUgJiMzNDtpb21hcC5jJiMzNDsKIAogaW50IFYyX21pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgbG9uZyBibG9jaywKIAkJCXN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKQpAQCAtNjksNyAmIzQzOzczLDE4IEBAIHZvaWQgVjJfbWluaXhfdHJ1bmNhdGUoc3RydWN0IGlub2RlICogaW5vZGUpCiAJdHJ1bmNhdGUoaW5vZGUpOwogfQogCi11bnNpZ25lZCBWMl9taW5peF9ibG9ja3MobG9mZl90IHNpemUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiYjNDM7dW5zaWduZWQgaW50IFYyX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAlyZXR1cm4gbmJsb2NrcyhzaXplLCBzYik7CiB9CiYjNDM7CiYjNDM7aW50IFYyX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsCiYjNDM7CXVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApCiYjNDM7ewomIzQzOwlyZXR1cm4gbWluaXhfaW9tYXBfYmVnaW4oaW5vZGUsIG9mZnNldCwgbGVuZ3RoLCBmbGFncywgaW9tYXAsIHNyY21hcCk7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBpb21hcF9vcHMgVjJfbWluaXhfaW9tYXBfb3BzID0gewomIzQzOwkuaW9tYXBfYmVnaW4gPSBWMl9taW5peF9pb21hcF9iZWdpbiwKJiM0MzsJLmlvbWFwX2VuZCAgID0gbWluaXhfaW9tYXBfZW5kLAomIzQzO307CmRpZmYgLS1naXQgYS9mcy9taW5peC9taW5peC5oIGIvZnMvbWluaXgvbWluaXguaAppbmRleCA3ODcyMmNlMjJlMWUxLi45MDM1NjA0YzY4Y2ExIDEwMDY0NAotLS0gYS9mcy9taW5peC9taW5peC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L21pbml4LmgKQEAgLTUsNiAmIzQzOzUsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2ZzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFnZW1hcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21pbml4X2ZzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lvbWFwLmgmZ3Q7CiAKICNkZWZpbmUgSU5PREVfVkVSU0lPTihpbm9kZSkJbWluaXhfc2IoaW5vZGUtJmd0O2lfc2IpLSZndDtzX3ZlcnNpb24KICNkZWZpbmUgTUlOSVhfVjEJCTB4MDAwMQkJLyogb3JpZ2luYWwgbWluaXggZnMgKi8KQEAgLTU3LDYgJiM0Mzs1OCw4IEBAIHZvaWQgbWluaXhfZnJlZV9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsb25nIGJsb2NrKTsKIHVuc2lnbmVkIGxvbmcgbWluaXhfY291bnRfZnJlZV9ibG9ja3Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CiBpbnQgbWluaXhfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICosIGNvbnN0IHN0cnVjdCBwYXRoICosCiAJCXN0cnVjdCBrc3RhdCAqLCB1MzIsIHVuc2lnbmVkIGludCk7CiYjNDM7aW50IG1pbml4X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKJiM0MzsJc3RydWN0IGlhdHRyICphdHRyKTsKIGludCBtaW5peF9wcmVwYXJlX2NodW5rKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbik7CiBzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1pbml4X2dldF9tZXRhZGF0YV9iaHMoc3RydWN0IGlub2RlICppbm9kZSk7CiAKQEAgLTc2LDEzICYjNDM7NzksMjMgQEAgaW50IG1pbml4X21ha2VfZW1wdHkoc3RydWN0IGlub2RlKiwgc3RydWN0IGlub2RlKik7CiBpbnQgbWluaXhfZW1wdHlfZGlyKHN0cnVjdCBpbm9kZSopOwogaW50IG1pbml4X3NldF9saW5rKHN0cnVjdCBtaW5peF9kaXJfZW50cnkgKmRlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQlzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKJiM0MzsKIHN0cnVjdCBtaW5peF9kaXJfZW50cnkgKm1pbml4X2RvdGRvdChzdHJ1Y3QgaW5vZGUqLCBzdHJ1Y3QgZm9saW8gKiopOwogaW5vX3QgbWluaXhfaW5vZGVfYnlfbmFtZShzdHJ1Y3QgZGVudHJ5Kik7CiAKJiM0MztpbnQgVjFfbWluaXhfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwKJiM0MzsJbG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLAomIzQzOwlzdHJ1Y3QgaW9tYXAgKnNyY21hcCk7CiYjNDM7aW50IFYyX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsCiYjNDM7CWxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCwKJiM0MzsJc3RydWN0IGlvbWFwICpzcmNtYXApOwomIzQzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBtaW5peF9kaXJfaW5vZGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2Rpcl9vcGVyYXRpb25zOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYxX21pbml4X2lvbWFwX29wczsKJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMl9taW5peF9pb21hcF9vcHM7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1pbml4X3NiX2luZm8gKm1pbml4X3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CkBAIC05NCwxMSAmIzQzOzEwNywxNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtaW5peF9pbm9kZV9pbmZvICptaW5peF9pKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJcmV0dXJuIGNvbnRhaW5lcl9vZihpbm9kZSwgc3RydWN0IG1pbml4X2lub2RlX2luZm8sIHZmc19pbm9kZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbWluaXhfYmxvY2tzX25lZWRlZCh1bnNpZ25lZCBiaXRzLCB1bnNpZ25lZCBibG9ja3NpemUpCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWluaXhfYmxvY2tzX25lZWRlZCh1bnNpZ25lZCBpbnQgYml0cywgdW5zaWduZWQgaW50IGJsb2Nrc2l6ZSkKIHsKIAlyZXR1cm4gRElWX1JPVU5EX1VQX1BPVzIoYml0cywgYmxvY2tzaXplICogOCk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm1pbml4X2lvbWFwX29wc192ZXIoc3RydWN0IGlub2RlICppbm9kZSkKJiM0Mzt7CiYjNDM7CXJldHVybiAoSU5PREVfVkVSU0lPTihpbm9kZSkgPT0gTUlOSVhfVjEpID8KJiM0MzsJCSZhbXA7VjFfbWluaXhfaW9tYXBfb3BzIDogJmFtcDtWMl9taW5peF9pb21hcF9vcHM7CiYjNDM7fQomIzQzOwogI2lmIGRlZmluZWQoQ09ORklHX01JTklYX0ZTX05BVElWRV9FTkRJQU4pICZhbXA7JmFtcDsgXAogCWRlZmluZWQoQ09ORklHX01JTklYX0ZTX0JJR19FTkRJQU5fMTZCSVRfSU5ERVhFRCkKIApAQCAtMTI4LDcgJiM0MzsxNDcsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIG1pbml4X2Jsb2Nrc19uZWVkZWQodW5zaWduZWQgYml0cywgdW5zaWduZWQgYmxvY2tzaXplKQogICogYmlnLWVuZGlhbiAxNmJpdCBpbmRleGVkIGJpdG1hcHMKICAqLwogCi1zdGF0aWMgaW5saW5lIGludCBtaW5peF9maW5kX2ZpcnN0X3plcm9fYml0KGNvbnN0IHZvaWQgKnZhZGRyLCB1bnNpZ25lZCBzaXplKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1pbml4X2ZpbmRfZmlyc3RfemVyb19iaXQoY29uc3Qgdm9pZCAqdmFkZHIsIHVuc2lnbmVkIGludCBzaXplKQogewogCWNvbnN0IHVuc2lnbmVkIHNob3J0ICpwID0gdmFkZHIsICphZGRyID0gdmFkZHI7CiAJdW5zaWduZWQgc2hvcnQgbnVtOwpkaWZmIC0tZ2l0IGEvZnMvbWluaXgvbmFtZWkuYyBiL2ZzL21pbml4L25hbWVpLmMKaW5kZXggNTUyNWJhMzY3ZWQ3NC4uNTJlMTE1MDEzYWJmOCAxMDA2NDQKLS0tIGEvZnMvbWluaXgvbmFtZWkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9uYW1laS5jCkBAIC02LDYgJiM0Mzs2LDcgQEAKICAqLwogCiAjaW5jbHVkZSAmIzM0O21pbml4LmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pb21hcC5oJmd0OwogCiBzdGF0aWMgaW50IGFkZF9ub25kaXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewpAQCAtODQsMTIgJiM0Mzs4NSwxNiBAQCBzdGF0aWMgaW50IG1pbml4X3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQlyZXR1cm4gUFRSX0VSUihpbm9kZSk7CiAKIAltaW5peF9zZXRfaW5vZGUoaW5vZGUsIDApOwotCWVyciA9IHBhZ2Vfc3ltbGluayhpbm9kZSwgc3ltbmFtZSwgaSk7CiYjNDM7CWVyciA9IGlvbWFwX3N5bWxpbmtfd3JpdGUoaW5vZGUsIHN5bW5hbWUsIGksIG1pbml4X2lvbWFwX29wc192ZXIoaW5vZGUpLCBOVUxMLCBOVUxMKTsKJiM0MzsKIAlpZiAodW5saWtlbHkoZXJyKSkgewogCQlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7CiAJCWlwdXQoaW5vZGUpOwogCQlyZXR1cm4gZXJyOwogCX0KJiM0MzsKJiM0MzsJaV9zaXplX3dyaXRlKGlub2RlLCBpIC0gMSk7CiYjNDM7CiAJcmV0dXJuIGFkZF9ub25kaXIoZGVudHJ5LCBpbm9kZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW9tYXAuaCBiL2luY2x1ZGUvbGludXgvaW9tYXAuaAppbmRleCA4Yzc1NGViOTc0ZmJmLi5hYjI3YTNhNWI4ZDJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lvbWFwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9pb21hcC5oCkBAIC00NzEsNiAmIzQzOzQ3MSw5IEBAIGxvZmZfdCBpb21hcF9zZWVrX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwKIAkJY29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzKTsKIHNlY3Rvcl90IGlvbWFwX2JtYXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHNlY3Rvcl90IGJubywKIAkJY29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzKTsKJiM0MztpbnQgaW9tYXBfc3ltbGlua193cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICp0YXJnZXQsIGludCBsZW4sCiYjNDM7CQljb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsCiYjNDM7CQljb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGVfb3BzICp3cml0ZV9vcHMsIHZvaWQgKnByaXZhdGUpOwogCiAvKgogICogRmxhZ3MgZm9yIGlvbWFwX2lvZW5kLSZndDtpb19mbGFncy4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM4MQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNaW5peCBJT01BUCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgcHJldHR5IHN1YnN0YW50aWFsIGNoYW5nZSB0byB0aGUgTWluaXggZmlsZXN5c3RlbS4gSXQmIzM5O3MgbW92aW5nIE1pbml4IHRvIHVzZSBpb21hcCBmb3IgYnVmZmVyZWQgSS9PLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IGFyY2hpdGVjdHVyYWwgc2hpZnQuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB0aGUga2V5IG5ldyBjb21wb25lbnQgaXMgYGlvbWFwX3N5bWxpbmtfd3JpdGVgIGluIGBmcy9pb21hcC9idWZmZXJlZC1pby5jYCwgYW5kIHRoZSBpbnRlZ3JhdGlvbiBpcyBkb25lIGluIGBmcy9taW5peC9uYW1laS5jYC4gIFNpbmNlIE1pbml4IGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdlJiMzOTtkIGVuY291bnRlciBpbiBjZXJ0YWluIHZpcnR1YWxpemF0aW9uIHNldHVwcywgdGhpcyBpcyBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBhIGNsb3NlciBsb29rLiAqV29ydGhGdXp6aW5nPXRydWUqIGlzIGEgZ28uCgpOb3csIGxldCYjMzk7cyBicmVhayBkb3duIHRoZSBmdW5jdGlvbnMgdGhhdCBuZWVkIGNhcmVmdWwgYXR0ZW50aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIGFyZWFzOgoKKiAgICoqYGlvbWFwX3N5bWxpbmtfd3JpdGVgKio6IFRoZSBuZXcga2lkIG9uIHRoZSBibG9jayBmb3Igc3ltbGluayB3cml0ZXMsIHNvIHRoYXQgaXMgYSBnb29kIGZpcnN0IHN0b3AuCiogICAqKmBtaW5peF9maWxlX3dyaXRlX2l0ZXJgLCBgbWluaXhfd3JpdGViYWNrX3JhbmdlYCwgYG1pbml4X3dyaXRlcGFnZXNgLCBgbWluaXhfcmVhZF9mb2xpb2AsIGBtaW5peF9yZWFkYWhlYWRgKio6IFRoZXNlIGZ1bmN0aW9ucyBpbiBgZnMvbWluaXgvZmlsZS5jYCBhbmQgYGZzL21pbml4L2lub2RlLmNgIHJlcHJlc2VudCB0aGUgY29yZSBmaWxlIG9wZXJhdGlvbnMgYW5kIHdyaXRlYmFjayBtZWNoYW5pc21zIHdpdGhpbiB0aGUgTWluaXggZmlsZXN5c3RlbSBpdHNlbGYsIGFuZCB3aWxsIGhhdmUgdG8gYmUgdGVzdGVkIHRob3JvdWdobHkgd2l0aCB0aGUgaW9tYXAgdHJhbnNpdGlvbi4KKiAgICoqYG1pbml4X2lvbWFwX2JlZ2luYCwgYFYxX21pbml4X2lvbWFwX2JlZ2luYCwgYFYyX21pbml4X2lvbWFwX2JlZ2luYCoqOiBUaGVzZSBpb21hcC1zcGVjaWZpYyBmdW5jdGlvbnMgYXJlIHdoZXJlIHRoZSBNaW5peCBmaWxlc3lzdGVtIG5vdyBpbnRlcmZhY2VzIHdpdGggaW9tYXAsIHNvIHRoZXkgYXJlIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgaW50ZWdyYXRpb24gd29ya3MuCgpJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfTUlOSVhfRlNgIGlzIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9uLCB3aGljaCBsb29rcyBnb29kLiAgVGhpcyBwcm92aWRlcyB0aGUgZm91bmRhdGlvbiwgYW5kIG5vdyBJIGNhbiBzdGFydCBkaWdnaW5nIGludG8gdGhlc2UgZnVuY3Rpb25zIGFuZCB0aGUgbmV3IGlvbWFwIGludGVncmF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMgYW5kIGFueSBwb3RlbnRpYWwgcGl0ZmFsbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1JTklYX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbWluaXgvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9taW5peC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9taW5peC9LY29uZmlnOjI6Y29uZmlnIE1JTklYX0ZTXG5mcy9taW5peC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtNaW5peCBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvbWluaXgvS2NvbmZpZy0yMC1cbmZzL21pbml4L0tjb25maWc6MjE6Y29uZmlnIE1JTklYX0ZTX05BVElWRV9FTkRJQU5cbmZzL21pbml4L0tjb25maWctMjItXHRkZWZfYm9vbCBNSU5JWF9GU1xuLS1cbmZzL21pbml4L0tjb25maWctMjQtXG5mcy9taW5peC9LY29uZmlnOjI1OmNvbmZpZyBNSU5JWF9GU19CSUdfRU5ESUFOXzE2QklUX0lOREVYRURcbmZzL21pbml4L0tjb25maWctMjYtXHRkZWZfYm9vbCBNSU5JWF9GU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDIwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBDaGVja2xpc3QqKgoKT2theSwgc28gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBJJiMzOTttIGxvb2tpbmcgYXQgaGFzIGBNSU5JWF9GU2AgZW5hYmxlZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7UmlnaHQsIHdoYXQgZWxzZSBkbyBJIG5lZWQgdG8gY29uc2lkZXIgd2l0aCB0aGlzPyYjMzQ7IEdpdmVuIG15IGV4cGVydGlzZSwgSSBhbHJlYWR5IGtub3cgdGhhdCBgTUlOSVhfRlNgIGxpa2VseSBkZXBlbmRzIG9uIG90aGVyIGZ1bmRhbWVudGFsIGNvbXBvbmVudHMuIExldCYjMzk7cyBzZWUuLi4gYSBxdWljayBjaGVjayByZXZlYWxzIHRoYXQgYE1JTklYX0ZTYCBzcGVjaWZpY2FsbHkgcmVxdWlyZXMgYEJMT0NLYC4gVGhpcyBtZWFucyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGBCTE9DS2AgY29uZmlndXJhdGlvbiBpcyBhbHNvIGNvcnJlY3RseSBzZXQsIG9yIHRoYXQgSSBoYXZlIGEgcGxhbiB0byBpbXBsZW1lbnQgaXQuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBteSBjb25maWd1cmF0aW9uIHN0ZXBzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9taW5peC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL21pbml4L0tjb25maWc9Mj1jb25maWcgTUlOSVhfRlNcbmZzL21pbml4L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O01pbml4IGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbmZzL21pbml4L0tjb25maWc6NDpcdGRlcGVuZHMgb24gQkxPQ0tcbmZzL21pbml4L0tjb25maWctNS1cdHNlbGVjdCBCVUZGRVJfSEVBRFxuLS1cbmZzL21pbml4L0tjb25maWc9MjE9Y29uZmlnIE1JTklYX0ZTX05BVElWRV9FTkRJQU5cbmZzL21pbml4L0tjb25maWctMjItXHRkZWZfYm9vbCBNSU5JWF9GU1xuZnMvbWluaXgvS2NvbmZpZzoyMzpcdGRlcGVuZHMgb24gTUlDUk9CTEFaRSB8fCBNSVBTIHx8IFMzOTAgfHwgU1VQRVJIIHx8IFNQQVJDIHx8IFhURU5TQSB8fCAoTTY4SyBcdTAwMjZcdTAwMjYgIU1NVSlcbmZzL21pbml4L0tjb25maWctMjQtXG5mcy9taW5peC9LY29uZmlnPTI1PWNvbmZpZyBNSU5JWF9GU19CSUdfRU5ESUFOXzE2QklUX0lOREVYRURcbmZzL21pbml4L0tjb25maWctMjYtXHRkZWZfYm9vbCBNSU5JWF9GU1xuZnMvbWluaXgvS2NvbmZpZzoyNzpcdGRlcGVuZHMgb24gTTY4SyBcdTAwMjZcdTAwMjYgTU1VXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4NjUKCQkJCQkJCW91dHB1dDogMTgwCgkJCQkJCQl0aG91Z2h0czogMTIxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1pbml4IEZpbGVzeXN0ZW0gSS9PIEFQSSBFbnRyeXBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIE1JTklYIGZpbGVzeXN0ZW0sIGFuZCB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYE1JTklYX0ZTYCBpcyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24uIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGlzIHBhdGNoIGludHJvZHVjZXMsIHNwZWNpZmljYWxseSB0aG9zZSBhY3RpbmcgYXMgQVBJIGVudHJ5cG9pbnRzLCBpZGVhbGx5IG5vbi1zdGF0aWMgb25lcyB0byBtYWtlIHN1cmUgc3l6a2FsbGVyIGNhbiBmaW5kIHRoZW0sIGFsdGhvdWdoIHRoZSBwcm9tcHQgc2F5cyBmdW5jdGlvbnMgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMgbWF5IG5vdCBiZSBpbmxpbmVkLgoKTGV0JiMzOTtzIHdhbGsgdGhyb3VnaCB0aGUgY2FuZGlkYXRlIGZ1bmN0aW9ucy4gSSBoYXZlOgoKKiAgIGBpb21hcF9zeW1saW5rX3dyaXRlYAoqICAgYG1pbml4X2ZpbGVfd3JpdGVfaXRlcmAKKiAgIGBtaW5peF93cml0ZWJhY2tfcmFuZ2VgCiogICBgbWluaXhfd3JpdGVwYWdlc2AKKiAgIGBtaW5peF9yZWFkX2ZvbGlvYAoqICAgYG1pbml4X3JlYWRhaGVhZGAKKiAgIGBtaW5peF9pb21hcF9iZWdpbmAKKiAgIGBWMV9taW5peF9pb21hcF9iZWdpbmAKKiAgIGBWMl9taW5peF9pb21hcF9iZWdpbmAKCk5vdywgaW5pdGlhbGx5LCBJJiMzOTttIG5vdGluZyB0aGF0IGEgbnVtYmVyIG9mIHRob3NlIGZ1bmN0aW9ucyBhcmUgc3RhdGljLCB3aGljaCByYWlzZXMgYSBmbGFnIGJlY2F1c2Ugc3RhdGljIGZ1bmN0aW9ucyBjYW4gYmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIEhvd2V2ZXIsIEkga25vdyB0aGUgcHJvbXB0IGFsc28gbWVudGlvbnMgZnVuY3Rpb24gcG9pbnRlcnMsIHNvIGl0JiMzOTtzIGEgYml0IG1vcmUgbnVhbmNlZC4KCkkgc2VlIHRoYXQgYG1pbml4X3dyaXRlYmFja19yYW5nZWAsIGBtaW5peF93cml0ZXBhZ2VzYCwgYG1pbml4X3JlYWRfZm9saW9gLCBgbWluaXhfcmVhZGFoZWFkYCwgYW5kIGBtaW5peF9pb21hcF9iZWdpbmAsIGFyZSBhbGwgc3RhdGljLiBUaGUgc3RhdGljIG5hdHVyZSBpbXBsaWVzIGludGVybmFsIHVzZSwgYnV0IEkga25vdyB0aGF0IGBtaW5peF93cml0ZXBhZ2VzYCwgYG1pbml4X3JlYWRfZm9saW9gLCBhbmQgYG1pbml4X3JlYWRhaGVhZGAsIGFyZSBhc3NpZ25lZCB0byB0aGUgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zIHN0cnVjdCAoYG1pbml4X2FvcHNgKSwgYW5kIGBtaW5peF9maWxlX3dyaXRlX2l0ZXJgIGlzIGFzc2lnbmVkIHRvIGBtaW5peF9maWxlX29wZXJhdGlvbnMud3JpdGVfaXRlcmAsIHNvIHRoZXkgd29uJiMzOTt0IGJlIGlubGluZWQuCgpgbWluaXhfaW9tYXBfYmVnaW5gIGlzIHVzZWQgYnkgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGBWMV9taW5peF9pb21hcF9iZWdpbmAgYW5kIGBWMl9taW5peF9pb21hcF9iZWdpbmAuIFNpbmNlIHRob3NlIGFyZW4mIzM5O3Qgc3RhdGljLCB0aGV5IGFyZSBlbnRyeXBvaW50cy4KClNvLCBJIHdpbGwgYWRkIHRoZXNlIGFzIGVudHJ5cG9pbnRzOiBgaW9tYXBfc3ltbGlua193cml0ZWAsIGBWMV9taW5peF9pb21hcF9iZWdpbmAsIGFuZCBgVjJfbWluaXhfaW9tYXBfYmVnaW5gLCBhcyB3ZWxsIGFzIGBtaW5peF9maWxlX3dyaXRlX2l0ZXJgLCBgbWluaXhfd3JpdGVwYWdlc2AsIGBtaW5peF9yZWFkX2ZvbGlvYCwgYG1pbml4X3JlYWRhaGVhZGAsIGFuZCBgbWluaXhfd3JpdGViYWNrX3JhbmdlYC4gSSBrbm93IHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBhc3NpZ25lZCB0byBmdW5jdGlvbiBwb2ludGVycyBpbiBhIHN0cnVjdCwgc28gaXQgaXMgdW5saWtlbHkgdGhhdCB0aGV5IGFyZSBpbmxpbmVkLgoKVGhlIGNvZGUgcmV2aWV3IGluZGljYXRlcyB0aGF0IGFsbCBmdW5jdGlvbnMgYXJlIG5ldy4gYGlvbWFwX3N5bWxpbmtfd3JpdGVgIGlzIGluIGBmcy9pb21hcC9idWZmZXJlZC1pby5jYCwgYG1pbml4X2ZpbGVfd3JpdGVfaXRlcmAgaXMgaW4gYGZzL21pbml4L2ZpbGUuY2AsIGBtaW5peF93cml0ZWJhY2tfcmFuZ2VgLCBgbWluaXhfd3JpdGVwYWdlc2AsIGBtaW5peF9yZWFkX2ZvbGlvYCwgYW5kIGBtaW5peF9yZWFkYWhlYWRgLCBhcmUgaW4gYGZzL21pbml4L2lub2RlLmNgLCBhbmQgYG1pbml4X2lvbWFwX2JlZ2luYCBpcyBpbiBgZnMvbWluaXgvaW9tYXAuY2AsIGBWMV9taW5peF9pb21hcF9iZWdpbmAgaXMgaW4gYGZzL21pbml4L2l0cmVlX3YxLmNgLCBhbmQgYFYyX21pbml4X2lvbWFwX2JlZ2luYCBpcyBpbiBgZnMvbWluaXgvaXRyZWVfdjIuY2AuCgpUaGUga2V5IGNoYW5nZSBpcyB0aGUgbWlncmF0aW9uIHRvIGlvbWFwIGZvciBidWZmZXJlZCBJL08gYW5kIHN5bWxpbmtzLCB3aGljaCBpbnZvbHZlcyBtb2RpZmljYXRpb25zIGluIGZpbGUgb3BlcmF0aW9ucywgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zLCBhbmQgYmxvY2sgbWFwcGluZy4gVGhpcyBpcyBhbGwgdmVyeSByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBieSBzaW1wbHkgbW91bnRpbmcgYSBtaW5peCBmaWxlc3lzdGVtIGltYWdlLgoKSGVyZSYjMzk7cyBteSBmaW5hbCBsaXN0IGZvciBjb25zaWRlcmF0aW9uOgoKKiAgIGBpb21hcF9zeW1saW5rX3dyaXRlYAoqICAgYFYxX21pbml4X2lvbWFwX2JlZ2luYAoqICAgYFYyX21pbml4X2lvbWFwX2JlZ2luYAoqICAgYG1pbml4X2ZpbGVfd3JpdGVfaXRlcmAKKiAgIGBtaW5peF93cml0ZXBhZ2VzYAoqICAgYG1pbml4X3JlYWRfZm9saW9gCiogICBgbWluaXhfcmVhZGFoZWFkYAoqICAgYG1pbml4X3dyaXRlYmFja19yYW5nZWAKCkFuZCB0aGUgcmVxdWlyZWQgY29uZmlnOiBgTUlOSVhfRlNgCgpOb3cgSSBhbSByZWFkeSB0byBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUlOSVhfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb21hcF9zeW1saW5rX3dyaXRlJiMzNDssCiAgICAmIzM0O1YxX21pbml4X2lvbWFwX2JlZ2luJiMzNDssCiAgICAmIzM0O1YyX21pbml4X2lvbWFwX2JlZ2luJiMzNDssCiAgICAmIzM0O21pbml4X2ZpbGVfd3JpdGVfaXRlciYjMzQ7LAogICAgJiMzNDttaW5peF93cml0ZXBhZ2VzJiMzNDssCiAgICAmIzM0O21pbml4X3JlYWRfZm9saW8mIzM0OywKICAgICYjMzQ7bWluaXhfcmVhZGFoZWFkJiMzNDssCiAgICAmIzM0O21pbml4X3dyaXRlYmFja19yYW5nZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtaWdyYXRlcyB0aGUgbWluaXggZmlsZXN5c3RlbSB0byB1c2UgaW9tYXAgZm9yIGJ1ZmZlcmVkIEkvTyBhbmQgc3ltbGlua3MuIFRoaXMgaW52b2x2ZXMgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWluaXggZmlsZSBvcGVyYXRpb25zLCBhZGRyZXNzIHNwYWNlIG9wZXJhdGlvbnMsIGFuZCBibG9jayBtYXBwaW5nIGxvZ2ljLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IG1vdW50aW5nIGEgbWluaXggZmlsZXN5c3RlbSBpbWFnZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUlOSVhfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb21hcF9zeW1saW5rX3dyaXRlJiMzNDssCiAgICAmIzM0O1YxX21pbml4X2lvbWFwX2JlZ2luJiMzNDssCiAgICAmIzM0O1YyX21pbml4X2lvbWFwX2JlZ2luJiMzNDssCiAgICAmIzM0O21pbml4X2ZpbGVfd3JpdGVfaXRlciYjMzQ7LAogICAgJiMzNDttaW5peF93cml0ZXBhZ2VzJiMzNDssCiAgICAmIzM0O21pbml4X3JlYWRfZm9saW8mIzM0OywKICAgICYjMzQ7bWluaXhfcmVhZGFoZWFkJiMzNDssCiAgICAmIzM0O21pbml4X3dyaXRlYmFja19yYW5nZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtaWdyYXRlcyB0aGUgbWluaXggZmlsZXN5c3RlbSB0byB1c2UgaW9tYXAgZm9yIGJ1ZmZlcmVkIEkvTyBhbmQgc3ltbGlua3MuIFRoaXMgaW52b2x2ZXMgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWluaXggZmlsZSBvcGVyYXRpb25zLCBhZGRyZXNzIHNwYWNlIG9wZXJhdGlvbnMsIGFuZCBibG9jayBtYXBwaW5nIGxvZ2ljLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IG1vdW50aW5nIGEgbWluaXggZmlsZXN5c3RlbSBpbWFnZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjoxMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnZlcnRzIHRoZSBtaW5peCBmaWxlc3lzdGVtIHRvIHVzZSBpb21hcCBmb3IgYnVmZmVyZWQgSS9PLCByZXBsYWNpbmcgdGhlIG9sZGVyIGJ1ZmZlcl9oZWFkIGJhc2VkIGJsb2NrIEkvTyBmdW5jdGlvbnMuIEl0IGludHJvZHVjZXMgYGlvbWFwX3N5bWxpbmtfd3JpdGVgIHdoaWNoIHdyaXRlcyBzeW1saW5rIHRhcmdldHMgdG8gZGlzay4gVGhlIHN5bWxpbmsgdGFyZ2V0IGlzIGEgZnVsbHkgaW5pdGlhbGl6ZWQgbnVsbC10ZXJtaW5hdGVkIHN0cmluZyBwcm92aWRlZCBieSB0aGUgVkZTLiBUaGUgdW53cml0dGVuIHBhcnRzIG9mIHRoZSBuZXdseSBhbGxvY2F0ZWQgYmxvY2sgYXJlIHplcm9lZCBieSBgaW9tYXBfd3JpdGVfYmVnaW5gIChzaW5jZSBgSU9NQVBfRl9ORVdgIGlzIHNldCBmb3IgbmV3IGJsb2NrcykuIFdoZW4gcmVhZGluZyB0aGUgc3ltbGluaywgYHBhZ2VfZ2V0X2xpbmtgIGFkZHMgdGhlIG51bGwgdGVybWluYXRvciBpbiBtZW1vcnkuIFRoZSByZXN0IG9mIHRoZSBwYXRjaCByZXBsYWNlcyBzdGFuZGFyZCByZWFkL3dyaXRlL3dyaXRlYmFjayBmdW5jdGlvbnMgd2l0aCB0aGVpciBpb21hcCBlcXVpdmFsZW50cywgd2hpY2ggaGFuZGxlIHVzZXIgc3BhY2UgZGF0YSBhbmQgcGFnZSBjYWNoZSBjb3JyZWN0bHkuIFRoZXJlIGFyZSBubyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIGluZm8tbGVha3MsIG9yIHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY5NGM1YTNmZmNlZDczNWY1ODQyZjY3NDYzZGJhZjEyNTE5MTVmZWEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAyMjoxMDoxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMgYi9mcy9pb21hcC9idWZmZXJlZC1pby5jCmluZGV4IDBhNWViZmRhOTBmMTIuLjVlOGFjM2ZhZDY3MTQgMTAwNjQ0Ci0tLSBhL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaW9tYXAvYnVmZmVyZWQtaW8uYwpAQCAtMjEwMCwzICYjNDM7MjEwMCwzNyBAQCBpb21hcF93cml0ZXBhZ2VzKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMpCiAJcmV0dXJuIGVycm9yOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfd3JpdGVwYWdlcyk7CiYjNDM7CiYjNDM7aW50IGlvbWFwX3N5bWxpbmtfd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqdGFyZ2V0LCBpbnQgbGVuLAomIzQzOwkJY29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLAomIzQzOwkJY29uc3Qgc3RydWN0IGlvbWFwX3dyaXRlX29wcyAqd3JpdGVfb3BzLCB2b2lkICpwcml2YXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2ZWMgdmVjID0gewomIzQzOwkJLmlvdl9iYXNlCT0gKHZvaWQgKil0YXJnZXQsCiYjNDM7CQkuaW92X2xlbgk9IGxlbiAtIDEsCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBpb21hcF9pdGVyIGl0ZXIgPSB7CiYjNDM7CQkuaW5vZGUJCT0gaW5vZGUsCiYjNDM7CQkucG9zCQk9IDAsCiYjNDM7CQkubGVuCQk9IGxlbiAtIDEsCiYjNDM7CQkuZmxhZ3MJCT0gSU9NQVBfV1JJVEUsCiYjNDM7CQkucHJpdmF0ZQk9IHByaXZhdGUsCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBpb3ZfaXRlciBpb3Y7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlvdl9pdGVyX2t2ZWMoJmFtcDtpb3YsIElURVJfU09VUkNFLCAmYW1wO3ZlYywgMSwgbGVuIC0gMSk7CiYjNDM7CiYjNDM7CXdoaWxlICgocmV0ID0gaW9tYXBfaXRlcigmYW1wO2l0ZXIsIG9wcykpICZndDsgMCkKJiM0MzsJCWl0ZXIuc3RhdHVzID0gaW9tYXBfd3JpdGVfaXRlcigmYW1wO2l0ZXIsICZhbXA7aW92LCB3cml0ZV9vcHMpOwomIzQzOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseShpdGVyLnBvcyA9PSAwKSkKJiM0MzsJCXJldHVybiAtRUlPOwomIzQzOwomIzQzOwltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX3N5bWxpbmtfd3JpdGUpOwpkaWZmIC0tZ2l0IGEvZnMvbWluaXgvZmlsZS5jIGIvZnMvbWluaXgvZmlsZS5jCmluZGV4IDAyYWFiYmRiNWRlYWEuLjY3NjVmNTcxYmQzZmMgMTAwNjQ0Ci0tLSBhL2ZzL21pbml4L2ZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9maWxlLmMKQEAgLTEwLDYgJiM0MzsxMCwzMiBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2J1ZmZlcl9oZWFkLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O21pbml4LmgmIzM0OwogCiYjNDM7c3RhdGljIHNzaXplX3QgbWluaXhfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKQomIzQzO3sKJiM0MzsJc3RydWN0IGlub2RlICppbm9kZSA9IGlvY2ItJmd0O2tpX2ZpbHAtJmd0O2ZfbWFwcGluZy0mZ3Q7aG9zdDsKJiM0MzsJc3NpemVfdCByZXQ7CiYjNDM7CWNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIoaW5vZGUpOwomIzQzOwomIzQzOwlpbm9kZV9sb2NrKGlub2RlKTsKJiM0MzsJcmV0ID0gZ2VuZXJpY193cml0ZV9jaGVja3MoaW9jYiwgZnJvbSk7CiYjNDM7CWlmIChyZXQgJmx0Oz0gMCkKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwomIzQzOwlyZXQgPSBmaWxlX21vZGlmaWVkKGlvY2ItJmd0O2tpX2ZpbHApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CiYjNDM7CXJldCA9IGlvbWFwX2ZpbGVfYnVmZmVyZWRfd3JpdGUoaW9jYiwgZnJvbSwgb3BzLAomIzQzOwkJCU5VTEwsIE5VTEwpOwomIzQzOwomIzQzOwlpZiAocmV0ICZndDsgMCkKJiM0MzsJCXJldCA9IGdlbmVyaWNfd3JpdGVfc3luYyhpb2NiLCByZXQpOwomIzQzOwomIzQzO3VubG9jazoKJiM0MzsJaW5vZGVfdW5sb2NrKGlub2RlKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiAvKgogICogV2UgaGF2ZSBtb3N0bHkgTlVMTHMgaGVyZTogdGhlIGN1cnJlbnQgZGVmYXVsdHMgYXJlIE9LIGZvcgogICogdGhlIG1pbml4IGZpbGVzeXN0ZW0uCkBAIC0xNywxMyAmIzQzOzQzLDEzIEBACiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfb3BlcmF0aW9ucyA9IHsKIAkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiAJLnJlYWRfaXRlcgk9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsCi0JLndyaXRlX2l0ZXIJPSBnZW5lcmljX2ZpbGVfd3JpdGVfaXRlciwKJiM0MzsJLndyaXRlX2l0ZXIJPSBtaW5peF9maWxlX3dyaXRlX2l0ZXIsCiAJLm1tYXBfcHJlcGFyZQk9IGdlbmVyaWNfZmlsZV9tbWFwX3ByZXBhcmUsCiAJLmZzeW5jCQk9IHNpbXBsZV9mc3luYywKIAkuc3BsaWNlX3JlYWQJPSBmaWxlbWFwX3NwbGljZV9yZWFkLAogfTsKIAotc3RhdGljIGludCBtaW5peF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzO2ludCBtaW5peF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKGRlbnRyeSk7CmRpZmYgLS1naXQgYS9mcy9taW5peC9pbm9kZS5jIGIvZnMvbWluaXgvaW5vZGUuYwppbmRleCBkYWY4M2U0ZmYyNWM4Li4yYmY1ZWE5MjM2MGEyIDEwMDY0NAotLS0gYS9mcy9taW5peC9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L2lub2RlLmMKQEAgLTQzOSw2ICYjNDM7NDM5LDMxIEBAIHN0YXRpYyBpbnQgbWluaXhfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZikKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBzc2l6ZV90IG1pbml4X3dyaXRlYmFja19yYW5nZShzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLAomIzQzOwlzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1NjQgcG9zLCB1bnNpZ25lZCBpbnQgbGVuLCB1NjQgZW5kX3BvcykKJiM0Mzt7CiYjNDM7CWludCBlcnJvcjsKJiM0MzsKJiM0MzsJaWYgKHBvcyAmbHQ7IHdwYy0mZ3Q7aW9tYXAub2Zmc2V0IHx8CiYjNDM7CQkJcG9zICZndDs9IHdwYy0mZ3Q7aW9tYXAub2Zmc2V0ICYjNDM7IHdwYy0mZ3Q7aW9tYXAubGVuZ3RoKSB7CiYjNDM7CQlpZiAoSU5PREVfVkVSU0lPTih3cGMtJmd0O2lub2RlKSA9PSBNSU5JWF9WMSkKJiM0MzsJCQllcnJvciA9IFYxX21pbml4X2lvbWFwX2JlZ2luKHdwYy0mZ3Q7aW5vZGUsIHBvcywgbGVuLCBJT01BUF9XUklURSwKJiM0MzsJCQkJJmFtcDt3cGMtJmd0O2lvbWFwLCBOVUxMKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQllcnJvciA9IFYyX21pbml4X2lvbWFwX2JlZ2luKHdwYy0mZ3Q7aW5vZGUsIHBvcywgbGVuLCBJT01BUF9XUklURSwKJiM0MzsJCQkJJmFtcDt3cGMtJmd0O2lvbWFwLCBOVUxMKTsKJiM0MzsJCWlmIChlcnJvcikKJiM0MzsJCQlyZXR1cm4gZXJyb3I7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGlvbWFwX2FkZF90b19pb2VuZCh3cGMsIGZvbGlvLCBwb3MsIGVuZF9wb3MsIGxlbik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGViYWNrX29wcyBtaW5peF93cml0ZWJhY2tfb3BzID0gewomIzQzOwkud3JpdGViYWNrX3JhbmdlID0gbWluaXhfd3JpdGViYWNrX3JhbmdlLAomIzQzOwkud3JpdGViYWNrX3N1Ym1pdCA9IGlvbWFwX2lvZW5kX3dyaXRlYmFja19zdWJtaXQsCiYjNDM7fTsKJiM0MzsKIHN0YXRpYyBpbnQgbWluaXhfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsb2NrLAogCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpCiB7CkBAIC00NDgsMTcgJiM0Mzs0NzMsNDUgQEAgc3RhdGljIGludCBtaW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssCiAJCXJldHVybiBWMl9taW5peF9nZXRfYmxvY2soaW5vZGUsIGJsb2NrLCBiaF9yZXN1bHQsIGNyZWF0ZSk7CiB9CiAKLXN0YXRpYyBpbnQgbWluaXhfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKJiM0MzsvKiBUaGUgb2xkIG1pbml4X3dyaXRlcGFnZXMsIHByZXNlcnZlZCBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMuICovCiYjNDM7c3RhdGljIGludCBtaW5peF9ibG9ja193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKIAlyZXR1cm4gbXBhZ2Vfd3JpdGVwYWdlcyhtYXBwaW5nLCB3YmMsIG1pbml4X2dldF9ibG9jayk7CiB9CiAKJiM0MztzdGF0aWMgaW50IG1pbml4X3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiYjNDM7CQlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4IHdwYyA9IHsKJiM0MzsJCS5pbm9kZSA9IG1hcHBpbmctJmd0O2hvc3QsCiYjNDM7CQkud2JjID0gd2JjLAomIzQzOwkJLm9wcyA9ICZhbXA7bWluaXhfd3JpdGViYWNrX29wcywKJiM0MzsJfTsKJiM0MzsJcmV0dXJuIGlvbWFwX3dyaXRlcGFnZXMoJmFtcDt3cGMpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbWluaXhfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIoZm9saW8tJmd0O21hcHBpbmctJmd0O2hvc3QpOwomIzQzOwomIzQzOwlpb21hcF9iaW9fcmVhZF9mb2xpbyhmb2xpbywgb3BzKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qIFRoZSBvbGQgbWluaXhfcmVhZF9mb2xpbywgcHJlc2VydmVkIGZvciBkaXJlY3Rvcnkgb3BlcmF0aW9ucy4gKi8KJiM0MztzdGF0aWMgaW50IG1pbml4X2Jsb2NrX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJcmV0dXJuIGJsb2NrX3JlYWRfZnVsbF9mb2xpbyhmb2xpbywgbWluaXhfZ2V0X2Jsb2NrKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIG1pbml4X3JlYWRhaGVhZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhYykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIocmFjLSZndDttYXBwaW5nLSZndDtob3N0KTsKJiM0MzsKJiM0MzsJaW9tYXBfYmlvX3JlYWRhaGVhZChyYWMsIG9wcyk7CiYjNDM7fQomIzQzOwogaW50IG1pbml4X3ByZXBhcmVfY2h1bmsoc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuKQogewogCXJldHVybiBfX2Jsb2NrX3dyaXRlX2JlZ2luKGZvbGlvLCBwb3MsIGxlbiwgbWluaXhfZ2V0X2Jsb2NrKTsKQEAgLTQ4OCwyNiAmIzQzOzU0MSwzNSBAQCBzdGF0aWMgaW50IG1pbml4X3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYiwKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc2VjdG9yX3QgbWluaXhfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYmxvY2spCi17Ci0JcmV0dXJuIGdlbmVyaWNfYmxvY2tfYm1hcChtYXBwaW5nLGJsb2NrLG1pbml4X2dldF9ibG9jayk7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG1pbml4X2FvcHMgPSB7Ci0JLmRpcnR5X2ZvbGlvCT0gYmxvY2tfZGlydHlfZm9saW8sCi0JLmludmFsaWRhdGVfZm9saW8gPSBibG9ja19pbnZhbGlkYXRlX2ZvbGlvLAomIzQzOwkuZGlydHlfZm9saW8JPSBpb21hcF9kaXJ0eV9mb2xpbywKJiM0MzsJLmludmFsaWRhdGVfZm9saW8gPSBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvLAogCS5yZWFkX2ZvbGlvID0gbWluaXhfcmVhZF9mb2xpbywKJiM0MzsJLnJlYWRhaGVhZCA9IG1pbml4X3JlYWRhaGVhZCwKIAkud3JpdGVwYWdlcyA9IG1pbml4X3dyaXRlcGFnZXMsCiYjNDM7CS5taWdyYXRlX2ZvbGlvID0gZmlsZW1hcF9taWdyYXRlX2ZvbGlvLAomIzQzOwkuaXNfcGFydGlhbGx5X3VwdG9kYXRlID0gaW9tYXBfaXNfcGFydGlhbGx5X3VwdG9kYXRlLAomIzQzOwkucmVsZWFzZV9mb2xpbyA9IGlvbWFwX3JlbGVhc2VfZm9saW8sCiYjNDM7CS5lcnJvcl9yZW1vdmVfZm9saW8gPSBnZW5lcmljX2Vycm9yX3JlbW92ZV9mb2xpbywKJiM0Mzt9OwomIzQzOwomIzQzOy8qIEEgc3BlY2lhbCBhb3BzIGZvciBkaXJlY3RvcmllcyB0aGF0IGtlZXBzIHVzaW5nIHRoZSBidWZmZXIgaGVhZCBjaHVua3MsIGF0CiYjNDM7ICogbGVhc3QgZm9yIHRoZSB0aW1lIGJlaW5nLgomIzQzOyAqLwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG1pbml4X2Rpcl9hb3BzID0gewomIzQzOwkuZGlydHlfZm9saW8gPSBibG9ja19kaXJ0eV9mb2xpbywKJiM0MzsJLmludmFsaWRhdGVfZm9saW8gPSBibG9ja19pbnZhbGlkYXRlX2ZvbGlvLAomIzQzOwkucmVhZF9mb2xpbyA9IG1pbml4X2Jsb2NrX3JlYWRfZm9saW8sCiAJLndyaXRlX2JlZ2luID0gbWluaXhfd3JpdGVfYmVnaW4sCiAJLndyaXRlX2VuZCA9IGdlbmVyaWNfd3JpdGVfZW5kLAogCS5taWdyYXRlX2ZvbGlvID0gYnVmZmVyX21pZ3JhdGVfZm9saW8sCi0JLmJtYXAgPSBtaW5peF9ibWFwLAotCS5kaXJlY3RfSU8gPSBub29wX2RpcmVjdF9JTwomIzQzOwkud3JpdGVwYWdlcyA9IG1pbml4X2Jsb2NrX3dyaXRlcGFnZXMsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWluaXhfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0gewogCS5nZXRfbGluawk9IHBhZ2VfZ2V0X2xpbmssCiAJLmdldGF0dHIJPSBtaW5peF9nZXRhdHRyLAomIzQzOwkuc2V0YXR0cgk9IG1pbml4X3NldGF0dHIsCiB9OwogCiB2b2lkIG1pbml4X3NldF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBkZXZfdCByZGV2KQpAQCAtNTE5LDcgJiM0Mzs1ODEsNyBAQCB2b2lkIG1pbml4X3NldF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBkZXZfdCByZGV2KQogCX0gZWxzZSBpZiAoU19JU0RJUihpbm9kZS0mZ3Q7aV9tb2RlKSkgewogCQlpbm9kZS0mZ3Q7aV9vcCA9ICZhbXA7bWluaXhfZGlyX2lub2RlX29wZXJhdGlvbnM7CiAJCWlub2RlLSZndDtpX2ZvcCA9ICZhbXA7bWluaXhfZGlyX29wZXJhdGlvbnM7Ci0JCWlub2RlLSZndDtpX21hcHBpbmctJmd0O2Ffb3BzID0gJmFtcDttaW5peF9hb3BzOwomIzQzOwkJaW5vZGUtJmd0O2lfbWFwcGluZy0mZ3Q7YV9vcHMgPSAmYW1wO21pbml4X2Rpcl9hb3BzOwogCX0gZWxzZSBpZiAoU19JU0xOSyhpbm9kZS0mZ3Q7aV9tb2RlKSkgewogCQlpbm9kZS0mZ3Q7aV9vcCA9ICZhbXA7bWluaXhfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOwogCQlpbm9kZV9ub2hpZ2htZW0oaW5vZGUpOwpAQCAtNzg2LDQgJiM0Mzs4NDgsMyBAQCBtb2R1bGVfaW5pdChpbml0X21pbml4X2ZzKQogbW9kdWxlX2V4aXQoZXhpdF9taW5peF9mcykKIE1PRFVMRV9ERVNDUklQVElPTigmIzM0O01pbml4IGZpbGUgc3lzdGVtJiMzNDspOwogTU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7Ci0KZGlmZiAtLWdpdCBhL2ZzL21pbml4L2lvbWFwLmMgYi9mcy9taW5peC9pb21hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjkwZTAxNmFhYTAxZWEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9pb21hcC5jCkBAIC0wLDAgJiM0MzsxLDEyMiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsvKgomIzQzOyAqIGlvbWFwIGZ1bmN0aW9ucyBmb3IgbWluaXguCiYjNDM7ICovCiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1pbml4X2NoYWluX2NsZWFudXAoSW5kaXJlY3QgKmNoYWluLCBJbmRpcmVjdCAqcGFydGlhbCkKJiM0Mzt7CiYjNDM7CXdoaWxlIChwYXJ0aWFsICZndDsgY2hhaW4pIHsKJiM0MzsJCWJyZWxzZShwYXJ0aWFsLSZndDtiaCk7CiYjNDM7CQlwYXJ0aWFsLS07CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1pbml4X2lvbWFwX3NldF9tYXBwZWQoc3RydWN0IGlvbWFwICppb21hcCwgc2VjdG9yX3QgcGh5cywKJiM0MzsJCXVuc2lnbmVkIGludCBibGtiaXRzLCBzZWN0b3JfdCBpYmxvY2spCiYjNDM7ewomIzQzOwlpb21hcC0mZ3Q7dHlwZSA9IElPTUFQX01BUFBFRDsKJiM0MzsJaW9tYXAtJmd0O2FkZHIgPSAodTY0KXBoeXMgJmx0OyZsdDsgYmxrYml0czsKJiM0MzsJaW9tYXAtJmd0O2xlbmd0aCA9IDEgJmx0OyZsdDsgYmxrYml0czsKJiM0MzsJaW9tYXAtJmd0O29mZnNldCA9ICh1NjQpaWJsb2NrICZsdDsmbHQ7IGJsa2JpdHM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtaW5peF9pb21hcF9zZXRfaG9sZShzdHJ1Y3QgaW9tYXAgKmlvbWFwLAomIzQzOwkJdW5zaWduZWQgaW50IGJsa2JpdHMsIHNlY3Rvcl90IGlibG9jaykKJiM0Mzt7CiYjNDM7CWlvbWFwLSZndDt0eXBlID0gSU9NQVBfSE9MRTsKJiM0MzsJaW9tYXAtJmd0O2FkZHIgPSBJT01BUF9OVUxMX0FERFI7CiYjNDM7CWlvbWFwLSZndDtsZW5ndGggPSAxICZsdDsmbHQ7IGJsa2JpdHM7CiYjNDM7CWlvbWFwLSZndDtvZmZzZXQgPSAodTY0KWlibG9jayAmbHQ7Jmx0OyBibGtiaXRzOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIG1pbml4X2lvbWFwX2JlZ2luIC0gbWFwIGEgZmlsZSByYW5nZSB0byBkaXNrIGJsb2Nrcy4gSXQgYWN0cyBhcyBhIHJlcGxhY2VtZW50CiYjNDM7ICogZm9yIGdldF9ibG9jayBpbiBpdHJlZV9jb21tb24uYywgYXQgbGVhc3QgaW4gdGhlIGltcG9ydGFudCB3YXlzLCBhbmQgaXMKJiM0MzsgKiBhZGFwdGVkIGZyb20gaXQsIGJ1dCBpdCB1c2VzIGlvbWFwIGluc3RlYWQgb2YgYnVmZmVyX2hlYWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBtaW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLAomIzQzOwl1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKQomIzQzO3sKJiM0MzsJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLSZndDtpX3NiOwomIzQzOwl1bnNpZ25lZCBpbnQgYmxrYml0cyA9IHNiLSZndDtzX2Jsb2Nrc2l6ZV9iaXRzOwomIzQzOwlzZWN0b3JfdCBpYmxvY2sgPSBvZmZzZXQgJmd0OyZndDsgYmxrYml0czsKJiM0MzsJaW50IGNyZWF0ZSA9IGZsYWdzICZhbXA7IElPTUFQX1dSSVRFOwomIzQzOwomIzQzOwlpbnQgb2Zmc2V0c1tERVBUSF07CiYjNDM7CUluZGlyZWN0IGNoYWluW0RFUFRIXTsKJiM0MzsJSW5kaXJlY3QgKnBhcnRpYWw7CiYjNDM7CWludCBkZXB0aCA9IGJsb2NrX3RvX3BhdGgoaW5vZGUsIGlibG9jaywgb2Zmc2V0cyk7CiYjNDM7CWludCBsZWZ0OwomIzQzOwlpbnQgZXJyID0gLUVJTzsKJiM0MzsKJiM0MzsJc2VjdG9yX3QgcGh5czsKJiM0MzsKJiM0MzsJLyogYmxvY2sgaXMgYmV5b25kIG1heCBmaWxlIHNpemUgKi8KJiM0MzsJaWYgKGRlcHRoID09IDApCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaW9tYXAtJmd0O2JkZXYgPSBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19iZGV2OwomIzQzOwomIzQzO3JlcmVhZDoKJiM0MzsJcGFydGlhbCA9IGdldF9icmFuY2goaW5vZGUsIGRlcHRoLCBvZmZzZXRzLCBjaGFpbiwgJmFtcDtlcnIpOwomIzQzOwomIzQzOwkvKiBTaW1wbGVzdCBjYXNlIC0gYmxvY2sgZm91bmQsIG5vIGFsbG9jYXRpb24gbmVlZGVkICovCiYjNDM7CWlmICghcGFydGlhbCkgewomIzQzOwkJaW9tYXAtJmd0O2ZsYWdzID0gMDsKJiM0MzsJCXBoeXMgPSBibG9ja190b19jcHUoY2hhaW5bZGVwdGggLSAxXS5rZXkpOwomIzQzOwkJcGFydGlhbCA9IGNoYWluJiM0MztkZXB0aC0xOwomIzQzOwkJbWluaXhfaW9tYXBfc2V0X21hcHBlZChpb21hcCwgcGh5cywgYmxrYml0cywgaWJsb2NrKTsKJiM0MzsJCW1pbml4X2NoYWluX2NsZWFudXAoY2hhaW4sIHBhcnRpYWwpOwomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBOZXh0IHNpbXBsZSBjYXNlIC0gcGxhaW4gbG9va3VwIG9yIGZhaWxlZCByZWFkIG9mIGluZGlyZWN0IGJsb2NrICovCiYjNDM7CWlmICghY3JlYXRlIHx8IGVyciA9PSAtRUlPKSB7CiYjNDM7CQltaW5peF9pb21hcF9zZXRfaG9sZShpb21hcCwgYmxrYml0cywgaWJsb2NrKTsKJiM0MzsJCW1pbml4X2NoYWluX2NsZWFudXAoY2hhaW4sIHBhcnRpYWwpOwomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGlzIGlzIGhlbGQgb3ZlciBmcm9tIHRoZSBvcmlnaW5hbCBnZXRfYmxvY2sgbG9naWMsIHdoZXJlIGl0CiYjNDM7CSAqIGFjdGVkIGFzIGEgZ3VhcmQgaW4gY2FzZSB0cnVuY2F0ZSgpIGRlbGV0ZWQgYmxvY2tzIGZyb20gdW5kZXIgdGhhdAomIzQzOwkgKiBmdW5jdGlvbi4gVGhlcmUgc2hvdWxkIG5vdCBiZSBhIHJhY2Ugd2l0aCBpb21hcCBvcGVyYXRpb25zLCBidXQKJiM0MzsJICogd2UmIzM5O3JlIHJldGFpbmluZyB0aGUgZGVmZW5zaXZlIGNvZGluZyBoZXJlIHRvIGJlIGV4dHJhIHNhZmUganVzdCBpbgomIzQzOwkgKiBjYXNlLgomIzQzOwkgKi8KJiM0MzsJaWYgKGVyciA9PSAtRUFHQUlOKSB7CiYjNDM7CQltaW5peF9jaGFpbl9jbGVhbnVwKGNoYWluLCBwYXJ0aWFsKTsKJiM0MzsJCWdvdG8gcmVyZWFkOwomIzQzOwl9CiYjNDM7CiYjNDM7CWxlZnQgPSAoY2hhaW4gJiM0MzsgZGVwdGgpIC0gcGFydGlhbDsKJiM0MzsJZXJyID0gYWxsb2NfYnJhbmNoKGlub2RlLCBsZWZ0LCBvZmZzZXRzICYjNDM7IChwYXJ0aWFsIC0gY2hhaW4pLCBwYXJ0aWFsKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJbWluaXhfY2hhaW5fY2xlYW51cChjaGFpbiwgcGFydGlhbCk7CiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChzcGxpY2VfYnJhbmNoKGlub2RlLCBjaGFpbiwgcGFydGlhbCwgbGVmdCkgJmx0OyAwKSB7CiYjNDM7CQltaW5peF9jaGFpbl9jbGVhbnVwKGNoYWluLCBwYXJ0aWFsKTsKJiM0MzsJCWdvdG8gcmVyZWFkOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFN1Y2Nlc3NmdWwgYWxsb2NhdGlvbiwgbWFwcGluZyBpdC4gKi8KJiM0MzsJaW9tYXAtJmd0O2ZsYWdzID0gSU9NQVBfRl9ORVc7CiYjNDM7CXBoeXMgPSBibG9ja190b19jcHUoY2hhaW5bZGVwdGggLSAxXS5rZXkpOwomIzQzOwltaW5peF9pb21hcF9zZXRfbWFwcGVkKGlvbWFwLCBwaHlzLCBibGtiaXRzLCBpYmxvY2spOwomIzQzOwltaW5peF9jaGFpbl9jbGVhbnVwKGNoYWluLCBwYXJ0aWFsKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBtaW5peF9pb21hcF9lbmQgZW5kcyB1cCBiZWluZyBhIG5vcDsgc2luY2UgbWluaXggZG9lc24mIzM5O3QgaGF2ZSBhbnkgZXh0ZW50cyBvcgomIzQzOyAqIHRyYW5zYWN0aW9ucyB0byB3b3JyeSBhYm91dCwgdGhlcmUgaXNuJiMzOTt0IGFueXRoaW5nIHRvIHVwZGF0ZSBoZXJlLiBUaGUgb24tZGlzawomIzQzOyAqIGluZGlyZWN0IGJsb2NrcyBnZXQgZGlydGllZCBpbiBtaW5peF9pb21hcF9iZWdpbi4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IG1pbml4X2lvbWFwX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLAomIzQzOwlzc2l6ZV90IHdyaXR0ZW4sIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KZGlmZiAtLWdpdCBhL2ZzL21pbml4L2l0cmVlX2NvbW1vbi5jIGIvZnMvbWluaXgvaXRyZWVfY29tbW9uLmMKaW5kZXggYzNjZDJjNzVhZjljZS4uZDczYWIxY2FhY2ZlYyAxMDA2NDQKLS0tIGEvZnMvbWluaXgvaXRyZWVfY29tbW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbWluaXgvaXRyZWVfY29tbW9uLmMKQEAgLTMxMSw3ICYjNDM7MzExLDE1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0cnVuY2F0ZSAoc3RydWN0IGlub2RlICogaW5vZGUpCiAJbG9uZyBpYmxvY2s7CiAKIAlpYmxvY2sgPSAoaW5vZGUtJmd0O2lfc2l6ZSAmIzQzOyBzYi0mZ3Q7c19ibG9ja3NpemUgLTEpICZndDsmZ3Q7IHNiLSZndDtzX2Jsb2Nrc2l6ZV9iaXRzOwotCWJsb2NrX3RydW5jYXRlX3BhZ2UoaW5vZGUtJmd0O2lfbWFwcGluZywgaW5vZGUtJmd0O2lfc2l6ZSwgZ2V0X2Jsb2NrKTsKJiM0MzsKJiM0MzsJLyogRGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGlub2RlIGJlaW5nIHRydW5jYXRlZCBpcyBhIGRpcmVjdG9yeSBvciBub3QsCiYjNDM7CSAqIHdlIG5lZWQgdG8gZWl0aGVyIGNhbGwgaW9tYXBfdHJ1bmNhdGVfcGFnZSBvciBibG9ja190cnVuY2F0ZV9wYWdlLgomIzQzOwkgKi8KJiM0MzsJaWYgKFNfSVNESVIoaW5vZGUtJmd0O2lfbW9kZSkpCiYjNDM7CQlibG9ja190cnVuY2F0ZV9wYWdlKGlub2RlLSZndDtpX21hcHBpbmcsIGlub2RlLSZndDtpX3NpemUsIGdldF9ibG9jayk7CiYjNDM7CWVsc2UKJiM0MzsJCWlvbWFwX3RydW5jYXRlX3BhZ2UoaW5vZGUsIGlub2RlLSZndDtpX3NpemUsIE5VTEwsCiYjNDM7CQkJbWluaXhfaW9tYXBfb3BzX3Zlcihpbm9kZSksIE5VTEwsIE5VTEwpOwogCiAJbiA9IGJsb2NrX3RvX3BhdGgoaW5vZGUsIGlibG9jaywgb2Zmc2V0cyk7CiAJaWYgKCFuKQpkaWZmIC0tZ2l0IGEvZnMvbWluaXgvaXRyZWVfdjEuYyBiL2ZzL21pbml4L2l0cmVlX3YxLmMKaW5kZXggMWZlZDkwNjA0MmFhOC4uNThjMjlmNDQ0M2QzNyAxMDA2NDQKLS0tIGEvZnMvbWluaXgvaXRyZWVfdjEuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9pdHJlZV92MS5jCkBAIC00OSw2ICYjNDM7NDksMTggQEAgc3RhdGljIGludCBibG9ja190b19wYXRoKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBsb25nIGJsb2NrLCBpbnQgb2Zmc2V0c1tERVBUSF0pCiB9CiAKICNpbmNsdWRlICYjMzQ7aXRyZWVfY29tbW9uLmMmIzM0OwomIzQzOy8qIE5PVEEgQkVORToKJiM0MzsgKgomIzQzOyAqIFRoaXMgaXMgaWNreSB0byBtZSwgYnV0IGF0IHRoZSBzYW1lIHRpbWUgaGF2aW5nIGl0IGJlIGEgc3RhbmRhbG9uZSBDIGZpbGUKJiM0MzsgKiB0aGF0JiMzOTtzIGNvbXBpbGVkIHRvIG9iamVjdCBmb3JtIGFuZCBsaW5rZWQgc2VwYXJhdGVseSBsaWtlIGl0IGlzIGluIHhpYWZzIGlzCiYjNDM7ICogbXVjaCBuYXN0aWVyIGluIG1pbml4IGJlY2F1c2Ugb2YgdGhlIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgbWluaXggZnMgdGhhdAomIzQzOyAqIGhhdmUgc29tZSB2ZXJ5LCB2ZXJ5IGRpZmZlcmVudCBhc3BlY3RzLCBsaWtlIHRoZSBzaXplIG9mIGJsb2NrX3QuIEkgZG9uJiMzOTt0CiYjNDM7ICogbGlrZSBpdCwgYnV0IHNpbmNlIG1pbml4IGFscmVhZHkgaGFzIHRoaXMgcGF0dGVybiB3aGVyZSBhIGNvbW1vbiBpdHJlZSBmaWxlCiYjNDM7ICogaXMgaW5jbHVkZWQgaW4gdGhlIGl0cmVlX3YxIGFuZCBpdHJlZV92MihhbmQgdjMpIGZpbGVzLCBJJiMzOTttIGluY2x1ZGluZyBpb21hcC5jCiYjNDM7ICogaW4gdGhlc2UgZmlsZXMgYXMgd2VsbC4gSXQgZG9lcyBhdCBsZWFzdCBhdm9pZCBleHBvcnRpbmcgc29tZSBjdXJyZW50bHkKJiM0MzsgKiBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlbiYjMzk7dCBuZWVkZWQgYW55d2hlcmUgYnV0IGl0cmVlX2NvbW1vbi5jIGFuZCBpb21hcC5jLgomIzQzOyAqLwomIzQzOyNpbmNsdWRlICYjMzQ7aW9tYXAuYyYjMzQ7CiAKIGludCBWMV9taW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssCiAJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSkKQEAgLTYxLDcgJiM0Mzs3MywxOCBAQCB2b2lkIFYxX21pbml4X3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqIGlub2RlKQogCXRydW5jYXRlKGlub2RlKTsKIH0KIAotdW5zaWduZWQgVjFfbWluaXhfYmxvY2tzKGxvZmZfdCBzaXplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQomIzQzO3Vuc2lnbmVkIGludCBWMV9taW5peF9ibG9ja3MobG9mZl90IHNpemUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJcmV0dXJuIG5ibG9ja3Moc2l6ZSwgc2IpOwogfQomIzQzOwomIzQzO2ludCBWMV9taW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLAomIzQzOwl1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKQomIzQzO3sKJiM0MzsJcmV0dXJuIG1pbml4X2lvbWFwX2JlZ2luKGlub2RlLCBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsIGlvbWFwLCBzcmNtYXApOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYxX21pbml4X2lvbWFwX29wcyA9IHsKJiM0MzsJLmlvbWFwX2JlZ2luID0gVjFfbWluaXhfaW9tYXBfYmVnaW4sCiYjNDM7CS5pb21hcF9lbmQgICA9IG1pbml4X2lvbWFwX2VuZCwKJiM0Mzt9OwpkaWZmIC0tZ2l0IGEvZnMvbWluaXgvaXRyZWVfdjIuYyBiL2ZzL21pbml4L2l0cmVlX3YyLmMKaW5kZXggOWQwMGYzMWEyZDlkMS4uZmM3YTVhZThmYTFjYSAxMDA2NDQKLS0tIGEvZnMvbWluaXgvaXRyZWVfdjIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9pdHJlZV92Mi5jCkBAIC01Nyw2ICYjNDM7NTcsMTAgQEAgc3RhdGljIGludCBibG9ja190b19wYXRoKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBsb25nIGJsb2NrLCBpbnQgb2Zmc2V0c1tERVBUSF0pCiB9CiAKICNpbmNsdWRlICYjMzQ7aXRyZWVfY29tbW9uLmMmIzM0OwomIzQzOy8qIFNlZSB0aGUgbm90ZSBpbiBpdHJlZV92MSBpbiBhIGNvbW1lbnQgdGhhdCBzdGFydHMgJiMzNDtOT1RBIEJFTkUmIzM0OyBmb3IgYW4KJiM0MzsgKiBleHBsYW5hdGlvbiBmb3Igd2h5IGlvbWFwLmMgaXMgaW5jbHVkZWQgaGVyZS4KJiM0MzsgKi8KJiM0MzsjaW5jbHVkZSAmIzM0O2lvbWFwLmMmIzM0OwogCiBpbnQgVjJfbWluaXhfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBsb25nIGJsb2NrLAogCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpCkBAIC02OSw3ICYjNDM7NzMsMTggQEAgdm9pZCBWMl9taW5peF90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkKIAl0cnVuY2F0ZShpbm9kZSk7CiB9CiAKLXVuc2lnbmVkIFYyX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKJiM0Mzt1bnNpZ25lZCBpbnQgVjJfbWluaXhfYmxvY2tzKGxvZmZfdCBzaXplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCXJldHVybiBuYmxvY2tzKHNpemUsIHNiKTsKIH0KJiM0MzsKJiM0MztpbnQgVjJfbWluaXhfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCwKJiM0MzsJdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBzdHJ1Y3QgaW9tYXAgKnNyY21hcCkKJiM0Mzt7CiYjNDM7CXJldHVybiBtaW5peF9pb21hcF9iZWdpbihpbm9kZSwgb2Zmc2V0LCBsZW5ndGgsIGZsYWdzLCBpb21hcCwgc3JjbWFwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMl9taW5peF9pb21hcF9vcHMgPSB7CiYjNDM7CS5pb21hcF9iZWdpbiA9IFYyX21pbml4X2lvbWFwX2JlZ2luLAomIzQzOwkuaW9tYXBfZW5kICAgPSBtaW5peF9pb21hcF9lbmQsCiYjNDM7fTsKZGlmZiAtLWdpdCBhL2ZzL21pbml4L21pbml4LmggYi9mcy9taW5peC9taW5peC5oCmluZGV4IDc4NzIyY2UyMmUxZTEuLjkwMzU2MDRjNjhjYTEgMTAwNjQ0Ci0tLSBhL2ZzL21pbml4L21pbml4LmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbWluaXgvbWluaXguaApAQCAtNSw2ICYjNDM7NSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvZnMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wYWdlbWFwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWluaXhfZnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW9tYXAuaCZndDsKIAogI2RlZmluZSBJTk9ERV9WRVJTSU9OKGlub2RlKQltaW5peF9zYihpbm9kZS0mZ3Q7aV9zYiktJmd0O3NfdmVyc2lvbgogI2RlZmluZSBNSU5JWF9WMQkJMHgwMDAxCQkvKiBvcmlnaW5hbCBtaW5peCBmcyAqLwpAQCAtNTcsNiAmIzQzOzU4LDggQEAgdm9pZCBtaW5peF9mcmVlX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGxvbmcgYmxvY2spOwogdW5zaWduZWQgbG9uZyBtaW5peF9jb3VudF9mcmVlX2Jsb2NrcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIGludCBtaW5peF9nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKiwgY29uc3Qgc3RydWN0IHBhdGggKiwKIAkJc3RydWN0IGtzdGF0ICosIHUzMiwgdW5zaWduZWQgaW50KTsKJiM0MztpbnQgbWluaXhfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAomIzQzOwlzdHJ1Y3QgaWF0dHIgKmF0dHIpOwogaW50IG1pbml4X3ByZXBhcmVfY2h1bmsoc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuKTsKIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbWluaXhfZ2V0X21ldGFkYXRhX2JocyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIApAQCAtNzYsMTMgJiM0Mzs3OSwyMyBAQCBpbnQgbWluaXhfbWFrZV9lbXB0eShzdHJ1Y3QgaW5vZGUqLCBzdHJ1Y3QgaW5vZGUqKTsKIGludCBtaW5peF9lbXB0eV9kaXIoc3RydWN0IGlub2RlKik7CiBpbnQgbWluaXhfc2V0X2xpbmsoc3RydWN0IG1pbml4X2Rpcl9lbnRyeSAqZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCXN0cnVjdCBpbm9kZSAqaW5vZGUpOwomIzQzOwogc3RydWN0IG1pbml4X2Rpcl9lbnRyeSAqbWluaXhfZG90ZG90KHN0cnVjdCBpbm9kZSosIHN0cnVjdCBmb2xpbyAqKik7CiBpbm9fdCBtaW5peF9pbm9kZV9ieV9uYW1lKHN0cnVjdCBkZW50cnkqKTsKIAomIzQzO2ludCBWMV9taW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LAomIzQzOwlsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsCiYjNDM7CXN0cnVjdCBpb21hcCAqc3JjbWFwKTsKJiM0MztpbnQgVjJfbWluaXhfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwKJiM0MzsJbG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLAomIzQzOwlzdHJ1Y3QgaW9tYXAgKnNyY21hcCk7CiYjNDM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWluaXhfZmlsZV9pbm9kZV9vcGVyYXRpb25zOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X2Rpcl9pbm9kZV9vcGVyYXRpb25zOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWluaXhfZmlsZV9vcGVyYXRpb25zOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWluaXhfZGlyX29wZXJhdGlvbnM7CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgVjFfbWluaXhfaW9tYXBfb3BzOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYyX21pbml4X2lvbWFwX29wczsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbWluaXhfc2JfaW5mbyAqbWluaXhfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKQEAgLTk0LDExICYjNDM7MTA3LDE3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1pbml4X2lub2RlX2luZm8gKm1pbml4X2koc3RydWN0IGlub2RlICppbm9kZSkKIAlyZXR1cm4gY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgbWluaXhfaW5vZGVfaW5mbywgdmZzX2lub2RlKTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBtaW5peF9ibG9ja3NfbmVlZGVkKHVuc2lnbmVkIGJpdHMsIHVuc2lnbmVkIGJsb2Nrc2l6ZSkKJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBtaW5peF9ibG9ja3NfbmVlZGVkKHVuc2lnbmVkIGludCBiaXRzLCB1bnNpZ25lZCBpbnQgYmxvY2tzaXplKQogewogCXJldHVybiBESVZfUk9VTkRfVVBfUE9XMihiaXRzLCBibG9ja3NpemUgKiA4KTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IGlvbWFwX29wcyAqbWluaXhfaW9tYXBfb3BzX3ZlcihzdHJ1Y3QgaW5vZGUgKmlub2RlKQomIzQzO3sKJiM0MzsJcmV0dXJuIChJTk9ERV9WRVJTSU9OKGlub2RlKSA9PSBNSU5JWF9WMSkgPwomIzQzOwkJJmFtcDtWMV9taW5peF9pb21hcF9vcHMgOiAmYW1wO1YyX21pbml4X2lvbWFwX29wczsKJiM0Mzt9CiYjNDM7CiAjaWYgZGVmaW5lZChDT05GSUdfTUlOSVhfRlNfTkFUSVZFX0VORElBTikgJmFtcDsmYW1wOyBcCiAJZGVmaW5lZChDT05GSUdfTUlOSVhfRlNfQklHX0VORElBTl8xNkJJVF9JTkRFWEVEKQogCkBAIC0xMjgsNyAmIzQzOzE0Nyw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbWluaXhfYmxvY2tzX25lZWRlZCh1bnNpZ25lZCBiaXRzLCB1bnNpZ25lZCBibG9ja3NpemUpCiAgKiBiaWctZW5kaWFuIDE2Yml0IGluZGV4ZWQgYml0bWFwcwogICovCiAKLXN0YXRpYyBpbmxpbmUgaW50IG1pbml4X2ZpbmRfZmlyc3RfemVyb19iaXQoY29uc3Qgdm9pZCAqdmFkZHIsIHVuc2lnbmVkIHNpemUpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWluaXhfZmluZF9maXJzdF96ZXJvX2JpdChjb25zdCB2b2lkICp2YWRkciwgdW5zaWduZWQgaW50IHNpemUpCiB7CiAJY29uc3QgdW5zaWduZWQgc2hvcnQgKnAgPSB2YWRkciwgKmFkZHIgPSB2YWRkcjsKIAl1bnNpZ25lZCBzaG9ydCBudW07CmRpZmYgLS1naXQgYS9mcy9taW5peC9uYW1laS5jIGIvZnMvbWluaXgvbmFtZWkuYwppbmRleCA1NTI1YmEzNjdlZDc0Li41MmUxMTUwMTNhYmY4IDEwMDY0NAotLS0gYS9mcy9taW5peC9uYW1laS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L25hbWVpLmMKQEAgLTYsNiAmIzQzOzYsNyBAQAogICovCiAKICNpbmNsdWRlICYjMzQ7bWluaXguaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lvbWFwLmgmZ3Q7CiAKIHN0YXRpYyBpbnQgYWRkX25vbmRpcihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CkBAIC04NCwxMiAmIzQzOzg1LDE2IEBAIHN0YXRpYyBpbnQgbWluaXhfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiAJCXJldHVybiBQVFJfRVJSKGlub2RlKTsKIAogCW1pbml4X3NldF9pbm9kZShpbm9kZSwgMCk7Ci0JZXJyID0gcGFnZV9zeW1saW5rKGlub2RlLCBzeW1uYW1lLCBpKTsKJiM0MzsJZXJyID0gaW9tYXBfc3ltbGlua193cml0ZShpbm9kZSwgc3ltbmFtZSwgaSwgbWluaXhfaW9tYXBfb3BzX3Zlcihpbm9kZSksIE5VTEwsIE5VTEwpOwomIzQzOwogCWlmICh1bmxpa2VseShlcnIpKSB7CiAJCWlub2RlX2RlY19saW5rX2NvdW50KGlub2RlKTsKIAkJaXB1dChpbm9kZSk7CiAJCXJldHVybiBlcnI7CiAJfQomIzQzOwomIzQzOwlpX3NpemVfd3JpdGUoaW5vZGUsIGkgLSAxKTsKJiM0MzsKIAlyZXR1cm4gYWRkX25vbmRpcihkZW50cnksIGlub2RlKTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb21hcC5oIGIvaW5jbHVkZS9saW51eC9pb21hcC5oCmluZGV4IDhjNzU0ZWI5NzRmYmYuLmFiMjdhM2E1YjhkMmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW9tYXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmgKQEAgLTQ3MSw2ICYjNDM7NDcxLDkgQEAgbG9mZl90IGlvbWFwX3NlZWtfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LAogCQljb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMpOwogc2VjdG9yX3QgaW9tYXBfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYm5vLAogCQljb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMpOwomIzQzO2ludCBpb21hcF9zeW1saW5rX3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKnRhcmdldCwgaW50IGxlbiwKJiM0MzsJCWNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcywKJiM0MzsJCWNvbnN0IHN0cnVjdCBpb21hcF93cml0ZV9vcHMgKndyaXRlX29wcywgdm9pZCAqcHJpdmF0ZSk7CiAKIC8qCiAgKiBGbGFncyBmb3IgaW9tYXBfaW9lbmQtJmd0O2lvX2ZsYWdzLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM3OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDExODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNaW5peCBJL09tYXAgQ29udmVyc2lvbiBmb3IgU3ltbGlua3MqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIHRoYXQmIzM5O3Mgc3dhcHBpbmcgb3V0IHRoZSBvbGQgYGJ1ZmZlcl9oZWFkYC1iYXNlZCBibG9jayBJL08gaW4gdGhlIE1pbml4IGZpbGVzeXN0ZW0gZm9yIGBpb21hcGAgYnVmZmVyZWQgSS9PLiBUaGUgbWFpbiB0aGluZyB0aGF0IGNhdWdodCBteSBleWUgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgaW9tYXBfc3ltbGlua193cml0ZWAgYW5kIGl0cyB1c2UgaW4gYGZzL21pbml4L25hbWVpLmNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcy4KClRoZSBjb2RlJiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGl0JiMzOTtzIGFkZGluZyBgaW9tYXBfc3ltbGlua193cml0ZWAgdG8gYGZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNgIGFuZCB1cGRhdGluZyB2YXJpb3VzIE1pbml4IGZpbGVzIHRvIHVzZSB0aGUgbmV3IGZ1bmN0aW9uLiBMb29raW5nIGF0IHRoZSBkZWZpbml0aW9uLCBgaW9tYXBfc3ltbGlua193cml0ZWAgdGFrZXMgYSBzeW1saW5rIHRhcmdldCBzdHJpbmcgYW5kIGl0cyBsZW5ndGguIEl0IGNyZWF0ZXMgYSBga3ZlY2AsIGFuIGBpb21hcF9pdGVyYCwgYW5kIHVzZXMgYGlvdl9pdGVyX2t2ZWNgIHRvIHBvaW50IGFuIGBpb3ZgIHRvIHRoZSBnaXZlbiB0YXJnZXQgc3RyaW5nLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIGBsZW4gLSAxYCB1c2FnZSBpbiBgaW92X2xlbmAuIEluIGBtaW5peF9zeW1saW5rYCwgdGhlIGxlbmd0aCBgaWAgaXMgZGV0ZXJtaW5lZCBhcyBgc3RybGVuKHN5bW5hbWUpICYjNDM7IDFgIHdoaWNoIGluY2x1ZGVkIHRoZSBudWxsIHRlcm1pbmF0b3IuIGBpb21hcF9zeW1saW5rX3dyaXRlYCByZWNlaXZlcyBgbGVuYCBhcyBgaWAsIGJ1dCB1c2VzIGBsZW4gLSAxYCwgY29ycmVzcG9uZGluZyB0byBqdXN0IGBzdHJsZW4oc3ltbmFtZSlgLiBUaGlzIGxvb2tzIGEgYml0IGRpZmZlcmVudCBmcm9tIGhvdyBgcGFnZV9zeW1saW5rYCBoYW5kbGVkIHRoaXMsIHdoZXJlIGBwYWdlX3N5bWxpbmsoaW5vZGUsIHN5bW5hbWUsIGkpYCB3cm90ZSBgaWAgYnl0ZXMsIGluY2x1ZGluZyB0aGUgbnVsbCB0ZXJtaW5hdG9yLiBJdCBoYXMgYmVlbiBhIHdoaWxlLCBidXQgSSBzZWVtIHRvIHJlY2FsbCB0aGUgYHBhZ2Vfc3ltbGlua2Agcm91dGluZSB3cml0aW5nIHRoZSBudWxsIHRlcm1pbmF0b3IuIFNvLCBpdCBhcHBlYXJzIHRoYXQgYGlvbWFwX3N5bWxpbmtfd3JpdGVgIGlzIHdyaXRpbmcgYHN0cmxlbihzeW1uYW1lKWAgYnl0ZXMgaW5zdGVhZCBvZiBgc3RybGVuKHN5bW5hbWUpICYjNDM7IDFgLiBUaGlzIGNvdWxkIGxlYXZlIHRoZSByZXN0IG9mIHRoZSBibG9jayBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkLCBhbmQgdGhpcyBjb3VsZCBiZSBhIHNlY3VyaXR5IHJpc2suCgpUaGUga2V5IHF1ZXN0aW9uIHRoZW4gaXMsIHdoYXQgaGFwcGVucyB0byB0aGUgcmVzdCBvZiB0aGUgYmxvY2s/IFdpdGggYSBibG9jayBzaXplIG9mLCBzYXksIDEwMjQgYnl0ZXMgYW5kIGEgc3ltbGluayBvZiAxMCBieXRlcywgYXJlIHRoZSByZW1haW5pbmcgMTAxNCBieXRlcyBsZWZ0IHVuaW5pdGlhbGl6ZWQ/IEkgbmVlZCB0byBkaWcgaW50byBgaW9tYXBfd3JpdGVfaXRlcmAgb3IgYGlvbWFwX3dyaXRlX2JlZ2luYCB0byBzZWUgaG93IHRoZSB3cml0ZSBvcGVyYXRpb24gaGFuZGxlcyB0aGlzLiBJIHN1c3BlY3QgdGhhdCB3aGVuIHdyaXRpbmcgdG8gYSBuZXcgYmxvY2ssIHRoZSBmdW5jdGlvbiB3aWxsIGFsbG9jYXRlIGEgZm9saW8gYW5kIHplcm8gdGhlIHVud3JpdHRlbiBwYXJ0cy4gTm93LCBgaW9tYXBfd3JpdGVfaXRlcmAgY2FsbHMgYGlvbWFwX3dyaXRlX2JlZ2luYCwgd2hpY2ggY2FsbHMgYGlvbWFwX2dldF9mb2xpb2AsIHNvIEkgc2hvdWxkIHByb2JhYmx5IHZlcmlmeSBteSBhc3N1bXB0aW9ucy4gSG9wZWZ1bGx5LCBgaW9tYXBfZ2V0X2ZvbGlvYCBvciBgaW9tYXBfd3JpdGVfYmVnaW5gIHplcm8gdGhlIGZvbGlvIGlmIGl0IGlzIGEgbmV3IGJsb2NrLCBpZiBzbywgd2UgY2FuIGJlIHN1cmUgdGhlIGVudGlyZSBibG9jayBoYXMgYmVlbiBpbml0aWFsaXplZC4gVGltZSB0byBjaGVjayB0aG9zZSByb3V0aW5lcy4uLiBJIHRoaW5rIHRoZSBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgc2hvdWxkIGNvbWUgaW4gaGFuZHkgdG8gc2VhcmNoIGZvciBpbnN0YW5jZXMgb2YgYGlvbWFwX3dyaXRlX2JlZ2luYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9tYXBfd3JpdGVfYmVnaW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9pb21hcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz04NjI9aW9tYXBfd3JpdGVfZmFpbGVkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbilcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTg3NC1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6ODc1OnN0YXRpYyBpbnQgX19pb21hcF93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtODc2LVx0XHRjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGVfb3BzICp3cml0ZV9vcHMsIHNpemVfdCBsZW4sXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0xMDA0PXN0YXRpYyBsb2ZmX3QgaW9tYXBfdHJpbV9mb2xpb19yYW5nZShzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTEwMTgtXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjEwMTk6c3RhdGljIGludCBpb21hcF93cml0ZV9iZWdpbl9pbmxpbmUoY29uc3Qgc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTEwMjAtXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xMDMyLSAqL1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxMDMzOnN0YXRpYyBpbnQgaW9tYXBfd3JpdGVfYmVnaW4oc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTEwMzQtXHRcdGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZV9vcHMgKndyaXRlX29wcywgc3RydWN0IGZvbGlvICoqZm9saW9wLFxuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTEwMS1cdGlmIChzcmNtYXAtXHUwMDNldHlwZSA9PSBJT01BUF9JTkxJTkUpXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjExMDI6XHRcdHN0YXR1cyA9IGlvbWFwX3dyaXRlX2JlZ2luX2lubGluZShpdGVyLCBmb2xpbyk7XG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTExMDMtXHRlbHNlIGlmIChzcmNtYXAtXHUwMDNlZmxhZ3MgXHUwMDI2IElPTUFQX0ZfQlVGRkVSX0hFQUQpXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xMTA1LVx0ZWxzZVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxMTA2Olx0XHRzdGF0dXMgPSBfX2lvbWFwX3dyaXRlX2JlZ2luKGl0ZXIsIHdyaXRlX29wcywgbGVuLCBmb2xpbyk7XG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTExMDctXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0xMTg4PXN0YXRpYyBpbnQgaW9tYXBfd3JpdGVfaXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvdl9pdGVyICppLFxuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTIzMS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTIzMjpcdFx0c3RhdHVzID0gaW9tYXBfd3JpdGVfYmVnaW4oaXRlciwgd3JpdGVfb3BzLCBcdTAwMjZmb2xpbywgXHUwMDI2b2Zmc2V0LFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xMjMzLVx0XHRcdFx0XHUwMDI2Ynl0ZXMpO1xuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MTU3MT1zdGF0aWMgaW50IGlvbWFwX3Vuc2hhcmVfaXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE1ODYtXHRcdGJ5dGVzID0gbWluX3QodTY0LCBTSVpFX01BWCwgYnl0ZXMpO1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxNTg3Olx0XHRzdGF0dXMgPSBpb21hcF93cml0ZV9iZWdpbihpdGVyLCB3cml0ZV9vcHMsIFx1MDAyNmZvbGlvLCBcdTAwMjZvZmZzZXQsXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE1ODgtXHRcdFx0XHRcdTAwMjZieXRlcyk7XG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0xNjQ4PXN0YXRpYyBpbnQgaW9tYXBfemVyb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBib29sICpkaWRfemVybyxcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE2NjItXHRcdGJ5dGVzID0gbWluX3QodTY0LCBTSVpFX01BWCwgYnl0ZXMpO1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxNjYzOlx0XHRzdGF0dXMgPSBpb21hcF93cml0ZV9iZWdpbihpdGVyLCB3cml0ZV9vcHMsIFx1MDAyNmZvbGlvLCBcdTAwMjZvZmZzZXQsXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE2NjQtXHRcdFx0XHRcdTAwMjZieXRlcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjIxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIEJ1ZmZlcmVkIEkvTyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgYF9faW9tYXBfd3JpdGVfYmVnaW5gIHdvcmtzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGJ1ZmZlcmVkIEkvTy4gU28sIGxldCYjMzk7cyBoZWFkIG92ZXIgdG8gYGZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgbG9naWMgZm9yIG1hbmFnaW5nIHRob3NlIHdyaXRlIG9wZXJhdGlvbnMuIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGl0JiMzOTtzIGNvb3JkaW5hdGluZyB0aGluZ3MsIGhvdyBpdCBoYW5kbGVzIHRoZSBpbml0aWFsIHNldHVwLCBhbmQgd2hhdCB0aGUga2V5IGNvbnNpZGVyYXRpb25zIGFyZSBmb3IgcGVyZm9ybWFuY2UgYW5kIGRhdGEgaW50ZWdyaXR5LiBJJiMzOTttIGVzcGVjaWFsbHkgY3VyaW91cyBhYm91dCBhbnkgcmVjZW50IGNoYW5nZXMgb3IgcG90ZW50aWFsIGdvdGNoYXMgdGhhdCBtaWdodCBiZSBsdXJraW5nIGluIHRoZXJlLiBJdCYjMzk7cyB0aW1lIHRvIGdldCBoYW5kcy1vbiBhbmQgdHJhY2UgdGhyb3VnaCB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19pb21hcF93cml0ZV9iZWdpbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2lvbWFwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pb21hcC9idWZmZXJlZC1pby5jPTg2Mj1pb21hcF93cml0ZV9mYWlsZWQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuKVxuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtODc0LVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzo4NzU6c3RhdGljIGludCBfX2lvbWFwX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy04NzYtXHRcdGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZV9vcHMgKndyaXRlX29wcywgc2l6ZV90IGxlbixcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTEwMzM9c3RhdGljIGludCBpb21hcF93cml0ZV9iZWdpbihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTExMDUtXHRlbHNlXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjExMDY6XHRcdHN0YXR1cyA9IF9faW9tYXBfd3JpdGVfYmVnaW4oaXRlciwgd3JpdGVfb3BzLCBsZW4sIGZvbGlvKTtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTEwNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3MTcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0JiMzOTtzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoZSBjb2RlLCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb24sIGFuZCB0YWlsb3JlZCBmb3IgYSBmZWxsb3cgZXhwZXJ0OgoKKipEaXZpbmcgaW50byBgX19pb21hcF93cml0ZV9iZWdpbmAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHB1bGwgdXAgYF9faW9tYXBfd3JpdGVfYmVnaW5gLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIGlzbiYjMzk7dCBpdD8gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSB3cml0ZSBwYXRoIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIEkvTyBtYXAuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBoYW5kbGUgdGhlIGluaXRpYWwgc2V0dXAgYmVmb3JlIHRoZSBhY3R1YWwgd3JpdGUgaGFwcGVucyAtIHRoaW5ncyBsaWtlIGVuc3VyaW5nIHRoZSByZWxldmFudCBibG9ja3MgYXJlIGFsbG9jYXRlZCwgc2V0dGluZyB1cCBhbnkgbmVjZXNzYXJ5IG1ldGFkYXRhLCBhbmQgbWFraW5nIHN1cmUgdGhlIHdyaXRlIG9wZXJhdGlvbiBjYW4gcHJvY2VlZCBzYWZlbHkuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBoYW5kbGVzIHRoaW5ncyBsaWtlIGV4dGVudCBhbGxvY2F0aW9uLCB3aGV0aGVyIGl0IGRlYWxzIHdpdGggYW55IHByZS1hbGxvY2F0aW9uIHN0cmF0ZWdpZXMgdG8gbWluaW1pemUgZnJhZ21lbnRhdGlvbiwgYW5kIGhvdyBpdCBsb2NrcyBhbmQgc3luY2hyb25pemVzIHdpdGggb3RoZXIgY29uY3VycmVudCBvcGVyYXRpb25zLiBJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgYmxvY2sgZGV2aWNlIGFuZCBhbnkgcG90ZW50aWFsIGNhY2hpbmcgbGF5ZXJzLiBJJiMzOTtsbCBuZWVkIHRvIGRpc3NlY3QgaXRzIGVycm9yIGhhbmRsaW5nIGFuZCBob3cgaXQgZW5zdXJlcyBhdG9taWNpdHkgaW4gdGhlIGZhY2Ugb2YgcG9zc2libGUgaW50ZXJydXB0aW9ucy4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGVyZSB3aWxsIGJlIHNldmVyYWwgZWRnZSBjYXNlcyBhbmQgb3B0aW1pemF0aW9ucyBhdCBwbGF5IGhlcmUgdG8gZW5zdXJlIHBlcmZvcm1hbmNlIGFuZCByZWxpYWJpbGl0eS4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSB0YWNrbGVkIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NzU6XHRzdGF0aWMgaW50IF9faW9tYXBfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXG4gODc2Olx0XHRcdGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZV9vcHMgKndyaXRlX29wcywgc2l6ZV90IGxlbixcbiA4Nzc6XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbylcbiA4Nzg6XHR7XG4gODc5Olx0XHRzdHJ1Y3QgaW9tYXBfZm9saW9fc3RhdGUgKmlmcztcbiA4ODA6XHRcdGxvZmZfdCBwb3MgPSBpdGVyLVx1MDAzZXBvcztcbiA4ODE6XHRcdGxvZmZfdCBibG9ja19zaXplID0gaV9ibG9ja3NpemUoaXRlci1cdTAwM2Vpbm9kZSk7XG4gODgyOlx0XHRsb2ZmX3QgYmxvY2tfc3RhcnQgPSByb3VuZF9kb3duKHBvcywgYmxvY2tfc2l6ZSk7XG4gODgzOlx0XHRsb2ZmX3QgYmxvY2tfZW5kID0gcm91bmRfdXAocG9zICYjNDM7IGxlbiwgYmxvY2tfc2l6ZSk7XG4gODg0Olx0XHR1bnNpZ25lZCBpbnQgbnJfYmxvY2tzID0gaV9ibG9ja3NfcGVyX2ZvbGlvKGl0ZXItXHUwMDNlaW5vZGUsIGZvbGlvKTtcbiA4ODU6XHRcdHNpemVfdCBmcm9tID0gb2Zmc2V0X2luX2ZvbGlvKGZvbGlvLCBwb3MpLCB0byA9IGZyb20gJiM0MzsgbGVuO1xuIDg4NjpcdFx0c2l6ZV90IHBvZmYsIHBsZW47XG4gODg3Olx0XG4gODg4Olx0XHQvKlxuIDg4OTpcdFx0ICogSWYgdGhlIHdyaXRlIG9yIHplcm9pbmcgY29tcGxldGVseSBvdmVybGFwcyB0aGUgY3VycmVudCBmb2xpbywgdGhlblxuIDg5MDpcdFx0ICogZW50aXJlIGZvbGlvIHdpbGwgYmUgZGlydGllZCBzbyB0aGVyZSBpcyBubyBuZWVkIGZvclxuIDg5MTpcdFx0ICogcGVyLWJsb2NrIHN0YXRlIHRyYWNraW5nIHN0cnVjdHVyZXMgdG8gYmUgYXR0YWNoZWQgdG8gdGhpcyBmb2xpby5cbiA4OTI6XHRcdCAqIEZvciB0aGUgdW5zaGFyZSBjYXNlLCB3ZSBtdXN0IHJlYWQgaW4gdGhlIG9uZGlzayBjb250ZW50cyBiZWNhdXNlIHdlXG4gODkzOlx0XHQgKiBhcmUgbm90IGNoYW5naW5nIHBhZ2VjYWNoZSBjb250ZW50cy5cbiA4OTQ6XHRcdCAqL1xuIDg5NTpcdFx0aWYgKCEoaXRlci1cdTAwM2VmbGFncyBcdTAwMjYgSU9NQVBfVU5TSEFSRSkgXHUwMDI2XHUwMDI2IHBvcyBcdTAwM2M9IGZvbGlvX3Bvcyhmb2xpbykgXHUwMDI2XHUwMDI2XG4gODk2Olx0XHQgICAgcG9zICYjNDM7IGxlbiBcdTAwM2U9IGZvbGlvX25leHRfcG9zKGZvbGlvKSlcbiA4OTc6XHRcdFx0cmV0dXJuIDA7XG4gODk4Olx0XG4gODk5Olx0XHRpZnMgPSBpZnNfYWxsb2MoaXRlci1cdTAwM2Vpbm9kZSwgZm9saW8sIGl0ZXItXHUwMDNlZmxhZ3MpO1xuIDkwMDpcdFx0aWYgKChpdGVyLVx1MDAzZWZsYWdzIFx1MDAyNiBJT01BUF9OT1dBSVQpIFx1MDAyNlx1MDAyNiAhaWZzIFx1MDAyNlx1MDAyNiBucl9ibG9ja3MgXHUwMDNlIDEpXG4gOTAxOlx0XHRcdHJldHVybiAtRUFHQUlOO1xuIDkwMjpcdFxuIDkwMzpcdFx0aWYgKGZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKVxuIDkwNDpcdFx0XHRyZXR1cm4gMDtcbiA5MDU6XHRcbiA5MDY6XHRcdGRvIHtcbiA5MDc6XHRcdFx0aW9tYXBfYWRqdXN0X3JlYWRfcmFuZ2UoaXRlci1cdTAwM2Vpbm9kZSwgZm9saW8sIFx1MDAyNmJsb2NrX3N0YXJ0LFxuIDkwODpcdFx0XHRcdFx0YmxvY2tfZW5kIC0gYmxvY2tfc3RhcnQsIFx1MDAyNnBvZmYsIFx1MDAyNnBsZW4pO1xuIDkwOTpcdFx0XHRpZiAocGxlbiA9PSAwKVxuIDkxMDpcdFx0XHRcdGJyZWFrO1xuIDkxMTpcdFxuIDkxMjpcdFx0XHQvKlxuIDkxMzpcdFx0XHQgKiBJZiB0aGUgcmVhZCByYW5nZSB3aWxsIGJlIGVudGlyZWx5IG92ZXJ3cml0dGVuIGJ5IHRoZSB3cml0ZSxcbiA5MTQ6XHRcdFx0ICogd2UgY2FuIHNraXAgaGF2aW5nIHRvIHplcm8vcmVhZCBpdCBpbi5cbiA5MTU6XHRcdFx0ICovXG4gOTE2Olx0XHRcdGlmICghKGl0ZXItXHUwMDNlZmxhZ3MgXHUwMDI2IElPTUFQX1VOU0hBUkUpIFx1MDAyNlx1MDAyNiBmcm9tIFx1MDAzYz0gcG9mZiBcdTAwMjZcdTAwMjZcbiA5MTc6XHRcdFx0ICAgIHRvIFx1MDAzZT0gcG9mZiAmIzQzOyBwbGVuKVxuIDkxODpcdFx0XHRcdGNvbnRpbnVlO1xuIDkxOTpcdFxuIDkyMDpcdFx0XHRpZiAoaW9tYXBfYmxvY2tfbmVlZHNfemVyb2luZyhpdGVyLCBibG9ja19zdGFydCkpIHtcbiA5MjE6XHRcdFx0XHRpZiAoV0FSTl9PTl9PTkNFKGl0ZXItXHUwMDNlZmxhZ3MgXHUwMDI2IElPTUFQX1VOU0hBUkUpKVxuIDkyMjpcdFx0XHRcdFx0cmV0dXJuIC1FSU87XG4gOTIzOlx0XHRcdFx0Zm9saW9femVyb19zZWdtZW50cyhmb2xpbywgcG9mZiwgZnJvbSwgdG8sIHBvZmYgJiM0MzsgcGxlbik7XG4gOTI0Olx0XHRcdH0gZWxzZSB7XG4gOTI1Olx0XHRcdFx0Y29uc3Qgc3RydWN0IGlvbWFwICppb21hcCA9IGlvbWFwX2l0ZXJfc3JjbWFwKGl0ZXIpO1xuIDkyNjpcdFx0XHRcdGludCBzdGF0dXM7XG4gOTI3Olx0XG4gOTI4Olx0XHRcdFx0aWYgKGl0ZXItXHUwMDNlZmxhZ3MgXHUwMDI2IElPTUFQX05PV0FJVClcbiA5Mjk6XHRcdFx0XHRcdHJldHVybiAtRUFHQUlOO1xuIDkzMDpcdFxuIDkzMTpcdFx0XHRcdGlmICh3cml0ZV9vcHMgXHUwMDI2XHUwMDI2IHdyaXRlX29wcy1cdTAwM2VyZWFkX2ZvbGlvX3JhbmdlKVxuIDkzMjpcdFx0XHRcdFx0c3RhdHVzID0gd3JpdGVfb3BzLVx1MDAzZXJlYWRfZm9saW9fcmFuZ2UoaXRlcixcbiA5MzM6XHRcdFx0XHRcdFx0XHRmb2xpbywgYmxvY2tfc3RhcnQsIHBsZW4pO1xuIDkzNDpcdFx0XHRcdGVsc2VcbiA5MzU6XHRcdFx0XHRcdHN0YXR1cyA9IGlvbWFwX2Jpb19yZWFkX2ZvbGlvX3JhbmdlX3N5bmMoaXRlcixcbiA5MzY6XHRcdFx0XHRcdFx0XHRmb2xpbywgYmxvY2tfc3RhcnQsIHBsZW4pO1xuIDkzNzpcdFx0XHRcdGlmIChzdGF0dXMgXHUwMDNjIDApXG4gOTM4Olx0XHRcdFx0XHRmc2Vycm9yX3JlcG9ydF9pbyhpdGVyLVx1MDAzZWlub2RlLFxuIDkzOTpcdFx0XHRcdFx0XHRcdCAgRlNFUlJfQlVGRkVSRURfUkVBRCwgcG9zLFxuIDk0MDpcdFx0XHRcdFx0XHRcdCAgcGxlbiwgc3RhdHVzLCBHRlBfTk9GUyk7XG4gOTQxOlx0XHRcdFx0aWYgKHN0YXR1cylcbiA5NDI6XHRcdFx0XHRcdHJldHVybiBzdGF0dXM7XG4gOTQzOlx0XG4gOTQ0Olx0XHRcdFx0aWYgKGlvbWFwLVx1MDAzZWZsYWdzIFx1MDAyNiBJT01BUF9GX1pFUk9fVEFJTClcbiA5NDU6XHRcdFx0XHRcdGZvbGlvX3plcm9fc2VnbWVudChmb2xpbywgdG8sIHBvZmYgJiM0MzsgcGxlbik7XG4gOTQ2Olx0XHRcdH1cbiA5NDc6XHRcdFx0aW9tYXBfc2V0X3JhbmdlX3VwdG9kYXRlKGZvbGlvLCBwb2ZmLCBwbGVuKTtcbiA5NDg6XHRcdH0gd2hpbGUgKChibG9ja19zdGFydCAmIzQzOz0gcGxlbikgXHUwMDNjIGJsb2NrX2VuZCk7XG4gOTQ5Olx0XG4gOTUwOlx0XHRyZXR1cm4gMDtcbiA5NTE6XHR9XG4gOTUyOlx0XG4gOTUzOlx0c3RhdGljIHN0cnVjdCBmb2xpbyAqX19pb21hcF9nZXRfZm9saW8oc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXG4gOTU0Olx0XHRcdGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZV9vcHMgKndyaXRlX29wcywgc2l6ZV90IGxlbilcbiA5NTU6XHR7XG4gOTU2Olx0XHRsb2ZmX3QgcG9zID0gaXRlci1cdTAwM2Vwb3M7XG4gOTU3Olx0XG4gOTU4Olx0XHRpZiAoIW1hcHBpbmdfbGFyZ2VfZm9saW9fc3VwcG9ydChpdGVyLVx1MDAzZWlub2RlLVx1MDAzZWlfbWFwcGluZykpXG4gOTU5Olx0XHRcdGxlbiA9IG1pbl90KHNpemVfdCwgbGVuLCBQQUdFX1NJWkUgLSBvZmZzZXRfaW5fcGFnZShwb3MpKTtcbiA5NjA6XHRcbiA5NjE6XHRcdGlmIChpdGVyLVx1MDAzZWlvbWFwLmZsYWdzIFx1MDAyNiBJT01BUF9GX0ZPTElPX0JBVENIKSB7XG4gOTYyOlx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBmb2xpb19iYXRjaF9uZXh0KGl0ZXItXHUwMDNlZmJhdGNoKTtcbiA5NjM6XHRcbiA5NjQ6XHRcdFx0aWYgKCFmb2xpbylcbiA5NjU6XHRcdFx0XHRyZXR1cm4gTlVMTDtcbiA5NjY6XHRcbiA5Njc6XHRcdFx0LypcbiA5Njg6XHRcdFx0ICogVGhlIGZvbGlvIG1hcHBpbmcgZ2VuZXJhbGx5IHNob3VsZG4mIzM5O3QgaGF2ZSBjaGFuZ2VkIGJhc2VkIG9uXG4gOTY5Olx0XHRcdCAqIGZzIGxvY2tzLCBidXQgYmUgY29uc2lzdGVudCB3aXRoIGZpbGVtYXAgbG9va3VwIGFuZCByZXRyeVxuIDk3MDpcdFx0XHQgKiB0aGUgaXRlciBpZiBpdCBkb2VzLlxuIDk3MTpcdFx0XHQgKi9cbiA5NzI6XHRcdFx0Zm9saW9fbG9jayhmb2xpbyk7XG4gOTczOlx0XHRcdGlmICh1bmxpa2VseShmb2xpby1cdTAwM2VtYXBwaW5nICE9IGl0ZXItXHUwMDNlaW5vZGUtXHUwMDNlaV9tYXBwaW5nKSkge1xuIDk3NDpcdFx0XHRcdGl0ZXItXHUwMDNlaW9tYXAuZmxhZ3MgfD0gSU9NQVBfRl9TVEFMRTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2OTcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGBfX2lvbWFwX3dyaXRlX2JlZ2luYCBhbmQgWmVyb2luZyBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgX19pb21hcF93cml0ZV9iZWdpbmAgZnVuY3Rpb24gYW5kIEkgc2VlIHRoaXMgY3J1Y2lhbCBjaGVjazogYGlvbWFwX2Jsb2NrX25lZWRzX3plcm9pbmdgLiBJZiB0aGF0IHJldHVybnMgdHJ1ZSwgdGhlbiB3ZSBjYWxsIGBmb2xpb196ZXJvX3NlZ21lbnRzYC4gTXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYGZvbGlvX3plcm9fc2VnbWVudHNgIGlzIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSB1bndyaXR0ZW4gcGFydHMgb2YgdGhlIGJsb2NrIGFyZSB6ZXJvZWQgb3V0IGJlZm9yZSB3ZSB3cml0ZSBvdXIgbmV3IGRhdGEuIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIHplcm9pbmcgYmVmb3JlIGBmcm9tYCBhbmQgYWZ0ZXIgYHRvYCwgc2ltcGxlIGVub3VnaC4KCldhaXQgYSBtaW51dGUsIG15IGV4cGVydCBpbnR1aXRpb24gaXMgdGluZ2xpbmcuIFdoYXQgaGFwcGVucyBpZiB0aGlzIGlzbiYjMzk7dCBhICpuZXcqIGJsb2NrIGFsbG9jYXRpb24gYnV0IHJhdGhlciBhbiAqb3ZlcndyaXRlKj8gSWYgd2UmIzM5O3JlIG92ZXJ3cml0aW5nIGV4aXN0aW5nIGRhdGEsIGRvZXMgYGlvbWFwX2Jsb2NrX25lZWRzX3plcm9pbmdgICpzdGlsbCogcmV0dXJuIHRydWU/IEkgbmVlZCB0byBjaGVjayB0aGUgY29uZGl0aW9ucyB3aGVuIGBpb21hcF9ibG9ja19uZWVkc196ZXJvaW5nYCByZXR1cm5zIHRydWUuIFNwZWNpZmljYWxseSwgSSBrbm93IHRoYXQgd2hlbiB0aGUgYElPTUFQX0ZfTkVXYCBmbGFnIGlzIHNldCwgaXQgd2lsbCByZXR1cm4gdHJ1ZSwgYnV0IHdoYXQgYWJvdXQgb3RoZXIgc2NlbmFyaW9zPyBUaGlzIGlzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBpbXBhY3Qgb2YgdGhpcyBmdW5jdGlvbiwgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGZyb20gemVyb2luZyBhbHJlYWR5IGFsbG9jYXRlZCBkYXRhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb21hcF9ibG9ja19uZWVkc196ZXJvaW5nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MzE4PXN0YXRpYyB2b2lkIGlvbWFwX2FkanVzdF9yZWFkX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0zODEtXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjM4MjpzdGF0aWMgaW5saW5lIGJvb2wgaW9tYXBfYmxvY2tfbmVlZHNfemVyb2luZyhjb25zdCBzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMzgzLVx0XHRsb2ZmX3QgcG9zKVxuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9NTU3PXN0YXRpYyBpbnQgaW9tYXBfcmVhZF9mb2xpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtNjA5LVx0XHRcdGlvbWFwX3NldF9yYW5nZV91cHRvZGF0ZShmb2xpbywgcG9mZiwgcGxlbik7XG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjYxMDpcdFx0fSBlbHNlIGlmIChpb21hcF9ibG9ja19uZWVkc196ZXJvaW5nKGl0ZXIsIHBvcykpIHtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtNjExLVx0XHRcdC8qIHplcm8gcG9zdC1lb2YgYmxvY2tzIGFzIHRoZSBwYWdlIG1heSBiZSBtYXBwZWQgKi9cbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTg3NT1zdGF0aWMgaW50IF9faW9tYXBfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy05MTktXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjkyMDpcdFx0aWYgKGlvbWFwX2Jsb2NrX25lZWRzX3plcm9pbmcoaXRlciwgYmxvY2tfc3RhcnQpKSB7XG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTkyMS1cdFx0XHRpZiAoV0FSTl9PTl9PTkNFKGl0ZXItXHUwMDNlZmxhZ3MgXHUwMDI2IElPTUFQX1VOU0hBUkUpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTYxNwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBpb21hcF9ibG9ja19uZWVkc196ZXJvaW5nYC4gSGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmc6CgoqKkFuYWx5emluZyBgaW9tYXBfYmxvY2tfbmVlZHNfemVyb2luZ2AqKgoKQWxyaWdodCwgSSYjMzk7bSBwdWxsaW5nIHVwIHRoZSBjb2RlIGZvciBgaW9tYXBfYmxvY2tfbmVlZHNfemVyb2luZ2AuIEdpdmVuIHRoZSBuYW1lLCBJJiMzOTttIGltbWVkaWF0ZWx5IGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiBhIHNwZWNpZmljIGJsb2NrIG5lZWRzIHRvIGJlIGV4cGxpY2l0bHkgemVyb2VkIG91dCBiZWZvcmUgYmVpbmcgd3JpdHRlbiB0by4gVGhpcyBsaWtlbHkgcmVsYXRlcyB0byBob3cgd2UgaGFuZGxlIHNwYXJzZSBmaWxlcywgZGlyZWN0IEkvTywgYW5kIHBlcmhhcHMgZXZlbiB0aGluZ3MgbGlrZSBjb3B5LW9uLXdyaXRlIG1lY2hhbmlzbXMsIG9yIG1heWJlIGV2ZW4gc2VjdXJpdHkgY29uY2VybnMgYXJvdW5kIHJlc2lkdWFsIGRhdGEuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIGdvaW5nIHRvIGNoZWNrIHRoZSBibG9jayBtYXBwaW5nIHdpdGhpbiB0aGUgSS9PIGNvbnRleHQgYW5kIHRoZSBmaWxlJiMzOTtzIG1ldGFkYXRhIHRvIG1ha2UgdGhpcyBkZXRlcm1pbmF0aW9uLiBJdOKAmXMgZ290IHRvIGNvbnNpZGVyIGlmIHRoZSBibG9jayBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkIChsaWtlIGJ5IGEgcHJldmlvdXMgd3JpdGUpLCBvciBpZiBpdCYjMzk7cyBhICYjMzQ7aG9sZSYjMzQ7IGluIHRoZSBmaWxlLiBJIGFsc28gd29uZGVyIGlmIGl0IGZhY3RvcnMgaW4gYW55IHVzZXItc3VwcGxpZWQgZmxhZ3Mgb3IgaGludHMgcHJvdmlkZWQgZHVyaW5nIHRoZSBJL08gb3BlcmF0aW9uIGl0c2VsZi4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBibG9jayBkZXZpY2UgYW5kIHRoZSBmaWxlc3lzdGVtJiMzOTtzIGFsbG9jYXRpb24gc3RyYXRlZ3kgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuIE15IGV4cGVydGlzZSBpbiB0aGlzIGFyZWEgaXMgc3VjaCB0aGF0IEkgd291bGQgZ3Vlc3MgdGhlIHVuZGVybHlpbmcgbG9naWMgaXMgdG8gYXZvaWQgdW5uZWNlc3NhcnkgSS9PLCBhbmQgdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5IGFuZCBzZWN1cml0eSwgYnV0IEkgbmVlZCB0byBzZWUgdGhlIGRldGFpbHMgb2YgaG93IGl0IGFsbCB3b3Jrcy4gSeKAmWxsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGNoZWNrcyBmb3Igd2hldGhlciB0aGUgYmxvY2sgaXMgbWFwcGVkLCB3aGV0aGVyIHRoZSBmaWxlIGlzIHNwYXJzZSwgb3IgcGVyaGFwcyB3aGV0aGVyIHRoZXJlJiMzOTtzIHNvbWUgc3BlY2lhbCBmaWxlc3lzdGVtIGZlYXR1cmUgYXQgcGxheS4gVW5kZXJzdGFuZGluZyB0aGUgbnVhbmNlcyBvZiB0aGlzIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGJlIGtleSB0byBvcHRpbWl6aW5nIEkvTyBpbiB0aGlzIGNvbnRleHQuIExldCYjMzk7cyBzZWUgaG93IGl0JiMzOTtzIGltcGxlbWVudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM4MjpcdHN0YXRpYyBpbmxpbmUgYm9vbCBpb21hcF9ibG9ja19uZWVkc196ZXJvaW5nKGNvbnN0IHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxuIDM4MzpcdFx0XHRsb2ZmX3QgcG9zKVxuIDM4NDpcdHtcbiAzODU6XHRcdGNvbnN0IHN0cnVjdCBpb21hcCAqc3JjbWFwID0gaW9tYXBfaXRlcl9zcmNtYXAoaXRlcik7XG4gMzg2Olx0XG4gMzg3Olx0XHQvKlxuIDM4ODpcdFx0ICogSWYgdGhpcyBibG9jayBoYXMgbm90IGJlZW4gd3JpdHRlbiwgdGhlcmUmIzM5O3Mgbm90aGluZyB0byByZWFkXG4gMzg5Olx0XHQgKi9cbiAzOTA6XHRcdGlmIChzcmNtYXAtXHUwMDNldHlwZSAhPSBJT01BUF9NQVBQRUQpXG4gMzkxOlx0XHRcdHJldHVybiB0cnVlO1xuIDM5MjpcdFxuIDM5MzpcdFx0LypcbiAzOTQ6XHRcdCAqIE5ld2x5IGFsbG9jYXRlZCBibG9ja3MgaGF2ZSBub3QgYmVlbiB3cml0dGVuXG4gMzk1Olx0XHQgKi9cbiAzOTY6XHRcdGlmIChzcmNtYXAtXHUwMDNlZmxhZ3MgXHUwMDI2IElPTUFQX0ZfTkVXKVxuIDM5NzpcdFx0XHRyZXR1cm4gdHJ1ZTtcbiAzOTg6XHRcbiAzOTk6XHRcdC8qXG4gNDAwOlx0XHQgKiBmc3Zlcml0eSBtZXRhZGF0YSBpcyBzdG9yZWQgcGFzdCBpX3NpemUsIHdlIG5lZWQgdG8gcmVhZCBpdCBpbnN0ZWFkXG4gNDAxOlx0XHQgKiBvZiB6ZXJvaW5nXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzE2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTU3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJlYWRzIGluIE1pbml4IFN5bWxpbmsgSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW5pdGlhbCBjb25jZXJuIHdhcyBjZW50ZXJlZCBhcm91bmQgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggc3ltbGlua3MgaW4gdGhlIE1pbml4IGZpbGVzeXN0ZW0uIFRoZSBrZXkgb2JzZXJ2YXRpb24gaXMgdGhhdCB3aGVuIGEgbmV3IGJsb2NrIGlzIGFsbG9jYXRlZCwgYElPTUFQX0ZfTkVXYCBpcyBzZXQsIGFuZCB0aGUgYmxvY2sgaXMgemVyb2VkLiBUaGlzIGlzIGltcG9ydGFudC4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBzeW1saW5rIGNhc2UuIEkgaGFkIGEgaHlwb3RoZXNpcyB3aGVyZSBhIHN5bWxpbmsgYmVpbmcgd3JpdHRlbiBvdmVyIGFuIGV4aXN0aW5nIGJsb2NrIG1pZ2h0IGludHJvZHVjZSB1bmluaXRpYWxpemVkIGRhdGEuIEhvd2V2ZXIsIHRoZSBjb2RlIGZsb3cgaW4gYG1pbml4X3N5bWxpbmtgIGFuZCBzdWJzZXF1ZW50IGNhbGxzIHRvIGBpb21hcF9zeW1saW5rX3dyaXRlYCBudWxsaWZpZWQgdGhhdCBjb25jZXJuLiBUaGUgc3ltbGluayBwcm9jZXNzIGFsbG9jYXRlcyBhIG5ldyBpbm9kZSB3aXRoIHNpemUgemVybyBhbmQgdGhlbiB1c2VzIGBpb21hcF9zeW1saW5rX3dyaXRlYCB0byB3cml0ZSB0aGUgc3ltbGluayB0YXJnZXQuIENydWNpYWxseSwgdGhlIHRhcmdldCBpdHNlbGYgaXMgYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nLCBhbmQgYGlvbWFwX3N5bWxpbmtfd3JpdGVgIG9ubHkgd3JpdGVzIHVwIHRvIGBzdHJsZW4oc3ltbmFtZSlgIGJ5dGVzIGZyb20gdGhlIHRhcmdldC4gVGhlIGJsb2NrIGlzIHplcm9lZCBhcyBhIHNpZGUgZWZmZWN0LiBUaGVyZWZvcmUsIG5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBpcyB3cml0dGVuIHRvIHRoZSBkaXNrLgoKVGhlIGZvY3VzIHRoZW4gc2hpZnRlZCB0byBob3cgYSBzeW1saW5rIGlzIHJlYWQuIFRoYXQgcGF0aCBsZWQgbWUgdG8gdGhlIGBwYWdlX2dldF9saW5rYCBmdW5jdGlvbiwgd2hpY2gsIGFzIGEgc3ltbGluayBoYW5kbGVyLCBwdWxscyBmcm9tIHRoZSBwYWdlIGNhY2hlLiBJcyB0aGF0IGZ1bmN0aW9uIGRlc2lnbmVkIHRvIGhhbmRsZSBhIG51bGwtdGVybWluYXRlZCBzdHJpbmc/IFRoaXMgaXMgd2hlcmUgdGhlIGlzc3VlIG1pZ2h0IGJlLiBCdXQsIHRoZSBleGlzdGluZyB3cml0ZSBwYXRoIHplcm8tZmlsbHMgdGhlIHJlc3Qgb2YgdGhlIHBhZ2UuIFNvLCBpZiB0aGUgbGluayBpcyBzaG9ydGVyIHRoYW4gdGhlIHBhZ2Ugc2l6ZSwgaXQgd2lsbCBzdGlsbCBhcHBlYXIgbnVsbC10ZXJtaW5hdGVkLiBUaGlzIGluZGljYXRlcyB0aGF0IGl0JiMzOTtzIHNhZmUuCgpMZXQmIzM5O3MgbG9vayBhdCB0aGUgb3RoZXIgY29kZSBwYXRocyBsaWtlIHRoZSBgbWluaXhfZmlsZV93cml0ZV9pdGVyYCwgYG1pbml4X3dyaXRlcGFnZXNgLCBgbWluaXhfcmVhZF9mb2xpb2AsIGFuZCBgbWluaXhfcmVhZGFoZWFkYCBmdW5jdGlvbnMgdG8gdmVyaWZ5IHRoYXQgYW55IHJlbWFpbmluZyByZWFkLXJlbGF0ZWQgaXNzdWVzIGFyZSBoYW5kbGVkIGJ5IHRoZSBzdGFuZGFyZCBwcm9jZWR1cmVzLCBzdWNoIGFzIGJ1ZmZlciBhbmQgd3JpdGViYWNrIGZsb3dzLCBvciBieSB1c2VyLXNwYWNlIGlucHV0IHZhbGlkYXRpb24uIFRoZXNlIGFyZSBnZW5lcmljIEkvTyBwYXRocywgYW5kIGRhdGEgY29tZXMgZnJvbSBlaXRoZXIgdGhlIHVzZXIgc3BhY2Ugb3IgYmxvY2sgbGF5ZXIsIGFuZCBpbiBlaXRoZXIgY2FzZSwgdGhlIGRhdGEgc2hvdWxkIGJlIHNhZmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZ2VfZ2V0X2xpbmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvOXAvdmZzX2lub2RlX2RvdGwuYz05MjA9djlmc192ZnNfZ2V0X2xpbmtfZG90bChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvOXAvdmZzX2lub2RlX2RvdGwuYy05MjctXHRpZiAodjlzZXMtXHUwMDNlY2FjaGUgXHUwMDI2IChDQUNIRV9NRVRBfENBQ0hFX0xPT1NFKSlcbmZzLzlwL3Zmc19pbm9kZV9kb3RsLmM6OTI4Olx0XHRyZXR1cm4gcGFnZV9nZXRfbGluayhkZW50cnksIGlub2RlLCBkb25lKTtcbmZzLzlwL3Zmc19pbm9kZV9kb3RsLmMtOTI5LVxuLS1cbmZzL2FmZnMvc3ltbGluay5jPTcyPWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGFmZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0ge1xuZnMvYWZmcy9zeW1saW5rLmM6NzM6XHQuZ2V0X2xpbmtcdD0gcGFnZV9nZXRfbGluayxcbmZzL2FmZnMvc3ltbGluay5jLTc0LVx0LnNldGF0dHJcdD0gYWZmc19zZXRhdHRyLFxuLS1cbmZzL2J0cmZzL2lub2RlLmM9MTA4MTU9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGJ0cmZzX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbmZzL2J0cmZzL2lub2RlLmM6MTA4MTY6XHQuZ2V0X2xpbmtcdD0gcGFnZV9nZXRfbGluayxcbmZzL2J0cmZzL2lub2RlLmMtMTA4MTctXHQuZ2V0YXR0clx0PSBidHJmc19nZXRhdHRyLFxuLS1cbmZzL2NvZGEvY25vZGUuYz0yMD1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY29kYV9zeW1saW5rX2lub2RlX29wZXJhdGlvbnMgPSB7XG5mcy9jb2RhL2Nub2RlLmM6MjE6XHQuZ2V0X2xpbmtcdD0gcGFnZV9nZXRfbGluayxcbmZzL2NvZGEvY25vZGUuYy0yMi1cdC5zZXRhdHRyXHQ9IGNvZGFfc2V0YXR0cixcbi0tXG5mcy9lcm9mcy9pbm9kZS5jPTM4Nz1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBlcm9mc19zeW1saW5rX2lvcHMgPSB7XG5mcy9lcm9mcy9pbm9kZS5jOjM4ODpcdC5nZXRfbGluayA9IHBhZ2VfZ2V0X2xpbmssXG5mcy9lcm9mcy9pbm9kZS5jLTM4OS1cdC5nZXRhdHRyID0gZXJvZnNfZ2V0YXR0cixcbi0tXG5mcy9leHQyL3N5bWxpbmsuYz0yND1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBleHQyX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbmZzL2V4dDIvc3ltbGluay5jOjI1Olx0LmdldF9saW5rXHQ9IHBhZ2VfZ2V0X2xpbmssXG5mcy9leHQyL3N5bWxpbmsuYy0yNi1cdC5nZXRhdHRyXHQ9IGV4dDJfZ2V0YXR0cixcbi0tXG5mcy9mMmZzL25hbWVpLmM9NjM0PXN0YXRpYyBjb25zdCBjaGFyICpmMmZzX2dldF9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9mMmZzL25hbWVpLmMtNjM3LXtcbmZzL2YyZnMvbmFtZWkuYzo2Mzg6XHRjb25zdCBjaGFyICpsaW5rID0gcGFnZV9nZXRfbGluayhkZW50cnksIGlub2RlLCBkb25lKTtcbmZzL2YyZnMvbmFtZWkuYy02MzktXG4tLVxuZnMvZnVzZS9kaXIuYz0xODU0PXN0YXRpYyBjb25zdCBjaGFyICpmdXNlX2dldF9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9mdXNlL2Rpci5jLTE4NjUtXHRpZiAoZmMtXHUwMDNlY2FjaGVfc3ltbGlua3MpXG5mcy9mdXNlL2Rpci5jOjE4NjY6XHRcdHJldHVybiBwYWdlX2dldF9saW5rX3JhdyhkZW50cnksIGlub2RlLCBjYWxsYmFjayk7XG5mcy9mdXNlL2Rpci5jLTE4NjctXG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jPTQ0ND1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgaGZzcGx1c19zeW1saW5rX2lub2RlX29wZXJhdGlvbnMgPSB7XG5mcy9oZnNwbHVzL2lub2RlLmM6NDQ1Olx0LmdldF9saW5rXHQ9IHBhZ2VfZ2V0X2xpbmssXG5mcy9oZnNwbHVzL2lub2RlLmMtNDQ2LVx0LnNldGF0dHJcdD0gaGZzcGx1c19zZXRhdHRyLFxuLS1cbmZzL2pmcy9zeW1saW5rLmM9MTc9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgamZzX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbmZzL2pmcy9zeW1saW5rLmM6MTg6XHQuZ2V0X2xpbmtcdD0gcGFnZV9nZXRfbGluayxcbmZzL2pmcy9zeW1saW5rLmMtMTktXHQuc2V0YXR0clx0PSBqZnNfc2V0YXR0cixcbi0tXG5mcy9taW5peC9pbm9kZS5jPTU2OT1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWluaXhfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0ge1xuZnMvbWluaXgvaW5vZGUuYzo1NzA6XHQuZ2V0X2xpbmtcdD0gcGFnZV9nZXRfbGluayxcbmZzL21pbml4L2lub2RlLmMtNTcxLVx0LmdldGF0dHJcdD0gbWluaXhfZ2V0YXR0cixcbi0tXG5mcy9uYW1laS5jPTY0NTI9RVhQT1JUX1NZTUJPTCh2ZnNfZ2V0X2xpbmspO1xuLS1cbmZzL25hbWVpLmMtNjQ1NC0vKiBnZXQgdGhlIGxpbmsgY29udGVudHMgaW50byBwYWdlY2FjaGUgKi9cbmZzL25hbWVpLmM6NjQ1NTpzdGF0aWMgY2hhciAqX19wYWdlX2dldF9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbmZzL25hbWVpLmMtNjQ1Ni1cdFx0XHQgICAgIHN0cnVjdCBkZWxheWVkX2NhbGwgKmNhbGxiYWNrKVxuLS1cbmZzL25hbWVpLmMtNjQ3OC1cbmZzL25hbWVpLmM6NjQ3OTpjb25zdCBjaGFyICpwYWdlX2dldF9saW5rX3JhdyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9uYW1laS5jLTY0ODAtXHRcdFx0ICAgICAgc3RydWN0IGRlbGF5ZWRfY2FsbCAqY2FsbGJhY2spXG5mcy9uYW1laS5jLTY0ODEte1xuZnMvbmFtZWkuYzo2NDgyOlx0cmV0dXJuIF9fcGFnZV9nZXRfbGluayhkZW50cnksIGlub2RlLCBjYWxsYmFjayk7XG5mcy9uYW1laS5jLTY0ODMtfVxuZnMvbmFtZWkuYzo2NDg0OkVYUE9SVF9TWU1CT0xfR1BMKHBhZ2VfZ2V0X2xpbmtfcmF3KTtcbmZzL25hbWVpLmMtNjQ4NS1cbmZzL25hbWVpLmMtNjQ4Ni0vKipcbmZzL25hbWVpLmM6NjQ4NzogKiBwYWdlX2dldF9saW5rKCkgLSBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZ2V0X2xpbmsgaW5vZGVfb3BlcmF0aW9uLlxuZnMvbmFtZWkuYy02NDg4LSAqIEBkZW50cnk6IFRoZSBkaXJlY3RvcnkgZW50cnkgd2hpY2ggaXMgdGhlIHN5bWxpbmsuXG4tLVxuZnMvbmFtZWkuYy02NDk2LSAqL1xuZnMvbmFtZWkuYzo2NDk3OmNvbnN0IGNoYXIgKnBhZ2VfZ2V0X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZnMvbmFtZWkuYy02NDk4LVx0XHRcdFx0XHRzdHJ1Y3QgZGVsYXllZF9jYWxsICpjYWxsYmFjaylcbmZzL25hbWVpLmMtNjQ5OS17XG5mcy9uYW1laS5jOjY1MDA6XHRjaGFyICprYWRkciA9IF9fcGFnZV9nZXRfbGluayhkZW50cnksIGlub2RlLCBjYWxsYmFjayk7XG5mcy9uYW1laS5jLTY1MDEtXG4tLVxuZnMvbmFtZWkuYy02NTA1LX1cbmZzL25hbWVpLmM6NjUwNjpFWFBPUlRfU1lNQk9MKHBhZ2VfZ2V0X2xpbmspO1xuZnMvbmFtZWkuYy02NTA3LVxuLS1cbmZzL25hbWVpLmMtNjUxMS0gKlxuZnMvbmFtZWkuYzo2NTEyOiAqIFRoaXMgaXMgdXNlZCBpbnRlcm5hbGx5IGJ5IHBhZ2VfZ2V0X2xpbmsoKS4gIEl0IGlzIGV4cG9ydGVkIGZvciB1c2VcbmZzL25hbWVpLmM6NjUxMzogKiBieSBmaWxlc3lzdGVtcyB3aGljaCBuZWVkIHRvIGltcGxlbWVudCBhIHZhcmlhbnQgb2YgcGFnZV9nZXRfbGluaygpXG5mcy9uYW1laS5jLTY1MTQtICogdGhlbXNlbHZlcy4gIERlc3BpdGUgdGhlIGFwcGFyZW50IHN5bW1ldHJ5LCBmaWxlc3lzdGVtcyB3aGljaCB1c2VcbmZzL25hbWVpLmM6NjUxNTogKiBwYWdlX2dldF9saW5rKCkgZG8gbm90IG5lZWQgdG8gY2FsbCBwYWdlX3B1dF9saW5rKCkuXG5mcy9uYW1laS5jLTY1MTYtICpcbi0tXG5mcy9uYW1laS5jPTY1Mjg9aW50IHBhZ2VfcmVhZGxpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyIF9fdXNlciAqYnVmZmVyLCBpbnQgYnVmbGVuKVxuLS1cbmZzL25hbWVpLmMtNjUzMy1cdERFRklORV9ERUxBWUVEX0NBTEwoZG9uZSk7XG5mcy9uYW1laS5jOjY1MzQ6XHRsaW5rID0gcGFnZV9nZXRfbGluayhkZW50cnksIGRfaW5vZGUoZGVudHJ5KSwgXHUwMDI2ZG9uZSk7XG5mcy9uYW1laS5jLTY1MzUtXHRyZXMgPSBQVFJfRVJSKGxpbmspO1xuLS1cbmZzL25hbWVpLmM9NjU3OD1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBwYWdlX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbmZzL25hbWVpLmM6NjU3OTpcdC5nZXRfbGlua1x0PSBwYWdlX2dldF9saW5rLFxuZnMvbmFtZWkuYy02NTgwLX07XG4tLVxuZnMvbmlsZnMyL25hbWVpLmM9NTg0PWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG5pbGZzX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbmZzL25pbGZzMi9uYW1laS5jOjU4NTpcdC5nZXRfbGlua1x0PSBwYWdlX2dldF9saW5rLFxuZnMvbmlsZnMyL25hbWVpLmMtNTg2LVx0LnBlcm1pc3Npb24gICAgID0gbmlsZnNfcGVybWlzc2lvbixcbi0tXG5mcy9vY2ZzMi9zeW1saW5rLmM9ODQ9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgb2NmczJfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0ge1xuZnMvb2NmczIvc3ltbGluay5jOjg1Olx0LmdldF9saW5rXHQ9IHBhZ2VfZ2V0X2xpbmssXG5mcy9vY2ZzMi9zeW1saW5rLmMtODYtXHQuZ2V0YXR0clx0PSBvY2ZzMl9nZXRhdHRyLFxuLS1cbmZzL3NxdWFzaGZzL3N5bWxpbmsuYz0xMDU9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgc3F1YXNoZnNfc3ltbGlua19pbm9kZV9vcHMgPSB7XG5mcy9zcXVhc2hmcy9zeW1saW5rLmM6MTA2Olx0LmdldF9saW5rID0gcGFnZV9nZXRfbGluayxcbmZzL3NxdWFzaGZzL3N5bWxpbmsuYy0xMDctXHQubGlzdHhhdHRyID0gc3F1YXNoZnNfbGlzdHhhdHRyXG4tLVxuZnMvdWRmL3N5bWxpbmsuYz0xNjg9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdWRmX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbmZzL3VkZi9zeW1saW5rLmM6MTY5Olx0LmdldF9saW5rXHQ9IHBhZ2VfZ2V0X2xpbmssXG5mcy91ZGYvc3ltbGluay5jLTE3MC1cdC5nZXRhdHRyXHQ9IHVkZl9zeW1saW5rX2dldGF0dHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjQ2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwmIzM5O3MgTmFtZSBSZXNvbHV0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aG9zZSBmaWxlIHBhdGggbG9va3Vwcy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSByZWFkaW5nIHRoZSBgX19wYWdlX2dldF9saW5rYCBmdW5jdGlvbiwgd2hpY2ggcmVzaWRlcyBpbiBgZnMvbmFtZWkuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIG9yIGF0IGxlYXN0IGEgY3J1Y2lhbCBwYXJ0IG9mIHRoZSBtYWdpYywgaW4gbGlua2luZyBhIGZpbGUgbmFtZSB0byBpdHMgYXNzb2NpYXRlZCBpbm9kZS4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSBpbnZvbHZlZCBpbiBuYXZpZ2F0aW5nIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlLCBsaWtlbHkgZGVhbGluZyB3aXRoIGhvdyBkaXJlY3RvcnkgZW50cmllcyBhcmUgYWNjZXNzZWQgYW5kIHBvdGVudGlhbGx5IGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgdW5kZXJseWluZyBwYWdlIGNhY2hlLiBJIGltYWdpbmUgdGhlcmUgaXMgc29tZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBidWZmZXIgY2FjaGUgdG9vLCBidXQgSSYjMzk7bGwgc2VlIHdoZW4gSSByZWFkIGl0LiBMZXQmIzM5O3Mgc2VlIGhvdyBpdCBnZXRzIGV4ZWN1dGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL25hbWVpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NDU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY0NTU6XHRzdGF0aWMgY2hhciAqX19wYWdlX2dldF9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbjY0NTY6XHRcdFx0XHQgICAgIHN0cnVjdCBkZWxheWVkX2NhbGwgKmNhbGxiYWNrKVxuNjQ1NzpcdHtcbjY0NTg6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG42NDU5Olx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLVx1MDAzZWlfbWFwcGluZztcbjY0NjA6XHRcbjY0NjE6XHRcdGlmICghZGVudHJ5KSB7XG42NDYyOlx0XHRcdGZvbGlvID0gZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgMCk7XG42NDYzOlx0XHRcdGlmIChJU19FUlIoZm9saW8pKVxuNjQ2NDpcdFx0XHRcdHJldHVybiBFUlJfUFRSKC1FQ0hJTEQpO1xuNjQ2NTpcdFx0XHRpZiAoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKSB7XG42NDY2Olx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbjY0Njc6XHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUNISUxEKTtcbjY0Njg6XHRcdFx0fVxuNjQ2OTpcdFx0fSBlbHNlIHtcbjY0NzA6XHRcdFx0Zm9saW8gPSByZWFkX21hcHBpbmdfZm9saW8obWFwcGluZywgMCwgTlVMTCk7XG42NDcxOlx0XHRcdGlmIChJU19FUlIoZm9saW8pKVxuNjQ3MjpcdFx0XHRcdHJldHVybiBFUlJfQ0FTVChmb2xpbyk7XG42NDczOlx0XHR9XG42NDc0Olx0XHRzZXRfZGVsYXllZF9jYWxsKGNhbGxiYWNrLCBwYWdlX3B1dF9saW5rLCBmb2xpbyk7XG42NDc1Olx0XHRCVUdfT04obWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSBcdTAwMjYgX19HRlBfSElHSE1FTSk7XG42NDc2Olx0XHRyZXR1cm4gZm9saW9fYWRkcmVzcyhmb2xpbyk7XG42NDc3Olx0fVxuNjQ3ODpcdFxuNjQ3OTpcdGNvbnN0IGNoYXIgKnBhZ2VfZ2V0X2xpbmtfcmF3KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbjY0ODA6XHRcdFx0XHQgICAgICBzdHJ1Y3QgZGVsYXllZF9jYWxsICpjYWxsYmFjaylcbjY0ODE6XHR7XG42NDgyOlx0XHRyZXR1cm4gX19wYWdlX2dldF9saW5rKGRlbnRyeSwgaW5vZGUsIGNhbGxiYWNrKTtcbjY0ODM6XHR9XG42NDg0Olx0RVhQT1JUX1NZTUJPTF9HUEwocGFnZV9nZXRfbGlua19yYXcpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTM0NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6CgoqKkRlY29uc3RydWN0aW5nIGBwYWdlX2dldF9saW5rYCBhbmQgRm9saW8gQWRkcmVzc2luZyoqCgpBbHJpZ2h0LCBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgX19wYWdlX2dldF9saW5rYCBmdW5jdGlvbiBhbmQgaXQmIzM5O3Mgc3BpdHRpbmcgYmFjayBgZm9saW9fYWRkcmVzcyhmb2xpbylgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBqdXN0IGdpdmluZyB1cyB0aGUgYWRkcmVzcyBhc3NvY2lhdGVkIHdpdGggdGhlIGZvbGlvLiBCdXQgaG9sZCBvbiBhIHNlY29uZC4uLiBpcyBgcGFnZV9nZXRfbGlua2AgYWN0dWFsbHkgKmV4cGVjdGluZyogdGhhdCByZXR1cm5lZCBsaW5rIHRvIGJlIG51bGwtdGVybWluYXRlZD8gVGhhdCBmZWVscyBsaWtlIGEgcG90ZW50aWFsIGdvdGNoYSBJIG5lZWQgdG8gY29uZmlybS4gSXQgbWlnaHQgbm90IGJlIGV4cGxpY2l0bHkgc3RhdGVkLCBzbyBJIG5lZWQgdG8gZ28gYmFjayBhbmQgZXhhbWluZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHBhZ2VfZ2V0X2xpbmtgIGl0c2VsZi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB2ZXJpZnkgaWYgaXQmIzM5O3MgcmVseWluZyBvbiBhIG51bGwgdGVybWluYXRpb24gb3IgaGFuZGxpbmcgYSBsZW5ndGggaW4gc29tZSBvdGhlciB3YXkuIExldCYjMzk7cyBkaWcgaW50byB0aGUgY29kZSBhbmQgY2xhcmlmeSB0aGlzIGNydWNpYWwgcG9pbnQgdG8gYXZvaWQgYW55IHN1YnRsZSBtZW1vcnkgaXNzdWVzIG9yIHBvdGVudGlhbCBidWdzIGRvd24gdGhlIGxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbmFtZWkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY0ODYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjQ4NjpcdC8qKlxuNjQ4NzpcdCAqIHBhZ2VfZ2V0X2xpbmsoKSAtIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBnZXRfbGluayBpbm9kZV9vcGVyYXRpb24uXG42NDg4Olx0ICogQGRlbnRyeTogVGhlIGRpcmVjdG9yeSBlbnRyeSB3aGljaCBpcyB0aGUgc3ltbGluay5cbjY0ODk6XHQgKiBAaW5vZGU6IFRoZSBpbm9kZSBmb3IgdGhlIHN5bWxpbmsuXG42NDkwOlx0ICogQGNhbGxiYWNrOiBVc2VkIHRvIGRyb3AgdGhlIHJlZmVyZW5jZSB0byB0aGUgc3ltbGluay5cbjY0OTE6XHQgKlxuNjQ5MjpcdCAqIEZpbGVzeXN0ZW1zIHdoaWNoIHN0b3JlIHRoZWlyIHN5bWxpbmtzIGluIHRoZSBwYWdlIGNhY2hlIHNob3VsZCB1c2VcbjY0OTM6XHQgKiB0aGlzIHRvIGltcGxlbWVudCB0aGUgZ2V0X2xpbmsoKSBtZW1iZXIgb2YgdGhlaXIgaW5vZGVfb3BlcmF0aW9ucy5cbjY0OTQ6XHQgKlxuNjQ5NTpcdCAqIFJldHVybjogQSBwb2ludGVyIHRvIHRoZSBOVUwtdGVybWluYXRlZCBzeW1saW5rLlxuNjQ5NjpcdCAqL1xuNjQ5NzpcdGNvbnN0IGNoYXIgKnBhZ2VfZ2V0X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuNjQ5ODpcdFx0XHRcdFx0XHRzdHJ1Y3QgZGVsYXllZF9jYWxsICpjYWxsYmFjaylcbjY0OTk6XHR7XG42NTAwOlx0XHRjaGFyICprYWRkciA9IF9fcGFnZV9nZXRfbGluayhkZW50cnksIGlub2RlLCBjYWxsYmFjayk7XG42NTAxOlx0XG42NTAyOlx0XHRpZiAoIUlTX0VSUihrYWRkcikpXG42NTAzOlx0XHRcdG5kX3Rlcm1pbmF0ZV9saW5rKGthZGRyLCBpbm9kZS1cdTAwM2VpX3NpemUsIFBBR0VfU0laRSAtIDEpO1xuNjUwNDpcdFx0cmV0dXJuIGthZGRyO1xuNjUwNTpcdH1cbjY1MDY6XHRFWFBPUlRfU1lNQk9MKHBhZ2VfZ2V0X2xpbmspO1xuNjUwNzpcdFxuNjUwODpcdC8qKlxuNjUwOTpcdCAqIHBhZ2VfcHV0X2xpbmsoKSAtIERyb3AgdGhlIHJlZmVyZW5jZSB0byB0aGUgc3ltbGluay5cbjY1MTA6XHQgKiBAYXJnOiBUaGUgZm9saW8gd2hpY2ggY29udGFpbnMgdGhlIHN5bWxpbmsuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDUxCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjk2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBNaW5peCBGaWxlc3lzdGVtIElPTUFQIENvbnZlcnNpb24gZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGNvbnZlcnRpbmcgdGhlIE1pbml4IGZpbGVzeXN0ZW0gdG8gdXNlIGlvbWFwIGFuZCBteSBwcmltYXJ5IGNvbmNlcm4gaXMgd2hldGhlciBpdCBpbnRyb2R1Y2VzIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciB3cml0dGVuLiBGaXJzdCwgSSBzZWUgYHBhZ2VfZ2V0X2xpbmtgIGNhbGxzIGBuZF90ZXJtaW5hdGVfbGlua2AuIGBuZF90ZXJtaW5hdGVfbGlua2Agc2hvdWxkIG51bGwtdGVybWluYXRlIHRoZSBidWZmZXIsIGFuZCB0aGF0IHBhcnQgc2VlbXMgY29ycmVjdC4gSW4gYG1pbml4X3N5bWxpbmtgLCBhZnRlciB3cml0aW5nIHRoZSBzeW1saW5rIGRhdGEgdG8gZGlzaywgYGlub2RlLSZndDtpX3NpemVgIGlzIHNldCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBzeW1saW5rIHRhcmdldC4gYG5kX3Rlcm1pbmF0ZV9saW5rYCB0aGVuIGVuc3VyZXMgdGhlIG51bGwgdGVybWluYXRvciBpcyBpbiBwbGFjZSwgZWl0aGVyIGZyb20gdGhlIGluaXRpYWwgd3JpdGUgb3IgZnJvbSBgcGFnZV9nZXRfbGlua2AsIHNvIHRoYXQgc2VlbXMgc2FmZS4KCk5vdywgaWYgYG1pbml4X3N5bWxpbmtgIGZhaWxzIGFmdGVyIHdyaXRpbmcsIGl0IGNsZWFucyB1cCBhbmQgY2FsbHMgYGlwdXRgLCBldGMuIC0gYWxsIGdvb2QgdGhlcmUuIGBpYCBpcyBzZXQgdG8gYHN0cmxlbihzeW1uYW1lKSAmIzQzOyAxYCB0byBhY2NvbW1vZGF0ZSBmb3IgdGhlIG51bGwgdGVybWluYXRvci4gVGhlIGltcG9ydGFudCBwYXJ0IGlzIHRoYXQgYGkgLSAxYCBpcyB1c2VkIGFzIHRoZSB3cml0ZSBsZW5ndGguIEl0IHdyaXRlcyBleGFjdGx5IGBzdHJsZW4oc3ltbmFtZSlgIGJ5dGVzLiBUaGF0JiMzOTtzIGEgZ29vZCBjaGVjay4KCkkmIzM5O20gbm93IGxvb2tpbmcgYXQgdGhlIGJyb2FkZXIgY2hhbmdlcywgbGlrZSBgbWluaXhfd3JpdGVwYWdlc2AgdXNpbmcgYGlvbWFwX3dyaXRlcGFnZXNgLiBJdCBhbHNvIGhhcyBhc3NvY2lhdGVkIGNhbGxzIHRvIGBpb21hcF9iaW9fcmVhZF9mb2xpb2AsIGBpb21hcF9iaW9fcmVhZGFoZWFkYCwgYGlvbWFwX2RpcnR5X2ZvbGlvYCwgYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gLCBhbmQgbW9yZS4gYG1pbml4X2lvbWFwX2JlZ2luYCBpcyBhbHNvIGFkZGVkLiBJdCBsb29rcyBsaWtlIGBJT01BUF9GX05FV2AgaXMgdXNlZCwgc28gdW53cml0dGVuIHBhcnRzIG9mIHRoZSBibG9jayB3aWxsIGJlIHplcm9lZCwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEkmIzM5O2QgZXhwZWN0LiBUaGUga2V5IGhlcmUgaXMsIGlmIGBJT01BUF9XUklURWAgaXNuJiMzOTt0IHNldCwgdGhlbiB0aGUgcmVzdWx0IHdpbGwgYmUgYSBob2xlIGFuZCB0aGUgYGlvbWFwX2Jpb19yZWFkX2ZvbGlvYCBzaG91bGQgaGFuZGxlIHRoZSB6ZXJvaW5nIG9mIGEgcmVhZCBmcm9tIGEgaG9sZS4gU28gcmVhZGluZyBhbiB1bmFsbG9jYXRlZCBibG9jayBnZXRzIHplcm9lcy4KCk5leHQgdXAsIGBtaW5peF93cml0ZWJhY2tfcmFuZ2VgIGxvb2tzIGZpbmUgYXMgaXQgZmFsbHMgYmFjayB0byBhIG5vcm1hbCB3cml0ZWJhY2sgc2NlbmFyaW8uIEluIHRoZSBjYXNlIG9mIGBpb21hcF9zeW1saW5rX3dyaXRlYCwgdGhlIGBzeW1uYW1lYCBpdHNlbGYgaXMgaW5pdGlhbGl6ZWQgZnJvbSBWRlMgYW5kIHRodXMgaXQgaXMgc2FmZS4gYGlvbWFwX3N5bWxpbmtfd3JpdGVgIHdyaXRlcyBgaSAtIDFgIGJ5dGVzIGFuZCBpIGlzIGBzdHJsZW4oc3ltbmFtZSkgJiM0MzsgMWAuIFRoaXMgc2VlbXMgdmVyeSB1bmxpa2VseSB0byByZXN1bHQgaW4gdW5pbml0aWFsaXplZCByZWFkcy4KCkZvciBgbWluaXhfZmlsZV93cml0ZV9pdGVyYCwgdGhlIGNvZGUgdXNlcyBgaW92X2l0ZXIgKmZyb21gLCB3aGljaCBjb21lcyBmcm9tIHVzZXJzcGFjZSwgc28gaWYgdGhlIHVzZXIgaGFuZHMgb3ZlciBnYXJiYWdlLCBLTVNBTiB3aWxsIGNhdGNoIGl0IGJlZm9yZSB0aGUgZmlsZXN5c3RlbSBnZXRzIGl0LiBObyBpc3N1ZXMgdGhlcmUuCgpOb3csIEkmIzM5O20gZXhhbWluaW5nIHRoZSBvdGhlciBjb2RlIGNoYW5nZXMuIFRoZSBjaGFuZ2UgdXNlcyBgaW9tYXBfdHJ1bmNhdGVfcGFnZWAgdG8gemVybyB0aGUgdGFpbCBvZiB0aGUgcGFnZSwgd2hpY2ggaXMgZ29vZC4gVGhpcyBhdm9pZHMgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgZHVyaW5nIGxhdGVyIGV4dGVuc2lvbnMuIEkgc2VlIGBtaW5peF9zZXRhdHRyYCBhbmQgdGhlIHJlbGV2YW50IGNhbGxzIHRvIGB0cnVuY2F0ZV9zZXRzaXplYC4gVGhlIGZhY3QgdGhhdCBgbWluaXhfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zYCBub3cgaW5jbHVkZXMgYC5zZXRhdHRyID0gbWluaXhfc2V0YXR0cmAgaXMgaW50ZXJlc3RpbmcuIElzIHRoaXMgbmVlZGVkIGZvciB0cnVuY2F0aW9uIG9mIHN5bWxpbmtzPyBMaWtlbHkuIFRoaXMgYWdhaW4gZG9lc24mIzM5O3Qgc2VlbSBsaWtlIGl0IGV4cG9zZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKVGhlIGBtaW5peF9pb21hcF9iZWdpbmAgZnVuY3Rpb24gYXBwZWFycyB0byBoYW5kbGUgaW5pdGlhbGl6YXRpb24gYW5kIGluZGlyZWN0IGJsb2NrcyBpbiBhIHNhZmUgbWFubmVyLCB1c2luZyB0aGUgZmFtaWxpYXIgYGdldF9ibG9ja2AgbWV0aG9kb2xvZ3kgdGhhdCYjMzk7cyBiZWVuIHJldmlld2VkLiBUaGVyZSBpcyBhIGBibG9ja190b19wYXRoYCBhbmQgYGdldF9icmFuY2hgIHRoYXQgaGFuZGxlcyBpbml0aWFsaXphdGlvbiwgbGlrZSB0aGUgb2xkIGNvZGUuIFN0aWxsIG5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuCgpJJiMzOTttIGdvaW5nIHRocm91Z2ggYGlvbWFwX3N5bWxpbmtfd3JpdGVgLiBJIGNhbiBzZWUgdGhhdCB0aGlzIHVzZXMgc3RhY2sgdmFyaWFibGVzLCBhbmQgYGlvdl9pdGVyX2t2ZWNgIGluaXRpYWxpemVzIHRoZW0uIFNvLCBmdWxseSBpbml0aWFsaXplZC4gTm8gcHJvYmxlbXMuIGBtaW5peF93cml0ZXBhZ2VzYCBhbHNvIGlzIHNhZmUgYXMgaXQmIzM5O3MgY29ycmVjdGx5IGluaXRpYWxpemluZyB0aGUgYHdwY2Agc3RydWN0LiBgbWluaXhfZmlsZV93cml0ZV9pdGVyYCBpcyBzYWZlIHRvby4KCk92ZXJhbGwsIHRoaXMgcGF0Y2ggc2VlbXMgbGlrZSBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgY29udmVyc2lvbiB0byBpb21hcC4gSXQgZG9lc24mIzM5O3QgYXBwZWFyIHRvIGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcy4gVGhlIGNvZGUgaXMgY2FyZWZ1bGx5IGhhbmRsaW5nIGFsbG9jYXRpb25zIGFuZCByZWFkcyBhbmQgd3JpdGVzIHRvIGVuc3VyZSB0aGF0IG1lbW9yeSBpcyBwcm9wZXJseSBpbml0aWFsaXplZC4gS0FTQU4gaXMgc3VmZmljaWVudCBmb3IgdGhpcyBwYXRjaCBhcyBpdCBjYXRjaGVzIG91dCBvZiBib3VuZHMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIEkgZG9uJiMzOTt0IHNlZSBhbnkgbmVlZCBmb3IgS01TQU4uIFRoZSBjcml0aWNhbCBwYXJ0IGlzIHRvIGRvdWJsZSBjaGVjayBgaW9tYXBfc3ltbGlua193cml0ZWAsIHRvIG1ha2Ugc3VyZSB0aGF0IGl0JiMzOTtzIHNhZmUgdG8gdXNlIGFjcm9zcyBmaWxlc3lzdGVtcy4gVGhlIGxlbiBwYXJhbWV0ZXIgc2hvdWxkIGJlIGBzdHJsZW4odGFyZ2V0KSAmIzQzOyAxYCwgYW5kIGlmIHRoZSBsZW5ndGggaXMgYHN0cmxlbih0YXJnZXQpYCB0aGUgZmlsZSB3aWxsIGJlIHRydW5jYXRlZC4gVGhlIG90aGVyIGZpbGVzeXN0ZW1zIGFyZSB0YWtpbmcgYGxlbgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZ2Vfc3ltbGluayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9iZWZzL2xpbnV4dmZzLmM9Mjk5PXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmJlZnNfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubylcbi0tXG5mcy9iZWZzL2xpbnV4dmZzLmMtNDAxLVx0XHRpZiAoYmVmc19pbm8tXHUwMDNlaV9mbGFncyBcdTAwMjYgQkVGU19MT05HX1NZTUxJTkspIHtcbmZzL2JlZnMvbGludXh2ZnMuYzo0MDI6XHRcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNnBhZ2Vfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xuZnMvYmVmcy9saW51eHZmcy5jLTQwMy1cdFx0XHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xuLS1cbmZzL2NyYW1mcy9pbm9kZS5jPTkwPXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmdldF9jcmFtZnNfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9jcmFtZnMvaW5vZGUuYy0xMTUtXHRjYXNlIFNfSUZMTks6XG5mcy9jcmFtZnMvaW5vZGUuYzoxMTY6XHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZwYWdlX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucztcbmZzL2NyYW1mcy9pbm9kZS5jLTExNy1cdFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcbi0tXG5mcy9leHQyL25hbWVpLmM9MTU1PXN0YXRpYyBpbnQgZXh0Ml9zeW1saW5rIChzdHJ1Y3QgbW50X2lkbWFwICogaWRtYXAsIHN0cnVjdCBpbm9kZSAqIGRpcixcbi0tXG5mcy9leHQyL25hbWVpLmMtMTc5LVx0XHRpbm9kZS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHMgPSBcdTAwMjZleHQyX2FvcHM7XG5mcy9leHQyL25hbWVpLmM6MTgwOlx0XHRlcnIgPSBwYWdlX3N5bWxpbmsoaW5vZGUsIHN5bW5hbWUsIGwpO1xuZnMvZXh0Mi9uYW1laS5jLTE4MS1cdFx0aWYgKGVycilcbi0tXG5mcy9leHQ0L2lub2RlLmM9MTQyMz1zdGF0aWMgaW50IHdyaXRlX2VuZF9mbihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvaW5vZGUuYy0xNDM4LSAqIFdlIG5lZWQgdG8gcGljayB1cCB0aGUgbmV3IGlub2RlIHNpemUgd2hpY2ggZ2VuZXJpY19jb21taXRfd3JpdGUgZ2F2ZSB1c1xuZnMvZXh0NC9pbm9kZS5jOjE0Mzk6ICogYGlvY2JgIGNhbiBiZSBOVUxMIC0gZWcsIHdoZW4gY2FsbGVkIGZyb20gcGFnZV9zeW1saW5rKCkuXG5mcy9leHQ0L2lub2RlLmMtMTQ0MC0gKi9cbi0tXG5mcy9mMmZzL25hbWVpLmM9NjQ5PXN0YXRpYyBpbnQgZjJmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9mMmZzL25hbWVpLmMtNjk0LVxuZnMvZjJmcy9uYW1laS5jOjY5NTpcdGVyciA9IHBhZ2Vfc3ltbGluayhpbm9kZSwgZGlza19saW5rLm5hbWUsIGRpc2tfbGluay5sZW4pO1xuZnMvZjJmcy9uYW1laS5jLTY5Ni1cbi0tXG5mcy9oZnNwbHVzL2Rpci5jPTQ2Mz1zdGF0aWMgaW50IGhmc3BsdXNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvaGZzcGx1cy9kaXIuYy00NzctXG5mcy9oZnNwbHVzL2Rpci5jOjQ3ODpcdHJlcyA9IHBhZ2Vfc3ltbGluayhpbm9kZSwgc3ltbmFtZSwgc3RybGVuKHN5bW5hbWUpICYjNDM7IDEpO1xuZnMvaGZzcGx1cy9kaXIuYy00NzktXHRpZiAocmVzKVxuLS1cbmZzL2hwZnMvaW5vZGUuYz00ND12b2lkIGhwZnNfcmVhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmkpXG4tLVxuZnMvaHBmcy9pbm9kZS5jLTc5LVx0XHRcdGktXHUwMDNlaV9tb2RlID0gU19JRkxOSyB8IDA3Nzc7XG5mcy9ocGZzL2lub2RlLmM6ODA6XHRcdFx0aS1cdTAwM2VpX29wID0gXHUwMDI2cGFnZV9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7XG5mcy9ocGZzL2lub2RlLmMtODEtXHRcdFx0aW5vZGVfbm9oaWdobWVtKGkpO1xuLS1cbmZzL2hwZnMvbmFtZWkuYz0yOTI9c3RhdGljIGludCBocGZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL2hwZnMvbmFtZWkuYy0zMzctXHRpbm9kZV9ub2hpZ2htZW0ocmVzdWx0KTtcbmZzL2hwZnMvbmFtZWkuYzozMzg6XHRyZXN1bHQtXHUwMDNlaV9vcCA9IFx1MDAyNnBhZ2Vfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xuZnMvaHBmcy9uYW1laS5jLTMzOS1cdHJlc3VsdC1cdTAwM2VpX2RhdGEuYV9vcHMgPSBcdTAwMjZocGZzX3N5bWxpbmtfYW9wcztcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz04OTQ9c3RhdGljIHN0cnVjdCBpbm9kZSAqaHVnZXRsYmZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTkzOS1cdFx0Y2FzZSBTX0lGTE5LOlxuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTQwOlx0XHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZwYWdlX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucztcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk0MS1cdFx0XHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTEwMDE9c3RhdGljIGludCBodWdldGxiZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDExLVx0XHRpbnQgbCA9IHN0cmxlbihzeW1uYW1lKSYjNDM7MTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEwMTI6XHRcdGVycm9yID0gcGFnZV9zeW1saW5rKGlub2RlLCBzeW1uYW1lLCBsKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwMTMtXHRcdGlmICghZXJyb3IpXG4tLVxuZnMvaXNvZnMvaW5vZGUuYz0xMjcwPXN0YXRpYyBpbnQgaXNvZnNfcmVhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcmVsb2NhdGVkKVxuLS1cbmZzL2lzb2ZzL2lub2RlLmMtMTQ0NS1cdH0gZWxzZSBpZiAoU19JU0xOSyhpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG5mcy9pc29mcy9pbm9kZS5jOjE0NDY6XHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZwYWdlX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucztcbmZzL2lzb2ZzL2lub2RlLmMtMTQ0Ny1cdFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcbi0tXG5mcy9qZnMvaW5vZGUuYz0yND1zdHJ1Y3QgaW5vZGUgKmpmc19pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vKVxuLS1cbmZzL2pmcy9pbm9kZS5jLTQ5LVx0XHRpZiAoaW5vZGUtXHUwMDNlaV9zaXplIFx1MDAzZT0gSURBVEFTSVpFKSB7XG5mcy9qZnMvaW5vZGUuYzo1MDpcdFx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2cGFnZV9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7XG5mcy9qZnMvaW5vZGUuYy01MS1cdFx0XHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xuLS1cbmZzL25hbWVpLmM9NjU0MT1FWFBPUlRfU1lNQk9MKHBhZ2VfcmVhZGxpbmspO1xuZnMvbmFtZWkuYy02NTQyLVxuZnMvbmFtZWkuYzo2NTQzOmludCBwYWdlX3N5bWxpbmsoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqc3ltbmFtZSwgaW50IGxlbilcbmZzL25hbWVpLmMtNjU0NC17XG4tLVxuZnMvbmFtZWkuYy02NTc1LX1cbmZzL25hbWVpLmM6NjU3NjpFWFBPUlRfU1lNQk9MKHBhZ2Vfc3ltbGluayk7XG5mcy9uYW1laS5jLTY1NzctXG5mcy9uYW1laS5jOjY1Nzg6Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgcGFnZV9zeW1saW5rX2lub2RlX29wZXJhdGlvbnMgPSB7XG5mcy9uYW1laS5jLTY1NzktXHQuZ2V0X2xpbmtcdD0gcGFnZV9nZXRfbGluayxcbmZzL25hbWVpLmMtNjU4MC19O1xuZnMvbmFtZWkuYzo2NTgxOkVYUE9SVF9TWU1CT0wocGFnZV9zeW1saW5rX2lub2RlX29wZXJhdGlvbnMpO1xuLS1cbmZzL25pbGZzMi9uYW1laS5jPTE0MT1zdGF0aWMgaW50IG5pbGZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL25pbGZzMi9uYW1laS5jLTE2OC1cdGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcyA9IFx1MDAyNm5pbGZzX2FvcHM7XG5mcy9uaWxmczIvbmFtZWkuYzoxNjk6XHRlcnIgPSBwYWdlX3N5bWxpbmsoaW5vZGUsIHN5bW5hbWUsIGwpO1xuZnMvbmlsZnMyL25hbWVpLmMtMTcwLVx0aWYgKGVycilcbi0tXG5mcy9uaWxmczIvbmFtZWkuYy0xNzMtXHQvKiBtYXJrX2lub2RlX2RpcnR5KGlub2RlKTsgKi9cbmZzL25pbGZzMi9uYW1laS5jOjE3NDpcdC8qIHBhZ2Vfc3ltbGluaygpIGRvIHRoaXMgKi9cbmZzL25pbGZzMi9uYW1laS5jLTE3NS1cbi0tXG5mcy9xbng0L2lub2RlLmM9MjgzPXN0cnVjdCBpbm9kZSAqcW54NF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vKVxuLS1cbmZzL3FueDQvaW5vZGUuYy0zMzctXHR9IGVsc2UgaWYgKFNfSVNMTksoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuZnMvcW54NC9pbm9kZS5jOjMzODpcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNnBhZ2Vfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xuZnMvcW54NC9pbm9kZS5jLTMzOS1cdFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcbi0tXG5mcy9xbng2L2lub2RlLmM9NTExPXN0cnVjdCBpbm9kZSAqcW54Nl9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGlubylcbi0tXG5mcy9xbng2L2lub2RlLmMtNTcxLVx0fSBlbHNlIGlmIChTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbmZzL3FueDYvaW5vZGUuYzo1NzI6XHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZwYWdlX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucztcbmZzL3FueDYvaW5vZGUuYy01NzMtXHRcdGlub2RlX25vaGlnaG1lbShpbm9kZSk7XG4tLVxuZnMvcmFtZnMvaW5vZGUuYz01Nz1zdHJ1Y3QgaW5vZGUgKnJhbWZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL3JhbWZzL2lub2RlLmMtODQtXHRcdGNhc2UgU19JRkxOSzpcbmZzL3JhbWZzL2lub2RlLmM6ODU6XHRcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNnBhZ2Vfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xuZnMvcmFtZnMvaW5vZGUuYy04Ni1cdFx0XHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xuLS1cbmZzL3JhbWZzL2lub2RlLmM9MTM2PXN0YXRpYyBpbnQgcmFtZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvcmFtZnMvaW5vZGUuYy0xNTMtXG5mcy9yYW1mcy9pbm9kZS5jOjE1NDpcdFx0ZXJyb3IgPSBwYWdlX3N5bWxpbmsoaW5vZGUsIHN5bW5hbWUsIGwpO1xuZnMvcmFtZnMvaW5vZGUuYy0xNTUtXHRcdGlmICghZXJyb3IpIHtcbi0tXG5mcy9yb21mcy9zdXBlci5jPTI3Mz1zdGF0aWMgc3RydWN0IGlub2RlICpyb21mc19pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgcG9zKVxuLS1cbmZzL3JvbWZzL3N1cGVyLmMtMzQzLVx0Y2FzZSBST01GSF9TWU06XG5mcy9yb21mcy9zdXBlci5jOjM0NDpcdFx0aS1cdTAwM2VpX29wID0gXHUwMDI2cGFnZV9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7XG5mcy9yb21mcy9zdXBlci5jLTM0NS1cdFx0aW5vZGVfbm9oaWdobWVtKGkpO1xuLS1cbmZzL3Vmcy9pbm9kZS5jPTUyMD1zdGF0aWMgdm9pZCB1ZnNfc2V0X2lub2RlX29wcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL3Vmcy9pbm9kZS5jLTUzNS1cdFx0XHRpbm9kZS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHMgPSBcdTAwMjZ1ZnNfYW9wcztcbmZzL3Vmcy9pbm9kZS5jOjUzNjpcdFx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2cGFnZV9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7XG5mcy91ZnMvaW5vZGUuYy01MzctXHRcdFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcbi0tXG5mcy91ZnMvbmFtZWkuYz0xMDg9c3RhdGljIGludCB1ZnNfc3ltbGluayAoc3RydWN0IG1udF9pZG1hcCAqIGlkbWFwLCBzdHJ1Y3QgaW5vZGUgKiBkaXIsXG4tLVxuZnMvdWZzL25hbWVpLmMtMTI1LVx0XHQvKiBzbG93IHN5bWxpbmsgKi9cbmZzL3Vmcy9uYW1laS5jOjEyNjpcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNnBhZ2Vfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xuZnMvdWZzL25hbWVpLmMtMTI3LVx0XHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xuZnMvdWZzL25hbWVpLmMtMTI4LVx0XHRpbm9kZS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHMgPSBcdTAwMjZ1ZnNfYW9wcztcbmZzL3Vmcy9uYW1laS5jOjEyOTpcdFx0ZXJyID0gcGFnZV9zeW1saW5rKGlub2RlLCBzeW1uYW1lLCBsKTtcbmZzL3Vmcy9uYW1laS5jLTEzMC1cdFx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg4NTcKCQkJCQkJCW91dHB1dDogMjQ2CgkJCQkJCQl0aG91Z2h0czogMzE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1pbml4IEZpbGVzeXN0ZW0gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZXhhbWluZWQgdGhpcyBwYXRjaCBjb252ZXJ0aW5nIHRoZSBNaW5peCBmaWxlc3lzdGVtIHRvIGBpb21hcGAgYnVmZmVyZWQgSS9PLCBkaXRjaGluZyB0aGUgb2xkIGBidWZmZXJfaGVhZGAtYmFzZWQgYmxvY2sgSS9PLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGBpb21hcF9zeW1saW5rX3dyaXRlYC4gTXkgaW5pdGlhbCBjb25jZXJuLCBhcyBhbHdheXMsIGlzIGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgcG90ZW50aWFsIGxlYWtzLCBhbmQgY29udHJvbCBmbG93IGlzc3VlcyB0aGF0IGNhbiBpbnRyb2R1Y2UgdnVsbmVyYWJpbGl0aWVzLgoKTGV0JiMzOTtzIGJyZWFrIGl0IGRvd24uIGBpb21hcF9zeW1saW5rX3dyaXRlYCYjMzk7cyBiZWhhdmlvciBpcyBjb3JyZWN0LiBJIHNhdyB0aGF0IGBwYWdlX3N5bWxpbmtgIGlzIHVzZWQgd2l0aCBhIGxlbmd0aCBvZiBgc3RybGVuKHN5bW5hbWUpICYjNDM7IDFgLCBpbmNsdWRpbmcgdGhlIG51bGwgdGVybWluYXRvciwgYnV0IGBpb21hcF9zeW1saW5rX3dyaXRlYCBjb3JyZWN0bHkgc3VidHJhY3RzIHRoYXQgb25lIGJ5dGUsIHNvIGl0IHdyaXRlcyB0aGUgYWN0dWFsIGxlbmd0aCBvZiB0aGUgc3ltbGluayB0YXJnZXQuIEl0JiMzOTtzIHByb3Blcmx5IG51bGwtdGVybWluYXRlZCBzdHJpbmcgYW5kIGZ1bGx5IGluaXRpYWxpemVkIGJ5IHRoZSBWRlMsIHNvIEkgZG9uJiMzOTt0IHNlZSBhbiBpbW1lZGlhdGUgaXNzdWUgdGhlcmUuIEkmIzM5O20gc2F0aXNmaWVkIHRoYXQgdGhpcyBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBpbnRyb2R1Y2UgYSB2dWxuZXJhYmlsaXR5IGhlcmUuCgpUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgc2FmZSB3aXRoIHRoZSBgaW9tYXBfd3JpdGVfYmVnaW5gIGZ1bmN0aW9uLCB3aGljaCB6ZXJvcyBvdXQgbmV3IGJsb2NrcyBzaW5jZSBgSU9NQVBfRl9ORVdgIGlzIHNldCBmb3IgbmV3IGJsb2NrcywgZW5zdXJpbmcgdGhhdCBwcmV2aW91c2x5IHVud3JpdHRlbiBkYXRhIGlzIGhhbmRsZWQgY29ycmVjdGx5LiBBbmQgc2luY2UgdGhlIHN5bWxpbmsgaXMgZnVsbHkgaW5pdGlhbGl6ZWQsIGl0IGNhbiBiZSBoYW5kbGVkIHNhZmVseS4gVGhlIGBwYWdlX2dldF9saW5rYCBmdW5jdGlvbiBhZGRzIHRoZSBudWxsIHRlcm1pbmF0b3IgaW4gbWVtb3J5IHVwb24gcmVhZGluZywgc28gdGhhdCBpcyBmaW5lIGFzIHdlbGwuCgpUaGUgcmVzdCBvZiB0aGUgcGF0Y2ggcmVwbGFjZXMgc3RhbmRhcmQgcmVhZC93cml0ZS93cml0ZWJhY2sgZnVuY3Rpb25zIHdpdGggdGhlaXIgYGlvbWFwYCBjb3VudGVycGFydHMuIFRoaXMgc2VlbXMgdG8gYmUgYSBzdHJhaWdodGZvcndhcmQgc3Vic3RpdHV0aW9uIGFuZCBoYW5kbGVzIHVzZXItc3BhY2UgZGF0YSBhbmQgcGFnZSBjYWNoZSBvcGVyYXRpb25zIGFwcHJvcHJpYXRlbHkuCgpTaW5jZSB0aGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBubyBuZXcgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgY29udHJvbCBmbG93IGNoYW5nZXMsIEkmIzM5O20gY29uZmlkZW50IHRoZXJlIGFyZSBubyBuZXcgdnVsbmVyYWJpbGl0aWVzIGhlcmUuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGVycm9ycyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBzcGVjaWFsaXplZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXNuJiMzOTt0IHdhcnJhbnRlZC4gVGhpcyBwYXRjaCBhcHBlYXJzIHRvIGJlIGEgc2FmZSByZWZhY3RvcmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29udmVydHMgdGhlIG1pbml4IGZpbGVzeXN0ZW0gdG8gdXNlIGlvbWFwIGZvciBidWZmZXJlZCBJL08sIHJlcGxhY2luZyB0aGUgb2xkZXIgYnVmZmVyX2hlYWQgYmFzZWQgYmxvY2sgSS9PIGZ1bmN0aW9ucy4gSXQgaW50cm9kdWNlcyBgaW9tYXBfc3ltbGlua193cml0ZWAgd2hpY2ggd3JpdGVzIHN5bWxpbmsgdGFyZ2V0cyB0byBkaXNrLiBUaGUgc3ltbGluayB0YXJnZXQgaXMgYSBmdWxseSBpbml0aWFsaXplZCBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIHByb3ZpZGVkIGJ5IHRoZSBWRlMuIFRoZSB1bndyaXR0ZW4gcGFydHMgb2YgdGhlIG5ld2x5IGFsbG9jYXRlZCBibG9jayBhcmUgemVyb2VkIGJ5IGBpb21hcF93cml0ZV9iZWdpbmAgKHNpbmNlIGBJT01BUF9GX05FV2AgaXMgc2V0IGZvciBuZXcgYmxvY2tzKS4gV2hlbiByZWFkaW5nIHRoZSBzeW1saW5rLCBgcGFnZV9nZXRfbGlua2AgYWRkcyB0aGUgbnVsbCB0ZXJtaW5hdG9yIGluIG1lbW9yeS4gVGhlIHJlc3Qgb2YgdGhlIHBhdGNoIHJlcGxhY2VzIHN0YW5kYXJkIHJlYWQvd3JpdGUvd3JpdGViYWNrIGZ1bmN0aW9ucyB3aXRoIHRoZWlyIGlvbWFwIGVxdWl2YWxlbnRzLCB3aGljaCBoYW5kbGUgdXNlciBzcGFjZSBkYXRhIGFuZCBwYWdlIGNhY2hlIGNvcnJlY3RseS4gVGhlcmUgYXJlIG5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgaW5mby1sZWFrcywgb3IgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnZlcnRzIHRoZSBtaW5peCBmaWxlc3lzdGVtIHRvIHVzZSBpb21hcCBmb3IgYnVmZmVyZWQgSS9PLCByZXBsYWNpbmcgdGhlIG9sZGVyIGJ1ZmZlcl9oZWFkIGJhc2VkIGJsb2NrIEkvTyBmdW5jdGlvbnMuIEl0IGludHJvZHVjZXMgYGlvbWFwX3N5bWxpbmtfd3JpdGVgIHdoaWNoIHdyaXRlcyBzeW1saW5rIHRhcmdldHMgdG8gZGlzay4gVGhlIHN5bWxpbmsgdGFyZ2V0IGlzIGEgZnVsbHkgaW5pdGlhbGl6ZWQgbnVsbC10ZXJtaW5hdGVkIHN0cmluZyBwcm92aWRlZCBieSB0aGUgVkZTLiBUaGUgdW53cml0dGVuIHBhcnRzIG9mIHRoZSBuZXdseSBhbGxvY2F0ZWQgYmxvY2sgYXJlIHplcm9lZCBieSBgaW9tYXBfd3JpdGVfYmVnaW5gIChzaW5jZSBgSU9NQVBfRl9ORVdgIGlzIHNldCBmb3IgbmV3IGJsb2NrcykuIFdoZW4gcmVhZGluZyB0aGUgc3ltbGluaywgYHBhZ2VfZ2V0X2xpbmtgIGFkZHMgdGhlIG51bGwgdGVybWluYXRvciBpbiBtZW1vcnkuIFRoZSByZXN0IG9mIHRoZSBwYXRjaCByZXBsYWNlcyBzdGFuZGFyZCByZWFkL3dyaXRlL3dyaXRlYmFjayBmdW5jdGlvbnMgd2l0aCB0aGVpciBpb21hcCBlcXVpdmFsZW50cywgd2hpY2ggaGFuZGxlIHVzZXIgc3BhY2UgZGF0YSBhbmQgcGFnZSBjYWNoZSBjb3JyZWN0bHkuIFRoZXJlIGFyZSBubyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIGluZm8tbGVha3MsIG9yIHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjEwOjE5LjYxODg2NjU3N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzEzNDkzNTU1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNSU5JWF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvbWFwX3N5bWxpbmtfd3JpdGVcIixcbiAgICBcIlYxX21pbml4X2lvbWFwX2JlZ2luXCIsXG4gICAgXCJWMl9taW5peF9pb21hcF9iZWdpblwiLFxuICAgIFwibWluaXhfZmlsZV93cml0ZV9pdGVyXCIsXG4gICAgXCJtaW5peF93cml0ZXBhZ2VzXCIsXG4gICAgXCJtaW5peF9yZWFkX2ZvbGlvXCIsXG4gICAgXCJtaW5peF9yZWFkYWhlYWRcIixcbiAgICBcIm1pbml4X3dyaXRlYmFja19yYW5nZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29udmVydHMgdGhlIG1pbml4IGZpbGVzeXN0ZW0gdG8gdXNlIGlvbWFwIGZvciBidWZmZXJlZCBJL08sIHJlcGxhY2luZyB0aGUgb2xkZXIgYnVmZmVyX2hlYWQgYmFzZWQgYmxvY2sgSS9PIGZ1bmN0aW9ucy4gSXQgaW50cm9kdWNlcyBgaW9tYXBfc3ltbGlua193cml0ZWAgd2hpY2ggd3JpdGVzIHN5bWxpbmsgdGFyZ2V0cyB0byBkaXNrLiBUaGUgc3ltbGluayB0YXJnZXQgaXMgYSBmdWxseSBpbml0aWFsaXplZCBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIHByb3ZpZGVkIGJ5IHRoZSBWRlMuIFRoZSB1bndyaXR0ZW4gcGFydHMgb2YgdGhlIG5ld2x5IGFsbG9jYXRlZCBibG9jayBhcmUgemVyb2VkIGJ5IGBpb21hcF93cml0ZV9iZWdpbmAgKHNpbmNlIGBJT01BUF9GX05FV2AgaXMgc2V0IGZvciBuZXcgYmxvY2tzKS4gV2hlbiByZWFkaW5nIHRoZSBzeW1saW5rLCBgcGFnZV9nZXRfbGlua2AgYWRkcyB0aGUgbnVsbCB0ZXJtaW5hdG9yIGluIG1lbW9yeS4gVGhlIHJlc3Qgb2YgdGhlIHBhdGNoIHJlcGxhY2VzIHN0YW5kYXJkIHJlYWQvd3JpdGUvd3JpdGViYWNrIGZ1bmN0aW9ucyB3aXRoIHRoZWlyIGlvbWFwIGVxdWl2YWxlbnRzLCB3aGljaCBoYW5kbGUgdXNlciBzcGFjZSBkYXRhIGFuZCBwYWdlIGNhY2hlIGNvcnJlY3RseS4gVGhlcmUgYXJlIG5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgaW5mby1sZWFrcywgb3IgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtaWdyYXRlcyB0aGUgbWluaXggZmlsZXN5c3RlbSB0byB1c2UgaW9tYXAgZm9yIGJ1ZmZlcmVkIEkvTyBhbmQgc3ltbGlua3MuIFRoaXMgaW52b2x2ZXMgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWluaXggZmlsZSBvcGVyYXRpb25zLCBhZGRyZXNzIHNwYWNlIG9wZXJhdGlvbnMsIGFuZCBibG9jayBtYXBwaW5nIGxvZ2ljLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IG1vdW50aW5nIGEgbWluaXggZmlsZXN5c3RlbSBpbWFnZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTA6MTkuNjE4ODcxOTY3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODgwMjUwMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmOTRjNWEzZmZjZWQ3MzVmNTg0MmY2NzQ2M2RiYWYxMjUxOTE1ZmVhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDI2IDIyOjEwOjE4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMgYi9mcy9pb21hcC9idWZmZXJlZC1pby5jXFxuaW5kZXggMGE1ZWJmZGE5MGYxMi4uNWU4YWMzZmFkNjcxNCAxMDA2NDRcXG4tLS0gYS9mcy9pb21hcC9idWZmZXJlZC1pby5jXFxuKysrIGIvZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1xcbkBAIC0yMTAwLDMgKzIxMDAsMzcgQEAgaW9tYXBfd3JpdGVwYWdlcyhzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjKVxcbiBcXHRyZXR1cm4gZXJyb3I7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfd3JpdGVwYWdlcyk7XFxuK1xcbitpbnQgaW9tYXBfc3ltbGlua193cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICp0YXJnZXQsIGludCBsZW4sXFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyxcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IGlvbWFwX3dyaXRlX29wcyAqd3JpdGVfb3BzLCB2b2lkICpwcml2YXRlKVxcbit7XFxuK1xcdHN0cnVjdCBrdmVjIHZlYyA9IHtcXG4rXFx0XFx0Lmlvdl9iYXNlXFx0PSAodm9pZCAqKXRhcmdldCxcXG4rXFx0XFx0Lmlvdl9sZW5cXHQ9IGxlbiAtIDEsXFxuK1xcdH07XFxuK1xcdHN0cnVjdCBpb21hcF9pdGVyIGl0ZXIgPSB7XFxuK1xcdFxcdC5pbm9kZVxcdFxcdD0gaW5vZGUsXFxuK1xcdFxcdC5wb3NcXHRcXHQ9IDAsXFxuK1xcdFxcdC5sZW5cXHRcXHQ9IGxlbiAtIDEsXFxuK1xcdFxcdC5mbGFnc1xcdFxcdD0gSU9NQVBfV1JJVEUsXFxuK1xcdFxcdC5wcml2YXRlXFx0PSBwcml2YXRlLFxcbitcXHR9O1xcbitcXHRzdHJ1Y3QgaW92X2l0ZXIgaW92O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aW92X2l0ZXJfa3ZlYyhcXHUwMDI2aW92LCBJVEVSX1NPVVJDRSwgXFx1MDAyNnZlYywgMSwgbGVuIC0gMSk7XFxuK1xcbitcXHR3aGlsZSAoKHJldCA9IGlvbWFwX2l0ZXIoXFx1MDAyNml0ZXIsIG9wcykpIFxcdTAwM2UgMClcXG4rXFx0XFx0aXRlci5zdGF0dXMgPSBpb21hcF93cml0ZV9pdGVyKFxcdTAwMjZpdGVyLCBcXHUwMDI2aW92LCB3cml0ZV9vcHMpO1xcbitcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAodW5saWtlbHkoaXRlci5wb3MgPT0gMCkpXFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbitcXG4rXFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX3N5bWxpbmtfd3JpdGUpO1xcbmRpZmYgLS1naXQgYS9mcy9taW5peC9maWxlLmMgYi9mcy9taW5peC9maWxlLmNcXG5pbmRleCAwMmFhYmJkYjVkZWFhLi42NzY1ZjU3MWJkM2ZjIDEwMDY0NFxcbi0tLSBhL2ZzL21pbml4L2ZpbGUuY1xcbisrKyBiL2ZzL21pbml4L2ZpbGUuY1xcbkBAIC0xMCw2ICsxMCwzMiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnVmZmVyX2hlYWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcIm1pbml4LmhcXFwiXFxuIFxcbitzdGF0aWMgc3NpemVfdCBtaW5peF9maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuK3tcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGlvY2ItXFx1MDAzZWtpX2ZpbHAtXFx1MDAzZWZfbWFwcGluZy1cXHUwMDNlaG9zdDtcXG4rXFx0c3NpemVfdCByZXQ7XFxuK1xcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIoaW5vZGUpO1xcbitcXG4rXFx0aW5vZGVfbG9jayhpbm9kZSk7XFxuK1xcdHJldCA9IGdlbmVyaWNfd3JpdGVfY2hlY2tzKGlvY2IsIGZyb20pO1xcbitcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuK1xcdFxcdGdvdG8gdW5sb2NrO1xcbitcXG4rXFx0cmV0ID0gZmlsZV9tb2RpZmllZChpb2NiLVxcdTAwM2VraV9maWxwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcbitcXHRyZXQgPSBpb21hcF9maWxlX2J1ZmZlcmVkX3dyaXRlKGlvY2IsIGZyb20sIG9wcyxcXG4rXFx0XFx0XFx0TlVMTCwgTlVMTCk7XFxuK1xcbitcXHRpZiAocmV0IFxcdTAwM2UgMClcXG4rXFx0XFx0cmV0ID0gZ2VuZXJpY193cml0ZV9zeW5jKGlvY2IsIHJldCk7XFxuK1xcbit1bmxvY2s6XFxuK1xcdGlub2RlX3VubG9jayhpbm9kZSk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuIC8qXFxuICAqIFdlIGhhdmUgbW9zdGx5IE5VTExzIGhlcmU6IHRoZSBjdXJyZW50IGRlZmF1bHRzIGFyZSBPSyBmb3JcXG4gICogdGhlIG1pbml4IGZpbGVzeXN0ZW0uXFxuQEAgLTE3LDEzICs0MywxMyBAQFxcbiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4gXFx0Lmxsc2Vla1xcdFxcdD0gZ2VuZXJpY19maWxlX2xsc2VlayxcXG4gXFx0LnJlYWRfaXRlclxcdD0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcixcXG4tXFx0LndyaXRlX2l0ZXJcXHQ9IGdlbmVyaWNfZmlsZV93cml0ZV9pdGVyLFxcbitcXHQud3JpdGVfaXRlclxcdD0gbWluaXhfZmlsZV93cml0ZV9pdGVyLFxcbiBcXHQubW1hcF9wcmVwYXJlXFx0PSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLFxcbiBcXHQuZnN5bmNcXHRcXHQ9IHNpbXBsZV9mc3luYyxcXG4gXFx0LnNwbGljZV9yZWFkXFx0PSBmaWxlbWFwX3NwbGljZV9yZWFkLFxcbiB9O1xcbiBcXG4tc3RhdGljIGludCBtaW5peF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbitpbnQgbWluaXhfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gXFx0XFx0XFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKVxcbiB7XFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKGRlbnRyeSk7XFxuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2lub2RlLmMgYi9mcy9taW5peC9pbm9kZS5jXFxuaW5kZXggZGFmODNlNGZmMjVjOC4uMmJmNWVhOTIzNjBhMiAxMDA2NDRcXG4tLS0gYS9mcy9taW5peC9pbm9kZS5jXFxuKysrIGIvZnMvbWluaXgvaW5vZGUuY1xcbkBAIC00MzksNiArNDM5LDMxIEBAIHN0YXRpYyBpbnQgbWluaXhfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBzc2l6ZV90IG1pbml4X3dyaXRlYmFja19yYW5nZShzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLFxcbitcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1NjQgcG9zLCB1bnNpZ25lZCBpbnQgbGVuLCB1NjQgZW5kX3BvcylcXG4re1xcbitcXHRpbnQgZXJyb3I7XFxuK1xcbitcXHRpZiAocG9zIFxcdTAwM2Mgd3BjLVxcdTAwM2Vpb21hcC5vZmZzZXQgfHxcXG4rXFx0XFx0XFx0cG9zIFxcdTAwM2U9IHdwYy1cXHUwMDNlaW9tYXAub2Zmc2V0ICsgd3BjLVxcdTAwM2Vpb21hcC5sZW5ndGgpIHtcXG4rXFx0XFx0aWYgKElOT0RFX1ZFUlNJT04od3BjLVxcdTAwM2Vpbm9kZSkgPT0gTUlOSVhfVjEpXFxuK1xcdFxcdFxcdGVycm9yID0gVjFfbWluaXhfaW9tYXBfYmVnaW4od3BjLVxcdTAwM2Vpbm9kZSwgcG9zLCBsZW4sIElPTUFQX1dSSVRFLFxcbitcXHRcXHRcXHRcXHRcXHUwMDI2d3BjLVxcdTAwM2Vpb21hcCwgTlVMTCk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0ZXJyb3IgPSBWMl9taW5peF9pb21hcF9iZWdpbih3cGMtXFx1MDAzZWlub2RlLCBwb3MsIGxlbiwgSU9NQVBfV1JJVEUsXFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZ3cGMtXFx1MDAzZWlvbWFwLCBOVUxMKTtcXG4rXFx0XFx0aWYgKGVycm9yKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyb3I7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBpb21hcF9hZGRfdG9faW9lbmQod3BjLCBmb2xpbywgcG9zLCBlbmRfcG9zLCBsZW4pO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX3dyaXRlYmFja19vcHMgbWluaXhfd3JpdGViYWNrX29wcyA9IHtcXG4rXFx0LndyaXRlYmFja19yYW5nZSA9IG1pbml4X3dyaXRlYmFja19yYW5nZSxcXG4rXFx0LndyaXRlYmFja19zdWJtaXQgPSBpb21hcF9pb2VuZF93cml0ZWJhY2tfc3VibWl0LFxcbit9O1xcbitcXG4gc3RhdGljIGludCBtaW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssXFxuIFxcdFxcdCAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSlcXG4ge1xcbkBAIC00NDgsMTcgKzQ3Myw0NSBAQCBzdGF0aWMgaW50IG1pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jayxcXG4gXFx0XFx0cmV0dXJuIFYyX21pbml4X2dldF9ibG9jayhpbm9kZSwgYmxvY2ssIGJoX3Jlc3VsdCwgY3JlYXRlKTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBtaW5peF93cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbisvKiBUaGUgb2xkIG1pbml4X3dyaXRlcGFnZXMsIHByZXNlcnZlZCBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMuICovXFxuK3N0YXRpYyBpbnQgbWluaXhfYmxvY2tfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gXFx0XFx0c3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuIHtcXG4gXFx0cmV0dXJuIG1wYWdlX3dyaXRlcGFnZXMobWFwcGluZywgd2JjLCBtaW5peF9nZXRfYmxvY2spO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG1pbml4X3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuK1xcdFxcdHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbit7XFxuK1xcdHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4IHdwYyA9IHtcXG4rXFx0XFx0Lmlub2RlID0gbWFwcGluZy1cXHUwMDNlaG9zdCxcXG4rXFx0XFx0LndiYyA9IHdiYyxcXG4rXFx0XFx0Lm9wcyA9IFxcdTAwMjZtaW5peF93cml0ZWJhY2tfb3BzLFxcbitcXHR9O1xcbitcXHRyZXR1cm4gaW9tYXBfd3JpdGVwYWdlcyhcXHUwMDI2d3BjKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBtaW5peF9yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIoZm9saW8tXFx1MDAzZW1hcHBpbmctXFx1MDAzZWhvc3QpO1xcbitcXG4rXFx0aW9tYXBfYmlvX3JlYWRfZm9saW8oZm9saW8sIG9wcyk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKiBUaGUgb2xkIG1pbml4X3JlYWRfZm9saW8sIHByZXNlcnZlZCBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMuICovXFxuK3N0YXRpYyBpbnQgbWluaXhfYmxvY2tfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRyZXR1cm4gYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKGZvbGlvLCBtaW5peF9nZXRfYmxvY2spO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBtaW5peF9yZWFkYWhlYWQoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWMpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzID0gbWluaXhfaW9tYXBfb3BzX3ZlcihyYWMtXFx1MDAzZW1hcHBpbmctXFx1MDAzZWhvc3QpO1xcbitcXG4rXFx0aW9tYXBfYmlvX3JlYWRhaGVhZChyYWMsIG9wcyk7XFxuK31cXG4rXFxuIGludCBtaW5peF9wcmVwYXJlX2NodW5rKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbilcXG4ge1xcbiBcXHRyZXR1cm4gX19ibG9ja193cml0ZV9iZWdpbihmb2xpbywgcG9zLCBsZW4sIG1pbml4X2dldF9ibG9jayk7XFxuQEAgLTQ4OCwyNiArNTQxLDM1IEBAIHN0YXRpYyBpbnQgbWluaXhfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1zdGF0aWMgc2VjdG9yX3QgbWluaXhfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYmxvY2spXFxuLXtcXG4tXFx0cmV0dXJuIGdlbmVyaWNfYmxvY2tfYm1hcChtYXBwaW5nLGJsb2NrLG1pbml4X2dldF9ibG9jayk7XFxuLX1cXG4tXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG1pbml4X2FvcHMgPSB7XFxuLVxcdC5kaXJ0eV9mb2xpb1xcdD0gYmxvY2tfZGlydHlfZm9saW8sXFxuLVxcdC5pbnZhbGlkYXRlX2ZvbGlvID0gYmxvY2tfaW52YWxpZGF0ZV9mb2xpbyxcXG4rXFx0LmRpcnR5X2ZvbGlvXFx0PSBpb21hcF9kaXJ0eV9mb2xpbyxcXG4rXFx0LmludmFsaWRhdGVfZm9saW8gPSBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvLFxcbiBcXHQucmVhZF9mb2xpbyA9IG1pbml4X3JlYWRfZm9saW8sXFxuK1xcdC5yZWFkYWhlYWQgPSBtaW5peF9yZWFkYWhlYWQsXFxuIFxcdC53cml0ZXBhZ2VzID0gbWluaXhfd3JpdGVwYWdlcyxcXG4rXFx0Lm1pZ3JhdGVfZm9saW8gPSBmaWxlbWFwX21pZ3JhdGVfZm9saW8sXFxuK1xcdC5pc19wYXJ0aWFsbHlfdXB0b2RhdGUgPSBpb21hcF9pc19wYXJ0aWFsbHlfdXB0b2RhdGUsXFxuK1xcdC5yZWxlYXNlX2ZvbGlvID0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcXG4rXFx0LmVycm9yX3JlbW92ZV9mb2xpbyA9IGdlbmVyaWNfZXJyb3JfcmVtb3ZlX2ZvbGlvLFxcbit9O1xcbitcXG4rLyogQSBzcGVjaWFsIGFvcHMgZm9yIGRpcmVjdG9yaWVzIHRoYXQga2VlcHMgdXNpbmcgdGhlIGJ1ZmZlciBoZWFkIGNodW5rcywgYXRcXG4rICogbGVhc3QgZm9yIHRoZSB0aW1lIGJlaW5nLlxcbisgKi9cXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbWluaXhfZGlyX2FvcHMgPSB7XFxuK1xcdC5kaXJ0eV9mb2xpbyA9IGJsb2NrX2RpcnR5X2ZvbGlvLFxcbitcXHQuaW52YWxpZGF0ZV9mb2xpbyA9IGJsb2NrX2ludmFsaWRhdGVfZm9saW8sXFxuK1xcdC5yZWFkX2ZvbGlvID0gbWluaXhfYmxvY2tfcmVhZF9mb2xpbyxcXG4gXFx0LndyaXRlX2JlZ2luID0gbWluaXhfd3JpdGVfYmVnaW4sXFxuIFxcdC53cml0ZV9lbmQgPSBnZW5lcmljX3dyaXRlX2VuZCxcXG4gXFx0Lm1pZ3JhdGVfZm9saW8gPSBidWZmZXJfbWlncmF0ZV9mb2xpbyxcXG4tXFx0LmJtYXAgPSBtaW5peF9ibWFwLFxcbi1cXHQuZGlyZWN0X0lPID0gbm9vcF9kaXJlY3RfSU9cXG4rXFx0LndyaXRlcGFnZXMgPSBtaW5peF9ibG9ja193cml0ZXBhZ2VzLFxcbiB9O1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG4gXFx0LmdldF9saW5rXFx0PSBwYWdlX2dldF9saW5rLFxcbiBcXHQuZ2V0YXR0clxcdD0gbWluaXhfZ2V0YXR0cixcXG4rXFx0LnNldGF0dHJcXHQ9IG1pbml4X3NldGF0dHIsXFxuIH07XFxuIFxcbiB2b2lkIG1pbml4X3NldF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBkZXZfdCByZGV2KVxcbkBAIC01MTksNyArNTgxLDcgQEAgdm9pZCBtaW5peF9zZXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgZGV2X3QgcmRldilcXG4gXFx0fSBlbHNlIGlmIChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuIFxcdFxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNm1pbml4X2Rpcl9pbm9kZV9vcGVyYXRpb25zO1xcbiBcXHRcXHRpbm9kZS1cXHUwMDNlaV9mb3AgPSBcXHUwMDI2bWluaXhfZGlyX29wZXJhdGlvbnM7XFxuLVxcdFxcdGlub2RlLVxcdTAwM2VpX21hcHBpbmctXFx1MDAzZWFfb3BzID0gXFx1MDAyNm1pbml4X2FvcHM7XFxuK1xcdFxcdGlub2RlLVxcdTAwM2VpX21hcHBpbmctXFx1MDAzZWFfb3BzID0gXFx1MDAyNm1pbml4X2Rpcl9hb3BzO1xcbiBcXHR9IGVsc2UgaWYgKFNfSVNMTksoaW5vZGUtXFx1MDAzZWlfbW9kZSkpIHtcXG4gXFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2bWluaXhfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xcbiBcXHRcXHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xcbkBAIC03ODYsNCArODQ4LDMgQEAgbW9kdWxlX2luaXQoaW5pdF9taW5peF9mcylcXG4gbW9kdWxlX2V4aXQoZXhpdF9taW5peF9mcylcXG4gTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJNaW5peCBmaWxlIHN5c3RlbVxcXCIpO1xcbiBNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuLVxcbmRpZmYgLS1naXQgYS9mcy9taW5peC9pb21hcC5jIGIvZnMvbWluaXgvaW9tYXAuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOTBlMDE2YWFhMDFlYVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9mcy9taW5peC9pb21hcC5jXFxuQEAgLTAsMCArMSwxMjIgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisvKlxcbisgKiBpb21hcCBmdW5jdGlvbnMgZm9yIG1pbml4LlxcbisgKi9cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtaW5peF9jaGFpbl9jbGVhbnVwKEluZGlyZWN0ICpjaGFpbiwgSW5kaXJlY3QgKnBhcnRpYWwpXFxuK3tcXG4rXFx0d2hpbGUgKHBhcnRpYWwgXFx1MDAzZSBjaGFpbikge1xcbitcXHRcXHRicmVsc2UocGFydGlhbC1cXHUwMDNlYmgpO1xcbitcXHRcXHRwYXJ0aWFsLS07XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIG1pbml4X2lvbWFwX3NldF9tYXBwZWQoc3RydWN0IGlvbWFwICppb21hcCwgc2VjdG9yX3QgcGh5cyxcXG4rXFx0XFx0dW5zaWduZWQgaW50IGJsa2JpdHMsIHNlY3Rvcl90IGlibG9jaylcXG4re1xcbitcXHRpb21hcC1cXHUwMDNldHlwZSA9IElPTUFQX01BUFBFRDtcXG4rXFx0aW9tYXAtXFx1MDAzZWFkZHIgPSAodTY0KXBoeXMgXFx1MDAzY1xcdTAwM2MgYmxrYml0cztcXG4rXFx0aW9tYXAtXFx1MDAzZWxlbmd0aCA9IDEgXFx1MDAzY1xcdTAwM2MgYmxrYml0cztcXG4rXFx0aW9tYXAtXFx1MDAzZW9mZnNldCA9ICh1NjQpaWJsb2NrIFxcdTAwM2NcXHUwMDNjIGJsa2JpdHM7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtaW5peF9pb21hcF9zZXRfaG9sZShzdHJ1Y3QgaW9tYXAgKmlvbWFwLFxcbitcXHRcXHR1bnNpZ25lZCBpbnQgYmxrYml0cywgc2VjdG9yX3QgaWJsb2NrKVxcbit7XFxuK1xcdGlvbWFwLVxcdTAwM2V0eXBlID0gSU9NQVBfSE9MRTtcXG4rXFx0aW9tYXAtXFx1MDAzZWFkZHIgPSBJT01BUF9OVUxMX0FERFI7XFxuK1xcdGlvbWFwLVxcdTAwM2VsZW5ndGggPSAxIFxcdTAwM2NcXHUwMDNjIGJsa2JpdHM7XFxuK1xcdGlvbWFwLVxcdTAwM2VvZmZzZXQgPSAodTY0KWlibG9jayBcXHUwMDNjXFx1MDAzYyBibGtiaXRzO1xcbit9XFxuK1xcbisvKlxcbisgKiBtaW5peF9pb21hcF9iZWdpbiAtIG1hcCBhIGZpbGUgcmFuZ2UgdG8gZGlzayBibG9ja3MuIEl0IGFjdHMgYXMgYSByZXBsYWNlbWVudFxcbisgKiBmb3IgZ2V0X2Jsb2NrIGluIGl0cmVlX2NvbW1vbi5jLCBhdCBsZWFzdCBpbiB0aGUgaW1wb3J0YW50IHdheXMsIGFuZCBpc1xcbisgKiBhZGFwdGVkIGZyb20gaXQsIGJ1dCBpdCB1c2VzIGlvbWFwIGluc3RlYWQgb2YgYnVmZmVyX2hlYWQuXFxuKyAqL1xcbitzdGF0aWMgaW50IG1pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXFxuK1xcdHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApXFxuK3tcXG4rXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVxcdTAwM2VpX3NiO1xcbitcXHR1bnNpZ25lZCBpbnQgYmxrYml0cyA9IHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xcbitcXHRzZWN0b3JfdCBpYmxvY2sgPSBvZmZzZXQgXFx1MDAzZVxcdTAwM2UgYmxrYml0cztcXG4rXFx0aW50IGNyZWF0ZSA9IGZsYWdzIFxcdTAwMjYgSU9NQVBfV1JJVEU7XFxuK1xcbitcXHRpbnQgb2Zmc2V0c1tERVBUSF07XFxuK1xcdEluZGlyZWN0IGNoYWluW0RFUFRIXTtcXG4rXFx0SW5kaXJlY3QgKnBhcnRpYWw7XFxuK1xcdGludCBkZXB0aCA9IGJsb2NrX3RvX3BhdGgoaW5vZGUsIGlibG9jaywgb2Zmc2V0cyk7XFxuK1xcdGludCBsZWZ0O1xcbitcXHRpbnQgZXJyID0gLUVJTztcXG4rXFxuK1xcdHNlY3Rvcl90IHBoeXM7XFxuK1xcbitcXHQvKiBibG9jayBpcyBiZXlvbmQgbWF4IGZpbGUgc2l6ZSAqL1xcbitcXHRpZiAoZGVwdGggPT0gMClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpb21hcC1cXHUwMDNlYmRldiA9IGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2JkZXY7XFxuK1xcbityZXJlYWQ6XFxuK1xcdHBhcnRpYWwgPSBnZXRfYnJhbmNoKGlub2RlLCBkZXB0aCwgb2Zmc2V0cywgY2hhaW4sIFxcdTAwMjZlcnIpO1xcbitcXG4rXFx0LyogU2ltcGxlc3QgY2FzZSAtIGJsb2NrIGZvdW5kLCBubyBhbGxvY2F0aW9uIG5lZWRlZCAqL1xcbitcXHRpZiAoIXBhcnRpYWwpIHtcXG4rXFx0XFx0aW9tYXAtXFx1MDAzZWZsYWdzID0gMDtcXG4rXFx0XFx0cGh5cyA9IGJsb2NrX3RvX2NwdShjaGFpbltkZXB0aCAtIDFdLmtleSk7XFxuK1xcdFxcdHBhcnRpYWwgPSBjaGFpbitkZXB0aC0xO1xcbitcXHRcXHRtaW5peF9pb21hcF9zZXRfbWFwcGVkKGlvbWFwLCBwaHlzLCBibGtiaXRzLCBpYmxvY2spO1xcbitcXHRcXHRtaW5peF9jaGFpbl9jbGVhbnVwKGNoYWluLCBwYXJ0aWFsKTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0LyogTmV4dCBzaW1wbGUgY2FzZSAtIHBsYWluIGxvb2t1cCBvciBmYWlsZWQgcmVhZCBvZiBpbmRpcmVjdCBibG9jayAqL1xcbitcXHRpZiAoIWNyZWF0ZSB8fCBlcnIgPT0gLUVJTykge1xcbitcXHRcXHRtaW5peF9pb21hcF9zZXRfaG9sZShpb21hcCwgYmxrYml0cywgaWJsb2NrKTtcXG4rXFx0XFx0bWluaXhfY2hhaW5fY2xlYW51cChjaGFpbiwgcGFydGlhbCk7XFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoaXMgaXMgaGVsZCBvdmVyIGZyb20gdGhlIG9yaWdpbmFsIGdldF9ibG9jayBsb2dpYywgd2hlcmUgaXRcXG4rXFx0ICogYWN0ZWQgYXMgYSBndWFyZCBpbiBjYXNlIHRydW5jYXRlKCkgZGVsZXRlZCBibG9ja3MgZnJvbSB1bmRlciB0aGF0XFxuK1xcdCAqIGZ1bmN0aW9uLiBUaGVyZSBzaG91bGQgbm90IGJlIGEgcmFjZSB3aXRoIGlvbWFwIG9wZXJhdGlvbnMsIGJ1dFxcbitcXHQgKiB3ZSdyZSByZXRhaW5pbmcgdGhlIGRlZmVuc2l2ZSBjb2RpbmcgaGVyZSB0byBiZSBleHRyYSBzYWZlIGp1c3QgaW5cXG4rXFx0ICogY2FzZS5cXG4rXFx0ICovXFxuK1xcdGlmIChlcnIgPT0gLUVBR0FJTikge1xcbitcXHRcXHRtaW5peF9jaGFpbl9jbGVhbnVwKGNoYWluLCBwYXJ0aWFsKTtcXG4rXFx0XFx0Z290byByZXJlYWQ7XFxuK1xcdH1cXG4rXFxuK1xcdGxlZnQgPSAoY2hhaW4gKyBkZXB0aCkgLSBwYXJ0aWFsO1xcbitcXHRlcnIgPSBhbGxvY19icmFuY2goaW5vZGUsIGxlZnQsIG9mZnNldHMgKyAocGFydGlhbCAtIGNoYWluKSwgcGFydGlhbCk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0bWluaXhfY2hhaW5fY2xlYW51cChjaGFpbiwgcGFydGlhbCk7XFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChzcGxpY2VfYnJhbmNoKGlub2RlLCBjaGFpbiwgcGFydGlhbCwgbGVmdCkgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdG1pbml4X2NoYWluX2NsZWFudXAoY2hhaW4sIHBhcnRpYWwpO1xcbitcXHRcXHRnb3RvIHJlcmVhZDtcXG4rXFx0fVxcbitcXG4rXFx0LyogU3VjY2Vzc2Z1bCBhbGxvY2F0aW9uLCBtYXBwaW5nIGl0LiAqL1xcbitcXHRpb21hcC1cXHUwMDNlZmxhZ3MgPSBJT01BUF9GX05FVztcXG4rXFx0cGh5cyA9IGJsb2NrX3RvX2NwdShjaGFpbltkZXB0aCAtIDFdLmtleSk7XFxuK1xcdG1pbml4X2lvbWFwX3NldF9tYXBwZWQoaW9tYXAsIHBoeXMsIGJsa2JpdHMsIGlibG9jayk7XFxuK1xcdG1pbml4X2NoYWluX2NsZWFudXAoY2hhaW4sIHBhcnRpYWwpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rLypcXG4rICogbWluaXhfaW9tYXBfZW5kIGVuZHMgdXAgYmVpbmcgYSBub3A7IHNpbmNlIG1pbml4IGRvZXNuJ3QgaGF2ZSBhbnkgZXh0ZW50cyBvclxcbisgKiB0cmFuc2FjdGlvbnMgdG8gd29ycnkgYWJvdXQsIHRoZXJlIGlzbid0IGFueXRoaW5nIHRvIHVwZGF0ZSBoZXJlLiBUaGUgb24tZGlza1xcbisgKiBpbmRpcmVjdCBibG9ja3MgZ2V0IGRpcnRpZWQgaW4gbWluaXhfaW9tYXBfYmVnaW4uXFxuKyAqL1xcbitzdGF0aWMgaW50IG1pbml4X2lvbWFwX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxcbitcXHRzc2l6ZV90IHdyaXR0ZW4sIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcClcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbmRpZmYgLS1naXQgYS9mcy9taW5peC9pdHJlZV9jb21tb24uYyBiL2ZzL21pbml4L2l0cmVlX2NvbW1vbi5jXFxuaW5kZXggYzNjZDJjNzVhZjljZS4uZDczYWIxY2FhY2ZlYyAxMDA2NDRcXG4tLS0gYS9mcy9taW5peC9pdHJlZV9jb21tb24uY1xcbisrKyBiL2ZzL21pbml4L2l0cmVlX2NvbW1vbi5jXFxuQEAgLTMxMSw3ICszMTEsMTUgQEAgc3RhdGljIGlubGluZSB2b2lkIHRydW5jYXRlIChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcXG4gXFx0bG9uZyBpYmxvY2s7XFxuIFxcbiBcXHRpYmxvY2sgPSAoaW5vZGUtXFx1MDAzZWlfc2l6ZSArIHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSAtMSkgXFx1MDAzZVxcdTAwM2Ugc2ItXFx1MDAzZXNfYmxvY2tzaXplX2JpdHM7XFxuLVxcdGJsb2NrX3RydW5jYXRlX3BhZ2UoaW5vZGUtXFx1MDAzZWlfbWFwcGluZywgaW5vZGUtXFx1MDAzZWlfc2l6ZSwgZ2V0X2Jsb2NrKTtcXG4rXFxuK1xcdC8qIERlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBpbm9kZSBiZWluZyB0cnVuY2F0ZWQgaXMgYSBkaXJlY3Rvcnkgb3Igbm90LFxcbitcXHQgKiB3ZSBuZWVkIHRvIGVpdGhlciBjYWxsIGlvbWFwX3RydW5jYXRlX3BhZ2Ugb3IgYmxvY2tfdHJ1bmNhdGVfcGFnZS5cXG4rXFx0ICovXFxuK1xcdGlmIChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKVxcbitcXHRcXHRibG9ja190cnVuY2F0ZV9wYWdlKGlub2RlLVxcdTAwM2VpX21hcHBpbmcsIGlub2RlLVxcdTAwM2VpX3NpemUsIGdldF9ibG9jayk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0aW9tYXBfdHJ1bmNhdGVfcGFnZShpbm9kZSwgaW5vZGUtXFx1MDAzZWlfc2l6ZSwgTlVMTCxcXG4rXFx0XFx0XFx0bWluaXhfaW9tYXBfb3BzX3Zlcihpbm9kZSksIE5VTEwsIE5VTEwpO1xcbiBcXG4gXFx0biA9IGJsb2NrX3RvX3BhdGgoaW5vZGUsIGlibG9jaywgb2Zmc2V0cyk7XFxuIFxcdGlmICghbilcXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvaXRyZWVfdjEuYyBiL2ZzL21pbml4L2l0cmVlX3YxLmNcXG5pbmRleCAxZmVkOTA2MDQyYWE4Li41OGMyOWY0NDQzZDM3IDEwMDY0NFxcbi0tLSBhL2ZzL21pbml4L2l0cmVlX3YxLmNcXG4rKysgYi9mcy9taW5peC9pdHJlZV92MS5jXFxuQEAgLTQ5LDYgKzQ5LDE4IEBAIHN0YXRpYyBpbnQgYmxvY2tfdG9fcGF0aChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgbG9uZyBibG9jaywgaW50IG9mZnNldHNbREVQVEhdKVxcbiB9XFxuIFxcbiAjaW5jbHVkZSBcXFwiaXRyZWVfY29tbW9uLmNcXFwiXFxuKy8qIE5PVEEgQkVORTpcXG4rICpcXG4rICogVGhpcyBpcyBpY2t5IHRvIG1lLCBidXQgYXQgdGhlIHNhbWUgdGltZSBoYXZpbmcgaXQgYmUgYSBzdGFuZGFsb25lIEMgZmlsZVxcbisgKiB0aGF0J3MgY29tcGlsZWQgdG8gb2JqZWN0IGZvcm0gYW5kIGxpbmtlZCBzZXBhcmF0ZWx5IGxpa2UgaXQgaXMgaW4geGlhZnMgaXNcXG4rICogbXVjaCBuYXN0aWVyIGluIG1pbml4IGJlY2F1c2Ugb2YgdGhlIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgbWluaXggZnMgdGhhdFxcbisgKiBoYXZlIHNvbWUgdmVyeSwgdmVyeSBkaWZmZXJlbnQgYXNwZWN0cywgbGlrZSB0aGUgc2l6ZSBvZiBibG9ja190LiBJIGRvbid0XFxuKyAqIGxpa2UgaXQsIGJ1dCBzaW5jZSBtaW5peCBhbHJlYWR5IGhhcyB0aGlzIHBhdHRlcm4gd2hlcmUgYSBjb21tb24gaXRyZWUgZmlsZVxcbisgKiBpcyBpbmNsdWRlZCBpbiB0aGUgaXRyZWVfdjEgYW5kIGl0cmVlX3YyKGFuZCB2MykgZmlsZXMsIEknbSBpbmNsdWRpbmcgaW9tYXAuY1xcbisgKiBpbiB0aGVzZSBmaWxlcyBhcyB3ZWxsLiBJdCBkb2VzIGF0IGxlYXN0IGF2b2lkIGV4cG9ydGluZyBzb21lIGN1cnJlbnRseVxcbisgKiBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlbid0IG5lZWRlZCBhbnl3aGVyZSBidXQgaXRyZWVfY29tbW9uLmMgYW5kIGlvbWFwLmMuXFxuKyAqL1xcbisjaW5jbHVkZSBcXFwiaW9tYXAuY1xcXCJcXG4gXFxuIGludCBWMV9taW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssXFxuIFxcdFxcdFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKVxcbkBAIC02MSw3ICs3MywxOCBAQCB2b2lkIFYxX21pbml4X3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxcbiBcXHR0cnVuY2F0ZShpbm9kZSk7XFxuIH1cXG4gXFxuLXVuc2lnbmVkIFYxX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4rdW5zaWduZWQgaW50IFYxX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4ge1xcbiBcXHRyZXR1cm4gbmJsb2NrcyhzaXplLCBzYik7XFxuIH1cXG4rXFxuK2ludCBWMV9taW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxcbitcXHR1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKVxcbit7XFxuK1xcdHJldHVybiBtaW5peF9pb21hcF9iZWdpbihpbm9kZSwgb2Zmc2V0LCBsZW5ndGgsIGZsYWdzLCBpb21hcCwgc3JjbWFwKTtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMV9taW5peF9pb21hcF9vcHMgPSB7XFxuK1xcdC5pb21hcF9iZWdpbiA9IFYxX21pbml4X2lvbWFwX2JlZ2luLFxcbitcXHQuaW9tYXBfZW5kICAgPSBtaW5peF9pb21hcF9lbmQsXFxuK307XFxuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2l0cmVlX3YyLmMgYi9mcy9taW5peC9pdHJlZV92Mi5jXFxuaW5kZXggOWQwMGYzMWEyZDlkMS4uZmM3YTVhZThmYTFjYSAxMDA2NDRcXG4tLS0gYS9mcy9taW5peC9pdHJlZV92Mi5jXFxuKysrIGIvZnMvbWluaXgvaXRyZWVfdjIuY1xcbkBAIC01Nyw2ICs1NywxMCBAQCBzdGF0aWMgaW50IGJsb2NrX3RvX3BhdGgoc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssIGludCBvZmZzZXRzW0RFUFRIXSlcXG4gfVxcbiBcXG4gI2luY2x1ZGUgXFxcIml0cmVlX2NvbW1vbi5jXFxcIlxcbisvKiBTZWUgdGhlIG5vdGUgaW4gaXRyZWVfdjEgaW4gYSBjb21tZW50IHRoYXQgc3RhcnRzIFxcXCJOT1RBIEJFTkVcXFwiIGZvciBhblxcbisgKiBleHBsYW5hdGlvbiBmb3Igd2h5IGlvbWFwLmMgaXMgaW5jbHVkZWQgaGVyZS5cXG4rICovXFxuKyNpbmNsdWRlIFxcXCJpb21hcC5jXFxcIlxcbiBcXG4gaW50IFYyX21pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgbG9uZyBibG9jayxcXG4gXFx0XFx0XFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpXFxuQEAgLTY5LDcgKzczLDE4IEBAIHZvaWQgVjJfbWluaXhfdHJ1bmNhdGUoc3RydWN0IGlub2RlICogaW5vZGUpXFxuIFxcdHRydW5jYXRlKGlub2RlKTtcXG4gfVxcbiBcXG4tdW5zaWduZWQgVjJfbWluaXhfYmxvY2tzKGxvZmZfdCBzaXplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbit1bnNpZ25lZCBpbnQgVjJfbWluaXhfYmxvY2tzKGxvZmZfdCBzaXplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiB7XFxuIFxcdHJldHVybiBuYmxvY2tzKHNpemUsIHNiKTtcXG4gfVxcbitcXG4raW50IFYyX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXFxuK1xcdHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApXFxuK3tcXG4rXFx0cmV0dXJuIG1pbml4X2lvbWFwX2JlZ2luKGlub2RlLCBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsIGlvbWFwLCBzcmNtYXApO1xcbit9XFxuK1xcbitjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYyX21pbml4X2lvbWFwX29wcyA9IHtcXG4rXFx0LmlvbWFwX2JlZ2luID0gVjJfbWluaXhfaW9tYXBfYmVnaW4sXFxuK1xcdC5pb21hcF9lbmQgICA9IG1pbml4X2lvbWFwX2VuZCxcXG4rfTtcXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvbWluaXguaCBiL2ZzL21pbml4L21pbml4LmhcXG5pbmRleCA3ODcyMmNlMjJlMWUxLi45MDM1NjA0YzY4Y2ExIDEwMDY0NFxcbi0tLSBhL2ZzL21pbml4L21pbml4LmhcXG4rKysgYi9mcy9taW5peC9taW5peC5oXFxuQEAgLTUsNiArNSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZW1hcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWluaXhfZnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvbWFwLmhcXHUwMDNlXFxuIFxcbiAjZGVmaW5lIElOT0RFX1ZFUlNJT04oaW5vZGUpXFx0bWluaXhfc2IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VzX3ZlcnNpb25cXG4gI2RlZmluZSBNSU5JWF9WMVxcdFxcdDB4MDAwMVxcdFxcdC8qIG9yaWdpbmFsIG1pbml4IGZzICovXFxuQEAgLTU3LDYgKzU4LDggQEAgdm9pZCBtaW5peF9mcmVlX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGxvbmcgYmxvY2spO1xcbiB1bnNpZ25lZCBsb25nIG1pbml4X2NvdW50X2ZyZWVfYmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xcbiBpbnQgbWluaXhfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICosIGNvbnN0IHN0cnVjdCBwYXRoICosXFxuIFxcdFxcdHN0cnVjdCBrc3RhdCAqLCB1MzIsIHVuc2lnbmVkIGludCk7XFxuK2ludCBtaW5peF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuK1xcdHN0cnVjdCBpYXR0ciAqYXR0cik7XFxuIGludCBtaW5peF9wcmVwYXJlX2NodW5rKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbik7XFxuIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbWluaXhfZ2V0X21ldGFkYXRhX2JocyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gXFxuQEAgLTc2LDEzICs3OSwyMyBAQCBpbnQgbWluaXhfbWFrZV9lbXB0eShzdHJ1Y3QgaW5vZGUqLCBzdHJ1Y3QgaW5vZGUqKTtcXG4gaW50IG1pbml4X2VtcHR5X2RpcihzdHJ1Y3QgaW5vZGUqKTtcXG4gaW50IG1pbml4X3NldF9saW5rKHN0cnVjdCBtaW5peF9kaXJfZW50cnkgKmRlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4rXFxuIHN0cnVjdCBtaW5peF9kaXJfZW50cnkgKm1pbml4X2RvdGRvdChzdHJ1Y3QgaW5vZGUqLCBzdHJ1Y3QgZm9saW8gKiopO1xcbiBpbm9fdCBtaW5peF9pbm9kZV9ieV9uYW1lKHN0cnVjdCBkZW50cnkqKTtcXG4gXFxuK2ludCBWMV9taW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LFxcbitcXHRsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsXFxuK1xcdHN0cnVjdCBpb21hcCAqc3JjbWFwKTtcXG4raW50IFYyX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXFxuK1xcdGxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCxcXG4rXFx0c3RydWN0IGlvbWFwICpzcmNtYXApO1xcbitcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfaW5vZGVfb3BlcmF0aW9ucztcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X2Rpcl9pbm9kZV9vcGVyYXRpb25zO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9maWxlX29wZXJhdGlvbnM7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2Rpcl9vcGVyYXRpb25zO1xcbitleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMV9taW5peF9pb21hcF9vcHM7XFxuK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYyX21pbml4X2lvbWFwX29wcztcXG4gXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1pbml4X3NiX2luZm8gKm1pbml4X3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIHtcXG5AQCAtOTQsMTEgKzEwNywxNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtaW5peF9pbm9kZV9pbmZvICptaW5peF9pKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdHJldHVybiBjb250YWluZXJfb2YoaW5vZGUsIHN0cnVjdCBtaW5peF9pbm9kZV9pbmZvLCB2ZnNfaW5vZGUpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIG1pbml4X2Jsb2Nrc19uZWVkZWQodW5zaWduZWQgYml0cywgdW5zaWduZWQgYmxvY2tzaXplKVxcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBtaW5peF9ibG9ja3NfbmVlZGVkKHVuc2lnbmVkIGludCBiaXRzLCB1bnNpZ25lZCBpbnQgYmxvY2tzaXplKVxcbiB7XFxuIFxcdHJldHVybiBESVZfUk9VTkRfVVBfUE9XMihiaXRzLCBibG9ja3NpemUgKiA4KTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICptaW5peF9pb21hcF9vcHNfdmVyKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuK3tcXG4rXFx0cmV0dXJuIChJTk9ERV9WRVJTSU9OKGlub2RlKSA9PSBNSU5JWF9WMSkgP1xcbitcXHRcXHRcXHUwMDI2VjFfbWluaXhfaW9tYXBfb3BzIDogXFx1MDAyNlYyX21pbml4X2lvbWFwX29wcztcXG4rfVxcbitcXG4gI2lmIGRlZmluZWQoQ09ORklHX01JTklYX0ZTX05BVElWRV9FTkRJQU4pIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4gXFx0ZGVmaW5lZChDT05GSUdfTUlOSVhfRlNfQklHX0VORElBTl8xNkJJVF9JTkRFWEVEKVxcbiBcXG5AQCAtMTI4LDcgKzE0Nyw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbWluaXhfYmxvY2tzX25lZWRlZCh1bnNpZ25lZCBiaXRzLCB1bnNpZ25lZCBibG9ja3NpemUpXFxuICAqIGJpZy1lbmRpYW4gMTZiaXQgaW5kZXhlZCBiaXRtYXBzXFxuICAqL1xcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgbWluaXhfZmluZF9maXJzdF96ZXJvX2JpdChjb25zdCB2b2lkICp2YWRkciwgdW5zaWduZWQgc2l6ZSlcXG4rc3RhdGljIGlubGluZSBpbnQgbWluaXhfZmluZF9maXJzdF96ZXJvX2JpdChjb25zdCB2b2lkICp2YWRkciwgdW5zaWduZWQgaW50IHNpemUpXFxuIHtcXG4gXFx0Y29uc3QgdW5zaWduZWQgc2hvcnQgKnAgPSB2YWRkciwgKmFkZHIgPSB2YWRkcjtcXG4gXFx0dW5zaWduZWQgc2hvcnQgbnVtO1xcbmRpZmYgLS1naXQgYS9mcy9taW5peC9uYW1laS5jIGIvZnMvbWluaXgvbmFtZWkuY1xcbmluZGV4IDU1MjViYTM2N2VkNzQuLjUyZTExNTAxM2FiZjggMTAwNjQ0XFxuLS0tIGEvZnMvbWluaXgvbmFtZWkuY1xcbisrKyBiL2ZzL21pbml4L25hbWVpLmNcXG5AQCAtNiw2ICs2LDcgQEBcXG4gICovXFxuIFxcbiAjaW5jbHVkZSBcXFwibWluaXguaFxcXCJcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvbWFwLmhcXHUwMDNlXFxuIFxcbiBzdGF0aWMgaW50IGFkZF9ub25kaXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiB7XFxuQEAgLTg0LDEyICs4NSwxNiBAQCBzdGF0aWMgaW50IG1pbml4X3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRcXHRyZXR1cm4gUFRSX0VSUihpbm9kZSk7XFxuIFxcbiBcXHRtaW5peF9zZXRfaW5vZGUoaW5vZGUsIDApO1xcbi1cXHRlcnIgPSBwYWdlX3N5bWxpbmsoaW5vZGUsIHN5bW5hbWUsIGkpO1xcbitcXHRlcnIgPSBpb21hcF9zeW1saW5rX3dyaXRlKGlub2RlLCBzeW1uYW1lLCBpLCBtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKSwgTlVMTCwgTlVMTCk7XFxuK1xcbiBcXHRpZiAodW5saWtlbHkoZXJyKSkge1xcbiBcXHRcXHRpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7XFxuIFxcdFxcdGlwdXQoaW5vZGUpO1xcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuK1xcbitcXHRpX3NpemVfd3JpdGUoaW5vZGUsIGkgLSAxKTtcXG4rXFxuIFxcdHJldHVybiBhZGRfbm9uZGlyKGRlbnRyeSwgaW5vZGUpO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvbWFwLmggYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcXG5pbmRleCA4Yzc1NGViOTc0ZmJmLi5hYjI3YTNhNWI4ZDJjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvaW9tYXAuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvaW9tYXAuaFxcbkBAIC00NzEsNiArNDcxLDkgQEAgbG9mZl90IGlvbWFwX3NlZWtfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LFxcbiBcXHRcXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMpO1xcbiBzZWN0b3JfdCBpb21hcF9ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibm8sXFxuIFxcdFxcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyk7XFxuK2ludCBpb21hcF9zeW1saW5rX3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKnRhcmdldCwgaW50IGxlbixcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLFxcbitcXHRcXHRjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGVfb3BzICp3cml0ZV9vcHMsIHZvaWQgKnByaXZhdGUpO1xcbiBcXG4gLypcXG4gICogRmxhZ3MgZm9yIGlvbWFwX2lvZW5kLVxcdTAwM2Vpb19mbGFncy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTA6MjAuMTA3NjEzMDc2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjYxMjQ2MDAwMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUlOSVhfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb21hcF9zeW1saW5rX3dyaXRlXCIsXG4gICAgXCJWMV9taW5peF9pb21hcF9iZWdpblwiLFxuICAgIFwiVjJfbWluaXhfaW9tYXBfYmVnaW5cIixcbiAgICBcIm1pbml4X2ZpbGVfd3JpdGVfaXRlclwiLFxuICAgIFwibWluaXhfd3JpdGVwYWdlc1wiLFxuICAgIFwibWluaXhfcmVhZF9mb2xpb1wiLFxuICAgIFwibWluaXhfcmVhZGFoZWFkXCIsXG4gICAgXCJtaW5peF93cml0ZWJhY2tfcmFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtaWdyYXRlcyB0aGUgbWluaXggZmlsZXN5c3RlbSB0byB1c2UgaW9tYXAgZm9yIGJ1ZmZlcmVkIEkvTyBhbmQgc3ltbGlua3MuIFRoaXMgaW52b2x2ZXMgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWluaXggZmlsZSBvcGVyYXRpb25zLCBhZGRyZXNzIHNwYWNlIG9wZXJhdGlvbnMsIGFuZCBibG9jayBtYXBwaW5nIGxvZ2ljLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IG1vdW50aW5nIGEgbWluaXggZmlsZXN5c3RlbSBpbWFnZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjk0YzVhM2ZmY2VkNzM1ZjU4NDJmNjc0NjNkYmFmMTI1MTkxNWZlYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDIyOjEwOjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvaW9tYXAvYnVmZmVyZWQtaW8uYyBiL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNcbmluZGV4IDBhNWViZmRhOTBmMTIuLjVlOGFjM2ZhZDY3MTQgMTAwNjQ0XG4tLS0gYS9mcy9pb21hcC9idWZmZXJlZC1pby5jXG4rKysgYi9mcy9pb21hcC9idWZmZXJlZC1pby5jXG5AQCAtMjEwMCwzICsyMTAwLDM3IEBAIGlvbWFwX3dyaXRlcGFnZXMoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYylcbiBcdHJldHVybiBlcnJvcjtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfd3JpdGVwYWdlcyk7XG4rXG4raW50IGlvbWFwX3N5bWxpbmtfd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqdGFyZ2V0LCBpbnQgbGVuLFxuK1x0XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsXG4rXHRcdGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZV9vcHMgKndyaXRlX29wcywgdm9pZCAqcHJpdmF0ZSlcbit7XG4rXHRzdHJ1Y3Qga3ZlYyB2ZWMgPSB7XG4rXHRcdC5pb3ZfYmFzZVx0PSAodm9pZCAqKXRhcmdldCxcbitcdFx0Lmlvdl9sZW5cdD0gbGVuIC0gMSxcbitcdH07XG4rXHRzdHJ1Y3QgaW9tYXBfaXRlciBpdGVyID0ge1xuK1x0XHQuaW5vZGVcdFx0PSBpbm9kZSxcbitcdFx0LnBvc1x0XHQ9IDAsXG4rXHRcdC5sZW5cdFx0PSBsZW4gLSAxLFxuK1x0XHQuZmxhZ3NcdFx0PSBJT01BUF9XUklURSxcbitcdFx0LnByaXZhdGVcdD0gcHJpdmF0ZSxcbitcdH07XG4rXHRzdHJ1Y3QgaW92X2l0ZXIgaW92O1xuK1x0aW50IHJldDtcbitcbitcdGlvdl9pdGVyX2t2ZWMoXHUwMDI2aW92LCBJVEVSX1NPVVJDRSwgXHUwMDI2dmVjLCAxLCBsZW4gLSAxKTtcbitcbitcdHdoaWxlICgocmV0ID0gaW9tYXBfaXRlcihcdTAwMjZpdGVyLCBvcHMpKSBcdTAwM2UgMClcbitcdFx0aXRlci5zdGF0dXMgPSBpb21hcF93cml0ZV9pdGVyKFx1MDAyNml0ZXIsIFx1MDAyNmlvdiwgd3JpdGVfb3BzKTtcbitcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAodW5saWtlbHkoaXRlci5wb3MgPT0gMCkpXG4rXHRcdHJldHVybiAtRUlPO1xuK1xuK1x0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfc3ltbGlua193cml0ZSk7XG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvZmlsZS5jIGIvZnMvbWluaXgvZmlsZS5jXG5pbmRleCAwMmFhYmJkYjVkZWFhLi42NzY1ZjU3MWJkM2ZjIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvZmlsZS5jXG4rKysgYi9mcy9taW5peC9maWxlLmNcbkBAIC0xMCw2ICsxMCwzMiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J1ZmZlcl9oZWFkLmhcdTAwM2VcbiAjaW5jbHVkZSBcIm1pbml4LmhcIlxuIFxuK3N0YXRpYyBzc2l6ZV90IG1pbml4X2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbit7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaW9jYi1cdTAwM2VraV9maWxwLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuK1x0c3NpemVfdCByZXQ7XG4rXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKTtcbitcbitcdGlub2RlX2xvY2soaW5vZGUpO1xuK1x0cmV0ID0gZ2VuZXJpY193cml0ZV9jaGVja3MoaW9jYiwgZnJvbSk7XG4rXHRpZiAocmV0IFx1MDAzYz0gMClcbitcdFx0Z290byB1bmxvY2s7XG4rXG4rXHRyZXQgPSBmaWxlX21vZGlmaWVkKGlvY2ItXHUwMDNla2lfZmlscCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIHVubG9jaztcbitcbitcdHJldCA9IGlvbWFwX2ZpbGVfYnVmZmVyZWRfd3JpdGUoaW9jYiwgZnJvbSwgb3BzLFxuK1x0XHRcdE5VTEwsIE5VTEwpO1xuK1xuK1x0aWYgKHJldCBcdTAwM2UgMClcbitcdFx0cmV0ID0gZ2VuZXJpY193cml0ZV9zeW5jKGlvY2IsIHJldCk7XG4rXG4rdW5sb2NrOlxuK1x0aW5vZGVfdW5sb2NrKGlub2RlKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIC8qXG4gICogV2UgaGF2ZSBtb3N0bHkgTlVMTHMgaGVyZTogdGhlIGN1cnJlbnQgZGVmYXVsdHMgYXJlIE9LIGZvclxuICAqIHRoZSBtaW5peCBmaWxlc3lzdGVtLlxuQEAgLTE3LDEzICs0MywxMyBAQFxuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWluaXhfZmlsZV9vcGVyYXRpb25zID0ge1xuIFx0Lmxsc2Vla1x0XHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXG4gXHQucmVhZF9pdGVyXHQ9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsXG4tXHQud3JpdGVfaXRlclx0PSBnZW5lcmljX2ZpbGVfd3JpdGVfaXRlcixcbitcdC53cml0ZV9pdGVyXHQ9IG1pbml4X2ZpbGVfd3JpdGVfaXRlcixcbiBcdC5tbWFwX3ByZXBhcmVcdD0gZ2VuZXJpY19maWxlX21tYXBfcHJlcGFyZSxcbiBcdC5mc3luY1x0XHQ9IHNpbXBsZV9mc3luYyxcbiBcdC5zcGxpY2VfcmVhZFx0PSBmaWxlbWFwX3NwbGljZV9yZWFkLFxuIH07XG4gXG4tc3RhdGljIGludCBtaW5peF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK2ludCBtaW5peF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cilcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShkZW50cnkpO1xuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2lub2RlLmMgYi9mcy9taW5peC9pbm9kZS5jXG5pbmRleCBkYWY4M2U0ZmYyNWM4Li4yYmY1ZWE5MjM2MGEyIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvaW5vZGUuY1xuKysrIGIvZnMvbWluaXgvaW5vZGUuY1xuQEAgLTQzOSw2ICs0MzksMzEgQEAgc3RhdGljIGludCBtaW5peF9zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBzc2l6ZV90IG1pbml4X3dyaXRlYmFja19yYW5nZShzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLFxuK1x0c3RydWN0IGZvbGlvICpmb2xpbywgdTY0IHBvcywgdW5zaWduZWQgaW50IGxlbiwgdTY0IGVuZF9wb3MpXG4re1xuK1x0aW50IGVycm9yO1xuK1xuK1x0aWYgKHBvcyBcdTAwM2Mgd3BjLVx1MDAzZWlvbWFwLm9mZnNldCB8fFxuK1x0XHRcdHBvcyBcdTAwM2U9IHdwYy1cdTAwM2Vpb21hcC5vZmZzZXQgKyB3cGMtXHUwMDNlaW9tYXAubGVuZ3RoKSB7XG4rXHRcdGlmIChJTk9ERV9WRVJTSU9OKHdwYy1cdTAwM2Vpbm9kZSkgPT0gTUlOSVhfVjEpXG4rXHRcdFx0ZXJyb3IgPSBWMV9taW5peF9pb21hcF9iZWdpbih3cGMtXHUwMDNlaW5vZGUsIHBvcywgbGVuLCBJT01BUF9XUklURSxcbitcdFx0XHRcdFx1MDAyNndwYy1cdTAwM2Vpb21hcCwgTlVMTCk7XG4rXHRcdGVsc2VcbitcdFx0XHRlcnJvciA9IFYyX21pbml4X2lvbWFwX2JlZ2luKHdwYy1cdTAwM2Vpbm9kZSwgcG9zLCBsZW4sIElPTUFQX1dSSVRFLFxuK1x0XHRcdFx0XHUwMDI2d3BjLVx1MDAzZWlvbWFwLCBOVUxMKTtcbitcdFx0aWYgKGVycm9yKVxuK1x0XHRcdHJldHVybiBlcnJvcjtcbitcdH1cbitcbitcdHJldHVybiBpb21hcF9hZGRfdG9faW9lbmQod3BjLCBmb2xpbywgcG9zLCBlbmRfcG9zLCBsZW4pO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX3dyaXRlYmFja19vcHMgbWluaXhfd3JpdGViYWNrX29wcyA9IHtcbitcdC53cml0ZWJhY2tfcmFuZ2UgPSBtaW5peF93cml0ZWJhY2tfcmFuZ2UsXG4rXHQud3JpdGViYWNrX3N1Ym1pdCA9IGlvbWFwX2lvZW5kX3dyaXRlYmFja19zdWJtaXQsXG4rfTtcbitcbiBzdGF0aWMgaW50IG1pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jayxcbiBcdFx0ICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKVxuIHtcbkBAIC00NDgsMTcgKzQ3Myw0NSBAQCBzdGF0aWMgaW50IG1pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jayxcbiBcdFx0cmV0dXJuIFYyX21pbml4X2dldF9ibG9jayhpbm9kZSwgYmxvY2ssIGJoX3Jlc3VsdCwgY3JlYXRlKTtcbiB9XG4gXG4tc3RhdGljIGludCBtaW5peF93cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuKy8qIFRoZSBvbGQgbWluaXhfd3JpdGVwYWdlcywgcHJlc2VydmVkIGZvciBkaXJlY3Rvcnkgb3BlcmF0aW9ucy4gKi9cbitzdGF0aWMgaW50IG1pbml4X2Jsb2NrX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIHtcbiBcdHJldHVybiBtcGFnZV93cml0ZXBhZ2VzKG1hcHBpbmcsIHdiYywgbWluaXhfZ2V0X2Jsb2NrKTtcbiB9XG4gXG4rc3RhdGljIGludCBtaW5peF93cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuK1x0XHRzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbit7XG4rXHRzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCB3cGMgPSB7XG4rXHRcdC5pbm9kZSA9IG1hcHBpbmctXHUwMDNlaG9zdCxcbitcdFx0LndiYyA9IHdiYyxcbitcdFx0Lm9wcyA9IFx1MDAyNm1pbml4X3dyaXRlYmFja19vcHMsXG4rXHR9O1xuK1x0cmV0dXJuIGlvbWFwX3dyaXRlcGFnZXMoXHUwMDI2d3BjKTtcbit9XG4rXG4gc3RhdGljIGludCBtaW5peF9yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIoZm9saW8tXHUwMDNlbWFwcGluZy1cdTAwM2Vob3N0KTtcbitcbitcdGlvbWFwX2Jpb19yZWFkX2ZvbGlvKGZvbGlvLCBvcHMpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIFRoZSBvbGQgbWluaXhfcmVhZF9mb2xpbywgcHJlc2VydmVkIGZvciBkaXJlY3Rvcnkgb3BlcmF0aW9ucy4gKi9cbitzdGF0aWMgaW50IG1pbml4X2Jsb2NrX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0cmV0dXJuIGJsb2NrX3JlYWRfZnVsbF9mb2xpbyhmb2xpbywgbWluaXhfZ2V0X2Jsb2NrKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgbWluaXhfcmVhZGFoZWFkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIocmFjLVx1MDAzZW1hcHBpbmctXHUwMDNlaG9zdCk7XG4rXG4rXHRpb21hcF9iaW9fcmVhZGFoZWFkKHJhYywgb3BzKTtcbit9XG4rXG4gaW50IG1pbml4X3ByZXBhcmVfY2h1bmsoc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuKVxuIHtcbiBcdHJldHVybiBfX2Jsb2NrX3dyaXRlX2JlZ2luKGZvbGlvLCBwb3MsIGxlbiwgbWluaXhfZ2V0X2Jsb2NrKTtcbkBAIC00ODgsMjYgKzU0MSwzNSBAQCBzdGF0aWMgaW50IG1pbml4X3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBzZWN0b3JfdCBtaW5peF9ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibG9jaylcbi17XG4tXHRyZXR1cm4gZ2VuZXJpY19ibG9ja19ibWFwKG1hcHBpbmcsYmxvY2ssbWluaXhfZ2V0X2Jsb2NrKTtcbi19XG4tXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbWluaXhfYW9wcyA9IHtcbi1cdC5kaXJ0eV9mb2xpb1x0PSBibG9ja19kaXJ0eV9mb2xpbyxcbi1cdC5pbnZhbGlkYXRlX2ZvbGlvID0gYmxvY2tfaW52YWxpZGF0ZV9mb2xpbyxcbitcdC5kaXJ0eV9mb2xpb1x0PSBpb21hcF9kaXJ0eV9mb2xpbyxcbitcdC5pbnZhbGlkYXRlX2ZvbGlvID0gaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyxcbiBcdC5yZWFkX2ZvbGlvID0gbWluaXhfcmVhZF9mb2xpbyxcbitcdC5yZWFkYWhlYWQgPSBtaW5peF9yZWFkYWhlYWQsXG4gXHQud3JpdGVwYWdlcyA9IG1pbml4X3dyaXRlcGFnZXMsXG4rXHQubWlncmF0ZV9mb2xpbyA9IGZpbGVtYXBfbWlncmF0ZV9mb2xpbyxcbitcdC5pc19wYXJ0aWFsbHlfdXB0b2RhdGUgPSBpb21hcF9pc19wYXJ0aWFsbHlfdXB0b2RhdGUsXG4rXHQucmVsZWFzZV9mb2xpbyA9IGlvbWFwX3JlbGVhc2VfZm9saW8sXG4rXHQuZXJyb3JfcmVtb3ZlX2ZvbGlvID0gZ2VuZXJpY19lcnJvcl9yZW1vdmVfZm9saW8sXG4rfTtcbitcbisvKiBBIHNwZWNpYWwgYW9wcyBmb3IgZGlyZWN0b3JpZXMgdGhhdCBrZWVwcyB1c2luZyB0aGUgYnVmZmVyIGhlYWQgY2h1bmtzLCBhdFxuKyAqIGxlYXN0IGZvciB0aGUgdGltZSBiZWluZy5cbisgKi9cbitzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBtaW5peF9kaXJfYW9wcyA9IHtcbitcdC5kaXJ0eV9mb2xpbyA9IGJsb2NrX2RpcnR5X2ZvbGlvLFxuK1x0LmludmFsaWRhdGVfZm9saW8gPSBibG9ja19pbnZhbGlkYXRlX2ZvbGlvLFxuK1x0LnJlYWRfZm9saW8gPSBtaW5peF9ibG9ja19yZWFkX2ZvbGlvLFxuIFx0LndyaXRlX2JlZ2luID0gbWluaXhfd3JpdGVfYmVnaW4sXG4gXHQud3JpdGVfZW5kID0gZ2VuZXJpY193cml0ZV9lbmQsXG4gXHQubWlncmF0ZV9mb2xpbyA9IGJ1ZmZlcl9taWdyYXRlX2ZvbGlvLFxuLVx0LmJtYXAgPSBtaW5peF9ibWFwLFxuLVx0LmRpcmVjdF9JTyA9IG5vb3BfZGlyZWN0X0lPXG4rXHQud3JpdGVwYWdlcyA9IG1pbml4X2Jsb2NrX3dyaXRlcGFnZXMsXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWluaXhfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0ge1xuIFx0LmdldF9saW5rXHQ9IHBhZ2VfZ2V0X2xpbmssXG4gXHQuZ2V0YXR0clx0PSBtaW5peF9nZXRhdHRyLFxuK1x0LnNldGF0dHJcdD0gbWluaXhfc2V0YXR0cixcbiB9O1xuIFxuIHZvaWQgbWluaXhfc2V0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGRldl90IHJkZXYpXG5AQCAtNTE5LDcgKzU4MSw3IEBAIHZvaWQgbWluaXhfc2V0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGRldl90IHJkZXYpXG4gXHR9IGVsc2UgaWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuIFx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2bWluaXhfZGlyX2lub2RlX29wZXJhdGlvbnM7XG4gXHRcdGlub2RlLVx1MDAzZWlfZm9wID0gXHUwMDI2bWluaXhfZGlyX29wZXJhdGlvbnM7XG4tXHRcdGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcyA9IFx1MDAyNm1pbml4X2FvcHM7XG4rXHRcdGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcyA9IFx1MDAyNm1pbml4X2Rpcl9hb3BzO1xuIFx0fSBlbHNlIGlmIChTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbiBcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNm1pbml4X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucztcbiBcdFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcbkBAIC03ODYsNCArODQ4LDMgQEAgbW9kdWxlX2luaXQoaW5pdF9taW5peF9mcylcbiBtb2R1bGVfZXhpdChleGl0X21pbml4X2ZzKVxuIE1PRFVMRV9ERVNDUklQVElPTihcIk1pbml4IGZpbGUgc3lzdGVtXCIpO1xuIE1PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuLVxuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2lvbWFwLmMgYi9mcy9taW5peC9pb21hcC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOTBlMDE2YWFhMDFlYVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZnMvbWluaXgvaW9tYXAuY1xuQEAgLTAsMCArMSwxMjIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLypcbisgKiBpb21hcCBmdW5jdGlvbnMgZm9yIG1pbml4LlxuKyAqL1xuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBtaW5peF9jaGFpbl9jbGVhbnVwKEluZGlyZWN0ICpjaGFpbiwgSW5kaXJlY3QgKnBhcnRpYWwpXG4re1xuK1x0d2hpbGUgKHBhcnRpYWwgXHUwMDNlIGNoYWluKSB7XG4rXHRcdGJyZWxzZShwYXJ0aWFsLVx1MDAzZWJoKTtcbitcdFx0cGFydGlhbC0tO1xuK1x0fVxuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgbWluaXhfaW9tYXBfc2V0X21hcHBlZChzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBzZWN0b3JfdCBwaHlzLFxuK1x0XHR1bnNpZ25lZCBpbnQgYmxrYml0cywgc2VjdG9yX3QgaWJsb2NrKVxuK3tcbitcdGlvbWFwLVx1MDAzZXR5cGUgPSBJT01BUF9NQVBQRUQ7XG4rXHRpb21hcC1cdTAwM2VhZGRyID0gKHU2NClwaHlzIFx1MDAzY1x1MDAzYyBibGtiaXRzO1xuK1x0aW9tYXAtXHUwMDNlbGVuZ3RoID0gMSBcdTAwM2NcdTAwM2MgYmxrYml0cztcbitcdGlvbWFwLVx1MDAzZW9mZnNldCA9ICh1NjQpaWJsb2NrIFx1MDAzY1x1MDAzYyBibGtiaXRzO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgbWluaXhfaW9tYXBfc2V0X2hvbGUoc3RydWN0IGlvbWFwICppb21hcCxcbitcdFx0dW5zaWduZWQgaW50IGJsa2JpdHMsIHNlY3Rvcl90IGlibG9jaylcbit7XG4rXHRpb21hcC1cdTAwM2V0eXBlID0gSU9NQVBfSE9MRTtcbitcdGlvbWFwLVx1MDAzZWFkZHIgPSBJT01BUF9OVUxMX0FERFI7XG4rXHRpb21hcC1cdTAwM2VsZW5ndGggPSAxIFx1MDAzY1x1MDAzYyBibGtiaXRzO1xuK1x0aW9tYXAtXHUwMDNlb2Zmc2V0ID0gKHU2NClpYmxvY2sgXHUwMDNjXHUwMDNjIGJsa2JpdHM7XG4rfVxuK1xuKy8qXG4rICogbWluaXhfaW9tYXBfYmVnaW4gLSBtYXAgYSBmaWxlIHJhbmdlIHRvIGRpc2sgYmxvY2tzLiBJdCBhY3RzIGFzIGEgcmVwbGFjZW1lbnRcbisgKiBmb3IgZ2V0X2Jsb2NrIGluIGl0cmVlX2NvbW1vbi5jLCBhdCBsZWFzdCBpbiB0aGUgaW1wb3J0YW50IHdheXMsIGFuZCBpc1xuKyAqIGFkYXB0ZWQgZnJvbSBpdCwgYnV0IGl0IHVzZXMgaW9tYXAgaW5zdGVhZCBvZiBidWZmZXJfaGVhZC5cbisgKi9cbitzdGF0aWMgaW50IG1pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXG4rXHR1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKVxuK3tcbitcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuK1x0dW5zaWduZWQgaW50IGJsa2JpdHMgPSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xuK1x0c2VjdG9yX3QgaWJsb2NrID0gb2Zmc2V0IFx1MDAzZVx1MDAzZSBibGtiaXRzO1xuK1x0aW50IGNyZWF0ZSA9IGZsYWdzIFx1MDAyNiBJT01BUF9XUklURTtcbitcbitcdGludCBvZmZzZXRzW0RFUFRIXTtcbitcdEluZGlyZWN0IGNoYWluW0RFUFRIXTtcbitcdEluZGlyZWN0ICpwYXJ0aWFsO1xuK1x0aW50IGRlcHRoID0gYmxvY2tfdG9fcGF0aChpbm9kZSwgaWJsb2NrLCBvZmZzZXRzKTtcbitcdGludCBsZWZ0O1xuK1x0aW50IGVyciA9IC1FSU87XG4rXG4rXHRzZWN0b3JfdCBwaHlzO1xuK1xuK1x0LyogYmxvY2sgaXMgYmV5b25kIG1heCBmaWxlIHNpemUgKi9cbitcdGlmIChkZXB0aCA9PSAwKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlvbWFwLVx1MDAzZWJkZXYgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmRldjtcbitcbityZXJlYWQ6XG4rXHRwYXJ0aWFsID0gZ2V0X2JyYW5jaChpbm9kZSwgZGVwdGgsIG9mZnNldHMsIGNoYWluLCBcdTAwMjZlcnIpO1xuK1xuK1x0LyogU2ltcGxlc3QgY2FzZSAtIGJsb2NrIGZvdW5kLCBubyBhbGxvY2F0aW9uIG5lZWRlZCAqL1xuK1x0aWYgKCFwYXJ0aWFsKSB7XG4rXHRcdGlvbWFwLVx1MDAzZWZsYWdzID0gMDtcbitcdFx0cGh5cyA9IGJsb2NrX3RvX2NwdShjaGFpbltkZXB0aCAtIDFdLmtleSk7XG4rXHRcdHBhcnRpYWwgPSBjaGFpbitkZXB0aC0xO1xuK1x0XHRtaW5peF9pb21hcF9zZXRfbWFwcGVkKGlvbWFwLCBwaHlzLCBibGtiaXRzLCBpYmxvY2spO1xuK1x0XHRtaW5peF9jaGFpbl9jbGVhbnVwKGNoYWluLCBwYXJ0aWFsKTtcbitcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdC8qIE5leHQgc2ltcGxlIGNhc2UgLSBwbGFpbiBsb29rdXAgb3IgZmFpbGVkIHJlYWQgb2YgaW5kaXJlY3QgYmxvY2sgKi9cbitcdGlmICghY3JlYXRlIHx8IGVyciA9PSAtRUlPKSB7XG4rXHRcdG1pbml4X2lvbWFwX3NldF9ob2xlKGlvbWFwLCBibGtiaXRzLCBpYmxvY2spO1xuK1x0XHRtaW5peF9jaGFpbl9jbGVhbnVwKGNoYWluLCBwYXJ0aWFsKTtcbitcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBUaGlzIGlzIGhlbGQgb3ZlciBmcm9tIHRoZSBvcmlnaW5hbCBnZXRfYmxvY2sgbG9naWMsIHdoZXJlIGl0XG4rXHQgKiBhY3RlZCBhcyBhIGd1YXJkIGluIGNhc2UgdHJ1bmNhdGUoKSBkZWxldGVkIGJsb2NrcyBmcm9tIHVuZGVyIHRoYXRcbitcdCAqIGZ1bmN0aW9uLiBUaGVyZSBzaG91bGQgbm90IGJlIGEgcmFjZSB3aXRoIGlvbWFwIG9wZXJhdGlvbnMsIGJ1dFxuK1x0ICogd2UncmUgcmV0YWluaW5nIHRoZSBkZWZlbnNpdmUgY29kaW5nIGhlcmUgdG8gYmUgZXh0cmEgc2FmZSBqdXN0IGluXG4rXHQgKiBjYXNlLlxuK1x0ICovXG4rXHRpZiAoZXJyID09IC1FQUdBSU4pIHtcbitcdFx0bWluaXhfY2hhaW5fY2xlYW51cChjaGFpbiwgcGFydGlhbCk7XG4rXHRcdGdvdG8gcmVyZWFkO1xuK1x0fVxuK1xuK1x0bGVmdCA9IChjaGFpbiArIGRlcHRoKSAtIHBhcnRpYWw7XG4rXHRlcnIgPSBhbGxvY19icmFuY2goaW5vZGUsIGxlZnQsIG9mZnNldHMgKyAocGFydGlhbCAtIGNoYWluKSwgcGFydGlhbCk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdG1pbml4X2NoYWluX2NsZWFudXAoY2hhaW4sIHBhcnRpYWwpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0aWYgKHNwbGljZV9icmFuY2goaW5vZGUsIGNoYWluLCBwYXJ0aWFsLCBsZWZ0KSBcdTAwM2MgMCkge1xuK1x0XHRtaW5peF9jaGFpbl9jbGVhbnVwKGNoYWluLCBwYXJ0aWFsKTtcbitcdFx0Z290byByZXJlYWQ7XG4rXHR9XG4rXG4rXHQvKiBTdWNjZXNzZnVsIGFsbG9jYXRpb24sIG1hcHBpbmcgaXQuICovXG4rXHRpb21hcC1cdTAwM2VmbGFncyA9IElPTUFQX0ZfTkVXO1xuK1x0cGh5cyA9IGJsb2NrX3RvX2NwdShjaGFpbltkZXB0aCAtIDFdLmtleSk7XG4rXHRtaW5peF9pb21hcF9zZXRfbWFwcGVkKGlvbWFwLCBwaHlzLCBibGtiaXRzLCBpYmxvY2spO1xuK1x0bWluaXhfY2hhaW5fY2xlYW51cChjaGFpbiwgcGFydGlhbCk7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbisvKlxuKyAqIG1pbml4X2lvbWFwX2VuZCBlbmRzIHVwIGJlaW5nIGEgbm9wOyBzaW5jZSBtaW5peCBkb2Vzbid0IGhhdmUgYW55IGV4dGVudHMgb3JcbisgKiB0cmFuc2FjdGlvbnMgdG8gd29ycnkgYWJvdXQsIHRoZXJlIGlzbid0IGFueXRoaW5nIHRvIHVwZGF0ZSBoZXJlLiBUaGUgb24tZGlza1xuKyAqIGluZGlyZWN0IGJsb2NrcyBnZXQgZGlydGllZCBpbiBtaW5peF9pb21hcF9iZWdpbi5cbisgKi9cbitzdGF0aWMgaW50IG1pbml4X2lvbWFwX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxuK1x0c3NpemVfdCB3cml0dGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXApXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2l0cmVlX2NvbW1vbi5jIGIvZnMvbWluaXgvaXRyZWVfY29tbW9uLmNcbmluZGV4IGMzY2QyYzc1YWY5Y2UuLmQ3M2FiMWNhYWNmZWMgMTAwNjQ0XG4tLS0gYS9mcy9taW5peC9pdHJlZV9jb21tb24uY1xuKysrIGIvZnMvbWluaXgvaXRyZWVfY29tbW9uLmNcbkBAIC0zMTEsNyArMzExLDE1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0cnVuY2F0ZSAoc3RydWN0IGlub2RlICogaW5vZGUpXG4gXHRsb25nIGlibG9jaztcbiBcbiBcdGlibG9jayA9IChpbm9kZS1cdTAwM2VpX3NpemUgKyBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZSAtMSkgXHUwMDNlXHUwMDNlIHNiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHM7XG4tXHRibG9ja190cnVuY2F0ZV9wYWdlKGlub2RlLVx1MDAzZWlfbWFwcGluZywgaW5vZGUtXHUwMDNlaV9zaXplLCBnZXRfYmxvY2spO1xuK1xuK1x0LyogRGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGlub2RlIGJlaW5nIHRydW5jYXRlZCBpcyBhIGRpcmVjdG9yeSBvciBub3QsXG4rXHQgKiB3ZSBuZWVkIHRvIGVpdGhlciBjYWxsIGlvbWFwX3RydW5jYXRlX3BhZ2Ugb3IgYmxvY2tfdHJ1bmNhdGVfcGFnZS5cbitcdCAqL1xuK1x0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSlcbitcdFx0YmxvY2tfdHJ1bmNhdGVfcGFnZShpbm9kZS1cdTAwM2VpX21hcHBpbmcsIGlub2RlLVx1MDAzZWlfc2l6ZSwgZ2V0X2Jsb2NrKTtcbitcdGVsc2VcbitcdFx0aW9tYXBfdHJ1bmNhdGVfcGFnZShpbm9kZSwgaW5vZGUtXHUwMDNlaV9zaXplLCBOVUxMLFxuK1x0XHRcdG1pbml4X2lvbWFwX29wc192ZXIoaW5vZGUpLCBOVUxMLCBOVUxMKTtcbiBcbiBcdG4gPSBibG9ja190b19wYXRoKGlub2RlLCBpYmxvY2ssIG9mZnNldHMpO1xuIFx0aWYgKCFuKVxuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2l0cmVlX3YxLmMgYi9mcy9taW5peC9pdHJlZV92MS5jXG5pbmRleCAxZmVkOTA2MDQyYWE4Li41OGMyOWY0NDQzZDM3IDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvaXRyZWVfdjEuY1xuKysrIGIvZnMvbWluaXgvaXRyZWVfdjEuY1xuQEAgLTQ5LDYgKzQ5LDE4IEBAIHN0YXRpYyBpbnQgYmxvY2tfdG9fcGF0aChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgbG9uZyBibG9jaywgaW50IG9mZnNldHNbREVQVEhdKVxuIH1cbiBcbiAjaW5jbHVkZSBcIml0cmVlX2NvbW1vbi5jXCJcbisvKiBOT1RBIEJFTkU6XG4rICpcbisgKiBUaGlzIGlzIGlja3kgdG8gbWUsIGJ1dCBhdCB0aGUgc2FtZSB0aW1lIGhhdmluZyBpdCBiZSBhIHN0YW5kYWxvbmUgQyBmaWxlXG4rICogdGhhdCdzIGNvbXBpbGVkIHRvIG9iamVjdCBmb3JtIGFuZCBsaW5rZWQgc2VwYXJhdGVseSBsaWtlIGl0IGlzIGluIHhpYWZzIGlzXG4rICogbXVjaCBuYXN0aWVyIGluIG1pbml4IGJlY2F1c2Ugb2YgdGhlIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgbWluaXggZnMgdGhhdFxuKyAqIGhhdmUgc29tZSB2ZXJ5LCB2ZXJ5IGRpZmZlcmVudCBhc3BlY3RzLCBsaWtlIHRoZSBzaXplIG9mIGJsb2NrX3QuIEkgZG9uJ3RcbisgKiBsaWtlIGl0LCBidXQgc2luY2UgbWluaXggYWxyZWFkeSBoYXMgdGhpcyBwYXR0ZXJuIHdoZXJlIGEgY29tbW9uIGl0cmVlIGZpbGVcbisgKiBpcyBpbmNsdWRlZCBpbiB0aGUgaXRyZWVfdjEgYW5kIGl0cmVlX3YyKGFuZCB2MykgZmlsZXMsIEknbSBpbmNsdWRpbmcgaW9tYXAuY1xuKyAqIGluIHRoZXNlIGZpbGVzIGFzIHdlbGwuIEl0IGRvZXMgYXQgbGVhc3QgYXZvaWQgZXhwb3J0aW5nIHNvbWUgY3VycmVudGx5XG4rICogc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGFyZW4ndCBuZWVkZWQgYW55d2hlcmUgYnV0IGl0cmVlX2NvbW1vbi5jIGFuZCBpb21hcC5jLlxuKyAqL1xuKyNpbmNsdWRlIFwiaW9tYXAuY1wiXG4gXG4gaW50IFYxX21pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgbG9uZyBibG9jayxcbiBcdFx0XHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSlcbkBAIC02MSw3ICs3MywxOCBAQCB2b2lkIFYxX21pbml4X3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuIFx0dHJ1bmNhdGUoaW5vZGUpO1xuIH1cbiBcbi11bnNpZ25lZCBWMV9taW5peF9ibG9ja3MobG9mZl90IHNpemUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4rdW5zaWduZWQgaW50IFYxX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiB7XG4gXHRyZXR1cm4gbmJsb2NrcyhzaXplLCBzYik7XG4gfVxuK1xuK2ludCBWMV9taW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxuK1x0dW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBzdHJ1Y3QgaW9tYXAgKnNyY21hcClcbit7XG4rXHRyZXR1cm4gbWluaXhfaW9tYXBfYmVnaW4oaW5vZGUsIG9mZnNldCwgbGVuZ3RoLCBmbGFncywgaW9tYXAsIHNyY21hcCk7XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCBpb21hcF9vcHMgVjFfbWluaXhfaW9tYXBfb3BzID0ge1xuK1x0LmlvbWFwX2JlZ2luID0gVjFfbWluaXhfaW9tYXBfYmVnaW4sXG4rXHQuaW9tYXBfZW5kICAgPSBtaW5peF9pb21hcF9lbmQsXG4rfTtcbmRpZmYgLS1naXQgYS9mcy9taW5peC9pdHJlZV92Mi5jIGIvZnMvbWluaXgvaXRyZWVfdjIuY1xuaW5kZXggOWQwMGYzMWEyZDlkMS4uZmM3YTVhZThmYTFjYSAxMDA2NDRcbi0tLSBhL2ZzL21pbml4L2l0cmVlX3YyLmNcbisrKyBiL2ZzL21pbml4L2l0cmVlX3YyLmNcbkBAIC01Nyw2ICs1NywxMCBAQCBzdGF0aWMgaW50IGJsb2NrX3RvX3BhdGgoc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssIGludCBvZmZzZXRzW0RFUFRIXSlcbiB9XG4gXG4gI2luY2x1ZGUgXCJpdHJlZV9jb21tb24uY1wiXG4rLyogU2VlIHRoZSBub3RlIGluIGl0cmVlX3YxIGluIGEgY29tbWVudCB0aGF0IHN0YXJ0cyBcIk5PVEEgQkVORVwiIGZvciBhblxuKyAqIGV4cGxhbmF0aW9uIGZvciB3aHkgaW9tYXAuYyBpcyBpbmNsdWRlZCBoZXJlLlxuKyAqL1xuKyNpbmNsdWRlIFwiaW9tYXAuY1wiXG4gXG4gaW50IFYyX21pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgbG9uZyBibG9jayxcbiBcdFx0XHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSlcbkBAIC02OSw3ICs3MywxOCBAQCB2b2lkIFYyX21pbml4X3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuIFx0dHJ1bmNhdGUoaW5vZGUpO1xuIH1cbiBcbi11bnNpZ25lZCBWMl9taW5peF9ibG9ja3MobG9mZl90IHNpemUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4rdW5zaWduZWQgaW50IFYyX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiB7XG4gXHRyZXR1cm4gbmJsb2NrcyhzaXplLCBzYik7XG4gfVxuK1xuK2ludCBWMl9taW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxuK1x0dW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBzdHJ1Y3QgaW9tYXAgKnNyY21hcClcbit7XG4rXHRyZXR1cm4gbWluaXhfaW9tYXBfYmVnaW4oaW5vZGUsIG9mZnNldCwgbGVuZ3RoLCBmbGFncywgaW9tYXAsIHNyY21hcCk7XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCBpb21hcF9vcHMgVjJfbWluaXhfaW9tYXBfb3BzID0ge1xuK1x0LmlvbWFwX2JlZ2luID0gVjJfbWluaXhfaW9tYXBfYmVnaW4sXG4rXHQuaW9tYXBfZW5kICAgPSBtaW5peF9pb21hcF9lbmQsXG4rfTtcbmRpZmYgLS1naXQgYS9mcy9taW5peC9taW5peC5oIGIvZnMvbWluaXgvbWluaXguaFxuaW5kZXggNzg3MjJjZTIyZTFlMS4uOTAzNTYwNGM2OGNhMSAxMDA2NDRcbi0tLSBhL2ZzL21pbml4L21pbml4LmhcbisrKyBiL2ZzL21pbml4L21pbml4LmhcbkBAIC01LDYgKzUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlbWFwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9taW5peF9mcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW9tYXAuaFx1MDAzZVxuIFxuICNkZWZpbmUgSU5PREVfVkVSU0lPTihpbm9kZSlcdG1pbml4X3NiKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfdmVyc2lvblxuICNkZWZpbmUgTUlOSVhfVjFcdFx0MHgwMDAxXHRcdC8qIG9yaWdpbmFsIG1pbml4IGZzICovXG5AQCAtNTcsNiArNTgsOCBAQCB2b2lkIG1pbml4X2ZyZWVfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgbG9uZyBibG9jayk7XG4gdW5zaWduZWQgbG9uZyBtaW5peF9jb3VudF9mcmVlX2Jsb2NrcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbiBpbnQgbWluaXhfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICosIGNvbnN0IHN0cnVjdCBwYXRoICosXG4gXHRcdHN0cnVjdCBrc3RhdCAqLCB1MzIsIHVuc2lnbmVkIGludCk7XG4raW50IG1pbml4X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbitcdHN0cnVjdCBpYXR0ciAqYXR0cik7XG4gaW50IG1pbml4X3ByZXBhcmVfY2h1bmsoc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuKTtcbiBzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1pbml4X2dldF9tZXRhZGF0YV9iaHMoc3RydWN0IGlub2RlICppbm9kZSk7XG4gXG5AQCAtNzYsMTMgKzc5LDIzIEBAIGludCBtaW5peF9tYWtlX2VtcHR5KHN0cnVjdCBpbm9kZSosIHN0cnVjdCBpbm9kZSopO1xuIGludCBtaW5peF9lbXB0eV9kaXIoc3RydWN0IGlub2RlKik7XG4gaW50IG1pbml4X3NldF9saW5rKHN0cnVjdCBtaW5peF9kaXJfZW50cnkgKmRlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbitcbiBzdHJ1Y3QgbWluaXhfZGlyX2VudHJ5ICptaW5peF9kb3Rkb3Qoc3RydWN0IGlub2RlKiwgc3RydWN0IGZvbGlvICoqKTtcbiBpbm9fdCBtaW5peF9pbm9kZV9ieV9uYW1lKHN0cnVjdCBkZW50cnkqKTtcbiBcbitpbnQgVjFfbWluaXhfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCxcbitcdGxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCxcbitcdHN0cnVjdCBpb21hcCAqc3JjbWFwKTtcbitpbnQgVjJfbWluaXhfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCxcbitcdGxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCxcbitcdHN0cnVjdCBpb21hcCAqc3JjbWFwKTtcbitcbiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWluaXhfZmlsZV9pbm9kZV9vcGVyYXRpb25zO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBtaW5peF9kaXJfaW5vZGVfb3BlcmF0aW9ucztcbiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9maWxlX29wZXJhdGlvbnM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWluaXhfZGlyX29wZXJhdGlvbnM7XG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgVjFfbWluaXhfaW9tYXBfb3BzO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYyX21pbml4X2lvbWFwX29wcztcbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBtaW5peF9zYl9pbmZvICptaW5peF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIHtcbkBAIC05NCwxMSArMTA3LDE3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1pbml4X2lub2RlX2luZm8gKm1pbml4X2koc3RydWN0IGlub2RlICppbm9kZSlcbiBcdHJldHVybiBjb250YWluZXJfb2YoaW5vZGUsIHN0cnVjdCBtaW5peF9pbm9kZV9pbmZvLCB2ZnNfaW5vZGUpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIG1pbml4X2Jsb2Nrc19uZWVkZWQodW5zaWduZWQgYml0cywgdW5zaWduZWQgYmxvY2tzaXplKVxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1pbml4X2Jsb2Nrc19uZWVkZWQodW5zaWduZWQgaW50IGJpdHMsIHVuc2lnbmVkIGludCBibG9ja3NpemUpXG4ge1xuIFx0cmV0dXJuIERJVl9ST1VORF9VUF9QT1cyKGJpdHMsIGJsb2Nrc2l6ZSAqIDgpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm1pbml4X2lvbWFwX29wc192ZXIoc3RydWN0IGlub2RlICppbm9kZSlcbit7XG4rXHRyZXR1cm4gKElOT0RFX1ZFUlNJT04oaW5vZGUpID09IE1JTklYX1YxKSA/XG4rXHRcdFx1MDAyNlYxX21pbml4X2lvbWFwX29wcyA6IFx1MDAyNlYyX21pbml4X2lvbWFwX29wcztcbit9XG4rXG4gI2lmIGRlZmluZWQoQ09ORklHX01JTklYX0ZTX05BVElWRV9FTkRJQU4pIFx1MDAyNlx1MDAyNiBcXFxuIFx0ZGVmaW5lZChDT05GSUdfTUlOSVhfRlNfQklHX0VORElBTl8xNkJJVF9JTkRFWEVEKVxuIFxuQEAgLTEyOCw3ICsxNDcsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIG1pbml4X2Jsb2Nrc19uZWVkZWQodW5zaWduZWQgYml0cywgdW5zaWduZWQgYmxvY2tzaXplKVxuICAqIGJpZy1lbmRpYW4gMTZiaXQgaW5kZXhlZCBiaXRtYXBzXG4gICovXG4gXG4tc3RhdGljIGlubGluZSBpbnQgbWluaXhfZmluZF9maXJzdF96ZXJvX2JpdChjb25zdCB2b2lkICp2YWRkciwgdW5zaWduZWQgc2l6ZSlcbitzdGF0aWMgaW5saW5lIGludCBtaW5peF9maW5kX2ZpcnN0X3plcm9fYml0KGNvbnN0IHZvaWQgKnZhZGRyLCB1bnNpZ25lZCBpbnQgc2l6ZSlcbiB7XG4gXHRjb25zdCB1bnNpZ25lZCBzaG9ydCAqcCA9IHZhZGRyLCAqYWRkciA9IHZhZGRyO1xuIFx0dW5zaWduZWQgc2hvcnQgbnVtO1xuZGlmZiAtLWdpdCBhL2ZzL21pbml4L25hbWVpLmMgYi9mcy9taW5peC9uYW1laS5jXG5pbmRleCA1NTI1YmEzNjdlZDc0Li41MmUxMTUwMTNhYmY4IDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvbmFtZWkuY1xuKysrIGIvZnMvbWluaXgvbmFtZWkuY1xuQEAgLTYsNiArNiw3IEBAXG4gICovXG4gXG4gI2luY2x1ZGUgXCJtaW5peC5oXCJcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pb21hcC5oXHUwMDNlXG4gXG4gc3RhdGljIGludCBhZGRfbm9uZGlyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG5AQCAtODQsMTIgKzg1LDE2IEBAIHN0YXRpYyBpbnQgbWluaXhfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdHJldHVybiBQVFJfRVJSKGlub2RlKTtcbiBcbiBcdG1pbml4X3NldF9pbm9kZShpbm9kZSwgMCk7XG4tXHRlcnIgPSBwYWdlX3N5bWxpbmsoaW5vZGUsIHN5bW5hbWUsIGkpO1xuK1x0ZXJyID0gaW9tYXBfc3ltbGlua193cml0ZShpbm9kZSwgc3ltbmFtZSwgaSwgbWluaXhfaW9tYXBfb3BzX3Zlcihpbm9kZSksIE5VTEwsIE5VTEwpO1xuK1xuIFx0aWYgKHVubGlrZWx5KGVycikpIHtcbiBcdFx0aW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpO1xuIFx0XHRpcHV0KGlub2RlKTtcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbitcbitcdGlfc2l6ZV93cml0ZShpbm9kZSwgaSAtIDEpO1xuK1xuIFx0cmV0dXJuIGFkZF9ub25kaXIoZGVudHJ5LCBpbm9kZSk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW9tYXAuaCBiL2luY2x1ZGUvbGludXgvaW9tYXAuaFxuaW5kZXggOGM3NTRlYjk3NGZiZi4uYWIyN2EzYTViOGQyYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaW9tYXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9pb21hcC5oXG5AQCAtNDcxLDYgKzQ3MSw5IEBAIGxvZmZfdCBpb21hcF9zZWVrX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCxcbiBcdFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzKTtcbiBzZWN0b3JfdCBpb21hcF9ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibm8sXG4gXHRcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyk7XG4raW50IGlvbWFwX3N5bWxpbmtfd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqdGFyZ2V0LCBpbnQgbGVuLFxuK1x0XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsXG4rXHRcdGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZV9vcHMgKndyaXRlX29wcywgdm9pZCAqcHJpdmF0ZSk7XG4gXG4gLypcbiAgKiBGbGFncyBmb3IgaW9tYXBfaW9lbmQtXHUwMDNlaW9fZmxhZ3MuXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMDoyMC4xMDc2MTQyNDZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTM3NTE3OTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1pbml4IElPTUFQIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIHByZXR0eSBzdWJzdGFudGlhbCBjaGFuZ2UgdG8gdGhlIE1pbml4IGZpbGVzeXN0ZW0uIEl0J3MgbW92aW5nIE1pbml4IHRvIHVzZSBpb21hcCBmb3IgYnVmZmVyZWQgSS9PLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IGFyY2hpdGVjdHVyYWwgc2hpZnQuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB0aGUga2V5IG5ldyBjb21wb25lbnQgaXMgYGlvbWFwX3N5bWxpbmtfd3JpdGVgIGluIGBmcy9pb21hcC9idWZmZXJlZC1pby5jYCwgYW5kIHRoZSBpbnRlZ3JhdGlvbiBpcyBkb25lIGluIGBmcy9taW5peC9uYW1laS5jYC4gIFNpbmNlIE1pbml4IGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdlJ2QgZW5jb3VudGVyIGluIGNlcnRhaW4gdmlydHVhbGl6YXRpb24gc2V0dXBzLCB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suICpXb3J0aEZ1enppbmc9dHJ1ZSogaXMgYSBnby5cblxuTm93LCBsZXQncyBicmVhayBkb3duIHRoZSBmdW5jdGlvbnMgdGhhdCBuZWVkIGNhcmVmdWwgYXR0ZW50aW9uLiBJJ2xsIG5lZWQgdG8gZm9jdXMgb24gdGhlc2UgYXJlYXM6XG5cbiogICAqKmBpb21hcF9zeW1saW5rX3dyaXRlYCoqOiBUaGUgbmV3IGtpZCBvbiB0aGUgYmxvY2sgZm9yIHN5bWxpbmsgd3JpdGVzLCBzbyB0aGF0IGlzIGEgZ29vZCBmaXJzdCBzdG9wLlxuKiAgICoqYG1pbml4X2ZpbGVfd3JpdGVfaXRlcmAsIGBtaW5peF93cml0ZWJhY2tfcmFuZ2VgLCBgbWluaXhfd3JpdGVwYWdlc2AsIGBtaW5peF9yZWFkX2ZvbGlvYCwgYG1pbml4X3JlYWRhaGVhZGAqKjogVGhlc2UgZnVuY3Rpb25zIGluIGBmcy9taW5peC9maWxlLmNgIGFuZCBgZnMvbWluaXgvaW5vZGUuY2AgcmVwcmVzZW50IHRoZSBjb3JlIGZpbGUgb3BlcmF0aW9ucyBhbmQgd3JpdGViYWNrIG1lY2hhbmlzbXMgd2l0aGluIHRoZSBNaW5peCBmaWxlc3lzdGVtIGl0c2VsZiwgYW5kIHdpbGwgaGF2ZSB0byBiZSB0ZXN0ZWQgdGhvcm91Z2hseSB3aXRoIHRoZSBpb21hcCB0cmFuc2l0aW9uLlxuKiAgICoqYG1pbml4X2lvbWFwX2JlZ2luYCwgYFYxX21pbml4X2lvbWFwX2JlZ2luYCwgYFYyX21pbml4X2lvbWFwX2JlZ2luYCoqOiBUaGVzZSBpb21hcC1zcGVjaWZpYyBmdW5jdGlvbnMgYXJlIHdoZXJlIHRoZSBNaW5peCBmaWxlc3lzdGVtIG5vdyBpbnRlcmZhY2VzIHdpdGggaW9tYXAsIHNvIHRoZXkgYXJlIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgaW50ZWdyYXRpb24gd29ya3MuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoYXQgYENPTkZJR19NSU5JWF9GU2AgaXMgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb24sIHdoaWNoIGxvb2tzIGdvb2QuICBUaGlzIHByb3ZpZGVzIHRoZSBmb3VuZGF0aW9uLCBhbmQgbm93IEkgY2FuIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGVzZSBmdW5jdGlvbnMgYW5kIHRoZSBuZXcgaW9tYXAgaW50ZWdyYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cyBhbmQgYW55IHBvdGVudGlhbCBwaXRmYWxscy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM4MSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjEwOjI3LjA0NTEzNDg4OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODE2MTAxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUlOSVhfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbWluaXgvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9taW5peC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvbWluaXgvS2NvbmZpZzoyOmNvbmZpZyBNSU5JWF9GU1xcbmZzL21pbml4L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTWluaXggZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL21pbml4L0tjb25maWctMjAtXFxuZnMvbWluaXgvS2NvbmZpZzoyMTpjb25maWcgTUlOSVhfRlNfTkFUSVZFX0VORElBTlxcbmZzL21pbml4L0tjb25maWctMjItXFx0ZGVmX2Jvb2wgTUlOSVhfRlNcXG4tLVxcbmZzL21pbml4L0tjb25maWctMjQtXFxuZnMvbWluaXgvS2NvbmZpZzoyNTpjb25maWcgTUlOSVhfRlNfQklHX0VORElBTl8xNkJJVF9JTkRFWEVEXFxuZnMvbWluaXgvS2NvbmZpZy0yNi1cXHRkZWZfYm9vbCBNSU5JWF9GU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMDoyNy4wOTMzMDEwMzZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTU5NTg2NzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQ2hlY2tsaXN0KipcblxuT2theSwgc28gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBJJ20gbG9va2luZyBhdCBoYXMgYE1JTklYX0ZTYCBlbmFibGVkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJSaWdodCwgd2hhdCBlbHNlIGRvIEkgbmVlZCB0byBjb25zaWRlciB3aXRoIHRoaXM/XCIgR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIGFscmVhZHkga25vdyB0aGF0IGBNSU5JWF9GU2AgbGlrZWx5IGRlcGVuZHMgb24gb3RoZXIgZnVuZGFtZW50YWwgY29tcG9uZW50cy4gTGV0J3Mgc2VlLi4uIGEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IGBNSU5JWF9GU2Agc3BlY2lmaWNhbGx5IHJlcXVpcmVzIGBCTE9DS2AuIFRoaXMgbWVhbnMgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBgQkxPQ0tgIGNvbmZpZ3VyYXRpb24gaXMgYWxzbyBjb3JyZWN0bHkgc2V0LCBvciB0aGF0IEkgaGF2ZSBhIHBsYW4gdG8gaW1wbGVtZW50IGl0LiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgbXkgY29uZmlndXJhdGlvbiBzdGVwcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0MjAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMDozMC42NTI4OTIzNjNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcwMjI4MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9taW5peC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL21pbml4L0tjb25maWc9Mj1jb25maWcgTUlOSVhfRlNcXG5mcy9taW5peC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk1pbml4IGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuZnMvbWluaXgvS2NvbmZpZzo0OlxcdGRlcGVuZHMgb24gQkxPQ0tcXG5mcy9taW5peC9LY29uZmlnLTUtXFx0c2VsZWN0IEJVRkZFUl9IRUFEXFxuLS1cXG5mcy9taW5peC9LY29uZmlnPTIxPWNvbmZpZyBNSU5JWF9GU19OQVRJVkVfRU5ESUFOXFxuZnMvbWluaXgvS2NvbmZpZy0yMi1cXHRkZWZfYm9vbCBNSU5JWF9GU1xcbmZzL21pbml4L0tjb25maWc6MjM6XFx0ZGVwZW5kcyBvbiBNSUNST0JMQVpFIHx8IE1JUFMgfHwgUzM5MCB8fCBTVVBFUkggfHwgU1BBUkMgfHwgWFRFTlNBIHx8IChNNjhLIFxcdTAwMjZcXHUwMDI2ICFNTVUpXFxuZnMvbWluaXgvS2NvbmZpZy0yNC1cXG5mcy9taW5peC9LY29uZmlnPTI1PWNvbmZpZyBNSU5JWF9GU19CSUdfRU5ESUFOXzE2QklUX0lOREVYRURcXG5mcy9taW5peC9LY29uZmlnLTI2LVxcdGRlZl9ib29sIE1JTklYX0ZTXFxuZnMvbWluaXgvS2NvbmZpZzoyNzpcXHRkZXBlbmRzIG9uIE02OEsgXFx1MDAyNlxcdTAwMjYgTU1VXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjEwOjMwLjcxOTkyMDgxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU0MjE5NTcyMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNaW5peCBGaWxlc3lzdGVtIEkvTyBBUEkgRW50cnlwb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgTUlOSVggZmlsZXN5c3RlbSwgYW5kIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBgTUlOSVhfRlNgIGlzIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggaW50cm9kdWNlcywgc3BlY2lmaWNhbGx5IHRob3NlIGFjdGluZyBhcyBBUEkgZW50cnlwb2ludHMsIGlkZWFsbHkgbm9uLXN0YXRpYyBvbmVzIHRvIG1ha2Ugc3VyZSBzeXprYWxsZXIgY2FuIGZpbmQgdGhlbSwgYWx0aG91Z2ggdGhlIHByb21wdCBzYXlzIGZ1bmN0aW9ucyBhc3NpZ25lZCB0byBmdW5jdGlvbiBwb2ludGVycyBtYXkgbm90IGJlIGlubGluZWQuXG5cbkxldCdzIHdhbGsgdGhyb3VnaCB0aGUgY2FuZGlkYXRlIGZ1bmN0aW9ucy4gSSBoYXZlOlxuXG4qICAgYGlvbWFwX3N5bWxpbmtfd3JpdGVgXG4qICAgYG1pbml4X2ZpbGVfd3JpdGVfaXRlcmBcbiogICBgbWluaXhfd3JpdGViYWNrX3JhbmdlYFxuKiAgIGBtaW5peF93cml0ZXBhZ2VzYFxuKiAgIGBtaW5peF9yZWFkX2ZvbGlvYFxuKiAgIGBtaW5peF9yZWFkYWhlYWRgXG4qICAgYG1pbml4X2lvbWFwX2JlZ2luYFxuKiAgIGBWMV9taW5peF9pb21hcF9iZWdpbmBcbiogICBgVjJfbWluaXhfaW9tYXBfYmVnaW5gXG5cbk5vdywgaW5pdGlhbGx5LCBJJ20gbm90aW5nIHRoYXQgYSBudW1iZXIgb2YgdGhvc2UgZnVuY3Rpb25zIGFyZSBzdGF0aWMsIHdoaWNoIHJhaXNlcyBhIGZsYWcgYmVjYXVzZSBzdGF0aWMgZnVuY3Rpb25zIGNhbiBiZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gSG93ZXZlciwgSSBrbm93IHRoZSBwcm9tcHQgYWxzbyBtZW50aW9ucyBmdW5jdGlvbiBwb2ludGVycywgc28gaXQncyBhIGJpdCBtb3JlIG51YW5jZWQuXG5cbkkgc2VlIHRoYXQgYG1pbml4X3dyaXRlYmFja19yYW5nZWAsIGBtaW5peF93cml0ZXBhZ2VzYCwgYG1pbml4X3JlYWRfZm9saW9gLCBgbWluaXhfcmVhZGFoZWFkYCwgYW5kIGBtaW5peF9pb21hcF9iZWdpbmAsIGFyZSBhbGwgc3RhdGljLiBUaGUgc3RhdGljIG5hdHVyZSBpbXBsaWVzIGludGVybmFsIHVzZSwgYnV0IEkga25vdyB0aGF0IGBtaW5peF93cml0ZXBhZ2VzYCwgYG1pbml4X3JlYWRfZm9saW9gLCBhbmQgYG1pbml4X3JlYWRhaGVhZGAsIGFyZSBhc3NpZ25lZCB0byB0aGUgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zIHN0cnVjdCAoYG1pbml4X2FvcHNgKSwgYW5kIGBtaW5peF9maWxlX3dyaXRlX2l0ZXJgIGlzIGFzc2lnbmVkIHRvIGBtaW5peF9maWxlX29wZXJhdGlvbnMud3JpdGVfaXRlcmAsIHNvIHRoZXkgd29uJ3QgYmUgaW5saW5lZC5cblxuYG1pbml4X2lvbWFwX2JlZ2luYCBpcyB1c2VkIGJ5IHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBgVjFfbWluaXhfaW9tYXBfYmVnaW5gIGFuZCBgVjJfbWluaXhfaW9tYXBfYmVnaW5gLiBTaW5jZSB0aG9zZSBhcmVuJ3Qgc3RhdGljLCB0aGV5IGFyZSBlbnRyeXBvaW50cy5cblxuU28sIEkgd2lsbCBhZGQgdGhlc2UgYXMgZW50cnlwb2ludHM6IGBpb21hcF9zeW1saW5rX3dyaXRlYCwgYFYxX21pbml4X2lvbWFwX2JlZ2luYCwgYW5kIGBWMl9taW5peF9pb21hcF9iZWdpbmAsIGFzIHdlbGwgYXMgYG1pbml4X2ZpbGVfd3JpdGVfaXRlcmAsIGBtaW5peF93cml0ZXBhZ2VzYCwgYG1pbml4X3JlYWRfZm9saW9gLCBgbWluaXhfcmVhZGFoZWFkYCwgYW5kIGBtaW5peF93cml0ZWJhY2tfcmFuZ2VgLiBJIGtub3cgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzIGluIGEgc3RydWN0LCBzbyBpdCBpcyB1bmxpa2VseSB0aGF0IHRoZXkgYXJlIGlubGluZWQuXG5cblRoZSBjb2RlIHJldmlldyBpbmRpY2F0ZXMgdGhhdCBhbGwgZnVuY3Rpb25zIGFyZSBuZXcuIGBpb21hcF9zeW1saW5rX3dyaXRlYCBpcyBpbiBgZnMvaW9tYXAvYnVmZmVyZWQtaW8uY2AsIGBtaW5peF9maWxlX3dyaXRlX2l0ZXJgIGlzIGluIGBmcy9taW5peC9maWxlLmNgLCBgbWluaXhfd3JpdGViYWNrX3JhbmdlYCwgYG1pbml4X3dyaXRlcGFnZXNgLCBgbWluaXhfcmVhZF9mb2xpb2AsIGFuZCBgbWluaXhfcmVhZGFoZWFkYCwgYXJlIGluIGBmcy9taW5peC9pbm9kZS5jYCwgYW5kIGBtaW5peF9pb21hcF9iZWdpbmAgaXMgaW4gYGZzL21pbml4L2lvbWFwLmNgLCBgVjFfbWluaXhfaW9tYXBfYmVnaW5gIGlzIGluIGBmcy9taW5peC9pdHJlZV92MS5jYCwgYW5kIGBWMl9taW5peF9pb21hcF9iZWdpbmAgaXMgaW4gYGZzL21pbml4L2l0cmVlX3YyLmNgLlxuXG5UaGUga2V5IGNoYW5nZSBpcyB0aGUgbWlncmF0aW9uIHRvIGlvbWFwIGZvciBidWZmZXJlZCBJL08gYW5kIHN5bWxpbmtzLCB3aGljaCBpbnZvbHZlcyBtb2RpZmljYXRpb25zIGluIGZpbGUgb3BlcmF0aW9ucywgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zLCBhbmQgYmxvY2sgbWFwcGluZy4gVGhpcyBpcyBhbGwgdmVyeSByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBieSBzaW1wbHkgbW91bnRpbmcgYSBtaW5peCBmaWxlc3lzdGVtIGltYWdlLlxuXG5IZXJlJ3MgbXkgZmluYWwgbGlzdCBmb3IgY29uc2lkZXJhdGlvbjpcblxuKiAgIGBpb21hcF9zeW1saW5rX3dyaXRlYFxuKiAgIGBWMV9taW5peF9pb21hcF9iZWdpbmBcbiogICBgVjJfbWluaXhfaW9tYXBfYmVnaW5gXG4qICAgYG1pbml4X2ZpbGVfd3JpdGVfaXRlcmBcbiogICBgbWluaXhfd3JpdGVwYWdlc2BcbiogICBgbWluaXhfcmVhZF9mb2xpb2BcbiogICBgbWluaXhfcmVhZGFoZWFkYFxuKiAgIGBtaW5peF93cml0ZWJhY2tfcmFuZ2VgXG5cbkFuZCB0aGUgcmVxdWlyZWQgY29uZmlnOiBgTUlOSVhfRlNgXG5cbk5vdyBJIGFtIHJlYWR5IHRvIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDg2NSwiT3V0cHV0VG9rZW5zIjoxODAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjEwOjQ2LjE0MTg4MDc5N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTAzMjk0MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1JTklYX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9tYXBfc3ltbGlua193cml0ZVwiLFxuICAgIFwiVjFfbWluaXhfaW9tYXBfYmVnaW5cIixcbiAgICBcIlYyX21pbml4X2lvbWFwX2JlZ2luXCIsXG4gICAgXCJtaW5peF9maWxlX3dyaXRlX2l0ZXJcIixcbiAgICBcIm1pbml4X3dyaXRlcGFnZXNcIixcbiAgICBcIm1pbml4X3JlYWRfZm9saW9cIixcbiAgICBcIm1pbml4X3JlYWRhaGVhZFwiLFxuICAgIFwibWluaXhfd3JpdGViYWNrX3JhbmdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWlncmF0ZXMgdGhlIG1pbml4IGZpbGVzeXN0ZW0gdG8gdXNlIGlvbWFwIGZvciBidWZmZXJlZCBJL08gYW5kIHN5bWxpbmtzLiBUaGlzIGludm9sdmVzIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIG1pbml4IGZpbGUgb3BlcmF0aW9ucywgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zLCBhbmQgYmxvY2sgbWFwcGluZyBsb2dpYy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBtb3VudGluZyBhIG1pbml4IGZpbGVzeXN0ZW0gaW1hZ2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUlOSVhfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb21hcF9zeW1saW5rX3dyaXRlXCIsXG4gICAgXCJWMV9taW5peF9pb21hcF9iZWdpblwiLFxuICAgIFwiVjJfbWluaXhfaW9tYXBfYmVnaW5cIixcbiAgICBcIm1pbml4X2ZpbGVfd3JpdGVfaXRlclwiLFxuICAgIFwibWluaXhfd3JpdGVwYWdlc1wiLFxuICAgIFwibWluaXhfcmVhZF9mb2xpb1wiLFxuICAgIFwibWluaXhfcmVhZGFoZWFkXCIsXG4gICAgXCJtaW5peF93cml0ZWJhY2tfcmFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtaWdyYXRlcyB0aGUgbWluaXggZmlsZXN5c3RlbSB0byB1c2UgaW9tYXAgZm9yIGJ1ZmZlcmVkIEkvTyBhbmQgc3ltbGlua3MuIFRoaXMgaW52b2x2ZXMgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWluaXggZmlsZSBvcGVyYXRpb25zLCBhZGRyZXNzIHNwYWNlIG9wZXJhdGlvbnMsIGFuZCBibG9jayBtYXBwaW5nIGxvZ2ljLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IG1vdW50aW5nIGEgbWluaXggZmlsZXN5c3RlbSBpbWFnZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTA6NDYuMjMyMjE3NzEzWiIsIlNlcSI6OSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwNTIxNTc0OTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTA6NDYuMjMyOTEzNzAzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjkwNTIwODc1NzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb252ZXJ0cyB0aGUgbWluaXggZmlsZXN5c3RlbSB0byB1c2UgaW9tYXAgZm9yIGJ1ZmZlcmVkIEkvTywgcmVwbGFjaW5nIHRoZSBvbGRlciBidWZmZXJfaGVhZCBiYXNlZCBibG9jayBJL08gZnVuY3Rpb25zLiBJdCBpbnRyb2R1Y2VzIGBpb21hcF9zeW1saW5rX3dyaXRlYCB3aGljaCB3cml0ZXMgc3ltbGluayB0YXJnZXRzIHRvIGRpc2suIFRoZSBzeW1saW5rIHRhcmdldCBpcyBhIGZ1bGx5IGluaXRpYWxpemVkIG51bGwtdGVybWluYXRlZCBzdHJpbmcgcHJvdmlkZWQgYnkgdGhlIFZGUy4gVGhlIHVud3JpdHRlbiBwYXJ0cyBvZiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJsb2NrIGFyZSB6ZXJvZWQgYnkgYGlvbWFwX3dyaXRlX2JlZ2luYCAoc2luY2UgYElPTUFQX0ZfTkVXYCBpcyBzZXQgZm9yIG5ldyBibG9ja3MpLiBXaGVuIHJlYWRpbmcgdGhlIHN5bWxpbmssIGBwYWdlX2dldF9saW5rYCBhZGRzIHRoZSBudWxsIHRlcm1pbmF0b3IgaW4gbWVtb3J5LiBUaGUgcmVzdCBvZiB0aGUgcGF0Y2ggcmVwbGFjZXMgc3RhbmRhcmQgcmVhZC93cml0ZS93cml0ZWJhY2sgZnVuY3Rpb25zIHdpdGggdGhlaXIgaW9tYXAgZXF1aXZhbGVudHMsIHdoaWNoIGhhbmRsZSB1c2VyIHNwYWNlIGRhdGEgYW5kIHBhZ2UgY2FjaGUgY29ycmVjdGx5LiBUaGVyZSBhcmUgbm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBpbmZvLWxlYWtzLCBvciB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdy4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY5NGM1YTNmZmNlZDczNWY1ODQyZjY3NDYzZGJhZjEyNTE5MTVmZWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAyMjoxMDoxOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMgYi9mcy9pb21hcC9idWZmZXJlZC1pby5jXG5pbmRleCAwYTVlYmZkYTkwZjEyLi41ZThhYzNmYWQ2NzE0IDEwMDY0NFxuLS0tIGEvZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1xuKysrIGIvZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1xuQEAgLTIxMDAsMyArMjEwMCwzNyBAQCBpb21hcF93cml0ZXBhZ2VzKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMpXG4gXHRyZXR1cm4gZXJyb3I7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX3dyaXRlcGFnZXMpO1xuK1xuK2ludCBpb21hcF9zeW1saW5rX3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKnRhcmdldCwgaW50IGxlbixcbitcdFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLFxuK1x0XHRjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGVfb3BzICp3cml0ZV9vcHMsIHZvaWQgKnByaXZhdGUpXG4re1xuK1x0c3RydWN0IGt2ZWMgdmVjID0ge1xuK1x0XHQuaW92X2Jhc2VcdD0gKHZvaWQgKil0YXJnZXQsXG4rXHRcdC5pb3ZfbGVuXHQ9IGxlbiAtIDEsXG4rXHR9O1xuK1x0c3RydWN0IGlvbWFwX2l0ZXIgaXRlciA9IHtcbitcdFx0Lmlub2RlXHRcdD0gaW5vZGUsXG4rXHRcdC5wb3NcdFx0PSAwLFxuK1x0XHQubGVuXHRcdD0gbGVuIC0gMSxcbitcdFx0LmZsYWdzXHRcdD0gSU9NQVBfV1JJVEUsXG4rXHRcdC5wcml2YXRlXHQ9IHByaXZhdGUsXG4rXHR9O1xuK1x0c3RydWN0IGlvdl9pdGVyIGlvdjtcbitcdGludCByZXQ7XG4rXG4rXHRpb3ZfaXRlcl9rdmVjKFx1MDAyNmlvdiwgSVRFUl9TT1VSQ0UsIFx1MDAyNnZlYywgMSwgbGVuIC0gMSk7XG4rXG4rXHR3aGlsZSAoKHJldCA9IGlvbWFwX2l0ZXIoXHUwMDI2aXRlciwgb3BzKSkgXHUwMDNlIDApXG4rXHRcdGl0ZXIuc3RhdHVzID0gaW9tYXBfd3JpdGVfaXRlcihcdTAwMjZpdGVyLCBcdTAwMjZpb3YsIHdyaXRlX29wcyk7XG4rXG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKHVubGlrZWx5KGl0ZXIucG9zID09IDApKVxuK1x0XHRyZXR1cm4gLUVJTztcbitcbitcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX3N5bWxpbmtfd3JpdGUpO1xuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2ZpbGUuYyBiL2ZzL21pbml4L2ZpbGUuY1xuaW5kZXggMDJhYWJiZGI1ZGVhYS4uNjc2NWY1NzFiZDNmYyAxMDA2NDRcbi0tLSBhL2ZzL21pbml4L2ZpbGUuY1xuKysrIGIvZnMvbWluaXgvZmlsZS5jXG5AQCAtMTAsNiArMTAsMzIgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idWZmZXJfaGVhZC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJtaW5peC5oXCJcbiBcbitzdGF0aWMgc3NpemVfdCBtaW5peF9maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4re1xuK1x0c3RydWN0IGlub2RlICppbm9kZSA9IGlvY2ItXHUwMDNla2lfZmlscC1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbitcdHNzaXplX3QgcmV0O1xuK1x0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzID0gbWluaXhfaW9tYXBfb3BzX3Zlcihpbm9kZSk7XG4rXG4rXHRpbm9kZV9sb2NrKGlub2RlKTtcbitcdHJldCA9IGdlbmVyaWNfd3JpdGVfY2hlY2tzKGlvY2IsIGZyb20pO1xuK1x0aWYgKHJldCBcdTAwM2M9IDApXG4rXHRcdGdvdG8gdW5sb2NrO1xuK1xuK1x0cmV0ID0gZmlsZV9tb2RpZmllZChpb2NiLVx1MDAzZWtpX2ZpbHApO1xuK1x0aWYgKHJldClcbitcdFx0Z290byB1bmxvY2s7XG4rXG4rXHRyZXQgPSBpb21hcF9maWxlX2J1ZmZlcmVkX3dyaXRlKGlvY2IsIGZyb20sIG9wcyxcbitcdFx0XHROVUxMLCBOVUxMKTtcbitcbitcdGlmIChyZXQgXHUwMDNlIDApXG4rXHRcdHJldCA9IGdlbmVyaWNfd3JpdGVfc3luYyhpb2NiLCByZXQpO1xuK1xuK3VubG9jazpcbitcdGlub2RlX3VubG9jayhpbm9kZSk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiAvKlxuICAqIFdlIGhhdmUgbW9zdGx5IE5VTExzIGhlcmU6IHRoZSBjdXJyZW50IGRlZmF1bHRzIGFyZSBPSyBmb3JcbiAgKiB0aGUgbWluaXggZmlsZXN5c3RlbS5cbkBAIC0xNywxMyArNDMsMTMgQEBcbiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfb3BlcmF0aW9ucyA9IHtcbiBcdC5sbHNlZWtcdFx0PSBnZW5lcmljX2ZpbGVfbGxzZWVrLFxuIFx0LnJlYWRfaXRlclx0PSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyLFxuLVx0LndyaXRlX2l0ZXJcdD0gZ2VuZXJpY19maWxlX3dyaXRlX2l0ZXIsXG4rXHQud3JpdGVfaXRlclx0PSBtaW5peF9maWxlX3dyaXRlX2l0ZXIsXG4gXHQubW1hcF9wcmVwYXJlXHQ9IGdlbmVyaWNfZmlsZV9tbWFwX3ByZXBhcmUsXG4gXHQuZnN5bmNcdFx0PSBzaW1wbGVfZnN5bmMsXG4gXHQuc3BsaWNlX3JlYWRcdD0gZmlsZW1hcF9zcGxpY2VfcmVhZCxcbiB9O1xuIFxuLXN0YXRpYyBpbnQgbWluaXhfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitpbnQgbWluaXhfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUoZGVudHJ5KTtcbmRpZmYgLS1naXQgYS9mcy9taW5peC9pbm9kZS5jIGIvZnMvbWluaXgvaW5vZGUuY1xuaW5kZXggZGFmODNlNGZmMjVjOC4uMmJmNWVhOTIzNjBhMiAxMDA2NDRcbi0tLSBhL2ZzL21pbml4L2lub2RlLmNcbisrKyBiL2ZzL21pbml4L2lub2RlLmNcbkBAIC00MzksNiArNDM5LDMxIEBAIHN0YXRpYyBpbnQgbWluaXhfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZilcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgc3NpemVfdCBtaW5peF93cml0ZWJhY2tfcmFuZ2Uoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYyxcbitcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHU2NCBwb3MsIHVuc2lnbmVkIGludCBsZW4sIHU2NCBlbmRfcG9zKVxuK3tcbitcdGludCBlcnJvcjtcbitcbitcdGlmIChwb3MgXHUwMDNjIHdwYy1cdTAwM2Vpb21hcC5vZmZzZXQgfHxcbitcdFx0XHRwb3MgXHUwMDNlPSB3cGMtXHUwMDNlaW9tYXAub2Zmc2V0ICsgd3BjLVx1MDAzZWlvbWFwLmxlbmd0aCkge1xuK1x0XHRpZiAoSU5PREVfVkVSU0lPTih3cGMtXHUwMDNlaW5vZGUpID09IE1JTklYX1YxKVxuK1x0XHRcdGVycm9yID0gVjFfbWluaXhfaW9tYXBfYmVnaW4od3BjLVx1MDAzZWlub2RlLCBwb3MsIGxlbiwgSU9NQVBfV1JJVEUsXG4rXHRcdFx0XHRcdTAwMjZ3cGMtXHUwMDNlaW9tYXAsIE5VTEwpO1xuK1x0XHRlbHNlXG4rXHRcdFx0ZXJyb3IgPSBWMl9taW5peF9pb21hcF9iZWdpbih3cGMtXHUwMDNlaW5vZGUsIHBvcywgbGVuLCBJT01BUF9XUklURSxcbitcdFx0XHRcdFx1MDAyNndwYy1cdTAwM2Vpb21hcCwgTlVMTCk7XG4rXHRcdGlmIChlcnJvcilcbitcdFx0XHRyZXR1cm4gZXJyb3I7XG4rXHR9XG4rXG4rXHRyZXR1cm4gaW9tYXBfYWRkX3RvX2lvZW5kKHdwYywgZm9saW8sIHBvcywgZW5kX3BvcywgbGVuKTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZWJhY2tfb3BzIG1pbml4X3dyaXRlYmFja19vcHMgPSB7XG4rXHQud3JpdGViYWNrX3JhbmdlID0gbWluaXhfd3JpdGViYWNrX3JhbmdlLFxuK1x0LndyaXRlYmFja19zdWJtaXQgPSBpb21hcF9pb2VuZF93cml0ZWJhY2tfc3VibWl0LFxuK307XG4rXG4gc3RhdGljIGludCBtaW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssXG4gXHRcdCAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSlcbiB7XG5AQCAtNDQ4LDE3ICs0NzMsNDUgQEAgc3RhdGljIGludCBtaW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssXG4gXHRcdHJldHVybiBWMl9taW5peF9nZXRfYmxvY2soaW5vZGUsIGJsb2NrLCBiaF9yZXN1bHQsIGNyZWF0ZSk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbWluaXhfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbisvKiBUaGUgb2xkIG1pbml4X3dyaXRlcGFnZXMsIHByZXNlcnZlZCBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMuICovXG4rc3RhdGljIGludCBtaW5peF9ibG9ja193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiB7XG4gXHRyZXR1cm4gbXBhZ2Vfd3JpdGVwYWdlcyhtYXBwaW5nLCB3YmMsIG1pbml4X2dldF9ibG9jayk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgbWluaXhfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbitcdFx0c3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4re1xuK1x0c3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggd3BjID0ge1xuK1x0XHQuaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3QsXG4rXHRcdC53YmMgPSB3YmMsXG4rXHRcdC5vcHMgPSBcdTAwMjZtaW5peF93cml0ZWJhY2tfb3BzLFxuK1x0fTtcbitcdHJldHVybiBpb21hcF93cml0ZXBhZ2VzKFx1MDAyNndwYyk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgbWluaXhfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGZvbGlvLVx1MDAzZW1hcHBpbmctXHUwMDNlaG9zdCk7XG4rXG4rXHRpb21hcF9iaW9fcmVhZF9mb2xpbyhmb2xpbywgb3BzKTtcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBUaGUgb2xkIG1pbml4X3JlYWRfZm9saW8sIHByZXNlcnZlZCBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMuICovXG4rc3RhdGljIGludCBtaW5peF9ibG9ja19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBibG9ja19yZWFkX2Z1bGxfZm9saW8oZm9saW8sIG1pbml4X2dldF9ibG9jayk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIG1pbml4X3JlYWRhaGVhZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhYylcbit7XG4rXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKHJhYy1cdTAwM2VtYXBwaW5nLVx1MDAzZWhvc3QpO1xuK1xuK1x0aW9tYXBfYmlvX3JlYWRhaGVhZChyYWMsIG9wcyk7XG4rfVxuK1xuIGludCBtaW5peF9wcmVwYXJlX2NodW5rKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbilcbiB7XG4gXHRyZXR1cm4gX19ibG9ja193cml0ZV9iZWdpbihmb2xpbywgcG9zLCBsZW4sIG1pbml4X2dldF9ibG9jayk7XG5AQCAtNDg4LDI2ICs1NDEsMzUgQEAgc3RhdGljIGludCBtaW5peF93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgc2VjdG9yX3QgbWluaXhfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYmxvY2spXG4te1xuLVx0cmV0dXJuIGdlbmVyaWNfYmxvY2tfYm1hcChtYXBwaW5nLGJsb2NrLG1pbml4X2dldF9ibG9jayk7XG4tfVxuLVxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG1pbml4X2FvcHMgPSB7XG4tXHQuZGlydHlfZm9saW9cdD0gYmxvY2tfZGlydHlfZm9saW8sXG4tXHQuaW52YWxpZGF0ZV9mb2xpbyA9IGJsb2NrX2ludmFsaWRhdGVfZm9saW8sXG4rXHQuZGlydHlfZm9saW9cdD0gaW9tYXBfZGlydHlfZm9saW8sXG4rXHQuaW52YWxpZGF0ZV9mb2xpbyA9IGlvbWFwX2ludmFsaWRhdGVfZm9saW8sXG4gXHQucmVhZF9mb2xpbyA9IG1pbml4X3JlYWRfZm9saW8sXG4rXHQucmVhZGFoZWFkID0gbWluaXhfcmVhZGFoZWFkLFxuIFx0LndyaXRlcGFnZXMgPSBtaW5peF93cml0ZXBhZ2VzLFxuK1x0Lm1pZ3JhdGVfZm9saW8gPSBmaWxlbWFwX21pZ3JhdGVfZm9saW8sXG4rXHQuaXNfcGFydGlhbGx5X3VwdG9kYXRlID0gaW9tYXBfaXNfcGFydGlhbGx5X3VwdG9kYXRlLFxuK1x0LnJlbGVhc2VfZm9saW8gPSBpb21hcF9yZWxlYXNlX2ZvbGlvLFxuK1x0LmVycm9yX3JlbW92ZV9mb2xpbyA9IGdlbmVyaWNfZXJyb3JfcmVtb3ZlX2ZvbGlvLFxuK307XG4rXG4rLyogQSBzcGVjaWFsIGFvcHMgZm9yIGRpcmVjdG9yaWVzIHRoYXQga2VlcHMgdXNpbmcgdGhlIGJ1ZmZlciBoZWFkIGNodW5rcywgYXRcbisgKiBsZWFzdCBmb3IgdGhlIHRpbWUgYmVpbmcuXG4rICovXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbWluaXhfZGlyX2FvcHMgPSB7XG4rXHQuZGlydHlfZm9saW8gPSBibG9ja19kaXJ0eV9mb2xpbyxcbitcdC5pbnZhbGlkYXRlX2ZvbGlvID0gYmxvY2tfaW52YWxpZGF0ZV9mb2xpbyxcbitcdC5yZWFkX2ZvbGlvID0gbWluaXhfYmxvY2tfcmVhZF9mb2xpbyxcbiBcdC53cml0ZV9iZWdpbiA9IG1pbml4X3dyaXRlX2JlZ2luLFxuIFx0LndyaXRlX2VuZCA9IGdlbmVyaWNfd3JpdGVfZW5kLFxuIFx0Lm1pZ3JhdGVfZm9saW8gPSBidWZmZXJfbWlncmF0ZV9mb2xpbyxcbi1cdC5ibWFwID0gbWluaXhfYm1hcCxcbi1cdC5kaXJlY3RfSU8gPSBub29wX2RpcmVjdF9JT1xuK1x0LndyaXRlcGFnZXMgPSBtaW5peF9ibG9ja193cml0ZXBhZ2VzLFxuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbiBcdC5nZXRfbGlua1x0PSBwYWdlX2dldF9saW5rLFxuIFx0LmdldGF0dHJcdD0gbWluaXhfZ2V0YXR0cixcbitcdC5zZXRhdHRyXHQ9IG1pbml4X3NldGF0dHIsXG4gfTtcbiBcbiB2b2lkIG1pbml4X3NldF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBkZXZfdCByZGV2KVxuQEAgLTUxOSw3ICs1ODEsNyBAQCB2b2lkIG1pbml4X3NldF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBkZXZfdCByZGV2KVxuIFx0fSBlbHNlIGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbiBcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNm1pbml4X2Rpcl9pbm9kZV9vcGVyYXRpb25zO1xuIFx0XHRpbm9kZS1cdTAwM2VpX2ZvcCA9IFx1MDAyNm1pbml4X2Rpcl9vcGVyYXRpb25zO1xuLVx0XHRpbm9kZS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHMgPSBcdTAwMjZtaW5peF9hb3BzO1xuK1x0XHRpbm9kZS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHMgPSBcdTAwMjZtaW5peF9kaXJfYW9wcztcbiBcdH0gZWxzZSBpZiAoU19JU0xOSyhpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4gXHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZtaW5peF9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7XG4gXHRcdGlub2RlX25vaGlnaG1lbShpbm9kZSk7XG5AQCAtNzg2LDQgKzg0OCwzIEBAIG1vZHVsZV9pbml0KGluaXRfbWluaXhfZnMpXG4gbW9kdWxlX2V4aXQoZXhpdF9taW5peF9mcylcbiBNT0RVTEVfREVTQ1JJUFRJT04oXCJNaW5peCBmaWxlIHN5c3RlbVwiKTtcbiBNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbi1cbmRpZmYgLS1naXQgYS9mcy9taW5peC9pb21hcC5jIGIvZnMvbWluaXgvaW9tYXAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjkwZTAxNmFhYTAxZWFcbi0tLSAvZGV2L251bGxcbisrKyBiL2ZzL21pbml4L2lvbWFwLmNcbkBAIC0wLDAgKzEsMTIyIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKy8qXG4rICogaW9tYXAgZnVuY3Rpb25zIGZvciBtaW5peC5cbisgKi9cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgbWluaXhfY2hhaW5fY2xlYW51cChJbmRpcmVjdCAqY2hhaW4sIEluZGlyZWN0ICpwYXJ0aWFsKVxuK3tcbitcdHdoaWxlIChwYXJ0aWFsIFx1MDAzZSBjaGFpbikge1xuK1x0XHRicmVsc2UocGFydGlhbC1cdTAwM2ViaCk7XG4rXHRcdHBhcnRpYWwtLTtcbitcdH1cbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIG1pbml4X2lvbWFwX3NldF9tYXBwZWQoc3RydWN0IGlvbWFwICppb21hcCwgc2VjdG9yX3QgcGh5cyxcbitcdFx0dW5zaWduZWQgaW50IGJsa2JpdHMsIHNlY3Rvcl90IGlibG9jaylcbit7XG4rXHRpb21hcC1cdTAwM2V0eXBlID0gSU9NQVBfTUFQUEVEO1xuK1x0aW9tYXAtXHUwMDNlYWRkciA9ICh1NjQpcGh5cyBcdTAwM2NcdTAwM2MgYmxrYml0cztcbitcdGlvbWFwLVx1MDAzZWxlbmd0aCA9IDEgXHUwMDNjXHUwMDNjIGJsa2JpdHM7XG4rXHRpb21hcC1cdTAwM2VvZmZzZXQgPSAodTY0KWlibG9jayBcdTAwM2NcdTAwM2MgYmxrYml0cztcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIG1pbml4X2lvbWFwX3NldF9ob2xlKHN0cnVjdCBpb21hcCAqaW9tYXAsXG4rXHRcdHVuc2lnbmVkIGludCBibGtiaXRzLCBzZWN0b3JfdCBpYmxvY2spXG4re1xuK1x0aW9tYXAtXHUwMDNldHlwZSA9IElPTUFQX0hPTEU7XG4rXHRpb21hcC1cdTAwM2VhZGRyID0gSU9NQVBfTlVMTF9BRERSO1xuK1x0aW9tYXAtXHUwMDNlbGVuZ3RoID0gMSBcdTAwM2NcdTAwM2MgYmxrYml0cztcbitcdGlvbWFwLVx1MDAzZW9mZnNldCA9ICh1NjQpaWJsb2NrIFx1MDAzY1x1MDAzYyBibGtiaXRzO1xuK31cbitcbisvKlxuKyAqIG1pbml4X2lvbWFwX2JlZ2luIC0gbWFwIGEgZmlsZSByYW5nZSB0byBkaXNrIGJsb2Nrcy4gSXQgYWN0cyBhcyBhIHJlcGxhY2VtZW50XG4rICogZm9yIGdldF9ibG9jayBpbiBpdHJlZV9jb21tb24uYywgYXQgbGVhc3QgaW4gdGhlIGltcG9ydGFudCB3YXlzLCBhbmQgaXNcbisgKiBhZGFwdGVkIGZyb20gaXQsIGJ1dCBpdCB1c2VzIGlvbWFwIGluc3RlYWQgb2YgYnVmZmVyX2hlYWQuXG4rICovXG4rc3RhdGljIGludCBtaW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxuK1x0dW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBzdHJ1Y3QgaW9tYXAgKnNyY21hcClcbit7XG4rXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbitcdHVuc2lnbmVkIGludCBibGtiaXRzID0gc2ItXHUwMDNlc19ibG9ja3NpemVfYml0cztcbitcdHNlY3Rvcl90IGlibG9jayA9IG9mZnNldCBcdTAwM2VcdTAwM2UgYmxrYml0cztcbitcdGludCBjcmVhdGUgPSBmbGFncyBcdTAwMjYgSU9NQVBfV1JJVEU7XG4rXG4rXHRpbnQgb2Zmc2V0c1tERVBUSF07XG4rXHRJbmRpcmVjdCBjaGFpbltERVBUSF07XG4rXHRJbmRpcmVjdCAqcGFydGlhbDtcbitcdGludCBkZXB0aCA9IGJsb2NrX3RvX3BhdGgoaW5vZGUsIGlibG9jaywgb2Zmc2V0cyk7XG4rXHRpbnQgbGVmdDtcbitcdGludCBlcnIgPSAtRUlPO1xuK1xuK1x0c2VjdG9yX3QgcGh5cztcbitcbitcdC8qIGJsb2NrIGlzIGJleW9uZCBtYXggZmlsZSBzaXplICovXG4rXHRpZiAoZGVwdGggPT0gMClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpb21hcC1cdTAwM2ViZGV2ID0gaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2JkZXY7XG4rXG4rcmVyZWFkOlxuK1x0cGFydGlhbCA9IGdldF9icmFuY2goaW5vZGUsIGRlcHRoLCBvZmZzZXRzLCBjaGFpbiwgXHUwMDI2ZXJyKTtcbitcbitcdC8qIFNpbXBsZXN0IGNhc2UgLSBibG9jayBmb3VuZCwgbm8gYWxsb2NhdGlvbiBuZWVkZWQgKi9cbitcdGlmICghcGFydGlhbCkge1xuK1x0XHRpb21hcC1cdTAwM2VmbGFncyA9IDA7XG4rXHRcdHBoeXMgPSBibG9ja190b19jcHUoY2hhaW5bZGVwdGggLSAxXS5rZXkpO1xuK1x0XHRwYXJ0aWFsID0gY2hhaW4rZGVwdGgtMTtcbitcdFx0bWluaXhfaW9tYXBfc2V0X21hcHBlZChpb21hcCwgcGh5cywgYmxrYml0cywgaWJsb2NrKTtcbitcdFx0bWluaXhfY2hhaW5fY2xlYW51cChjaGFpbiwgcGFydGlhbCk7XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHQvKiBOZXh0IHNpbXBsZSBjYXNlIC0gcGxhaW4gbG9va3VwIG9yIGZhaWxlZCByZWFkIG9mIGluZGlyZWN0IGJsb2NrICovXG4rXHRpZiAoIWNyZWF0ZSB8fCBlcnIgPT0gLUVJTykge1xuK1x0XHRtaW5peF9pb21hcF9zZXRfaG9sZShpb21hcCwgYmxrYml0cywgaWJsb2NrKTtcbitcdFx0bWluaXhfY2hhaW5fY2xlYW51cChjaGFpbiwgcGFydGlhbCk7XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogVGhpcyBpcyBoZWxkIG92ZXIgZnJvbSB0aGUgb3JpZ2luYWwgZ2V0X2Jsb2NrIGxvZ2ljLCB3aGVyZSBpdFxuK1x0ICogYWN0ZWQgYXMgYSBndWFyZCBpbiBjYXNlIHRydW5jYXRlKCkgZGVsZXRlZCBibG9ja3MgZnJvbSB1bmRlciB0aGF0XG4rXHQgKiBmdW5jdGlvbi4gVGhlcmUgc2hvdWxkIG5vdCBiZSBhIHJhY2Ugd2l0aCBpb21hcCBvcGVyYXRpb25zLCBidXRcbitcdCAqIHdlJ3JlIHJldGFpbmluZyB0aGUgZGVmZW5zaXZlIGNvZGluZyBoZXJlIHRvIGJlIGV4dHJhIHNhZmUganVzdCBpblxuK1x0ICogY2FzZS5cbitcdCAqL1xuK1x0aWYgKGVyciA9PSAtRUFHQUlOKSB7XG4rXHRcdG1pbml4X2NoYWluX2NsZWFudXAoY2hhaW4sIHBhcnRpYWwpO1xuK1x0XHRnb3RvIHJlcmVhZDtcbitcdH1cbitcbitcdGxlZnQgPSAoY2hhaW4gKyBkZXB0aCkgLSBwYXJ0aWFsO1xuK1x0ZXJyID0gYWxsb2NfYnJhbmNoKGlub2RlLCBsZWZ0LCBvZmZzZXRzICsgKHBhcnRpYWwgLSBjaGFpbiksIHBhcnRpYWwpO1xuK1x0aWYgKGVycikge1xuK1x0XHRtaW5peF9jaGFpbl9jbGVhbnVwKGNoYWluLCBwYXJ0aWFsKTtcbitcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdGlmIChzcGxpY2VfYnJhbmNoKGlub2RlLCBjaGFpbiwgcGFydGlhbCwgbGVmdCkgXHUwMDNjIDApIHtcbitcdFx0bWluaXhfY2hhaW5fY2xlYW51cChjaGFpbiwgcGFydGlhbCk7XG4rXHRcdGdvdG8gcmVyZWFkO1xuK1x0fVxuK1xuK1x0LyogU3VjY2Vzc2Z1bCBhbGxvY2F0aW9uLCBtYXBwaW5nIGl0LiAqL1xuK1x0aW9tYXAtXHUwMDNlZmxhZ3MgPSBJT01BUF9GX05FVztcbitcdHBoeXMgPSBibG9ja190b19jcHUoY2hhaW5bZGVwdGggLSAxXS5rZXkpO1xuK1x0bWluaXhfaW9tYXBfc2V0X21hcHBlZChpb21hcCwgcGh5cywgYmxrYml0cywgaWJsb2NrKTtcbitcdG1pbml4X2NoYWluX2NsZWFudXAoY2hhaW4sIHBhcnRpYWwpO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rLypcbisgKiBtaW5peF9pb21hcF9lbmQgZW5kcyB1cCBiZWluZyBhIG5vcDsgc2luY2UgbWluaXggZG9lc24ndCBoYXZlIGFueSBleHRlbnRzIG9yXG4rICogdHJhbnNhY3Rpb25zIHRvIHdvcnJ5IGFib3V0LCB0aGVyZSBpc24ndCBhbnl0aGluZyB0byB1cGRhdGUgaGVyZS4gVGhlIG9uLWRpc2tcbisgKiBpbmRpcmVjdCBibG9ja3MgZ2V0IGRpcnRpZWQgaW4gbWluaXhfaW9tYXBfYmVnaW4uXG4rICovXG4rc3RhdGljIGludCBtaW5peF9pb21hcF9lbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCxcbitcdHNzaXplX3Qgd3JpdHRlbiwgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwKVxuK3tcbitcdHJldHVybiAwO1xuK31cbmRpZmYgLS1naXQgYS9mcy9taW5peC9pdHJlZV9jb21tb24uYyBiL2ZzL21pbml4L2l0cmVlX2NvbW1vbi5jXG5pbmRleCBjM2NkMmM3NWFmOWNlLi5kNzNhYjFjYWFjZmVjIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvaXRyZWVfY29tbW9uLmNcbisrKyBiL2ZzL21pbml4L2l0cmVlX2NvbW1vbi5jXG5AQCAtMzExLDcgKzMxMSwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdHJ1bmNhdGUgKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuIFx0bG9uZyBpYmxvY2s7XG4gXG4gXHRpYmxvY2sgPSAoaW5vZGUtXHUwMDNlaV9zaXplICsgc2ItXHUwMDNlc19ibG9ja3NpemUgLTEpIFx1MDAzZVx1MDAzZSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xuLVx0YmxvY2tfdHJ1bmNhdGVfcGFnZShpbm9kZS1cdTAwM2VpX21hcHBpbmcsIGlub2RlLVx1MDAzZWlfc2l6ZSwgZ2V0X2Jsb2NrKTtcbitcbitcdC8qIERlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBpbm9kZSBiZWluZyB0cnVuY2F0ZWQgaXMgYSBkaXJlY3Rvcnkgb3Igbm90LFxuK1x0ICogd2UgbmVlZCB0byBlaXRoZXIgY2FsbCBpb21hcF90cnVuY2F0ZV9wYWdlIG9yIGJsb2NrX3RydW5jYXRlX3BhZ2UuXG4rXHQgKi9cbitcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpXG4rXHRcdGJsb2NrX3RydW5jYXRlX3BhZ2UoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBpbm9kZS1cdTAwM2VpX3NpemUsIGdldF9ibG9jayk7XG4rXHRlbHNlXG4rXHRcdGlvbWFwX3RydW5jYXRlX3BhZ2UoaW5vZGUsIGlub2RlLVx1MDAzZWlfc2l6ZSwgTlVMTCxcbitcdFx0XHRtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKSwgTlVMTCwgTlVMTCk7XG4gXG4gXHRuID0gYmxvY2tfdG9fcGF0aChpbm9kZSwgaWJsb2NrLCBvZmZzZXRzKTtcbiBcdGlmICghbilcbmRpZmYgLS1naXQgYS9mcy9taW5peC9pdHJlZV92MS5jIGIvZnMvbWluaXgvaXRyZWVfdjEuY1xuaW5kZXggMWZlZDkwNjA0MmFhOC4uNThjMjlmNDQ0M2QzNyAxMDA2NDRcbi0tLSBhL2ZzL21pbml4L2l0cmVlX3YxLmNcbisrKyBiL2ZzL21pbml4L2l0cmVlX3YxLmNcbkBAIC00OSw2ICs0OSwxOCBAQCBzdGF0aWMgaW50IGJsb2NrX3RvX3BhdGgoc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssIGludCBvZmZzZXRzW0RFUFRIXSlcbiB9XG4gXG4gI2luY2x1ZGUgXCJpdHJlZV9jb21tb24uY1wiXG4rLyogTk9UQSBCRU5FOlxuKyAqXG4rICogVGhpcyBpcyBpY2t5IHRvIG1lLCBidXQgYXQgdGhlIHNhbWUgdGltZSBoYXZpbmcgaXQgYmUgYSBzdGFuZGFsb25lIEMgZmlsZVxuKyAqIHRoYXQncyBjb21waWxlZCB0byBvYmplY3QgZm9ybSBhbmQgbGlua2VkIHNlcGFyYXRlbHkgbGlrZSBpdCBpcyBpbiB4aWFmcyBpc1xuKyAqIG11Y2ggbmFzdGllciBpbiBtaW5peCBiZWNhdXNlIG9mIHRoZSBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIG1pbml4IGZzIHRoYXRcbisgKiBoYXZlIHNvbWUgdmVyeSwgdmVyeSBkaWZmZXJlbnQgYXNwZWN0cywgbGlrZSB0aGUgc2l6ZSBvZiBibG9ja190LiBJIGRvbid0XG4rICogbGlrZSBpdCwgYnV0IHNpbmNlIG1pbml4IGFscmVhZHkgaGFzIHRoaXMgcGF0dGVybiB3aGVyZSBhIGNvbW1vbiBpdHJlZSBmaWxlXG4rICogaXMgaW5jbHVkZWQgaW4gdGhlIGl0cmVlX3YxIGFuZCBpdHJlZV92MihhbmQgdjMpIGZpbGVzLCBJJ20gaW5jbHVkaW5nIGlvbWFwLmNcbisgKiBpbiB0aGVzZSBmaWxlcyBhcyB3ZWxsLiBJdCBkb2VzIGF0IGxlYXN0IGF2b2lkIGV4cG9ydGluZyBzb21lIGN1cnJlbnRseVxuKyAqIHN0YXRpYyBmdW5jdGlvbnMgdGhhdCBhcmVuJ3QgbmVlZGVkIGFueXdoZXJlIGJ1dCBpdHJlZV9jb21tb24uYyBhbmQgaW9tYXAuYy5cbisgKi9cbisjaW5jbHVkZSBcImlvbWFwLmNcIlxuIFxuIGludCBWMV9taW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssXG4gXHRcdFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpXG5AQCAtNjEsNyArNzMsMTggQEAgdm9pZCBWMV9taW5peF90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcbiBcdHRydW5jYXRlKGlub2RlKTtcbiB9XG4gXG4tdW5zaWduZWQgVjFfbWluaXhfYmxvY2tzKGxvZmZfdCBzaXplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuK3Vuc2lnbmVkIGludCBWMV9taW5peF9ibG9ja3MobG9mZl90IHNpemUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4ge1xuIFx0cmV0dXJuIG5ibG9ja3Moc2l6ZSwgc2IpO1xuIH1cbitcbitpbnQgVjFfbWluaXhfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCxcbitcdHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApXG4re1xuK1x0cmV0dXJuIG1pbml4X2lvbWFwX2JlZ2luKGlub2RlLCBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsIGlvbWFwLCBzcmNtYXApO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYxX21pbml4X2lvbWFwX29wcyA9IHtcbitcdC5pb21hcF9iZWdpbiA9IFYxX21pbml4X2lvbWFwX2JlZ2luLFxuK1x0LmlvbWFwX2VuZCAgID0gbWluaXhfaW9tYXBfZW5kLFxuK307XG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvaXRyZWVfdjIuYyBiL2ZzL21pbml4L2l0cmVlX3YyLmNcbmluZGV4IDlkMDBmMzFhMmQ5ZDEuLmZjN2E1YWU4ZmExY2EgMTAwNjQ0XG4tLS0gYS9mcy9taW5peC9pdHJlZV92Mi5jXG4rKysgYi9mcy9taW5peC9pdHJlZV92Mi5jXG5AQCAtNTcsNiArNTcsMTAgQEAgc3RhdGljIGludCBibG9ja190b19wYXRoKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBsb25nIGJsb2NrLCBpbnQgb2Zmc2V0c1tERVBUSF0pXG4gfVxuIFxuICNpbmNsdWRlIFwiaXRyZWVfY29tbW9uLmNcIlxuKy8qIFNlZSB0aGUgbm90ZSBpbiBpdHJlZV92MSBpbiBhIGNvbW1lbnQgdGhhdCBzdGFydHMgXCJOT1RBIEJFTkVcIiBmb3IgYW5cbisgKiBleHBsYW5hdGlvbiBmb3Igd2h5IGlvbWFwLmMgaXMgaW5jbHVkZWQgaGVyZS5cbisgKi9cbisjaW5jbHVkZSBcImlvbWFwLmNcIlxuIFxuIGludCBWMl9taW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssXG4gXHRcdFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpXG5AQCAtNjksNyArNzMsMTggQEAgdm9pZCBWMl9taW5peF90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcbiBcdHRydW5jYXRlKGlub2RlKTtcbiB9XG4gXG4tdW5zaWduZWQgVjJfbWluaXhfYmxvY2tzKGxvZmZfdCBzaXplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuK3Vuc2lnbmVkIGludCBWMl9taW5peF9ibG9ja3MobG9mZl90IHNpemUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4ge1xuIFx0cmV0dXJuIG5ibG9ja3Moc2l6ZSwgc2IpO1xuIH1cbitcbitpbnQgVjJfbWluaXhfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCxcbitcdHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApXG4re1xuK1x0cmV0dXJuIG1pbml4X2lvbWFwX2JlZ2luKGlub2RlLCBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsIGlvbWFwLCBzcmNtYXApO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYyX21pbml4X2lvbWFwX29wcyA9IHtcbitcdC5pb21hcF9iZWdpbiA9IFYyX21pbml4X2lvbWFwX2JlZ2luLFxuK1x0LmlvbWFwX2VuZCAgID0gbWluaXhfaW9tYXBfZW5kLFxuK307XG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvbWluaXguaCBiL2ZzL21pbml4L21pbml4LmhcbmluZGV4IDc4NzIyY2UyMmUxZTEuLjkwMzU2MDRjNjhjYTEgMTAwNjQ0XG4tLS0gYS9mcy9taW5peC9taW5peC5oXG4rKysgYi9mcy9taW5peC9taW5peC5oXG5AQCAtNSw2ICs1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZW1hcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWluaXhfZnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbWFwLmhcdTAwM2VcbiBcbiAjZGVmaW5lIElOT0RFX1ZFUlNJT04oaW5vZGUpXHRtaW5peF9zYihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX3ZlcnNpb25cbiAjZGVmaW5lIE1JTklYX1YxXHRcdDB4MDAwMVx0XHQvKiBvcmlnaW5hbCBtaW5peCBmcyAqL1xuQEAgLTU3LDYgKzU4LDggQEAgdm9pZCBtaW5peF9mcmVlX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGxvbmcgYmxvY2spO1xuIHVuc2lnbmVkIGxvbmcgbWluaXhfY291bnRfZnJlZV9ibG9ja3Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG4gaW50IG1pbml4X2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqLCBjb25zdCBzdHJ1Y3QgcGF0aCAqLFxuIFx0XHRzdHJ1Y3Qga3N0YXQgKiwgdTMyLCB1bnNpZ25lZCBpbnQpO1xuK2ludCBtaW5peF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4rXHRzdHJ1Y3QgaWF0dHIgKmF0dHIpO1xuIGludCBtaW5peF9wcmVwYXJlX2NodW5rKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbik7XG4gc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptaW5peF9nZXRfbWV0YWRhdGFfYmhzKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIFxuQEAgLTc2LDEzICs3OSwyMyBAQCBpbnQgbWluaXhfbWFrZV9lbXB0eShzdHJ1Y3QgaW5vZGUqLCBzdHJ1Y3QgaW5vZGUqKTtcbiBpbnQgbWluaXhfZW1wdHlfZGlyKHN0cnVjdCBpbm9kZSopO1xuIGludCBtaW5peF9zZXRfbGluayhzdHJ1Y3QgbWluaXhfZGlyX2VudHJ5ICpkZSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0c3RydWN0IGlub2RlICppbm9kZSk7XG4rXG4gc3RydWN0IG1pbml4X2Rpcl9lbnRyeSAqbWluaXhfZG90ZG90KHN0cnVjdCBpbm9kZSosIHN0cnVjdCBmb2xpbyAqKik7XG4gaW5vX3QgbWluaXhfaW5vZGVfYnlfbmFtZShzdHJ1Y3QgZGVudHJ5Kik7XG4gXG4raW50IFYxX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4rXHRsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsXG4rXHRzdHJ1Y3QgaW9tYXAgKnNyY21hcCk7XG4raW50IFYyX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4rXHRsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsXG4rXHRzdHJ1Y3QgaW9tYXAgKnNyY21hcCk7XG4rXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfaW5vZGVfb3BlcmF0aW9ucztcbiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWluaXhfZGlyX2lub2RlX29wZXJhdGlvbnM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWluaXhfZmlsZV9vcGVyYXRpb25zO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2Rpcl9vcGVyYXRpb25zO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYxX21pbml4X2lvbWFwX29wcztcbitleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMl9taW5peF9pb21hcF9vcHM7XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgbWluaXhfc2JfaW5mbyAqbWluaXhfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiB7XG5AQCAtOTQsMTEgKzEwNywxNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtaW5peF9pbm9kZV9pbmZvICptaW5peF9pKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRyZXR1cm4gY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgbWluaXhfaW5vZGVfaW5mbywgdmZzX2lub2RlKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBtaW5peF9ibG9ja3NfbmVlZGVkKHVuc2lnbmVkIGJpdHMsIHVuc2lnbmVkIGJsb2Nrc2l6ZSlcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBtaW5peF9ibG9ja3NfbmVlZGVkKHVuc2lnbmVkIGludCBiaXRzLCB1bnNpZ25lZCBpbnQgYmxvY2tzaXplKVxuIHtcbiBcdHJldHVybiBESVZfUk9VTkRfVVBfUE9XMihiaXRzLCBibG9ja3NpemUgKiA4KTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICptaW5peF9pb21hcF9vcHNfdmVyKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4re1xuK1x0cmV0dXJuIChJTk9ERV9WRVJTSU9OKGlub2RlKSA9PSBNSU5JWF9WMSkgP1xuK1x0XHRcdTAwMjZWMV9taW5peF9pb21hcF9vcHMgOiBcdTAwMjZWMl9taW5peF9pb21hcF9vcHM7XG4rfVxuK1xuICNpZiBkZWZpbmVkKENPTkZJR19NSU5JWF9GU19OQVRJVkVfRU5ESUFOKSBcdTAwMjZcdTAwMjYgXFxcbiBcdGRlZmluZWQoQ09ORklHX01JTklYX0ZTX0JJR19FTkRJQU5fMTZCSVRfSU5ERVhFRClcbiBcbkBAIC0xMjgsNyArMTQ3LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBtaW5peF9ibG9ja3NfbmVlZGVkKHVuc2lnbmVkIGJpdHMsIHVuc2lnbmVkIGJsb2Nrc2l6ZSlcbiAgKiBiaWctZW5kaWFuIDE2Yml0IGluZGV4ZWQgYml0bWFwc1xuICAqL1xuIFxuLXN0YXRpYyBpbmxpbmUgaW50IG1pbml4X2ZpbmRfZmlyc3RfemVyb19iaXQoY29uc3Qgdm9pZCAqdmFkZHIsIHVuc2lnbmVkIHNpemUpXG4rc3RhdGljIGlubGluZSBpbnQgbWluaXhfZmluZF9maXJzdF96ZXJvX2JpdChjb25zdCB2b2lkICp2YWRkciwgdW5zaWduZWQgaW50IHNpemUpXG4ge1xuIFx0Y29uc3QgdW5zaWduZWQgc2hvcnQgKnAgPSB2YWRkciwgKmFkZHIgPSB2YWRkcjtcbiBcdHVuc2lnbmVkIHNob3J0IG51bTtcbmRpZmYgLS1naXQgYS9mcy9taW5peC9uYW1laS5jIGIvZnMvbWluaXgvbmFtZWkuY1xuaW5kZXggNTUyNWJhMzY3ZWQ3NC4uNTJlMTE1MDEzYWJmOCAxMDA2NDRcbi0tLSBhL2ZzL21pbml4L25hbWVpLmNcbisrKyBiL2ZzL21pbml4L25hbWVpLmNcbkBAIC02LDYgKzYsNyBAQFxuICAqL1xuIFxuICNpbmNsdWRlIFwibWluaXguaFwiXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW9tYXAuaFx1MDAzZVxuIFxuIHN0YXRpYyBpbnQgYWRkX25vbmRpcihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4ge1xuQEAgLTg0LDEyICs4NSwxNiBAQCBzdGF0aWMgaW50IG1pbml4X3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRyZXR1cm4gUFRSX0VSUihpbm9kZSk7XG4gXG4gXHRtaW5peF9zZXRfaW5vZGUoaW5vZGUsIDApO1xuLVx0ZXJyID0gcGFnZV9zeW1saW5rKGlub2RlLCBzeW1uYW1lLCBpKTtcbitcdGVyciA9IGlvbWFwX3N5bWxpbmtfd3JpdGUoaW5vZGUsIHN5bW5hbWUsIGksIG1pbml4X2lvbWFwX29wc192ZXIoaW5vZGUpLCBOVUxMLCBOVUxMKTtcbitcbiBcdGlmICh1bmxpa2VseShlcnIpKSB7XG4gXHRcdGlub2RlX2RlY19saW5rX2NvdW50KGlub2RlKTtcbiBcdFx0aXB1dChpbm9kZSk7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4rXG4rXHRpX3NpemVfd3JpdGUoaW5vZGUsIGkgLSAxKTtcbitcbiBcdHJldHVybiBhZGRfbm9uZGlyKGRlbnRyeSwgaW5vZGUpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvbWFwLmggYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcbmluZGV4IDhjNzU0ZWI5NzRmYmYuLmFiMjdhM2E1YjhkMmMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcbisrKyBiL2luY2x1ZGUvbGludXgvaW9tYXAuaFxuQEAgLTQ3MSw2ICs0NzEsOSBAQCBsb2ZmX3QgaW9tYXBfc2Vla19kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4gXHRcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyk7XG4gc2VjdG9yX3QgaW9tYXBfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYm5vLFxuIFx0XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMpO1xuK2ludCBpb21hcF9zeW1saW5rX3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKnRhcmdldCwgaW50IGxlbixcbitcdFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLFxuK1x0XHRjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGVfb3BzICp3cml0ZV9vcHMsIHZvaWQgKnByaXZhdGUpO1xuIFxuIC8qXG4gICogRmxhZ3MgZm9yIGlvbWFwX2lvZW5kLVx1MDAzZWlvX2ZsYWdzLlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTA6NDYuMjMyOTE0ODAzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMjY4MTAxODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWluaXggSS9PbWFwIENvbnZlcnNpb24gZm9yIFN5bWxpbmtzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMgdGhhdCdzIHN3YXBwaW5nIG91dCB0aGUgb2xkIGBidWZmZXJfaGVhZGAtYmFzZWQgYmxvY2sgSS9PIGluIHRoZSBNaW5peCBmaWxlc3lzdGVtIGZvciBgaW9tYXBgIGJ1ZmZlcmVkIEkvTy4gVGhlIG1haW4gdGhpbmcgdGhhdCBjYXVnaHQgbXkgZXllIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYGlvbWFwX3N5bWxpbmtfd3JpdGVgIGFuZCBpdHMgdXNlIGluIGBmcy9taW5peC9uYW1laS5jYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MuXG5cblRoZSBjb2RlJ3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgaXQncyBhZGRpbmcgYGlvbWFwX3N5bWxpbmtfd3JpdGVgIHRvIGBmcy9pb21hcC9idWZmZXJlZC1pby5jYCBhbmQgdXBkYXRpbmcgdmFyaW91cyBNaW5peCBmaWxlcyB0byB1c2UgdGhlIG5ldyBmdW5jdGlvbi4gTG9va2luZyBhdCB0aGUgZGVmaW5pdGlvbiwgYGlvbWFwX3N5bWxpbmtfd3JpdGVgIHRha2VzIGEgc3ltbGluayB0YXJnZXQgc3RyaW5nIGFuZCBpdHMgbGVuZ3RoLiBJdCBjcmVhdGVzIGEgYGt2ZWNgLCBhbiBgaW9tYXBfaXRlcmAsIGFuZCB1c2VzIGBpb3ZfaXRlcl9rdmVjYCB0byBwb2ludCBhbiBgaW92YCB0byB0aGUgZ2l2ZW4gdGFyZ2V0IHN0cmluZy5cblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIGBsZW4gLSAxYCB1c2FnZSBpbiBgaW92X2xlbmAuIEluIGBtaW5peF9zeW1saW5rYCwgdGhlIGxlbmd0aCBgaWAgaXMgZGV0ZXJtaW5lZCBhcyBgc3RybGVuKHN5bW5hbWUpICsgMWAgd2hpY2ggaW5jbHVkZWQgdGhlIG51bGwgdGVybWluYXRvci4gYGlvbWFwX3N5bWxpbmtfd3JpdGVgIHJlY2VpdmVzIGBsZW5gIGFzIGBpYCwgYnV0IHVzZXMgYGxlbiAtIDFgLCBjb3JyZXNwb25kaW5nIHRvIGp1c3QgYHN0cmxlbihzeW1uYW1lKWAuIFRoaXMgbG9va3MgYSBiaXQgZGlmZmVyZW50IGZyb20gaG93IGBwYWdlX3N5bWxpbmtgIGhhbmRsZWQgdGhpcywgd2hlcmUgYHBhZ2Vfc3ltbGluayhpbm9kZSwgc3ltbmFtZSwgaSlgIHdyb3RlIGBpYCBieXRlcywgaW5jbHVkaW5nIHRoZSBudWxsIHRlcm1pbmF0b3IuIEl0IGhhcyBiZWVuIGEgd2hpbGUsIGJ1dCBJIHNlZW0gdG8gcmVjYWxsIHRoZSBgcGFnZV9zeW1saW5rYCByb3V0aW5lIHdyaXRpbmcgdGhlIG51bGwgdGVybWluYXRvci4gU28sIGl0IGFwcGVhcnMgdGhhdCBgaW9tYXBfc3ltbGlua193cml0ZWAgaXMgd3JpdGluZyBgc3RybGVuKHN5bW5hbWUpYCBieXRlcyBpbnN0ZWFkIG9mIGBzdHJsZW4oc3ltbmFtZSkgKyAxYC4gVGhpcyBjb3VsZCBsZWF2ZSB0aGUgcmVzdCBvZiB0aGUgYmxvY2sgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCwgYW5kIHRoaXMgY291bGQgYmUgYSBzZWN1cml0eSByaXNrLlxuXG5UaGUga2V5IHF1ZXN0aW9uIHRoZW4gaXMsIHdoYXQgaGFwcGVucyB0byB0aGUgcmVzdCBvZiB0aGUgYmxvY2s/IFdpdGggYSBibG9jayBzaXplIG9mLCBzYXksIDEwMjQgYnl0ZXMgYW5kIGEgc3ltbGluayBvZiAxMCBieXRlcywgYXJlIHRoZSByZW1haW5pbmcgMTAxNCBieXRlcyBsZWZ0IHVuaW5pdGlhbGl6ZWQ/IEkgbmVlZCB0byBkaWcgaW50byBgaW9tYXBfd3JpdGVfaXRlcmAgb3IgYGlvbWFwX3dyaXRlX2JlZ2luYCB0byBzZWUgaG93IHRoZSB3cml0ZSBvcGVyYXRpb24gaGFuZGxlcyB0aGlzLiBJIHN1c3BlY3QgdGhhdCB3aGVuIHdyaXRpbmcgdG8gYSBuZXcgYmxvY2ssIHRoZSBmdW5jdGlvbiB3aWxsIGFsbG9jYXRlIGEgZm9saW8gYW5kIHplcm8gdGhlIHVud3JpdHRlbiBwYXJ0cy4gTm93LCBgaW9tYXBfd3JpdGVfaXRlcmAgY2FsbHMgYGlvbWFwX3dyaXRlX2JlZ2luYCwgd2hpY2ggY2FsbHMgYGlvbWFwX2dldF9mb2xpb2AsIHNvIEkgc2hvdWxkIHByb2JhYmx5IHZlcmlmeSBteSBhc3N1bXB0aW9ucy4gSG9wZWZ1bGx5LCBgaW9tYXBfZ2V0X2ZvbGlvYCBvciBgaW9tYXBfd3JpdGVfYmVnaW5gIHplcm8gdGhlIGZvbGlvIGlmIGl0IGlzIGEgbmV3IGJsb2NrLCBpZiBzbywgd2UgY2FuIGJlIHN1cmUgdGhlIGVudGlyZSBibG9jayBoYXMgYmVlbiBpbml0aWFsaXplZC4gVGltZSB0byBjaGVjayB0aG9zZSByb3V0aW5lcy4uLiBJIHRoaW5rIHRoZSBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgc2hvdWxkIGNvbWUgaW4gaGFuZHkgdG8gc2VhcmNoIGZvciBpbnN0YW5jZXMgb2YgYGlvbWFwX3dyaXRlX2JlZ2luYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM3OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExODMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMDo1OS41MDEwMjEyMDNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDcyMjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvbWFwX3dyaXRlX2JlZ2luXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2lvbWFwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9pb21hcC9idWZmZXJlZC1pby5jPTg2Mj1pb21hcF93cml0ZV9mYWlsZWQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuKVxcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy04NzQtXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzo4NzU6c3RhdGljIGludCBfX2lvbWFwX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtODc2LVxcdFxcdGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZV9vcHMgKndyaXRlX29wcywgc2l6ZV90IGxlbixcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MTAwND1zdGF0aWMgbG9mZl90IGlvbWFwX3RyaW1fZm9saW9fcmFuZ2Uoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTEwMTgtXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxMDE5OnN0YXRpYyBpbnQgaW9tYXBfd3JpdGVfYmVnaW5faW5saW5lKGNvbnN0IHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTAyMC1cXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xMDMyLSAqL1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTAzMzpzdGF0aWMgaW50IGlvbWFwX3dyaXRlX2JlZ2luKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTAzNC1cXHRcXHRjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGVfb3BzICp3cml0ZV9vcHMsIHN0cnVjdCBmb2xpbyAqKmZvbGlvcCxcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTEwMS1cXHRpZiAoc3JjbWFwLVxcdTAwM2V0eXBlID09IElPTUFQX0lOTElORSlcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjExMDI6XFx0XFx0c3RhdHVzID0gaW9tYXBfd3JpdGVfYmVnaW5faW5saW5lKGl0ZXIsIGZvbGlvKTtcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTExMDMtXFx0ZWxzZSBpZiAoc3JjbWFwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPTUFQX0ZfQlVGRkVSX0hFQUQpXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTExMDUtXFx0ZWxzZVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTEwNjpcXHRcXHRzdGF0dXMgPSBfX2lvbWFwX3dyaXRlX2JlZ2luKGl0ZXIsIHdyaXRlX29wcywgbGVuLCBmb2xpbyk7XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xMTA3LVxcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0xMTg4PXN0YXRpYyBpbnQgaW9tYXBfd3JpdGVfaXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvdl9pdGVyICppLFxcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xMjMxLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTIzMjpcXHRcXHRzdGF0dXMgPSBpb21hcF93cml0ZV9iZWdpbihpdGVyLCB3cml0ZV9vcHMsIFxcdTAwMjZmb2xpbywgXFx1MDAyNm9mZnNldCxcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTEyMzMtXFx0XFx0XFx0XFx0XFx1MDAyNmJ5dGVzKTtcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MTU3MT1zdGF0aWMgaW50IGlvbWFwX3Vuc2hhcmVfaXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTU4Ni1cXHRcXHRieXRlcyA9IG1pbl90KHU2NCwgU0laRV9NQVgsIGJ5dGVzKTtcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjE1ODc6XFx0XFx0c3RhdHVzID0gaW9tYXBfd3JpdGVfYmVnaW4oaXRlciwgd3JpdGVfb3BzLCBcXHUwMDI2Zm9saW8sIFxcdTAwMjZvZmZzZXQsXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNTg4LVxcdFxcdFxcdFxcdFxcdTAwMjZieXRlcyk7XFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTE2NDg9c3RhdGljIGludCBpb21hcF96ZXJvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIGJvb2wgKmRpZF96ZXJvLFxcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNjYyLVxcdFxcdGJ5dGVzID0gbWluX3QodTY0LCBTSVpFX01BWCwgYnl0ZXMpO1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTY2MzpcXHRcXHRzdGF0dXMgPSBpb21hcF93cml0ZV9iZWdpbihpdGVyLCB3cml0ZV9vcHMsIFxcdTAwMjZmb2xpbywgXFx1MDAyNm9mZnNldCxcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE2NjQtXFx0XFx0XFx0XFx0XFx1MDAyNmJ5dGVzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTA6NTkuNTQ1NDk5NDIxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0ODQ5OTM1NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIEJ1ZmZlcmVkIEkvTyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyBgX19pb21hcF93cml0ZV9iZWdpbmAgd29ya3MsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYnVmZmVyZWQgSS9PLiBTbywgbGV0J3MgaGVhZCBvdmVyIHRvIGBmcy9pb21hcC9idWZmZXJlZC1pby5jYC4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgbG9naWMgZm9yIG1hbmFnaW5nIHRob3NlIHdyaXRlIG9wZXJhdGlvbnMuIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGl0J3MgY29vcmRpbmF0aW5nIHRoaW5ncywgaG93IGl0IGhhbmRsZXMgdGhlIGluaXRpYWwgc2V0dXAsIGFuZCB3aGF0IHRoZSBrZXkgY29uc2lkZXJhdGlvbnMgYXJlIGZvciBwZXJmb3JtYW5jZSBhbmQgZGF0YSBpbnRlZ3JpdHkuIEknbSBlc3BlY2lhbGx5IGN1cmlvdXMgYWJvdXQgYW55IHJlY2VudCBjaGFuZ2VzIG9yIHBvdGVudGlhbCBnb3RjaGFzIHRoYXQgbWlnaHQgYmUgbHVya2luZyBpbiB0aGVyZS4gSXQncyB0aW1lIHRvIGdldCBoYW5kcy1vbiBhbmQgdHJhY2UgdGhyb3VnaCB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMjEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMTowMy4wMzA0OTYzNDFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTI1NTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9faW9tYXBfd3JpdGVfYmVnaW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaW9tYXAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9ODYyPWlvbWFwX3dyaXRlX2ZhaWxlZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4pXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTg3NC1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjg3NTpzdGF0aWMgaW50IF9faW9tYXBfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy04NzYtXFx0XFx0Y29uc3Qgc3RydWN0IGlvbWFwX3dyaXRlX29wcyAqd3JpdGVfb3BzLCBzaXplX3QgbGVuLFxcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0xMDMzPXN0YXRpYyBpbnQgaW9tYXBfd3JpdGVfYmVnaW4oc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTExMDUtXFx0ZWxzZVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTEwNjpcXHRcXHRzdGF0dXMgPSBfX2lvbWFwX3dyaXRlX2JlZ2luKGl0ZXIsIHdyaXRlX29wcywgbGVuLCBmb2xpbyk7XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xMTA3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMTowMy4wNzQwMjc2MloiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjA3MzkwMjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoZSBjb2RlLCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb24sIGFuZCB0YWlsb3JlZCBmb3IgYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIGBfX2lvbWFwX3dyaXRlX2JlZ2luYCoqXG5cbkFscmlnaHQsIGxldCdzIHB1bGwgdXAgYF9faW9tYXBfd3JpdGVfYmVnaW5gLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIGlzbid0IGl0PyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHdyaXRlIHBhdGggYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgSS9PIG1hcC4gU3BlY2lmaWNhbGx5LCBJJ20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBpbml0aWFsIHNldHVwIGJlZm9yZSB0aGUgYWN0dWFsIHdyaXRlIGhhcHBlbnMgLSB0aGluZ3MgbGlrZSBlbnN1cmluZyB0aGUgcmVsZXZhbnQgYmxvY2tzIGFyZSBhbGxvY2F0ZWQsIHNldHRpbmcgdXAgYW55IG5lY2Vzc2FyeSBtZXRhZGF0YSwgYW5kIG1ha2luZyBzdXJlIHRoZSB3cml0ZSBvcGVyYXRpb24gY2FuIHByb2NlZWQgc2FmZWx5LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBoYW5kbGVzIHRoaW5ncyBsaWtlIGV4dGVudCBhbGxvY2F0aW9uLCB3aGV0aGVyIGl0IGRlYWxzIHdpdGggYW55IHByZS1hbGxvY2F0aW9uIHN0cmF0ZWdpZXMgdG8gbWluaW1pemUgZnJhZ21lbnRhdGlvbiwgYW5kIGhvdyBpdCBsb2NrcyBhbmQgc3luY2hyb25pemVzIHdpdGggb3RoZXIgY29uY3VycmVudCBvcGVyYXRpb25zLiBJJ20gYWxzbyBjdXJpb3VzIGFib3V0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBibG9jayBkZXZpY2UgYW5kIGFueSBwb3RlbnRpYWwgY2FjaGluZyBsYXllcnMuIEknbGwgbmVlZCB0byBkaXNzZWN0IGl0cyBlcnJvciBoYW5kbGluZyBhbmQgaG93IGl0IGVuc3VyZXMgYXRvbWljaXR5IGluIHRoZSBmYWNlIG9mIHBvc3NpYmxlIGludGVycnVwdGlvbnMuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhlcmUgd2lsbCBiZSBzZXZlcmFsIGVkZ2UgY2FzZXMgYW5kIG9wdGltaXphdGlvbnMgYXQgcGxheSBoZXJlIHRvIGVuc3VyZSBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHkuIExldCdzIHNlZSBob3cgdGhleSB0YWNrbGVkIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjcxNywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjExOjA3LjY4MTQyMDMxMloiLCJTZXEiOjE2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzg4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NzUsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODc1OlxcdHN0YXRpYyBpbnQgX19pb21hcF93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcXG4gODc2OlxcdFxcdFxcdGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZV9vcHMgKndyaXRlX29wcywgc2l6ZV90IGxlbixcXG4gODc3OlxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIDg3ODpcXHR7XFxuIDg3OTpcXHRcXHRzdHJ1Y3QgaW9tYXBfZm9saW9fc3RhdGUgKmlmcztcXG4gODgwOlxcdFxcdGxvZmZfdCBwb3MgPSBpdGVyLVxcdTAwM2Vwb3M7XFxuIDg4MTpcXHRcXHRsb2ZmX3QgYmxvY2tfc2l6ZSA9IGlfYmxvY2tzaXplKGl0ZXItXFx1MDAzZWlub2RlKTtcXG4gODgyOlxcdFxcdGxvZmZfdCBibG9ja19zdGFydCA9IHJvdW5kX2Rvd24ocG9zLCBibG9ja19zaXplKTtcXG4gODgzOlxcdFxcdGxvZmZfdCBibG9ja19lbmQgPSByb3VuZF91cChwb3MgKyBsZW4sIGJsb2NrX3NpemUpO1xcbiA4ODQ6XFx0XFx0dW5zaWduZWQgaW50IG5yX2Jsb2NrcyA9IGlfYmxvY2tzX3Blcl9mb2xpbyhpdGVyLVxcdTAwM2Vpbm9kZSwgZm9saW8pO1xcbiA4ODU6XFx0XFx0c2l6ZV90IGZyb20gPSBvZmZzZXRfaW5fZm9saW8oZm9saW8sIHBvcyksIHRvID0gZnJvbSArIGxlbjtcXG4gODg2OlxcdFxcdHNpemVfdCBwb2ZmLCBwbGVuO1xcbiA4ODc6XFx0XFxuIDg4ODpcXHRcXHQvKlxcbiA4ODk6XFx0XFx0ICogSWYgdGhlIHdyaXRlIG9yIHplcm9pbmcgY29tcGxldGVseSBvdmVybGFwcyB0aGUgY3VycmVudCBmb2xpbywgdGhlblxcbiA4OTA6XFx0XFx0ICogZW50aXJlIGZvbGlvIHdpbGwgYmUgZGlydGllZCBzbyB0aGVyZSBpcyBubyBuZWVkIGZvclxcbiA4OTE6XFx0XFx0ICogcGVyLWJsb2NrIHN0YXRlIHRyYWNraW5nIHN0cnVjdHVyZXMgdG8gYmUgYXR0YWNoZWQgdG8gdGhpcyBmb2xpby5cXG4gODkyOlxcdFxcdCAqIEZvciB0aGUgdW5zaGFyZSBjYXNlLCB3ZSBtdXN0IHJlYWQgaW4gdGhlIG9uZGlzayBjb250ZW50cyBiZWNhdXNlIHdlXFxuIDg5MzpcXHRcXHQgKiBhcmUgbm90IGNoYW5naW5nIHBhZ2VjYWNoZSBjb250ZW50cy5cXG4gODk0OlxcdFxcdCAqL1xcbiA4OTU6XFx0XFx0aWYgKCEoaXRlci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT01BUF9VTlNIQVJFKSBcXHUwMDI2XFx1MDAyNiBwb3MgXFx1MDAzYz0gZm9saW9fcG9zKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbiA4OTY6XFx0XFx0ICAgIHBvcyArIGxlbiBcXHUwMDNlPSBmb2xpb19uZXh0X3Bvcyhmb2xpbykpXFxuIDg5NzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gODk4OlxcdFxcbiA4OTk6XFx0XFx0aWZzID0gaWZzX2FsbG9jKGl0ZXItXFx1MDAzZWlub2RlLCBmb2xpbywgaXRlci1cXHUwMDNlZmxhZ3MpO1xcbiA5MDA6XFx0XFx0aWYgKChpdGVyLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPTUFQX05PV0FJVCkgXFx1MDAyNlxcdTAwMjYgIWlmcyBcXHUwMDI2XFx1MDAyNiBucl9ibG9ja3MgXFx1MDAzZSAxKVxcbiA5MDE6XFx0XFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuIDkwMjpcXHRcXG4gOTAzOlxcdFxcdGlmIChmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSlcXG4gOTA0OlxcdFxcdFxcdHJldHVybiAwO1xcbiA5MDU6XFx0XFxuIDkwNjpcXHRcXHRkbyB7XFxuIDkwNzpcXHRcXHRcXHRpb21hcF9hZGp1c3RfcmVhZF9yYW5nZShpdGVyLVxcdTAwM2Vpbm9kZSwgZm9saW8sIFxcdTAwMjZibG9ja19zdGFydCxcXG4gOTA4OlxcdFxcdFxcdFxcdFxcdGJsb2NrX2VuZCAtIGJsb2NrX3N0YXJ0LCBcXHUwMDI2cG9mZiwgXFx1MDAyNnBsZW4pO1xcbiA5MDk6XFx0XFx0XFx0aWYgKHBsZW4gPT0gMClcXG4gOTEwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA5MTE6XFx0XFxuIDkxMjpcXHRcXHRcXHQvKlxcbiA5MTM6XFx0XFx0XFx0ICogSWYgdGhlIHJlYWQgcmFuZ2Ugd2lsbCBiZSBlbnRpcmVseSBvdmVyd3JpdHRlbiBieSB0aGUgd3JpdGUsXFxuIDkxNDpcXHRcXHRcXHQgKiB3ZSBjYW4gc2tpcCBoYXZpbmcgdG8gemVyby9yZWFkIGl0IGluLlxcbiA5MTU6XFx0XFx0XFx0ICovXFxuIDkxNjpcXHRcXHRcXHRpZiAoIShpdGVyLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPTUFQX1VOU0hBUkUpIFxcdTAwMjZcXHUwMDI2IGZyb20gXFx1MDAzYz0gcG9mZiBcXHUwMDI2XFx1MDAyNlxcbiA5MTc6XFx0XFx0XFx0ICAgIHRvIFxcdTAwM2U9IHBvZmYgKyBwbGVuKVxcbiA5MTg6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDkxOTpcXHRcXG4gOTIwOlxcdFxcdFxcdGlmIChpb21hcF9ibG9ja19uZWVkc196ZXJvaW5nKGl0ZXIsIGJsb2NrX3N0YXJ0KSkge1xcbiA5MjE6XFx0XFx0XFx0XFx0aWYgKFdBUk5fT05fT05DRShpdGVyLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPTUFQX1VOU0hBUkUpKVxcbiA5MjI6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIDkyMzpcXHRcXHRcXHRcXHRmb2xpb196ZXJvX3NlZ21lbnRzKGZvbGlvLCBwb2ZmLCBmcm9tLCB0bywgcG9mZiArIHBsZW4pO1xcbiA5MjQ6XFx0XFx0XFx0fSBlbHNlIHtcXG4gOTI1OlxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBpb21hcCAqaW9tYXAgPSBpb21hcF9pdGVyX3NyY21hcChpdGVyKTtcXG4gOTI2OlxcdFxcdFxcdFxcdGludCBzdGF0dXM7XFxuIDkyNzpcXHRcXG4gOTI4OlxcdFxcdFxcdFxcdGlmIChpdGVyLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPTUFQX05PV0FJVClcXG4gOTI5OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbiA5MzA6XFx0XFxuIDkzMTpcXHRcXHRcXHRcXHRpZiAod3JpdGVfb3BzIFxcdTAwMjZcXHUwMDI2IHdyaXRlX29wcy1cXHUwMDNlcmVhZF9mb2xpb19yYW5nZSlcXG4gOTMyOlxcdFxcdFxcdFxcdFxcdHN0YXR1cyA9IHdyaXRlX29wcy1cXHUwMDNlcmVhZF9mb2xpb19yYW5nZShpdGVyLFxcbiA5MzM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0Zm9saW8sIGJsb2NrX3N0YXJ0LCBwbGVuKTtcXG4gOTM0OlxcdFxcdFxcdFxcdGVsc2VcXG4gOTM1OlxcdFxcdFxcdFxcdFxcdHN0YXR1cyA9IGlvbWFwX2Jpb19yZWFkX2ZvbGlvX3JhbmdlX3N5bmMoaXRlcixcXG4gOTM2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGZvbGlvLCBibG9ja19zdGFydCwgcGxlbik7XFxuIDkzNzpcXHRcXHRcXHRcXHRpZiAoc3RhdHVzIFxcdTAwM2MgMClcXG4gOTM4OlxcdFxcdFxcdFxcdFxcdGZzZXJyb3JfcmVwb3J0X2lvKGl0ZXItXFx1MDAzZWlub2RlLFxcbiA5Mzk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBGU0VSUl9CVUZGRVJFRF9SRUFELCBwb3MsXFxuIDk0MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHBsZW4sIHN0YXR1cywgR0ZQX05PRlMpO1xcbiA5NDE6XFx0XFx0XFx0XFx0aWYgKHN0YXR1cylcXG4gOTQyOlxcdFxcdFxcdFxcdFxcdHJldHVybiBzdGF0dXM7XFxuIDk0MzpcXHRcXG4gOTQ0OlxcdFxcdFxcdFxcdGlmIChpb21hcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT01BUF9GX1pFUk9fVEFJTClcXG4gOTQ1OlxcdFxcdFxcdFxcdFxcdGZvbGlvX3plcm9fc2VnbWVudChmb2xpbywgdG8sIHBvZmYgKyBwbGVuKTtcXG4gOTQ2OlxcdFxcdFxcdH1cXG4gOTQ3OlxcdFxcdFxcdGlvbWFwX3NldF9yYW5nZV91cHRvZGF0ZShmb2xpbywgcG9mZiwgcGxlbik7XFxuIDk0ODpcXHRcXHR9IHdoaWxlICgoYmxvY2tfc3RhcnQgKz0gcGxlbikgXFx1MDAzYyBibG9ja19lbmQpO1xcbiA5NDk6XFx0XFxuIDk1MDpcXHRcXHRyZXR1cm4gMDtcXG4gOTUxOlxcdH1cXG4gOTUyOlxcdFxcbiA5NTM6XFx0c3RhdGljIHN0cnVjdCBmb2xpbyAqX19pb21hcF9nZXRfZm9saW8oc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXFxuIDk1NDpcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGVfb3BzICp3cml0ZV9vcHMsIHNpemVfdCBsZW4pXFxuIDk1NTpcXHR7XFxuIDk1NjpcXHRcXHRsb2ZmX3QgcG9zID0gaXRlci1cXHUwMDNlcG9zO1xcbiA5NTc6XFx0XFxuIDk1ODpcXHRcXHRpZiAoIW1hcHBpbmdfbGFyZ2VfZm9saW9fc3VwcG9ydChpdGVyLVxcdTAwM2Vpbm9kZS1cXHUwMDNlaV9tYXBwaW5nKSlcXG4gOTU5OlxcdFxcdFxcdGxlbiA9IG1pbl90KHNpemVfdCwgbGVuLCBQQUdFX1NJWkUgLSBvZmZzZXRfaW5fcGFnZShwb3MpKTtcXG4gOTYwOlxcdFxcbiA5NjE6XFx0XFx0aWYgKGl0ZXItXFx1MDAzZWlvbWFwLmZsYWdzIFxcdTAwMjYgSU9NQVBfRl9GT0xJT19CQVRDSCkge1xcbiA5NjI6XFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGZvbGlvX2JhdGNoX25leHQoaXRlci1cXHUwMDNlZmJhdGNoKTtcXG4gOTYzOlxcdFxcbiA5NjQ6XFx0XFx0XFx0aWYgKCFmb2xpbylcXG4gOTY1OlxcdFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA5NjY6XFx0XFxuIDk2NzpcXHRcXHRcXHQvKlxcbiA5Njg6XFx0XFx0XFx0ICogVGhlIGZvbGlvIG1hcHBpbmcgZ2VuZXJhbGx5IHNob3VsZG4ndCBoYXZlIGNoYW5nZWQgYmFzZWQgb25cXG4gOTY5OlxcdFxcdFxcdCAqIGZzIGxvY2tzLCBidXQgYmUgY29uc2lzdGVudCB3aXRoIGZpbGVtYXAgbG9va3VwIGFuZCByZXRyeVxcbiA5NzA6XFx0XFx0XFx0ICogdGhlIGl0ZXIgaWYgaXQgZG9lcy5cXG4gOTcxOlxcdFxcdFxcdCAqL1xcbiA5NzI6XFx0XFx0XFx0Zm9saW9fbG9jayhmb2xpbyk7XFxuIDk3MzpcXHRcXHRcXHRpZiAodW5saWtlbHkoZm9saW8tXFx1MDAzZW1hcHBpbmcgIT0gaXRlci1cXHUwMDNlaW5vZGUtXFx1MDAzZWlfbWFwcGluZykpIHtcXG4gOTc0OlxcdFxcdFxcdFxcdGl0ZXItXFx1MDAzZWlvbWFwLmZsYWdzIHw9IElPTUFQX0ZfU1RBTEU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjExOjA3LjY4MTYwMDQ0MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjgyNzAxODQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgX19pb21hcF93cml0ZV9iZWdpbmAgYW5kIFplcm9pbmcgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBfX2lvbWFwX3dyaXRlX2JlZ2luYCBmdW5jdGlvbiBhbmQgSSBzZWUgdGhpcyBjcnVjaWFsIGNoZWNrOiBgaW9tYXBfYmxvY2tfbmVlZHNfemVyb2luZ2AuIElmIHRoYXQgcmV0dXJucyB0cnVlLCB0aGVuIHdlIGNhbGwgYGZvbGlvX3plcm9fc2VnbWVudHNgLiBNeSBpbml0aWFsIHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgZm9saW9femVyb19zZWdtZW50c2AgaXMgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIHVud3JpdHRlbiBwYXJ0cyBvZiB0aGUgYmxvY2sgYXJlIHplcm9lZCBvdXQgYmVmb3JlIHdlIHdyaXRlIG91ciBuZXcgZGF0YS4gSXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgemVyb2luZyBiZWZvcmUgYGZyb21gIGFuZCBhZnRlciBgdG9gLCBzaW1wbGUgZW5vdWdoLlxuXG5XYWl0IGEgbWludXRlLCBteSBleHBlcnQgaW50dWl0aW9uIGlzIHRpbmdsaW5nLiBXaGF0IGhhcHBlbnMgaWYgdGhpcyBpc24ndCBhICpuZXcqIGJsb2NrIGFsbG9jYXRpb24gYnV0IHJhdGhlciBhbiAqb3ZlcndyaXRlKj8gSWYgd2UncmUgb3ZlcndyaXRpbmcgZXhpc3RpbmcgZGF0YSwgZG9lcyBgaW9tYXBfYmxvY2tfbmVlZHNfemVyb2luZ2AgKnN0aWxsKiByZXR1cm4gdHJ1ZT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25kaXRpb25zIHdoZW4gYGlvbWFwX2Jsb2NrX25lZWRzX3plcm9pbmdgIHJldHVybnMgdHJ1ZS4gU3BlY2lmaWNhbGx5LCBJIGtub3cgdGhhdCB3aGVuIHRoZSBgSU9NQVBfRl9ORVdgIGZsYWcgaXMgc2V0LCBpdCB3aWxsIHJldHVybiB0cnVlLCBidXQgd2hhdCBhYm91dCBvdGhlciBzY2VuYXJpb3M/IFRoaXMgaXMgZXNzZW50aWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIGltcGFjdCBvZiB0aGlzIGZ1bmN0aW9uLCBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgZnJvbSB6ZXJvaW5nIGFscmVhZHkgYWxsb2NhdGVkIGRhdGEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Njk3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTE6MTIuOTY0MzA0ODg1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODI4ODgyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb21hcF9ibG9ja19uZWVkc196ZXJvaW5nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2lvbWFwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9pb21hcC9idWZmZXJlZC1pby5jPTMxOD1zdGF0aWMgdm9pZCBpb21hcF9hZGp1c3RfcmVhZF9yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0zODEtXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzozODI6c3RhdGljIGlubGluZSBib29sIGlvbWFwX2Jsb2NrX25lZWRzX3plcm9pbmcoY29uc3Qgc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0zODMtXFx0XFx0bG9mZl90IHBvcylcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9NTU3PXN0YXRpYyBpbnQgaW9tYXBfcmVhZF9mb2xpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy02MDktXFx0XFx0XFx0aW9tYXBfc2V0X3JhbmdlX3VwdG9kYXRlKGZvbGlvLCBwb2ZmLCBwbGVuKTtcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjYxMDpcXHRcXHR9IGVsc2UgaWYgKGlvbWFwX2Jsb2NrX25lZWRzX3plcm9pbmcoaXRlciwgcG9zKSkge1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtNjExLVxcdFxcdFxcdC8qIHplcm8gcG9zdC1lb2YgYmxvY2tzIGFzIHRoZSBwYWdlIG1heSBiZSBtYXBwZWQgKi9cXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9ODc1PXN0YXRpYyBpbnQgX19pb21hcF93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtOTE5LVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6OTIwOlxcdFxcdGlmIChpb21hcF9ibG9ja19uZWVkc196ZXJvaW5nKGl0ZXIsIGJsb2NrX3N0YXJ0KSkge1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtOTIxLVxcdFxcdFxcdGlmIChXQVJOX09OX09OQ0UoaXRlci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT01BUF9VTlNIQVJFKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTE6MTMuMDEyNTk4NjAyWiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NDQxMDgzNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byBgaW9tYXBfYmxvY2tfbmVlZHNfemVyb2luZ2AuIEhlcmUncyB3aGF0IEknbSB0aGlua2luZzpcblxuKipBbmFseXppbmcgYGlvbWFwX2Jsb2NrX25lZWRzX3plcm9pbmdgKipcblxuQWxyaWdodCwgSSdtIHB1bGxpbmcgdXAgdGhlIGNvZGUgZm9yIGBpb21hcF9ibG9ja19uZWVkc196ZXJvaW5nYC4gR2l2ZW4gdGhlIG5hbWUsIEknbSBpbW1lZGlhdGVseSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgYSBzcGVjaWZpYyBibG9jayBuZWVkcyB0byBiZSBleHBsaWNpdGx5IHplcm9lZCBvdXQgYmVmb3JlIGJlaW5nIHdyaXR0ZW4gdG8uIFRoaXMgbGlrZWx5IHJlbGF0ZXMgdG8gaG93IHdlIGhhbmRsZSBzcGFyc2UgZmlsZXMsIGRpcmVjdCBJL08sIGFuZCBwZXJoYXBzIGV2ZW4gdGhpbmdzIGxpa2UgY29weS1vbi13cml0ZSBtZWNoYW5pc21zLCBvciBtYXliZSBldmVuIHNlY3VyaXR5IGNvbmNlcm5zIGFyb3VuZCByZXNpZHVhbCBkYXRhLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGdvaW5nIHRvIGNoZWNrIHRoZSBibG9jayBtYXBwaW5nIHdpdGhpbiB0aGUgSS9PIGNvbnRleHQgYW5kIHRoZSBmaWxlJ3MgbWV0YWRhdGEgdG8gbWFrZSB0aGlzIGRldGVybWluYXRpb24uIEl04oCZcyBnb3QgdG8gY29uc2lkZXIgaWYgdGhlIGJsb2NrIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQgKGxpa2UgYnkgYSBwcmV2aW91cyB3cml0ZSksIG9yIGlmIGl0J3MgYSBcImhvbGVcIiBpbiB0aGUgZmlsZS4gSSBhbHNvIHdvbmRlciBpZiBpdCBmYWN0b3JzIGluIGFueSB1c2VyLXN1cHBsaWVkIGZsYWdzIG9yIGhpbnRzIHByb3ZpZGVkIGR1cmluZyB0aGUgSS9PIG9wZXJhdGlvbiBpdHNlbGYuIEknbGwgbmVlZCB0byBsb29rIGF0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBibG9jayBkZXZpY2UgYW5kIHRoZSBmaWxlc3lzdGVtJ3MgYWxsb2NhdGlvbiBzdHJhdGVneSB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4gTXkgZXhwZXJ0aXNlIGluIHRoaXMgYXJlYSBpcyBzdWNoIHRoYXQgSSB3b3VsZCBndWVzcyB0aGUgdW5kZXJseWluZyBsb2dpYyBpcyB0byBhdm9pZCB1bm5lY2Vzc2FyeSBJL08sIGFuZCB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgYW5kIHNlY3VyaXR5LCBidXQgSSBuZWVkIHRvIHNlZSB0aGUgZGV0YWlscyBvZiBob3cgaXQgYWxsIHdvcmtzLiBJ4oCZbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgY2hlY2tzIGZvciB3aGV0aGVyIHRoZSBibG9jayBpcyBtYXBwZWQsIHdoZXRoZXIgdGhlIGZpbGUgaXMgc3BhcnNlLCBvciBwZXJoYXBzIHdoZXRoZXIgdGhlcmUncyBzb21lIHNwZWNpYWwgZmlsZXN5c3RlbSBmZWF0dXJlIGF0IHBsYXkuIFVuZGVyc3RhbmRpbmcgdGhlIG51YW5jZXMgb2YgdGhpcyBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSBrZXkgdG8gb3B0aW1pemluZyBJL08gaW4gdGhpcyBjb250ZXh0LiBMZXQncyBzZWUgaG93IGl0J3MgaW1wbGVtZW50ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjE3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTE6MTcuOTU2NzA5MjdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzgyLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzgyOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBpb21hcF9ibG9ja19uZWVkc196ZXJvaW5nKGNvbnN0IHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxcbiAzODM6XFx0XFx0XFx0bG9mZl90IHBvcylcXG4gMzg0OlxcdHtcXG4gMzg1OlxcdFxcdGNvbnN0IHN0cnVjdCBpb21hcCAqc3JjbWFwID0gaW9tYXBfaXRlcl9zcmNtYXAoaXRlcik7XFxuIDM4NjpcXHRcXG4gMzg3OlxcdFxcdC8qXFxuIDM4ODpcXHRcXHQgKiBJZiB0aGlzIGJsb2NrIGhhcyBub3QgYmVlbiB3cml0dGVuLCB0aGVyZSdzIG5vdGhpbmcgdG8gcmVhZFxcbiAzODk6XFx0XFx0ICovXFxuIDM5MDpcXHRcXHRpZiAoc3JjbWFwLVxcdTAwM2V0eXBlICE9IElPTUFQX01BUFBFRClcXG4gMzkxOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiAzOTI6XFx0XFxuIDM5MzpcXHRcXHQvKlxcbiAzOTQ6XFx0XFx0ICogTmV3bHkgYWxsb2NhdGVkIGJsb2NrcyBoYXZlIG5vdCBiZWVuIHdyaXR0ZW5cXG4gMzk1OlxcdFxcdCAqL1xcbiAzOTY6XFx0XFx0aWYgKHNyY21hcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT01BUF9GX05FVylcXG4gMzk3OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiAzOTg6XFx0XFxuIDM5OTpcXHRcXHQvKlxcbiA0MDA6XFx0XFx0ICogZnN2ZXJpdHkgbWV0YWRhdGEgaXMgc3RvcmVkIHBhc3QgaV9zaXplLCB3ZSBuZWVkIHRvIHJlYWQgaXQgaW5zdGVhZFxcbiA0MDE6XFx0XFx0ICogb2YgemVyb2luZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMToxNy45NTY4Njc1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1OTAwOTcwNTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgUmVhZHMgaW4gTWluaXggU3ltbGluayBIYW5kbGluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW5pdGlhbCBjb25jZXJuIHdhcyBjZW50ZXJlZCBhcm91bmQgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggc3ltbGlua3MgaW4gdGhlIE1pbml4IGZpbGVzeXN0ZW0uIFRoZSBrZXkgb2JzZXJ2YXRpb24gaXMgdGhhdCB3aGVuIGEgbmV3IGJsb2NrIGlzIGFsbG9jYXRlZCwgYElPTUFQX0ZfTkVXYCBpcyBzZXQsIGFuZCB0aGUgYmxvY2sgaXMgemVyb2VkLiBUaGlzIGlzIGltcG9ydGFudC5cblxuTm93LCBsZXQncyBjb25zaWRlciB0aGUgc3ltbGluayBjYXNlLiBJIGhhZCBhIGh5cG90aGVzaXMgd2hlcmUgYSBzeW1saW5rIGJlaW5nIHdyaXR0ZW4gb3ZlciBhbiBleGlzdGluZyBibG9jayBtaWdodCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBkYXRhLiBIb3dldmVyLCB0aGUgY29kZSBmbG93IGluIGBtaW5peF9zeW1saW5rYCBhbmQgc3Vic2VxdWVudCBjYWxscyB0byBgaW9tYXBfc3ltbGlua193cml0ZWAgbnVsbGlmaWVkIHRoYXQgY29uY2Vybi4gVGhlIHN5bWxpbmsgcHJvY2VzcyBhbGxvY2F0ZXMgYSBuZXcgaW5vZGUgd2l0aCBzaXplIHplcm8gYW5kIHRoZW4gdXNlcyBgaW9tYXBfc3ltbGlua193cml0ZWAgdG8gd3JpdGUgdGhlIHN5bWxpbmsgdGFyZ2V0LiBDcnVjaWFsbHksIHRoZSB0YXJnZXQgaXRzZWxmIGlzIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZywgYW5kIGBpb21hcF9zeW1saW5rX3dyaXRlYCBvbmx5IHdyaXRlcyB1cCB0byBgc3RybGVuKHN5bW5hbWUpYCBieXRlcyBmcm9tIHRoZSB0YXJnZXQuIFRoZSBibG9jayBpcyB6ZXJvZWQgYXMgYSBzaWRlIGVmZmVjdC4gVGhlcmVmb3JlLCBubyB1bmluaXRpYWxpemVkIGRhdGEgaXMgd3JpdHRlbiB0byB0aGUgZGlzay5cblxuVGhlIGZvY3VzIHRoZW4gc2hpZnRlZCB0byBob3cgYSBzeW1saW5rIGlzIHJlYWQuIFRoYXQgcGF0aCBsZWQgbWUgdG8gdGhlIGBwYWdlX2dldF9saW5rYCBmdW5jdGlvbiwgd2hpY2gsIGFzIGEgc3ltbGluayBoYW5kbGVyLCBwdWxscyBmcm9tIHRoZSBwYWdlIGNhY2hlLiBJcyB0aGF0IGZ1bmN0aW9uIGRlc2lnbmVkIHRvIGhhbmRsZSBhIG51bGwtdGVybWluYXRlZCBzdHJpbmc/IFRoaXMgaXMgd2hlcmUgdGhlIGlzc3VlIG1pZ2h0IGJlLiBCdXQsIHRoZSBleGlzdGluZyB3cml0ZSBwYXRoIHplcm8tZmlsbHMgdGhlIHJlc3Qgb2YgdGhlIHBhZ2UuIFNvLCBpZiB0aGUgbGluayBpcyBzaG9ydGVyIHRoYW4gdGhlIHBhZ2Ugc2l6ZSwgaXQgd2lsbCBzdGlsbCBhcHBlYXIgbnVsbC10ZXJtaW5hdGVkLiBUaGlzIGluZGljYXRlcyB0aGF0IGl0J3Mgc2FmZS5cblxuTGV0J3MgbG9vayBhdCB0aGUgb3RoZXIgY29kZSBwYXRocyBsaWtlIHRoZSBgbWluaXhfZmlsZV93cml0ZV9pdGVyYCwgYG1pbml4X3dyaXRlcGFnZXNgLCBgbWluaXhfcmVhZF9mb2xpb2AsIGFuZCBgbWluaXhfcmVhZGFoZWFkYCBmdW5jdGlvbnMgdG8gdmVyaWZ5IHRoYXQgYW55IHJlbWFpbmluZyByZWFkLXJlbGF0ZWQgaXNzdWVzIGFyZSBoYW5kbGVkIGJ5IHRoZSBzdGFuZGFyZCBwcm9jZWR1cmVzLCBzdWNoIGFzIGJ1ZmZlciBhbmQgd3JpdGViYWNrIGZsb3dzLCBvciBieSB1c2VyLXNwYWNlIGlucHV0IHZhbGlkYXRpb24uIFRoZXNlIGFyZSBnZW5lcmljIEkvTyBwYXRocywgYW5kIGRhdGEgY29tZXMgZnJvbSBlaXRoZXIgdGhlIHVzZXIgc3BhY2Ugb3IgYmxvY2sgbGF5ZXIsIGFuZCBpbiBlaXRoZXIgY2FzZSwgdGhlIGRhdGEgc2hvdWxkIGJlIHNhZmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzE2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU3NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjExOjMzLjg1Nzg0MTQ0N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc4MDEyMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZV9nZXRfbGlua1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvOXAvdmZzX2lub2RlX2RvdGwuYz05MjA9djlmc192ZnNfZ2V0X2xpbmtfZG90bChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jLTkyNy1cXHRpZiAodjlzZXMtXFx1MDAzZWNhY2hlIFxcdTAwMjYgKENBQ0hFX01FVEF8Q0FDSEVfTE9PU0UpKVxcbmZzLzlwL3Zmc19pbm9kZV9kb3RsLmM6OTI4OlxcdFxcdHJldHVybiBwYWdlX2dldF9saW5rKGRlbnRyeSwgaW5vZGUsIGRvbmUpO1xcbmZzLzlwL3Zmc19pbm9kZV9kb3RsLmMtOTI5LVxcbi0tXFxuZnMvYWZmcy9zeW1saW5rLmM9NzI9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYWZmc19zeW1saW5rX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuZnMvYWZmcy9zeW1saW5rLmM6NzM6XFx0LmdldF9saW5rXFx0PSBwYWdlX2dldF9saW5rLFxcbmZzL2FmZnMvc3ltbGluay5jLTc0LVxcdC5zZXRhdHRyXFx0PSBhZmZzX3NldGF0dHIsXFxuLS1cXG5mcy9idHJmcy9pbm9kZS5jPTEwODE1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBidHJmc19zeW1saW5rX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuZnMvYnRyZnMvaW5vZGUuYzoxMDgxNjpcXHQuZ2V0X2xpbmtcXHQ9IHBhZ2VfZ2V0X2xpbmssXFxuZnMvYnRyZnMvaW5vZGUuYy0xMDgxNy1cXHQuZ2V0YXR0clxcdD0gYnRyZnNfZ2V0YXR0cixcXG4tLVxcbmZzL2NvZGEvY25vZGUuYz0yMD1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY29kYV9zeW1saW5rX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuZnMvY29kYS9jbm9kZS5jOjIxOlxcdC5nZXRfbGlua1xcdD0gcGFnZV9nZXRfbGluayxcXG5mcy9jb2RhL2Nub2RlLmMtMjItXFx0LnNldGF0dHJcXHQ9IGNvZGFfc2V0YXR0cixcXG4tLVxcbmZzL2Vyb2ZzL2lub2RlLmM9Mzg3PWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGVyb2ZzX3N5bWxpbmtfaW9wcyA9IHtcXG5mcy9lcm9mcy9pbm9kZS5jOjM4ODpcXHQuZ2V0X2xpbmsgPSBwYWdlX2dldF9saW5rLFxcbmZzL2Vyb2ZzL2lub2RlLmMtMzg5LVxcdC5nZXRhdHRyID0gZXJvZnNfZ2V0YXR0cixcXG4tLVxcbmZzL2V4dDIvc3ltbGluay5jPTI0PWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGV4dDJfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0ge1xcbmZzL2V4dDIvc3ltbGluay5jOjI1OlxcdC5nZXRfbGlua1xcdD0gcGFnZV9nZXRfbGluayxcXG5mcy9leHQyL3N5bWxpbmsuYy0yNi1cXHQuZ2V0YXR0clxcdD0gZXh0Ml9nZXRhdHRyLFxcbi0tXFxuZnMvZjJmcy9uYW1laS5jPTYzND1zdGF0aWMgY29uc3QgY2hhciAqZjJmc19nZXRfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9mMmZzL25hbWVpLmMtNjM3LXtcXG5mcy9mMmZzL25hbWVpLmM6NjM4OlxcdGNvbnN0IGNoYXIgKmxpbmsgPSBwYWdlX2dldF9saW5rKGRlbnRyeSwgaW5vZGUsIGRvbmUpO1xcbmZzL2YyZnMvbmFtZWkuYy02MzktXFxuLS1cXG5mcy9mdXNlL2Rpci5jPTE4NTQ9c3RhdGljIGNvbnN0IGNoYXIgKmZ1c2VfZ2V0X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZnVzZS9kaXIuYy0xODY1LVxcdGlmIChmYy1cXHUwMDNlY2FjaGVfc3ltbGlua3MpXFxuZnMvZnVzZS9kaXIuYzoxODY2OlxcdFxcdHJldHVybiBwYWdlX2dldF9saW5rX3JhdyhkZW50cnksIGlub2RlLCBjYWxsYmFjayk7XFxuZnMvZnVzZS9kaXIuYy0xODY3LVxcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jPTQ0ND1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgaGZzcGx1c19zeW1saW5rX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuZnMvaGZzcGx1cy9pbm9kZS5jOjQ0NTpcXHQuZ2V0X2xpbmtcXHQ9IHBhZ2VfZ2V0X2xpbmssXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTQ0Ni1cXHQuc2V0YXR0clxcdD0gaGZzcGx1c19zZXRhdHRyLFxcbi0tXFxuZnMvamZzL3N5bWxpbmsuYz0xNz1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBqZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0ge1xcbmZzL2pmcy9zeW1saW5rLmM6MTg6XFx0LmdldF9saW5rXFx0PSBwYWdlX2dldF9saW5rLFxcbmZzL2pmcy9zeW1saW5rLmMtMTktXFx0LnNldGF0dHJcXHQ9IGpmc19zZXRhdHRyLFxcbi0tXFxuZnMvbWluaXgvaW5vZGUuYz01Njk9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG5mcy9taW5peC9pbm9kZS5jOjU3MDpcXHQuZ2V0X2xpbmtcXHQ9IHBhZ2VfZ2V0X2xpbmssXFxuZnMvbWluaXgvaW5vZGUuYy01NzEtXFx0LmdldGF0dHJcXHQ9IG1pbml4X2dldGF0dHIsXFxuLS1cXG5mcy9uYW1laS5jPTY0NTI9RVhQT1JUX1NZTUJPTCh2ZnNfZ2V0X2xpbmspO1xcbi0tXFxuZnMvbmFtZWkuYy02NDU0LS8qIGdldCB0aGUgbGluayBjb250ZW50cyBpbnRvIHBhZ2VjYWNoZSAqL1xcbmZzL25hbWVpLmM6NjQ1NTpzdGF0aWMgY2hhciAqX19wYWdlX2dldF9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcXG5mcy9uYW1laS5jLTY0NTYtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGVsYXllZF9jYWxsICpjYWxsYmFjaylcXG4tLVxcbmZzL25hbWVpLmMtNjQ3OC1cXG5mcy9uYW1laS5jOjY0Nzk6Y29uc3QgY2hhciAqcGFnZV9nZXRfbGlua19yYXcoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbmZzL25hbWVpLmMtNjQ4MC1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGVsYXllZF9jYWxsICpjYWxsYmFjaylcXG5mcy9uYW1laS5jLTY0ODEte1xcbmZzL25hbWVpLmM6NjQ4MjpcXHRyZXR1cm4gX19wYWdlX2dldF9saW5rKGRlbnRyeSwgaW5vZGUsIGNhbGxiYWNrKTtcXG5mcy9uYW1laS5jLTY0ODMtfVxcbmZzL25hbWVpLmM6NjQ4NDpFWFBPUlRfU1lNQk9MX0dQTChwYWdlX2dldF9saW5rX3Jhdyk7XFxuZnMvbmFtZWkuYy02NDg1LVxcbmZzL25hbWVpLmMtNjQ4Ni0vKipcXG5mcy9uYW1laS5jOjY0ODc6ICogcGFnZV9nZXRfbGluaygpIC0gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIGdldF9saW5rIGlub2RlX29wZXJhdGlvbi5cXG5mcy9uYW1laS5jLTY0ODgtICogQGRlbnRyeTogVGhlIGRpcmVjdG9yeSBlbnRyeSB3aGljaCBpcyB0aGUgc3ltbGluay5cXG4tLVxcbmZzL25hbWVpLmMtNjQ5Ni0gKi9cXG5mcy9uYW1laS5jOjY0OTc6Y29uc3QgY2hhciAqcGFnZV9nZXRfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvbmFtZWkuYy02NDk4LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBkZWxheWVkX2NhbGwgKmNhbGxiYWNrKVxcbmZzL25hbWVpLmMtNjQ5OS17XFxuZnMvbmFtZWkuYzo2NTAwOlxcdGNoYXIgKmthZGRyID0gX19wYWdlX2dldF9saW5rKGRlbnRyeSwgaW5vZGUsIGNhbGxiYWNrKTtcXG5mcy9uYW1laS5jLTY1MDEtXFxuLS1cXG5mcy9uYW1laS5jLTY1MDUtfVxcbmZzL25hbWVpLmM6NjUwNjpFWFBPUlRfU1lNQk9MKHBhZ2VfZ2V0X2xpbmspO1xcbmZzL25hbWVpLmMtNjUwNy1cXG4tLVxcbmZzL25hbWVpLmMtNjUxMS0gKlxcbmZzL25hbWVpLmM6NjUxMjogKiBUaGlzIGlzIHVzZWQgaW50ZXJuYWxseSBieSBwYWdlX2dldF9saW5rKCkuICBJdCBpcyBleHBvcnRlZCBmb3IgdXNlXFxuZnMvbmFtZWkuYzo2NTEzOiAqIGJ5IGZpbGVzeXN0ZW1zIHdoaWNoIG5lZWQgdG8gaW1wbGVtZW50IGEgdmFyaWFudCBvZiBwYWdlX2dldF9saW5rKClcXG5mcy9uYW1laS5jLTY1MTQtICogdGhlbXNlbHZlcy4gIERlc3BpdGUgdGhlIGFwcGFyZW50IHN5bW1ldHJ5LCBmaWxlc3lzdGVtcyB3aGljaCB1c2VcXG5mcy9uYW1laS5jOjY1MTU6ICogcGFnZV9nZXRfbGluaygpIGRvIG5vdCBuZWVkIHRvIGNhbGwgcGFnZV9wdXRfbGluaygpLlxcbmZzL25hbWVpLmMtNjUxNi0gKlxcbi0tXFxuZnMvbmFtZWkuYz02NTI4PWludCBwYWdlX3JlYWRsaW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwgaW50IGJ1ZmxlbilcXG4tLVxcbmZzL25hbWVpLmMtNjUzMy1cXHRERUZJTkVfREVMQVlFRF9DQUxMKGRvbmUpO1xcbmZzL25hbWVpLmM6NjUzNDpcXHRsaW5rID0gcGFnZV9nZXRfbGluayhkZW50cnksIGRfaW5vZGUoZGVudHJ5KSwgXFx1MDAyNmRvbmUpO1xcbmZzL25hbWVpLmMtNjUzNS1cXHRyZXMgPSBQVFJfRVJSKGxpbmspO1xcbi0tXFxuZnMvbmFtZWkuYz02NTc4PWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHBhZ2Vfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0ge1xcbmZzL25hbWVpLmM6NjU3OTpcXHQuZ2V0X2xpbmtcXHQ9IHBhZ2VfZ2V0X2xpbmssXFxuZnMvbmFtZWkuYy02NTgwLX07XFxuLS1cXG5mcy9uaWxmczIvbmFtZWkuYz01ODQ9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbmlsZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0ge1xcbmZzL25pbGZzMi9uYW1laS5jOjU4NTpcXHQuZ2V0X2xpbmtcXHQ9IHBhZ2VfZ2V0X2xpbmssXFxuZnMvbmlsZnMyL25hbWVpLmMtNTg2LVxcdC5wZXJtaXNzaW9uICAgICA9IG5pbGZzX3Blcm1pc3Npb24sXFxuLS1cXG5mcy9vY2ZzMi9zeW1saW5rLmM9ODQ9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgb2NmczJfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0ge1xcbmZzL29jZnMyL3N5bWxpbmsuYzo4NTpcXHQuZ2V0X2xpbmtcXHQ9IHBhZ2VfZ2V0X2xpbmssXFxuZnMvb2NmczIvc3ltbGluay5jLTg2LVxcdC5nZXRhdHRyXFx0PSBvY2ZzMl9nZXRhdHRyLFxcbi0tXFxuZnMvc3F1YXNoZnMvc3ltbGluay5jPTEwNT1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBzcXVhc2hmc19zeW1saW5rX2lub2RlX29wcyA9IHtcXG5mcy9zcXVhc2hmcy9zeW1saW5rLmM6MTA2OlxcdC5nZXRfbGluayA9IHBhZ2VfZ2V0X2xpbmssXFxuZnMvc3F1YXNoZnMvc3ltbGluay5jLTEwNy1cXHQubGlzdHhhdHRyID0gc3F1YXNoZnNfbGlzdHhhdHRyXFxuLS1cXG5mcy91ZGYvc3ltbGluay5jPTE2OD1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB1ZGZfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0ge1xcbmZzL3VkZi9zeW1saW5rLmM6MTY5OlxcdC5nZXRfbGlua1xcdD0gcGFnZV9nZXRfbGluayxcXG5mcy91ZGYvc3ltbGluay5jLTE3MC1cXHQuZ2V0YXR0clxcdD0gdWRmX3N5bWxpbmtfZ2V0YXR0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTE6MzMuOTM1NjQ4MjYzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NzA2NDc2ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwncyBOYW1lIFJlc29sdXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhvc2UgZmlsZSBwYXRoIGxvb2t1cHMuIEknbSBnb2luZyB0byBzdGFydCBieSByZWFkaW5nIHRoZSBgX19wYWdlX2dldF9saW5rYCBmdW5jdGlvbiwgd2hpY2ggcmVzaWRlcyBpbiBgZnMvbmFtZWkuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIG9yIGF0IGxlYXN0IGEgY3J1Y2lhbCBwYXJ0IG9mIHRoZSBtYWdpYywgaW4gbGlua2luZyBhIGZpbGUgbmFtZSB0byBpdHMgYXNzb2NpYXRlZCBpbm9kZS4gSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIGludm9sdmVkIGluIG5hdmlnYXRpbmcgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUsIGxpa2VseSBkZWFsaW5nIHdpdGggaG93IGRpcmVjdG9yeSBlbnRyaWVzIGFyZSBhY2Nlc3NlZCBhbmQgcG90ZW50aWFsbHkgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSB1bmRlcmx5aW5nIHBhZ2UgY2FjaGUuIEkgaW1hZ2luZSB0aGVyZSBpcyBzb21lIGludGVyYWN0aW9uIHdpdGggdGhlIGJ1ZmZlciBjYWNoZSB0b28sIGJ1dCBJJ2xsIHNlZSB3aGVuIEkgcmVhZCBpdC4gTGV0J3Mgc2VlIGhvdyBpdCBnZXRzIGV4ZWN1dGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDY0NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjExOjM3LjYwNjI5OTQzNloiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODA4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvbmFtZWkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NDU1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2NDU1OlxcdHN0YXRpYyBjaGFyICpfX3BhZ2VfZ2V0X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbjY0NTY6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGVsYXllZF9jYWxsICpjYWxsYmFjaylcXG42NDU3OlxcdHtcXG42NDU4OlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuNjQ1OTpcXHRcXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLVxcdTAwM2VpX21hcHBpbmc7XFxuNjQ2MDpcXHRcXG42NDYxOlxcdFxcdGlmICghZGVudHJ5KSB7XFxuNjQ2MjpcXHRcXHRcXHRmb2xpbyA9IGZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIDApO1xcbjY0NjM6XFx0XFx0XFx0aWYgKElTX0VSUihmb2xpbykpXFxuNjQ2NDpcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUNISUxEKTtcXG42NDY1OlxcdFxcdFxcdGlmICghZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpIHtcXG42NDY2OlxcdFxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuNjQ2NzpcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUNISUxEKTtcXG42NDY4OlxcdFxcdFxcdH1cXG42NDY5OlxcdFxcdH0gZWxzZSB7XFxuNjQ3MDpcXHRcXHRcXHRmb2xpbyA9IHJlYWRfbWFwcGluZ19mb2xpbyhtYXBwaW5nLCAwLCBOVUxMKTtcXG42NDcxOlxcdFxcdFxcdGlmIChJU19FUlIoZm9saW8pKVxcbjY0NzI6XFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9DQVNUKGZvbGlvKTtcXG42NDczOlxcdFxcdH1cXG42NDc0OlxcdFxcdHNldF9kZWxheWVkX2NhbGwoY2FsbGJhY2ssIHBhZ2VfcHV0X2xpbmssIGZvbGlvKTtcXG42NDc1OlxcdFxcdEJVR19PTihtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpIFxcdTAwMjYgX19HRlBfSElHSE1FTSk7XFxuNjQ3NjpcXHRcXHRyZXR1cm4gZm9saW9fYWRkcmVzcyhmb2xpbyk7XFxuNjQ3NzpcXHR9XFxuNjQ3ODpcXHRcXG42NDc5OlxcdGNvbnN0IGNoYXIgKnBhZ2VfZ2V0X2xpbmtfcmF3KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcXG42NDgwOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBkZWxheWVkX2NhbGwgKmNhbGxiYWNrKVxcbjY0ODE6XFx0e1xcbjY0ODI6XFx0XFx0cmV0dXJuIF9fcGFnZV9nZXRfbGluayhkZW50cnksIGlub2RlLCBjYWxsYmFjayk7XFxuNjQ4MzpcXHR9XFxuNjQ4NDpcXHRFWFBPUlRfU1lNQk9MX0dQTChwYWdlX2dldF9saW5rX3Jhdyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjExOjM3LjYwNjg4NDYzNloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTQwMTU4ODczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOlxuXG4qKkRlY29uc3RydWN0aW5nIGBwYWdlX2dldF9saW5rYCBhbmQgRm9saW8gQWRkcmVzc2luZyoqXG5cbkFscmlnaHQsIEknbSBsb29raW5nIGF0IHRoaXMgYF9fcGFnZV9nZXRfbGlua2AgZnVuY3Rpb24gYW5kIGl0J3Mgc3BpdHRpbmcgYmFjayBgZm9saW9fYWRkcmVzcyhmb2xpbylgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBqdXN0IGdpdmluZyB1cyB0aGUgYWRkcmVzcyBhc3NvY2lhdGVkIHdpdGggdGhlIGZvbGlvLiBCdXQgaG9sZCBvbiBhIHNlY29uZC4uLiBpcyBgcGFnZV9nZXRfbGlua2AgYWN0dWFsbHkgKmV4cGVjdGluZyogdGhhdCByZXR1cm5lZCBsaW5rIHRvIGJlIG51bGwtdGVybWluYXRlZD8gVGhhdCBmZWVscyBsaWtlIGEgcG90ZW50aWFsIGdvdGNoYSBJIG5lZWQgdG8gY29uZmlybS4gSXQgbWlnaHQgbm90IGJlIGV4cGxpY2l0bHkgc3RhdGVkLCBzbyBJIG5lZWQgdG8gZ28gYmFjayBhbmQgZXhhbWluZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHBhZ2VfZ2V0X2xpbmtgIGl0c2VsZi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB2ZXJpZnkgaWYgaXQncyByZWx5aW5nIG9uIGEgbnVsbCB0ZXJtaW5hdGlvbiBvciBoYW5kbGluZyBhIGxlbmd0aCBpbiBzb21lIG90aGVyIHdheS4gTGV0J3MgZGlnIGludG8gdGhlIGNvZGUgYW5kIGNsYXJpZnkgdGhpcyBjcnVjaWFsIHBvaW50IHRvIGF2b2lkIGFueSBzdWJ0bGUgbWVtb3J5IGlzc3VlcyBvciBwb3RlbnRpYWwgYnVncyBkb3duIHRoZSBsaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTM0NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTE6NDEuNzQ3MDQ3NTg5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9uYW1laS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY0ODYsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY0ODY6XFx0LyoqXFxuNjQ4NzpcXHQgKiBwYWdlX2dldF9saW5rKCkgLSBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZ2V0X2xpbmsgaW5vZGVfb3BlcmF0aW9uLlxcbjY0ODg6XFx0ICogQGRlbnRyeTogVGhlIGRpcmVjdG9yeSBlbnRyeSB3aGljaCBpcyB0aGUgc3ltbGluay5cXG42NDg5OlxcdCAqIEBpbm9kZTogVGhlIGlub2RlIGZvciB0aGUgc3ltbGluay5cXG42NDkwOlxcdCAqIEBjYWxsYmFjazogVXNlZCB0byBkcm9wIHRoZSByZWZlcmVuY2UgdG8gdGhlIHN5bWxpbmsuXFxuNjQ5MTpcXHQgKlxcbjY0OTI6XFx0ICogRmlsZXN5c3RlbXMgd2hpY2ggc3RvcmUgdGhlaXIgc3ltbGlua3MgaW4gdGhlIHBhZ2UgY2FjaGUgc2hvdWxkIHVzZVxcbjY0OTM6XFx0ICogdGhpcyB0byBpbXBsZW1lbnQgdGhlIGdldF9saW5rKCkgbWVtYmVyIG9mIHRoZWlyIGlub2RlX29wZXJhdGlvbnMuXFxuNjQ5NDpcXHQgKlxcbjY0OTU6XFx0ICogUmV0dXJuOiBBIHBvaW50ZXIgdG8gdGhlIE5VTC10ZXJtaW5hdGVkIHN5bWxpbmsuXFxuNjQ5NjpcXHQgKi9cXG42NDk3OlxcdGNvbnN0IGNoYXIgKnBhZ2VfZ2V0X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbjY0OTg6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGRlbGF5ZWRfY2FsbCAqY2FsbGJhY2spXFxuNjQ5OTpcXHR7XFxuNjUwMDpcXHRcXHRjaGFyICprYWRkciA9IF9fcGFnZV9nZXRfbGluayhkZW50cnksIGlub2RlLCBjYWxsYmFjayk7XFxuNjUwMTpcXHRcXG42NTAyOlxcdFxcdGlmICghSVNfRVJSKGthZGRyKSlcXG42NTAzOlxcdFxcdFxcdG5kX3Rlcm1pbmF0ZV9saW5rKGthZGRyLCBpbm9kZS1cXHUwMDNlaV9zaXplLCBQQUdFX1NJWkUgLSAxKTtcXG42NTA0OlxcdFxcdHJldHVybiBrYWRkcjtcXG42NTA1OlxcdH1cXG42NTA2OlxcdEVYUE9SVF9TWU1CT0wocGFnZV9nZXRfbGluayk7XFxuNjUwNzpcXHRcXG42NTA4OlxcdC8qKlxcbjY1MDk6XFx0ICogcGFnZV9wdXRfbGluaygpIC0gRHJvcCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBzeW1saW5rLlxcbjY1MTA6XFx0ICogQGFyZzogVGhlIGZvbGlvIHdoaWNoIGNvbnRhaW5zIHRoZSBzeW1saW5rLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMTo0MS43NDcyODQ0ODlaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY4NDkxMDE4NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgTWluaXggRmlsZXN5c3RlbSBJT01BUCBDb252ZXJzaW9uIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBjb252ZXJ0aW5nIHRoZSBNaW5peCBmaWxlc3lzdGVtIHRvIHVzZSBpb21hcCBhbmQgbXkgcHJpbWFyeSBjb25jZXJuIGlzIHdoZXRoZXIgaXQgaW50cm9kdWNlcyBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3Igd3JpdHRlbi4gRmlyc3QsIEkgc2VlIGBwYWdlX2dldF9saW5rYCBjYWxscyBgbmRfdGVybWluYXRlX2xpbmtgLiBgbmRfdGVybWluYXRlX2xpbmtgIHNob3VsZCBudWxsLXRlcm1pbmF0ZSB0aGUgYnVmZmVyLCBhbmQgdGhhdCBwYXJ0IHNlZW1zIGNvcnJlY3QuIEluIGBtaW5peF9zeW1saW5rYCwgYWZ0ZXIgd3JpdGluZyB0aGUgc3ltbGluayBkYXRhIHRvIGRpc2ssIGBpbm9kZS1cdTAwM2VpX3NpemVgIGlzIHNldCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBzeW1saW5rIHRhcmdldC4gYG5kX3Rlcm1pbmF0ZV9saW5rYCB0aGVuIGVuc3VyZXMgdGhlIG51bGwgdGVybWluYXRvciBpcyBpbiBwbGFjZSwgZWl0aGVyIGZyb20gdGhlIGluaXRpYWwgd3JpdGUgb3IgZnJvbSBgcGFnZV9nZXRfbGlua2AsIHNvIHRoYXQgc2VlbXMgc2FmZS5cblxuTm93LCBpZiBgbWluaXhfc3ltbGlua2AgZmFpbHMgYWZ0ZXIgd3JpdGluZywgaXQgY2xlYW5zIHVwIGFuZCBjYWxscyBgaXB1dGAsIGV0Yy4gLSBhbGwgZ29vZCB0aGVyZS4gYGlgIGlzIHNldCB0byBgc3RybGVuKHN5bW5hbWUpICsgMWAgdG8gYWNjb21tb2RhdGUgZm9yIHRoZSBudWxsIHRlcm1pbmF0b3IuIFRoZSBpbXBvcnRhbnQgcGFydCBpcyB0aGF0IGBpIC0gMWAgaXMgdXNlZCBhcyB0aGUgd3JpdGUgbGVuZ3RoLiBJdCB3cml0ZXMgZXhhY3RseSBgc3RybGVuKHN5bW5hbWUpYCBieXRlcy4gVGhhdCdzIGEgZ29vZCBjaGVjay5cblxuSSdtIG5vdyBsb29raW5nIGF0IHRoZSBicm9hZGVyIGNoYW5nZXMsIGxpa2UgYG1pbml4X3dyaXRlcGFnZXNgIHVzaW5nIGBpb21hcF93cml0ZXBhZ2VzYC4gSXQgYWxzbyBoYXMgYXNzb2NpYXRlZCBjYWxscyB0byBgaW9tYXBfYmlvX3JlYWRfZm9saW9gLCBgaW9tYXBfYmlvX3JlYWRhaGVhZGAsIGBpb21hcF9kaXJ0eV9mb2xpb2AsIGBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvYCwgYW5kIG1vcmUuIGBtaW5peF9pb21hcF9iZWdpbmAgaXMgYWxzbyBhZGRlZC4gSXQgbG9va3MgbGlrZSBgSU9NQVBfRl9ORVdgIGlzIHVzZWQsIHNvIHVud3JpdHRlbiBwYXJ0cyBvZiB0aGUgYmxvY2sgd2lsbCBiZSB6ZXJvZWQsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJJ2QgZXhwZWN0LiBUaGUga2V5IGhlcmUgaXMsIGlmIGBJT01BUF9XUklURWAgaXNuJ3Qgc2V0LCB0aGVuIHRoZSByZXN1bHQgd2lsbCBiZSBhIGhvbGUgYW5kIHRoZSBgaW9tYXBfYmlvX3JlYWRfZm9saW9gIHNob3VsZCBoYW5kbGUgdGhlIHplcm9pbmcgb2YgYSByZWFkIGZyb20gYSBob2xlLiBTbyByZWFkaW5nIGFuIHVuYWxsb2NhdGVkIGJsb2NrIGdldHMgemVyb2VzLlxuXG5OZXh0IHVwLCBgbWluaXhfd3JpdGViYWNrX3JhbmdlYCBsb29rcyBmaW5lIGFzIGl0IGZhbGxzIGJhY2sgdG8gYSBub3JtYWwgd3JpdGViYWNrIHNjZW5hcmlvLiBJbiB0aGUgY2FzZSBvZiBgaW9tYXBfc3ltbGlua193cml0ZWAsIHRoZSBgc3ltbmFtZWAgaXRzZWxmIGlzIGluaXRpYWxpemVkIGZyb20gVkZTIGFuZCB0aHVzIGl0IGlzIHNhZmUuIGBpb21hcF9zeW1saW5rX3dyaXRlYCB3cml0ZXMgYGkgLSAxYCBieXRlcyBhbmQgaSBpcyBgc3RybGVuKHN5bW5hbWUpICsgMWAuIFRoaXMgc2VlbXMgdmVyeSB1bmxpa2VseSB0byByZXN1bHQgaW4gdW5pbml0aWFsaXplZCByZWFkcy5cblxuRm9yIGBtaW5peF9maWxlX3dyaXRlX2l0ZXJgLCB0aGUgY29kZSB1c2VzIGBpb3ZfaXRlciAqZnJvbWAsIHdoaWNoIGNvbWVzIGZyb20gdXNlcnNwYWNlLCBzbyBpZiB0aGUgdXNlciBoYW5kcyBvdmVyIGdhcmJhZ2UsIEtNU0FOIHdpbGwgY2F0Y2ggaXQgYmVmb3JlIHRoZSBmaWxlc3lzdGVtIGdldHMgaXQuIE5vIGlzc3VlcyB0aGVyZS5cblxuTm93LCBJJ20gZXhhbWluaW5nIHRoZSBvdGhlciBjb2RlIGNoYW5nZXMuIFRoZSBjaGFuZ2UgdXNlcyBgaW9tYXBfdHJ1bmNhdGVfcGFnZWAgdG8gemVybyB0aGUgdGFpbCBvZiB0aGUgcGFnZSwgd2hpY2ggaXMgZ29vZC4gVGhpcyBhdm9pZHMgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgZHVyaW5nIGxhdGVyIGV4dGVuc2lvbnMuIEkgc2VlIGBtaW5peF9zZXRhdHRyYCBhbmQgdGhlIHJlbGV2YW50IGNhbGxzIHRvIGB0cnVuY2F0ZV9zZXRzaXplYC4gVGhlIGZhY3QgdGhhdCBgbWluaXhfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zYCBub3cgaW5jbHVkZXMgYC5zZXRhdHRyID0gbWluaXhfc2V0YXR0cmAgaXMgaW50ZXJlc3RpbmcuIElzIHRoaXMgbmVlZGVkIGZvciB0cnVuY2F0aW9uIG9mIHN5bWxpbmtzPyBMaWtlbHkuIFRoaXMgYWdhaW4gZG9lc24ndCBzZWVtIGxpa2UgaXQgZXhwb3NlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cblRoZSBgbWluaXhfaW9tYXBfYmVnaW5gIGZ1bmN0aW9uIGFwcGVhcnMgdG8gaGFuZGxlIGluaXRpYWxpemF0aW9uIGFuZCBpbmRpcmVjdCBibG9ja3MgaW4gYSBzYWZlIG1hbm5lciwgdXNpbmcgdGhlIGZhbWlsaWFyIGBnZXRfYmxvY2tgIG1ldGhvZG9sb2d5IHRoYXQncyBiZWVuIHJldmlld2VkLiBUaGVyZSBpcyBhIGBibG9ja190b19wYXRoYCBhbmQgYGdldF9icmFuY2hgIHRoYXQgaGFuZGxlcyBpbml0aWFsaXphdGlvbiwgbGlrZSB0aGUgb2xkIGNvZGUuIFN0aWxsIG5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuXG5cbkknbSBnb2luZyB0aHJvdWdoIGBpb21hcF9zeW1saW5rX3dyaXRlYC4gSSBjYW4gc2VlIHRoYXQgdGhpcyB1c2VzIHN0YWNrIHZhcmlhYmxlcywgYW5kIGBpb3ZfaXRlcl9rdmVjYCBpbml0aWFsaXplcyB0aGVtLiBTbywgZnVsbHkgaW5pdGlhbGl6ZWQuIE5vIHByb2JsZW1zLiBgbWluaXhfd3JpdGVwYWdlc2AgYWxzbyBpcyBzYWZlIGFzIGl0J3MgY29ycmVjdGx5IGluaXRpYWxpemluZyB0aGUgYHdwY2Agc3RydWN0LiBgbWluaXhfZmlsZV93cml0ZV9pdGVyYCBpcyBzYWZlIHRvby5cblxuT3ZlcmFsbCwgdGhpcyBwYXRjaCBzZWVtcyBsaWtlIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBjb252ZXJzaW9uIHRvIGlvbWFwLiBJdCBkb2Vzbid0IGFwcGVhciB0byBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMuIFRoZSBjb2RlIGlzIGNhcmVmdWxseSBoYW5kbGluZyBhbGxvY2F0aW9ucyBhbmQgcmVhZHMgYW5kIHdyaXRlcyB0byBlbnN1cmUgdGhhdCBtZW1vcnkgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIEtBU0FOIGlzIHN1ZmZpY2llbnQgZm9yIHRoaXMgcGF0Y2ggYXMgaXQgY2F0Y2hlcyBvdXQgb2YgYm91bmRzIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzLiBJIGRvbid0IHNlZSBhbnkgbmVlZCBmb3IgS01TQU4uIFRoZSBjcml0aWNhbCBwYXJ0IGlzIHRvIGRvdWJsZSBjaGVjayBgaW9tYXBfc3ltbGlua193cml0ZWAsIHRvIG1ha2Ugc3VyZSB0aGF0IGl0J3Mgc2FmZSB0byB1c2UgYWNyb3NzIGZpbGVzeXN0ZW1zLiBUaGUgbGVuIHBhcmFtZXRlciBzaG91bGQgYmUgYHN0cmxlbih0YXJnZXQpICsgMWAsIGFuZCBpZiB0aGUgbGVuZ3RoIGlzIGBzdHJsZW4odGFyZ2V0KWAgdGhlIGZpbGUgd2lsbCBiZSB0cnVuY2F0ZWQuIFRoZSBvdGhlciBmaWxlc3lzdGVtcyBhcmUgdGFraW5nIGBsZW5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDUxLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk2OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjEyOjA4LjU5NjM4ODgyNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA0Njk5OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZV9zeW1saW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9iZWZzL2xpbnV4dmZzLmM9Mjk5PXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmJlZnNfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubylcXG4tLVxcbmZzL2JlZnMvbGludXh2ZnMuYy00MDEtXFx0XFx0aWYgKGJlZnNfaW5vLVxcdTAwM2VpX2ZsYWdzIFxcdTAwMjYgQkVGU19MT05HX1NZTUxJTkspIHtcXG5mcy9iZWZzL2xpbnV4dmZzLmM6NDAyOlxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNnBhZ2Vfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xcbmZzL2JlZnMvbGludXh2ZnMuYy00MDMtXFx0XFx0XFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcXG4tLVxcbmZzL2NyYW1mcy9pbm9kZS5jPTkwPXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmdldF9jcmFtZnNfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2NyYW1mcy9pbm9kZS5jLTExNS1cXHRjYXNlIFNfSUZMTks6XFxuZnMvY3JhbWZzL2lub2RlLmM6MTE2OlxcdFxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNnBhZ2Vfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xcbmZzL2NyYW1mcy9pbm9kZS5jLTExNy1cXHRcXHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xcbi0tXFxuZnMvZXh0Mi9uYW1laS5jPTE1NT1zdGF0aWMgaW50IGV4dDJfc3ltbGluayAoc3RydWN0IG1udF9pZG1hcCAqIGlkbWFwLCBzdHJ1Y3QgaW5vZGUgKiBkaXIsXFxuLS1cXG5mcy9leHQyL25hbWVpLmMtMTc5LVxcdFxcdGlub2RlLVxcdTAwM2VpX21hcHBpbmctXFx1MDAzZWFfb3BzID0gXFx1MDAyNmV4dDJfYW9wcztcXG5mcy9leHQyL25hbWVpLmM6MTgwOlxcdFxcdGVyciA9IHBhZ2Vfc3ltbGluayhpbm9kZSwgc3ltbmFtZSwgbCk7XFxuZnMvZXh0Mi9uYW1laS5jLTE4MS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTE0MjM9c3RhdGljIGludCB3cml0ZV9lbmRfZm4oaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy0xNDM4LSAqIFdlIG5lZWQgdG8gcGljayB1cCB0aGUgbmV3IGlub2RlIHNpemUgd2hpY2ggZ2VuZXJpY19jb21taXRfd3JpdGUgZ2F2ZSB1c1xcbmZzL2V4dDQvaW5vZGUuYzoxNDM5OiAqIGBpb2NiYCBjYW4gYmUgTlVMTCAtIGVnLCB3aGVuIGNhbGxlZCBmcm9tIHBhZ2Vfc3ltbGluaygpLlxcbmZzL2V4dDQvaW5vZGUuYy0xNDQwLSAqL1xcbi0tXFxuZnMvZjJmcy9uYW1laS5jPTY0OT1zdGF0aWMgaW50IGYyZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9mMmZzL25hbWVpLmMtNjk0LVxcbmZzL2YyZnMvbmFtZWkuYzo2OTU6XFx0ZXJyID0gcGFnZV9zeW1saW5rKGlub2RlLCBkaXNrX2xpbmsubmFtZSwgZGlza19saW5rLmxlbik7XFxuZnMvZjJmcy9uYW1laS5jLTY5Ni1cXG4tLVxcbmZzL2hmc3BsdXMvZGlyLmM9NDYzPXN0YXRpYyBpbnQgaGZzcGx1c19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL2hmc3BsdXMvZGlyLmMtNDc3LVxcbmZzL2hmc3BsdXMvZGlyLmM6NDc4OlxcdHJlcyA9IHBhZ2Vfc3ltbGluayhpbm9kZSwgc3ltbmFtZSwgc3RybGVuKHN5bW5hbWUpICsgMSk7XFxuZnMvaGZzcGx1cy9kaXIuYy00NzktXFx0aWYgKHJlcylcXG4tLVxcbmZzL2hwZnMvaW5vZGUuYz00ND12b2lkIGhwZnNfcmVhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmkpXFxuLS1cXG5mcy9ocGZzL2lub2RlLmMtNzktXFx0XFx0XFx0aS1cXHUwMDNlaV9tb2RlID0gU19JRkxOSyB8IDA3Nzc7XFxuZnMvaHBmcy9pbm9kZS5jOjgwOlxcdFxcdFxcdGktXFx1MDAzZWlfb3AgPSBcXHUwMDI2cGFnZV9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7XFxuZnMvaHBmcy9pbm9kZS5jLTgxLVxcdFxcdFxcdGlub2RlX25vaGlnaG1lbShpKTtcXG4tLVxcbmZzL2hwZnMvbmFtZWkuYz0yOTI9c3RhdGljIGludCBocGZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvaHBmcy9uYW1laS5jLTMzNy1cXHRpbm9kZV9ub2hpZ2htZW0ocmVzdWx0KTtcXG5mcy9ocGZzL25hbWVpLmM6MzM4OlxcdHJlc3VsdC1cXHUwMDNlaV9vcCA9IFxcdTAwMjZwYWdlX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucztcXG5mcy9ocGZzL25hbWVpLmMtMzM5LVxcdHJlc3VsdC1cXHUwMDNlaV9kYXRhLmFfb3BzID0gXFx1MDAyNmhwZnNfc3ltbGlua19hb3BzO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM9ODk0PXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTkzOS1cXHRcXHRjYXNlIFNfSUZMTks6XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTQwOlxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNnBhZ2Vfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk0MS1cXHRcXHRcXHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM9MTAwMT1zdGF0aWMgaW50IGh1Z2V0bGJmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTAxMS1cXHRcXHRpbnQgbCA9IHN0cmxlbihzeW1uYW1lKSsxO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEwMTI6XFx0XFx0ZXJyb3IgPSBwYWdlX3N5bWxpbmsoaW5vZGUsIHN5bW5hbWUsIGwpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwMTMtXFx0XFx0aWYgKCFlcnJvcilcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmM9MTI3MD1zdGF0aWMgaW50IGlzb2ZzX3JlYWRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHJlbG9jYXRlZClcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtMTQ0NS1cXHR9IGVsc2UgaWYgKFNfSVNMTksoaW5vZGUtXFx1MDAzZWlfbW9kZSkpIHtcXG5mcy9pc29mcy9pbm9kZS5jOjE0NDY6XFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2cGFnZV9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7XFxuZnMvaXNvZnMvaW5vZGUuYy0xNDQ3LVxcdFxcdGlub2RlX25vaGlnaG1lbShpbm9kZSk7XFxuLS1cXG5mcy9qZnMvaW5vZGUuYz0yND1zdHJ1Y3QgaW5vZGUgKmpmc19pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vKVxcbi0tXFxuZnMvamZzL2lub2RlLmMtNDktXFx0XFx0aWYgKGlub2RlLVxcdTAwM2VpX3NpemUgXFx1MDAzZT0gSURBVEFTSVpFKSB7XFxuZnMvamZzL2lub2RlLmM6NTA6XFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2cGFnZV9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7XFxuZnMvamZzL2lub2RlLmMtNTEtXFx0XFx0XFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcXG4tLVxcbmZzL25hbWVpLmM9NjU0MT1FWFBPUlRfU1lNQk9MKHBhZ2VfcmVhZGxpbmspO1xcbmZzL25hbWVpLmMtNjU0Mi1cXG5mcy9uYW1laS5jOjY1NDM6aW50IHBhZ2Vfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpzeW1uYW1lLCBpbnQgbGVuKVxcbmZzL25hbWVpLmMtNjU0NC17XFxuLS1cXG5mcy9uYW1laS5jLTY1NzUtfVxcbmZzL25hbWVpLmM6NjU3NjpFWFBPUlRfU1lNQk9MKHBhZ2Vfc3ltbGluayk7XFxuZnMvbmFtZWkuYy02NTc3LVxcbmZzL25hbWVpLmM6NjU3ODpjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBwYWdlX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG5mcy9uYW1laS5jLTY1NzktXFx0LmdldF9saW5rXFx0PSBwYWdlX2dldF9saW5rLFxcbmZzL25hbWVpLmMtNjU4MC19O1xcbmZzL25hbWVpLmM6NjU4MTpFWFBPUlRfU1lNQk9MKHBhZ2Vfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zKTtcXG4tLVxcbmZzL25pbGZzMi9uYW1laS5jPTE0MT1zdGF0aWMgaW50IG5pbGZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvbmlsZnMyL25hbWVpLmMtMTY4LVxcdGlub2RlLVxcdTAwM2VpX21hcHBpbmctXFx1MDAzZWFfb3BzID0gXFx1MDAyNm5pbGZzX2FvcHM7XFxuZnMvbmlsZnMyL25hbWVpLmM6MTY5OlxcdGVyciA9IHBhZ2Vfc3ltbGluayhpbm9kZSwgc3ltbmFtZSwgbCk7XFxuZnMvbmlsZnMyL25hbWVpLmMtMTcwLVxcdGlmIChlcnIpXFxuLS1cXG5mcy9uaWxmczIvbmFtZWkuYy0xNzMtXFx0LyogbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7ICovXFxuZnMvbmlsZnMyL25hbWVpLmM6MTc0OlxcdC8qIHBhZ2Vfc3ltbGluaygpIGRvIHRoaXMgKi9cXG5mcy9uaWxmczIvbmFtZWkuYy0xNzUtXFxuLS1cXG5mcy9xbng0L2lub2RlLmM9MjgzPXN0cnVjdCBpbm9kZSAqcW54NF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vKVxcbi0tXFxuZnMvcW54NC9pbm9kZS5jLTMzNy1cXHR9IGVsc2UgaWYgKFNfSVNMTksoaW5vZGUtXFx1MDAzZWlfbW9kZSkpIHtcXG5mcy9xbng0L2lub2RlLmM6MzM4OlxcdFxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNnBhZ2Vfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xcbmZzL3FueDQvaW5vZGUuYy0zMzktXFx0XFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcXG4tLVxcbmZzL3FueDYvaW5vZGUuYz01MTE9c3RydWN0IGlub2RlICpxbng2X2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgaW5vKVxcbi0tXFxuZnMvcW54Ni9pbm9kZS5jLTU3MS1cXHR9IGVsc2UgaWYgKFNfSVNMTksoaW5vZGUtXFx1MDAzZWlfbW9kZSkpIHtcXG5mcy9xbng2L2lub2RlLmM6NTcyOlxcdFxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNnBhZ2Vfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xcbmZzL3FueDYvaW5vZGUuYy01NzMtXFx0XFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcXG4tLVxcbmZzL3JhbWZzL2lub2RlLmM9NTc9c3RydWN0IGlub2RlICpyYW1mc19nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL3JhbWZzL2lub2RlLmMtODQtXFx0XFx0Y2FzZSBTX0lGTE5LOlxcbmZzL3JhbWZzL2lub2RlLmM6ODU6XFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2cGFnZV9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7XFxuZnMvcmFtZnMvaW5vZGUuYy04Ni1cXHRcXHRcXHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xcbi0tXFxuZnMvcmFtZnMvaW5vZGUuYz0xMzY9c3RhdGljIGludCByYW1mc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL3JhbWZzL2lub2RlLmMtMTUzLVxcbmZzL3JhbWZzL2lub2RlLmM6MTU0OlxcdFxcdGVycm9yID0gcGFnZV9zeW1saW5rKGlub2RlLCBzeW1uYW1lLCBsKTtcXG5mcy9yYW1mcy9pbm9kZS5jLTE1NS1cXHRcXHRpZiAoIWVycm9yKSB7XFxuLS1cXG5mcy9yb21mcy9zdXBlci5jPTI3Mz1zdGF0aWMgc3RydWN0IGlub2RlICpyb21mc19pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgcG9zKVxcbi0tXFxuZnMvcm9tZnMvc3VwZXIuYy0zNDMtXFx0Y2FzZSBST01GSF9TWU06XFxuZnMvcm9tZnMvc3VwZXIuYzozNDQ6XFx0XFx0aS1cXHUwMDNlaV9vcCA9IFxcdTAwMjZwYWdlX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucztcXG5mcy9yb21mcy9zdXBlci5jLTM0NS1cXHRcXHRpbm9kZV9ub2hpZ2htZW0oaSk7XFxuLS1cXG5mcy91ZnMvaW5vZGUuYz01MjA9c3RhdGljIHZvaWQgdWZzX3NldF9pbm9kZV9vcHMoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL3Vmcy9pbm9kZS5jLTUzNS1cXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLVxcdTAwM2VhX29wcyA9IFxcdTAwMjZ1ZnNfYW9wcztcXG5mcy91ZnMvaW5vZGUuYzo1MzY6XFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2cGFnZV9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7XFxuZnMvdWZzL2lub2RlLmMtNTM3LVxcdFxcdFxcdGlub2RlX25vaGlnaG1lbShpbm9kZSk7XFxuLS1cXG5mcy91ZnMvbmFtZWkuYz0xMDg9c3RhdGljIGludCB1ZnNfc3ltbGluayAoc3RydWN0IG1udF9pZG1hcCAqIGlkbWFwLCBzdHJ1Y3QgaW5vZGUgKiBkaXIsXFxuLS1cXG5mcy91ZnMvbmFtZWkuYy0xMjUtXFx0XFx0Lyogc2xvdyBzeW1saW5rICovXFxuZnMvdWZzL25hbWVpLmM6MTI2OlxcdFxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNnBhZ2Vfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xcbmZzL3Vmcy9uYW1laS5jLTEyNy1cXHRcXHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xcbmZzL3Vmcy9uYW1laS5jLTEyOC1cXHRcXHRpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLVxcdTAwM2VhX29wcyA9IFxcdTAwMjZ1ZnNfYW9wcztcXG5mcy91ZnMvbmFtZWkuYzoxMjk6XFx0XFx0ZXJyID0gcGFnZV9zeW1saW5rKGlub2RlLCBzeW1uYW1lLCBsKTtcXG5mcy91ZnMvbmFtZWkuYy0xMzAtXFx0XFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTI6MDguNjc2ODY3NTcyWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwNzY4OTYyMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTWluaXggRmlsZXN5c3RlbSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZXhhbWluZWQgdGhpcyBwYXRjaCBjb252ZXJ0aW5nIHRoZSBNaW5peCBmaWxlc3lzdGVtIHRvIGBpb21hcGAgYnVmZmVyZWQgSS9PLCBkaXRjaGluZyB0aGUgb2xkIGBidWZmZXJfaGVhZGAtYmFzZWQgYmxvY2sgSS9PLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGBpb21hcF9zeW1saW5rX3dyaXRlYC4gTXkgaW5pdGlhbCBjb25jZXJuLCBhcyBhbHdheXMsIGlzIGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgcG90ZW50aWFsIGxlYWtzLCBhbmQgY29udHJvbCBmbG93IGlzc3VlcyB0aGF0IGNhbiBpbnRyb2R1Y2UgdnVsbmVyYWJpbGl0aWVzLlxuXG5MZXQncyBicmVhayBpdCBkb3duLiBgaW9tYXBfc3ltbGlua193cml0ZWAncyBiZWhhdmlvciBpcyBjb3JyZWN0LiBJIHNhdyB0aGF0IGBwYWdlX3N5bWxpbmtgIGlzIHVzZWQgd2l0aCBhIGxlbmd0aCBvZiBgc3RybGVuKHN5bW5hbWUpICsgMWAsIGluY2x1ZGluZyB0aGUgbnVsbCB0ZXJtaW5hdG9yLCBidXQgYGlvbWFwX3N5bWxpbmtfd3JpdGVgIGNvcnJlY3RseSBzdWJ0cmFjdHMgdGhhdCBvbmUgYnl0ZSwgc28gaXQgd3JpdGVzIHRoZSBhY3R1YWwgbGVuZ3RoIG9mIHRoZSBzeW1saW5rIHRhcmdldC4gSXQncyBwcm9wZXJseSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIGFuZCBmdWxseSBpbml0aWFsaXplZCBieSB0aGUgVkZTLCBzbyBJIGRvbid0IHNlZSBhbiBpbW1lZGlhdGUgaXNzdWUgdGhlcmUuIEknbSBzYXRpc2ZpZWQgdGhhdCB0aGlzIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IGludHJvZHVjZSBhIHZ1bG5lcmFiaWxpdHkgaGVyZS5cblxuVGhlIHBhdGNoIHNlZW1zIHRvIGJlIHNhZmUgd2l0aCB0aGUgYGlvbWFwX3dyaXRlX2JlZ2luYCBmdW5jdGlvbiwgd2hpY2ggemVyb3Mgb3V0IG5ldyBibG9ja3Mgc2luY2UgYElPTUFQX0ZfTkVXYCBpcyBzZXQgZm9yIG5ldyBibG9ja3MsIGVuc3VyaW5nIHRoYXQgcHJldmlvdXNseSB1bndyaXR0ZW4gZGF0YSBpcyBoYW5kbGVkIGNvcnJlY3RseS4gQW5kIHNpbmNlIHRoZSBzeW1saW5rIGlzIGZ1bGx5IGluaXRpYWxpemVkLCBpdCBjYW4gYmUgaGFuZGxlZCBzYWZlbHkuIFRoZSBgcGFnZV9nZXRfbGlua2AgZnVuY3Rpb24gYWRkcyB0aGUgbnVsbCB0ZXJtaW5hdG9yIGluIG1lbW9yeSB1cG9uIHJlYWRpbmcsIHNvIHRoYXQgaXMgZmluZSBhcyB3ZWxsLlxuXG5UaGUgcmVzdCBvZiB0aGUgcGF0Y2ggcmVwbGFjZXMgc3RhbmRhcmQgcmVhZC93cml0ZS93cml0ZWJhY2sgZnVuY3Rpb25zIHdpdGggdGhlaXIgYGlvbWFwYCBjb3VudGVycGFydHMuIFRoaXMgc2VlbXMgdG8gYmUgYSBzdHJhaWdodGZvcndhcmQgc3Vic3RpdHV0aW9uIGFuZCBoYW5kbGVzIHVzZXItc3BhY2UgZGF0YSBhbmQgcGFnZSBjYWNoZSBvcGVyYXRpb25zIGFwcHJvcHJpYXRlbHkuXG5cblNpbmNlIHRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIG5ldyB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciBjb250cm9sIGZsb3cgY2hhbmdlcywgSSdtIGNvbmZpZGVudCB0aGVyZSBhcmUgbm8gbmV3IHZ1bG5lcmFiaWxpdGllcyBoZXJlLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBlcnJvcnMgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgc3BlY2lhbGl6ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzbid0IHdhcnJhbnRlZC4gVGhpcyBwYXRjaCBhcHBlYXJzIHRvIGJlIGEgc2FmZSByZWZhY3RvcmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg4NTcsIk91dHB1dFRva2VucyI6MjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjEyOjE2Ljc1Mzc2Njc1NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29udmVydHMgdGhlIG1pbml4IGZpbGVzeXN0ZW0gdG8gdXNlIGlvbWFwIGZvciBidWZmZXJlZCBJL08sIHJlcGxhY2luZyB0aGUgb2xkZXIgYnVmZmVyX2hlYWQgYmFzZWQgYmxvY2sgSS9PIGZ1bmN0aW9ucy4gSXQgaW50cm9kdWNlcyBgaW9tYXBfc3ltbGlua193cml0ZWAgd2hpY2ggd3JpdGVzIHN5bWxpbmsgdGFyZ2V0cyB0byBkaXNrLiBUaGUgc3ltbGluayB0YXJnZXQgaXMgYSBmdWxseSBpbml0aWFsaXplZCBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIHByb3ZpZGVkIGJ5IHRoZSBWRlMuIFRoZSB1bndyaXR0ZW4gcGFydHMgb2YgdGhlIG5ld2x5IGFsbG9jYXRlZCBibG9jayBhcmUgemVyb2VkIGJ5IGBpb21hcF93cml0ZV9iZWdpbmAgKHNpbmNlIGBJT01BUF9GX05FV2AgaXMgc2V0IGZvciBuZXcgYmxvY2tzKS4gV2hlbiByZWFkaW5nIHRoZSBzeW1saW5rLCBgcGFnZV9nZXRfbGlua2AgYWRkcyB0aGUgbnVsbCB0ZXJtaW5hdG9yIGluIG1lbW9yeS4gVGhlIHJlc3Qgb2YgdGhlIHBhdGNoIHJlcGxhY2VzIHN0YW5kYXJkIHJlYWQvd3JpdGUvd3JpdGViYWNrIGZ1bmN0aW9ucyB3aXRoIHRoZWlyIGlvbWFwIGVxdWl2YWxlbnRzLCB3aGljaCBoYW5kbGUgdXNlciBzcGFjZSBkYXRhIGFuZCBwYWdlIGNhY2hlIGNvcnJlY3RseS4gVGhlcmUgYXJlIG5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgaW5mby1sZWFrcywgb3IgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb252ZXJ0cyB0aGUgbWluaXggZmlsZXN5c3RlbSB0byB1c2UgaW9tYXAgZm9yIGJ1ZmZlcmVkIEkvTywgcmVwbGFjaW5nIHRoZSBvbGRlciBidWZmZXJfaGVhZCBiYXNlZCBibG9jayBJL08gZnVuY3Rpb25zLiBJdCBpbnRyb2R1Y2VzIGBpb21hcF9zeW1saW5rX3dyaXRlYCB3aGljaCB3cml0ZXMgc3ltbGluayB0YXJnZXRzIHRvIGRpc2suIFRoZSBzeW1saW5rIHRhcmdldCBpcyBhIGZ1bGx5IGluaXRpYWxpemVkIG51bGwtdGVybWluYXRlZCBzdHJpbmcgcHJvdmlkZWQgYnkgdGhlIFZGUy4gVGhlIHVud3JpdHRlbiBwYXJ0cyBvZiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJsb2NrIGFyZSB6ZXJvZWQgYnkgYGlvbWFwX3dyaXRlX2JlZ2luYCAoc2luY2UgYElPTUFQX0ZfTkVXYCBpcyBzZXQgZm9yIG5ldyBibG9ja3MpLiBXaGVuIHJlYWRpbmcgdGhlIHN5bWxpbmssIGBwYWdlX2dldF9saW5rYCBhZGRzIHRoZSBudWxsIHRlcm1pbmF0b3IgaW4gbWVtb3J5LiBUaGUgcmVzdCBvZiB0aGUgcGF0Y2ggcmVwbGFjZXMgc3RhbmRhcmQgcmVhZC93cml0ZS93cml0ZWJhY2sgZnVuY3Rpb25zIHdpdGggdGhlaXIgaW9tYXAgZXF1aXZhbGVudHMsIHdoaWNoIGhhbmRsZSB1c2VyIHNwYWNlIGRhdGEgYW5kIHBhZ2UgY2FjaGUgY29ycmVjdGx5LiBUaGVyZSBhcmUgbm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBpbmZvLWxlYWtzLCBvciB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdy4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkb9mz[1] Phase: Succeeded StartedAt: 2026-08-26 22:12:28 +0000 UTC FinishedAt: 2026-08-26 22:12:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkb9mz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-26 22:12:28 +0000 UTC FinishedAt: 2026-08-26 22:12:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkb9mz[2] Phase: Succeeded StartedAt: 2026-08-26 22:12:28 +0000 UTC FinishedAt: 2026-08-27 01:53:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkb9mz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_symlink_write","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_file_write_iter","minix_writepages","minix_read_folio","minix_readahead","minix_writeback_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"cc160969-0ec8-4964-9cad-bfc2f2ac1dbb","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-26 22:12:28 +0000 UTC FinishedAt: 2026-08-27 01:53:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_symlink_write","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_file_write_iter","minix_writepages","minix_read_folio","minix_readahead","minix_writeback_range"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"cc160969-0ec8-4964-9cad-bfc2f2ac1dbb","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowkb9mz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_symlink_write","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_file_write_iter","minix_writepages","minix_read_folio","minix_readahead","minix_writeback_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"cc160969-0ec8-4964-9cad-bfc2f2ac1dbb","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-26 22:12:28 +0000 UTC FinishedAt: 2026-08-26 22:12:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkb9mz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_symlink_write","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_file_write_iter","minix_writepages","minix_read_folio","minix_readahead","minix_writeback_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"cc160969-0ec8-4964-9cad-bfc2f2ac1dbb","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-26 22:12:28 +0000 UTC FinishedAt: 2026-08-26 22:12:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkb9mz/series-workflowkb9mz-convert-artifact-955844524/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkb9mz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_symlink_write","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_file_write_iter","minix_writepages","minix_read_folio","minix_readahead","minix_writeback_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"cc160969-0ec8-4964-9cad-bfc2f2ac1dbb","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-26 22:12:38 +0000 UTC FinishedAt: 2026-08-26 22:29:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkb9mz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_symlink_write","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_file_write_iter","minix_writepages","minix_read_folio","minix_readahead","minix_writeback_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"cc160969-0ec8-4964-9cad-bfc2f2ac1dbb","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-26 22:12:38 +0000 UTC FinishedAt: 2026-08-26 22:29:27 +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:*5b54e0fc-1e92-4360-9d4d-d0c33eb538a3,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-workflowkb9mz/series-workflowkb9mz-convert-artifact-955844524/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": "1e2444f1-903c-4b6b-94ad-c3d8d43e4b4f", "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-workflowkb9mz/series-workflowkb9mz-build-action-45878746/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkb9mz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_symlink_write","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_file_write_iter","minix_writepages","minix_read_folio","minix_readahead","minix_writeback_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"cc160969-0ec8-4964-9cad-bfc2f2ac1dbb","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-26 22:12:38 +0000 UTC FinishedAt: 2026-08-26 22:29:17 +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:*5b54e0fc-1e92-4360-9d4d-d0c33eb538a3,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-workflowkb9mz/series-workflowkb9mz-convert-artifact-955844524/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": "1e2444f1-903c-4b6b-94ad-c3d8d43e4b4f", "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-workflowkb9mz/series-workflowkb9mz-build-action-45878746/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkb9mz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_symlink_write","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_file_write_iter","minix_writepages","minix_read_folio","minix_readahead","minix_writeback_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"cc160969-0ec8-4964-9cad-bfc2f2ac1dbb","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-26 22:29:27 +0000 UTC FinishedAt: 2026-08-26 22:29:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkb9mz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_symlink_write","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_file_write_iter","minix_writepages","minix_read_folio","minix_readahead","minix_writeback_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"cc160969-0ec8-4964-9cad-bfc2f2ac1dbb","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-26 22:29:27 +0000 UTC FinishedAt: 2026-08-26 22:29:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkb9mz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_symlink_write","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_file_write_iter","minix_writepages","minix_read_folio","minix_readahead","minix_writeback_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"cc160969-0ec8-4964-9cad-bfc2f2ac1dbb","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-26 22:29:27 +0000 UTC FinishedAt: 2026-08-26 22:29:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkb9mz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_symlink_write","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_file_write_iter","minix_writepages","minix_read_folio","minix_readahead","minix_writeback_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"cc160969-0ec8-4964-9cad-bfc2f2ac1dbb","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-26 22:29:27 +0000 UTC FinishedAt: 2026-08-26 22:29:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"cc160969-0ec8-4964-9cad-bfc2f2ac1dbb","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkb9mz/series-workflowkb9mz-convert-artifact-2095632235/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkb9mz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_symlink_write","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_file_write_iter","minix_writepages","minix_read_folio","minix_readahead","minix_writeback_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"cc160969-0ec8-4964-9cad-bfc2f2ac1dbb","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-26 22:29:37 +0000 UTC FinishedAt: 2026-08-26 22:31:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkb9mz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_symlink_write","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_file_write_iter","minix_writepages","minix_read_folio","minix_readahead","minix_writeback_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"cc160969-0ec8-4964-9cad-bfc2f2ac1dbb","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-26 22:29:37 +0000 UTC FinishedAt: 2026-08-26 22:31:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1e2444f1-903c-4b6b-94ad-c3d8d43e4b4f,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-workflowkb9mz/series-workflowkb9mz-build-action-45878746/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-workflowkb9mz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_symlink_write","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_file_write_iter","minix_writepages","minix_read_folio","minix_readahead","minix_writeback_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"cc160969-0ec8-4964-9cad-bfc2f2ac1dbb","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-26 22:31:38 +0000 UTC FinishedAt: 2026-08-26 22:31:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkb9mz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_symlink_write","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_file_write_iter","minix_writepages","minix_read_folio","minix_readahead","minix_writeback_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"cc160969-0ec8-4964-9cad-bfc2f2ac1dbb","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-26 22:31:38 +0000 UTC FinishedAt: 2026-08-26 22:31:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkb9mz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_symlink_write","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_file_write_iter","minix_writepages","minix_read_folio","minix_readahead","minix_writeback_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"cc160969-0ec8-4964-9cad-bfc2f2ac1dbb","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-26 22:31:38 +0000 UTC FinishedAt: 2026-08-26 22:48:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkb9mz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_symlink_write","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_file_write_iter","minix_writepages","minix_read_folio","minix_readahead","minix_writeback_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"cc160969-0ec8-4964-9cad-bfc2f2ac1dbb","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-26 22:31:38 +0000 UTC FinishedAt: 2026-08-26 22:48:38 +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:*5b54e0fc-1e92-4360-9d4d-d0c33eb538a3,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-workflowkb9mz/series-workflowkb9mz-convert-artifact-2095632235/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": "fdfaa66b-f079-4015-9f77-a4e15067f61c", "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-workflowkb9mz/series-workflowkb9mz-build-action-3676179599/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkb9mz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_symlink_write","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_file_write_iter","minix_writepages","minix_read_folio","minix_readahead","minix_writeback_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"cc160969-0ec8-4964-9cad-bfc2f2ac1dbb","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-26 22:31:38 +0000 UTC FinishedAt: 2026-08-26 22:48:28 +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:*5b54e0fc-1e92-4360-9d4d-d0c33eb538a3,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-workflowkb9mz/series-workflowkb9mz-convert-artifact-2095632235/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": "fdfaa66b-f079-4015-9f77-a4e15067f61c", "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-workflowkb9mz/series-workflowkb9mz-build-action-3676179599/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkb9mz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_symlink_write","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_file_write_iter","minix_writepages","minix_read_folio","minix_readahead","minix_writeback_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"cc160969-0ec8-4964-9cad-bfc2f2ac1dbb","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-26 22:48:38 +0000 UTC FinishedAt: 2026-08-26 22:48:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkb9mz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_symlink_write","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_file_write_iter","minix_writepages","minix_read_folio","minix_readahead","minix_writeback_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"cc160969-0ec8-4964-9cad-bfc2f2ac1dbb","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-26 22:48:38 +0000 UTC FinishedAt: 2026-08-26 22:48:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkb9mz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_symlink_write","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_file_write_iter","minix_writepages","minix_read_folio","minix_readahead","minix_writeback_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"cc160969-0ec8-4964-9cad-bfc2f2ac1dbb","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-26 22:48:38 +0000 UTC FinishedAt: 2026-08-26 22:50:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkb9mz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_symlink_write","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_file_write_iter","minix_writepages","minix_read_folio","minix_readahead","minix_writeback_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"cc160969-0ec8-4964-9cad-bfc2f2ac1dbb","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-26 22:48:38 +0000 UTC FinishedAt: 2026-08-26 22:50:28 +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:*fdfaa66b-f079-4015-9f77-a4e15067f61c,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-workflowkb9mz/series-workflowkb9mz-build-action-3676179599/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-workflowkb9mz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_symlink_write","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_file_write_iter","minix_writepages","minix_read_folio","minix_readahead","minix_writeback_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"cc160969-0ec8-4964-9cad-bfc2f2ac1dbb","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-26 22:50:38 +0000 UTC FinishedAt: 2026-08-27 01:53:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkb9mz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_symlink_write","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_file_write_iter","minix_writepages","minix_read_folio","minix_readahead","minix_writeback_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"cc160969-0ec8-4964-9cad-bfc2f2ac1dbb","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-26 22:50:38 +0000 UTC FinishedAt: 2026-08-27 01:53:57 +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":["iomap_symlink_write","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_file_write_iter","minix_writepages","minix_read_folio","minix_readahead","minix_writeback_range"],"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:*1e2444f1-903c-4b6b-94ad-c3d8d43e4b4f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fdfaa66b-f079-4015-9f77-a4e15067f61c,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-workflowkb9mz/series-workflowkb9mz-build-action-45878746/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-workflowkb9mz/series-workflowkb9mz-build-action-3676179599/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowkb9mz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_symlink_write","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_file_write_iter","minix_writepages","minix_read_folio","minix_readahead","minix_writeback_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"cc160969-0ec8-4964-9cad-bfc2f2ac1dbb","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-26 22:50:38 +0000 UTC FinishedAt: 2026-08-26 22:50:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkb9mz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_symlink_write","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_file_write_iter","minix_writepages","minix_read_folio","minix_readahead","minix_writeback_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"cc160969-0ec8-4964-9cad-bfc2f2ac1dbb","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-26 22:50:38 +0000 UTC FinishedAt: 2026-08-26 22:50:43 +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":["iomap_symlink_write","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_file_write_iter","minix_writepages","minix_read_folio","minix_readahead","minix_writeback_range"],"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-workflowkb9mz/series-workflowkb9mz-convert-artifact-1980665476/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkb9mz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_symlink_write","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_file_write_iter","minix_writepages","minix_read_folio","minix_readahead","minix_writeback_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"cc160969-0ec8-4964-9cad-bfc2f2ac1dbb","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-26 22:50:38 +0000 UTC FinishedAt: 2026-08-26 22:50:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkb9mz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_symlink_write","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_file_write_iter","minix_writepages","minix_read_folio","minix_readahead","minix_writeback_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"cc160969-0ec8-4964-9cad-bfc2f2ac1dbb","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-26 22:50:38 +0000 UTC FinishedAt: 2026-08-26 22:50:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkb9mz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_symlink_write","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_file_write_iter","minix_writepages","minix_read_folio","minix_readahead","minix_writeback_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"cc160969-0ec8-4964-9cad-bfc2f2ac1dbb","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-26 22:50:38 +0000 UTC FinishedAt: 2026-08-26 22:50:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkb9mz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_symlink_write","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_file_write_iter","minix_writepages","minix_read_folio","minix_readahead","minix_writeback_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"cc160969-0ec8-4964-9cad-bfc2f2ac1dbb","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-26 22:50:48 +0000 UTC FinishedAt: 2026-08-27 01:53:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkb9mz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_symlink_write","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_file_write_iter","minix_writepages","minix_read_folio","minix_readahead","minix_writeback_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"cc160969-0ec8-4964-9cad-bfc2f2ac1dbb","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-26 22:50:48 +0000 UTC FinishedAt: 2026-08-27 01:53:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1e2444f1-903c-4b6b-94ad-c3d8d43e4b4f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fdfaa66b-f079-4015-9f77-a4e15067f61c,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-workflowkb9mz/series-workflowkb9mz-build-action-45878746/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-workflowkb9mz/series-workflowkb9mz-build-action-3676179599/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-workflowkb9mz/series-workflowkb9mz-convert-artifact-1980665476/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,}