Name: series-workflowv2lbt Phase: Succeeded StartedAt: 2026-07-16 20:40:25 +0000 UTC FinishedAt: 2026-07-17 01:02:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2lbt[0] Phase: Succeeded StartedAt: 2026-07-16 20:40:25 +0000 UTC FinishedAt: 2026-07-16 20:54:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2lbt[0].run-triage Phase: Succeeded StartedAt: 2026-07-16 20:40:25 +0000 UTC FinishedAt: 2026-07-16 20:54:27 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "e54a39f3fa793aca013f54e42d32dba471c1a224", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "e54a39f3fa793aca013f54e42d32dba471c1a224", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN" ], "series_id": "5f10cbe5-7356-4af9-93ae-66c70da4d7df" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDIwOjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFnZSByZWNsYWltIGhldXJpc3RpY3MgdG8gYWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuIEl0IGFmZmVjdHMgYm90aCBzdGFuZGFyZCBMUlUgYW5kIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYXRocy4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCByZWNsYWltIHBhdGhzIChlLmcuLCBmb2xpb19yZWZlcmVuY2VkLCBzaHJpbmtfYWN0aXZlX2xpc3QpLCB3aGljaCBhcmUgaG90LXBhdGggZnVuY3Rpb25zLCBzbyBubyBzcGVjaWZpYyBmb2N1cyBzeW1ib2xzIGFyZSBwcm92aWRlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAyMDo1MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDhmZjUyODMwOGU4NjdhODg0MTI4ZGM3M2E0OTVlOGE0MTQ4N2NiZjNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAxNiAyMDo1MzowNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuaW5kZXggYjVjNGRjMGYzZmUzMjYuLjMwZmRmMTA1NjMxMjEzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuQEAgLTMwLDYgJiM0MzszMCwxMiBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19pc19maWxlX2xydShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cmV0dXJuICFmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGZvbGlvX2lzX2V4ZWNfZmlsZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuJiM0MztcdFx0Y29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB2bWFfZmxhZ3NfdGVzdCh2bWFfZmxhZ3MsIFZNQV9FWEVDX0JJVCkgXHUwMDI2XHUwMDI2IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX191cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRcdFx0ZW51bSBscnVfbGlzdCBscnUsIGVudW0gem9uZV90eXBlIHppZCxcbiBcdFx0XHRcdGxvbmcgbnJfcGFnZXMpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ybWFwLmggYi9pbmNsdWRlL2xpbnV4L3JtYXAuaFxuaW5kZXggOGRjMDg3MWU1ZjAwMTEuLmUwOTBhYTA5ODI1ZDUyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ybWFwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcm1hcC5oXG5AQCAtODQzLDcgJiM0Mzs4NDMsNyBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb190cnlfc2hhcmVfYW5vbl9ybWFwX3BtZChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuICAqIENhbGxlZCBmcm9tIG1tL3Ztc2Nhbi5jIHRvIGhhbmRsZSBwYWdpbmcgb3V0XG4gICovXG4gaW50IGZvbGlvX3JlZmVyZW5jZWQoc3RydWN0IGZvbGlvICosIGludCBpc19sb2NrZWQsXG4tXHRcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB2bV9mbGFnc190ICp2bV9mbGFncyk7XG4mIzQzO1x0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpO1xuIFxuIHZvaWQgdHJ5X3RvX21pZ3JhdGUoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpO1xuIHZvaWQgdHJ5X3RvX3VubWFwKHN0cnVjdCBmb2xpbyAqLCBlbnVtIHR0dV9mbGFncyBmbGFncyk7XG5AQCAtOTc1LDEwICYjNDM7OTc1LDkgQEAgc3RydWN0IGFub25fdm1hICpmb2xpb19sb2NrX2Fub25fdm1hX3JlYWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbiAjZGVmaW5lIGFub25fdm1hX3ByZXBhcmUodm1hKVx0KDApXG4gXG4gc3RhdGljIGlubGluZSBpbnQgZm9saW9fcmVmZXJlbmNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgaXNfbG9ja2VkLFxuLVx0XHRcdFx0ICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tXHRcdFx0XHQgIHZtX2ZsYWdzX3QgKnZtX2ZsYWdzKVxuJiM0MztcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuIHtcbi1cdCp2bV9mbGFncyA9IDA7XG4mIzQzO1x0dm1hX2ZsYWdzX2NsZWFyX2FsbCh2bWFfZmxhZ3MpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuY1xuaW5kZXggZTg1NDY3OTU1M2I5YzMuLjQwODU1NDBiNmEyNWY0IDEwMDY0NFxuLS0tIGEvbW0vcm1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9ybWFwLmNcbkBAIC05MDcsNyAmIzQzOzkwNyw3IEBAIHBtZF90ICptbV9maW5kX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuIHN0cnVjdCBmb2xpb19yZWZlcmVuY2VkX2FyZyB7XG4gXHRpbnQgbWFwY291bnQ7XG4gXHRpbnQgcmVmZXJlbmNlZDtcbi1cdHZtX2ZsYWdzX3Qgdm1fZmxhZ3M7XG4mIzQzO1x0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIH07XG4gXG5AQCAtOTI2LDcgJiM0Mzs5MjYsNyBAQCBzdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRhZGRyZXNzID0gcHZtdy5hZGRyZXNzO1xuIFx0XHRuciA9IDE7XG4gXG4tXHRcdGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0xPQ0tFRCkge1xuJiM0MztcdFx0aWYgKHZtYV90ZXN0KHZtYSwgVk1BX0xPQ0tFRF9CSVQpKSB7XG4gXHRcdFx0cHRlcyYjNDM7JiM0Mzs7XG4gXHRcdFx0cHJhLVx1MDAzZW1hcGNvdW50LS07XG4gXG5AQCAtOTQ3LDcgJiM0Mzs5NDcsNyBAQCBzdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdC8qIFJlc3RvcmUgdGhlIG1sb2NrIHdoaWNoIGdvdCBtaXNzZWQgKi9cbiBcdFx0XHRtbG9ja192bWFfZm9saW8oZm9saW8sIHZtYSk7XG4gXHRcdFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcdTAwMjZwdm13KTtcbi1cdFx0XHRwcmEtXHUwMDNldm1fZmxhZ3MgfD0gVk1fTE9DS0VEO1xuJiM0MztcdFx0XHR2bWFfZmxhZ3Nfc2V0KFx1MDAyNnByYS1cdTAwM2V2bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKTtcbiBcdFx0XHRyZXR1cm4gZmFsc2U7IC8qIFRvIGJyZWFrIHRoZSBsb29wICovXG4gXHRcdH1cbiBcbkBAIC0xMDE1LDggJiM0MzsxMDE1LDExIEBAIHN0YXRpYyBib29sIGZvbGlvX3JlZmVyZW5jZWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdHJlZmVyZW5jZWQmIzQzOyYjNDM7O1xuIFxuIFx0aWYgKHJlZmVyZW5jZWQpIHtcbiYjNDM7XHRcdHZtYV9mbGFnc190IHZtYV9mbGFncyA9IHZtYS1cdTAwM2VmbGFncztcbiYjNDM7XG4gXHRcdHByYS1cdTAwM2VyZWZlcmVuY2VkJiM0MzsmIzQzOztcbi1cdFx0cHJhLVx1MDAzZXZtX2ZsYWdzIHw9IHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgflZNX0xPQ0tFRDtcbiYjNDM7XHRcdHZtYV9mbGFnc19jbGVhcihcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKTtcbiYjNDM7XHRcdHZtYV9mbGFnc19zZXRfbWFzayhcdTAwMjZwcmEtXHUwMDNldm1hX2ZsYWdzLCB2bWFfZmxhZ3MpO1xuIFx0fVxuIFxuIFx0aWYgKCFwcmEtXHUwMDNlbWFwY291bnQpXG5AQCAtMTA1NCw3ICYjNDM7MTA1Nyw3IEBAIHN0YXRpYyBib29sIGludmFsaWRfZm9saW9fcmVmZXJlbmNlZF92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZvaWQgKmFyZylcbiAgKiBAZm9saW86IFRoZSBmb2xpbyB0byB0ZXN0LlxuICAqIEBpc19sb2NrZWQ6IENhbGxlciBob2xkcyBsb2NrIG9uIHRoZSBmb2xpby5cbiAgKiBAbWVtY2c6IHRhcmdldCBtZW1vcnkgY2dyb3VwXG4tICogQHZtX2ZsYWdzOiBBIGNvbWJpbmF0aW9uIG9mIGFsbCB0aGUgdm1hLVx1MDAzZXZtX2ZsYWdzIHdoaWNoIHJlZmVyZW5jZWQgdGhlIGZvbGlvLlxuJiM0MzsgKiBAdm1hX2ZsYWdzOiBBIGNvbWJpbmF0aW9uIG9mIGFsbCB0aGUgdm1hLVx1MDAzZWZsYWdzIHdoaWNoIHJlZmVyZW5jZWQgdGhlIGZvbGlvLlxuICAqXG4gICogUXVpY2sgdGVzdF9hbmRfY2xlYXJfcmVmZXJlbmNlZCBmb3IgYWxsIG1hcHBpbmdzIG9mIGEgZm9saW8sXG4gICpcbkBAIC0xMDYyLDcgJiM0MzsxMDY1LDcgQEAgc3RhdGljIGJvb2wgaW52YWxpZF9mb2xpb19yZWZlcmVuY2VkX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm9pZCAqYXJnKVxuICAqIHRoZSBmdW5jdGlvbiBiYWlsZWQgb3V0IGR1ZSB0byBybWFwIGxvY2sgY29udGVudGlvbi5cbiAgKi9cbiBpbnQgZm9saW9fcmVmZXJlbmNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgaXNfbG9ja2VkLFxuLVx0XHQgICAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdm1fZmxhZ3NfdCAqdm1fZmxhZ3MpXG4mIzQzO1x0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4ge1xuIFx0Ym9vbCB3ZV9sb2NrZWQgPSBmYWxzZTtcbiBcdHN0cnVjdCBmb2xpb19yZWZlcmVuY2VkX2FyZyBwcmEgPSB7XG5AQCAtMTA3OCw3ICYjNDM7MTA4MSw3IEBAIGludCBmb2xpb19yZWZlcmVuY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBpc19sb2NrZWQsXG4gXHR9O1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX2lzX3pvbmVfZGV2aWNlKGZvbGlvKSwgZm9saW8pO1xuLVx0KnZtX2ZsYWdzID0gMDtcbiYjNDM7XHR2bWFfZmxhZ3NfY2xlYXJfYWxsKHZtYV9mbGFncyk7XG4gXHRpZiAoIXByYS5tYXBjb3VudClcbiBcdFx0cmV0dXJuIDA7XG4gXG5AQCAtMTA5Miw3ICYjNDM7MTA5NSw3IEBAIGludCBmb2xpb19yZWZlcmVuY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBpc19sb2NrZWQsXG4gXHR9XG4gXG4gXHRybWFwX3dhbGsoZm9saW8sIFx1MDAyNnJ3Yyk7XG4tXHQqdm1fZmxhZ3MgPSBwcmEudm1fZmxhZ3M7XG4mIzQzO1x0dm1hX2ZsYWdzX3NldF9tYXNrKHZtYV9mbGFncywgcHJhLnZtYV9mbGFncyk7XG4gXG4gXHRpZiAod2VfbG9ja2VkKVxuIFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDk4NmRkZThlNzQyOWYzLi5mYTgwODcyMWI2NGQxOSAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTgzNSwxMSAmIzQzOzgzNSwxNSBAQCBlbnVtIGZvbGlvX3JlZmVyZW5jZXMge1xuICAqIHdpdGggUEdfYWN0aXZlIHNldC4gSW4gY29udHJhc3QsIHRoZSBhZ2luZyAocGFnZSB0YWJsZSB3YWxrKSBwYXRoIHVzZXNcbiAgKiBmb2xpb191cGRhdGVfZ2VuKCkuXG4gICovXG4tc3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4ge1xuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKSB7XG4gXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcbiYjNDM7XHRcdC8qIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiAqL1xuJiM0MztcdFx0aWYgKGZvbGlvX2lzX2V4ZWNfZmlsZShmb2xpbywgdm1hX2ZsYWdzKSlcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG5AQCAtODUxLDcgJiM0Mzs4NTUsNyBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gI2Vsc2Vcbi1zdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuQEAgLTg2MSwxNiAmIzQzOzg2NSwxNiBAQCBzdGF0aWMgZW51bSBmb2xpb19yZWZlcmVuY2VzIGZvbGlvX2NoZWNrX3JlZmVyZW5jZXMoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0XHRcdFx0XHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIHtcbiBcdGludCByZWZlcmVuY2VkX3B0ZXMsIHJlZmVyZW5jZWRfZm9saW87XG4tXHR2bV9mbGFnc190IHZtX2ZsYWdzO1xuJiM0MztcdHZtYV9mbGFnc190IHZtYV9mbGFncztcbiBcbiBcdHJlZmVyZW5jZWRfcHRlcyA9IGZvbGlvX3JlZmVyZW5jZWQoZm9saW8sIDEsIHNjLVx1MDAzZXRhcmdldF9tZW1fY2dyb3VwLFxuLVx0XHRcdFx0XHQgICBcdTAwMjZ2bV9mbGFncyk7XG4mIzQzO1x0XHRcdFx0XHQgICBcdTAwMjZ2bWFfZmxhZ3MpO1xuIFxuIFx0LypcbiBcdCAqIFRoZSBzdXBwb3NlZGx5IHJlY2xhaW1hYmxlIGZvbGlvIHdhcyBmb3VuZCB0byBiZSBpbiBhIFZNX0xPQ0tFRCB2bWEuXG4gXHQgKiBMZXQgdGhlIGZvbGlvLCBub3cgbWFya2VkIE1sb2NrZWQsIGJlIG1vdmVkIHRvIHRoZSB1bmV2aWN0YWJsZSBsaXN0LlxuIFx0ICovXG4tXHRpZiAodm1fZmxhZ3MgXHUwMDI2IFZNX0xPQ0tFRClcbiYjNDM7XHRpZiAodm1hX2ZsYWdzX3Rlc3QoXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCkpXG4gXHRcdHJldHVybiBGT0xJT1JFRl9BQ1RJVkFURTtcbiBcbiBcdC8qXG5AQCAtODg2LDcgJiM0Mzs4OTAsNyBAQCBzdGF0aWMgZW51bSBmb2xpb19yZWZlcmVuY2VzIGZvbGlvX2NoZWNrX3JlZmVyZW5jZXMoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0aWYgKCFyZWZlcmVuY2VkX3B0ZXMpXG4gXHRcdFx0cmV0dXJuIEZPTElPUkVGX1JFQ0xBSU07XG4gXG4tXHRcdHJldHVybiBscnVfZ2VuX3NldF9yZWZzKGZvbGlvKSA/IEZPTElPUkVGX0FDVElWQVRFIDogRk9MSU9SRUZfS0VFUDtcbiYjNDM7XHRcdHJldHVybiBscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcdTAwMjZ2bWFfZmxhZ3MpID8gRk9MSU9SRUZfQUNUSVZBVEUgOiBGT0xJT1JFRl9LRUVQO1xuIFx0fVxuIFxuIFx0cmVmZXJlbmNlZF9mb2xpbyA9IGZvbGlvX3Rlc3RfY2xlYXJfcmVmZXJlbmNlZChmb2xpbyk7XG5AQCAtOTE0LDcgJiM0Mzs5MTgsNyBAQCBzdGF0aWMgZW51bSBmb2xpb19yZWZlcmVuY2VzIGZvbGlvX2NoZWNrX3JlZmVyZW5jZXMoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0LypcbiBcdFx0ICogQWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuXG4gXHRcdCAqL1xuLVx0XHRpZiAoKHZtX2ZsYWdzIFx1MDAyNiBWTV9FWEVDKSBcdTAwMjZcdTAwMjYgZm9saW9faXNfZmlsZV9scnUoZm9saW8pKVxuJiM0MztcdFx0aWYgKGZvbGlvX2lzX2V4ZWNfZmlsZShmb2xpbywgXHUwMDI2dm1hX2ZsYWdzKSlcbiBcdFx0XHRyZXR1cm4gRk9MSU9SRUZfQUNUSVZBVEU7XG4gXG4gXHRcdHJldHVybiBGT0xJT1JFRl9LRUVQO1xuQEAgLTIwNjUsNyAmIzQzOzIwNjksNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbnJfdGFrZW47XG4gXHR1bnNpZ25lZCBsb25nIG5yX3NjYW5uZWQ7XG4tXHR2bV9mbGFnc190IHZtX2ZsYWdzO1xuJiM0MztcdHZtYV9mbGFnc190IHZtYV9mbGFncztcbiBcdExJU1RfSEVBRChsX2hvbGQpO1x0LyogVGhlIGZvbGlvcyB3aGljaCB3ZXJlIHNuaXBwZWQgb2ZmICovXG4gXHRMSVNUX0hFQUQobF9hY3RpdmUpO1xuIFx0TElTVF9IRUFEKGxfaW5hY3RpdmUpO1xuQEAgLTIxMDksNyAmIzQzOzIxMTMsNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuIFxuIFx0XHQvKiBSZWZlcmVuY2VkIG9yIHJtYXAgbG9jayBjb250ZW50aW9uOiByb3RhdGUgKi9cbiBcdFx0aWYgKGZvbGlvX3JlZmVyZW5jZWQoZm9saW8sIDAsIHNjLVx1MDAzZXRhcmdldF9tZW1fY2dyb3VwLFxuLVx0XHRcdFx0ICAgICBcdTAwMjZ2bV9mbGFncykgIT0gMCkge1xuJiM0MztcdFx0XHRcdCAgICAgXHUwMDI2dm1hX2ZsYWdzKSAhPSAwKSB7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBJZGVudGlmeSByZWZlcmVuY2VkLCBmaWxlLWJhY2tlZCBhY3RpdmUgZm9saW9zIGFuZFxuIFx0XHRcdCAqIGdpdmUgdGhlbSBvbmUgbW9yZSB0cmlwIGFyb3VuZCB0aGUgYWN0aXZlIGxpc3QuIFNvXG5AQCAtMjExOSw3ICYjNDM7MjEyMyw3IEBAIHN0YXRpYyB2b2lkIHNocmlua19hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXHRcdFx0ICogSU8sIHBsdXMgSlZNIGNhbiBjcmVhdGUgbG90cyBvZiBhbm9uIFZNX0VYRUMgZm9saW9zLFxuIFx0XHRcdCAqIHNvIHdlIGlnbm9yZSB0aGVtIGhlcmUuXG4gXHRcdFx0ICovXG4tXHRcdFx0aWYgKCh2bV9mbGFncyBcdTAwMjYgVk1fRVhFQykgXHUwMDI2XHUwMDI2IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSkge1xuJiM0MztcdFx0XHRpZiAoZm9saW9faXNfZXhlY19maWxlKGZvbGlvLCBcdTAwMjZ2bWFfZmxhZ3MpKSB7XG4gXHRcdFx0XHRucl9yb3RhdGVkICYjNDM7PSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXHRcdFx0XHRsaXN0X2FkZChcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmxfYWN0aXZlKTtcbiBcdFx0XHRcdGNvbnRpbnVlO1xuQEAgLTMxODgsNyAmIzQzOzMxOTIsNyBAQCBzdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2VycihzdHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KVxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gXG4gLyogcHJvbW90ZSBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzICovXG4tc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4pXG4mIzQzO3N0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4gXG5AQCAtMzE5NiwxMCAmIzQzOzMyMDAsMTUgQEAgc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4pXG4gXG4gXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi9cbiBcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpIHtcbiYjNDM7XHRcdC8qIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiAqL1xuJiM0MztcdFx0aWYgKGZvbGlvX2lzX2V4ZWNfZmlsZShmb2xpbywgdm1hX2ZsYWdzKSlcbiYjNDM7XHRcdFx0Z290byBwcm9tb3RlO1xuJiM0MztcbiBcdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuIFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4gXG4mIzQzO3Byb21vdGU6XG4gXHRkbyB7XG4gXHRcdC8qIGxydV9nZW5fZGVsX2ZvbGlvKCkgaGFzIGlzb2xhdGVkIHRoaXMgcGFnZT8gKi9cbiBcdFx0aWYgKCEob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spKVxuQEAgLTM0MjgsOCAmIzQzOzM0MzcsOCBAQCBzdGF0aWMgYm9vbCBzdWl0YWJsZV90b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKVxuIFx0cmV0dXJuIHlvdW5nICogbiBcdTAwM2U9IHRvdGFsO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLVx0XHRcdCAgICAgIGludCBuZXdfZ2VuLCBib29sIGRpcnR5KVxuJiM0MztzdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiYjNDM7XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBib29sIGRpcnR5KVxuIHtcbiBcdGludCBvbGRfZ2VuO1xuIFxuQEAgLTM0NDIsMTAgJiM0MzszNDUxLDEwIEBAIHN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuIFxuIFx0aWYgKHdhbGspIHtcbi1cdFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4pO1xuJiM0MztcdFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sIFx1MDAyNnZtYS1cdTAwM2VmbGFncyk7XG4gXHRcdGlmIChvbGRfZ2VuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgb2xkX2dlbiAhPSBuZXdfZ2VuKVxuIFx0XHRcdHVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcbi1cdH0gZWxzZSBpZiAobHJ1X2dlbl9zZXRfcmVmcyhmb2xpbykpIHtcbiYjNDM7XHR9IGVsc2UgaWYgKGxydV9nZW5fc2V0X3JlZnMoZm9saW8sIFx1MDAyNnZtYS1cdTAwM2VmbGFncykpIHtcbiBcdFx0b2xkX2dlbiA9IGZvbGlvX2xydV9nZW4oZm9saW8pO1xuIFx0XHRpZiAob2xkX2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG9sZF9nZW4gIT0gbmV3X2dlbilcbiBcdFx0XHRmb2xpb19hY3RpdmF0ZShmb2xpbyk7XG5AQCAtMzUxOCw3ICYjNDM7MzUyNyw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAobGFzdCAhPSBmb2xpbykge1xuLVx0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpO1xuJiM0MztcdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLVx1MDAzZXZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4gXG4gXHRcdFx0bGFzdCA9IGZvbGlvO1xuIFx0XHRcdGRpcnR5ID0gZmFsc2U7XG5AQCAtMzUzMSw3ICYjNDM7MzU0MCw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHR3YWxrLVx1MDAzZW1tX3N0YXRzW01NX0xFQUZfWU9VTkddICYjNDM7PSBucjtcbiBcdH1cbiBcbi1cdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpO1xuJiM0MztcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiBcdGxhc3QgPSBOVUxMO1xuIFxuIFx0aWYgKGkgXHUwMDNjIFBUUlNfUEVSX1BURSBcdTAwMjZcdTAwMjYgZ2V0X25leHRfdm1hKFBNRF9NQVNLLCBQQUdFX1NJWkUsIGFyZ3MsIFx1MDAyNnN0YXJ0LCBcdTAwMjZlbmQpKVxuQEAgLTM2MDksNyAmIzQzOzM2MTgsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0XHRcdGdvdG8gbmV4dDtcbiBcbiBcdFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcbi1cdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiYjNDM7XHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC0zNjIzLDcgJiM0MzszNjMyLDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcbiBcdFx0aSA9IGkgXHUwMDNlIE1JTl9MUlVfQkFUQ0ggPyAwIDogZmluZF9uZXh0X2JpdChiaXRtYXAsIE1JTl9MUlVfQkFUQ0gsIGkpICYjNDM7IDE7XG4gXHR9IHdoaWxlIChpIFx1MDAzYz0gTUlOX0xSVV9CQVRDSCk7XG4gXG4tXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiYjNDM7XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuIFxuIFx0bGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7XG4gXHRzcGluX3VubG9jayhwdGwpO1xuQEAgLTQyNTgsNyAmIzQzOzQyNjcsNyBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChsYXN0ICE9IGZvbGlvKSB7XG4tXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4mIzQzO1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4gXG4gXHRcdFx0bGFzdCA9IGZvbGlvO1xuIFx0XHRcdGRpcnR5ID0gZmFsc2U7XG5AQCAtNDI3MCw3ICYjNDM7NDI3OSw3IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdFx0eW91bmcgJiM0Mzs9IG5yO1xuIFx0fVxuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4mIzQzO1x0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiBcbiBcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDIwOjUzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFnZSByZWNsYWltIGhldXJpc3RpY3MgdG8gYWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuIEl0IGFmZmVjdHMgYm90aCBzdGFuZGFyZCBMUlUgYW5kIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYXRocy4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCByZWNsYWltIHBhdGhzIChlLmcuLCBmb2xpb19yZWZlcmVuY2VkLCBzaHJpbmtfYWN0aXZlX2xpc3QpLCB3aGljaCBhcmUgaG90LXBhdGggZnVuY3Rpb25zLCBzbyBubyBzcGVjaWZpYyBmb2N1cyBzeW1ib2xzIGFyZSBwcm92aWRlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGZmNTI4MzA4ZTg2N2E4ODQxMjhkYzczYTQ5NWU4YTQxNDg3Y2JmMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDE2IDIwOjUzOjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaCBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmgKaW5kZXggYjVjNGRjMGYzZmUzMjYuLjMwZmRmMTA1NjMxMjEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmgKQEAgLTMwLDYgJiM0MzszMCwxMiBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19pc19maWxlX2xydShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXJldHVybiAhZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19pc19leGVjX2ZpbGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCWNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpCiYjNDM7ewomIzQzOwlyZXR1cm4gdm1hX2ZsYWdzX3Rlc3Qodm1hX2ZsYWdzLCBWTUFfRVhFQ19CSVQpICZhbXA7JmFtcDsgZm9saW9faXNfZmlsZV9scnUoZm9saW8pOwomIzQzO30KJiM0MzsKIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCQkJZW51bSBscnVfbGlzdCBscnUsIGVudW0gem9uZV90eXBlIHppZCwKIAkJCQlsb25nIG5yX3BhZ2VzKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ybWFwLmggYi9pbmNsdWRlL2xpbnV4L3JtYXAuaAppbmRleCA4ZGMwODcxZTVmMDAxMS4uZTA5MGFhMDk4MjVkNTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcm1hcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcm1hcC5oCkBAIC04NDMsNyAmIzQzOzg0Myw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX3RyeV9zaGFyZV9hbm9uX3JtYXBfcG1kKHN0cnVjdCBmb2xpbyAqZm9saW8sCiAgKiBDYWxsZWQgZnJvbSBtbS92bXNjYW4uYyB0byBoYW5kbGUgcGFnaW5nIG91dAogICovCiBpbnQgZm9saW9fcmVmZXJlbmNlZChzdHJ1Y3QgZm9saW8gKiwgaW50IGlzX2xvY2tlZCwKLQkJCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdm1fZmxhZ3NfdCAqdm1fZmxhZ3MpOwomIzQzOwkJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKTsKIAogdm9pZCB0cnlfdG9fbWlncmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIHR0dV9mbGFncyBmbGFncyk7CiB2b2lkIHRyeV90b191bm1hcChzdHJ1Y3QgZm9saW8gKiwgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpOwpAQCAtOTc1LDEwICYjNDM7OTc1LDkgQEAgc3RydWN0IGFub25fdm1hICpmb2xpb19sb2NrX2Fub25fdm1hX3JlYWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywKICNkZWZpbmUgYW5vbl92bWFfcHJlcGFyZSh2bWEpCSgwKQogCiBzdGF0aWMgaW5saW5lIGludCBmb2xpb19yZWZlcmVuY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBpc19sb2NrZWQsCi0JCQkJICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCi0JCQkJICB2bV9mbGFnc190ICp2bV9mbGFncykKJiM0MzsJCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncykKIHsKLQkqdm1fZmxhZ3MgPSAwOwomIzQzOwl2bWFfZmxhZ3NfY2xlYXJfYWxsKHZtYV9mbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuYwppbmRleCBlODU0Njc5NTUzYjljMy4uNDA4NTU0MGI2YTI1ZjQgMTAwNjQ0Ci0tLSBhL21tL3JtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9ybWFwLmMKQEAgLTkwNyw3ICYjNDM7OTA3LDcgQEAgcG1kX3QgKm1tX2ZpbmRfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiBzdHJ1Y3QgZm9saW9fcmVmZXJlbmNlZF9hcmcgewogCWludCBtYXBjb3VudDsKIAlpbnQgcmVmZXJlbmNlZDsKLQl2bV9mbGFnc190IHZtX2ZsYWdzOwomIzQzOwl2bWFfZmxhZ3NfdCB2bWFfZmxhZ3M7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwogfTsKIApAQCAtOTI2LDcgJiM0Mzs5MjYsNyBAQCBzdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQlhZGRyZXNzID0gcHZtdy5hZGRyZXNzOwogCQluciA9IDE7CiAKLQkJaWYgKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fTE9DS0VEKSB7CiYjNDM7CQlpZiAodm1hX3Rlc3Qodm1hLCBWTUFfTE9DS0VEX0JJVCkpIHsKIAkJCXB0ZXMmIzQzOyYjNDM7OwogCQkJcHJhLSZndDttYXBjb3VudC0tOwogCkBAIC05NDcsNyAmIzQzOzk0Nyw3IEBAIHN0YXRpYyBib29sIGZvbGlvX3JlZmVyZW5jZWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCQkvKiBSZXN0b3JlIHRoZSBtbG9jayB3aGljaCBnb3QgbWlzc2VkICovCiAJCQltbG9ja192bWFfZm9saW8oZm9saW8sIHZtYSk7CiAJCQlwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKCZhbXA7cHZtdyk7Ci0JCQlwcmEtJmd0O3ZtX2ZsYWdzIHw9IFZNX0xPQ0tFRDsKJiM0MzsJCQl2bWFfZmxhZ3Nfc2V0KCZhbXA7cHJhLSZndDt2bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKTsKIAkJCXJldHVybiBmYWxzZTsgLyogVG8gYnJlYWsgdGhlIGxvb3AgKi8KIAkJfQogCkBAIC0xMDE1LDggJiM0MzsxMDE1LDExIEBAIHN0YXRpYyBib29sIGZvbGlvX3JlZmVyZW5jZWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCXJlZmVyZW5jZWQmIzQzOyYjNDM7OwogCiAJaWYgKHJlZmVyZW5jZWQpIHsKJiM0MzsJCXZtYV9mbGFnc190IHZtYV9mbGFncyA9IHZtYS0mZ3Q7ZmxhZ3M7CiYjNDM7CiAJCXByYS0mZ3Q7cmVmZXJlbmNlZCYjNDM7JiM0Mzs7Ci0JCXByYS0mZ3Q7dm1fZmxhZ3MgfD0gdm1hLSZndDt2bV9mbGFncyAmYW1wOyB+Vk1fTE9DS0VEOwomIzQzOwkJdm1hX2ZsYWdzX2NsZWFyKCZhbXA7dm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCk7CiYjNDM7CQl2bWFfZmxhZ3Nfc2V0X21hc2soJmFtcDtwcmEtJmd0O3ZtYV9mbGFncywgdm1hX2ZsYWdzKTsKIAl9CiAKIAlpZiAoIXByYS0mZ3Q7bWFwY291bnQpCkBAIC0xMDU0LDcgJiM0MzsxMDU3LDcgQEAgc3RhdGljIGJvb2wgaW52YWxpZF9mb2xpb19yZWZlcmVuY2VkX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm9pZCAqYXJnKQogICogQGZvbGlvOiBUaGUgZm9saW8gdG8gdGVzdC4KICAqIEBpc19sb2NrZWQ6IENhbGxlciBob2xkcyBsb2NrIG9uIHRoZSBmb2xpby4KICAqIEBtZW1jZzogdGFyZ2V0IG1lbW9yeSBjZ3JvdXAKLSAqIEB2bV9mbGFnczogQSBjb21iaW5hdGlvbiBvZiBhbGwgdGhlIHZtYS0mZ3Q7dm1fZmxhZ3Mgd2hpY2ggcmVmZXJlbmNlZCB0aGUgZm9saW8uCiYjNDM7ICogQHZtYV9mbGFnczogQSBjb21iaW5hdGlvbiBvZiBhbGwgdGhlIHZtYS0mZ3Q7ZmxhZ3Mgd2hpY2ggcmVmZXJlbmNlZCB0aGUgZm9saW8uCiAgKgogICogUXVpY2sgdGVzdF9hbmRfY2xlYXJfcmVmZXJlbmNlZCBmb3IgYWxsIG1hcHBpbmdzIG9mIGEgZm9saW8sCiAgKgpAQCAtMTA2Miw3ICYjNDM7MTA2NSw3IEBAIHN0YXRpYyBib29sIGludmFsaWRfZm9saW9fcmVmZXJlbmNlZF92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZvaWQgKmFyZykKICAqIHRoZSBmdW5jdGlvbiBiYWlsZWQgb3V0IGR1ZSB0byBybWFwIGxvY2sgY29udGVudGlvbi4KICAqLwogaW50IGZvbGlvX3JlZmVyZW5jZWQoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGlzX2xvY2tlZCwKLQkJICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHZtX2ZsYWdzX3QgKnZtX2ZsYWdzKQomIzQzOwkJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKQogewogCWJvb2wgd2VfbG9ja2VkID0gZmFsc2U7CiAJc3RydWN0IGZvbGlvX3JlZmVyZW5jZWRfYXJnIHByYSA9IHsKQEAgLTEwNzgsNyAmIzQzOzEwODEsNyBAQCBpbnQgZm9saW9fcmVmZXJlbmNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgaXNfbG9ja2VkLAogCX07CiAKIAlWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pLCBmb2xpbyk7Ci0JKnZtX2ZsYWdzID0gMDsKJiM0MzsJdm1hX2ZsYWdzX2NsZWFyX2FsbCh2bWFfZmxhZ3MpOwogCWlmICghcHJhLm1hcGNvdW50KQogCQlyZXR1cm4gMDsKIApAQCAtMTA5Miw3ICYjNDM7MTA5NSw3IEBAIGludCBmb2xpb19yZWZlcmVuY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBpc19sb2NrZWQsCiAJfQogCiAJcm1hcF93YWxrKGZvbGlvLCAmYW1wO3J3Yyk7Ci0JKnZtX2ZsYWdzID0gcHJhLnZtX2ZsYWdzOwomIzQzOwl2bWFfZmxhZ3Nfc2V0X21hc2sodm1hX2ZsYWdzLCBwcmEudm1hX2ZsYWdzKTsKIAogCWlmICh3ZV9sb2NrZWQpCiAJCWZvbGlvX3VubG9jayhmb2xpbyk7CmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDk4NmRkZThlNzQyOWYzLi5mYTgwODcyMWI2NGQxOSAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTgzNSwxMSAmIzQzOzgzNSwxNSBAQCBlbnVtIGZvbGlvX3JlZmVyZW5jZXMgewogICogd2l0aCBQR19hY3RpdmUgc2V0LiBJbiBjb250cmFzdCwgdGhlIGFnaW5nIChwYWdlIHRhYmxlIHdhbGspIHBhdGggdXNlcwogICogZm9saW9fdXBkYXRlX2dlbigpLgogICovCi1zdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKQogewogCS8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqLwogCWlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSAmYW1wOyZhbXA7ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKSB7CiAJCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJCS8qIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiAqLwomIzQzOwkJaWYgKGZvbGlvX2lzX2V4ZWNfZmlsZShmb2xpbywgdm1hX2ZsYWdzKSkKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIApAQCAtODUxLDcgJiM0Mzs4NTUsNyBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJcmV0dXJuIHRydWU7CiB9CiAjZWxzZQotc3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncykKIHsKIAlyZXR1cm4gZmFsc2U7CiB9CkBAIC04NjEsMTYgJiM0Mzs4NjUsMTYgQEAgc3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCQkJCQkgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQogewogCWludCByZWZlcmVuY2VkX3B0ZXMsIHJlZmVyZW5jZWRfZm9saW87Ci0Jdm1fZmxhZ3NfdCB2bV9mbGFnczsKJiM0MzsJdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzOwogCiAJcmVmZXJlbmNlZF9wdGVzID0gZm9saW9fcmVmZXJlbmNlZChmb2xpbywgMSwgc2MtJmd0O3RhcmdldF9tZW1fY2dyb3VwLAotCQkJCQkgICAmYW1wO3ZtX2ZsYWdzKTsKJiM0MzsJCQkJCSAgICZhbXA7dm1hX2ZsYWdzKTsKIAogCS8qCiAJICogVGhlIHN1cHBvc2VkbHkgcmVjbGFpbWFibGUgZm9saW8gd2FzIGZvdW5kIHRvIGJlIGluIGEgVk1fTE9DS0VEIHZtYS4KIAkgKiBMZXQgdGhlIGZvbGlvLCBub3cgbWFya2VkIE1sb2NrZWQsIGJlIG1vdmVkIHRvIHRoZSB1bmV2aWN0YWJsZSBsaXN0LgogCSAqLwotCWlmICh2bV9mbGFncyAmYW1wOyBWTV9MT0NLRUQpCiYjNDM7CWlmICh2bWFfZmxhZ3NfdGVzdCgmYW1wO3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpKQogCQlyZXR1cm4gRk9MSU9SRUZfQUNUSVZBVEU7CiAKIAkvKgpAQCAtODg2LDcgJiM0Mzs4OTAsNyBAQCBzdGF0aWMgZW51bSBmb2xpb19yZWZlcmVuY2VzIGZvbGlvX2NoZWNrX3JlZmVyZW5jZXMoc3RydWN0IGZvbGlvICpmb2xpbywKIAkJaWYgKCFyZWZlcmVuY2VkX3B0ZXMpCiAJCQlyZXR1cm4gRk9MSU9SRUZfUkVDTEFJTTsKIAotCQlyZXR1cm4gbHJ1X2dlbl9zZXRfcmVmcyhmb2xpbykgPyBGT0xJT1JFRl9BQ1RJVkFURSA6IEZPTElPUkVGX0tFRVA7CiYjNDM7CQlyZXR1cm4gbHJ1X2dlbl9zZXRfcmVmcyhmb2xpbywgJmFtcDt2bWFfZmxhZ3MpID8gRk9MSU9SRUZfQUNUSVZBVEUgOiBGT0xJT1JFRl9LRUVQOwogCX0KIAogCXJlZmVyZW5jZWRfZm9saW8gPSBmb2xpb190ZXN0X2NsZWFyX3JlZmVyZW5jZWQoZm9saW8pOwpAQCAtOTE0LDcgJiM0Mzs5MTgsNyBAQCBzdGF0aWMgZW51bSBmb2xpb19yZWZlcmVuY2VzIGZvbGlvX2NoZWNrX3JlZmVyZW5jZXMoc3RydWN0IGZvbGlvICpmb2xpbywKIAkJLyoKIAkJICogQWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuCiAJCSAqLwotCQlpZiAoKHZtX2ZsYWdzICZhbXA7IFZNX0VYRUMpICZhbXA7JmFtcDsgZm9saW9faXNfZmlsZV9scnUoZm9saW8pKQomIzQzOwkJaWYgKGZvbGlvX2lzX2V4ZWNfZmlsZShmb2xpbywgJmFtcDt2bWFfZmxhZ3MpKQogCQkJcmV0dXJuIEZPTElPUkVGX0FDVElWQVRFOwogCiAJCXJldHVybiBGT0xJT1JFRl9LRUVQOwpAQCAtMjA2NSw3ICYjNDM7MjA2OSw3IEBAIHN0YXRpYyB2b2lkIHNocmlua19hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sCiB7CiAJdW5zaWduZWQgbG9uZyBucl90YWtlbjsKIAl1bnNpZ25lZCBsb25nIG5yX3NjYW5uZWQ7Ci0Jdm1fZmxhZ3NfdCB2bV9mbGFnczsKJiM0MzsJdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzOwogCUxJU1RfSEVBRChsX2hvbGQpOwkvKiBUaGUgZm9saW9zIHdoaWNoIHdlcmUgc25pcHBlZCBvZmYgKi8KIAlMSVNUX0hFQUQobF9hY3RpdmUpOwogCUxJU1RfSEVBRChsX2luYWN0aXZlKTsKQEAgLTIxMDksNyAmIzQzOzIxMTMsNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLAogCiAJCS8qIFJlZmVyZW5jZWQgb3Igcm1hcCBsb2NrIGNvbnRlbnRpb246IHJvdGF0ZSAqLwogCQlpZiAoZm9saW9fcmVmZXJlbmNlZChmb2xpbywgMCwgc2MtJmd0O3RhcmdldF9tZW1fY2dyb3VwLAotCQkJCSAgICAgJmFtcDt2bV9mbGFncykgIT0gMCkgewomIzQzOwkJCQkgICAgICZhbXA7dm1hX2ZsYWdzKSAhPSAwKSB7CiAJCQkvKgogCQkJICogSWRlbnRpZnkgcmVmZXJlbmNlZCwgZmlsZS1iYWNrZWQgYWN0aXZlIGZvbGlvcyBhbmQKIAkJCSAqIGdpdmUgdGhlbSBvbmUgbW9yZSB0cmlwIGFyb3VuZCB0aGUgYWN0aXZlIGxpc3QuIFNvCkBAIC0yMTE5LDcgJiM0MzsyMTIzLDcgQEAgc3RhdGljIHZvaWQgc2hyaW5rX2FjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbiwKIAkJCSAqIElPLCBwbHVzIEpWTSBjYW4gY3JlYXRlIGxvdHMgb2YgYW5vbiBWTV9FWEVDIGZvbGlvcywKIAkJCSAqIHNvIHdlIGlnbm9yZSB0aGVtIGhlcmUuCiAJCQkgKi8KLQkJCWlmICgodm1fZmxhZ3MgJmFtcDsgVk1fRVhFQykgJmFtcDsmYW1wOyBmb2xpb19pc19maWxlX2xydShmb2xpbykpIHsKJiM0MzsJCQlpZiAoZm9saW9faXNfZXhlY19maWxlKGZvbGlvLCAmYW1wO3ZtYV9mbGFncykpIHsKIAkJCQlucl9yb3RhdGVkICYjNDM7PSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiAJCQkJbGlzdF9hZGQoJmFtcDtmb2xpby0mZ3Q7bHJ1LCAmYW1wO2xfYWN0aXZlKTsKIAkJCQljb250aW51ZTsKQEAgLTMxODgsNyAmIzQzOzMxOTIsNyBAQCBzdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2VycihzdHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyogcHJvbW90ZSBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzICovCi1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbikKJiM0MztzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncykKIHsKIAl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLSZndDtmbGFncy5mKTsKIApAQCAtMzE5NiwxMCAmIzQzOzMyMDAsMTUgQEAgc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4pCiAKIAkvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi8KIAlpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgJmFtcDsmYW1wOyAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkgewomIzQzOwkJLyogQWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuICovCiYjNDM7CQlpZiAoZm9saW9faXNfZXhlY19maWxlKGZvbGlvLCB2bWFfZmxhZ3MpKQomIzQzOwkJCWdvdG8gcHJvbW90ZTsKJiM0MzsKIAkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpOwogCQlyZXR1cm4gLTE7CiAJfQogCiYjNDM7cHJvbW90ZToKIAlkbyB7CiAJCS8qIGxydV9nZW5fZGVsX2ZvbGlvKCkgaGFzIGlzb2xhdGVkIHRoaXMgcGFnZT8gKi8KIAkJaWYgKCEob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykpCkBAIC0zNDI4LDggJiM0MzszNDM3LDggQEAgc3RhdGljIGJvb2wgc3VpdGFibGVfdG9fc2NhbihpbnQgdG90YWwsIGludCB5b3VuZykKIAlyZXR1cm4geW91bmcgKiBuICZndDs9IHRvdGFsOwogfQogCi1zdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAotCQkJICAgICAgaW50IG5ld19nZW4sIGJvb2wgZGlydHkpCiYjNDM7c3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiYjNDM7CQlzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgYm9vbCBkaXJ0eSkKIHsKIAlpbnQgb2xkX2dlbjsKIApAQCAtMzQ0MiwxMCAmIzQzOzM0NTEsMTAgQEAgc3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbywKIAkJZm9saW9fbWFya19kaXJ0eShmb2xpbyk7CiAKIAlpZiAod2FsaykgewotCQlvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbik7CiYjNDM7CQlvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgJmFtcDt2bWEtJmd0O2ZsYWdzKTsKIAkJaWYgKG9sZF9nZW4gJmd0Oz0gMCAmYW1wOyZhbXA7IG9sZF9nZW4gIT0gbmV3X2dlbikKIAkJCXVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTsKLQl9IGVsc2UgaWYgKGxydV9nZW5fc2V0X3JlZnMoZm9saW8pKSB7CiYjNDM7CX0gZWxzZSBpZiAobHJ1X2dlbl9zZXRfcmVmcyhmb2xpbywgJmFtcDt2bWEtJmd0O2ZsYWdzKSkgewogCQlvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7CiAJCWlmIChvbGRfZ2VuICZndDs9IDAgJmFtcDsmYW1wOyBvbGRfZ2VuICE9IG5ld19nZW4pCiAJCQlmb2xpb19hY3RpdmF0ZShmb2xpbyk7CkBAIC0zNTE4LDcgJiM0MzszNTI3LDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCQljb250aW51ZTsKIAogCQlpZiAobGFzdCAhPSBmb2xpbykgewotCQkJd2Fsa191cGRhdGVfZm9saW8od2FsaywgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CQkJd2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy0mZ3Q7dm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKIAogCQkJbGFzdCA9IGZvbGlvOwogCQkJZGlydHkgPSBmYWxzZTsKQEAgLTM1MzEsNyAmIzQzOzM1NDAsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJd2Fsay0mZ3Q7bW1fc3RhdHNbTU1fTEVBRl9ZT1VOR10gJiM0Mzs9IG5yOwogCX0KIAotCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLSZndDt2bWEsIGxhc3QsIGdlbiwgZGlydHkpOwogCWxhc3QgPSBOVUxMOwogCiAJaWYgKGkgJmx0OyBQVFJTX1BFUl9QVEUgJmFtcDsmYW1wOyBnZXRfbmV4dF92bWEoUE1EX01BU0ssIFBBR0VfU0laRSwgYXJncywgJmFtcDtzdGFydCwgJmFtcDtlbmQpKQpAQCAtMzYwOSw3ICYjNDM7MzYxOCw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhCiAJCQlnb3RvIG5leHQ7CiAKIAkJaWYgKGxhc3QgIT0gZm9saW8pIHsKLQkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiAKIAkJCWxhc3QgPSBmb2xpbzsKIAkJCWRpcnR5ID0gZmFsc2U7CkBAIC0zNjIzLDcgJiM0MzszNjMyLDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWEKIAkJaSA9IGkgJmd0OyBNSU5fTFJVX0JBVENIID8gMCA6IGZpbmRfbmV4dF9iaXQoYml0bWFwLCBNSU5fTFJVX0JBVENILCBpKSAmIzQzOyAxOwogCX0gd2hpbGUgKGkgJmx0Oz0gTUlOX0xSVV9CQVRDSCk7CiAKLQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKIAogCWxhenlfbW11X21vZGVfZGlzYWJsZSgpOwogCXNwaW5fdW5sb2NrKHB0bCk7CkBAIC00MjU4LDcgJiM0Mzs0MjY3LDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKQogCQkJY29udGludWU7CiAKIAkJaWYgKGxhc3QgIT0gZm9saW8pIHsKLQkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiAKIAkJCWxhc3QgPSBmb2xpbzsKIAkJCWRpcnR5ID0gZmFsc2U7CkBAIC00MjcwLDcgJiM0Mzs0Mjc5LDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKQogCQl5b3VuZyAmIzQzOz0gbnI7CiAJfQogCi0Jd2Fsa191cGRhdGVfZm9saW8od2FsaywgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiAKIAlsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAyMDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTk4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogODQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoOiBQYWdlIFJlY2xhaW0gYW5kIEV4ZWN1dGFibGUgRmlsZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIG1vZGlmeWluZyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIFZNQSBmbGFncyBpbiByZWxhdGlvbiB0byBmb2xpbyByZWZlcmVuY2luZyBhbmQgcmVsYXRlZCBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgcmVwbGFjaW5nIGB2bV9mbGFnc190YCB3aXRoIGB2bWFfZmxhZ3NfdGAsIHdoaWNoLCBob2xkIG9uLCBzZWVtcyB0byBiZSBhIGRpZmZlcmVudCB0eXBlLCBtYXliZSBhIHN0cnVjdD8gQWhhLCBJIHNlZSBpbiBgaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaGAsIGB2bWFfZmxhZ3NfdGAgaXMgdXNlZCB3aXRoaW4gYGZvbGlvX2lzX2V4ZWNfZmlsZWAuIFRoYXQgY2xlYXJzIGl0IHVwLiBTbywgdGhlIHBhdGNoIGlzIGNoYW5naW5nIGB2bV9mbGFnc190ICp2bV9mbGFnc2AgdG8gYHZtYV9mbGFnc190ICp2bWFfZmxhZ3NgIGluIGBmb2xpb19yZWZlcmVuY2VkYC4KClRoZSBrZXkgaGVyZSBpcyB0aGF0IGBscnVfZ2VuX3NldF9yZWZzYCBpcyBiZWluZyB1cGRhdGVkIHRvIHRha2UgYHZtYV9mbGFnc2AsIHdoaWNoIHdhc24mIzM5O3QgdGhlIGNhc2UgcHJldmlvdXNseS4gTm93LCB0aGlzIGZ1bmN0aW9uIHdpbGwgYWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgKmFmdGVyKiB0aGVpciBmaXJzdCB1c2FnZS4gVGhhdCYjMzk7cyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGhvdyBwYWdlIHJlY2xhaW0sIHNwZWNpZmljYWxseSBib3RoIE1HTFJVIGFuZCB0aGUgc3RhbmRhcmQgTFJVLCBvcGVyYXRlcy4gVGhpcyBpcyBpbnRlcmVzdGluZy4gSXQmIzM5O3MgbW9kaWZ5aW5nIGNvcmUgTU0gY29kZSDigJMgdGhpbmdzIGxpa2UgYG1tL3Ztc2Nhbi5jYCBhbmQgYG1tL3JtYXAuY2Ag4oCTIHNvIHRoaXMgY291bGQgaGF2ZSBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMuIEFuZCwgeWVhaCwgcGFnZSByZWNsYWltIGlzIGRlZmluaXRlbHkgYSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgcGFydCBvZiB0aGUgc3lzdGVtLgoKVGhpcyBoYXMgbWUgdGhpbmtpbmcuIEdpdmVuIHRoaXMgY2hhbmdlIHRvIGNvcmUgTU0gbG9naWMsIGZ1enppbmcgaXMgKmFic29sdXRlbHkqIGluIG9yZGVyLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIG1vc3QgY3JpdGljYWwgZm9yIGZvY3VzZWQgZnV6emluZy4KCkxldCYjMzk7cyBzZWUsIGl0IGxvb2tzIGxpa2UgdGhlc2UgYXJlIHRoZSBtb2RpZmllZCBmdW5jdGlvbnM6IGBmb2xpb19yZWZlcmVuY2VkYCwgYGZvbGlvX2NoZWNrX3JlZmVyZW5jZXNgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYGZvbGlvX3VwZGF0ZV9nZW5gLCBgd2Fsa191cGRhdGVfZm9saW9gLCBgd2Fsa19wdGVfcmFuZ2VgLCBgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkYCwgYW5kIGBscnVfZ2VuX2xvb2tfYXJvdW5kYC4KCk5vdywgd2FpdCBhIG1pbnV0ZSwgYGZvbGlvX3JlZmVyZW5jZWRgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYW5kIGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCBhcmUgKnZlcnkqIGhvdC1wYXRoIGZ1bmN0aW9ucyBpbiBtZW1vcnkgcmVjbGFpbS4gQW5kIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBpcyByZWxhdGVkIHRvIE1HTFJVLiBUaGUgZ29hbCBoZXJlIGlzIHRvIGlkZW50aWZ5IHRhcmdldHMgdGhhdCBhcmUgTk9UIHRoZSBob3QgcGF0aC4gTGV0IG1lIHRoaW5rIGFib3V0IHRoaXMuLi4gc3BlY2lmaWMgc3lzY2FsbHMgb3Igb3BlcmF0aW9ucyB0aGF0IG1pZ2h0IHRyaWdnZXIgdGhpcyBsb2dpYz8gTWVtb3J5IHByZXNzdXJlLCBwYWdlIHJlY2xhaW0sIHN3YXAsIGBtYWR2aXNlYC4uLgoKT2theSwgdGhlIHByb21wdCBpcyB0ZWxsaW5nIG1lIHRvIGZpbmQgc29tZXRoaW5nIGJleW9uZCB0aGUgb2J2aW91cy4gSXQgc2F5cywgJiMzNDtBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4mIzM0OyBSaWdodCwgdGhlIGdvYWwgaXMgdG8gcGlucG9pbnQgc29tZXRoaW5nIG1vcmUgc3BlY2lmaWMuIGBzaHJpbmtfYWN0aXZlX2xpc3RgLCBgZm9saW9fcmVmZXJlbmNlZGAsIGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCBhcmUgZGVmaW5pdGVseSBob3QuIFdoYXQgYWJvdXQgYGxydV9nZW5fbG9va19hcm91bmRgPyBNYXliZSB0aGF0JiMzOTtzIGFuIG9wdGlvbj8KCkhtbSwgaXQmIzM5O3MgYSBjb3JlIE1NIGNoYW5nZS4gSXNvbGF0aW5nIGEgc2luZ2xlIG5vbi1ob3QtcGF0aCBmdW5jdGlvbiBpcyBjaGFsbGVuZ2luZyBoZXJlLiBNYXliZSB0aGF0IGlubGluZSBmdW5jdGlvbiwgYGZvbGlvX2lzX2V4ZWNfZmlsZWA/IExldCYjMzk7cyBjaGVjayBgbW0vdm1zY2FuLmNgIGZvciBjYWxscyB0byBgZm9saW9fY2hlY2tfcmVmZXJlbmNlc2AuIEkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgdG8gZmluZCBjYWxscyB0byBgZm9saW9fY2hlY2tfcmVmZXJlbmNlc2Agbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDIwOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZvbGlvX2NoZWNrX3JlZmVyZW5jZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz04NTg9c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuLS1cbm1tL3Ztc2Nhbi5jLTg2My1cbm1tL3Ztc2Nhbi5jOjg2NDpzdGF0aWMgZW51bSBmb2xpb19yZWZlcmVuY2VzIGZvbGlvX2NoZWNrX3JlZmVyZW5jZXMoc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL3Ztc2Nhbi5jLTg2NS1cdFx0XHRcdFx0XHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jPTEwNTU9c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuLS1cbm1tL3Ztc2Nhbi5jLTEyMjgtXHRcdGlmICghaWdub3JlX3JlZmVyZW5jZXMpXG5tbS92bXNjYW4uYzoxMjI5Olx0XHRcdHJlZmVyZW5jZXMgPSBmb2xpb19jaGVja19yZWZlcmVuY2VzKGZvbGlvLCBzYyk7XG5tbS92bXNjYW4uYy0xMjMwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDIwOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NjIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNR0xSVSBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoaXMgTXVsdGktR2VuIExSVSAoTUdMUlUpIHN0dWZmIGlzIHdpcmVkIHVwLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCBpcyBjYWxsZWQgZnJvbSBgc2hyaW5rX2ZvbGlvX2xpc3RgLCB3aGljaCBpcyBhIGtleSBwYXJ0IG9mIHRoZSBzaHJpbmtpbmcgcHJvY2Vzcy4gQW5kIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IGBzaHJpbmtfYWN0aXZlX2xpc3RgIGlzIGFsc28gYmVpbmcgbW9kaWZpZWQgaGVyZS4gVGhlbiwgSSBzZWUgYHdhbGtfdXBkYXRlX2ZvbGlvYCBiZWluZyBjYWxsZWQgZnJvbSBtdWx0aXBsZSBwbGFjZXM6IGB3YWxrX3B0ZV9yYW5nZWAsIGB3YWxrX3BtZF9yYW5nZV9sb2NrZWRgLCBhbmQgYGxydV9nZW5fbG9va19hcm91bmRgLiBUaGF0IGNvbm5lY3RzIHRob3NlIGZ1bmN0aW9ucyB0byBib3RoIE1HTFJVIGFuZCB0aGUgc3RhbmRhcmQgTFJVLiBUaGlzIGFsbCBzZWVtcyB0byBiZSBwYXJ0IG9mIHRoZSBjb3JlIE1HTFJVIGltcGxlbWVudGF0aW9uIG9yIGF0IGxlYXN0IGludGVyYWN0cyBoZWF2aWx5IHdpdGggaXQuCgpOb3csIGEgY3JpdGljYWwgcXVlc3Rpb24gZm9yIG9wdGltaXphdGlvbiBhbmQgdHVuaW5nIHRoaXMgaXM6IElzIE1HTFJVIGVuYWJsZWQgYnkgZGVmYXVsdD8gSSBuZWVkIHRvIGtub3cgaWYgdGhpcyBpcyBzb21ldGhpbmcgdGhhdCBJJiMzOTttIGRlYWxpbmcgd2l0aCBvdXQtb2YtdGhlLWJveCBvciBpZiBJIGhhdmUgdG8gZXhwbGljaXRseSBjb25maWd1cmUgaXQuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHNlY3Rpb24sIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBkZWZhdWx0IHNldHRpbmcgZm9yIE1HTFJVLiBUaGF0IHdpbGwgdGVsbCBtZSB3aGVyZSB0byBnbyBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDIwOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBMUlVfR0VOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTE0MDU9ZW5kaWYgIyBVU0VSRkFVTFRGRFxuLS1cbm1tL0tjb25maWctMTQwNy0jIG11bHRpLWdlbiBMUlUge1xubW0vS2NvbmZpZzoxNDA4OmNvbmZpZyBMUlVfR0VOXG5tbS9LY29uZmlnLTE0MDktXHRib29sIFwmIzM0O011bHRpLUdlbiBMUlVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MTYtXG5tbS9LY29uZmlnOjE0MTc6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxubW0vS2NvbmZpZy0xNDE4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQyMi1cbm1tL0tjb25maWc6MTQyMzpjb25maWcgTFJVX0dFTl9TVEFUU1xubW0vS2NvbmZpZy0xNDI0LVx0Ym9vbCBcJiMzNDtGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MzEtXG5tbS9LY29uZmlnOjE0MzI6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXG5tbS9LY29uZmlnLTE0MzMtXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMjA6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU5MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExSVSBHZW5lcmF0aW9uIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgIGFyZSB0aGUgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIHBheSBhdHRlbnRpb24gdG8uIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIG1vZGlmaWVkIGNvZGUgZGVwZW5kcyBvbiBgTFJVX0dFTmAgc3BlY2lmaWNhbGx5LiBMZXQmIzM5O3MgdHJhY2UgaXQgb3V0LiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYGxydV9nZW5fc2V0X3JlZnNgLCBgZm9saW9fdXBkYXRlX2dlbmAsIGB3YWxrX3VwZGF0ZV9mb2xpb2AsIGB3YWxrX3B0ZV9yYW5nZWAsIGB3YWxrX3BtZF9yYW5nZV9sb2NrZWRgLCBhbmQgYGxydV9nZW5fbG9va19hcm91bmRgLiBHaXZlbiB0aG9zZSBmdW5jdGlvbiBuYW1lcywgdGhleSYjMzk7cmUgYWxtb3N0IGNlcnRhaW5seSBndWFyZGVkIGJ5IGFuIGAjaWZkZWYgQ09ORklHX0xSVV9HRU5gIHNvbWV3aGVyZS4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gdmVyaWZ5IHRoYXQgYXNzdW1wdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byBgbW0vdm1zY2FuLmNgIGFuZCBzcGVjaWZpY2FsbHkgZXhhbWluZSB0aGUgY29kZSBhcm91bmQgdGhlIGBscnVfZ2VuX3NldF9yZWZzYCBmdW5jdGlvbiBjYWxsIHRvIGNvbmZpcm0gYW5kIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDIwOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fc2V0X3JlZnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz04MjU9ZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcbi0tXG5tbS92bXNjYW4uYy04MzctICovXG5tbS92bXNjYW4uYzo4Mzg6c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxubW0vdm1zY2FuLmMtODM5LXtcbi0tXG5tbS92bXNjYW4uYy04NTctI2Vsc2Vcbm1tL3Ztc2Nhbi5jOjg1ODpzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG5tbS92bXNjYW4uYy04NTkte1xuLS1cbm1tL3Ztc2Nhbi5jPTg2ND1zdGF0aWMgZW51bSBmb2xpb19yZWZlcmVuY2VzIGZvbGlvX2NoZWNrX3JlZmVyZW5jZXMoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS92bXNjYW4uYy04OTItXG5tbS92bXNjYW4uYzo4OTM6XHRcdHJldHVybiBscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcdTAwMjZ2bWFfZmxhZ3MpID8gRk9MSU9SRUZfQUNUSVZBVEUgOiBGT0xJT1JFRl9LRUVQO1xubW0vdm1zY2FuLmMtODk0LVx0fVxuLS1cbm1tL3Ztc2Nhbi5jPTM0NDA9c3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vdm1zY2FuLmMtMzQ1Ni1cdFx0XHR1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG5tbS92bXNjYW4uYzozNDU3Olx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpKSB7XG5tbS92bXNjYW4uYy0zNDU4LVx0XHRvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMjA6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM2NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGBscnVfZ2VuX3NldF9yZWZzYCoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIFRoZSBpbW1lZGlhdGUgZ29hbCBpcyBjbGVhcjogSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBlbnZpcm9ubWVudCB0aGF0IGltcGFjdHMgdGhlIGBscnVfZ2VuX3NldF9yZWZzYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyB3aGF0IGAjaWZkZWZgIG9yIGAjaWZgIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGNvbnRyb2wgd2hldGhlciBvciBub3QgdGhpcyBmdW5jdGlvbiBpcyBpbmNsdWRlZCBpbiB0aGUgYnVpbGQuIEtub3dpbmcgdGhpcyB3aWxsIGJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGF2YWlsYWJpbGl0eSBpbiBkaWZmZXJlbnQgYnVpbGQgY29uZmlndXJhdGlvbnMsIGFuZCBmb3IgZGVidWdnaW5nIGlmIEkgZW5jb3VudGVyIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3IgaXRzIGFic2VuY2UgaW4gY2VydGFpbiBzY2VuYXJpb3MuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGNvbnRleHQgaXMgcGFyYW1vdW50IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgZGVzaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAyMDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjaWZkZWYgQ09ORklHX0xSVV9HRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz04MjU9ZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcbi0tXG5tbS92bXNjYW4uYy04MzAtXG5tbS92bXNjYW4uYzo4MzE6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS92bXNjYW4uYy04MzItLypcbi0tXG5tbS92bXNjYW4uYz0yNjEwPXN0YXRpYyBib29sIGNhbl9hZ2VfYW5vbl9wYWdlcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtMjYyMS1cbm1tL3Ztc2Nhbi5jOjI2MjI6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS92bXNjYW4uYy0yNjIzLVxubW0vdm1zY2FuLmM9MjYyND1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcbm1tL3Ztc2Nhbi5jOjI2MjU6I2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcbm1tL3Ztc2Nhbi5jLTI2MjYtREVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XG4tLVxubW0vdm1zY2FuLmM9MjgwNj1zdGF0aWMgdm9pZCByZXNldF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSlcbi0tXG5tbS92bXNjYW4uYy0yODI1LVxubW0vdm1zY2FuLmM6MjgyNjojaWZkZWYgQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VXG5tbS92bXNjYW4uYy0yODI3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAyMDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTA5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyB0aGUgUGF0Y2gmIzM5O3MgU2NvcGUqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgYENPTkZJR19MUlVfR0VOYCBqdW1wcyBvdXQgYXQgbWUgYXMgYSBrZXkgcG9pbnQuIEl0IHNlZW1zIHByZXR0eSBjZW50cmFsIHRvIHdoYXQmIzM5O3MgYmVpbmcgYWx0ZXJlZC4gQnV0IHRoZW4sIGl0JiMzOTtzIGFsc28gdG91Y2hpbmcgYGZvbGlvX2NoZWNrX3JlZmVyZW5jZXNgIGFuZCBgc2hyaW5rX2FjdGl2ZV9saXN0YC4gSGFuZyBvbi4uLiB0aG9zZSBhcmVuJiMzOTt0IHBhcnQgb2YgYENPTkZJR19MUlVfR0VOYCwgdGhvc2UgYXJlIHN0YW5kYXJkIExSVSBmdW5jdGlvbnMuIFRoYXQgZmVlbHMuLi4gdW5leHBlY3RlZC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4gSSYjMzk7bSBnb2luZyB0byBkb3VibGUgY2hlY2sgdGhlIGNvZGUgcmlnaHQgbm93LiBBcmUgdGhvc2UgZnVuY3Rpb25zIHJlYWxseSBvdXRzaWRlIHRoZSBzY29wZSBvZiBgQ09ORklHX0xSVV9HRU5gPyBJIG5lZWQgdG8gdmVyaWZ5IHdoYXQgdGhlIHBhdGNoIGlzICpyZWFsbHkqIGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAyMDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb19jaGVja19yZWZlcmVuY2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9ODU4PXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbi0tXG5tbS92bXNjYW4uYy04NjMtXG5tbS92bXNjYW4uYzo4NjQ6c3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS92bXNjYW4uYy04NjUtXHRcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYz0xMDU1PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbi0tXG5tbS92bXNjYW4uYy0xMjI4LVx0XHRpZiAoIWlnbm9yZV9yZWZlcmVuY2VzKVxubW0vdm1zY2FuLmM6MTIyOTpcdFx0XHRyZWZlcmVuY2VzID0gZm9saW9fY2hlY2tfcmVmZXJlbmNlcyhmb2xpbywgc2MpO1xubW0vdm1zY2FuLmMtMTIzMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMjA6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzOTAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0MDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBGb2N1cyBmb3IgVGhpcyBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHNwZWNpZmljYWxseSB0aGUgTFJVIGZ1bmN0aW9uYWxpdHksIGJvdGggdGhlIHN0YW5kYXJkIGltcGxlbWVudGF0aW9uIGFuZCBNR0xSVS4gVGhlIGtleSBtb2RpZmljYXRpb24gc2VlbXMgdG8gYmUgaW4gYGZvbGlvX3JlZmVyZW5jZWRgIHdpdGhpbiBgbW0vcm1hcC5jYCwgYSBmdW5jdGlvbiB1c2VkIGJ5IGJvdGggTFJVIGltcGxlbWVudGF0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHNwZWNpZmljIGZ1bmN0aW9ucyBmb3IgdGFyZ2V0ZWQgZnV6emluZywgYnV0IHRoZSBwcm9tcHQgYWR2aXNlcyBhdm9pZGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4KCk5vdywgd2hpY2ggb25lcyBhcmUgd29ydGggc3BlY2lmaWMgYXR0ZW50aW9uPyBgZm9saW9fY2hlY2tfcmVmZXJlbmNlc2AgaXMgdGhlIHN0YW5kYXJkIExSVSBmdW5jdGlvbiwgYnV0IGl0JiMzOTtzICphbHNvKiBhIGhvdC1wYXRoIGZ1bmN0aW9uLiAgSSBuZWVkIHRvIGJlIGNhcmVmdWwgbm90IHRvIGNyZWF0ZSBhIHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbi4gVGhlIG90aGVyIGZ1bmN0aW9ucyB0aGF0IGFyZSBtb2RpZmllZCBhcmUgYWxzbyBhbGwgaG90LXBhdGggZnVuY3Rpb25zLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYGZvbGlvX3VwZGF0ZV9nZW5gLCBgd2Fsa191cGRhdGVfZm9saW9gLCBgd2Fsa19wdGVfcmFuZ2VgLCBgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkYCwgYW5kIGBscnVfZ2VuX2xvb2tfYXJvdW5kYC4KCkNvbnNpZGVyaW5nIHRoZSBhZHZpY2UsIEkgbmVlZCB0byBjaG9vc2UgY2FyZWZ1bGx5LiBgZm9saW9fcmVmZXJlbmNlZGAgaXMgY2FsbGVkIGR1cmluZyBwYWdlIHJlY2xhaW0uIEl0JiMzOTtzIGRlZmluaXRlbHkgYWN0aXZlIGJ1dCBwZXJoYXBzIG5vdCAqYXMqIGludGVuc2VseSBob3QgYXMgc29tZXRoaW5nIGxpa2UgYHBhZ2VfYWRkX3JtYXBgLiBTdGlsbCwgaG90IGVub3VnaCB0byBiZSBjb25zaWRlcmVkIGEgaG90IHBhdGguIEFuZCBgZm9saW9faXNfZXhlY19maWxlYCBpcyBpbmxpbmUsIHNvIGZ1enppbmcgaXQgZGlyZWN0bHkgd29uJiMzOTt0IGJlIHBvc3NpYmxlLgoKVGhhdCBsZWF2ZXMgYGxydV9nZW5fbG9va19hcm91bmRgLiBUaGlzIG9uZSBpcyBjYWxsZWQgZHVyaW5nIGEgcGFnZSBmYXVsdCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgZG9fc2V0X3B0ZWAgb3Igc2ltaWxhci4gU2luY2UgaXQgaGFzIHNwZWNpZmljIGNvbnRleHQsIGl0JiMzOTtzIGEgZ29vZCBjYW5kaWRhdGUgdG8gY29uc2lkZXIsIGJ1dCBmaXJzdCwgSSYjMzk7bGwgY2hlY2sgaXRzIGNhbGwgc2l0ZXMgdG8gYmUgc3VyZSBpdCYjMzk7cyB0aGUgcmlnaHQgY2hvaWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAyMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtscnVfZ2VuX2xvb2tfYXJvdW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdD0xODc9Y2FuIGluY3VyIHRoZSBoaWdoZXN0IENQVSBjb3N0IGluIHRoZSByZWNsYWltIHBhdGguXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3QtMTg4LVxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0OjE4OTpgYGxydV9nZW5fbG9va19hcm91bmQoKWBgIGV4cGxvaXRzIHNwYXRpYWwgbG9jYWxpdHkgdG8gcmVkdWNlIHRoZVxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0LTE5MC10cmlwcyBpbnRvIHRoZSBybWFwLiBJdCBzY2FucyB0aGUgYWRqYWNlbnQgUFRFcyBvZiBhIHlvdW5nIFBURSBhbmRcbi0tXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3Q9MTk5PWluIHRoZSBzZXQuXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3QtMjAwLVxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0OjIwMTpJbiB0aGUgZXZpY3Rpb24gcGF0aCwgc3BlY2lmaWNhbGx5LCBpbiBgYGxydV9nZW5fbG9va19hcm91bmQoKWBgLCBpZiBhXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3QtMjAyLVBNRCBoYXMgYSBzdWZmaWNpZW50IG51bWJlciBvZiBob3QgcGFnZXMsIGl0cyBhZGRyZXNzIGlzIHBsYWNlZCBpbiB0aGVcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTY4OT12b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKTtcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NjkwOmJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucik7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTY5MS1cbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTcwOD1zdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03MTEtXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjcxMjpzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTcxMy1cdFx0dW5zaWduZWQgaW50IG5yKVxuLS1cbm1tL3JtYXAuYz05MTc9c3RhdGljIGJvb2wgZm9saW9fcmVmZXJlbmNlZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9ybWFwLmMtOTgxLVx0XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXHUwMDI2XHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpIFx1MDAyNlx1MDAyNiBwdm13LnB0ZSkge1xubW0vcm1hcC5jOjk4MjpcdFx0XHRpZiAobHJ1X2dlbl9sb29rX2Fyb3VuZChcdTAwMjZwdm13LCBucikpXG5tbS9ybWFwLmMtOTgzLVx0XHRcdFx0cmVmZXJlbmNlZCYjNDM7JiM0Mzs7XG4tLVxubW0vdm1zY2FuLmM9MjcxND1zdGF0aWMgYm9vbCBfX21heWJlX3VudXNlZCBzZXFfaXNfdmFsaWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuLS1cbm1tL3Ztc2Nhbi5jLTI3NDMtICogd2Fsa19wbWRfcmFuZ2UoKTsgdGhlIGV2aWN0aW9uIGFsc28gcmVwb3J0IHRoZW0gd2hlbiB3YWxraW5nIHRoZSBybWFwXG5tbS92bXNjYW4uYzoyNzQ0OiAqIGluIGxydV9nZW5fbG9va19hcm91bmQoKS5cbm1tL3Ztc2Nhbi5jLTI3NDUtICpcbi0tXG5tbS92bXNjYW4uYz0zOTk2PXN0YXRpYyBib29sIHRyeV90b19pbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLFxuLS1cbm1tL3Ztc2Nhbi5jLTQwMTUtXHQgKiBJZiB0aGUgaGFyZHdhcmUgZG9lc24mIzM5O3QgYXV0b21hdGljYWxseSBzZXQgdGhlIGFjY2Vzc2VkIGJpdCwgZmFsbGJhY2tcbm1tL3Ztc2Nhbi5jOjQwMTY6XHQgKiB0byBscnVfZ2VuX2xvb2tfYXJvdW5kKCksIHdoaWNoIG9ubHkgY2xlYXJzIHRoZSBhY2Nlc3NlZCBiaXQgaW4gYVxubW0vdm1zY2FuLmMtNDAxNy1cdCAqIGhhbmRmdWwgb2YgUFRFcy4gU3ByZWFkaW5nIHRoZSB3b3JrIG91dCBvdmVyIGEgcGVyaW9kIG9mIHRpbWUgdXN1YWxseVxuLS1cbm1tL3Ztc2Nhbi5jPTQxMzU9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00MTgxLSAqL1xubW0vdm1zY2FuLmM6NDE4Mjpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG5tbS92bXNjYW4uYy00MTgzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMjA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwODYKCQkJCQkJCW91dHB1dDogMTEzCgkJCQkJCQl0aG91Z2h0czogOTU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgZm9yIE1lbW9yeSBNYW5hZ2VtZW50IENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQgdG91Y2hlcyBjb3JlIE1NIGNvZGUsIHNwZWNpZmljYWxseSByZWNsYWltIGFuZCB0aGUgTFJVLiBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgaXMgY2FsbGVkIGZyb20gYGZvbGlvX3JlZmVyZW5jZWRfb25lYCwgd2hpY2ggdGVsbHMgbWUgdGhpcyBpcyBkZWZpbml0ZWx5IGluIHRoZSByZWNsYWltIHBhdGguIEdpdmVuIHRoZSBzY29wZSwgdGhpcyBpcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4KCk15IGZpcnN0IGltcHVsc2UgaXMgdG8gbGlzdCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zOiBgZm9saW9fcmVmZXJlbmNlZGAsIGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCwgYHNocmlua19hY3RpdmVfbGlzdGAsIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCwgYHdhbGtfcHRlX3JhbmdlYCwgYW5kIGB3YWxrX3BtZF9yYW5nZV9sb2NrZWRgLiBMZXQmIzM5O3Mgc2VlIGFib3V0IHNwZWNpZmljIGNvbmZpZ3MuCgpBaCwgYExSVV9HRU5gIGlzIHRoZSBrZXkgY29uZmlnIGZvciBNdWx0aS1HZW4gTFJVLiBJdCBzZWVtcyBpdCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gc29tZSBjb25maWdzLCBidXQgSSBzaG91bGQgZGVmaW5pdGVseSBzcGVjaWZ5IGl0LiBIb3dldmVyLCBzaW5jZSB0aGUgcGF0Y2ggKmFsc28qIG1vZGlmaWVzIHN0YW5kYXJkIExSVSwgaXQgaXNuJiMzOTt0IHN0cmljdGx5IG5lY2Vzc2FyeS4gQnV0LCB0byBlbnN1cmUgY29tcHJlaGVuc2l2ZSBNR0xSVSB0ZXN0aW5nLCBJJiMzOTtsbCBhZGQgaXQuCgpOb3csIHdhaXQgYSBtaW51dGUsIGBmb2xpb19pc19leGVjX2ZpbGVgIGlzIHRoZSBpbnRlcmVzdGluZyBwYXJ0LiBJdCYjMzk7cyB1c2VkIHRvIGFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiBUaGF0JiMzOTtzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSBpbiBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZXNlIHR5cGVzIG9mIG1hcHBpbmdzLgoKTGV0JiMzOTtzIHRyYWNlIGBmb2xpb19pc19leGVjX2ZpbGVgLiBJdCYjMzk7cyB1c2VkIGluIGBscnVfZ2VuX3NldF9yZWZzYCwgYGZvbGlvX2NoZWNrX3JlZmVyZW5jZXNgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYW5kIGBmb2xpb191cGRhdGVfZ2VuYC4gVGhpcyBjb25maXJtcyBpdCYjMzk7cyBhIHNpZ25pZmljYW50IGNoYW5nZSB0byBtZW1vcnkgbWFuYWdlbWVudCBiZWhhdmlvci4KClRoZXJlZm9yZSwgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIHNldCB0byBgdHJ1ZWAuCgpSZWdhcmRpbmcgYEZvY3VzU3ltYm9sc2AsIEkgaW5pdGlhbGx5IHRob3VnaHQgdG8gaW5jbHVkZSB0aG9zZSBtb2RpZmllZCBmdW5jdGlvbnMuIEhvd2V2ZXIsIHRoZSBwcm9tcHQgc2F5cyB0byBhdm9pZCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4gYGZvbGlvX3JlZmVyZW5jZWRgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYW5kIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBhcmUgYWxsICp2ZXJ5KiBob3QgZHVyaW5nIHJlY2xhaW0sIGVzc2VudGlhbGx5IG1ha2luZyB0aGVtIGhvdC1wYXRoLiBJZiBJIGluY2x1ZGUgdGhlbSwgSSYjMzk7bSBqdXN0IHRlbGxpbmcgdGhlIGZ1enplciB0byBmb2N1cyBvbiB3aGF0IGl0IGlzIGFscmVhZHkgZG9pbmcuIFNob3VsZCBJIGV4Y2x1ZGUgdGhlbSBhbmQgbGlzdCBzb21ldGhpbmcgZWxzZT8gTm8sIGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCBhbmQgYGxydV9nZW5fbG9va19hcm91bmRgIGFyZSBhbHNvIGhvdC1wYXRoIGZ1bmN0aW9ucy4KCiYjMzQ7RXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4gU2hvdWxkIGF2b2lkIGhvdC1wYXRoIGZ1bmN0aW9ucy4mIzM0OyBCZWNhdXNlIHRoZXNlIGZ1bmN0aW9ucyBhcmUga2V5IE1NIHJlY2xhaW0gcGF0aHMsIGFuZCBieSB0aGVpciBuYXR1cmUsIGhvdCB3aGVuIG1lbW9yeSBpcyB1bmRlciBwcmVzc3VyZSwgSSB3aWxsIGxlYXZlIGBGb2N1c1N5bWJvbHNgIGVtcHR5LgoKQWN0dWFsbHksIGBmb2xpb19yZWZlcmVuY2VkYCBpcyBjYWxsZWQgYnkgYHNocmlua19mb2xpb19saXN0YCwgd2hpY2ggaXMgY2FsbGVkIGJ5IGBzaHJpbmtfbHJ1dmVjYCwgd2hpY2ggY29uZmlybXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50LgoKQXMgZm9yIGBFbmFibGVDb25maWdzYCwgYExSVV9HRU5gIGlzIHRoZSBvbmx5IHNwZWNpZmljIGNvbmZpZyBJIG5lZWQuIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aGlzIGxhdGVyIHRvIGJlIHN1cmUuIFRoZSBjb2RlIGNoYW5nZXMgYXJlIGluIGBtbS9ybWFwLmNgIGFuZCBgbW0vdm1zY2FuLmNgLCBhbmQgYExSVV9HRU5gIGlzIHRoZSBvbmx5IHJlbGF0ZWQgY29uZmlnLgoKT2theSwgYmFjayB0byBgZm9saW9faXNfZXhlY19maWxlYC4gSSBzZWUgdGhhdCBpdCBjaGVja3MgYFZNQV9FWEVDX0JJVGAuIFRoaXMgaXMgc3RhbmRhcmQgZnVuY3Rpb25hbGl0eSByZWxhdGluZyB0byBleGVjdXRhYmxlIG1hcHBpbmdzIHZpYSBgbW1hcGAgd2l0aCBgUFJPVF9FWEVDYC4gVGhhdCBpcyBzb21ldGhpbmcgZm9yIHN1cmUuCgpTbywgbGV0JiMzOTtzIHJldmlldzogVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWN0aXZhdGVzIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zICphZnRlciogZmlyc3QgdXNhZ2UsIGFuZCBpdCYjMzk7cyBhIHNpZ25pZmljYW50IGNoYW5nZSB0byBwYWdlIHJlY2xhaW0gaGV1cmlzdGljcy4gRGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIQoKTXkgZmluYWwgc2V0dGluZ3Mgd2lsbCBiZToKCiogICBgV29ydGhGdXp6aW5nID0gdHJ1ZWAKKiAgIGBFbmFibGVDb25maWdzID0gWyYjMzQ7TFJVX0dFTiYjMzQ7XWAKKiAgIGBGb2N1c1N5bWJvbHMgPSBbXWAKKiAgIGBSZWFzb25pbmcgPSAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWdlIHJlY2xhaW0gaGV1cmlzdGljcyB0byBhY3RpdmF0ZSBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciBmaXJzdCB1c2FnZS4gSXQgYWZmZWN0cyBib3RoIHN0YW5kYXJkIExSVSBhbmQgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhdGhzLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHJlY2xhaW0gcGF0aHMgKGUuZy4sIGZvbGlvX3JlZmVyZW5jZWQsIHNocmlua19hY3RpdmVfbGlzdCksIHdoaWNoIGFyZSBob3QtcGF0aCBmdW5jdGlvbnMsIHNvIG5vIHNwZWNpZmljIGZvY3VzIHN5bWJvbHMgYXJlIHByb3ZpZGVkLiYjMzQ7YAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAyMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWdlIHJlY2xhaW0gaGV1cmlzdGljcyB0byBhY3RpdmF0ZSBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciBmaXJzdCB1c2FnZS4gSXQgYWZmZWN0cyBib3RoIHN0YW5kYXJkIExSVSBhbmQgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhdGhzLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHJlY2xhaW0gcGF0aHMgKGUuZy4sIGZvbGlvX3JlZmVyZW5jZWQsIHNocmlua19hY3RpdmVfbGlzdCksIHdoaWNoIGFyZSBob3QtcGF0aCBmdW5jdGlvbnMsIHNvIG5vIHNwZWNpZmljIGZvY3VzIHN5bWJvbHMgYXJlIHByb3ZpZGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhZ2UgcmVjbGFpbSBoZXVyaXN0aWNzIHRvIGFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiBJdCBhZmZlY3RzIGJvdGggc3RhbmRhcmQgTFJVIGFuZCBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGF0aHMuIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcmVjbGFpbSBwYXRocyAoZS5nLiwgZm9saW9fcmVmZXJlbmNlZCwgc2hyaW5rX2FjdGl2ZV9saXN0KSwgd2hpY2ggYXJlIGhvdC1wYXRoIGZ1bmN0aW9ucywgc28gbm8gc3BlY2lmaWMgZm9jdXMgc3ltYm9scyBhcmUgcHJvdmlkZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xNlQyMDo1MzowOC4yNjM3MTEyMDRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDUzNDI2NDMxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBhZ2UgcmVjbGFpbSBoZXVyaXN0aWNzIHRvIGFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiBJdCBhZmZlY3RzIGJvdGggc3RhbmRhcmQgTFJVIGFuZCBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGF0aHMuIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcmVjbGFpbSBwYXRocyAoZS5nLiwgZm9saW9fcmVmZXJlbmNlZCwgc2hyaW5rX2FjdGl2ZV9saXN0KSwgd2hpY2ggYXJlIGhvdC1wYXRoIGZ1bmN0aW9ucywgc28gbm8gc3BlY2lmaWMgZm9jdXMgc3ltYm9scyBhcmUgcHJvdmlkZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDIwOjUzOjA4LjI2MzcxOTc1NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY2Mzc3MDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOGZmNTI4MzA4ZTg2N2E4ODQxMjhkYzczYTQ5NWU4YTQxNDg3Y2JmM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAxNiAyMDo1MzowNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxcbmluZGV4IGI1YzRkYzBmM2ZlMzI2Li4zMGZkZjEwNTYzMTIxMyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxcbkBAIC0zMCw2ICszMCwxMiBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19pc19maWxlX2xydShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRyZXR1cm4gIWZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbyk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19pc19leGVjX2ZpbGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4rXFx0XFx0Y29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG4re1xcbitcXHRyZXR1cm4gdm1hX2ZsYWdzX3Rlc3Qodm1hX2ZsYWdzLCBWTUFfRVhFQ19CSVQpIFxcdTAwMjZcXHUwMDI2IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcXG4rfVxcbitcXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0XFx0XFx0XFx0ZW51bSBscnVfbGlzdCBscnUsIGVudW0gem9uZV90eXBlIHppZCxcXG4gXFx0XFx0XFx0XFx0bG9uZyBucl9wYWdlcylcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ybWFwLmggYi9pbmNsdWRlL2xpbnV4L3JtYXAuaFxcbmluZGV4IDhkYzA4NzFlNWYwMDExLi5lMDkwYWEwOTgyNWQ1MiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3JtYXAuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcm1hcC5oXFxuQEAgLTg0Myw3ICs4NDMsNyBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb190cnlfc2hhcmVfYW5vbl9ybWFwX3BtZChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiAgKiBDYWxsZWQgZnJvbSBtbS92bXNjYW4uYyB0byBoYW5kbGUgcGFnaW5nIG91dFxcbiAgKi9cXG4gaW50IGZvbGlvX3JlZmVyZW5jZWQoc3RydWN0IGZvbGlvICosIGludCBpc19sb2NrZWQsXFxuLVxcdFxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdm1fZmxhZ3NfdCAqdm1fZmxhZ3MpO1xcbitcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpO1xcbiBcXG4gdm9pZCB0cnlfdG9fbWlncmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIHR0dV9mbGFncyBmbGFncyk7XFxuIHZvaWQgdHJ5X3RvX3VubWFwKHN0cnVjdCBmb2xpbyAqLCBlbnVtIHR0dV9mbGFncyBmbGFncyk7XFxuQEAgLTk3NSwxMCArOTc1LDkgQEAgc3RydWN0IGFub25fdm1hICpmb2xpb19sb2NrX2Fub25fdm1hX3JlYWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gI2RlZmluZSBhbm9uX3ZtYV9wcmVwYXJlKHZtYSlcXHQoMClcXG4gXFxuIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX3JlZmVyZW5jZWQoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGlzX2xvY2tlZCxcXG4tXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLVxcdFxcdFxcdFxcdCAgdm1fZmxhZ3NfdCAqdm1fZmxhZ3MpXFxuK1xcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG4ge1xcbi1cXHQqdm1fZmxhZ3MgPSAwO1xcbitcXHR2bWFfZmxhZ3NfY2xlYXJfYWxsKHZtYV9mbGFncyk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmNcXG5pbmRleCBlODU0Njc5NTUzYjljMy4uNDA4NTU0MGI2YTI1ZjQgMTAwNjQ0XFxuLS0tIGEvbW0vcm1hcC5jXFxuKysrIGIvbW0vcm1hcC5jXFxuQEAgLTkwNyw3ICs5MDcsNyBAQCBwbWRfdCAqbW1fZmluZF9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcXG4gc3RydWN0IGZvbGlvX3JlZmVyZW5jZWRfYXJnIHtcXG4gXFx0aW50IG1hcGNvdW50O1xcbiBcXHRpbnQgcmVmZXJlbmNlZDtcXG4tXFx0dm1fZmxhZ3NfdCB2bV9mbGFncztcXG4rXFx0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzO1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuIH07XFxuIFxcbkBAIC05MjYsNyArOTI2LDcgQEAgc3RhdGljIGJvb2wgZm9saW9fcmVmZXJlbmNlZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0XFx0YWRkcmVzcyA9IHB2bXcuYWRkcmVzcztcXG4gXFx0XFx0bnIgPSAxO1xcbiBcXG4tXFx0XFx0aWYgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9MT0NLRUQpIHtcXG4rXFx0XFx0aWYgKHZtYV90ZXN0KHZtYSwgVk1BX0xPQ0tFRF9CSVQpKSB7XFxuIFxcdFxcdFxcdHB0ZXMrKztcXG4gXFx0XFx0XFx0cHJhLVxcdTAwM2VtYXBjb3VudC0tO1xcbiBcXG5AQCAtOTQ3LDcgKzk0Nyw3IEBAIHN0YXRpYyBib29sIGZvbGlvX3JlZmVyZW5jZWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdFxcdC8qIFJlc3RvcmUgdGhlIG1sb2NrIHdoaWNoIGdvdCBtaXNzZWQgKi9cXG4gXFx0XFx0XFx0bWxvY2tfdm1hX2ZvbGlvKGZvbGlvLCB2bWEpO1xcbiBcXHRcXHRcXHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFxcdTAwMjZwdm13KTtcXG4tXFx0XFx0XFx0cHJhLVxcdTAwM2V2bV9mbGFncyB8PSBWTV9MT0NLRUQ7XFxuK1xcdFxcdFxcdHZtYV9mbGFnc19zZXQoXFx1MDAyNnByYS1cXHUwMDNldm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCk7XFxuIFxcdFxcdFxcdHJldHVybiBmYWxzZTsgLyogVG8gYnJlYWsgdGhlIGxvb3AgKi9cXG4gXFx0XFx0fVxcbiBcXG5AQCAtMTAxNSw4ICsxMDE1LDExIEBAIHN0YXRpYyBib29sIGZvbGlvX3JlZmVyZW5jZWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdHJlZmVyZW5jZWQrKztcXG4gXFxuIFxcdGlmIChyZWZlcmVuY2VkKSB7XFxuK1xcdFxcdHZtYV9mbGFnc190IHZtYV9mbGFncyA9IHZtYS1cXHUwMDNlZmxhZ3M7XFxuK1xcbiBcXHRcXHRwcmEtXFx1MDAzZXJlZmVyZW5jZWQrKztcXG4tXFx0XFx0cHJhLVxcdTAwM2V2bV9mbGFncyB8PSB2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgflZNX0xPQ0tFRDtcXG4rXFx0XFx0dm1hX2ZsYWdzX2NsZWFyKFxcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKTtcXG4rXFx0XFx0dm1hX2ZsYWdzX3NldF9tYXNrKFxcdTAwMjZwcmEtXFx1MDAzZXZtYV9mbGFncywgdm1hX2ZsYWdzKTtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKCFwcmEtXFx1MDAzZW1hcGNvdW50KVxcbkBAIC0xMDU0LDcgKzEwNTcsNyBAQCBzdGF0aWMgYm9vbCBpbnZhbGlkX2ZvbGlvX3JlZmVyZW5jZWRfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2b2lkICphcmcpXFxuICAqIEBmb2xpbzogVGhlIGZvbGlvIHRvIHRlc3QuXFxuICAqIEBpc19sb2NrZWQ6IENhbGxlciBob2xkcyBsb2NrIG9uIHRoZSBmb2xpby5cXG4gICogQG1lbWNnOiB0YXJnZXQgbWVtb3J5IGNncm91cFxcbi0gKiBAdm1fZmxhZ3M6IEEgY29tYmluYXRpb24gb2YgYWxsIHRoZSB2bWEtXFx1MDAzZXZtX2ZsYWdzIHdoaWNoIHJlZmVyZW5jZWQgdGhlIGZvbGlvLlxcbisgKiBAdm1hX2ZsYWdzOiBBIGNvbWJpbmF0aW9uIG9mIGFsbCB0aGUgdm1hLVxcdTAwM2VmbGFncyB3aGljaCByZWZlcmVuY2VkIHRoZSBmb2xpby5cXG4gICpcXG4gICogUXVpY2sgdGVzdF9hbmRfY2xlYXJfcmVmZXJlbmNlZCBmb3IgYWxsIG1hcHBpbmdzIG9mIGEgZm9saW8sXFxuICAqXFxuQEAgLTEwNjIsNyArMTA2NSw3IEBAIHN0YXRpYyBib29sIGludmFsaWRfZm9saW9fcmVmZXJlbmNlZF92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZvaWQgKmFyZylcXG4gICogdGhlIGZ1bmN0aW9uIGJhaWxlZCBvdXQgZHVlIHRvIHJtYXAgbG9jayBjb250ZW50aW9uLlxcbiAgKi9cXG4gaW50IGZvbGlvX3JlZmVyZW5jZWQoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGlzX2xvY2tlZCxcXG4tXFx0XFx0ICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHZtX2ZsYWdzX3QgKnZtX2ZsYWdzKVxcbitcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXFxuIHtcXG4gXFx0Ym9vbCB3ZV9sb2NrZWQgPSBmYWxzZTtcXG4gXFx0c3RydWN0IGZvbGlvX3JlZmVyZW5jZWRfYXJnIHByYSA9IHtcXG5AQCAtMTA3OCw3ICsxMDgxLDcgQEAgaW50IGZvbGlvX3JlZmVyZW5jZWQoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGlzX2xvY2tlZCxcXG4gXFx0fTtcXG4gXFxuIFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb19pc196b25lX2RldmljZShmb2xpbyksIGZvbGlvKTtcXG4tXFx0KnZtX2ZsYWdzID0gMDtcXG4rXFx0dm1hX2ZsYWdzX2NsZWFyX2FsbCh2bWFfZmxhZ3MpO1xcbiBcXHRpZiAoIXByYS5tYXBjb3VudClcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbkBAIC0xMDkyLDcgKzEwOTUsNyBAQCBpbnQgZm9saW9fcmVmZXJlbmNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgaXNfbG9ja2VkLFxcbiBcXHR9XFxuIFxcbiBcXHRybWFwX3dhbGsoZm9saW8sIFxcdTAwMjZyd2MpO1xcbi1cXHQqdm1fZmxhZ3MgPSBwcmEudm1fZmxhZ3M7XFxuK1xcdHZtYV9mbGFnc19zZXRfbWFzayh2bWFfZmxhZ3MsIHByYS52bWFfZmxhZ3MpO1xcbiBcXG4gXFx0aWYgKHdlX2xvY2tlZClcXG4gXFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IDk4NmRkZThlNzQyOWYzLi5mYTgwODcyMWI2NGQxOSAxMDA2NDRcXG4tLS0gYS9tbS92bXNjYW4uY1xcbisrKyBiL21tL3Ztc2Nhbi5jXFxuQEAgLTgzNSwxMSArODM1LDE1IEBAIGVudW0gZm9saW9fcmVmZXJlbmNlcyB7XFxuICAqIHdpdGggUEdfYWN0aXZlIHNldC4gSW4gY29udHJhc3QsIHRoZSBhZ2luZyAocGFnZSB0YWJsZSB3YWxrKSBwYXRoIHVzZXNcXG4gICogZm9saW9fdXBkYXRlX2dlbigpLlxcbiAgKi9cXG4tc3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXFxuIHtcXG4gXFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXFxuIFxcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkge1xcbiBcXHRcXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcXG4rXFx0XFx0LyogQWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuICovXFxuK1xcdFxcdGlmIChmb2xpb19pc19leGVjX2ZpbGUoZm9saW8sIHZtYV9mbGFncykpXFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHR9XFxuIFxcbkBAIC04NTEsNyArODU1LDcgQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiAjZWxzZVxcbi1zdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG4ge1xcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG5AQCAtODYxLDE2ICs4NjUsMTYgQEAgc3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuIHtcXG4gXFx0aW50IHJlZmVyZW5jZWRfcHRlcywgcmVmZXJlbmNlZF9mb2xpbztcXG4tXFx0dm1fZmxhZ3NfdCB2bV9mbGFncztcXG4rXFx0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzO1xcbiBcXG4gXFx0cmVmZXJlbmNlZF9wdGVzID0gZm9saW9fcmVmZXJlbmNlZChmb2xpbywgMSwgc2MtXFx1MDAzZXRhcmdldF9tZW1fY2dyb3VwLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2dm1fZmxhZ3MpO1xcbitcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2dm1hX2ZsYWdzKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFRoZSBzdXBwb3NlZGx5IHJlY2xhaW1hYmxlIGZvbGlvIHdhcyBmb3VuZCB0byBiZSBpbiBhIFZNX0xPQ0tFRCB2bWEuXFxuIFxcdCAqIExldCB0aGUgZm9saW8sIG5vdyBtYXJrZWQgTWxvY2tlZCwgYmUgbW92ZWQgdG8gdGhlIHVuZXZpY3RhYmxlIGxpc3QuXFxuIFxcdCAqL1xcbi1cXHRpZiAodm1fZmxhZ3MgXFx1MDAyNiBWTV9MT0NLRUQpXFxuK1xcdGlmICh2bWFfZmxhZ3NfdGVzdChcXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCkpXFxuIFxcdFxcdHJldHVybiBGT0xJT1JFRl9BQ1RJVkFURTtcXG4gXFxuIFxcdC8qXFxuQEAgLTg4Niw3ICs4OTAsNyBAQCBzdGF0aWMgZW51bSBmb2xpb19yZWZlcmVuY2VzIGZvbGlvX2NoZWNrX3JlZmVyZW5jZXMoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0XFx0aWYgKCFyZWZlcmVuY2VkX3B0ZXMpXFxuIFxcdFxcdFxcdHJldHVybiBGT0xJT1JFRl9SRUNMQUlNO1xcbiBcXG4tXFx0XFx0cmV0dXJuIGxydV9nZW5fc2V0X3JlZnMoZm9saW8pID8gRk9MSU9SRUZfQUNUSVZBVEUgOiBGT0xJT1JFRl9LRUVQO1xcbitcXHRcXHRyZXR1cm4gbHJ1X2dlbl9zZXRfcmVmcyhmb2xpbywgXFx1MDAyNnZtYV9mbGFncykgPyBGT0xJT1JFRl9BQ1RJVkFURSA6IEZPTElPUkVGX0tFRVA7XFxuIFxcdH1cXG4gXFxuIFxcdHJlZmVyZW5jZWRfZm9saW8gPSBmb2xpb190ZXN0X2NsZWFyX3JlZmVyZW5jZWQoZm9saW8pO1xcbkBAIC05MTQsNyArOTE4LDcgQEAgc3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aWYgKCh2bV9mbGFncyBcXHUwMDI2IFZNX0VYRUMpIFxcdTAwMjZcXHUwMDI2IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSlcXG4rXFx0XFx0aWYgKGZvbGlvX2lzX2V4ZWNfZmlsZShmb2xpbywgXFx1MDAyNnZtYV9mbGFncykpXFxuIFxcdFxcdFxcdHJldHVybiBGT0xJT1JFRl9BQ1RJVkFURTtcXG4gXFxuIFxcdFxcdHJldHVybiBGT0xJT1JFRl9LRUVQO1xcbkBAIC0yMDY1LDcgKzIwNjksNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbnJfdGFrZW47XFxuIFxcdHVuc2lnbmVkIGxvbmcgbnJfc2Nhbm5lZDtcXG4tXFx0dm1fZmxhZ3NfdCB2bV9mbGFncztcXG4rXFx0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzO1xcbiBcXHRMSVNUX0hFQUQobF9ob2xkKTtcXHQvKiBUaGUgZm9saW9zIHdoaWNoIHdlcmUgc25pcHBlZCBvZmYgKi9cXG4gXFx0TElTVF9IRUFEKGxfYWN0aXZlKTtcXG4gXFx0TElTVF9IRUFEKGxfaW5hY3RpdmUpO1xcbkBAIC0yMTA5LDcgKzIxMTMsNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbiBcXG4gXFx0XFx0LyogUmVmZXJlbmNlZCBvciBybWFwIGxvY2sgY29udGVudGlvbjogcm90YXRlICovXFxuIFxcdFxcdGlmIChmb2xpb19yZWZlcmVuY2VkKGZvbGlvLCAwLCBzYy1cXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAsXFxuLVxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnZtX2ZsYWdzKSAhPSAwKSB7XFxuK1xcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnZtYV9mbGFncykgIT0gMCkge1xcbiBcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHQgKiBJZGVudGlmeSByZWZlcmVuY2VkLCBmaWxlLWJhY2tlZCBhY3RpdmUgZm9saW9zIGFuZFxcbiBcXHRcXHRcXHQgKiBnaXZlIHRoZW0gb25lIG1vcmUgdHJpcCBhcm91bmQgdGhlIGFjdGl2ZSBsaXN0LiBTb1xcbkBAIC0yMTE5LDcgKzIxMjMsNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbiBcXHRcXHRcXHQgKiBJTywgcGx1cyBKVk0gY2FuIGNyZWF0ZSBsb3RzIG9mIGFub24gVk1fRVhFQyBmb2xpb3MsXFxuIFxcdFxcdFxcdCAqIHNvIHdlIGlnbm9yZSB0aGVtIGhlcmUuXFxuIFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRpZiAoKHZtX2ZsYWdzIFxcdTAwMjYgVk1fRVhFQykgXFx1MDAyNlxcdTAwMjYgZm9saW9faXNfZmlsZV9scnUoZm9saW8pKSB7XFxuK1xcdFxcdFxcdGlmIChmb2xpb19pc19leGVjX2ZpbGUoZm9saW8sIFxcdTAwMjZ2bWFfZmxhZ3MpKSB7XFxuIFxcdFxcdFxcdFxcdG5yX3JvdGF0ZWQgKz0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbiBcXHRcXHRcXHRcXHRsaXN0X2FkZChcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSwgXFx1MDAyNmxfYWN0aXZlKTtcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuQEAgLTMxODgsNyArMzE5Miw3IEBAIHN0YXRpYyBib29sIHBvc2l0aXZlX2N0cmxfZXJyKHN0cnVjdCBjdHJsX3BvcyAqc3AsIHN0cnVjdCBjdHJsX3BvcyAqcHYpXFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuIFxcbiAvKiBwcm9tb3RlIHBhZ2VzIGFjY2Vzc2VkIHRocm91Z2ggcGFnZSB0YWJsZXMgKi9cXG4tc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4pXFxuK3N0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXFx1MDAzZWZsYWdzLmYpO1xcbiBcXG5AQCAtMzE5NiwxMCArMzIwMCwxNSBAQCBzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbilcXG4gXFxuIFxcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqL1xcbiBcXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpIHtcXG4rXFx0XFx0LyogQWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuICovXFxuK1xcdFxcdGlmIChmb2xpb19pc19leGVjX2ZpbGUoZm9saW8sIHZtYV9mbGFncykpXFxuK1xcdFxcdFxcdGdvdG8gcHJvbW90ZTtcXG4rXFxuIFxcdFxcdHNldF9tYXNrX2JpdHMoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcdH1cXG4gXFxuK3Byb21vdGU6XFxuIFxcdGRvIHtcXG4gXFx0XFx0LyogbHJ1X2dlbl9kZWxfZm9saW8oKSBoYXMgaXNvbGF0ZWQgdGhpcyBwYWdlPyAqL1xcbiBcXHRcXHRpZiAoIShvbGRfZmxhZ3MgXFx1MDAyNiBMUlVfR0VOX01BU0spKVxcbkBAIC0zNDI4LDggKzM0MzcsOCBAQCBzdGF0aWMgYm9vbCBzdWl0YWJsZV90b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKVxcbiBcXHRyZXR1cm4geW91bmcgKiBuIFxcdTAwM2U9IHRvdGFsO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi1cXHRcXHRcXHQgICAgICBpbnQgbmV3X2dlbiwgYm9vbCBkaXJ0eSlcXG4rc3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuK1xcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBib29sIGRpcnR5KVxcbiB7XFxuIFxcdGludCBvbGRfZ2VuO1xcbiBcXG5AQCAtMzQ0MiwxMCArMzQ1MSwxMCBAQCBzdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcXG4gXFxuIFxcdGlmICh3YWxrKSB7XFxuLVxcdFxcdG9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuKTtcXG4rXFx0XFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sIFxcdTAwMjZ2bWEtXFx1MDAzZWZsYWdzKTtcXG4gXFx0XFx0aWYgKG9sZF9nZW4gXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXFxuIFxcdFxcdFxcdHVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcXG4tXFx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvKSkge1xcbitcXHR9IGVsc2UgaWYgKGxydV9nZW5fc2V0X3JlZnMoZm9saW8sIFxcdTAwMjZ2bWEtXFx1MDAzZWZsYWdzKSkge1xcbiBcXHRcXHRvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7XFxuIFxcdFxcdGlmIChvbGRfZ2VuIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgb2xkX2dlbiAhPSBuZXdfZ2VuKVxcbiBcXHRcXHRcXHRmb2xpb19hY3RpdmF0ZShmb2xpbyk7XFxuQEAgLTM1MTgsNyArMzUyNyw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGlmIChsYXN0ICE9IGZvbGlvKSB7XFxuLVxcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpO1xcbitcXHRcXHRcXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLVxcdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xcbiBcXG4gXFx0XFx0XFx0bGFzdCA9IGZvbGlvO1xcbiBcXHRcXHRcXHRkaXJ0eSA9IGZhbHNlO1xcbkBAIC0zNTMxLDcgKzM1NDAsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0d2Fsay1cXHUwMDNlbW1fc3RhdHNbTU1fTEVBRl9ZT1VOR10gKz0gbnI7XFxuIFxcdH1cXG4gXFxuLVxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpO1xcbitcXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLVxcdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xcbiBcXHRsYXN0ID0gTlVMTDtcXG4gXFxuIFxcdGlmIChpIFxcdTAwM2MgUFRSU19QRVJfUFRFIFxcdTAwMjZcXHUwMDI2IGdldF9uZXh0X3ZtYShQTURfTUFTSywgUEFHRV9TSVpFLCBhcmdzLCBcXHUwMDI2c3RhcnQsIFxcdTAwMjZlbmQpKVxcbkBAIC0zNjA5LDcgKzM2MTgsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxcbiBcXHRcXHRcXHRnb3RvIG5leHQ7XFxuIFxcbiBcXHRcXHRpZiAobGFzdCAhPSBmb2xpbykge1xcbi1cXHRcXHRcXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBsYXN0LCBnZW4sIGRpcnR5KTtcXG4rXFx0XFx0XFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcXG4gXFxuIFxcdFxcdFxcdGxhc3QgPSBmb2xpbztcXG4gXFx0XFx0XFx0ZGlydHkgPSBmYWxzZTtcXG5AQCAtMzYyMyw3ICszNjMyLDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcXG4gXFx0XFx0aSA9IGkgXFx1MDAzZSBNSU5fTFJVX0JBVENIID8gMCA6IGZpbmRfbmV4dF9iaXQoYml0bWFwLCBNSU5fTFJVX0JBVENILCBpKSArIDE7XFxuIFxcdH0gd2hpbGUgKGkgXFx1MDAzYz0gTUlOX0xSVV9CQVRDSCk7XFxuIFxcbi1cXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBsYXN0LCBnZW4sIGRpcnR5KTtcXG4rXFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcXG4gXFxuIFxcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xcbiBcXHRzcGluX3VubG9jayhwdGwpO1xcbkBAIC00MjU4LDcgKzQyNjcsNyBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcXG4tXFx0XFx0XFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgbGFzdCwgZ2VuLCBkaXJ0eSk7XFxuK1xcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XFxuIFxcbiBcXHRcXHRcXHRsYXN0ID0gZm9saW87XFxuIFxcdFxcdFxcdGRpcnR5ID0gZmFsc2U7XFxuQEAgLTQyNzAsNyArNDI3OSw3IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcXG4gXFx0XFx0eW91bmcgKz0gbnI7XFxuIFxcdH1cXG4gXFxuLVxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpO1xcbitcXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xcbiBcXG4gXFx0bGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQyMDo1MzowOC44MzA4NTk3MTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5OTY3MDk5NjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFnZSByZWNsYWltIGhldXJpc3RpY3MgdG8gYWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuIEl0IGFmZmVjdHMgYm90aCBzdGFuZGFyZCBMUlUgYW5kIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYXRocy4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCByZWNsYWltIHBhdGhzIChlLmcuLCBmb2xpb19yZWZlcmVuY2VkLCBzaHJpbmtfYWN0aXZlX2xpc3QpLCB3aGljaCBhcmUgaG90LXBhdGggZnVuY3Rpb25zLCBzbyBubyBzcGVjaWZpYyBmb2N1cyBzeW1ib2xzIGFyZSBwcm92aWRlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4ZmY1MjgzMDhlODY3YTg4NDEyOGRjNzNhNDk1ZThhNDE0ODdjYmYzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMTYgMjA6NTM6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuaW5kZXggYjVjNGRjMGYzZmUzMjYuLjMwZmRmMTA1NjMxMjEzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuQEAgLTMwLDYgKzMwLDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2lzX2ZpbGVfbHJ1KGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gIWZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbyk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19pc19leGVjX2ZpbGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0Y29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbit7XG4rXHRyZXR1cm4gdm1hX2ZsYWdzX3Rlc3Qodm1hX2ZsYWdzLCBWTUFfRVhFQ19CSVQpIFx1MDAyNlx1MDAyNiBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4rfVxuK1xuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdFx0XHRlbnVtIGxydV9saXN0IGxydSwgZW51bSB6b25lX3R5cGUgemlkLFxuIFx0XHRcdFx0bG9uZyBucl9wYWdlcylcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JtYXAuaCBiL2luY2x1ZGUvbGludXgvcm1hcC5oXG5pbmRleCA4ZGMwODcxZTVmMDAxMS4uZTA5MGFhMDk4MjVkNTIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3JtYXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9ybWFwLmhcbkBAIC04NDMsNyArODQzLDcgQEAgc3RhdGljIGlubGluZSBpbnQgZm9saW9fdHJ5X3NoYXJlX2Fub25fcm1hcF9wbWQoc3RydWN0IGZvbGlvICpmb2xpbyxcbiAgKiBDYWxsZWQgZnJvbSBtbS92bXNjYW4uYyB0byBoYW5kbGUgcGFnaW5nIG91dFxuICAqL1xuIGludCBmb2xpb19yZWZlcmVuY2VkKHN0cnVjdCBmb2xpbyAqLCBpbnQgaXNfbG9ja2VkLFxuLVx0XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdm1fZmxhZ3NfdCAqdm1fZmxhZ3MpO1xuK1x0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpO1xuIFxuIHZvaWQgdHJ5X3RvX21pZ3JhdGUoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpO1xuIHZvaWQgdHJ5X3RvX3VubWFwKHN0cnVjdCBmb2xpbyAqLCBlbnVtIHR0dV9mbGFncyBmbGFncyk7XG5AQCAtOTc1LDEwICs5NzUsOSBAQCBzdHJ1Y3QgYW5vbl92bWEgKmZvbGlvX2xvY2tfYW5vbl92bWFfcmVhZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuICNkZWZpbmUgYW5vbl92bWFfcHJlcGFyZSh2bWEpXHQoMClcbiBcbiBzdGF0aWMgaW5saW5lIGludCBmb2xpb19yZWZlcmVuY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBpc19sb2NrZWQsXG4tXHRcdFx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi1cdFx0XHRcdCAgdm1fZmxhZ3NfdCAqdm1fZmxhZ3MpXG4rXHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiB7XG4tXHQqdm1fZmxhZ3MgPSAwO1xuK1x0dm1hX2ZsYWdzX2NsZWFyX2FsbCh2bWFfZmxhZ3MpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuY1xuaW5kZXggZTg1NDY3OTU1M2I5YzMuLjQwODU1NDBiNmEyNWY0IDEwMDY0NFxuLS0tIGEvbW0vcm1hcC5jXG4rKysgYi9tbS9ybWFwLmNcbkBAIC05MDcsNyArOTA3LDcgQEAgcG1kX3QgKm1tX2ZpbmRfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4gc3RydWN0IGZvbGlvX3JlZmVyZW5jZWRfYXJnIHtcbiBcdGludCBtYXBjb3VudDtcbiBcdGludCByZWZlcmVuY2VkO1xuLVx0dm1fZmxhZ3NfdCB2bV9mbGFncztcbitcdHZtYV9mbGFnc190IHZtYV9mbGFncztcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiB9O1xuIFxuQEAgLTkyNiw3ICs5MjYsNyBAQCBzdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRhZGRyZXNzID0gcHZtdy5hZGRyZXNzO1xuIFx0XHRuciA9IDE7XG4gXG4tXHRcdGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0xPQ0tFRCkge1xuK1x0XHRpZiAodm1hX3Rlc3Qodm1hLCBWTUFfTE9DS0VEX0JJVCkpIHtcbiBcdFx0XHRwdGVzKys7XG4gXHRcdFx0cHJhLVx1MDAzZW1hcGNvdW50LS07XG4gXG5AQCAtOTQ3LDcgKzk0Nyw3IEBAIHN0YXRpYyBib29sIGZvbGlvX3JlZmVyZW5jZWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdFx0LyogUmVzdG9yZSB0aGUgbWxvY2sgd2hpY2ggZ290IG1pc3NlZCAqL1xuIFx0XHRcdG1sb2NrX3ZtYV9mb2xpbyhmb2xpbywgdm1hKTtcbiBcdFx0XHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFx1MDAyNnB2bXcpO1xuLVx0XHRcdHByYS1cdTAwM2V2bV9mbGFncyB8PSBWTV9MT0NLRUQ7XG4rXHRcdFx0dm1hX2ZsYWdzX3NldChcdTAwMjZwcmEtXHUwMDNldm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCk7XG4gXHRcdFx0cmV0dXJuIGZhbHNlOyAvKiBUbyBicmVhayB0aGUgbG9vcCAqL1xuIFx0XHR9XG4gXG5AQCAtMTAxNSw4ICsxMDE1LDExIEBAIHN0YXRpYyBib29sIGZvbGlvX3JlZmVyZW5jZWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdHJlZmVyZW5jZWQrKztcbiBcbiBcdGlmIChyZWZlcmVuY2VkKSB7XG4rXHRcdHZtYV9mbGFnc190IHZtYV9mbGFncyA9IHZtYS1cdTAwM2VmbGFncztcbitcbiBcdFx0cHJhLVx1MDAzZXJlZmVyZW5jZWQrKztcbi1cdFx0cHJhLVx1MDAzZXZtX2ZsYWdzIHw9IHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgflZNX0xPQ0tFRDtcbitcdFx0dm1hX2ZsYWdzX2NsZWFyKFx1MDAyNnZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpO1xuK1x0XHR2bWFfZmxhZ3Nfc2V0X21hc2soXHUwMDI2cHJhLVx1MDAzZXZtYV9mbGFncywgdm1hX2ZsYWdzKTtcbiBcdH1cbiBcbiBcdGlmICghcHJhLVx1MDAzZW1hcGNvdW50KVxuQEAgLTEwNTQsNyArMTA1Nyw3IEBAIHN0YXRpYyBib29sIGludmFsaWRfZm9saW9fcmVmZXJlbmNlZF92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZvaWQgKmFyZylcbiAgKiBAZm9saW86IFRoZSBmb2xpbyB0byB0ZXN0LlxuICAqIEBpc19sb2NrZWQ6IENhbGxlciBob2xkcyBsb2NrIG9uIHRoZSBmb2xpby5cbiAgKiBAbWVtY2c6IHRhcmdldCBtZW1vcnkgY2dyb3VwXG4tICogQHZtX2ZsYWdzOiBBIGNvbWJpbmF0aW9uIG9mIGFsbCB0aGUgdm1hLVx1MDAzZXZtX2ZsYWdzIHdoaWNoIHJlZmVyZW5jZWQgdGhlIGZvbGlvLlxuKyAqIEB2bWFfZmxhZ3M6IEEgY29tYmluYXRpb24gb2YgYWxsIHRoZSB2bWEtXHUwMDNlZmxhZ3Mgd2hpY2ggcmVmZXJlbmNlZCB0aGUgZm9saW8uXG4gICpcbiAgKiBRdWljayB0ZXN0X2FuZF9jbGVhcl9yZWZlcmVuY2VkIGZvciBhbGwgbWFwcGluZ3Mgb2YgYSBmb2xpbyxcbiAgKlxuQEAgLTEwNjIsNyArMTA2NSw3IEBAIHN0YXRpYyBib29sIGludmFsaWRfZm9saW9fcmVmZXJlbmNlZF92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZvaWQgKmFyZylcbiAgKiB0aGUgZnVuY3Rpb24gYmFpbGVkIG91dCBkdWUgdG8gcm1hcCBsb2NrIGNvbnRlbnRpb24uXG4gICovXG4gaW50IGZvbGlvX3JlZmVyZW5jZWQoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGlzX2xvY2tlZCxcbi1cdFx0ICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHZtX2ZsYWdzX3QgKnZtX2ZsYWdzKVxuK1x0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4ge1xuIFx0Ym9vbCB3ZV9sb2NrZWQgPSBmYWxzZTtcbiBcdHN0cnVjdCBmb2xpb19yZWZlcmVuY2VkX2FyZyBwcmEgPSB7XG5AQCAtMTA3OCw3ICsxMDgxLDcgQEAgaW50IGZvbGlvX3JlZmVyZW5jZWQoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGlzX2xvY2tlZCxcbiBcdH07XG4gXG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pLCBmb2xpbyk7XG4tXHQqdm1fZmxhZ3MgPSAwO1xuK1x0dm1hX2ZsYWdzX2NsZWFyX2FsbCh2bWFfZmxhZ3MpO1xuIFx0aWYgKCFwcmEubWFwY291bnQpXG4gXHRcdHJldHVybiAwO1xuIFxuQEAgLTEwOTIsNyArMTA5NSw3IEBAIGludCBmb2xpb19yZWZlcmVuY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBpc19sb2NrZWQsXG4gXHR9XG4gXG4gXHRybWFwX3dhbGsoZm9saW8sIFx1MDAyNnJ3Yyk7XG4tXHQqdm1fZmxhZ3MgPSBwcmEudm1fZmxhZ3M7XG4rXHR2bWFfZmxhZ3Nfc2V0X21hc2sodm1hX2ZsYWdzLCBwcmEudm1hX2ZsYWdzKTtcbiBcbiBcdGlmICh3ZV9sb2NrZWQpXG4gXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggOTg2ZGRlOGU3NDI5ZjMuLmZhODA4NzIxYjY0ZDE5IDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtODM1LDExICs4MzUsMTUgQEAgZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcbiAgKiB3aXRoIFBHX2FjdGl2ZSBzZXQuIEluIGNvbnRyYXN0LCB0aGUgYWdpbmcgKHBhZ2UgdGFibGUgd2FsaykgcGF0aCB1c2VzXG4gICogZm9saW9fdXBkYXRlX2dlbigpLlxuICAqL1xuLXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4ge1xuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKSB7XG4gXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcbitcdFx0LyogQWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuICovXG4rXHRcdGlmIChmb2xpb19pc19leGVjX2ZpbGUoZm9saW8sIHZtYV9mbGFncykpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbkBAIC04NTEsNyArODU1LDcgQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuICNlbHNlXG4tc3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuQEAgLTg2MSwxNiArODY1LDE2IEBAIHN0YXRpYyBlbnVtIGZvbGlvX3JlZmVyZW5jZXMgZm9saW9fY2hlY2tfcmVmZXJlbmNlcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdFx0XHRcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4ge1xuIFx0aW50IHJlZmVyZW5jZWRfcHRlcywgcmVmZXJlbmNlZF9mb2xpbztcbi1cdHZtX2ZsYWdzX3Qgdm1fZmxhZ3M7XG4rXHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3M7XG4gXG4gXHRyZWZlcmVuY2VkX3B0ZXMgPSBmb2xpb19yZWZlcmVuY2VkKGZvbGlvLCAxLCBzYy1cdTAwM2V0YXJnZXRfbWVtX2Nncm91cCxcbi1cdFx0XHRcdFx0ICAgXHUwMDI2dm1fZmxhZ3MpO1xuK1x0XHRcdFx0XHQgICBcdTAwMjZ2bWFfZmxhZ3MpO1xuIFxuIFx0LypcbiBcdCAqIFRoZSBzdXBwb3NlZGx5IHJlY2xhaW1hYmxlIGZvbGlvIHdhcyBmb3VuZCB0byBiZSBpbiBhIFZNX0xPQ0tFRCB2bWEuXG4gXHQgKiBMZXQgdGhlIGZvbGlvLCBub3cgbWFya2VkIE1sb2NrZWQsIGJlIG1vdmVkIHRvIHRoZSB1bmV2aWN0YWJsZSBsaXN0LlxuIFx0ICovXG4tXHRpZiAodm1fZmxhZ3MgXHUwMDI2IFZNX0xPQ0tFRClcbitcdGlmICh2bWFfZmxhZ3NfdGVzdChcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKSlcbiBcdFx0cmV0dXJuIEZPTElPUkVGX0FDVElWQVRFO1xuIFxuIFx0LypcbkBAIC04ODYsNyArODkwLDcgQEAgc3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdGlmICghcmVmZXJlbmNlZF9wdGVzKVxuIFx0XHRcdHJldHVybiBGT0xJT1JFRl9SRUNMQUlNO1xuIFxuLVx0XHRyZXR1cm4gbHJ1X2dlbl9zZXRfcmVmcyhmb2xpbykgPyBGT0xJT1JFRl9BQ1RJVkFURSA6IEZPTElPUkVGX0tFRVA7XG4rXHRcdHJldHVybiBscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcdTAwMjZ2bWFfZmxhZ3MpID8gRk9MSU9SRUZfQUNUSVZBVEUgOiBGT0xJT1JFRl9LRUVQO1xuIFx0fVxuIFxuIFx0cmVmZXJlbmNlZF9mb2xpbyA9IGZvbGlvX3Rlc3RfY2xlYXJfcmVmZXJlbmNlZChmb2xpbyk7XG5AQCAtOTE0LDcgKzkxOCw3IEBAIHN0YXRpYyBlbnVtIGZvbGlvX3JlZmVyZW5jZXMgZm9saW9fY2hlY2tfcmVmZXJlbmNlcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHQvKlxuIFx0XHQgKiBBY3RpdmF0ZSBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciBmaXJzdCB1c2FnZS5cbiBcdFx0ICovXG4tXHRcdGlmICgodm1fZmxhZ3MgXHUwMDI2IFZNX0VYRUMpIFx1MDAyNlx1MDAyNiBmb2xpb19pc19maWxlX2xydShmb2xpbykpXG4rXHRcdGlmIChmb2xpb19pc19leGVjX2ZpbGUoZm9saW8sIFx1MDAyNnZtYV9mbGFncykpXG4gXHRcdFx0cmV0dXJuIEZPTElPUkVGX0FDVElWQVRFO1xuIFxuIFx0XHRyZXR1cm4gRk9MSU9SRUZfS0VFUDtcbkBAIC0yMDY1LDcgKzIwNjksNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbnJfdGFrZW47XG4gXHR1bnNpZ25lZCBsb25nIG5yX3NjYW5uZWQ7XG4tXHR2bV9mbGFnc190IHZtX2ZsYWdzO1xuK1x0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzO1xuIFx0TElTVF9IRUFEKGxfaG9sZCk7XHQvKiBUaGUgZm9saW9zIHdoaWNoIHdlcmUgc25pcHBlZCBvZmYgKi9cbiBcdExJU1RfSEVBRChsX2FjdGl2ZSk7XG4gXHRMSVNUX0hFQUQobF9pbmFjdGl2ZSk7XG5AQCAtMjEwOSw3ICsyMTEzLDcgQEAgc3RhdGljIHZvaWQgc2hyaW5rX2FjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbiBcbiBcdFx0LyogUmVmZXJlbmNlZCBvciBybWFwIGxvY2sgY29udGVudGlvbjogcm90YXRlICovXG4gXHRcdGlmIChmb2xpb19yZWZlcmVuY2VkKGZvbGlvLCAwLCBzYy1cdTAwM2V0YXJnZXRfbWVtX2Nncm91cCxcbi1cdFx0XHRcdCAgICAgXHUwMDI2dm1fZmxhZ3MpICE9IDApIHtcbitcdFx0XHRcdCAgICAgXHUwMDI2dm1hX2ZsYWdzKSAhPSAwKSB7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBJZGVudGlmeSByZWZlcmVuY2VkLCBmaWxlLWJhY2tlZCBhY3RpdmUgZm9saW9zIGFuZFxuIFx0XHRcdCAqIGdpdmUgdGhlbSBvbmUgbW9yZSB0cmlwIGFyb3VuZCB0aGUgYWN0aXZlIGxpc3QuIFNvXG5AQCAtMjExOSw3ICsyMTIzLDcgQEAgc3RhdGljIHZvaWQgc2hyaW5rX2FjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbiBcdFx0XHQgKiBJTywgcGx1cyBKVk0gY2FuIGNyZWF0ZSBsb3RzIG9mIGFub24gVk1fRVhFQyBmb2xpb3MsXG4gXHRcdFx0ICogc28gd2UgaWdub3JlIHRoZW0gaGVyZS5cbiBcdFx0XHQgKi9cbi1cdFx0XHRpZiAoKHZtX2ZsYWdzIFx1MDAyNiBWTV9FWEVDKSBcdTAwMjZcdTAwMjYgZm9saW9faXNfZmlsZV9scnUoZm9saW8pKSB7XG4rXHRcdFx0aWYgKGZvbGlvX2lzX2V4ZWNfZmlsZShmb2xpbywgXHUwMDI2dm1hX2ZsYWdzKSkge1xuIFx0XHRcdFx0bnJfcm90YXRlZCArPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXHRcdFx0XHRsaXN0X2FkZChcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmxfYWN0aXZlKTtcbiBcdFx0XHRcdGNvbnRpbnVlO1xuQEAgLTMxODgsNyArMzE5Miw3IEBAIHN0YXRpYyBib29sIHBvc2l0aXZlX2N0cmxfZXJyKHN0cnVjdCBjdHJsX3BvcyAqc3AsIHN0cnVjdCBjdHJsX3BvcyAqcHYpXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiBcbiAvKiBwcm9tb3RlIHBhZ2VzIGFjY2Vzc2VkIHRocm91Z2ggcGFnZSB0YWJsZXMgKi9cbi1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbilcbitzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuIFxuQEAgLTMxOTYsMTAgKzMyMDAsMTUgQEAgc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4pXG4gXG4gXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi9cbiBcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpIHtcbitcdFx0LyogQWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuICovXG4rXHRcdGlmIChmb2xpb19pc19leGVjX2ZpbGUoZm9saW8sIHZtYV9mbGFncykpXG4rXHRcdFx0Z290byBwcm9tb3RlO1xuK1xuIFx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XG4gXHRcdHJldHVybiAtMTtcbiBcdH1cbiBcbitwcm9tb3RlOlxuIFx0ZG8ge1xuIFx0XHQvKiBscnVfZ2VuX2RlbF9mb2xpbygpIGhhcyBpc29sYXRlZCB0aGlzIHBhZ2U/ICovXG4gXHRcdGlmICghKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSlcbkBAIC0zNDI4LDggKzM0MzcsOCBAQCBzdGF0aWMgYm9vbCBzdWl0YWJsZV90b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKVxuIFx0cmV0dXJuIHlvdW5nICogbiBcdTAwM2U9IHRvdGFsO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLVx0XHRcdCAgICAgIGludCBuZXdfZ2VuLCBib29sIGRpcnR5KVxuK3N0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuK1x0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgYm9vbCBkaXJ0eSlcbiB7XG4gXHRpbnQgb2xkX2dlbjtcbiBcbkBAIC0zNDQyLDEwICszNDUxLDEwIEBAIHN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuIFxuIFx0aWYgKHdhbGspIHtcbi1cdFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4pO1xuK1x0XHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgXHUwMDI2dm1hLVx1MDAzZWZsYWdzKTtcbiBcdFx0aWYgKG9sZF9nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXG4gXHRcdFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xuLVx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvKSkge1xuK1x0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpKSB7XG4gXHRcdG9sZF9nZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTtcbiBcdFx0aWYgKG9sZF9nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXG4gXHRcdFx0Zm9saW9fYWN0aXZhdGUoZm9saW8pO1xuQEAgLTM1MTgsNyArMzUyNyw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAobGFzdCAhPSBmb2xpbykge1xuLVx0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC0zNTMxLDcgKzM1NDAsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0d2Fsay1cdTAwM2VtbV9zdGF0c1tNTV9MRUFGX1lPVU5HXSArPSBucjtcbiBcdH1cbiBcbi1cdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuIFx0bGFzdCA9IE5VTEw7XG4gXG4gXHRpZiAoaSBcdTAwM2MgUFRSU19QRVJfUFRFIFx1MDAyNlx1MDAyNiBnZXRfbmV4dF92bWEoUE1EX01BU0ssIFBBR0VfU0laRSwgYXJncywgXHUwMDI2c3RhcnQsIFx1MDAyNmVuZCkpXG5AQCAtMzYwOSw3ICszNjE4LDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcbiBcdFx0XHRnb3RvIG5leHQ7XG4gXG4gXHRcdGlmIChsYXN0ICE9IGZvbGlvKSB7XG4tXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4rXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC0zNjIzLDcgKzM2MzIsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0XHRpID0gaSBcdTAwM2UgTUlOX0xSVV9CQVRDSCA/IDAgOiBmaW5kX25leHRfYml0KGJpdG1hcCwgTUlOX0xSVV9CQVRDSCwgaSkgKyAxO1xuIFx0fSB3aGlsZSAoaSBcdTAwM2M9IE1JTl9MUlVfQkFUQ0gpO1xuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4rXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuIFxuIFx0bGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7XG4gXHRzcGluX3VubG9jayhwdGwpO1xuQEAgLTQyNTgsNyArNDI2Nyw3IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcbi1cdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuIFxuIFx0XHRcdGxhc3QgPSBmb2xpbztcbiBcdFx0XHRkaXJ0eSA9IGZhbHNlO1xuQEAgLTQyNzAsNyArNDI3OSw3IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdFx0eW91bmcgKz0gbnI7XG4gXHR9XG4gXG4tXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4gXG4gXHRsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDIwOjUzOjA4LjgzMDg2MTMzMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMjk0OTA3NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoOiBQYWdlIFJlY2xhaW0gYW5kIEV4ZWN1dGFibGUgRmlsZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIG1vZGlmeWluZyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIFZNQSBmbGFncyBpbiByZWxhdGlvbiB0byBmb2xpbyByZWZlcmVuY2luZyBhbmQgcmVsYXRlZCBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgaXQncyByZXBsYWNpbmcgYHZtX2ZsYWdzX3RgIHdpdGggYHZtYV9mbGFnc190YCwgd2hpY2gsIGhvbGQgb24sIHNlZW1zIHRvIGJlIGEgZGlmZmVyZW50IHR5cGUsIG1heWJlIGEgc3RydWN0PyBBaGEsIEkgc2VlIGluIGBpbmNsdWRlL2xpbnV4L21tX2lubGluZS5oYCwgYHZtYV9mbGFnc190YCBpcyB1c2VkIHdpdGhpbiBgZm9saW9faXNfZXhlY19maWxlYC4gVGhhdCBjbGVhcnMgaXQgdXAuIFNvLCB0aGUgcGF0Y2ggaXMgY2hhbmdpbmcgYHZtX2ZsYWdzX3QgKnZtX2ZsYWdzYCB0byBgdm1hX2ZsYWdzX3QgKnZtYV9mbGFnc2AgaW4gYGZvbGlvX3JlZmVyZW5jZWRgLlxuXG5UaGUga2V5IGhlcmUgaXMgdGhhdCBgbHJ1X2dlbl9zZXRfcmVmc2AgaXMgYmVpbmcgdXBkYXRlZCB0byB0YWtlIGB2bWFfZmxhZ3NgLCB3aGljaCB3YXNuJ3QgdGhlIGNhc2UgcHJldmlvdXNseS4gTm93LCB0aGlzIGZ1bmN0aW9uIHdpbGwgYWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgKmFmdGVyKiB0aGVpciBmaXJzdCB1c2FnZS4gVGhhdCdzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gaG93IHBhZ2UgcmVjbGFpbSwgc3BlY2lmaWNhbGx5IGJvdGggTUdMUlUgYW5kIHRoZSBzdGFuZGFyZCBMUlUsIG9wZXJhdGVzLiBUaGlzIGlzIGludGVyZXN0aW5nLiBJdCdzIG1vZGlmeWluZyBjb3JlIE1NIGNvZGUg4oCTIHRoaW5ncyBsaWtlIGBtbS92bXNjYW4uY2AgYW5kIGBtbS9ybWFwLmNgIOKAkyBzbyB0aGlzIGNvdWxkIGhhdmUgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zLiBBbmQsIHllYWgsIHBhZ2UgcmVjbGFpbSBpcyBkZWZpbml0ZWx5IGEgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIHBhcnQgb2YgdGhlIHN5c3RlbS5cblxuVGhpcyBoYXMgbWUgdGhpbmtpbmcuIEdpdmVuIHRoaXMgY2hhbmdlIHRvIGNvcmUgTU0gbG9naWMsIGZ1enppbmcgaXMgKmFic29sdXRlbHkqIGluIG9yZGVyLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIG1vc3QgY3JpdGljYWwgZm9yIGZvY3VzZWQgZnV6emluZy5cblxuTGV0J3Mgc2VlLCBpdCBsb29rcyBsaWtlIHRoZXNlIGFyZSB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zOiBgZm9saW9fcmVmZXJlbmNlZGAsIGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCwgYHNocmlua19hY3RpdmVfbGlzdGAsIGBmb2xpb191cGRhdGVfZ2VuYCwgYHdhbGtfdXBkYXRlX2ZvbGlvYCwgYHdhbGtfcHRlX3JhbmdlYCwgYHdhbGtfcG1kX3JhbmdlX2xvY2tlZGAsIGFuZCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAuXG5cbk5vdywgd2FpdCBhIG1pbnV0ZSwgYGZvbGlvX3JlZmVyZW5jZWRgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYW5kIGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCBhcmUgKnZlcnkqIGhvdC1wYXRoIGZ1bmN0aW9ucyBpbiBtZW1vcnkgcmVjbGFpbS4gQW5kIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBpcyByZWxhdGVkIHRvIE1HTFJVLiBUaGUgZ29hbCBoZXJlIGlzIHRvIGlkZW50aWZ5IHRhcmdldHMgdGhhdCBhcmUgTk9UIHRoZSBob3QgcGF0aC4gTGV0IG1lIHRoaW5rIGFib3V0IHRoaXMuLi4gc3BlY2lmaWMgc3lzY2FsbHMgb3Igb3BlcmF0aW9ucyB0aGF0IG1pZ2h0IHRyaWdnZXIgdGhpcyBsb2dpYz8gTWVtb3J5IHByZXNzdXJlLCBwYWdlIHJlY2xhaW0sIHN3YXAsIGBtYWR2aXNlYC4uLlxuXG5Pa2F5LCB0aGUgcHJvbXB0IGlzIHRlbGxpbmcgbWUgdG8gZmluZCBzb21ldGhpbmcgYmV5b25kIHRoZSBvYnZpb3VzLiBJdCBzYXlzLCBcIkF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlwiIFJpZ2h0LCB0aGUgZ29hbCBpcyB0byBwaW5wb2ludCBzb21ldGhpbmcgbW9yZSBzcGVjaWZpYy4gYHNocmlua19hY3RpdmVfbGlzdGAsIGBmb2xpb19yZWZlcmVuY2VkYCwgYGZvbGlvX2NoZWNrX3JlZmVyZW5jZXNgIGFyZSBkZWZpbml0ZWx5IGhvdC4gV2hhdCBhYm91dCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGA/IE1heWJlIHRoYXQncyBhbiBvcHRpb24/XG5cbkhtbSwgaXQncyBhIGNvcmUgTU0gY2hhbmdlLiBJc29sYXRpbmcgYSBzaW5nbGUgbm9uLWhvdC1wYXRoIGZ1bmN0aW9uIGlzIGNoYWxsZW5naW5nIGhlcmUuIE1heWJlIHRoYXQgaW5saW5lIGZ1bmN0aW9uLCBgZm9saW9faXNfZXhlY19maWxlYD8gTGV0J3MgY2hlY2sgYG1tL3Ztc2Nhbi5jYCBmb3IgY2FsbHMgdG8gYGZvbGlvX2NoZWNrX3JlZmVyZW5jZXNgLiBJJ2xsIHVzZSBgZ3JlcHBlcmAgdG8gZmluZCBjYWxscyB0byBgZm9saW9fY2hlY2tfcmVmZXJlbmNlc2Agbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTk4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMjA6NTM6MjAuMTI1NzcxMTMxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMjY0MDQ4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb2xpb19jaGVja19yZWZlcmVuY2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTg1OD1zdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXFxuLS1cXG5tbS92bXNjYW4uYy04NjMtXFxubW0vdm1zY2FuLmM6ODY0OnN0YXRpYyBlbnVtIGZvbGlvX3JlZmVyZW5jZXMgZm9saW9fY2hlY2tfcmVmZXJlbmNlcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL3Ztc2Nhbi5jLTg2NS1cXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmM9MTA1NT1zdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy0xMjI4LVxcdFxcdGlmICghaWdub3JlX3JlZmVyZW5jZXMpXFxubW0vdm1zY2FuLmM6MTIyOTpcXHRcXHRcXHRyZWZlcmVuY2VzID0gZm9saW9fY2hlY2tfcmVmZXJlbmNlcyhmb2xpbywgc2MpO1xcbm1tL3Ztc2Nhbi5jLTEyMzAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDIwOjUzOjIwLjUyODQxODEwNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MDkwOTk0MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNR0xSVSBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGlzIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBzdHVmZiBpcyB3aXJlZCB1cC4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCBpcyBjYWxsZWQgZnJvbSBgc2hyaW5rX2ZvbGlvX2xpc3RgLCB3aGljaCBpcyBhIGtleSBwYXJ0IG9mIHRoZSBzaHJpbmtpbmcgcHJvY2Vzcy4gQW5kIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IGBzaHJpbmtfYWN0aXZlX2xpc3RgIGlzIGFsc28gYmVpbmcgbW9kaWZpZWQgaGVyZS4gVGhlbiwgSSBzZWUgYHdhbGtfdXBkYXRlX2ZvbGlvYCBiZWluZyBjYWxsZWQgZnJvbSBtdWx0aXBsZSBwbGFjZXM6IGB3YWxrX3B0ZV9yYW5nZWAsIGB3YWxrX3BtZF9yYW5nZV9sb2NrZWRgLCBhbmQgYGxydV9nZW5fbG9va19hcm91bmRgLiBUaGF0IGNvbm5lY3RzIHRob3NlIGZ1bmN0aW9ucyB0byBib3RoIE1HTFJVIGFuZCB0aGUgc3RhbmRhcmQgTFJVLiBUaGlzIGFsbCBzZWVtcyB0byBiZSBwYXJ0IG9mIHRoZSBjb3JlIE1HTFJVIGltcGxlbWVudGF0aW9uIG9yIGF0IGxlYXN0IGludGVyYWN0cyBoZWF2aWx5IHdpdGggaXQuXG5cbk5vdywgYSBjcml0aWNhbCBxdWVzdGlvbiBmb3Igb3B0aW1pemF0aW9uIGFuZCB0dW5pbmcgdGhpcyBpczogSXMgTUdMUlUgZW5hYmxlZCBieSBkZWZhdWx0PyBJIG5lZWQgdG8ga25vdyBpZiB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IEknbSBkZWFsaW5nIHdpdGggb3V0LW9mLXRoZS1ib3ggb3IgaWYgSSBoYXZlIHRvIGV4cGxpY2l0bHkgY29uZmlndXJlIGl0LiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHNlY3Rpb24sIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBkZWZhdWx0IHNldHRpbmcgZm9yIE1HTFJVLiBUaGF0IHdpbGwgdGVsbCBtZSB3aGVyZSB0byBnbyBuZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTYyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDIwOjUzOjI0LjkzNzUxOTIwOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDIyNDczOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTFJVX0dFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTQwNT1lbmRpZiAjIFVTRVJGQVVMVEZEXFxuLS1cXG5tbS9LY29uZmlnLTE0MDctIyBtdWx0aS1nZW4gTFJVIHtcXG5tbS9LY29uZmlnOjE0MDg6Y29uZmlnIExSVV9HRU5cXG5tbS9LY29uZmlnLTE0MDktXFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQxNi1cXG5tbS9LY29uZmlnOjE0MTc6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbm1tL0tjb25maWctMTQxOC1cXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQyMi1cXG5tbS9LY29uZmlnOjE0MjM6Y29uZmlnIExSVV9HRU5fU1RBVFNcXG5tbS9LY29uZmlnLTE0MjQtXFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDMxLVxcbm1tL0tjb25maWc6MTQzMjpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG5tbS9LY29uZmlnLTE0MzMtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQyMDo1MzoyNC45OTc3NTA1NzdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzkxNjg2OTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTFJVIEdlbmVyYXRpb24gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCBhcmUgdGhlIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBwYXkgYXR0ZW50aW9uIHRvLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBtb2RpZmllZCBjb2RlIGRlcGVuZHMgb24gYExSVV9HRU5gIHNwZWNpZmljYWxseS4gTGV0J3MgdHJhY2UgaXQgb3V0LiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYGxydV9nZW5fc2V0X3JlZnNgLCBgZm9saW9fdXBkYXRlX2dlbmAsIGB3YWxrX3VwZGF0ZV9mb2xpb2AsIGB3YWxrX3B0ZV9yYW5nZWAsIGB3YWxrX3BtZF9yYW5nZV9sb2NrZWRgLCBhbmQgYGxydV9nZW5fbG9va19hcm91bmRgLiBHaXZlbiB0aG9zZSBmdW5jdGlvbiBuYW1lcywgdGhleSdyZSBhbG1vc3QgY2VydGFpbmx5IGd1YXJkZWQgYnkgYW4gYCNpZmRlZiBDT05GSUdfTFJVX0dFTmAgc29tZXdoZXJlLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byB2ZXJpZnkgdGhhdCBhc3N1bXB0aW9uLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gYG1tL3Ztc2Nhbi5jYCBhbmQgc3BlY2lmaWNhbGx5IGV4YW1pbmUgdGhlIGNvZGUgYXJvdW5kIHRoZSBgbHJ1X2dlbl9zZXRfcmVmc2AgZnVuY3Rpb24gY2FsbCB0byBjb25maXJtIGFuZCB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU5MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQyMDo1MzoyOC43ODk0Mzk1OTZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA1ODI5NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHJ1X2dlbl9zZXRfcmVmc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz04MjU9ZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgzNy0gKi9cXG5tbS92bXNjYW4uYzo4Mzg6c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbm1tL3Ztc2Nhbi5jLTgzOS17XFxuLS1cXG5tbS92bXNjYW4uYy04NTctI2Vsc2VcXG5tbS92bXNjYW4uYzo4NTg6c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbm1tL3Ztc2Nhbi5jLTg1OS17XFxuLS1cXG5tbS92bXNjYW4uYz04NjQ9c3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS92bXNjYW4uYy04OTItXFxubW0vdm1zY2FuLmM6ODkzOlxcdFxcdHJldHVybiBscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcXHUwMDI2dm1hX2ZsYWdzKSA/IEZPTElPUkVGX0FDVElWQVRFIDogRk9MSU9SRUZfS0VFUDtcXG5tbS92bXNjYW4uYy04OTQtXFx0fVxcbi0tXFxubW0vdm1zY2FuLmM9MzQ0MD1zdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM0NTYtXFx0XFx0XFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xcbm1tL3Ztc2Nhbi5jOjM0NTc6XFx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcXHUwMDI2dm1hLVxcdTAwM2VmbGFncykpIHtcXG5tbS92bXNjYW4uYy0zNDU4LVxcdFxcdG9sZF9nZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMjA6NTM6MjguODUwMDI5NzUzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjQ0NTc1Nzg1MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGBscnVfZ2VuX3NldF9yZWZzYCoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGluLiBUaGUgaW1tZWRpYXRlIGdvYWwgaXMgY2xlYXI6IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZW52aXJvbm1lbnQgdGhhdCBpbXBhY3RzIHRoZSBgbHJ1X2dlbl9zZXRfcmVmc2AgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgd2hhdCBgI2lmZGVmYCBvciBgI2lmYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBjb250cm9sIHdoZXRoZXIgb3Igbm90IHRoaXMgZnVuY3Rpb24gaXMgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLiBLbm93aW5nIHRoaXMgd2lsbCBiZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBhdmFpbGFiaWxpdHkgaW4gZGlmZmVyZW50IGJ1aWxkIGNvbmZpZ3VyYXRpb25zLCBhbmQgZm9yIGRlYnVnZ2luZyBpZiBJIGVuY291bnRlciB1bmV4cGVjdGVkIGJlaGF2aW9yIG9yIGl0cyBhYnNlbmNlIGluIGNlcnRhaW4gc2NlbmFyaW9zLiBVbmRlcnN0YW5kaW5nIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBjb250ZXh0IGlzIHBhcmFtb3VudCB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGRlc2lnbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM2NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDIwOjUzOjUzLjMwNzYxMDQ2OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg0NDY2NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmZGVmIENPTkZJR19MUlVfR0VOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTgyNT1lbnVtIGZvbGlvX3JlZmVyZW5jZXMge1xcbi0tXFxubW0vdm1zY2FuLmMtODMwLVxcbm1tL3Ztc2Nhbi5jOjgzMTojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS92bXNjYW4uYy04MzItLypcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI2MTA9c3RhdGljIGJvb2wgY2FuX2FnZV9hbm9uX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI2MjEtXFxubW0vdm1zY2FuLmM6MjYyMjojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS92bXNjYW4uYy0yNjIzLVxcbm1tL3Ztc2Nhbi5jPTI2MjQ9REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobHJ1X3N3aXRjaCk7XFxubW0vdm1zY2FuLmM6MjYyNTojaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxcbm1tL3Ztc2Nhbi5jLTI2MjYtREVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XFxuLS1cXG5tbS92bXNjYW4uYz0yODA2PXN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxcbi0tXFxubW0vdm1zY2FuLmMtMjgyNS1cXG5tbS92bXNjYW4uYzoyODI2OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcXG5tbS92bXNjYW4uYy0yODI3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQyMDo1Mzo1My4zNjYwNjc1NDZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc1NTY1MzQyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyB0aGUgUGF0Y2gncyBTY29wZSoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgYENPTkZJR19MUlVfR0VOYCBqdW1wcyBvdXQgYXQgbWUgYXMgYSBrZXkgcG9pbnQuIEl0IHNlZW1zIHByZXR0eSBjZW50cmFsIHRvIHdoYXQncyBiZWluZyBhbHRlcmVkLiBCdXQgdGhlbiwgaXQncyBhbHNvIHRvdWNoaW5nIGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCBhbmQgYHNocmlua19hY3RpdmVfbGlzdGAuIEhhbmcgb24uLi4gdGhvc2UgYXJlbid0IHBhcnQgb2YgYENPTkZJR19MUlVfR0VOYCwgdGhvc2UgYXJlIHN0YW5kYXJkIExSVSBmdW5jdGlvbnMuIFRoYXQgZmVlbHMuLi4gdW5leHBlY3RlZC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4gSSdtIGdvaW5nIHRvIGRvdWJsZSBjaGVjayB0aGUgY29kZSByaWdodCBub3cuIEFyZSB0aG9zZSBmdW5jdGlvbnMgcmVhbGx5IG91dHNpZGUgdGhlIHNjb3BlIG9mIGBDT05GSUdfTFJVX0dFTmA/IEkgbmVlZCB0byB2ZXJpZnkgd2hhdCB0aGUgcGF0Y2ggaXMgKnJlYWxseSogZG9pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MDksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQyMDo1Mzo1Ny4xMjE3MjMyODZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNTAxNTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX2NoZWNrX3JlZmVyZW5jZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9ODU4PXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTg2My1cXG5tbS92bXNjYW4uYzo4NjQ6c3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vdm1zY2FuLmMtODY1LVxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYz0xMDU1PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTEyMjgtXFx0XFx0aWYgKCFpZ25vcmVfcmVmZXJlbmNlcylcXG5tbS92bXNjYW4uYzoxMjI5OlxcdFxcdFxcdHJlZmVyZW5jZXMgPSBmb2xpb19jaGVja19yZWZlcmVuY2VzKGZvbGlvLCBzYyk7XFxubW0vdm1zY2FuLmMtMTIzMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMjA6NTM6NTcuMTgyMjMxNTc0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NDAyNTI2NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGb2N1cyBmb3IgVGhpcyBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBMUlUgZnVuY3Rpb25hbGl0eSwgYm90aCB0aGUgc3RhbmRhcmQgaW1wbGVtZW50YXRpb24gYW5kIE1HTFJVLiBUaGUga2V5IG1vZGlmaWNhdGlvbiBzZWVtcyB0byBiZSBpbiBgZm9saW9fcmVmZXJlbmNlZGAgd2l0aGluIGBtbS9ybWFwLmNgLCBhIGZ1bmN0aW9uIHVzZWQgYnkgYm90aCBMUlUgaW1wbGVtZW50YXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgc3BlY2lmaWMgZnVuY3Rpb25zIGZvciB0YXJnZXRlZCBmdXp6aW5nLCBidXQgdGhlIHByb21wdCBhZHZpc2VzIGF2b2lkaW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLlxuXG5Ob3csIHdoaWNoIG9uZXMgYXJlIHdvcnRoIHNwZWNpZmljIGF0dGVudGlvbj8gYGZvbGlvX2NoZWNrX3JlZmVyZW5jZXNgIGlzIHRoZSBzdGFuZGFyZCBMUlUgZnVuY3Rpb24sIGJ1dCBpdCdzICphbHNvKiBhIGhvdC1wYXRoIGZ1bmN0aW9uLiAgSSBuZWVkIHRvIGJlIGNhcmVmdWwgbm90IHRvIGNyZWF0ZSBhIHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbi4gVGhlIG90aGVyIGZ1bmN0aW9ucyB0aGF0IGFyZSBtb2RpZmllZCBhcmUgYWxzbyBhbGwgaG90LXBhdGggZnVuY3Rpb25zLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYGZvbGlvX3VwZGF0ZV9nZW5gLCBgd2Fsa191cGRhdGVfZm9saW9gLCBgd2Fsa19wdGVfcmFuZ2VgLCBgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkYCwgYW5kIGBscnVfZ2VuX2xvb2tfYXJvdW5kYC5cblxuQ29uc2lkZXJpbmcgdGhlIGFkdmljZSwgSSBuZWVkIHRvIGNob29zZSBjYXJlZnVsbHkuIGBmb2xpb19yZWZlcmVuY2VkYCBpcyBjYWxsZWQgZHVyaW5nIHBhZ2UgcmVjbGFpbS4gSXQncyBkZWZpbml0ZWx5IGFjdGl2ZSBidXQgcGVyaGFwcyBub3QgKmFzKiBpbnRlbnNlbHkgaG90IGFzIHNvbWV0aGluZyBsaWtlIGBwYWdlX2FkZF9ybWFwYC4gU3RpbGwsIGhvdCBlbm91Z2ggdG8gYmUgY29uc2lkZXJlZCBhIGhvdCBwYXRoLiBBbmQgYGZvbGlvX2lzX2V4ZWNfZmlsZWAgaXMgaW5saW5lLCBzbyBmdXp6aW5nIGl0IGRpcmVjdGx5IHdvbid0IGJlIHBvc3NpYmxlLlxuXG5UaGF0IGxlYXZlcyBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAuIFRoaXMgb25lIGlzIGNhbGxlZCBkdXJpbmcgYSBwYWdlIGZhdWx0LCBzcGVjaWZpY2FsbHkgd2l0aGluIGBkb19zZXRfcHRlYCBvciBzaW1pbGFyLiBTaW5jZSBpdCBoYXMgc3BlY2lmaWMgY29udGV4dCwgaXQncyBhIGdvb2QgY2FuZGlkYXRlIHRvIGNvbnNpZGVyLCBidXQgZmlyc3QsIEknbGwgY2hlY2sgaXRzIGNhbGwgc2l0ZXMgdG8gYmUgc3VyZSBpdCdzIHRoZSByaWdodCBjaG9pY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzkwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDIwOjU0OjAzLjYyMjQ4NzE5N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzMjEyMDkyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVfZ2VuX2xvb2tfYXJvdW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3Q9MTg3PWNhbiBpbmN1ciB0aGUgaGlnaGVzdCBDUFUgY29zdCBpbiB0aGUgcmVjbGFpbSBwYXRoLlxcbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdC0xODgtXFxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0OjE4OTpgYGxydV9nZW5fbG9va19hcm91bmQoKWBgIGV4cGxvaXRzIHNwYXRpYWwgbG9jYWxpdHkgdG8gcmVkdWNlIHRoZVxcbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdC0xOTAtdHJpcHMgaW50byB0aGUgcm1hcC4gSXQgc2NhbnMgdGhlIGFkamFjZW50IFBURXMgb2YgYSB5b3VuZyBQVEUgYW5kXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3Q9MTk5PWluIHRoZSBzZXQuXFxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0LTIwMC1cXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3Q6MjAxOkluIHRoZSBldmljdGlvbiBwYXRoLCBzcGVjaWZpY2FsbHksIGluIGBgbHJ1X2dlbl9sb29rX2Fyb3VuZCgpYGAsIGlmIGFcXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3QtMjAyLVBNRCBoYXMgYSBzdWZmaWNpZW50IG51bWJlciBvZiBob3QgcGFnZXMsIGl0cyBhZGRyZXNzIGlzIHBsYWNlZCBpbiB0aGVcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9Njg5PXZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NjkwOmJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucik7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC02OTEtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTcwOD1zdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTcxMS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjcxMjpzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03MTMtXFx0XFx0dW5zaWduZWQgaW50IG5yKVxcbi0tXFxubW0vcm1hcC5jPTkxNz1zdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcm1hcC5jLTk4MS1cXHRcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkgXFx1MDAyNlxcdTAwMjYgcHZtdy5wdGUpIHtcXG5tbS9ybWFwLmM6OTgyOlxcdFxcdFxcdGlmIChscnVfZ2VuX2xvb2tfYXJvdW5kKFxcdTAwMjZwdm13LCBucikpXFxubW0vcm1hcC5jLTk4My1cXHRcXHRcXHRcXHRyZWZlcmVuY2VkKys7XFxuLS1cXG5tbS92bXNjYW4uYz0yNzE0PXN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHNlcV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5tbS92bXNjYW4uYy0yNzQzLSAqIHdhbGtfcG1kX3JhbmdlKCk7IHRoZSBldmljdGlvbiBhbHNvIHJlcG9ydCB0aGVtIHdoZW4gd2Fsa2luZyB0aGUgcm1hcFxcbm1tL3Ztc2Nhbi5jOjI3NDQ6ICogaW4gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLlxcbm1tL3Ztc2Nhbi5jLTI3NDUtICpcXG4tLVxcbm1tL3Ztc2Nhbi5jPTM5OTY9c3RhdGljIGJvb2wgdHJ5X3RvX2luY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXFxuLS1cXG5tbS92bXNjYW4uYy00MDE1LVxcdCAqIElmIHRoZSBoYXJkd2FyZSBkb2Vzbid0IGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBhY2Nlc3NlZCBiaXQsIGZhbGxiYWNrXFxubW0vdm1zY2FuLmM6NDAxNjpcXHQgKiB0byBscnVfZ2VuX2xvb2tfYXJvdW5kKCksIHdoaWNoIG9ubHkgY2xlYXJzIHRoZSBhY2Nlc3NlZCBiaXQgaW4gYVxcbm1tL3Ztc2Nhbi5jLTQwMTctXFx0ICogaGFuZGZ1bCBvZiBQVEVzLiBTcHJlYWRpbmcgdGhlIHdvcmsgb3V0IG92ZXIgYSBwZXJpb2Qgb2YgdGltZSB1c3VhbGx5XFxuLS1cXG5tbS92bXNjYW4uYz00MTM1PXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00MTgxLSAqL1xcbm1tL3Ztc2Nhbi5jOjQxODI6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbm1tL3Ztc2Nhbi5jLTQxODMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQyMDo1NDowNS42NTQ2MTQyMDZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMwNjI0NjQ0OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBmb3IgTWVtb3J5IE1hbmFnZW1lbnQgQ2hhbmdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQgdG91Y2hlcyBjb3JlIE1NIGNvZGUsIHNwZWNpZmljYWxseSByZWNsYWltIGFuZCB0aGUgTFJVLiBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgaXMgY2FsbGVkIGZyb20gYGZvbGlvX3JlZmVyZW5jZWRfb25lYCwgd2hpY2ggdGVsbHMgbWUgdGhpcyBpcyBkZWZpbml0ZWx5IGluIHRoZSByZWNsYWltIHBhdGguIEdpdmVuIHRoZSBzY29wZSwgdGhpcyBpcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy5cblxuTXkgZmlyc3QgaW1wdWxzZSBpcyB0byBsaXN0IHRoZSBtb2RpZmllZCBmdW5jdGlvbnM6IGBmb2xpb19yZWZlcmVuY2VkYCwgYGZvbGlvX2NoZWNrX3JlZmVyZW5jZXNgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYGxydV9nZW5fbG9va19hcm91bmRgLCBgd2Fsa19wdGVfcmFuZ2VgLCBhbmQgYHdhbGtfcG1kX3JhbmdlX2xvY2tlZGAuIExldCdzIHNlZSBhYm91dCBzcGVjaWZpYyBjb25maWdzLlxuXG5BaCwgYExSVV9HRU5gIGlzIHRoZSBrZXkgY29uZmlnIGZvciBNdWx0aS1HZW4gTFJVLiBJdCBzZWVtcyBpdCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gc29tZSBjb25maWdzLCBidXQgSSBzaG91bGQgZGVmaW5pdGVseSBzcGVjaWZ5IGl0LiBIb3dldmVyLCBzaW5jZSB0aGUgcGF0Y2ggKmFsc28qIG1vZGlmaWVzIHN0YW5kYXJkIExSVSwgaXQgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LiBCdXQsIHRvIGVuc3VyZSBjb21wcmVoZW5zaXZlIE1HTFJVIHRlc3RpbmcsIEknbGwgYWRkIGl0LlxuXG5Ob3csIHdhaXQgYSBtaW51dGUsIGBmb2xpb19pc19leGVjX2ZpbGVgIGlzIHRoZSBpbnRlcmVzdGluZyBwYXJ0LiBJdCdzIHVzZWQgdG8gYWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuIFRoYXQncyBhICpmdW5jdGlvbmFsKiBjaGFuZ2UgaW4gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGVzZSB0eXBlcyBvZiBtYXBwaW5ncy5cblxuTGV0J3MgdHJhY2UgYGZvbGlvX2lzX2V4ZWNfZmlsZWAuIEl0J3MgdXNlZCBpbiBgbHJ1X2dlbl9zZXRfcmVmc2AsIGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCwgYHNocmlua19hY3RpdmVfbGlzdGAsIGFuZCBgZm9saW9fdXBkYXRlX2dlbmAuIFRoaXMgY29uZmlybXMgaXQncyBhIHNpZ25pZmljYW50IGNoYW5nZSB0byBtZW1vcnkgbWFuYWdlbWVudCBiZWhhdmlvci5cblxuVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgc2V0IHRvIGB0cnVlYC5cblxuUmVnYXJkaW5nIGBGb2N1c1N5bWJvbHNgLCBJIGluaXRpYWxseSB0aG91Z2h0IHRvIGluY2x1ZGUgdGhvc2UgbW9kaWZpZWQgZnVuY3Rpb25zLiBIb3dldmVyLCB0aGUgcHJvbXB0IHNheXMgdG8gYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMuIGBmb2xpb19yZWZlcmVuY2VkYCwgYHNocmlua19hY3RpdmVfbGlzdGAsIGFuZCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgYXJlIGFsbCAqdmVyeSogaG90IGR1cmluZyByZWNsYWltLCBlc3NlbnRpYWxseSBtYWtpbmcgdGhlbSBob3QtcGF0aC4gSWYgSSBpbmNsdWRlIHRoZW0sIEknbSBqdXN0IHRlbGxpbmcgdGhlIGZ1enplciB0byBmb2N1cyBvbiB3aGF0IGl0IGlzIGFscmVhZHkgZG9pbmcuIFNob3VsZCBJIGV4Y2x1ZGUgdGhlbSBhbmQgbGlzdCBzb21ldGhpbmcgZWxzZT8gTm8sIGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCBhbmQgYGxydV9nZW5fbG9va19hcm91bmRgIGFyZSBhbHNvIGhvdC1wYXRoIGZ1bmN0aW9ucy5cblxuXCJFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLiBTaG91bGQgYXZvaWQgaG90LXBhdGggZnVuY3Rpb25zLlwiIEJlY2F1c2UgdGhlc2UgZnVuY3Rpb25zIGFyZSBrZXkgTU0gcmVjbGFpbSBwYXRocywgYW5kIGJ5IHRoZWlyIG5hdHVyZSwgaG90IHdoZW4gbWVtb3J5IGlzIHVuZGVyIHByZXNzdXJlLCBJIHdpbGwgbGVhdmUgYEZvY3VzU3ltYm9sc2AgZW1wdHkuXG5cbkFjdHVhbGx5LCBgZm9saW9fcmVmZXJlbmNlZGAgaXMgY2FsbGVkIGJ5IGBzaHJpbmtfZm9saW9fbGlzdGAsIHdoaWNoIGlzIGNhbGxlZCBieSBgc2hyaW5rX2xydXZlY2AsIHdoaWNoIGNvbmZpcm1zIG15IGluaXRpYWwgYXNzZXNzbWVudC5cblxuQXMgZm9yIGBFbmFibGVDb25maWdzYCwgYExSVV9HRU5gIGlzIHRoZSBvbmx5IHNwZWNpZmljIGNvbmZpZyBJIG5lZWQuIEknbGwgZG91YmxlLWNoZWNrIHRoaXMgbGF0ZXIgdG8gYmUgc3VyZS4gVGhlIGNvZGUgY2hhbmdlcyBhcmUgaW4gYG1tL3JtYXAuY2AgYW5kIGBtbS92bXNjYW4uY2AsIGFuZCBgTFJVX0dFTmAgaXMgdGhlIG9ubHkgcmVsYXRlZCBjb25maWcuXG5cbk9rYXksIGJhY2sgdG8gYGZvbGlvX2lzX2V4ZWNfZmlsZWAuIEkgc2VlIHRoYXQgaXQgY2hlY2tzIGBWTUFfRVhFQ19CSVRgLiBUaGlzIGlzIHN0YW5kYXJkIGZ1bmN0aW9uYWxpdHkgcmVsYXRpbmcgdG8gZXhlY3V0YWJsZSBtYXBwaW5ncyB2aWEgYG1tYXBgIHdpdGggYFBST1RfRVhFQ2AuIFRoYXQgaXMgc29tZXRoaW5nIGZvciBzdXJlLlxuXG5TbywgbGV0J3MgcmV2aWV3OiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhY3RpdmF0ZXMgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgKmFmdGVyKiBmaXJzdCB1c2FnZSwgYW5kIGl0J3MgYSBzaWduaWZpY2FudCBjaGFuZ2UgdG8gcGFnZSByZWNsYWltIGhldXJpc3RpY3MuIERlZmluaXRlbHkgd29ydGggZnV6emluZyFcblxuTXkgZmluYWwgc2V0dGluZ3Mgd2lsbCBiZTpcblxuKiAgIGBXb3J0aEZ1enppbmcgPSB0cnVlYFxuKiAgIGBFbmFibGVDb25maWdzID0gW1wiTFJVX0dFTlwiXWBcbiogICBgRm9jdXNTeW1ib2xzID0gW11gXG4qICAgYFJlYXNvbmluZyA9IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBhZ2UgcmVjbGFpbSBoZXVyaXN0aWNzIHRvIGFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiBJdCBhZmZlY3RzIGJvdGggc3RhbmRhcmQgTFJVIGFuZCBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGF0aHMuIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcmVjbGFpbSBwYXRocyAoZS5nLiwgZm9saW9fcmVmZXJlbmNlZCwgc2hyaW5rX2FjdGl2ZV9saXN0KSwgd2hpY2ggYXJlIGhvdC1wYXRoIGZ1bmN0aW9ucywgc28gbm8gc3BlY2lmaWMgZm9jdXMgc3ltYm9scyBhcmUgcHJvdmlkZWQuXCJgXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDg2LCJPdXRwdXRUb2tlbnMiOjExMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQyMDo1NDoxOC43MTcwODM3NjZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDg2OTY0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWdlIHJlY2xhaW0gaGV1cmlzdGljcyB0byBhY3RpdmF0ZSBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciBmaXJzdCB1c2FnZS4gSXQgYWZmZWN0cyBib3RoIHN0YW5kYXJkIExSVSBhbmQgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhdGhzLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHJlY2xhaW0gcGF0aHMgKGUuZy4sIGZvbGlvX3JlZmVyZW5jZWQsIHNocmlua19hY3RpdmVfbGlzdCksIHdoaWNoIGFyZSBob3QtcGF0aCBmdW5jdGlvbnMsIHNvIG5vIHNwZWNpZmljIGZvY3VzIHN5bWJvbHMgYXJlIHByb3ZpZGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFnZSByZWNsYWltIGhldXJpc3RpY3MgdG8gYWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuIEl0IGFmZmVjdHMgYm90aCBzdGFuZGFyZCBMUlUgYW5kIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYXRocy4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCByZWNsYWltIHBhdGhzIChlLmcuLCBmb2xpb19yZWZlcmVuY2VkLCBzaHJpbmtfYWN0aXZlX2xpc3QpLCB3aGljaCBhcmUgaG90LXBhdGggZnVuY3Rpb25zLCBzbyBubyBzcGVjaWZpYyBmb2N1cyBzeW1ib2xzIGFyZSBwcm92aWRlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowv2lbt[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-16 20:40:25 +0000 UTC FinishedAt: 2026-07-16 20:54:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "e54a39f3fa793aca013f54e42d32dba471c1a224", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "e54a39f3fa793aca013f54e42d32dba471c1a224", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN" ], "series_id": "5f10cbe5-7356-4af9-93ae-66c70da4d7df" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDIwOjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFnZSByZWNsYWltIGhldXJpc3RpY3MgdG8gYWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuIEl0IGFmZmVjdHMgYm90aCBzdGFuZGFyZCBMUlUgYW5kIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYXRocy4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCByZWNsYWltIHBhdGhzIChlLmcuLCBmb2xpb19yZWZlcmVuY2VkLCBzaHJpbmtfYWN0aXZlX2xpc3QpLCB3aGljaCBhcmUgaG90LXBhdGggZnVuY3Rpb25zLCBzbyBubyBzcGVjaWZpYyBmb2N1cyBzeW1ib2xzIGFyZSBwcm92aWRlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAyMDo1MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDhmZjUyODMwOGU4NjdhODg0MTI4ZGM3M2E0OTVlOGE0MTQ4N2NiZjNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAxNiAyMDo1MzowNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuaW5kZXggYjVjNGRjMGYzZmUzMjYuLjMwZmRmMTA1NjMxMjEzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuQEAgLTMwLDYgJiM0MzszMCwxMiBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19pc19maWxlX2xydShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cmV0dXJuICFmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGZvbGlvX2lzX2V4ZWNfZmlsZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuJiM0MztcdFx0Y29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB2bWFfZmxhZ3NfdGVzdCh2bWFfZmxhZ3MsIFZNQV9FWEVDX0JJVCkgXHUwMDI2XHUwMDI2IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX191cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRcdFx0ZW51bSBscnVfbGlzdCBscnUsIGVudW0gem9uZV90eXBlIHppZCxcbiBcdFx0XHRcdGxvbmcgbnJfcGFnZXMpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ybWFwLmggYi9pbmNsdWRlL2xpbnV4L3JtYXAuaFxuaW5kZXggOGRjMDg3MWU1ZjAwMTEuLmUwOTBhYTA5ODI1ZDUyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ybWFwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcm1hcC5oXG5AQCAtODQzLDcgJiM0Mzs4NDMsNyBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb190cnlfc2hhcmVfYW5vbl9ybWFwX3BtZChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuICAqIENhbGxlZCBmcm9tIG1tL3Ztc2Nhbi5jIHRvIGhhbmRsZSBwYWdpbmcgb3V0XG4gICovXG4gaW50IGZvbGlvX3JlZmVyZW5jZWQoc3RydWN0IGZvbGlvICosIGludCBpc19sb2NrZWQsXG4tXHRcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB2bV9mbGFnc190ICp2bV9mbGFncyk7XG4mIzQzO1x0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpO1xuIFxuIHZvaWQgdHJ5X3RvX21pZ3JhdGUoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpO1xuIHZvaWQgdHJ5X3RvX3VubWFwKHN0cnVjdCBmb2xpbyAqLCBlbnVtIHR0dV9mbGFncyBmbGFncyk7XG5AQCAtOTc1LDEwICYjNDM7OTc1LDkgQEAgc3RydWN0IGFub25fdm1hICpmb2xpb19sb2NrX2Fub25fdm1hX3JlYWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbiAjZGVmaW5lIGFub25fdm1hX3ByZXBhcmUodm1hKVx0KDApXG4gXG4gc3RhdGljIGlubGluZSBpbnQgZm9saW9fcmVmZXJlbmNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgaXNfbG9ja2VkLFxuLVx0XHRcdFx0ICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tXHRcdFx0XHQgIHZtX2ZsYWdzX3QgKnZtX2ZsYWdzKVxuJiM0MztcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuIHtcbi1cdCp2bV9mbGFncyA9IDA7XG4mIzQzO1x0dm1hX2ZsYWdzX2NsZWFyX2FsbCh2bWFfZmxhZ3MpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuY1xuaW5kZXggZTg1NDY3OTU1M2I5YzMuLjQwODU1NDBiNmEyNWY0IDEwMDY0NFxuLS0tIGEvbW0vcm1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9ybWFwLmNcbkBAIC05MDcsNyAmIzQzOzkwNyw3IEBAIHBtZF90ICptbV9maW5kX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuIHN0cnVjdCBmb2xpb19yZWZlcmVuY2VkX2FyZyB7XG4gXHRpbnQgbWFwY291bnQ7XG4gXHRpbnQgcmVmZXJlbmNlZDtcbi1cdHZtX2ZsYWdzX3Qgdm1fZmxhZ3M7XG4mIzQzO1x0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIH07XG4gXG5AQCAtOTI2LDcgJiM0Mzs5MjYsNyBAQCBzdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRhZGRyZXNzID0gcHZtdy5hZGRyZXNzO1xuIFx0XHRuciA9IDE7XG4gXG4tXHRcdGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0xPQ0tFRCkge1xuJiM0MztcdFx0aWYgKHZtYV90ZXN0KHZtYSwgVk1BX0xPQ0tFRF9CSVQpKSB7XG4gXHRcdFx0cHRlcyYjNDM7JiM0Mzs7XG4gXHRcdFx0cHJhLVx1MDAzZW1hcGNvdW50LS07XG4gXG5AQCAtOTQ3LDcgJiM0Mzs5NDcsNyBAQCBzdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdC8qIFJlc3RvcmUgdGhlIG1sb2NrIHdoaWNoIGdvdCBtaXNzZWQgKi9cbiBcdFx0XHRtbG9ja192bWFfZm9saW8oZm9saW8sIHZtYSk7XG4gXHRcdFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcdTAwMjZwdm13KTtcbi1cdFx0XHRwcmEtXHUwMDNldm1fZmxhZ3MgfD0gVk1fTE9DS0VEO1xuJiM0MztcdFx0XHR2bWFfZmxhZ3Nfc2V0KFx1MDAyNnByYS1cdTAwM2V2bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKTtcbiBcdFx0XHRyZXR1cm4gZmFsc2U7IC8qIFRvIGJyZWFrIHRoZSBsb29wICovXG4gXHRcdH1cbiBcbkBAIC0xMDE1LDggJiM0MzsxMDE1LDExIEBAIHN0YXRpYyBib29sIGZvbGlvX3JlZmVyZW5jZWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdHJlZmVyZW5jZWQmIzQzOyYjNDM7O1xuIFxuIFx0aWYgKHJlZmVyZW5jZWQpIHtcbiYjNDM7XHRcdHZtYV9mbGFnc190IHZtYV9mbGFncyA9IHZtYS1cdTAwM2VmbGFncztcbiYjNDM7XG4gXHRcdHByYS1cdTAwM2VyZWZlcmVuY2VkJiM0MzsmIzQzOztcbi1cdFx0cHJhLVx1MDAzZXZtX2ZsYWdzIHw9IHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgflZNX0xPQ0tFRDtcbiYjNDM7XHRcdHZtYV9mbGFnc19jbGVhcihcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKTtcbiYjNDM7XHRcdHZtYV9mbGFnc19zZXRfbWFzayhcdTAwMjZwcmEtXHUwMDNldm1hX2ZsYWdzLCB2bWFfZmxhZ3MpO1xuIFx0fVxuIFxuIFx0aWYgKCFwcmEtXHUwMDNlbWFwY291bnQpXG5AQCAtMTA1NCw3ICYjNDM7MTA1Nyw3IEBAIHN0YXRpYyBib29sIGludmFsaWRfZm9saW9fcmVmZXJlbmNlZF92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZvaWQgKmFyZylcbiAgKiBAZm9saW86IFRoZSBmb2xpbyB0byB0ZXN0LlxuICAqIEBpc19sb2NrZWQ6IENhbGxlciBob2xkcyBsb2NrIG9uIHRoZSBmb2xpby5cbiAgKiBAbWVtY2c6IHRhcmdldCBtZW1vcnkgY2dyb3VwXG4tICogQHZtX2ZsYWdzOiBBIGNvbWJpbmF0aW9uIG9mIGFsbCB0aGUgdm1hLVx1MDAzZXZtX2ZsYWdzIHdoaWNoIHJlZmVyZW5jZWQgdGhlIGZvbGlvLlxuJiM0MzsgKiBAdm1hX2ZsYWdzOiBBIGNvbWJpbmF0aW9uIG9mIGFsbCB0aGUgdm1hLVx1MDAzZWZsYWdzIHdoaWNoIHJlZmVyZW5jZWQgdGhlIGZvbGlvLlxuICAqXG4gICogUXVpY2sgdGVzdF9hbmRfY2xlYXJfcmVmZXJlbmNlZCBmb3IgYWxsIG1hcHBpbmdzIG9mIGEgZm9saW8sXG4gICpcbkBAIC0xMDYyLDcgJiM0MzsxMDY1LDcgQEAgc3RhdGljIGJvb2wgaW52YWxpZF9mb2xpb19yZWZlcmVuY2VkX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm9pZCAqYXJnKVxuICAqIHRoZSBmdW5jdGlvbiBiYWlsZWQgb3V0IGR1ZSB0byBybWFwIGxvY2sgY29udGVudGlvbi5cbiAgKi9cbiBpbnQgZm9saW9fcmVmZXJlbmNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgaXNfbG9ja2VkLFxuLVx0XHQgICAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdm1fZmxhZ3NfdCAqdm1fZmxhZ3MpXG4mIzQzO1x0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4ge1xuIFx0Ym9vbCB3ZV9sb2NrZWQgPSBmYWxzZTtcbiBcdHN0cnVjdCBmb2xpb19yZWZlcmVuY2VkX2FyZyBwcmEgPSB7XG5AQCAtMTA3OCw3ICYjNDM7MTA4MSw3IEBAIGludCBmb2xpb19yZWZlcmVuY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBpc19sb2NrZWQsXG4gXHR9O1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX2lzX3pvbmVfZGV2aWNlKGZvbGlvKSwgZm9saW8pO1xuLVx0KnZtX2ZsYWdzID0gMDtcbiYjNDM7XHR2bWFfZmxhZ3NfY2xlYXJfYWxsKHZtYV9mbGFncyk7XG4gXHRpZiAoIXByYS5tYXBjb3VudClcbiBcdFx0cmV0dXJuIDA7XG4gXG5AQCAtMTA5Miw3ICYjNDM7MTA5NSw3IEBAIGludCBmb2xpb19yZWZlcmVuY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBpc19sb2NrZWQsXG4gXHR9XG4gXG4gXHRybWFwX3dhbGsoZm9saW8sIFx1MDAyNnJ3Yyk7XG4tXHQqdm1fZmxhZ3MgPSBwcmEudm1fZmxhZ3M7XG4mIzQzO1x0dm1hX2ZsYWdzX3NldF9tYXNrKHZtYV9mbGFncywgcHJhLnZtYV9mbGFncyk7XG4gXG4gXHRpZiAod2VfbG9ja2VkKVxuIFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDk4NmRkZThlNzQyOWYzLi5mYTgwODcyMWI2NGQxOSAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTgzNSwxMSAmIzQzOzgzNSwxNSBAQCBlbnVtIGZvbGlvX3JlZmVyZW5jZXMge1xuICAqIHdpdGggUEdfYWN0aXZlIHNldC4gSW4gY29udHJhc3QsIHRoZSBhZ2luZyAocGFnZSB0YWJsZSB3YWxrKSBwYXRoIHVzZXNcbiAgKiBmb2xpb191cGRhdGVfZ2VuKCkuXG4gICovXG4tc3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4ge1xuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKSB7XG4gXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcbiYjNDM7XHRcdC8qIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiAqL1xuJiM0MztcdFx0aWYgKGZvbGlvX2lzX2V4ZWNfZmlsZShmb2xpbywgdm1hX2ZsYWdzKSlcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG5AQCAtODUxLDcgJiM0Mzs4NTUsNyBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gI2Vsc2Vcbi1zdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuQEAgLTg2MSwxNiAmIzQzOzg2NSwxNiBAQCBzdGF0aWMgZW51bSBmb2xpb19yZWZlcmVuY2VzIGZvbGlvX2NoZWNrX3JlZmVyZW5jZXMoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0XHRcdFx0XHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIHtcbiBcdGludCByZWZlcmVuY2VkX3B0ZXMsIHJlZmVyZW5jZWRfZm9saW87XG4tXHR2bV9mbGFnc190IHZtX2ZsYWdzO1xuJiM0MztcdHZtYV9mbGFnc190IHZtYV9mbGFncztcbiBcbiBcdHJlZmVyZW5jZWRfcHRlcyA9IGZvbGlvX3JlZmVyZW5jZWQoZm9saW8sIDEsIHNjLVx1MDAzZXRhcmdldF9tZW1fY2dyb3VwLFxuLVx0XHRcdFx0XHQgICBcdTAwMjZ2bV9mbGFncyk7XG4mIzQzO1x0XHRcdFx0XHQgICBcdTAwMjZ2bWFfZmxhZ3MpO1xuIFxuIFx0LypcbiBcdCAqIFRoZSBzdXBwb3NlZGx5IHJlY2xhaW1hYmxlIGZvbGlvIHdhcyBmb3VuZCB0byBiZSBpbiBhIFZNX0xPQ0tFRCB2bWEuXG4gXHQgKiBMZXQgdGhlIGZvbGlvLCBub3cgbWFya2VkIE1sb2NrZWQsIGJlIG1vdmVkIHRvIHRoZSB1bmV2aWN0YWJsZSBsaXN0LlxuIFx0ICovXG4tXHRpZiAodm1fZmxhZ3MgXHUwMDI2IFZNX0xPQ0tFRClcbiYjNDM7XHRpZiAodm1hX2ZsYWdzX3Rlc3QoXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCkpXG4gXHRcdHJldHVybiBGT0xJT1JFRl9BQ1RJVkFURTtcbiBcbiBcdC8qXG5AQCAtODg2LDcgJiM0Mzs4OTAsNyBAQCBzdGF0aWMgZW51bSBmb2xpb19yZWZlcmVuY2VzIGZvbGlvX2NoZWNrX3JlZmVyZW5jZXMoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0aWYgKCFyZWZlcmVuY2VkX3B0ZXMpXG4gXHRcdFx0cmV0dXJuIEZPTElPUkVGX1JFQ0xBSU07XG4gXG4tXHRcdHJldHVybiBscnVfZ2VuX3NldF9yZWZzKGZvbGlvKSA/IEZPTElPUkVGX0FDVElWQVRFIDogRk9MSU9SRUZfS0VFUDtcbiYjNDM7XHRcdHJldHVybiBscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcdTAwMjZ2bWFfZmxhZ3MpID8gRk9MSU9SRUZfQUNUSVZBVEUgOiBGT0xJT1JFRl9LRUVQO1xuIFx0fVxuIFxuIFx0cmVmZXJlbmNlZF9mb2xpbyA9IGZvbGlvX3Rlc3RfY2xlYXJfcmVmZXJlbmNlZChmb2xpbyk7XG5AQCAtOTE0LDcgJiM0Mzs5MTgsNyBAQCBzdGF0aWMgZW51bSBmb2xpb19yZWZlcmVuY2VzIGZvbGlvX2NoZWNrX3JlZmVyZW5jZXMoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0LypcbiBcdFx0ICogQWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuXG4gXHRcdCAqL1xuLVx0XHRpZiAoKHZtX2ZsYWdzIFx1MDAyNiBWTV9FWEVDKSBcdTAwMjZcdTAwMjYgZm9saW9faXNfZmlsZV9scnUoZm9saW8pKVxuJiM0MztcdFx0aWYgKGZvbGlvX2lzX2V4ZWNfZmlsZShmb2xpbywgXHUwMDI2dm1hX2ZsYWdzKSlcbiBcdFx0XHRyZXR1cm4gRk9MSU9SRUZfQUNUSVZBVEU7XG4gXG4gXHRcdHJldHVybiBGT0xJT1JFRl9LRUVQO1xuQEAgLTIwNjUsNyAmIzQzOzIwNjksNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbnJfdGFrZW47XG4gXHR1bnNpZ25lZCBsb25nIG5yX3NjYW5uZWQ7XG4tXHR2bV9mbGFnc190IHZtX2ZsYWdzO1xuJiM0MztcdHZtYV9mbGFnc190IHZtYV9mbGFncztcbiBcdExJU1RfSEVBRChsX2hvbGQpO1x0LyogVGhlIGZvbGlvcyB3aGljaCB3ZXJlIHNuaXBwZWQgb2ZmICovXG4gXHRMSVNUX0hFQUQobF9hY3RpdmUpO1xuIFx0TElTVF9IRUFEKGxfaW5hY3RpdmUpO1xuQEAgLTIxMDksNyAmIzQzOzIxMTMsNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuIFxuIFx0XHQvKiBSZWZlcmVuY2VkIG9yIHJtYXAgbG9jayBjb250ZW50aW9uOiByb3RhdGUgKi9cbiBcdFx0aWYgKGZvbGlvX3JlZmVyZW5jZWQoZm9saW8sIDAsIHNjLVx1MDAzZXRhcmdldF9tZW1fY2dyb3VwLFxuLVx0XHRcdFx0ICAgICBcdTAwMjZ2bV9mbGFncykgIT0gMCkge1xuJiM0MztcdFx0XHRcdCAgICAgXHUwMDI2dm1hX2ZsYWdzKSAhPSAwKSB7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBJZGVudGlmeSByZWZlcmVuY2VkLCBmaWxlLWJhY2tlZCBhY3RpdmUgZm9saW9zIGFuZFxuIFx0XHRcdCAqIGdpdmUgdGhlbSBvbmUgbW9yZSB0cmlwIGFyb3VuZCB0aGUgYWN0aXZlIGxpc3QuIFNvXG5AQCAtMjExOSw3ICYjNDM7MjEyMyw3IEBAIHN0YXRpYyB2b2lkIHNocmlua19hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXHRcdFx0ICogSU8sIHBsdXMgSlZNIGNhbiBjcmVhdGUgbG90cyBvZiBhbm9uIFZNX0VYRUMgZm9saW9zLFxuIFx0XHRcdCAqIHNvIHdlIGlnbm9yZSB0aGVtIGhlcmUuXG4gXHRcdFx0ICovXG4tXHRcdFx0aWYgKCh2bV9mbGFncyBcdTAwMjYgVk1fRVhFQykgXHUwMDI2XHUwMDI2IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSkge1xuJiM0MztcdFx0XHRpZiAoZm9saW9faXNfZXhlY19maWxlKGZvbGlvLCBcdTAwMjZ2bWFfZmxhZ3MpKSB7XG4gXHRcdFx0XHRucl9yb3RhdGVkICYjNDM7PSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXHRcdFx0XHRsaXN0X2FkZChcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmxfYWN0aXZlKTtcbiBcdFx0XHRcdGNvbnRpbnVlO1xuQEAgLTMxODgsNyAmIzQzOzMxOTIsNyBAQCBzdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2VycihzdHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KVxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gXG4gLyogcHJvbW90ZSBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzICovXG4tc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4pXG4mIzQzO3N0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4gXG5AQCAtMzE5NiwxMCAmIzQzOzMyMDAsMTUgQEAgc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4pXG4gXG4gXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi9cbiBcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpIHtcbiYjNDM7XHRcdC8qIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiAqL1xuJiM0MztcdFx0aWYgKGZvbGlvX2lzX2V4ZWNfZmlsZShmb2xpbywgdm1hX2ZsYWdzKSlcbiYjNDM7XHRcdFx0Z290byBwcm9tb3RlO1xuJiM0MztcbiBcdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuIFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4gXG4mIzQzO3Byb21vdGU6XG4gXHRkbyB7XG4gXHRcdC8qIGxydV9nZW5fZGVsX2ZvbGlvKCkgaGFzIGlzb2xhdGVkIHRoaXMgcGFnZT8gKi9cbiBcdFx0aWYgKCEob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spKVxuQEAgLTM0MjgsOCAmIzQzOzM0MzcsOCBAQCBzdGF0aWMgYm9vbCBzdWl0YWJsZV90b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKVxuIFx0cmV0dXJuIHlvdW5nICogbiBcdTAwM2U9IHRvdGFsO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLVx0XHRcdCAgICAgIGludCBuZXdfZ2VuLCBib29sIGRpcnR5KVxuJiM0MztzdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiYjNDM7XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBib29sIGRpcnR5KVxuIHtcbiBcdGludCBvbGRfZ2VuO1xuIFxuQEAgLTM0NDIsMTAgJiM0MzszNDUxLDEwIEBAIHN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuIFxuIFx0aWYgKHdhbGspIHtcbi1cdFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4pO1xuJiM0MztcdFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sIFx1MDAyNnZtYS1cdTAwM2VmbGFncyk7XG4gXHRcdGlmIChvbGRfZ2VuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgb2xkX2dlbiAhPSBuZXdfZ2VuKVxuIFx0XHRcdHVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcbi1cdH0gZWxzZSBpZiAobHJ1X2dlbl9zZXRfcmVmcyhmb2xpbykpIHtcbiYjNDM7XHR9IGVsc2UgaWYgKGxydV9nZW5fc2V0X3JlZnMoZm9saW8sIFx1MDAyNnZtYS1cdTAwM2VmbGFncykpIHtcbiBcdFx0b2xkX2dlbiA9IGZvbGlvX2xydV9nZW4oZm9saW8pO1xuIFx0XHRpZiAob2xkX2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG9sZF9nZW4gIT0gbmV3X2dlbilcbiBcdFx0XHRmb2xpb19hY3RpdmF0ZShmb2xpbyk7XG5AQCAtMzUxOCw3ICYjNDM7MzUyNyw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAobGFzdCAhPSBmb2xpbykge1xuLVx0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpO1xuJiM0MztcdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLVx1MDAzZXZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4gXG4gXHRcdFx0bGFzdCA9IGZvbGlvO1xuIFx0XHRcdGRpcnR5ID0gZmFsc2U7XG5AQCAtMzUzMSw3ICYjNDM7MzU0MCw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHR3YWxrLVx1MDAzZW1tX3N0YXRzW01NX0xFQUZfWU9VTkddICYjNDM7PSBucjtcbiBcdH1cbiBcbi1cdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpO1xuJiM0MztcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiBcdGxhc3QgPSBOVUxMO1xuIFxuIFx0aWYgKGkgXHUwMDNjIFBUUlNfUEVSX1BURSBcdTAwMjZcdTAwMjYgZ2V0X25leHRfdm1hKFBNRF9NQVNLLCBQQUdFX1NJWkUsIGFyZ3MsIFx1MDAyNnN0YXJ0LCBcdTAwMjZlbmQpKVxuQEAgLTM2MDksNyAmIzQzOzM2MTgsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0XHRcdGdvdG8gbmV4dDtcbiBcbiBcdFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcbi1cdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiYjNDM7XHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC0zNjIzLDcgJiM0MzszNjMyLDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcbiBcdFx0aSA9IGkgXHUwMDNlIE1JTl9MUlVfQkFUQ0ggPyAwIDogZmluZF9uZXh0X2JpdChiaXRtYXAsIE1JTl9MUlVfQkFUQ0gsIGkpICYjNDM7IDE7XG4gXHR9IHdoaWxlIChpIFx1MDAzYz0gTUlOX0xSVV9CQVRDSCk7XG4gXG4tXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiYjNDM7XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuIFxuIFx0bGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7XG4gXHRzcGluX3VubG9jayhwdGwpO1xuQEAgLTQyNTgsNyAmIzQzOzQyNjcsNyBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChsYXN0ICE9IGZvbGlvKSB7XG4tXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4mIzQzO1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4gXG4gXHRcdFx0bGFzdCA9IGZvbGlvO1xuIFx0XHRcdGRpcnR5ID0gZmFsc2U7XG5AQCAtNDI3MCw3ICYjNDM7NDI3OSw3IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdFx0eW91bmcgJiM0Mzs9IG5yO1xuIFx0fVxuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4mIzQzO1x0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiBcbiBcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDIwOjUzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFnZSByZWNsYWltIGhldXJpc3RpY3MgdG8gYWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuIEl0IGFmZmVjdHMgYm90aCBzdGFuZGFyZCBMUlUgYW5kIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYXRocy4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCByZWNsYWltIHBhdGhzIChlLmcuLCBmb2xpb19yZWZlcmVuY2VkLCBzaHJpbmtfYWN0aXZlX2xpc3QpLCB3aGljaCBhcmUgaG90LXBhdGggZnVuY3Rpb25zLCBzbyBubyBzcGVjaWZpYyBmb2N1cyBzeW1ib2xzIGFyZSBwcm92aWRlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGZmNTI4MzA4ZTg2N2E4ODQxMjhkYzczYTQ5NWU4YTQxNDg3Y2JmMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDE2IDIwOjUzOjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaCBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmgKaW5kZXggYjVjNGRjMGYzZmUzMjYuLjMwZmRmMTA1NjMxMjEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmgKQEAgLTMwLDYgJiM0MzszMCwxMiBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19pc19maWxlX2xydShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXJldHVybiAhZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19pc19leGVjX2ZpbGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCWNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpCiYjNDM7ewomIzQzOwlyZXR1cm4gdm1hX2ZsYWdzX3Rlc3Qodm1hX2ZsYWdzLCBWTUFfRVhFQ19CSVQpICZhbXA7JmFtcDsgZm9saW9faXNfZmlsZV9scnUoZm9saW8pOwomIzQzO30KJiM0MzsKIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCQkJZW51bSBscnVfbGlzdCBscnUsIGVudW0gem9uZV90eXBlIHppZCwKIAkJCQlsb25nIG5yX3BhZ2VzKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ybWFwLmggYi9pbmNsdWRlL2xpbnV4L3JtYXAuaAppbmRleCA4ZGMwODcxZTVmMDAxMS4uZTA5MGFhMDk4MjVkNTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcm1hcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcm1hcC5oCkBAIC04NDMsNyAmIzQzOzg0Myw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX3RyeV9zaGFyZV9hbm9uX3JtYXBfcG1kKHN0cnVjdCBmb2xpbyAqZm9saW8sCiAgKiBDYWxsZWQgZnJvbSBtbS92bXNjYW4uYyB0byBoYW5kbGUgcGFnaW5nIG91dAogICovCiBpbnQgZm9saW9fcmVmZXJlbmNlZChzdHJ1Y3QgZm9saW8gKiwgaW50IGlzX2xvY2tlZCwKLQkJCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdm1fZmxhZ3NfdCAqdm1fZmxhZ3MpOwomIzQzOwkJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKTsKIAogdm9pZCB0cnlfdG9fbWlncmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIHR0dV9mbGFncyBmbGFncyk7CiB2b2lkIHRyeV90b191bm1hcChzdHJ1Y3QgZm9saW8gKiwgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpOwpAQCAtOTc1LDEwICYjNDM7OTc1LDkgQEAgc3RydWN0IGFub25fdm1hICpmb2xpb19sb2NrX2Fub25fdm1hX3JlYWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywKICNkZWZpbmUgYW5vbl92bWFfcHJlcGFyZSh2bWEpCSgwKQogCiBzdGF0aWMgaW5saW5lIGludCBmb2xpb19yZWZlcmVuY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBpc19sb2NrZWQsCi0JCQkJICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCi0JCQkJICB2bV9mbGFnc190ICp2bV9mbGFncykKJiM0MzsJCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncykKIHsKLQkqdm1fZmxhZ3MgPSAwOwomIzQzOwl2bWFfZmxhZ3NfY2xlYXJfYWxsKHZtYV9mbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuYwppbmRleCBlODU0Njc5NTUzYjljMy4uNDA4NTU0MGI2YTI1ZjQgMTAwNjQ0Ci0tLSBhL21tL3JtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9ybWFwLmMKQEAgLTkwNyw3ICYjNDM7OTA3LDcgQEAgcG1kX3QgKm1tX2ZpbmRfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiBzdHJ1Y3QgZm9saW9fcmVmZXJlbmNlZF9hcmcgewogCWludCBtYXBjb3VudDsKIAlpbnQgcmVmZXJlbmNlZDsKLQl2bV9mbGFnc190IHZtX2ZsYWdzOwomIzQzOwl2bWFfZmxhZ3NfdCB2bWFfZmxhZ3M7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwogfTsKIApAQCAtOTI2LDcgJiM0Mzs5MjYsNyBAQCBzdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQlhZGRyZXNzID0gcHZtdy5hZGRyZXNzOwogCQluciA9IDE7CiAKLQkJaWYgKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fTE9DS0VEKSB7CiYjNDM7CQlpZiAodm1hX3Rlc3Qodm1hLCBWTUFfTE9DS0VEX0JJVCkpIHsKIAkJCXB0ZXMmIzQzOyYjNDM7OwogCQkJcHJhLSZndDttYXBjb3VudC0tOwogCkBAIC05NDcsNyAmIzQzOzk0Nyw3IEBAIHN0YXRpYyBib29sIGZvbGlvX3JlZmVyZW5jZWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCQkvKiBSZXN0b3JlIHRoZSBtbG9jayB3aGljaCBnb3QgbWlzc2VkICovCiAJCQltbG9ja192bWFfZm9saW8oZm9saW8sIHZtYSk7CiAJCQlwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKCZhbXA7cHZtdyk7Ci0JCQlwcmEtJmd0O3ZtX2ZsYWdzIHw9IFZNX0xPQ0tFRDsKJiM0MzsJCQl2bWFfZmxhZ3Nfc2V0KCZhbXA7cHJhLSZndDt2bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKTsKIAkJCXJldHVybiBmYWxzZTsgLyogVG8gYnJlYWsgdGhlIGxvb3AgKi8KIAkJfQogCkBAIC0xMDE1LDggJiM0MzsxMDE1LDExIEBAIHN0YXRpYyBib29sIGZvbGlvX3JlZmVyZW5jZWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCXJlZmVyZW5jZWQmIzQzOyYjNDM7OwogCiAJaWYgKHJlZmVyZW5jZWQpIHsKJiM0MzsJCXZtYV9mbGFnc190IHZtYV9mbGFncyA9IHZtYS0mZ3Q7ZmxhZ3M7CiYjNDM7CiAJCXByYS0mZ3Q7cmVmZXJlbmNlZCYjNDM7JiM0Mzs7Ci0JCXByYS0mZ3Q7dm1fZmxhZ3MgfD0gdm1hLSZndDt2bV9mbGFncyAmYW1wOyB+Vk1fTE9DS0VEOwomIzQzOwkJdm1hX2ZsYWdzX2NsZWFyKCZhbXA7dm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCk7CiYjNDM7CQl2bWFfZmxhZ3Nfc2V0X21hc2soJmFtcDtwcmEtJmd0O3ZtYV9mbGFncywgdm1hX2ZsYWdzKTsKIAl9CiAKIAlpZiAoIXByYS0mZ3Q7bWFwY291bnQpCkBAIC0xMDU0LDcgJiM0MzsxMDU3LDcgQEAgc3RhdGljIGJvb2wgaW52YWxpZF9mb2xpb19yZWZlcmVuY2VkX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm9pZCAqYXJnKQogICogQGZvbGlvOiBUaGUgZm9saW8gdG8gdGVzdC4KICAqIEBpc19sb2NrZWQ6IENhbGxlciBob2xkcyBsb2NrIG9uIHRoZSBmb2xpby4KICAqIEBtZW1jZzogdGFyZ2V0IG1lbW9yeSBjZ3JvdXAKLSAqIEB2bV9mbGFnczogQSBjb21iaW5hdGlvbiBvZiBhbGwgdGhlIHZtYS0mZ3Q7dm1fZmxhZ3Mgd2hpY2ggcmVmZXJlbmNlZCB0aGUgZm9saW8uCiYjNDM7ICogQHZtYV9mbGFnczogQSBjb21iaW5hdGlvbiBvZiBhbGwgdGhlIHZtYS0mZ3Q7ZmxhZ3Mgd2hpY2ggcmVmZXJlbmNlZCB0aGUgZm9saW8uCiAgKgogICogUXVpY2sgdGVzdF9hbmRfY2xlYXJfcmVmZXJlbmNlZCBmb3IgYWxsIG1hcHBpbmdzIG9mIGEgZm9saW8sCiAgKgpAQCAtMTA2Miw3ICYjNDM7MTA2NSw3IEBAIHN0YXRpYyBib29sIGludmFsaWRfZm9saW9fcmVmZXJlbmNlZF92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZvaWQgKmFyZykKICAqIHRoZSBmdW5jdGlvbiBiYWlsZWQgb3V0IGR1ZSB0byBybWFwIGxvY2sgY29udGVudGlvbi4KICAqLwogaW50IGZvbGlvX3JlZmVyZW5jZWQoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGlzX2xvY2tlZCwKLQkJICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHZtX2ZsYWdzX3QgKnZtX2ZsYWdzKQomIzQzOwkJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKQogewogCWJvb2wgd2VfbG9ja2VkID0gZmFsc2U7CiAJc3RydWN0IGZvbGlvX3JlZmVyZW5jZWRfYXJnIHByYSA9IHsKQEAgLTEwNzgsNyAmIzQzOzEwODEsNyBAQCBpbnQgZm9saW9fcmVmZXJlbmNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgaXNfbG9ja2VkLAogCX07CiAKIAlWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pLCBmb2xpbyk7Ci0JKnZtX2ZsYWdzID0gMDsKJiM0MzsJdm1hX2ZsYWdzX2NsZWFyX2FsbCh2bWFfZmxhZ3MpOwogCWlmICghcHJhLm1hcGNvdW50KQogCQlyZXR1cm4gMDsKIApAQCAtMTA5Miw3ICYjNDM7MTA5NSw3IEBAIGludCBmb2xpb19yZWZlcmVuY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBpc19sb2NrZWQsCiAJfQogCiAJcm1hcF93YWxrKGZvbGlvLCAmYW1wO3J3Yyk7Ci0JKnZtX2ZsYWdzID0gcHJhLnZtX2ZsYWdzOwomIzQzOwl2bWFfZmxhZ3Nfc2V0X21hc2sodm1hX2ZsYWdzLCBwcmEudm1hX2ZsYWdzKTsKIAogCWlmICh3ZV9sb2NrZWQpCiAJCWZvbGlvX3VubG9jayhmb2xpbyk7CmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDk4NmRkZThlNzQyOWYzLi5mYTgwODcyMWI2NGQxOSAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTgzNSwxMSAmIzQzOzgzNSwxNSBAQCBlbnVtIGZvbGlvX3JlZmVyZW5jZXMgewogICogd2l0aCBQR19hY3RpdmUgc2V0LiBJbiBjb250cmFzdCwgdGhlIGFnaW5nIChwYWdlIHRhYmxlIHdhbGspIHBhdGggdXNlcwogICogZm9saW9fdXBkYXRlX2dlbigpLgogICovCi1zdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKQogewogCS8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqLwogCWlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSAmYW1wOyZhbXA7ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKSB7CiAJCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJCS8qIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiAqLwomIzQzOwkJaWYgKGZvbGlvX2lzX2V4ZWNfZmlsZShmb2xpbywgdm1hX2ZsYWdzKSkKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIApAQCAtODUxLDcgJiM0Mzs4NTUsNyBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJcmV0dXJuIHRydWU7CiB9CiAjZWxzZQotc3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncykKIHsKIAlyZXR1cm4gZmFsc2U7CiB9CkBAIC04NjEsMTYgJiM0Mzs4NjUsMTYgQEAgc3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCQkJCQkgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQogewogCWludCByZWZlcmVuY2VkX3B0ZXMsIHJlZmVyZW5jZWRfZm9saW87Ci0Jdm1fZmxhZ3NfdCB2bV9mbGFnczsKJiM0MzsJdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzOwogCiAJcmVmZXJlbmNlZF9wdGVzID0gZm9saW9fcmVmZXJlbmNlZChmb2xpbywgMSwgc2MtJmd0O3RhcmdldF9tZW1fY2dyb3VwLAotCQkJCQkgICAmYW1wO3ZtX2ZsYWdzKTsKJiM0MzsJCQkJCSAgICZhbXA7dm1hX2ZsYWdzKTsKIAogCS8qCiAJICogVGhlIHN1cHBvc2VkbHkgcmVjbGFpbWFibGUgZm9saW8gd2FzIGZvdW5kIHRvIGJlIGluIGEgVk1fTE9DS0VEIHZtYS4KIAkgKiBMZXQgdGhlIGZvbGlvLCBub3cgbWFya2VkIE1sb2NrZWQsIGJlIG1vdmVkIHRvIHRoZSB1bmV2aWN0YWJsZSBsaXN0LgogCSAqLwotCWlmICh2bV9mbGFncyAmYW1wOyBWTV9MT0NLRUQpCiYjNDM7CWlmICh2bWFfZmxhZ3NfdGVzdCgmYW1wO3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpKQogCQlyZXR1cm4gRk9MSU9SRUZfQUNUSVZBVEU7CiAKIAkvKgpAQCAtODg2LDcgJiM0Mzs4OTAsNyBAQCBzdGF0aWMgZW51bSBmb2xpb19yZWZlcmVuY2VzIGZvbGlvX2NoZWNrX3JlZmVyZW5jZXMoc3RydWN0IGZvbGlvICpmb2xpbywKIAkJaWYgKCFyZWZlcmVuY2VkX3B0ZXMpCiAJCQlyZXR1cm4gRk9MSU9SRUZfUkVDTEFJTTsKIAotCQlyZXR1cm4gbHJ1X2dlbl9zZXRfcmVmcyhmb2xpbykgPyBGT0xJT1JFRl9BQ1RJVkFURSA6IEZPTElPUkVGX0tFRVA7CiYjNDM7CQlyZXR1cm4gbHJ1X2dlbl9zZXRfcmVmcyhmb2xpbywgJmFtcDt2bWFfZmxhZ3MpID8gRk9MSU9SRUZfQUNUSVZBVEUgOiBGT0xJT1JFRl9LRUVQOwogCX0KIAogCXJlZmVyZW5jZWRfZm9saW8gPSBmb2xpb190ZXN0X2NsZWFyX3JlZmVyZW5jZWQoZm9saW8pOwpAQCAtOTE0LDcgJiM0Mzs5MTgsNyBAQCBzdGF0aWMgZW51bSBmb2xpb19yZWZlcmVuY2VzIGZvbGlvX2NoZWNrX3JlZmVyZW5jZXMoc3RydWN0IGZvbGlvICpmb2xpbywKIAkJLyoKIAkJICogQWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuCiAJCSAqLwotCQlpZiAoKHZtX2ZsYWdzICZhbXA7IFZNX0VYRUMpICZhbXA7JmFtcDsgZm9saW9faXNfZmlsZV9scnUoZm9saW8pKQomIzQzOwkJaWYgKGZvbGlvX2lzX2V4ZWNfZmlsZShmb2xpbywgJmFtcDt2bWFfZmxhZ3MpKQogCQkJcmV0dXJuIEZPTElPUkVGX0FDVElWQVRFOwogCiAJCXJldHVybiBGT0xJT1JFRl9LRUVQOwpAQCAtMjA2NSw3ICYjNDM7MjA2OSw3IEBAIHN0YXRpYyB2b2lkIHNocmlua19hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sCiB7CiAJdW5zaWduZWQgbG9uZyBucl90YWtlbjsKIAl1bnNpZ25lZCBsb25nIG5yX3NjYW5uZWQ7Ci0Jdm1fZmxhZ3NfdCB2bV9mbGFnczsKJiM0MzsJdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzOwogCUxJU1RfSEVBRChsX2hvbGQpOwkvKiBUaGUgZm9saW9zIHdoaWNoIHdlcmUgc25pcHBlZCBvZmYgKi8KIAlMSVNUX0hFQUQobF9hY3RpdmUpOwogCUxJU1RfSEVBRChsX2luYWN0aXZlKTsKQEAgLTIxMDksNyAmIzQzOzIxMTMsNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLAogCiAJCS8qIFJlZmVyZW5jZWQgb3Igcm1hcCBsb2NrIGNvbnRlbnRpb246IHJvdGF0ZSAqLwogCQlpZiAoZm9saW9fcmVmZXJlbmNlZChmb2xpbywgMCwgc2MtJmd0O3RhcmdldF9tZW1fY2dyb3VwLAotCQkJCSAgICAgJmFtcDt2bV9mbGFncykgIT0gMCkgewomIzQzOwkJCQkgICAgICZhbXA7dm1hX2ZsYWdzKSAhPSAwKSB7CiAJCQkvKgogCQkJICogSWRlbnRpZnkgcmVmZXJlbmNlZCwgZmlsZS1iYWNrZWQgYWN0aXZlIGZvbGlvcyBhbmQKIAkJCSAqIGdpdmUgdGhlbSBvbmUgbW9yZSB0cmlwIGFyb3VuZCB0aGUgYWN0aXZlIGxpc3QuIFNvCkBAIC0yMTE5LDcgJiM0MzsyMTIzLDcgQEAgc3RhdGljIHZvaWQgc2hyaW5rX2FjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbiwKIAkJCSAqIElPLCBwbHVzIEpWTSBjYW4gY3JlYXRlIGxvdHMgb2YgYW5vbiBWTV9FWEVDIGZvbGlvcywKIAkJCSAqIHNvIHdlIGlnbm9yZSB0aGVtIGhlcmUuCiAJCQkgKi8KLQkJCWlmICgodm1fZmxhZ3MgJmFtcDsgVk1fRVhFQykgJmFtcDsmYW1wOyBmb2xpb19pc19maWxlX2xydShmb2xpbykpIHsKJiM0MzsJCQlpZiAoZm9saW9faXNfZXhlY19maWxlKGZvbGlvLCAmYW1wO3ZtYV9mbGFncykpIHsKIAkJCQlucl9yb3RhdGVkICYjNDM7PSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiAJCQkJbGlzdF9hZGQoJmFtcDtmb2xpby0mZ3Q7bHJ1LCAmYW1wO2xfYWN0aXZlKTsKIAkJCQljb250aW51ZTsKQEAgLTMxODgsNyAmIzQzOzMxOTIsNyBAQCBzdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2VycihzdHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyogcHJvbW90ZSBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzICovCi1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbikKJiM0MztzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncykKIHsKIAl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLSZndDtmbGFncy5mKTsKIApAQCAtMzE5NiwxMCAmIzQzOzMyMDAsMTUgQEAgc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4pCiAKIAkvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi8KIAlpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgJmFtcDsmYW1wOyAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkgewomIzQzOwkJLyogQWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuICovCiYjNDM7CQlpZiAoZm9saW9faXNfZXhlY19maWxlKGZvbGlvLCB2bWFfZmxhZ3MpKQomIzQzOwkJCWdvdG8gcHJvbW90ZTsKJiM0MzsKIAkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpOwogCQlyZXR1cm4gLTE7CiAJfQogCiYjNDM7cHJvbW90ZToKIAlkbyB7CiAJCS8qIGxydV9nZW5fZGVsX2ZvbGlvKCkgaGFzIGlzb2xhdGVkIHRoaXMgcGFnZT8gKi8KIAkJaWYgKCEob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykpCkBAIC0zNDI4LDggJiM0MzszNDM3LDggQEAgc3RhdGljIGJvb2wgc3VpdGFibGVfdG9fc2NhbihpbnQgdG90YWwsIGludCB5b3VuZykKIAlyZXR1cm4geW91bmcgKiBuICZndDs9IHRvdGFsOwogfQogCi1zdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAotCQkJICAgICAgaW50IG5ld19nZW4sIGJvb2wgZGlydHkpCiYjNDM7c3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiYjNDM7CQlzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgYm9vbCBkaXJ0eSkKIHsKIAlpbnQgb2xkX2dlbjsKIApAQCAtMzQ0MiwxMCAmIzQzOzM0NTEsMTAgQEAgc3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbywKIAkJZm9saW9fbWFya19kaXJ0eShmb2xpbyk7CiAKIAlpZiAod2FsaykgewotCQlvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbik7CiYjNDM7CQlvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgJmFtcDt2bWEtJmd0O2ZsYWdzKTsKIAkJaWYgKG9sZF9nZW4gJmd0Oz0gMCAmYW1wOyZhbXA7IG9sZF9nZW4gIT0gbmV3X2dlbikKIAkJCXVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTsKLQl9IGVsc2UgaWYgKGxydV9nZW5fc2V0X3JlZnMoZm9saW8pKSB7CiYjNDM7CX0gZWxzZSBpZiAobHJ1X2dlbl9zZXRfcmVmcyhmb2xpbywgJmFtcDt2bWEtJmd0O2ZsYWdzKSkgewogCQlvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7CiAJCWlmIChvbGRfZ2VuICZndDs9IDAgJmFtcDsmYW1wOyBvbGRfZ2VuICE9IG5ld19nZW4pCiAJCQlmb2xpb19hY3RpdmF0ZShmb2xpbyk7CkBAIC0zNTE4LDcgJiM0MzszNTI3LDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCQljb250aW51ZTsKIAogCQlpZiAobGFzdCAhPSBmb2xpbykgewotCQkJd2Fsa191cGRhdGVfZm9saW8od2FsaywgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CQkJd2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy0mZ3Q7dm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKIAogCQkJbGFzdCA9IGZvbGlvOwogCQkJZGlydHkgPSBmYWxzZTsKQEAgLTM1MzEsNyAmIzQzOzM1NDAsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJd2Fsay0mZ3Q7bW1fc3RhdHNbTU1fTEVBRl9ZT1VOR10gJiM0Mzs9IG5yOwogCX0KIAotCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLSZndDt2bWEsIGxhc3QsIGdlbiwgZGlydHkpOwogCWxhc3QgPSBOVUxMOwogCiAJaWYgKGkgJmx0OyBQVFJTX1BFUl9QVEUgJmFtcDsmYW1wOyBnZXRfbmV4dF92bWEoUE1EX01BU0ssIFBBR0VfU0laRSwgYXJncywgJmFtcDtzdGFydCwgJmFtcDtlbmQpKQpAQCAtMzYwOSw3ICYjNDM7MzYxOCw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhCiAJCQlnb3RvIG5leHQ7CiAKIAkJaWYgKGxhc3QgIT0gZm9saW8pIHsKLQkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiAKIAkJCWxhc3QgPSBmb2xpbzsKIAkJCWRpcnR5ID0gZmFsc2U7CkBAIC0zNjIzLDcgJiM0MzszNjMyLDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWEKIAkJaSA9IGkgJmd0OyBNSU5fTFJVX0JBVENIID8gMCA6IGZpbmRfbmV4dF9iaXQoYml0bWFwLCBNSU5fTFJVX0JBVENILCBpKSAmIzQzOyAxOwogCX0gd2hpbGUgKGkgJmx0Oz0gTUlOX0xSVV9CQVRDSCk7CiAKLQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKIAogCWxhenlfbW11X21vZGVfZGlzYWJsZSgpOwogCXNwaW5fdW5sb2NrKHB0bCk7CkBAIC00MjU4LDcgJiM0Mzs0MjY3LDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKQogCQkJY29udGludWU7CiAKIAkJaWYgKGxhc3QgIT0gZm9saW8pIHsKLQkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiAKIAkJCWxhc3QgPSBmb2xpbzsKIAkJCWRpcnR5ID0gZmFsc2U7CkBAIC00MjcwLDcgJiM0Mzs0Mjc5LDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKQogCQl5b3VuZyAmIzQzOz0gbnI7CiAJfQogCi0Jd2Fsa191cGRhdGVfZm9saW8od2FsaywgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiAKIAlsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAyMDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTk4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogODQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoOiBQYWdlIFJlY2xhaW0gYW5kIEV4ZWN1dGFibGUgRmlsZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIG1vZGlmeWluZyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIFZNQSBmbGFncyBpbiByZWxhdGlvbiB0byBmb2xpbyByZWZlcmVuY2luZyBhbmQgcmVsYXRlZCBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgcmVwbGFjaW5nIGB2bV9mbGFnc190YCB3aXRoIGB2bWFfZmxhZ3NfdGAsIHdoaWNoLCBob2xkIG9uLCBzZWVtcyB0byBiZSBhIGRpZmZlcmVudCB0eXBlLCBtYXliZSBhIHN0cnVjdD8gQWhhLCBJIHNlZSBpbiBgaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaGAsIGB2bWFfZmxhZ3NfdGAgaXMgdXNlZCB3aXRoaW4gYGZvbGlvX2lzX2V4ZWNfZmlsZWAuIFRoYXQgY2xlYXJzIGl0IHVwLiBTbywgdGhlIHBhdGNoIGlzIGNoYW5naW5nIGB2bV9mbGFnc190ICp2bV9mbGFnc2AgdG8gYHZtYV9mbGFnc190ICp2bWFfZmxhZ3NgIGluIGBmb2xpb19yZWZlcmVuY2VkYC4KClRoZSBrZXkgaGVyZSBpcyB0aGF0IGBscnVfZ2VuX3NldF9yZWZzYCBpcyBiZWluZyB1cGRhdGVkIHRvIHRha2UgYHZtYV9mbGFnc2AsIHdoaWNoIHdhc24mIzM5O3QgdGhlIGNhc2UgcHJldmlvdXNseS4gTm93LCB0aGlzIGZ1bmN0aW9uIHdpbGwgYWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgKmFmdGVyKiB0aGVpciBmaXJzdCB1c2FnZS4gVGhhdCYjMzk7cyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGhvdyBwYWdlIHJlY2xhaW0sIHNwZWNpZmljYWxseSBib3RoIE1HTFJVIGFuZCB0aGUgc3RhbmRhcmQgTFJVLCBvcGVyYXRlcy4gVGhpcyBpcyBpbnRlcmVzdGluZy4gSXQmIzM5O3MgbW9kaWZ5aW5nIGNvcmUgTU0gY29kZSDigJMgdGhpbmdzIGxpa2UgYG1tL3Ztc2Nhbi5jYCBhbmQgYG1tL3JtYXAuY2Ag4oCTIHNvIHRoaXMgY291bGQgaGF2ZSBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMuIEFuZCwgeWVhaCwgcGFnZSByZWNsYWltIGlzIGRlZmluaXRlbHkgYSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgcGFydCBvZiB0aGUgc3lzdGVtLgoKVGhpcyBoYXMgbWUgdGhpbmtpbmcuIEdpdmVuIHRoaXMgY2hhbmdlIHRvIGNvcmUgTU0gbG9naWMsIGZ1enppbmcgaXMgKmFic29sdXRlbHkqIGluIG9yZGVyLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIG1vc3QgY3JpdGljYWwgZm9yIGZvY3VzZWQgZnV6emluZy4KCkxldCYjMzk7cyBzZWUsIGl0IGxvb2tzIGxpa2UgdGhlc2UgYXJlIHRoZSBtb2RpZmllZCBmdW5jdGlvbnM6IGBmb2xpb19yZWZlcmVuY2VkYCwgYGZvbGlvX2NoZWNrX3JlZmVyZW5jZXNgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYGZvbGlvX3VwZGF0ZV9nZW5gLCBgd2Fsa191cGRhdGVfZm9saW9gLCBgd2Fsa19wdGVfcmFuZ2VgLCBgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkYCwgYW5kIGBscnVfZ2VuX2xvb2tfYXJvdW5kYC4KCk5vdywgd2FpdCBhIG1pbnV0ZSwgYGZvbGlvX3JlZmVyZW5jZWRgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYW5kIGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCBhcmUgKnZlcnkqIGhvdC1wYXRoIGZ1bmN0aW9ucyBpbiBtZW1vcnkgcmVjbGFpbS4gQW5kIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBpcyByZWxhdGVkIHRvIE1HTFJVLiBUaGUgZ29hbCBoZXJlIGlzIHRvIGlkZW50aWZ5IHRhcmdldHMgdGhhdCBhcmUgTk9UIHRoZSBob3QgcGF0aC4gTGV0IG1lIHRoaW5rIGFib3V0IHRoaXMuLi4gc3BlY2lmaWMgc3lzY2FsbHMgb3Igb3BlcmF0aW9ucyB0aGF0IG1pZ2h0IHRyaWdnZXIgdGhpcyBsb2dpYz8gTWVtb3J5IHByZXNzdXJlLCBwYWdlIHJlY2xhaW0sIHN3YXAsIGBtYWR2aXNlYC4uLgoKT2theSwgdGhlIHByb21wdCBpcyB0ZWxsaW5nIG1lIHRvIGZpbmQgc29tZXRoaW5nIGJleW9uZCB0aGUgb2J2aW91cy4gSXQgc2F5cywgJiMzNDtBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4mIzM0OyBSaWdodCwgdGhlIGdvYWwgaXMgdG8gcGlucG9pbnQgc29tZXRoaW5nIG1vcmUgc3BlY2lmaWMuIGBzaHJpbmtfYWN0aXZlX2xpc3RgLCBgZm9saW9fcmVmZXJlbmNlZGAsIGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCBhcmUgZGVmaW5pdGVseSBob3QuIFdoYXQgYWJvdXQgYGxydV9nZW5fbG9va19hcm91bmRgPyBNYXliZSB0aGF0JiMzOTtzIGFuIG9wdGlvbj8KCkhtbSwgaXQmIzM5O3MgYSBjb3JlIE1NIGNoYW5nZS4gSXNvbGF0aW5nIGEgc2luZ2xlIG5vbi1ob3QtcGF0aCBmdW5jdGlvbiBpcyBjaGFsbGVuZ2luZyBoZXJlLiBNYXliZSB0aGF0IGlubGluZSBmdW5jdGlvbiwgYGZvbGlvX2lzX2V4ZWNfZmlsZWA/IExldCYjMzk7cyBjaGVjayBgbW0vdm1zY2FuLmNgIGZvciBjYWxscyB0byBgZm9saW9fY2hlY2tfcmVmZXJlbmNlc2AuIEkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgdG8gZmluZCBjYWxscyB0byBgZm9saW9fY2hlY2tfcmVmZXJlbmNlc2Agbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDIwOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZvbGlvX2NoZWNrX3JlZmVyZW5jZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz04NTg9c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuLS1cbm1tL3Ztc2Nhbi5jLTg2My1cbm1tL3Ztc2Nhbi5jOjg2NDpzdGF0aWMgZW51bSBmb2xpb19yZWZlcmVuY2VzIGZvbGlvX2NoZWNrX3JlZmVyZW5jZXMoc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL3Ztc2Nhbi5jLTg2NS1cdFx0XHRcdFx0XHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jPTEwNTU9c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuLS1cbm1tL3Ztc2Nhbi5jLTEyMjgtXHRcdGlmICghaWdub3JlX3JlZmVyZW5jZXMpXG5tbS92bXNjYW4uYzoxMjI5Olx0XHRcdHJlZmVyZW5jZXMgPSBmb2xpb19jaGVja19yZWZlcmVuY2VzKGZvbGlvLCBzYyk7XG5tbS92bXNjYW4uYy0xMjMwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDIwOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NjIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNR0xSVSBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoaXMgTXVsdGktR2VuIExSVSAoTUdMUlUpIHN0dWZmIGlzIHdpcmVkIHVwLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCBpcyBjYWxsZWQgZnJvbSBgc2hyaW5rX2ZvbGlvX2xpc3RgLCB3aGljaCBpcyBhIGtleSBwYXJ0IG9mIHRoZSBzaHJpbmtpbmcgcHJvY2Vzcy4gQW5kIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IGBzaHJpbmtfYWN0aXZlX2xpc3RgIGlzIGFsc28gYmVpbmcgbW9kaWZpZWQgaGVyZS4gVGhlbiwgSSBzZWUgYHdhbGtfdXBkYXRlX2ZvbGlvYCBiZWluZyBjYWxsZWQgZnJvbSBtdWx0aXBsZSBwbGFjZXM6IGB3YWxrX3B0ZV9yYW5nZWAsIGB3YWxrX3BtZF9yYW5nZV9sb2NrZWRgLCBhbmQgYGxydV9nZW5fbG9va19hcm91bmRgLiBUaGF0IGNvbm5lY3RzIHRob3NlIGZ1bmN0aW9ucyB0byBib3RoIE1HTFJVIGFuZCB0aGUgc3RhbmRhcmQgTFJVLiBUaGlzIGFsbCBzZWVtcyB0byBiZSBwYXJ0IG9mIHRoZSBjb3JlIE1HTFJVIGltcGxlbWVudGF0aW9uIG9yIGF0IGxlYXN0IGludGVyYWN0cyBoZWF2aWx5IHdpdGggaXQuCgpOb3csIGEgY3JpdGljYWwgcXVlc3Rpb24gZm9yIG9wdGltaXphdGlvbiBhbmQgdHVuaW5nIHRoaXMgaXM6IElzIE1HTFJVIGVuYWJsZWQgYnkgZGVmYXVsdD8gSSBuZWVkIHRvIGtub3cgaWYgdGhpcyBpcyBzb21ldGhpbmcgdGhhdCBJJiMzOTttIGRlYWxpbmcgd2l0aCBvdXQtb2YtdGhlLWJveCBvciBpZiBJIGhhdmUgdG8gZXhwbGljaXRseSBjb25maWd1cmUgaXQuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHNlY3Rpb24sIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBkZWZhdWx0IHNldHRpbmcgZm9yIE1HTFJVLiBUaGF0IHdpbGwgdGVsbCBtZSB3aGVyZSB0byBnbyBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDIwOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBMUlVfR0VOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTE0MDU9ZW5kaWYgIyBVU0VSRkFVTFRGRFxuLS1cbm1tL0tjb25maWctMTQwNy0jIG11bHRpLWdlbiBMUlUge1xubW0vS2NvbmZpZzoxNDA4OmNvbmZpZyBMUlVfR0VOXG5tbS9LY29uZmlnLTE0MDktXHRib29sIFwmIzM0O011bHRpLUdlbiBMUlVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MTYtXG5tbS9LY29uZmlnOjE0MTc6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxubW0vS2NvbmZpZy0xNDE4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQyMi1cbm1tL0tjb25maWc6MTQyMzpjb25maWcgTFJVX0dFTl9TVEFUU1xubW0vS2NvbmZpZy0xNDI0LVx0Ym9vbCBcJiMzNDtGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MzEtXG5tbS9LY29uZmlnOjE0MzI6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXG5tbS9LY29uZmlnLTE0MzMtXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMjA6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU5MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExSVSBHZW5lcmF0aW9uIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgIGFyZSB0aGUgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIHBheSBhdHRlbnRpb24gdG8uIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIG1vZGlmaWVkIGNvZGUgZGVwZW5kcyBvbiBgTFJVX0dFTmAgc3BlY2lmaWNhbGx5LiBMZXQmIzM5O3MgdHJhY2UgaXQgb3V0LiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYGxydV9nZW5fc2V0X3JlZnNgLCBgZm9saW9fdXBkYXRlX2dlbmAsIGB3YWxrX3VwZGF0ZV9mb2xpb2AsIGB3YWxrX3B0ZV9yYW5nZWAsIGB3YWxrX3BtZF9yYW5nZV9sb2NrZWRgLCBhbmQgYGxydV9nZW5fbG9va19hcm91bmRgLiBHaXZlbiB0aG9zZSBmdW5jdGlvbiBuYW1lcywgdGhleSYjMzk7cmUgYWxtb3N0IGNlcnRhaW5seSBndWFyZGVkIGJ5IGFuIGAjaWZkZWYgQ09ORklHX0xSVV9HRU5gIHNvbWV3aGVyZS4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gdmVyaWZ5IHRoYXQgYXNzdW1wdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byBgbW0vdm1zY2FuLmNgIGFuZCBzcGVjaWZpY2FsbHkgZXhhbWluZSB0aGUgY29kZSBhcm91bmQgdGhlIGBscnVfZ2VuX3NldF9yZWZzYCBmdW5jdGlvbiBjYWxsIHRvIGNvbmZpcm0gYW5kIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDIwOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fc2V0X3JlZnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz04MjU9ZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcbi0tXG5tbS92bXNjYW4uYy04MzctICovXG5tbS92bXNjYW4uYzo4Mzg6c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxubW0vdm1zY2FuLmMtODM5LXtcbi0tXG5tbS92bXNjYW4uYy04NTctI2Vsc2Vcbm1tL3Ztc2Nhbi5jOjg1ODpzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG5tbS92bXNjYW4uYy04NTkte1xuLS1cbm1tL3Ztc2Nhbi5jPTg2ND1zdGF0aWMgZW51bSBmb2xpb19yZWZlcmVuY2VzIGZvbGlvX2NoZWNrX3JlZmVyZW5jZXMoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS92bXNjYW4uYy04OTItXG5tbS92bXNjYW4uYzo4OTM6XHRcdHJldHVybiBscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcdTAwMjZ2bWFfZmxhZ3MpID8gRk9MSU9SRUZfQUNUSVZBVEUgOiBGT0xJT1JFRl9LRUVQO1xubW0vdm1zY2FuLmMtODk0LVx0fVxuLS1cbm1tL3Ztc2Nhbi5jPTM0NDA9c3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vdm1zY2FuLmMtMzQ1Ni1cdFx0XHR1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG5tbS92bXNjYW4uYzozNDU3Olx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpKSB7XG5tbS92bXNjYW4uYy0zNDU4LVx0XHRvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMjA6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM2NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGBscnVfZ2VuX3NldF9yZWZzYCoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIFRoZSBpbW1lZGlhdGUgZ29hbCBpcyBjbGVhcjogSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBlbnZpcm9ubWVudCB0aGF0IGltcGFjdHMgdGhlIGBscnVfZ2VuX3NldF9yZWZzYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyB3aGF0IGAjaWZkZWZgIG9yIGAjaWZgIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGNvbnRyb2wgd2hldGhlciBvciBub3QgdGhpcyBmdW5jdGlvbiBpcyBpbmNsdWRlZCBpbiB0aGUgYnVpbGQuIEtub3dpbmcgdGhpcyB3aWxsIGJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGF2YWlsYWJpbGl0eSBpbiBkaWZmZXJlbnQgYnVpbGQgY29uZmlndXJhdGlvbnMsIGFuZCBmb3IgZGVidWdnaW5nIGlmIEkgZW5jb3VudGVyIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3IgaXRzIGFic2VuY2UgaW4gY2VydGFpbiBzY2VuYXJpb3MuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGNvbnRleHQgaXMgcGFyYW1vdW50IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgZGVzaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAyMDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjaWZkZWYgQ09ORklHX0xSVV9HRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz04MjU9ZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcbi0tXG5tbS92bXNjYW4uYy04MzAtXG5tbS92bXNjYW4uYzo4MzE6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS92bXNjYW4uYy04MzItLypcbi0tXG5tbS92bXNjYW4uYz0yNjEwPXN0YXRpYyBib29sIGNhbl9hZ2VfYW5vbl9wYWdlcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtMjYyMS1cbm1tL3Ztc2Nhbi5jOjI2MjI6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS92bXNjYW4uYy0yNjIzLVxubW0vdm1zY2FuLmM9MjYyND1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcbm1tL3Ztc2Nhbi5jOjI2MjU6I2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcbm1tL3Ztc2Nhbi5jLTI2MjYtREVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XG4tLVxubW0vdm1zY2FuLmM9MjgwNj1zdGF0aWMgdm9pZCByZXNldF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSlcbi0tXG5tbS92bXNjYW4uYy0yODI1LVxubW0vdm1zY2FuLmM6MjgyNjojaWZkZWYgQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VXG5tbS92bXNjYW4uYy0yODI3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAyMDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTA5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyB0aGUgUGF0Y2gmIzM5O3MgU2NvcGUqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgYENPTkZJR19MUlVfR0VOYCBqdW1wcyBvdXQgYXQgbWUgYXMgYSBrZXkgcG9pbnQuIEl0IHNlZW1zIHByZXR0eSBjZW50cmFsIHRvIHdoYXQmIzM5O3MgYmVpbmcgYWx0ZXJlZC4gQnV0IHRoZW4sIGl0JiMzOTtzIGFsc28gdG91Y2hpbmcgYGZvbGlvX2NoZWNrX3JlZmVyZW5jZXNgIGFuZCBgc2hyaW5rX2FjdGl2ZV9saXN0YC4gSGFuZyBvbi4uLiB0aG9zZSBhcmVuJiMzOTt0IHBhcnQgb2YgYENPTkZJR19MUlVfR0VOYCwgdGhvc2UgYXJlIHN0YW5kYXJkIExSVSBmdW5jdGlvbnMuIFRoYXQgZmVlbHMuLi4gdW5leHBlY3RlZC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4gSSYjMzk7bSBnb2luZyB0byBkb3VibGUgY2hlY2sgdGhlIGNvZGUgcmlnaHQgbm93LiBBcmUgdGhvc2UgZnVuY3Rpb25zIHJlYWxseSBvdXRzaWRlIHRoZSBzY29wZSBvZiBgQ09ORklHX0xSVV9HRU5gPyBJIG5lZWQgdG8gdmVyaWZ5IHdoYXQgdGhlIHBhdGNoIGlzICpyZWFsbHkqIGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAyMDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb19jaGVja19yZWZlcmVuY2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9ODU4PXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbi0tXG5tbS92bXNjYW4uYy04NjMtXG5tbS92bXNjYW4uYzo4NjQ6c3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS92bXNjYW4uYy04NjUtXHRcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYz0xMDU1PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbi0tXG5tbS92bXNjYW4uYy0xMjI4LVx0XHRpZiAoIWlnbm9yZV9yZWZlcmVuY2VzKVxubW0vdm1zY2FuLmM6MTIyOTpcdFx0XHRyZWZlcmVuY2VzID0gZm9saW9fY2hlY2tfcmVmZXJlbmNlcyhmb2xpbywgc2MpO1xubW0vdm1zY2FuLmMtMTIzMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMjA6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzOTAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0MDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBGb2N1cyBmb3IgVGhpcyBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHNwZWNpZmljYWxseSB0aGUgTFJVIGZ1bmN0aW9uYWxpdHksIGJvdGggdGhlIHN0YW5kYXJkIGltcGxlbWVudGF0aW9uIGFuZCBNR0xSVS4gVGhlIGtleSBtb2RpZmljYXRpb24gc2VlbXMgdG8gYmUgaW4gYGZvbGlvX3JlZmVyZW5jZWRgIHdpdGhpbiBgbW0vcm1hcC5jYCwgYSBmdW5jdGlvbiB1c2VkIGJ5IGJvdGggTFJVIGltcGxlbWVudGF0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHNwZWNpZmljIGZ1bmN0aW9ucyBmb3IgdGFyZ2V0ZWQgZnV6emluZywgYnV0IHRoZSBwcm9tcHQgYWR2aXNlcyBhdm9pZGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4KCk5vdywgd2hpY2ggb25lcyBhcmUgd29ydGggc3BlY2lmaWMgYXR0ZW50aW9uPyBgZm9saW9fY2hlY2tfcmVmZXJlbmNlc2AgaXMgdGhlIHN0YW5kYXJkIExSVSBmdW5jdGlvbiwgYnV0IGl0JiMzOTtzICphbHNvKiBhIGhvdC1wYXRoIGZ1bmN0aW9uLiAgSSBuZWVkIHRvIGJlIGNhcmVmdWwgbm90IHRvIGNyZWF0ZSBhIHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbi4gVGhlIG90aGVyIGZ1bmN0aW9ucyB0aGF0IGFyZSBtb2RpZmllZCBhcmUgYWxzbyBhbGwgaG90LXBhdGggZnVuY3Rpb25zLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYGZvbGlvX3VwZGF0ZV9nZW5gLCBgd2Fsa191cGRhdGVfZm9saW9gLCBgd2Fsa19wdGVfcmFuZ2VgLCBgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkYCwgYW5kIGBscnVfZ2VuX2xvb2tfYXJvdW5kYC4KCkNvbnNpZGVyaW5nIHRoZSBhZHZpY2UsIEkgbmVlZCB0byBjaG9vc2UgY2FyZWZ1bGx5LiBgZm9saW9fcmVmZXJlbmNlZGAgaXMgY2FsbGVkIGR1cmluZyBwYWdlIHJlY2xhaW0uIEl0JiMzOTtzIGRlZmluaXRlbHkgYWN0aXZlIGJ1dCBwZXJoYXBzIG5vdCAqYXMqIGludGVuc2VseSBob3QgYXMgc29tZXRoaW5nIGxpa2UgYHBhZ2VfYWRkX3JtYXBgLiBTdGlsbCwgaG90IGVub3VnaCB0byBiZSBjb25zaWRlcmVkIGEgaG90IHBhdGguIEFuZCBgZm9saW9faXNfZXhlY19maWxlYCBpcyBpbmxpbmUsIHNvIGZ1enppbmcgaXQgZGlyZWN0bHkgd29uJiMzOTt0IGJlIHBvc3NpYmxlLgoKVGhhdCBsZWF2ZXMgYGxydV9nZW5fbG9va19hcm91bmRgLiBUaGlzIG9uZSBpcyBjYWxsZWQgZHVyaW5nIGEgcGFnZSBmYXVsdCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgZG9fc2V0X3B0ZWAgb3Igc2ltaWxhci4gU2luY2UgaXQgaGFzIHNwZWNpZmljIGNvbnRleHQsIGl0JiMzOTtzIGEgZ29vZCBjYW5kaWRhdGUgdG8gY29uc2lkZXIsIGJ1dCBmaXJzdCwgSSYjMzk7bGwgY2hlY2sgaXRzIGNhbGwgc2l0ZXMgdG8gYmUgc3VyZSBpdCYjMzk7cyB0aGUgcmlnaHQgY2hvaWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAyMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtscnVfZ2VuX2xvb2tfYXJvdW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdD0xODc9Y2FuIGluY3VyIHRoZSBoaWdoZXN0IENQVSBjb3N0IGluIHRoZSByZWNsYWltIHBhdGguXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3QtMTg4LVxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0OjE4OTpgYGxydV9nZW5fbG9va19hcm91bmQoKWBgIGV4cGxvaXRzIHNwYXRpYWwgbG9jYWxpdHkgdG8gcmVkdWNlIHRoZVxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0LTE5MC10cmlwcyBpbnRvIHRoZSBybWFwLiBJdCBzY2FucyB0aGUgYWRqYWNlbnQgUFRFcyBvZiBhIHlvdW5nIFBURSBhbmRcbi0tXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3Q9MTk5PWluIHRoZSBzZXQuXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3QtMjAwLVxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0OjIwMTpJbiB0aGUgZXZpY3Rpb24gcGF0aCwgc3BlY2lmaWNhbGx5LCBpbiBgYGxydV9nZW5fbG9va19hcm91bmQoKWBgLCBpZiBhXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3QtMjAyLVBNRCBoYXMgYSBzdWZmaWNpZW50IG51bWJlciBvZiBob3QgcGFnZXMsIGl0cyBhZGRyZXNzIGlzIHBsYWNlZCBpbiB0aGVcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTY4OT12b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKTtcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NjkwOmJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucik7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTY5MS1cbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTcwOD1zdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03MTEtXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjcxMjpzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTcxMy1cdFx0dW5zaWduZWQgaW50IG5yKVxuLS1cbm1tL3JtYXAuYz05MTc9c3RhdGljIGJvb2wgZm9saW9fcmVmZXJlbmNlZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9ybWFwLmMtOTgxLVx0XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXHUwMDI2XHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpIFx1MDAyNlx1MDAyNiBwdm13LnB0ZSkge1xubW0vcm1hcC5jOjk4MjpcdFx0XHRpZiAobHJ1X2dlbl9sb29rX2Fyb3VuZChcdTAwMjZwdm13LCBucikpXG5tbS9ybWFwLmMtOTgzLVx0XHRcdFx0cmVmZXJlbmNlZCYjNDM7JiM0Mzs7XG4tLVxubW0vdm1zY2FuLmM9MjcxND1zdGF0aWMgYm9vbCBfX21heWJlX3VudXNlZCBzZXFfaXNfdmFsaWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuLS1cbm1tL3Ztc2Nhbi5jLTI3NDMtICogd2Fsa19wbWRfcmFuZ2UoKTsgdGhlIGV2aWN0aW9uIGFsc28gcmVwb3J0IHRoZW0gd2hlbiB3YWxraW5nIHRoZSBybWFwXG5tbS92bXNjYW4uYzoyNzQ0OiAqIGluIGxydV9nZW5fbG9va19hcm91bmQoKS5cbm1tL3Ztc2Nhbi5jLTI3NDUtICpcbi0tXG5tbS92bXNjYW4uYz0zOTk2PXN0YXRpYyBib29sIHRyeV90b19pbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLFxuLS1cbm1tL3Ztc2Nhbi5jLTQwMTUtXHQgKiBJZiB0aGUgaGFyZHdhcmUgZG9lc24mIzM5O3QgYXV0b21hdGljYWxseSBzZXQgdGhlIGFjY2Vzc2VkIGJpdCwgZmFsbGJhY2tcbm1tL3Ztc2Nhbi5jOjQwMTY6XHQgKiB0byBscnVfZ2VuX2xvb2tfYXJvdW5kKCksIHdoaWNoIG9ubHkgY2xlYXJzIHRoZSBhY2Nlc3NlZCBiaXQgaW4gYVxubW0vdm1zY2FuLmMtNDAxNy1cdCAqIGhhbmRmdWwgb2YgUFRFcy4gU3ByZWFkaW5nIHRoZSB3b3JrIG91dCBvdmVyIGEgcGVyaW9kIG9mIHRpbWUgdXN1YWxseVxuLS1cbm1tL3Ztc2Nhbi5jPTQxMzU9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00MTgxLSAqL1xubW0vdm1zY2FuLmM6NDE4Mjpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG5tbS92bXNjYW4uYy00MTgzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMjA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwODYKCQkJCQkJCW91dHB1dDogMTEzCgkJCQkJCQl0aG91Z2h0czogOTU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgZm9yIE1lbW9yeSBNYW5hZ2VtZW50IENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQgdG91Y2hlcyBjb3JlIE1NIGNvZGUsIHNwZWNpZmljYWxseSByZWNsYWltIGFuZCB0aGUgTFJVLiBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgaXMgY2FsbGVkIGZyb20gYGZvbGlvX3JlZmVyZW5jZWRfb25lYCwgd2hpY2ggdGVsbHMgbWUgdGhpcyBpcyBkZWZpbml0ZWx5IGluIHRoZSByZWNsYWltIHBhdGguIEdpdmVuIHRoZSBzY29wZSwgdGhpcyBpcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4KCk15IGZpcnN0IGltcHVsc2UgaXMgdG8gbGlzdCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zOiBgZm9saW9fcmVmZXJlbmNlZGAsIGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCwgYHNocmlua19hY3RpdmVfbGlzdGAsIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCwgYHdhbGtfcHRlX3JhbmdlYCwgYW5kIGB3YWxrX3BtZF9yYW5nZV9sb2NrZWRgLiBMZXQmIzM5O3Mgc2VlIGFib3V0IHNwZWNpZmljIGNvbmZpZ3MuCgpBaCwgYExSVV9HRU5gIGlzIHRoZSBrZXkgY29uZmlnIGZvciBNdWx0aS1HZW4gTFJVLiBJdCBzZWVtcyBpdCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gc29tZSBjb25maWdzLCBidXQgSSBzaG91bGQgZGVmaW5pdGVseSBzcGVjaWZ5IGl0LiBIb3dldmVyLCBzaW5jZSB0aGUgcGF0Y2ggKmFsc28qIG1vZGlmaWVzIHN0YW5kYXJkIExSVSwgaXQgaXNuJiMzOTt0IHN0cmljdGx5IG5lY2Vzc2FyeS4gQnV0LCB0byBlbnN1cmUgY29tcHJlaGVuc2l2ZSBNR0xSVSB0ZXN0aW5nLCBJJiMzOTtsbCBhZGQgaXQuCgpOb3csIHdhaXQgYSBtaW51dGUsIGBmb2xpb19pc19leGVjX2ZpbGVgIGlzIHRoZSBpbnRlcmVzdGluZyBwYXJ0LiBJdCYjMzk7cyB1c2VkIHRvIGFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiBUaGF0JiMzOTtzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSBpbiBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZXNlIHR5cGVzIG9mIG1hcHBpbmdzLgoKTGV0JiMzOTtzIHRyYWNlIGBmb2xpb19pc19leGVjX2ZpbGVgLiBJdCYjMzk7cyB1c2VkIGluIGBscnVfZ2VuX3NldF9yZWZzYCwgYGZvbGlvX2NoZWNrX3JlZmVyZW5jZXNgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYW5kIGBmb2xpb191cGRhdGVfZ2VuYC4gVGhpcyBjb25maXJtcyBpdCYjMzk7cyBhIHNpZ25pZmljYW50IGNoYW5nZSB0byBtZW1vcnkgbWFuYWdlbWVudCBiZWhhdmlvci4KClRoZXJlZm9yZSwgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIHNldCB0byBgdHJ1ZWAuCgpSZWdhcmRpbmcgYEZvY3VzU3ltYm9sc2AsIEkgaW5pdGlhbGx5IHRob3VnaHQgdG8gaW5jbHVkZSB0aG9zZSBtb2RpZmllZCBmdW5jdGlvbnMuIEhvd2V2ZXIsIHRoZSBwcm9tcHQgc2F5cyB0byBhdm9pZCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4gYGZvbGlvX3JlZmVyZW5jZWRgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYW5kIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBhcmUgYWxsICp2ZXJ5KiBob3QgZHVyaW5nIHJlY2xhaW0sIGVzc2VudGlhbGx5IG1ha2luZyB0aGVtIGhvdC1wYXRoLiBJZiBJIGluY2x1ZGUgdGhlbSwgSSYjMzk7bSBqdXN0IHRlbGxpbmcgdGhlIGZ1enplciB0byBmb2N1cyBvbiB3aGF0IGl0IGlzIGFscmVhZHkgZG9pbmcuIFNob3VsZCBJIGV4Y2x1ZGUgdGhlbSBhbmQgbGlzdCBzb21ldGhpbmcgZWxzZT8gTm8sIGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCBhbmQgYGxydV9nZW5fbG9va19hcm91bmRgIGFyZSBhbHNvIGhvdC1wYXRoIGZ1bmN0aW9ucy4KCiYjMzQ7RXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4gU2hvdWxkIGF2b2lkIGhvdC1wYXRoIGZ1bmN0aW9ucy4mIzM0OyBCZWNhdXNlIHRoZXNlIGZ1bmN0aW9ucyBhcmUga2V5IE1NIHJlY2xhaW0gcGF0aHMsIGFuZCBieSB0aGVpciBuYXR1cmUsIGhvdCB3aGVuIG1lbW9yeSBpcyB1bmRlciBwcmVzc3VyZSwgSSB3aWxsIGxlYXZlIGBGb2N1c1N5bWJvbHNgIGVtcHR5LgoKQWN0dWFsbHksIGBmb2xpb19yZWZlcmVuY2VkYCBpcyBjYWxsZWQgYnkgYHNocmlua19mb2xpb19saXN0YCwgd2hpY2ggaXMgY2FsbGVkIGJ5IGBzaHJpbmtfbHJ1dmVjYCwgd2hpY2ggY29uZmlybXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50LgoKQXMgZm9yIGBFbmFibGVDb25maWdzYCwgYExSVV9HRU5gIGlzIHRoZSBvbmx5IHNwZWNpZmljIGNvbmZpZyBJIG5lZWQuIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aGlzIGxhdGVyIHRvIGJlIHN1cmUuIFRoZSBjb2RlIGNoYW5nZXMgYXJlIGluIGBtbS9ybWFwLmNgIGFuZCBgbW0vdm1zY2FuLmNgLCBhbmQgYExSVV9HRU5gIGlzIHRoZSBvbmx5IHJlbGF0ZWQgY29uZmlnLgoKT2theSwgYmFjayB0byBgZm9saW9faXNfZXhlY19maWxlYC4gSSBzZWUgdGhhdCBpdCBjaGVja3MgYFZNQV9FWEVDX0JJVGAuIFRoaXMgaXMgc3RhbmRhcmQgZnVuY3Rpb25hbGl0eSByZWxhdGluZyB0byBleGVjdXRhYmxlIG1hcHBpbmdzIHZpYSBgbW1hcGAgd2l0aCBgUFJPVF9FWEVDYC4gVGhhdCBpcyBzb21ldGhpbmcgZm9yIHN1cmUuCgpTbywgbGV0JiMzOTtzIHJldmlldzogVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWN0aXZhdGVzIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zICphZnRlciogZmlyc3QgdXNhZ2UsIGFuZCBpdCYjMzk7cyBhIHNpZ25pZmljYW50IGNoYW5nZSB0byBwYWdlIHJlY2xhaW0gaGV1cmlzdGljcy4gRGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIQoKTXkgZmluYWwgc2V0dGluZ3Mgd2lsbCBiZToKCiogICBgV29ydGhGdXp6aW5nID0gdHJ1ZWAKKiAgIGBFbmFibGVDb25maWdzID0gWyYjMzQ7TFJVX0dFTiYjMzQ7XWAKKiAgIGBGb2N1c1N5bWJvbHMgPSBbXWAKKiAgIGBSZWFzb25pbmcgPSAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWdlIHJlY2xhaW0gaGV1cmlzdGljcyB0byBhY3RpdmF0ZSBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciBmaXJzdCB1c2FnZS4gSXQgYWZmZWN0cyBib3RoIHN0YW5kYXJkIExSVSBhbmQgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhdGhzLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHJlY2xhaW0gcGF0aHMgKGUuZy4sIGZvbGlvX3JlZmVyZW5jZWQsIHNocmlua19hY3RpdmVfbGlzdCksIHdoaWNoIGFyZSBob3QtcGF0aCBmdW5jdGlvbnMsIHNvIG5vIHNwZWNpZmljIGZvY3VzIHN5bWJvbHMgYXJlIHByb3ZpZGVkLiYjMzQ7YAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAyMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWdlIHJlY2xhaW0gaGV1cmlzdGljcyB0byBhY3RpdmF0ZSBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciBmaXJzdCB1c2FnZS4gSXQgYWZmZWN0cyBib3RoIHN0YW5kYXJkIExSVSBhbmQgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhdGhzLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHJlY2xhaW0gcGF0aHMgKGUuZy4sIGZvbGlvX3JlZmVyZW5jZWQsIHNocmlua19hY3RpdmVfbGlzdCksIHdoaWNoIGFyZSBob3QtcGF0aCBmdW5jdGlvbnMsIHNvIG5vIHNwZWNpZmljIGZvY3VzIHN5bWJvbHMgYXJlIHByb3ZpZGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhZ2UgcmVjbGFpbSBoZXVyaXN0aWNzIHRvIGFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiBJdCBhZmZlY3RzIGJvdGggc3RhbmRhcmQgTFJVIGFuZCBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGF0aHMuIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcmVjbGFpbSBwYXRocyAoZS5nLiwgZm9saW9fcmVmZXJlbmNlZCwgc2hyaW5rX2FjdGl2ZV9saXN0KSwgd2hpY2ggYXJlIGhvdC1wYXRoIGZ1bmN0aW9ucywgc28gbm8gc3BlY2lmaWMgZm9jdXMgc3ltYm9scyBhcmUgcHJvdmlkZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xNlQyMDo1MzowOC4yNjM3MTEyMDRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDUzNDI2NDMxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBhZ2UgcmVjbGFpbSBoZXVyaXN0aWNzIHRvIGFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiBJdCBhZmZlY3RzIGJvdGggc3RhbmRhcmQgTFJVIGFuZCBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGF0aHMuIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcmVjbGFpbSBwYXRocyAoZS5nLiwgZm9saW9fcmVmZXJlbmNlZCwgc2hyaW5rX2FjdGl2ZV9saXN0KSwgd2hpY2ggYXJlIGhvdC1wYXRoIGZ1bmN0aW9ucywgc28gbm8gc3BlY2lmaWMgZm9jdXMgc3ltYm9scyBhcmUgcHJvdmlkZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDIwOjUzOjA4LjI2MzcxOTc1NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY2Mzc3MDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOGZmNTI4MzA4ZTg2N2E4ODQxMjhkYzczYTQ5NWU4YTQxNDg3Y2JmM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAxNiAyMDo1MzowNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxcbmluZGV4IGI1YzRkYzBmM2ZlMzI2Li4zMGZkZjEwNTYzMTIxMyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxcbkBAIC0zMCw2ICszMCwxMiBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19pc19maWxlX2xydShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRyZXR1cm4gIWZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbyk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19pc19leGVjX2ZpbGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4rXFx0XFx0Y29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG4re1xcbitcXHRyZXR1cm4gdm1hX2ZsYWdzX3Rlc3Qodm1hX2ZsYWdzLCBWTUFfRVhFQ19CSVQpIFxcdTAwMjZcXHUwMDI2IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcXG4rfVxcbitcXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0XFx0XFx0XFx0ZW51bSBscnVfbGlzdCBscnUsIGVudW0gem9uZV90eXBlIHppZCxcXG4gXFx0XFx0XFx0XFx0bG9uZyBucl9wYWdlcylcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ybWFwLmggYi9pbmNsdWRlL2xpbnV4L3JtYXAuaFxcbmluZGV4IDhkYzA4NzFlNWYwMDExLi5lMDkwYWEwOTgyNWQ1MiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3JtYXAuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcm1hcC5oXFxuQEAgLTg0Myw3ICs4NDMsNyBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb190cnlfc2hhcmVfYW5vbl9ybWFwX3BtZChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiAgKiBDYWxsZWQgZnJvbSBtbS92bXNjYW4uYyB0byBoYW5kbGUgcGFnaW5nIG91dFxcbiAgKi9cXG4gaW50IGZvbGlvX3JlZmVyZW5jZWQoc3RydWN0IGZvbGlvICosIGludCBpc19sb2NrZWQsXFxuLVxcdFxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdm1fZmxhZ3NfdCAqdm1fZmxhZ3MpO1xcbitcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpO1xcbiBcXG4gdm9pZCB0cnlfdG9fbWlncmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIHR0dV9mbGFncyBmbGFncyk7XFxuIHZvaWQgdHJ5X3RvX3VubWFwKHN0cnVjdCBmb2xpbyAqLCBlbnVtIHR0dV9mbGFncyBmbGFncyk7XFxuQEAgLTk3NSwxMCArOTc1LDkgQEAgc3RydWN0IGFub25fdm1hICpmb2xpb19sb2NrX2Fub25fdm1hX3JlYWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gI2RlZmluZSBhbm9uX3ZtYV9wcmVwYXJlKHZtYSlcXHQoMClcXG4gXFxuIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX3JlZmVyZW5jZWQoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGlzX2xvY2tlZCxcXG4tXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLVxcdFxcdFxcdFxcdCAgdm1fZmxhZ3NfdCAqdm1fZmxhZ3MpXFxuK1xcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG4ge1xcbi1cXHQqdm1fZmxhZ3MgPSAwO1xcbitcXHR2bWFfZmxhZ3NfY2xlYXJfYWxsKHZtYV9mbGFncyk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmNcXG5pbmRleCBlODU0Njc5NTUzYjljMy4uNDA4NTU0MGI2YTI1ZjQgMTAwNjQ0XFxuLS0tIGEvbW0vcm1hcC5jXFxuKysrIGIvbW0vcm1hcC5jXFxuQEAgLTkwNyw3ICs5MDcsNyBAQCBwbWRfdCAqbW1fZmluZF9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcXG4gc3RydWN0IGZvbGlvX3JlZmVyZW5jZWRfYXJnIHtcXG4gXFx0aW50IG1hcGNvdW50O1xcbiBcXHRpbnQgcmVmZXJlbmNlZDtcXG4tXFx0dm1fZmxhZ3NfdCB2bV9mbGFncztcXG4rXFx0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzO1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuIH07XFxuIFxcbkBAIC05MjYsNyArOTI2LDcgQEAgc3RhdGljIGJvb2wgZm9saW9fcmVmZXJlbmNlZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0XFx0YWRkcmVzcyA9IHB2bXcuYWRkcmVzcztcXG4gXFx0XFx0bnIgPSAxO1xcbiBcXG4tXFx0XFx0aWYgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9MT0NLRUQpIHtcXG4rXFx0XFx0aWYgKHZtYV90ZXN0KHZtYSwgVk1BX0xPQ0tFRF9CSVQpKSB7XFxuIFxcdFxcdFxcdHB0ZXMrKztcXG4gXFx0XFx0XFx0cHJhLVxcdTAwM2VtYXBjb3VudC0tO1xcbiBcXG5AQCAtOTQ3LDcgKzk0Nyw3IEBAIHN0YXRpYyBib29sIGZvbGlvX3JlZmVyZW5jZWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdFxcdC8qIFJlc3RvcmUgdGhlIG1sb2NrIHdoaWNoIGdvdCBtaXNzZWQgKi9cXG4gXFx0XFx0XFx0bWxvY2tfdm1hX2ZvbGlvKGZvbGlvLCB2bWEpO1xcbiBcXHRcXHRcXHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFxcdTAwMjZwdm13KTtcXG4tXFx0XFx0XFx0cHJhLVxcdTAwM2V2bV9mbGFncyB8PSBWTV9MT0NLRUQ7XFxuK1xcdFxcdFxcdHZtYV9mbGFnc19zZXQoXFx1MDAyNnByYS1cXHUwMDNldm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCk7XFxuIFxcdFxcdFxcdHJldHVybiBmYWxzZTsgLyogVG8gYnJlYWsgdGhlIGxvb3AgKi9cXG4gXFx0XFx0fVxcbiBcXG5AQCAtMTAxNSw4ICsxMDE1LDExIEBAIHN0YXRpYyBib29sIGZvbGlvX3JlZmVyZW5jZWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdHJlZmVyZW5jZWQrKztcXG4gXFxuIFxcdGlmIChyZWZlcmVuY2VkKSB7XFxuK1xcdFxcdHZtYV9mbGFnc190IHZtYV9mbGFncyA9IHZtYS1cXHUwMDNlZmxhZ3M7XFxuK1xcbiBcXHRcXHRwcmEtXFx1MDAzZXJlZmVyZW5jZWQrKztcXG4tXFx0XFx0cHJhLVxcdTAwM2V2bV9mbGFncyB8PSB2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgflZNX0xPQ0tFRDtcXG4rXFx0XFx0dm1hX2ZsYWdzX2NsZWFyKFxcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKTtcXG4rXFx0XFx0dm1hX2ZsYWdzX3NldF9tYXNrKFxcdTAwMjZwcmEtXFx1MDAzZXZtYV9mbGFncywgdm1hX2ZsYWdzKTtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKCFwcmEtXFx1MDAzZW1hcGNvdW50KVxcbkBAIC0xMDU0LDcgKzEwNTcsNyBAQCBzdGF0aWMgYm9vbCBpbnZhbGlkX2ZvbGlvX3JlZmVyZW5jZWRfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2b2lkICphcmcpXFxuICAqIEBmb2xpbzogVGhlIGZvbGlvIHRvIHRlc3QuXFxuICAqIEBpc19sb2NrZWQ6IENhbGxlciBob2xkcyBsb2NrIG9uIHRoZSBmb2xpby5cXG4gICogQG1lbWNnOiB0YXJnZXQgbWVtb3J5IGNncm91cFxcbi0gKiBAdm1fZmxhZ3M6IEEgY29tYmluYXRpb24gb2YgYWxsIHRoZSB2bWEtXFx1MDAzZXZtX2ZsYWdzIHdoaWNoIHJlZmVyZW5jZWQgdGhlIGZvbGlvLlxcbisgKiBAdm1hX2ZsYWdzOiBBIGNvbWJpbmF0aW9uIG9mIGFsbCB0aGUgdm1hLVxcdTAwM2VmbGFncyB3aGljaCByZWZlcmVuY2VkIHRoZSBmb2xpby5cXG4gICpcXG4gICogUXVpY2sgdGVzdF9hbmRfY2xlYXJfcmVmZXJlbmNlZCBmb3IgYWxsIG1hcHBpbmdzIG9mIGEgZm9saW8sXFxuICAqXFxuQEAgLTEwNjIsNyArMTA2NSw3IEBAIHN0YXRpYyBib29sIGludmFsaWRfZm9saW9fcmVmZXJlbmNlZF92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZvaWQgKmFyZylcXG4gICogdGhlIGZ1bmN0aW9uIGJhaWxlZCBvdXQgZHVlIHRvIHJtYXAgbG9jayBjb250ZW50aW9uLlxcbiAgKi9cXG4gaW50IGZvbGlvX3JlZmVyZW5jZWQoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGlzX2xvY2tlZCxcXG4tXFx0XFx0ICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHZtX2ZsYWdzX3QgKnZtX2ZsYWdzKVxcbitcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXFxuIHtcXG4gXFx0Ym9vbCB3ZV9sb2NrZWQgPSBmYWxzZTtcXG4gXFx0c3RydWN0IGZvbGlvX3JlZmVyZW5jZWRfYXJnIHByYSA9IHtcXG5AQCAtMTA3OCw3ICsxMDgxLDcgQEAgaW50IGZvbGlvX3JlZmVyZW5jZWQoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGlzX2xvY2tlZCxcXG4gXFx0fTtcXG4gXFxuIFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb19pc196b25lX2RldmljZShmb2xpbyksIGZvbGlvKTtcXG4tXFx0KnZtX2ZsYWdzID0gMDtcXG4rXFx0dm1hX2ZsYWdzX2NsZWFyX2FsbCh2bWFfZmxhZ3MpO1xcbiBcXHRpZiAoIXByYS5tYXBjb3VudClcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbkBAIC0xMDkyLDcgKzEwOTUsNyBAQCBpbnQgZm9saW9fcmVmZXJlbmNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgaXNfbG9ja2VkLFxcbiBcXHR9XFxuIFxcbiBcXHRybWFwX3dhbGsoZm9saW8sIFxcdTAwMjZyd2MpO1xcbi1cXHQqdm1fZmxhZ3MgPSBwcmEudm1fZmxhZ3M7XFxuK1xcdHZtYV9mbGFnc19zZXRfbWFzayh2bWFfZmxhZ3MsIHByYS52bWFfZmxhZ3MpO1xcbiBcXG4gXFx0aWYgKHdlX2xvY2tlZClcXG4gXFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IDk4NmRkZThlNzQyOWYzLi5mYTgwODcyMWI2NGQxOSAxMDA2NDRcXG4tLS0gYS9tbS92bXNjYW4uY1xcbisrKyBiL21tL3Ztc2Nhbi5jXFxuQEAgLTgzNSwxMSArODM1LDE1IEBAIGVudW0gZm9saW9fcmVmZXJlbmNlcyB7XFxuICAqIHdpdGggUEdfYWN0aXZlIHNldC4gSW4gY29udHJhc3QsIHRoZSBhZ2luZyAocGFnZSB0YWJsZSB3YWxrKSBwYXRoIHVzZXNcXG4gICogZm9saW9fdXBkYXRlX2dlbigpLlxcbiAgKi9cXG4tc3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXFxuIHtcXG4gXFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXFxuIFxcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkge1xcbiBcXHRcXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcXG4rXFx0XFx0LyogQWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuICovXFxuK1xcdFxcdGlmIChmb2xpb19pc19leGVjX2ZpbGUoZm9saW8sIHZtYV9mbGFncykpXFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHR9XFxuIFxcbkBAIC04NTEsNyArODU1LDcgQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiAjZWxzZVxcbi1zdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG4ge1xcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG5AQCAtODYxLDE2ICs4NjUsMTYgQEAgc3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuIHtcXG4gXFx0aW50IHJlZmVyZW5jZWRfcHRlcywgcmVmZXJlbmNlZF9mb2xpbztcXG4tXFx0dm1fZmxhZ3NfdCB2bV9mbGFncztcXG4rXFx0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzO1xcbiBcXG4gXFx0cmVmZXJlbmNlZF9wdGVzID0gZm9saW9fcmVmZXJlbmNlZChmb2xpbywgMSwgc2MtXFx1MDAzZXRhcmdldF9tZW1fY2dyb3VwLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2dm1fZmxhZ3MpO1xcbitcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2dm1hX2ZsYWdzKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFRoZSBzdXBwb3NlZGx5IHJlY2xhaW1hYmxlIGZvbGlvIHdhcyBmb3VuZCB0byBiZSBpbiBhIFZNX0xPQ0tFRCB2bWEuXFxuIFxcdCAqIExldCB0aGUgZm9saW8sIG5vdyBtYXJrZWQgTWxvY2tlZCwgYmUgbW92ZWQgdG8gdGhlIHVuZXZpY3RhYmxlIGxpc3QuXFxuIFxcdCAqL1xcbi1cXHRpZiAodm1fZmxhZ3MgXFx1MDAyNiBWTV9MT0NLRUQpXFxuK1xcdGlmICh2bWFfZmxhZ3NfdGVzdChcXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCkpXFxuIFxcdFxcdHJldHVybiBGT0xJT1JFRl9BQ1RJVkFURTtcXG4gXFxuIFxcdC8qXFxuQEAgLTg4Niw3ICs4OTAsNyBAQCBzdGF0aWMgZW51bSBmb2xpb19yZWZlcmVuY2VzIGZvbGlvX2NoZWNrX3JlZmVyZW5jZXMoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0XFx0aWYgKCFyZWZlcmVuY2VkX3B0ZXMpXFxuIFxcdFxcdFxcdHJldHVybiBGT0xJT1JFRl9SRUNMQUlNO1xcbiBcXG4tXFx0XFx0cmV0dXJuIGxydV9nZW5fc2V0X3JlZnMoZm9saW8pID8gRk9MSU9SRUZfQUNUSVZBVEUgOiBGT0xJT1JFRl9LRUVQO1xcbitcXHRcXHRyZXR1cm4gbHJ1X2dlbl9zZXRfcmVmcyhmb2xpbywgXFx1MDAyNnZtYV9mbGFncykgPyBGT0xJT1JFRl9BQ1RJVkFURSA6IEZPTElPUkVGX0tFRVA7XFxuIFxcdH1cXG4gXFxuIFxcdHJlZmVyZW5jZWRfZm9saW8gPSBmb2xpb190ZXN0X2NsZWFyX3JlZmVyZW5jZWQoZm9saW8pO1xcbkBAIC05MTQsNyArOTE4LDcgQEAgc3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aWYgKCh2bV9mbGFncyBcXHUwMDI2IFZNX0VYRUMpIFxcdTAwMjZcXHUwMDI2IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSlcXG4rXFx0XFx0aWYgKGZvbGlvX2lzX2V4ZWNfZmlsZShmb2xpbywgXFx1MDAyNnZtYV9mbGFncykpXFxuIFxcdFxcdFxcdHJldHVybiBGT0xJT1JFRl9BQ1RJVkFURTtcXG4gXFxuIFxcdFxcdHJldHVybiBGT0xJT1JFRl9LRUVQO1xcbkBAIC0yMDY1LDcgKzIwNjksNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbnJfdGFrZW47XFxuIFxcdHVuc2lnbmVkIGxvbmcgbnJfc2Nhbm5lZDtcXG4tXFx0dm1fZmxhZ3NfdCB2bV9mbGFncztcXG4rXFx0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzO1xcbiBcXHRMSVNUX0hFQUQobF9ob2xkKTtcXHQvKiBUaGUgZm9saW9zIHdoaWNoIHdlcmUgc25pcHBlZCBvZmYgKi9cXG4gXFx0TElTVF9IRUFEKGxfYWN0aXZlKTtcXG4gXFx0TElTVF9IRUFEKGxfaW5hY3RpdmUpO1xcbkBAIC0yMTA5LDcgKzIxMTMsNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbiBcXG4gXFx0XFx0LyogUmVmZXJlbmNlZCBvciBybWFwIGxvY2sgY29udGVudGlvbjogcm90YXRlICovXFxuIFxcdFxcdGlmIChmb2xpb19yZWZlcmVuY2VkKGZvbGlvLCAwLCBzYy1cXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAsXFxuLVxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnZtX2ZsYWdzKSAhPSAwKSB7XFxuK1xcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnZtYV9mbGFncykgIT0gMCkge1xcbiBcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHQgKiBJZGVudGlmeSByZWZlcmVuY2VkLCBmaWxlLWJhY2tlZCBhY3RpdmUgZm9saW9zIGFuZFxcbiBcXHRcXHRcXHQgKiBnaXZlIHRoZW0gb25lIG1vcmUgdHJpcCBhcm91bmQgdGhlIGFjdGl2ZSBsaXN0LiBTb1xcbkBAIC0yMTE5LDcgKzIxMjMsNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbiBcXHRcXHRcXHQgKiBJTywgcGx1cyBKVk0gY2FuIGNyZWF0ZSBsb3RzIG9mIGFub24gVk1fRVhFQyBmb2xpb3MsXFxuIFxcdFxcdFxcdCAqIHNvIHdlIGlnbm9yZSB0aGVtIGhlcmUuXFxuIFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRpZiAoKHZtX2ZsYWdzIFxcdTAwMjYgVk1fRVhFQykgXFx1MDAyNlxcdTAwMjYgZm9saW9faXNfZmlsZV9scnUoZm9saW8pKSB7XFxuK1xcdFxcdFxcdGlmIChmb2xpb19pc19leGVjX2ZpbGUoZm9saW8sIFxcdTAwMjZ2bWFfZmxhZ3MpKSB7XFxuIFxcdFxcdFxcdFxcdG5yX3JvdGF0ZWQgKz0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbiBcXHRcXHRcXHRcXHRsaXN0X2FkZChcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSwgXFx1MDAyNmxfYWN0aXZlKTtcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuQEAgLTMxODgsNyArMzE5Miw3IEBAIHN0YXRpYyBib29sIHBvc2l0aXZlX2N0cmxfZXJyKHN0cnVjdCBjdHJsX3BvcyAqc3AsIHN0cnVjdCBjdHJsX3BvcyAqcHYpXFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuIFxcbiAvKiBwcm9tb3RlIHBhZ2VzIGFjY2Vzc2VkIHRocm91Z2ggcGFnZSB0YWJsZXMgKi9cXG4tc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4pXFxuK3N0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXFx1MDAzZWZsYWdzLmYpO1xcbiBcXG5AQCAtMzE5NiwxMCArMzIwMCwxNSBAQCBzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbilcXG4gXFxuIFxcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqL1xcbiBcXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpIHtcXG4rXFx0XFx0LyogQWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuICovXFxuK1xcdFxcdGlmIChmb2xpb19pc19leGVjX2ZpbGUoZm9saW8sIHZtYV9mbGFncykpXFxuK1xcdFxcdFxcdGdvdG8gcHJvbW90ZTtcXG4rXFxuIFxcdFxcdHNldF9tYXNrX2JpdHMoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcdH1cXG4gXFxuK3Byb21vdGU6XFxuIFxcdGRvIHtcXG4gXFx0XFx0LyogbHJ1X2dlbl9kZWxfZm9saW8oKSBoYXMgaXNvbGF0ZWQgdGhpcyBwYWdlPyAqL1xcbiBcXHRcXHRpZiAoIShvbGRfZmxhZ3MgXFx1MDAyNiBMUlVfR0VOX01BU0spKVxcbkBAIC0zNDI4LDggKzM0MzcsOCBAQCBzdGF0aWMgYm9vbCBzdWl0YWJsZV90b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKVxcbiBcXHRyZXR1cm4geW91bmcgKiBuIFxcdTAwM2U9IHRvdGFsO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi1cXHRcXHRcXHQgICAgICBpbnQgbmV3X2dlbiwgYm9vbCBkaXJ0eSlcXG4rc3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuK1xcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBib29sIGRpcnR5KVxcbiB7XFxuIFxcdGludCBvbGRfZ2VuO1xcbiBcXG5AQCAtMzQ0MiwxMCArMzQ1MSwxMCBAQCBzdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcXG4gXFxuIFxcdGlmICh3YWxrKSB7XFxuLVxcdFxcdG9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuKTtcXG4rXFx0XFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sIFxcdTAwMjZ2bWEtXFx1MDAzZWZsYWdzKTtcXG4gXFx0XFx0aWYgKG9sZF9nZW4gXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXFxuIFxcdFxcdFxcdHVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcXG4tXFx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvKSkge1xcbitcXHR9IGVsc2UgaWYgKGxydV9nZW5fc2V0X3JlZnMoZm9saW8sIFxcdTAwMjZ2bWEtXFx1MDAzZWZsYWdzKSkge1xcbiBcXHRcXHRvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7XFxuIFxcdFxcdGlmIChvbGRfZ2VuIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgb2xkX2dlbiAhPSBuZXdfZ2VuKVxcbiBcXHRcXHRcXHRmb2xpb19hY3RpdmF0ZShmb2xpbyk7XFxuQEAgLTM1MTgsNyArMzUyNyw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGlmIChsYXN0ICE9IGZvbGlvKSB7XFxuLVxcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpO1xcbitcXHRcXHRcXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLVxcdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xcbiBcXG4gXFx0XFx0XFx0bGFzdCA9IGZvbGlvO1xcbiBcXHRcXHRcXHRkaXJ0eSA9IGZhbHNlO1xcbkBAIC0zNTMxLDcgKzM1NDAsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0d2Fsay1cXHUwMDNlbW1fc3RhdHNbTU1fTEVBRl9ZT1VOR10gKz0gbnI7XFxuIFxcdH1cXG4gXFxuLVxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpO1xcbitcXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLVxcdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xcbiBcXHRsYXN0ID0gTlVMTDtcXG4gXFxuIFxcdGlmIChpIFxcdTAwM2MgUFRSU19QRVJfUFRFIFxcdTAwMjZcXHUwMDI2IGdldF9uZXh0X3ZtYShQTURfTUFTSywgUEFHRV9TSVpFLCBhcmdzLCBcXHUwMDI2c3RhcnQsIFxcdTAwMjZlbmQpKVxcbkBAIC0zNjA5LDcgKzM2MTgsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxcbiBcXHRcXHRcXHRnb3RvIG5leHQ7XFxuIFxcbiBcXHRcXHRpZiAobGFzdCAhPSBmb2xpbykge1xcbi1cXHRcXHRcXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBsYXN0LCBnZW4sIGRpcnR5KTtcXG4rXFx0XFx0XFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcXG4gXFxuIFxcdFxcdFxcdGxhc3QgPSBmb2xpbztcXG4gXFx0XFx0XFx0ZGlydHkgPSBmYWxzZTtcXG5AQCAtMzYyMyw3ICszNjMyLDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcXG4gXFx0XFx0aSA9IGkgXFx1MDAzZSBNSU5fTFJVX0JBVENIID8gMCA6IGZpbmRfbmV4dF9iaXQoYml0bWFwLCBNSU5fTFJVX0JBVENILCBpKSArIDE7XFxuIFxcdH0gd2hpbGUgKGkgXFx1MDAzYz0gTUlOX0xSVV9CQVRDSCk7XFxuIFxcbi1cXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBsYXN0LCBnZW4sIGRpcnR5KTtcXG4rXFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcXG4gXFxuIFxcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xcbiBcXHRzcGluX3VubG9jayhwdGwpO1xcbkBAIC00MjU4LDcgKzQyNjcsNyBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcXG4tXFx0XFx0XFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgbGFzdCwgZ2VuLCBkaXJ0eSk7XFxuK1xcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XFxuIFxcbiBcXHRcXHRcXHRsYXN0ID0gZm9saW87XFxuIFxcdFxcdFxcdGRpcnR5ID0gZmFsc2U7XFxuQEAgLTQyNzAsNyArNDI3OSw3IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcXG4gXFx0XFx0eW91bmcgKz0gbnI7XFxuIFxcdH1cXG4gXFxuLVxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpO1xcbitcXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xcbiBcXG4gXFx0bGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQyMDo1MzowOC44MzA4NTk3MTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5OTY3MDk5NjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFnZSByZWNsYWltIGhldXJpc3RpY3MgdG8gYWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuIEl0IGFmZmVjdHMgYm90aCBzdGFuZGFyZCBMUlUgYW5kIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYXRocy4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCByZWNsYWltIHBhdGhzIChlLmcuLCBmb2xpb19yZWZlcmVuY2VkLCBzaHJpbmtfYWN0aXZlX2xpc3QpLCB3aGljaCBhcmUgaG90LXBhdGggZnVuY3Rpb25zLCBzbyBubyBzcGVjaWZpYyBmb2N1cyBzeW1ib2xzIGFyZSBwcm92aWRlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4ZmY1MjgzMDhlODY3YTg4NDEyOGRjNzNhNDk1ZThhNDE0ODdjYmYzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMTYgMjA6NTM6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuaW5kZXggYjVjNGRjMGYzZmUzMjYuLjMwZmRmMTA1NjMxMjEzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuQEAgLTMwLDYgKzMwLDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2lzX2ZpbGVfbHJ1KGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gIWZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbyk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19pc19leGVjX2ZpbGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0Y29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbit7XG4rXHRyZXR1cm4gdm1hX2ZsYWdzX3Rlc3Qodm1hX2ZsYWdzLCBWTUFfRVhFQ19CSVQpIFx1MDAyNlx1MDAyNiBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4rfVxuK1xuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdFx0XHRlbnVtIGxydV9saXN0IGxydSwgZW51bSB6b25lX3R5cGUgemlkLFxuIFx0XHRcdFx0bG9uZyBucl9wYWdlcylcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JtYXAuaCBiL2luY2x1ZGUvbGludXgvcm1hcC5oXG5pbmRleCA4ZGMwODcxZTVmMDAxMS4uZTA5MGFhMDk4MjVkNTIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3JtYXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9ybWFwLmhcbkBAIC04NDMsNyArODQzLDcgQEAgc3RhdGljIGlubGluZSBpbnQgZm9saW9fdHJ5X3NoYXJlX2Fub25fcm1hcF9wbWQoc3RydWN0IGZvbGlvICpmb2xpbyxcbiAgKiBDYWxsZWQgZnJvbSBtbS92bXNjYW4uYyB0byBoYW5kbGUgcGFnaW5nIG91dFxuICAqL1xuIGludCBmb2xpb19yZWZlcmVuY2VkKHN0cnVjdCBmb2xpbyAqLCBpbnQgaXNfbG9ja2VkLFxuLVx0XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdm1fZmxhZ3NfdCAqdm1fZmxhZ3MpO1xuK1x0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpO1xuIFxuIHZvaWQgdHJ5X3RvX21pZ3JhdGUoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpO1xuIHZvaWQgdHJ5X3RvX3VubWFwKHN0cnVjdCBmb2xpbyAqLCBlbnVtIHR0dV9mbGFncyBmbGFncyk7XG5AQCAtOTc1LDEwICs5NzUsOSBAQCBzdHJ1Y3QgYW5vbl92bWEgKmZvbGlvX2xvY2tfYW5vbl92bWFfcmVhZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuICNkZWZpbmUgYW5vbl92bWFfcHJlcGFyZSh2bWEpXHQoMClcbiBcbiBzdGF0aWMgaW5saW5lIGludCBmb2xpb19yZWZlcmVuY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBpc19sb2NrZWQsXG4tXHRcdFx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi1cdFx0XHRcdCAgdm1fZmxhZ3NfdCAqdm1fZmxhZ3MpXG4rXHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiB7XG4tXHQqdm1fZmxhZ3MgPSAwO1xuK1x0dm1hX2ZsYWdzX2NsZWFyX2FsbCh2bWFfZmxhZ3MpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuY1xuaW5kZXggZTg1NDY3OTU1M2I5YzMuLjQwODU1NDBiNmEyNWY0IDEwMDY0NFxuLS0tIGEvbW0vcm1hcC5jXG4rKysgYi9tbS9ybWFwLmNcbkBAIC05MDcsNyArOTA3LDcgQEAgcG1kX3QgKm1tX2ZpbmRfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4gc3RydWN0IGZvbGlvX3JlZmVyZW5jZWRfYXJnIHtcbiBcdGludCBtYXBjb3VudDtcbiBcdGludCByZWZlcmVuY2VkO1xuLVx0dm1fZmxhZ3NfdCB2bV9mbGFncztcbitcdHZtYV9mbGFnc190IHZtYV9mbGFncztcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiB9O1xuIFxuQEAgLTkyNiw3ICs5MjYsNyBAQCBzdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRhZGRyZXNzID0gcHZtdy5hZGRyZXNzO1xuIFx0XHRuciA9IDE7XG4gXG4tXHRcdGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0xPQ0tFRCkge1xuK1x0XHRpZiAodm1hX3Rlc3Qodm1hLCBWTUFfTE9DS0VEX0JJVCkpIHtcbiBcdFx0XHRwdGVzKys7XG4gXHRcdFx0cHJhLVx1MDAzZW1hcGNvdW50LS07XG4gXG5AQCAtOTQ3LDcgKzk0Nyw3IEBAIHN0YXRpYyBib29sIGZvbGlvX3JlZmVyZW5jZWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdFx0LyogUmVzdG9yZSB0aGUgbWxvY2sgd2hpY2ggZ290IG1pc3NlZCAqL1xuIFx0XHRcdG1sb2NrX3ZtYV9mb2xpbyhmb2xpbywgdm1hKTtcbiBcdFx0XHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFx1MDAyNnB2bXcpO1xuLVx0XHRcdHByYS1cdTAwM2V2bV9mbGFncyB8PSBWTV9MT0NLRUQ7XG4rXHRcdFx0dm1hX2ZsYWdzX3NldChcdTAwMjZwcmEtXHUwMDNldm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCk7XG4gXHRcdFx0cmV0dXJuIGZhbHNlOyAvKiBUbyBicmVhayB0aGUgbG9vcCAqL1xuIFx0XHR9XG4gXG5AQCAtMTAxNSw4ICsxMDE1LDExIEBAIHN0YXRpYyBib29sIGZvbGlvX3JlZmVyZW5jZWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdHJlZmVyZW5jZWQrKztcbiBcbiBcdGlmIChyZWZlcmVuY2VkKSB7XG4rXHRcdHZtYV9mbGFnc190IHZtYV9mbGFncyA9IHZtYS1cdTAwM2VmbGFncztcbitcbiBcdFx0cHJhLVx1MDAzZXJlZmVyZW5jZWQrKztcbi1cdFx0cHJhLVx1MDAzZXZtX2ZsYWdzIHw9IHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgflZNX0xPQ0tFRDtcbitcdFx0dm1hX2ZsYWdzX2NsZWFyKFx1MDAyNnZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpO1xuK1x0XHR2bWFfZmxhZ3Nfc2V0X21hc2soXHUwMDI2cHJhLVx1MDAzZXZtYV9mbGFncywgdm1hX2ZsYWdzKTtcbiBcdH1cbiBcbiBcdGlmICghcHJhLVx1MDAzZW1hcGNvdW50KVxuQEAgLTEwNTQsNyArMTA1Nyw3IEBAIHN0YXRpYyBib29sIGludmFsaWRfZm9saW9fcmVmZXJlbmNlZF92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZvaWQgKmFyZylcbiAgKiBAZm9saW86IFRoZSBmb2xpbyB0byB0ZXN0LlxuICAqIEBpc19sb2NrZWQ6IENhbGxlciBob2xkcyBsb2NrIG9uIHRoZSBmb2xpby5cbiAgKiBAbWVtY2c6IHRhcmdldCBtZW1vcnkgY2dyb3VwXG4tICogQHZtX2ZsYWdzOiBBIGNvbWJpbmF0aW9uIG9mIGFsbCB0aGUgdm1hLVx1MDAzZXZtX2ZsYWdzIHdoaWNoIHJlZmVyZW5jZWQgdGhlIGZvbGlvLlxuKyAqIEB2bWFfZmxhZ3M6IEEgY29tYmluYXRpb24gb2YgYWxsIHRoZSB2bWEtXHUwMDNlZmxhZ3Mgd2hpY2ggcmVmZXJlbmNlZCB0aGUgZm9saW8uXG4gICpcbiAgKiBRdWljayB0ZXN0X2FuZF9jbGVhcl9yZWZlcmVuY2VkIGZvciBhbGwgbWFwcGluZ3Mgb2YgYSBmb2xpbyxcbiAgKlxuQEAgLTEwNjIsNyArMTA2NSw3IEBAIHN0YXRpYyBib29sIGludmFsaWRfZm9saW9fcmVmZXJlbmNlZF92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZvaWQgKmFyZylcbiAgKiB0aGUgZnVuY3Rpb24gYmFpbGVkIG91dCBkdWUgdG8gcm1hcCBsb2NrIGNvbnRlbnRpb24uXG4gICovXG4gaW50IGZvbGlvX3JlZmVyZW5jZWQoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGlzX2xvY2tlZCxcbi1cdFx0ICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHZtX2ZsYWdzX3QgKnZtX2ZsYWdzKVxuK1x0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4ge1xuIFx0Ym9vbCB3ZV9sb2NrZWQgPSBmYWxzZTtcbiBcdHN0cnVjdCBmb2xpb19yZWZlcmVuY2VkX2FyZyBwcmEgPSB7XG5AQCAtMTA3OCw3ICsxMDgxLDcgQEAgaW50IGZvbGlvX3JlZmVyZW5jZWQoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGlzX2xvY2tlZCxcbiBcdH07XG4gXG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pLCBmb2xpbyk7XG4tXHQqdm1fZmxhZ3MgPSAwO1xuK1x0dm1hX2ZsYWdzX2NsZWFyX2FsbCh2bWFfZmxhZ3MpO1xuIFx0aWYgKCFwcmEubWFwY291bnQpXG4gXHRcdHJldHVybiAwO1xuIFxuQEAgLTEwOTIsNyArMTA5NSw3IEBAIGludCBmb2xpb19yZWZlcmVuY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBpc19sb2NrZWQsXG4gXHR9XG4gXG4gXHRybWFwX3dhbGsoZm9saW8sIFx1MDAyNnJ3Yyk7XG4tXHQqdm1fZmxhZ3MgPSBwcmEudm1fZmxhZ3M7XG4rXHR2bWFfZmxhZ3Nfc2V0X21hc2sodm1hX2ZsYWdzLCBwcmEudm1hX2ZsYWdzKTtcbiBcbiBcdGlmICh3ZV9sb2NrZWQpXG4gXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggOTg2ZGRlOGU3NDI5ZjMuLmZhODA4NzIxYjY0ZDE5IDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtODM1LDExICs4MzUsMTUgQEAgZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcbiAgKiB3aXRoIFBHX2FjdGl2ZSBzZXQuIEluIGNvbnRyYXN0LCB0aGUgYWdpbmcgKHBhZ2UgdGFibGUgd2FsaykgcGF0aCB1c2VzXG4gICogZm9saW9fdXBkYXRlX2dlbigpLlxuICAqL1xuLXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4ge1xuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKSB7XG4gXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcbitcdFx0LyogQWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuICovXG4rXHRcdGlmIChmb2xpb19pc19leGVjX2ZpbGUoZm9saW8sIHZtYV9mbGFncykpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbkBAIC04NTEsNyArODU1LDcgQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuICNlbHNlXG4tc3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuQEAgLTg2MSwxNiArODY1LDE2IEBAIHN0YXRpYyBlbnVtIGZvbGlvX3JlZmVyZW5jZXMgZm9saW9fY2hlY2tfcmVmZXJlbmNlcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdFx0XHRcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4ge1xuIFx0aW50IHJlZmVyZW5jZWRfcHRlcywgcmVmZXJlbmNlZF9mb2xpbztcbi1cdHZtX2ZsYWdzX3Qgdm1fZmxhZ3M7XG4rXHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3M7XG4gXG4gXHRyZWZlcmVuY2VkX3B0ZXMgPSBmb2xpb19yZWZlcmVuY2VkKGZvbGlvLCAxLCBzYy1cdTAwM2V0YXJnZXRfbWVtX2Nncm91cCxcbi1cdFx0XHRcdFx0ICAgXHUwMDI2dm1fZmxhZ3MpO1xuK1x0XHRcdFx0XHQgICBcdTAwMjZ2bWFfZmxhZ3MpO1xuIFxuIFx0LypcbiBcdCAqIFRoZSBzdXBwb3NlZGx5IHJlY2xhaW1hYmxlIGZvbGlvIHdhcyBmb3VuZCB0byBiZSBpbiBhIFZNX0xPQ0tFRCB2bWEuXG4gXHQgKiBMZXQgdGhlIGZvbGlvLCBub3cgbWFya2VkIE1sb2NrZWQsIGJlIG1vdmVkIHRvIHRoZSB1bmV2aWN0YWJsZSBsaXN0LlxuIFx0ICovXG4tXHRpZiAodm1fZmxhZ3MgXHUwMDI2IFZNX0xPQ0tFRClcbitcdGlmICh2bWFfZmxhZ3NfdGVzdChcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKSlcbiBcdFx0cmV0dXJuIEZPTElPUkVGX0FDVElWQVRFO1xuIFxuIFx0LypcbkBAIC04ODYsNyArODkwLDcgQEAgc3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdGlmICghcmVmZXJlbmNlZF9wdGVzKVxuIFx0XHRcdHJldHVybiBGT0xJT1JFRl9SRUNMQUlNO1xuIFxuLVx0XHRyZXR1cm4gbHJ1X2dlbl9zZXRfcmVmcyhmb2xpbykgPyBGT0xJT1JFRl9BQ1RJVkFURSA6IEZPTElPUkVGX0tFRVA7XG4rXHRcdHJldHVybiBscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcdTAwMjZ2bWFfZmxhZ3MpID8gRk9MSU9SRUZfQUNUSVZBVEUgOiBGT0xJT1JFRl9LRUVQO1xuIFx0fVxuIFxuIFx0cmVmZXJlbmNlZF9mb2xpbyA9IGZvbGlvX3Rlc3RfY2xlYXJfcmVmZXJlbmNlZChmb2xpbyk7XG5AQCAtOTE0LDcgKzkxOCw3IEBAIHN0YXRpYyBlbnVtIGZvbGlvX3JlZmVyZW5jZXMgZm9saW9fY2hlY2tfcmVmZXJlbmNlcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHQvKlxuIFx0XHQgKiBBY3RpdmF0ZSBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciBmaXJzdCB1c2FnZS5cbiBcdFx0ICovXG4tXHRcdGlmICgodm1fZmxhZ3MgXHUwMDI2IFZNX0VYRUMpIFx1MDAyNlx1MDAyNiBmb2xpb19pc19maWxlX2xydShmb2xpbykpXG4rXHRcdGlmIChmb2xpb19pc19leGVjX2ZpbGUoZm9saW8sIFx1MDAyNnZtYV9mbGFncykpXG4gXHRcdFx0cmV0dXJuIEZPTElPUkVGX0FDVElWQVRFO1xuIFxuIFx0XHRyZXR1cm4gRk9MSU9SRUZfS0VFUDtcbkBAIC0yMDY1LDcgKzIwNjksNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbnJfdGFrZW47XG4gXHR1bnNpZ25lZCBsb25nIG5yX3NjYW5uZWQ7XG4tXHR2bV9mbGFnc190IHZtX2ZsYWdzO1xuK1x0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzO1xuIFx0TElTVF9IRUFEKGxfaG9sZCk7XHQvKiBUaGUgZm9saW9zIHdoaWNoIHdlcmUgc25pcHBlZCBvZmYgKi9cbiBcdExJU1RfSEVBRChsX2FjdGl2ZSk7XG4gXHRMSVNUX0hFQUQobF9pbmFjdGl2ZSk7XG5AQCAtMjEwOSw3ICsyMTEzLDcgQEAgc3RhdGljIHZvaWQgc2hyaW5rX2FjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbiBcbiBcdFx0LyogUmVmZXJlbmNlZCBvciBybWFwIGxvY2sgY29udGVudGlvbjogcm90YXRlICovXG4gXHRcdGlmIChmb2xpb19yZWZlcmVuY2VkKGZvbGlvLCAwLCBzYy1cdTAwM2V0YXJnZXRfbWVtX2Nncm91cCxcbi1cdFx0XHRcdCAgICAgXHUwMDI2dm1fZmxhZ3MpICE9IDApIHtcbitcdFx0XHRcdCAgICAgXHUwMDI2dm1hX2ZsYWdzKSAhPSAwKSB7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBJZGVudGlmeSByZWZlcmVuY2VkLCBmaWxlLWJhY2tlZCBhY3RpdmUgZm9saW9zIGFuZFxuIFx0XHRcdCAqIGdpdmUgdGhlbSBvbmUgbW9yZSB0cmlwIGFyb3VuZCB0aGUgYWN0aXZlIGxpc3QuIFNvXG5AQCAtMjExOSw3ICsyMTIzLDcgQEAgc3RhdGljIHZvaWQgc2hyaW5rX2FjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbiBcdFx0XHQgKiBJTywgcGx1cyBKVk0gY2FuIGNyZWF0ZSBsb3RzIG9mIGFub24gVk1fRVhFQyBmb2xpb3MsXG4gXHRcdFx0ICogc28gd2UgaWdub3JlIHRoZW0gaGVyZS5cbiBcdFx0XHQgKi9cbi1cdFx0XHRpZiAoKHZtX2ZsYWdzIFx1MDAyNiBWTV9FWEVDKSBcdTAwMjZcdTAwMjYgZm9saW9faXNfZmlsZV9scnUoZm9saW8pKSB7XG4rXHRcdFx0aWYgKGZvbGlvX2lzX2V4ZWNfZmlsZShmb2xpbywgXHUwMDI2dm1hX2ZsYWdzKSkge1xuIFx0XHRcdFx0bnJfcm90YXRlZCArPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXHRcdFx0XHRsaXN0X2FkZChcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmxfYWN0aXZlKTtcbiBcdFx0XHRcdGNvbnRpbnVlO1xuQEAgLTMxODgsNyArMzE5Miw3IEBAIHN0YXRpYyBib29sIHBvc2l0aXZlX2N0cmxfZXJyKHN0cnVjdCBjdHJsX3BvcyAqc3AsIHN0cnVjdCBjdHJsX3BvcyAqcHYpXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiBcbiAvKiBwcm9tb3RlIHBhZ2VzIGFjY2Vzc2VkIHRocm91Z2ggcGFnZSB0YWJsZXMgKi9cbi1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbilcbitzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuIFxuQEAgLTMxOTYsMTAgKzMyMDAsMTUgQEAgc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4pXG4gXG4gXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi9cbiBcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpIHtcbitcdFx0LyogQWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuICovXG4rXHRcdGlmIChmb2xpb19pc19leGVjX2ZpbGUoZm9saW8sIHZtYV9mbGFncykpXG4rXHRcdFx0Z290byBwcm9tb3RlO1xuK1xuIFx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XG4gXHRcdHJldHVybiAtMTtcbiBcdH1cbiBcbitwcm9tb3RlOlxuIFx0ZG8ge1xuIFx0XHQvKiBscnVfZ2VuX2RlbF9mb2xpbygpIGhhcyBpc29sYXRlZCB0aGlzIHBhZ2U/ICovXG4gXHRcdGlmICghKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSlcbkBAIC0zNDI4LDggKzM0MzcsOCBAQCBzdGF0aWMgYm9vbCBzdWl0YWJsZV90b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKVxuIFx0cmV0dXJuIHlvdW5nICogbiBcdTAwM2U9IHRvdGFsO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLVx0XHRcdCAgICAgIGludCBuZXdfZ2VuLCBib29sIGRpcnR5KVxuK3N0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuK1x0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgYm9vbCBkaXJ0eSlcbiB7XG4gXHRpbnQgb2xkX2dlbjtcbiBcbkBAIC0zNDQyLDEwICszNDUxLDEwIEBAIHN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuIFxuIFx0aWYgKHdhbGspIHtcbi1cdFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4pO1xuK1x0XHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgXHUwMDI2dm1hLVx1MDAzZWZsYWdzKTtcbiBcdFx0aWYgKG9sZF9nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXG4gXHRcdFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xuLVx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvKSkge1xuK1x0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpKSB7XG4gXHRcdG9sZF9nZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTtcbiBcdFx0aWYgKG9sZF9nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXG4gXHRcdFx0Zm9saW9fYWN0aXZhdGUoZm9saW8pO1xuQEAgLTM1MTgsNyArMzUyNyw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAobGFzdCAhPSBmb2xpbykge1xuLVx0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC0zNTMxLDcgKzM1NDAsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0d2Fsay1cdTAwM2VtbV9zdGF0c1tNTV9MRUFGX1lPVU5HXSArPSBucjtcbiBcdH1cbiBcbi1cdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuIFx0bGFzdCA9IE5VTEw7XG4gXG4gXHRpZiAoaSBcdTAwM2MgUFRSU19QRVJfUFRFIFx1MDAyNlx1MDAyNiBnZXRfbmV4dF92bWEoUE1EX01BU0ssIFBBR0VfU0laRSwgYXJncywgXHUwMDI2c3RhcnQsIFx1MDAyNmVuZCkpXG5AQCAtMzYwOSw3ICszNjE4LDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcbiBcdFx0XHRnb3RvIG5leHQ7XG4gXG4gXHRcdGlmIChsYXN0ICE9IGZvbGlvKSB7XG4tXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4rXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC0zNjIzLDcgKzM2MzIsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0XHRpID0gaSBcdTAwM2UgTUlOX0xSVV9CQVRDSCA/IDAgOiBmaW5kX25leHRfYml0KGJpdG1hcCwgTUlOX0xSVV9CQVRDSCwgaSkgKyAxO1xuIFx0fSB3aGlsZSAoaSBcdTAwM2M9IE1JTl9MUlVfQkFUQ0gpO1xuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4rXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuIFxuIFx0bGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7XG4gXHRzcGluX3VubG9jayhwdGwpO1xuQEAgLTQyNTgsNyArNDI2Nyw3IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcbi1cdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuIFxuIFx0XHRcdGxhc3QgPSBmb2xpbztcbiBcdFx0XHRkaXJ0eSA9IGZhbHNlO1xuQEAgLTQyNzAsNyArNDI3OSw3IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdFx0eW91bmcgKz0gbnI7XG4gXHR9XG4gXG4tXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4gXG4gXHRsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDIwOjUzOjA4LjgzMDg2MTMzMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMjk0OTA3NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoOiBQYWdlIFJlY2xhaW0gYW5kIEV4ZWN1dGFibGUgRmlsZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIG1vZGlmeWluZyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIFZNQSBmbGFncyBpbiByZWxhdGlvbiB0byBmb2xpbyByZWZlcmVuY2luZyBhbmQgcmVsYXRlZCBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgaXQncyByZXBsYWNpbmcgYHZtX2ZsYWdzX3RgIHdpdGggYHZtYV9mbGFnc190YCwgd2hpY2gsIGhvbGQgb24sIHNlZW1zIHRvIGJlIGEgZGlmZmVyZW50IHR5cGUsIG1heWJlIGEgc3RydWN0PyBBaGEsIEkgc2VlIGluIGBpbmNsdWRlL2xpbnV4L21tX2lubGluZS5oYCwgYHZtYV9mbGFnc190YCBpcyB1c2VkIHdpdGhpbiBgZm9saW9faXNfZXhlY19maWxlYC4gVGhhdCBjbGVhcnMgaXQgdXAuIFNvLCB0aGUgcGF0Y2ggaXMgY2hhbmdpbmcgYHZtX2ZsYWdzX3QgKnZtX2ZsYWdzYCB0byBgdm1hX2ZsYWdzX3QgKnZtYV9mbGFnc2AgaW4gYGZvbGlvX3JlZmVyZW5jZWRgLlxuXG5UaGUga2V5IGhlcmUgaXMgdGhhdCBgbHJ1X2dlbl9zZXRfcmVmc2AgaXMgYmVpbmcgdXBkYXRlZCB0byB0YWtlIGB2bWFfZmxhZ3NgLCB3aGljaCB3YXNuJ3QgdGhlIGNhc2UgcHJldmlvdXNseS4gTm93LCB0aGlzIGZ1bmN0aW9uIHdpbGwgYWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgKmFmdGVyKiB0aGVpciBmaXJzdCB1c2FnZS4gVGhhdCdzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gaG93IHBhZ2UgcmVjbGFpbSwgc3BlY2lmaWNhbGx5IGJvdGggTUdMUlUgYW5kIHRoZSBzdGFuZGFyZCBMUlUsIG9wZXJhdGVzLiBUaGlzIGlzIGludGVyZXN0aW5nLiBJdCdzIG1vZGlmeWluZyBjb3JlIE1NIGNvZGUg4oCTIHRoaW5ncyBsaWtlIGBtbS92bXNjYW4uY2AgYW5kIGBtbS9ybWFwLmNgIOKAkyBzbyB0aGlzIGNvdWxkIGhhdmUgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zLiBBbmQsIHllYWgsIHBhZ2UgcmVjbGFpbSBpcyBkZWZpbml0ZWx5IGEgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIHBhcnQgb2YgdGhlIHN5c3RlbS5cblxuVGhpcyBoYXMgbWUgdGhpbmtpbmcuIEdpdmVuIHRoaXMgY2hhbmdlIHRvIGNvcmUgTU0gbG9naWMsIGZ1enppbmcgaXMgKmFic29sdXRlbHkqIGluIG9yZGVyLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIG1vc3QgY3JpdGljYWwgZm9yIGZvY3VzZWQgZnV6emluZy5cblxuTGV0J3Mgc2VlLCBpdCBsb29rcyBsaWtlIHRoZXNlIGFyZSB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zOiBgZm9saW9fcmVmZXJlbmNlZGAsIGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCwgYHNocmlua19hY3RpdmVfbGlzdGAsIGBmb2xpb191cGRhdGVfZ2VuYCwgYHdhbGtfdXBkYXRlX2ZvbGlvYCwgYHdhbGtfcHRlX3JhbmdlYCwgYHdhbGtfcG1kX3JhbmdlX2xvY2tlZGAsIGFuZCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAuXG5cbk5vdywgd2FpdCBhIG1pbnV0ZSwgYGZvbGlvX3JlZmVyZW5jZWRgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYW5kIGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCBhcmUgKnZlcnkqIGhvdC1wYXRoIGZ1bmN0aW9ucyBpbiBtZW1vcnkgcmVjbGFpbS4gQW5kIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBpcyByZWxhdGVkIHRvIE1HTFJVLiBUaGUgZ29hbCBoZXJlIGlzIHRvIGlkZW50aWZ5IHRhcmdldHMgdGhhdCBhcmUgTk9UIHRoZSBob3QgcGF0aC4gTGV0IG1lIHRoaW5rIGFib3V0IHRoaXMuLi4gc3BlY2lmaWMgc3lzY2FsbHMgb3Igb3BlcmF0aW9ucyB0aGF0IG1pZ2h0IHRyaWdnZXIgdGhpcyBsb2dpYz8gTWVtb3J5IHByZXNzdXJlLCBwYWdlIHJlY2xhaW0sIHN3YXAsIGBtYWR2aXNlYC4uLlxuXG5Pa2F5LCB0aGUgcHJvbXB0IGlzIHRlbGxpbmcgbWUgdG8gZmluZCBzb21ldGhpbmcgYmV5b25kIHRoZSBvYnZpb3VzLiBJdCBzYXlzLCBcIkF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlwiIFJpZ2h0LCB0aGUgZ29hbCBpcyB0byBwaW5wb2ludCBzb21ldGhpbmcgbW9yZSBzcGVjaWZpYy4gYHNocmlua19hY3RpdmVfbGlzdGAsIGBmb2xpb19yZWZlcmVuY2VkYCwgYGZvbGlvX2NoZWNrX3JlZmVyZW5jZXNgIGFyZSBkZWZpbml0ZWx5IGhvdC4gV2hhdCBhYm91dCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGA/IE1heWJlIHRoYXQncyBhbiBvcHRpb24/XG5cbkhtbSwgaXQncyBhIGNvcmUgTU0gY2hhbmdlLiBJc29sYXRpbmcgYSBzaW5nbGUgbm9uLWhvdC1wYXRoIGZ1bmN0aW9uIGlzIGNoYWxsZW5naW5nIGhlcmUuIE1heWJlIHRoYXQgaW5saW5lIGZ1bmN0aW9uLCBgZm9saW9faXNfZXhlY19maWxlYD8gTGV0J3MgY2hlY2sgYG1tL3Ztc2Nhbi5jYCBmb3IgY2FsbHMgdG8gYGZvbGlvX2NoZWNrX3JlZmVyZW5jZXNgLiBJJ2xsIHVzZSBgZ3JlcHBlcmAgdG8gZmluZCBjYWxscyB0byBgZm9saW9fY2hlY2tfcmVmZXJlbmNlc2Agbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTk4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMjA6NTM6MjAuMTI1NzcxMTMxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMjY0MDQ4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb2xpb19jaGVja19yZWZlcmVuY2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTg1OD1zdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXFxuLS1cXG5tbS92bXNjYW4uYy04NjMtXFxubW0vdm1zY2FuLmM6ODY0OnN0YXRpYyBlbnVtIGZvbGlvX3JlZmVyZW5jZXMgZm9saW9fY2hlY2tfcmVmZXJlbmNlcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL3Ztc2Nhbi5jLTg2NS1cXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmM9MTA1NT1zdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy0xMjI4LVxcdFxcdGlmICghaWdub3JlX3JlZmVyZW5jZXMpXFxubW0vdm1zY2FuLmM6MTIyOTpcXHRcXHRcXHRyZWZlcmVuY2VzID0gZm9saW9fY2hlY2tfcmVmZXJlbmNlcyhmb2xpbywgc2MpO1xcbm1tL3Ztc2Nhbi5jLTEyMzAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDIwOjUzOjIwLjUyODQxODEwNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MDkwOTk0MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNR0xSVSBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGlzIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBzdHVmZiBpcyB3aXJlZCB1cC4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCBpcyBjYWxsZWQgZnJvbSBgc2hyaW5rX2ZvbGlvX2xpc3RgLCB3aGljaCBpcyBhIGtleSBwYXJ0IG9mIHRoZSBzaHJpbmtpbmcgcHJvY2Vzcy4gQW5kIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IGBzaHJpbmtfYWN0aXZlX2xpc3RgIGlzIGFsc28gYmVpbmcgbW9kaWZpZWQgaGVyZS4gVGhlbiwgSSBzZWUgYHdhbGtfdXBkYXRlX2ZvbGlvYCBiZWluZyBjYWxsZWQgZnJvbSBtdWx0aXBsZSBwbGFjZXM6IGB3YWxrX3B0ZV9yYW5nZWAsIGB3YWxrX3BtZF9yYW5nZV9sb2NrZWRgLCBhbmQgYGxydV9nZW5fbG9va19hcm91bmRgLiBUaGF0IGNvbm5lY3RzIHRob3NlIGZ1bmN0aW9ucyB0byBib3RoIE1HTFJVIGFuZCB0aGUgc3RhbmRhcmQgTFJVLiBUaGlzIGFsbCBzZWVtcyB0byBiZSBwYXJ0IG9mIHRoZSBjb3JlIE1HTFJVIGltcGxlbWVudGF0aW9uIG9yIGF0IGxlYXN0IGludGVyYWN0cyBoZWF2aWx5IHdpdGggaXQuXG5cbk5vdywgYSBjcml0aWNhbCBxdWVzdGlvbiBmb3Igb3B0aW1pemF0aW9uIGFuZCB0dW5pbmcgdGhpcyBpczogSXMgTUdMUlUgZW5hYmxlZCBieSBkZWZhdWx0PyBJIG5lZWQgdG8ga25vdyBpZiB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IEknbSBkZWFsaW5nIHdpdGggb3V0LW9mLXRoZS1ib3ggb3IgaWYgSSBoYXZlIHRvIGV4cGxpY2l0bHkgY29uZmlndXJlIGl0LiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHNlY3Rpb24sIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBkZWZhdWx0IHNldHRpbmcgZm9yIE1HTFJVLiBUaGF0IHdpbGwgdGVsbCBtZSB3aGVyZSB0byBnbyBuZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTYyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDIwOjUzOjI0LjkzNzUxOTIwOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDIyNDczOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTFJVX0dFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTQwNT1lbmRpZiAjIFVTRVJGQVVMVEZEXFxuLS1cXG5tbS9LY29uZmlnLTE0MDctIyBtdWx0aS1nZW4gTFJVIHtcXG5tbS9LY29uZmlnOjE0MDg6Y29uZmlnIExSVV9HRU5cXG5tbS9LY29uZmlnLTE0MDktXFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQxNi1cXG5tbS9LY29uZmlnOjE0MTc6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbm1tL0tjb25maWctMTQxOC1cXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQyMi1cXG5tbS9LY29uZmlnOjE0MjM6Y29uZmlnIExSVV9HRU5fU1RBVFNcXG5tbS9LY29uZmlnLTE0MjQtXFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDMxLVxcbm1tL0tjb25maWc6MTQzMjpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG5tbS9LY29uZmlnLTE0MzMtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQyMDo1MzoyNC45OTc3NTA1NzdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzkxNjg2OTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTFJVIEdlbmVyYXRpb24gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCBhcmUgdGhlIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBwYXkgYXR0ZW50aW9uIHRvLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBtb2RpZmllZCBjb2RlIGRlcGVuZHMgb24gYExSVV9HRU5gIHNwZWNpZmljYWxseS4gTGV0J3MgdHJhY2UgaXQgb3V0LiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYGxydV9nZW5fc2V0X3JlZnNgLCBgZm9saW9fdXBkYXRlX2dlbmAsIGB3YWxrX3VwZGF0ZV9mb2xpb2AsIGB3YWxrX3B0ZV9yYW5nZWAsIGB3YWxrX3BtZF9yYW5nZV9sb2NrZWRgLCBhbmQgYGxydV9nZW5fbG9va19hcm91bmRgLiBHaXZlbiB0aG9zZSBmdW5jdGlvbiBuYW1lcywgdGhleSdyZSBhbG1vc3QgY2VydGFpbmx5IGd1YXJkZWQgYnkgYW4gYCNpZmRlZiBDT05GSUdfTFJVX0dFTmAgc29tZXdoZXJlLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byB2ZXJpZnkgdGhhdCBhc3N1bXB0aW9uLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gYG1tL3Ztc2Nhbi5jYCBhbmQgc3BlY2lmaWNhbGx5IGV4YW1pbmUgdGhlIGNvZGUgYXJvdW5kIHRoZSBgbHJ1X2dlbl9zZXRfcmVmc2AgZnVuY3Rpb24gY2FsbCB0byBjb25maXJtIGFuZCB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU5MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQyMDo1MzoyOC43ODk0Mzk1OTZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA1ODI5NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHJ1X2dlbl9zZXRfcmVmc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz04MjU9ZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgzNy0gKi9cXG5tbS92bXNjYW4uYzo4Mzg6c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbm1tL3Ztc2Nhbi5jLTgzOS17XFxuLS1cXG5tbS92bXNjYW4uYy04NTctI2Vsc2VcXG5tbS92bXNjYW4uYzo4NTg6c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbm1tL3Ztc2Nhbi5jLTg1OS17XFxuLS1cXG5tbS92bXNjYW4uYz04NjQ9c3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS92bXNjYW4uYy04OTItXFxubW0vdm1zY2FuLmM6ODkzOlxcdFxcdHJldHVybiBscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcXHUwMDI2dm1hX2ZsYWdzKSA/IEZPTElPUkVGX0FDVElWQVRFIDogRk9MSU9SRUZfS0VFUDtcXG5tbS92bXNjYW4uYy04OTQtXFx0fVxcbi0tXFxubW0vdm1zY2FuLmM9MzQ0MD1zdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM0NTYtXFx0XFx0XFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xcbm1tL3Ztc2Nhbi5jOjM0NTc6XFx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcXHUwMDI2dm1hLVxcdTAwM2VmbGFncykpIHtcXG5tbS92bXNjYW4uYy0zNDU4LVxcdFxcdG9sZF9nZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMjA6NTM6MjguODUwMDI5NzUzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjQ0NTc1Nzg1MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGBscnVfZ2VuX3NldF9yZWZzYCoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGluLiBUaGUgaW1tZWRpYXRlIGdvYWwgaXMgY2xlYXI6IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZW52aXJvbm1lbnQgdGhhdCBpbXBhY3RzIHRoZSBgbHJ1X2dlbl9zZXRfcmVmc2AgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgd2hhdCBgI2lmZGVmYCBvciBgI2lmYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBjb250cm9sIHdoZXRoZXIgb3Igbm90IHRoaXMgZnVuY3Rpb24gaXMgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLiBLbm93aW5nIHRoaXMgd2lsbCBiZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBhdmFpbGFiaWxpdHkgaW4gZGlmZmVyZW50IGJ1aWxkIGNvbmZpZ3VyYXRpb25zLCBhbmQgZm9yIGRlYnVnZ2luZyBpZiBJIGVuY291bnRlciB1bmV4cGVjdGVkIGJlaGF2aW9yIG9yIGl0cyBhYnNlbmNlIGluIGNlcnRhaW4gc2NlbmFyaW9zLiBVbmRlcnN0YW5kaW5nIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBjb250ZXh0IGlzIHBhcmFtb3VudCB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGRlc2lnbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM2NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDIwOjUzOjUzLjMwNzYxMDQ2OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg0NDY2NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmZGVmIENPTkZJR19MUlVfR0VOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTgyNT1lbnVtIGZvbGlvX3JlZmVyZW5jZXMge1xcbi0tXFxubW0vdm1zY2FuLmMtODMwLVxcbm1tL3Ztc2Nhbi5jOjgzMTojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS92bXNjYW4uYy04MzItLypcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI2MTA9c3RhdGljIGJvb2wgY2FuX2FnZV9hbm9uX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI2MjEtXFxubW0vdm1zY2FuLmM6MjYyMjojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS92bXNjYW4uYy0yNjIzLVxcbm1tL3Ztc2Nhbi5jPTI2MjQ9REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobHJ1X3N3aXRjaCk7XFxubW0vdm1zY2FuLmM6MjYyNTojaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxcbm1tL3Ztc2Nhbi5jLTI2MjYtREVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XFxuLS1cXG5tbS92bXNjYW4uYz0yODA2PXN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxcbi0tXFxubW0vdm1zY2FuLmMtMjgyNS1cXG5tbS92bXNjYW4uYzoyODI2OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcXG5tbS92bXNjYW4uYy0yODI3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQyMDo1Mzo1My4zNjYwNjc1NDZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc1NTY1MzQyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyB0aGUgUGF0Y2gncyBTY29wZSoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgYENPTkZJR19MUlVfR0VOYCBqdW1wcyBvdXQgYXQgbWUgYXMgYSBrZXkgcG9pbnQuIEl0IHNlZW1zIHByZXR0eSBjZW50cmFsIHRvIHdoYXQncyBiZWluZyBhbHRlcmVkLiBCdXQgdGhlbiwgaXQncyBhbHNvIHRvdWNoaW5nIGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCBhbmQgYHNocmlua19hY3RpdmVfbGlzdGAuIEhhbmcgb24uLi4gdGhvc2UgYXJlbid0IHBhcnQgb2YgYENPTkZJR19MUlVfR0VOYCwgdGhvc2UgYXJlIHN0YW5kYXJkIExSVSBmdW5jdGlvbnMuIFRoYXQgZmVlbHMuLi4gdW5leHBlY3RlZC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4gSSdtIGdvaW5nIHRvIGRvdWJsZSBjaGVjayB0aGUgY29kZSByaWdodCBub3cuIEFyZSB0aG9zZSBmdW5jdGlvbnMgcmVhbGx5IG91dHNpZGUgdGhlIHNjb3BlIG9mIGBDT05GSUdfTFJVX0dFTmA/IEkgbmVlZCB0byB2ZXJpZnkgd2hhdCB0aGUgcGF0Y2ggaXMgKnJlYWxseSogZG9pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MDksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQyMDo1Mzo1Ny4xMjE3MjMyODZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNTAxNTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX2NoZWNrX3JlZmVyZW5jZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9ODU4PXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTg2My1cXG5tbS92bXNjYW4uYzo4NjQ6c3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vdm1zY2FuLmMtODY1LVxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYz0xMDU1PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTEyMjgtXFx0XFx0aWYgKCFpZ25vcmVfcmVmZXJlbmNlcylcXG5tbS92bXNjYW4uYzoxMjI5OlxcdFxcdFxcdHJlZmVyZW5jZXMgPSBmb2xpb19jaGVja19yZWZlcmVuY2VzKGZvbGlvLCBzYyk7XFxubW0vdm1zY2FuLmMtMTIzMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMjA6NTM6NTcuMTgyMjMxNTc0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NDAyNTI2NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGb2N1cyBmb3IgVGhpcyBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBMUlUgZnVuY3Rpb25hbGl0eSwgYm90aCB0aGUgc3RhbmRhcmQgaW1wbGVtZW50YXRpb24gYW5kIE1HTFJVLiBUaGUga2V5IG1vZGlmaWNhdGlvbiBzZWVtcyB0byBiZSBpbiBgZm9saW9fcmVmZXJlbmNlZGAgd2l0aGluIGBtbS9ybWFwLmNgLCBhIGZ1bmN0aW9uIHVzZWQgYnkgYm90aCBMUlUgaW1wbGVtZW50YXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgc3BlY2lmaWMgZnVuY3Rpb25zIGZvciB0YXJnZXRlZCBmdXp6aW5nLCBidXQgdGhlIHByb21wdCBhZHZpc2VzIGF2b2lkaW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLlxuXG5Ob3csIHdoaWNoIG9uZXMgYXJlIHdvcnRoIHNwZWNpZmljIGF0dGVudGlvbj8gYGZvbGlvX2NoZWNrX3JlZmVyZW5jZXNgIGlzIHRoZSBzdGFuZGFyZCBMUlUgZnVuY3Rpb24sIGJ1dCBpdCdzICphbHNvKiBhIGhvdC1wYXRoIGZ1bmN0aW9uLiAgSSBuZWVkIHRvIGJlIGNhcmVmdWwgbm90IHRvIGNyZWF0ZSBhIHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbi4gVGhlIG90aGVyIGZ1bmN0aW9ucyB0aGF0IGFyZSBtb2RpZmllZCBhcmUgYWxzbyBhbGwgaG90LXBhdGggZnVuY3Rpb25zLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYGZvbGlvX3VwZGF0ZV9nZW5gLCBgd2Fsa191cGRhdGVfZm9saW9gLCBgd2Fsa19wdGVfcmFuZ2VgLCBgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkYCwgYW5kIGBscnVfZ2VuX2xvb2tfYXJvdW5kYC5cblxuQ29uc2lkZXJpbmcgdGhlIGFkdmljZSwgSSBuZWVkIHRvIGNob29zZSBjYXJlZnVsbHkuIGBmb2xpb19yZWZlcmVuY2VkYCBpcyBjYWxsZWQgZHVyaW5nIHBhZ2UgcmVjbGFpbS4gSXQncyBkZWZpbml0ZWx5IGFjdGl2ZSBidXQgcGVyaGFwcyBub3QgKmFzKiBpbnRlbnNlbHkgaG90IGFzIHNvbWV0aGluZyBsaWtlIGBwYWdlX2FkZF9ybWFwYC4gU3RpbGwsIGhvdCBlbm91Z2ggdG8gYmUgY29uc2lkZXJlZCBhIGhvdCBwYXRoLiBBbmQgYGZvbGlvX2lzX2V4ZWNfZmlsZWAgaXMgaW5saW5lLCBzbyBmdXp6aW5nIGl0IGRpcmVjdGx5IHdvbid0IGJlIHBvc3NpYmxlLlxuXG5UaGF0IGxlYXZlcyBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAuIFRoaXMgb25lIGlzIGNhbGxlZCBkdXJpbmcgYSBwYWdlIGZhdWx0LCBzcGVjaWZpY2FsbHkgd2l0aGluIGBkb19zZXRfcHRlYCBvciBzaW1pbGFyLiBTaW5jZSBpdCBoYXMgc3BlY2lmaWMgY29udGV4dCwgaXQncyBhIGdvb2QgY2FuZGlkYXRlIHRvIGNvbnNpZGVyLCBidXQgZmlyc3QsIEknbGwgY2hlY2sgaXRzIGNhbGwgc2l0ZXMgdG8gYmUgc3VyZSBpdCdzIHRoZSByaWdodCBjaG9pY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzkwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDIwOjU0OjAzLjYyMjQ4NzE5N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzMjEyMDkyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVfZ2VuX2xvb2tfYXJvdW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3Q9MTg3PWNhbiBpbmN1ciB0aGUgaGlnaGVzdCBDUFUgY29zdCBpbiB0aGUgcmVjbGFpbSBwYXRoLlxcbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdC0xODgtXFxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0OjE4OTpgYGxydV9nZW5fbG9va19hcm91bmQoKWBgIGV4cGxvaXRzIHNwYXRpYWwgbG9jYWxpdHkgdG8gcmVkdWNlIHRoZVxcbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdC0xOTAtdHJpcHMgaW50byB0aGUgcm1hcC4gSXQgc2NhbnMgdGhlIGFkamFjZW50IFBURXMgb2YgYSB5b3VuZyBQVEUgYW5kXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3Q9MTk5PWluIHRoZSBzZXQuXFxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0LTIwMC1cXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3Q6MjAxOkluIHRoZSBldmljdGlvbiBwYXRoLCBzcGVjaWZpY2FsbHksIGluIGBgbHJ1X2dlbl9sb29rX2Fyb3VuZCgpYGAsIGlmIGFcXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3QtMjAyLVBNRCBoYXMgYSBzdWZmaWNpZW50IG51bWJlciBvZiBob3QgcGFnZXMsIGl0cyBhZGRyZXNzIGlzIHBsYWNlZCBpbiB0aGVcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9Njg5PXZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NjkwOmJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucik7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC02OTEtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTcwOD1zdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTcxMS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjcxMjpzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03MTMtXFx0XFx0dW5zaWduZWQgaW50IG5yKVxcbi0tXFxubW0vcm1hcC5jPTkxNz1zdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcm1hcC5jLTk4MS1cXHRcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkgXFx1MDAyNlxcdTAwMjYgcHZtdy5wdGUpIHtcXG5tbS9ybWFwLmM6OTgyOlxcdFxcdFxcdGlmIChscnVfZ2VuX2xvb2tfYXJvdW5kKFxcdTAwMjZwdm13LCBucikpXFxubW0vcm1hcC5jLTk4My1cXHRcXHRcXHRcXHRyZWZlcmVuY2VkKys7XFxuLS1cXG5tbS92bXNjYW4uYz0yNzE0PXN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHNlcV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5tbS92bXNjYW4uYy0yNzQzLSAqIHdhbGtfcG1kX3JhbmdlKCk7IHRoZSBldmljdGlvbiBhbHNvIHJlcG9ydCB0aGVtIHdoZW4gd2Fsa2luZyB0aGUgcm1hcFxcbm1tL3Ztc2Nhbi5jOjI3NDQ6ICogaW4gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLlxcbm1tL3Ztc2Nhbi5jLTI3NDUtICpcXG4tLVxcbm1tL3Ztc2Nhbi5jPTM5OTY9c3RhdGljIGJvb2wgdHJ5X3RvX2luY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXFxuLS1cXG5tbS92bXNjYW4uYy00MDE1LVxcdCAqIElmIHRoZSBoYXJkd2FyZSBkb2Vzbid0IGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBhY2Nlc3NlZCBiaXQsIGZhbGxiYWNrXFxubW0vdm1zY2FuLmM6NDAxNjpcXHQgKiB0byBscnVfZ2VuX2xvb2tfYXJvdW5kKCksIHdoaWNoIG9ubHkgY2xlYXJzIHRoZSBhY2Nlc3NlZCBiaXQgaW4gYVxcbm1tL3Ztc2Nhbi5jLTQwMTctXFx0ICogaGFuZGZ1bCBvZiBQVEVzLiBTcHJlYWRpbmcgdGhlIHdvcmsgb3V0IG92ZXIgYSBwZXJpb2Qgb2YgdGltZSB1c3VhbGx5XFxuLS1cXG5tbS92bXNjYW4uYz00MTM1PXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00MTgxLSAqL1xcbm1tL3Ztc2Nhbi5jOjQxODI6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbm1tL3Ztc2Nhbi5jLTQxODMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQyMDo1NDowNS42NTQ2MTQyMDZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMwNjI0NjQ0OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBmb3IgTWVtb3J5IE1hbmFnZW1lbnQgQ2hhbmdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQgdG91Y2hlcyBjb3JlIE1NIGNvZGUsIHNwZWNpZmljYWxseSByZWNsYWltIGFuZCB0aGUgTFJVLiBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgaXMgY2FsbGVkIGZyb20gYGZvbGlvX3JlZmVyZW5jZWRfb25lYCwgd2hpY2ggdGVsbHMgbWUgdGhpcyBpcyBkZWZpbml0ZWx5IGluIHRoZSByZWNsYWltIHBhdGguIEdpdmVuIHRoZSBzY29wZSwgdGhpcyBpcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy5cblxuTXkgZmlyc3QgaW1wdWxzZSBpcyB0byBsaXN0IHRoZSBtb2RpZmllZCBmdW5jdGlvbnM6IGBmb2xpb19yZWZlcmVuY2VkYCwgYGZvbGlvX2NoZWNrX3JlZmVyZW5jZXNgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYGxydV9nZW5fbG9va19hcm91bmRgLCBgd2Fsa19wdGVfcmFuZ2VgLCBhbmQgYHdhbGtfcG1kX3JhbmdlX2xvY2tlZGAuIExldCdzIHNlZSBhYm91dCBzcGVjaWZpYyBjb25maWdzLlxuXG5BaCwgYExSVV9HRU5gIGlzIHRoZSBrZXkgY29uZmlnIGZvciBNdWx0aS1HZW4gTFJVLiBJdCBzZWVtcyBpdCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gc29tZSBjb25maWdzLCBidXQgSSBzaG91bGQgZGVmaW5pdGVseSBzcGVjaWZ5IGl0LiBIb3dldmVyLCBzaW5jZSB0aGUgcGF0Y2ggKmFsc28qIG1vZGlmaWVzIHN0YW5kYXJkIExSVSwgaXQgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LiBCdXQsIHRvIGVuc3VyZSBjb21wcmVoZW5zaXZlIE1HTFJVIHRlc3RpbmcsIEknbGwgYWRkIGl0LlxuXG5Ob3csIHdhaXQgYSBtaW51dGUsIGBmb2xpb19pc19leGVjX2ZpbGVgIGlzIHRoZSBpbnRlcmVzdGluZyBwYXJ0LiBJdCdzIHVzZWQgdG8gYWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuIFRoYXQncyBhICpmdW5jdGlvbmFsKiBjaGFuZ2UgaW4gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGVzZSB0eXBlcyBvZiBtYXBwaW5ncy5cblxuTGV0J3MgdHJhY2UgYGZvbGlvX2lzX2V4ZWNfZmlsZWAuIEl0J3MgdXNlZCBpbiBgbHJ1X2dlbl9zZXRfcmVmc2AsIGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCwgYHNocmlua19hY3RpdmVfbGlzdGAsIGFuZCBgZm9saW9fdXBkYXRlX2dlbmAuIFRoaXMgY29uZmlybXMgaXQncyBhIHNpZ25pZmljYW50IGNoYW5nZSB0byBtZW1vcnkgbWFuYWdlbWVudCBiZWhhdmlvci5cblxuVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgc2V0IHRvIGB0cnVlYC5cblxuUmVnYXJkaW5nIGBGb2N1c1N5bWJvbHNgLCBJIGluaXRpYWxseSB0aG91Z2h0IHRvIGluY2x1ZGUgdGhvc2UgbW9kaWZpZWQgZnVuY3Rpb25zLiBIb3dldmVyLCB0aGUgcHJvbXB0IHNheXMgdG8gYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMuIGBmb2xpb19yZWZlcmVuY2VkYCwgYHNocmlua19hY3RpdmVfbGlzdGAsIGFuZCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgYXJlIGFsbCAqdmVyeSogaG90IGR1cmluZyByZWNsYWltLCBlc3NlbnRpYWxseSBtYWtpbmcgdGhlbSBob3QtcGF0aC4gSWYgSSBpbmNsdWRlIHRoZW0sIEknbSBqdXN0IHRlbGxpbmcgdGhlIGZ1enplciB0byBmb2N1cyBvbiB3aGF0IGl0IGlzIGFscmVhZHkgZG9pbmcuIFNob3VsZCBJIGV4Y2x1ZGUgdGhlbSBhbmQgbGlzdCBzb21ldGhpbmcgZWxzZT8gTm8sIGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCBhbmQgYGxydV9nZW5fbG9va19hcm91bmRgIGFyZSBhbHNvIGhvdC1wYXRoIGZ1bmN0aW9ucy5cblxuXCJFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLiBTaG91bGQgYXZvaWQgaG90LXBhdGggZnVuY3Rpb25zLlwiIEJlY2F1c2UgdGhlc2UgZnVuY3Rpb25zIGFyZSBrZXkgTU0gcmVjbGFpbSBwYXRocywgYW5kIGJ5IHRoZWlyIG5hdHVyZSwgaG90IHdoZW4gbWVtb3J5IGlzIHVuZGVyIHByZXNzdXJlLCBJIHdpbGwgbGVhdmUgYEZvY3VzU3ltYm9sc2AgZW1wdHkuXG5cbkFjdHVhbGx5LCBgZm9saW9fcmVmZXJlbmNlZGAgaXMgY2FsbGVkIGJ5IGBzaHJpbmtfZm9saW9fbGlzdGAsIHdoaWNoIGlzIGNhbGxlZCBieSBgc2hyaW5rX2xydXZlY2AsIHdoaWNoIGNvbmZpcm1zIG15IGluaXRpYWwgYXNzZXNzbWVudC5cblxuQXMgZm9yIGBFbmFibGVDb25maWdzYCwgYExSVV9HRU5gIGlzIHRoZSBvbmx5IHNwZWNpZmljIGNvbmZpZyBJIG5lZWQuIEknbGwgZG91YmxlLWNoZWNrIHRoaXMgbGF0ZXIgdG8gYmUgc3VyZS4gVGhlIGNvZGUgY2hhbmdlcyBhcmUgaW4gYG1tL3JtYXAuY2AgYW5kIGBtbS92bXNjYW4uY2AsIGFuZCBgTFJVX0dFTmAgaXMgdGhlIG9ubHkgcmVsYXRlZCBjb25maWcuXG5cbk9rYXksIGJhY2sgdG8gYGZvbGlvX2lzX2V4ZWNfZmlsZWAuIEkgc2VlIHRoYXQgaXQgY2hlY2tzIGBWTUFfRVhFQ19CSVRgLiBUaGlzIGlzIHN0YW5kYXJkIGZ1bmN0aW9uYWxpdHkgcmVsYXRpbmcgdG8gZXhlY3V0YWJsZSBtYXBwaW5ncyB2aWEgYG1tYXBgIHdpdGggYFBST1RfRVhFQ2AuIFRoYXQgaXMgc29tZXRoaW5nIGZvciBzdXJlLlxuXG5TbywgbGV0J3MgcmV2aWV3OiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhY3RpdmF0ZXMgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgKmFmdGVyKiBmaXJzdCB1c2FnZSwgYW5kIGl0J3MgYSBzaWduaWZpY2FudCBjaGFuZ2UgdG8gcGFnZSByZWNsYWltIGhldXJpc3RpY3MuIERlZmluaXRlbHkgd29ydGggZnV6emluZyFcblxuTXkgZmluYWwgc2V0dGluZ3Mgd2lsbCBiZTpcblxuKiAgIGBXb3J0aEZ1enppbmcgPSB0cnVlYFxuKiAgIGBFbmFibGVDb25maWdzID0gW1wiTFJVX0dFTlwiXWBcbiogICBgRm9jdXNTeW1ib2xzID0gW11gXG4qICAgYFJlYXNvbmluZyA9IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBhZ2UgcmVjbGFpbSBoZXVyaXN0aWNzIHRvIGFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiBJdCBhZmZlY3RzIGJvdGggc3RhbmRhcmQgTFJVIGFuZCBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGF0aHMuIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcmVjbGFpbSBwYXRocyAoZS5nLiwgZm9saW9fcmVmZXJlbmNlZCwgc2hyaW5rX2FjdGl2ZV9saXN0KSwgd2hpY2ggYXJlIGhvdC1wYXRoIGZ1bmN0aW9ucywgc28gbm8gc3BlY2lmaWMgZm9jdXMgc3ltYm9scyBhcmUgcHJvdmlkZWQuXCJgXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDg2LCJPdXRwdXRUb2tlbnMiOjExMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQyMDo1NDoxOC43MTcwODM3NjZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDg2OTY0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWdlIHJlY2xhaW0gaGV1cmlzdGljcyB0byBhY3RpdmF0ZSBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciBmaXJzdCB1c2FnZS4gSXQgYWZmZWN0cyBib3RoIHN0YW5kYXJkIExSVSBhbmQgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhdGhzLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHJlY2xhaW0gcGF0aHMgKGUuZy4sIGZvbGlvX3JlZmVyZW5jZWQsIHNocmlua19hY3RpdmVfbGlzdCksIHdoaWNoIGFyZSBob3QtcGF0aCBmdW5jdGlvbnMsIHNvIG5vIHNwZWNpZmljIGZvY3VzIHN5bWJvbHMgYXJlIHByb3ZpZGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFnZSByZWNsYWltIGhldXJpc3RpY3MgdG8gYWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuIEl0IGFmZmVjdHMgYm90aCBzdGFuZGFyZCBMUlUgYW5kIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYXRocy4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCByZWNsYWltIHBhdGhzIChlLmcuLCBmb2xpb19yZWZlcmVuY2VkLCBzaHJpbmtfYWN0aXZlX2xpc3QpLCB3aGljaCBhcmUgaG90LXBhdGggZnVuY3Rpb25zLCBzbyBubyBzcGVjaWZpYyBmb2N1cyBzeW1ib2xzIGFyZSBwcm92aWRlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowv2lbt[1] Phase: Succeeded StartedAt: 2026-07-16 20:54:27 +0000 UTC FinishedAt: 2026-07-16 20:54:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2lbt[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-16 20:54:27 +0000 UTC FinishedAt: 2026-07-16 20:54:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2lbt[2] Phase: Succeeded StartedAt: 2026-07-16 20:54:27 +0000 UTC FinishedAt: 2026-07-17 01:02:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2lbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"5f10cbe5-7356-4af9-93ae-66c70da4d7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-16 20:54:27 +0000 UTC FinishedAt: 2026-07-17 01:02:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"5f10cbe5-7356-4af9-93ae-66c70da4d7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowv2lbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"5f10cbe5-7356-4af9-93ae-66c70da4d7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-16 20:54:27 +0000 UTC FinishedAt: 2026-07-16 20:54:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2lbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"5f10cbe5-7356-4af9-93ae-66c70da4d7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-16 20:54:27 +0000 UTC FinishedAt: 2026-07-16 20:54:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowv2lbt/series-workflowv2lbt-convert-artifact-932182699/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv2lbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"5f10cbe5-7356-4af9-93ae-66c70da4d7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-16 20:54:38 +0000 UTC FinishedAt: 2026-07-16 21:19:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2lbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"5f10cbe5-7356-4af9-93ae-66c70da4d7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-16 20:54:38 +0000 UTC FinishedAt: 2026-07-16 21:19:59 +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:*70ff2f0e-ea46-404d-a22d-9a759b7634b9,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-workflowv2lbt/series-workflowv2lbt-convert-artifact-932182699/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": "01f3e58a-73b4-48b1-9e00-d77ed2281da6", "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-workflowv2lbt/series-workflowv2lbt-build-action-2011401129/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv2lbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"5f10cbe5-7356-4af9-93ae-66c70da4d7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-16 20:54:38 +0000 UTC FinishedAt: 2026-07-16 21:19:49 +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:*70ff2f0e-ea46-404d-a22d-9a759b7634b9,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-workflowv2lbt/series-workflowv2lbt-convert-artifact-932182699/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": "01f3e58a-73b4-48b1-9e00-d77ed2281da6", "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-workflowv2lbt/series-workflowv2lbt-build-action-2011401129/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv2lbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"5f10cbe5-7356-4af9-93ae-66c70da4d7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-16 21:19:59 +0000 UTC FinishedAt: 2026-07-16 21:19:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2lbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"5f10cbe5-7356-4af9-93ae-66c70da4d7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-16 21:19:59 +0000 UTC FinishedAt: 2026-07-16 21:19:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2lbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"5f10cbe5-7356-4af9-93ae-66c70da4d7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-16 21:19:59 +0000 UTC FinishedAt: 2026-07-16 21:20:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2lbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"5f10cbe5-7356-4af9-93ae-66c70da4d7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-16 21:19:59 +0000 UTC FinishedAt: 2026-07-16 21:20:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"5f10cbe5-7356-4af9-93ae-66c70da4d7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowv2lbt/series-workflowv2lbt-convert-artifact-319028098/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv2lbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"5f10cbe5-7356-4af9-93ae-66c70da4d7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-16 21:20:09 +0000 UTC FinishedAt: 2026-07-16 21:22:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2lbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"5f10cbe5-7356-4af9-93ae-66c70da4d7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-16 21:20:09 +0000 UTC FinishedAt: 2026-07-16 21:21:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*01f3e58a-73b4-48b1-9e00-d77ed2281da6,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-workflowv2lbt/series-workflowv2lbt-build-action-2011401129/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-workflowv2lbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"5f10cbe5-7356-4af9-93ae-66c70da4d7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-16 21:22:09 +0000 UTC FinishedAt: 2026-07-16 21:22:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2lbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"5f10cbe5-7356-4af9-93ae-66c70da4d7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-16 21:22:09 +0000 UTC FinishedAt: 2026-07-16 21:22:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2lbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"5f10cbe5-7356-4af9-93ae-66c70da4d7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-16 21:22:09 +0000 UTC FinishedAt: 2026-07-16 21:58:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2lbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"5f10cbe5-7356-4af9-93ae-66c70da4d7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-16 21:22:09 +0000 UTC FinishedAt: 2026-07-16 21:58:57 +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:*70ff2f0e-ea46-404d-a22d-9a759b7634b9,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-workflowv2lbt/series-workflowv2lbt-convert-artifact-319028098/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": "9b383500-019f-4725-8c86-97e03962f627", "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-workflowv2lbt/series-workflowv2lbt-build-action-1480058326/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv2lbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"5f10cbe5-7356-4af9-93ae-66c70da4d7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-16 21:22:09 +0000 UTC FinishedAt: 2026-07-16 21:58:47 +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:*70ff2f0e-ea46-404d-a22d-9a759b7634b9,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-workflowv2lbt/series-workflowv2lbt-convert-artifact-319028098/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": "9b383500-019f-4725-8c86-97e03962f627", "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-workflowv2lbt/series-workflowv2lbt-build-action-1480058326/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv2lbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"5f10cbe5-7356-4af9-93ae-66c70da4d7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-16 21:58:57 +0000 UTC FinishedAt: 2026-07-16 21:58:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2lbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"5f10cbe5-7356-4af9-93ae-66c70da4d7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-16 21:58:57 +0000 UTC FinishedAt: 2026-07-16 21:58:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2lbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"5f10cbe5-7356-4af9-93ae-66c70da4d7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-16 21:58:57 +0000 UTC FinishedAt: 2026-07-16 22:01:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2lbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"5f10cbe5-7356-4af9-93ae-66c70da4d7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-16 21:58:57 +0000 UTC FinishedAt: 2026-07-16 22:01:05 +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:*9b383500-019f-4725-8c86-97e03962f627,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-workflowv2lbt/series-workflowv2lbt-build-action-1480058326/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-workflowv2lbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"5f10cbe5-7356-4af9-93ae-66c70da4d7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-16 22:01:14 +0000 UTC FinishedAt: 2026-07-17 01:02:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2lbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"5f10cbe5-7356-4af9-93ae-66c70da4d7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-16 22:01:14 +0000 UTC FinishedAt: 2026-07-17 01:02:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},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:*01f3e58a-73b4-48b1-9e00-d77ed2281da6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9b383500-019f-4725-8c86-97e03962f627,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-workflowv2lbt/series-workflowv2lbt-build-action-2011401129/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-workflowv2lbt/series-workflowv2lbt-build-action-1480058326/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowv2lbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"5f10cbe5-7356-4af9-93ae-66c70da4d7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-16 22:01:14 +0000 UTC FinishedAt: 2026-07-16 22:01:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2lbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"5f10cbe5-7356-4af9-93ae-66c70da4d7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-16 22:01:14 +0000 UTC FinishedAt: 2026-07-16 22:01:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},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-workflowv2lbt/series-workflowv2lbt-convert-artifact-1390816951/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv2lbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"5f10cbe5-7356-4af9-93ae-66c70da4d7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-16 22:01:14 +0000 UTC FinishedAt: 2026-07-16 22:01:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2lbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"5f10cbe5-7356-4af9-93ae-66c70da4d7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-16 22:01:14 +0000 UTC FinishedAt: 2026-07-16 22:01:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2lbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"5f10cbe5-7356-4af9-93ae-66c70da4d7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-16 22:01:14 +0000 UTC FinishedAt: 2026-07-16 22:01:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2lbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"5f10cbe5-7356-4af9-93ae-66c70da4d7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-16 22:01:24 +0000 UTC FinishedAt: 2026-07-17 01:02:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2lbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e54a39f3fa793aca013f54e42d32dba471c1a224","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"5f10cbe5-7356-4af9-93ae-66c70da4d7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-16 22:01:24 +0000 UTC FinishedAt: 2026-07-17 01:02:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*01f3e58a-73b4-48b1-9e00-d77ed2281da6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9b383500-019f-4725-8c86-97e03962f627,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-workflowv2lbt/series-workflowv2lbt-build-action-2011401129/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-workflowv2lbt/series-workflowv2lbt-build-action-1480058326/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-workflowv2lbt/series-workflowv2lbt-convert-artifact-1390816951/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,}