Name: series-workflowpn79r Phase: Succeeded StartedAt: 2026-07-22 14:37:57 +0000 UTC FinishedAt: 2026-07-22 19:48:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn79r[0] Phase: Succeeded StartedAt: 2026-07-22 14:37:57 +0000 UTC FinishedAt: 2026-07-22 14:56:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn79r[0].run-triage Phase: Succeeded StartedAt: 2026-07-22 14:37:57 +0000 UTC FinishedAt: 2026-07-22 14:56:13 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "248951ddc14de84de3910f9b13f51491a8cd91df", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "248951ddc14de84de3910f9b13f51491a8cd91df", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211" ], "series_id": "841f2ede-edcb-4915-b2b9-ee74b05a0de9" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ieee80211_sta_update_pending_airtime", "ieee80211_txq_airtime_check", "ieee80211_txq_aql_pending", "ieee80211_rate_expected_tx_airtime", "sta_estimate_expected_throughput" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE0OjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjExX3N0YV91cGRhdGVfcGVuZGluZ19haXJ0aW1lJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV90eHFfYWlydGltZV9jaGVjayYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfdHhxX2FxbF9wZW5kaW5nJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9yYXRlX2V4cGVjdGVkX3R4X2FpcnRpbWUmIzM0OywKICAgICYjMzQ7c3RhX2VzdGltYXRlX2V4cGVjdGVkX3Rocm91Z2hwdXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBBaXJ0aW1lIFF1ZXVlIExpbWl0IChBUUwpIHN1cHBvcnQgZm9yIG11bHRpY2FzdCB0cmFmZmljIGFuZCBtb2RpZmllcyB0aGUgZXhwZWN0ZWQgdGhyb3VnaHB1dCBjYWxjdWxhdGlvbiBmb3Igc3RhdGlvbnMgaW4gbWFjODAyMTEuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbG9naWMgZm9yIDgwMi4xMSBuZXR3b3JraW5nIGFuZCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBtYWM4MDIxMV9od3NpbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNDo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDc5ZDU4NTM5YmViNzQwYmM1N2I2MzJmMTc4NzQ1Y2M1Y2E4MmZjYTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyMiAxNDo1NDoyOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oIGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuaW5kZXggZjVhYmYxZGI3NTU4YmMuLjczNTRiYTA3OTM2M2E1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuQEAgLTM3MjIsNiAmIzQzOzM3MjIsNyBAQCBlbnVtIHdpcGh5X3BhcmFtc19mbGFncyB7XG4gLyogVGhlIHBlciBUWFEgZGV2aWNlIHF1ZXVlIGxpbWl0IGluIGFpcnRpbWUgKi9cbiAjZGVmaW5lIElFRUU4MDIxMV9ERUZBVUxUX0FRTF9UWFFfTElNSVRfTFx0NTAwMFxuICNkZWZpbmUgSUVFRTgwMjExX0RFRkFVTFRfQVFMX1RYUV9MSU1JVF9IXHQxMjAwMFxuJiM0MzsjZGVmaW5lIElFRUU4MDIxMV9ERUZBVUxUX0FRTF9UWFFfTElNSVRfTUNcdDUwMDAwXG4gXG4gLyogVGhlIHBlciBpbnRlcmZhY2UgYWlydGltZSB0aHJlc2hvbGQgdG8gc3dpdGNoIHRvIGxvd2VyIHF1ZXVlIGxpbWl0ICovXG4gI2RlZmluZSBJRUVFODAyMTFfQVFMX1RIUkVTSE9MRFx0XHRcdDI0MDAwXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmhcbmluZGV4IDRmOTVkYTAyMzc0NmY5Li4yM2Q4ZDQ2MzljZGQ2ZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmhcbkBAIC0xMzU0LDggJiM0MzsxMzU0LDggQEAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvIHtcbiBcdCAgICBzdGF0dXNfZGF0YV9pZHI6MSxcbiBcdCAgICBzdGF0dXNfZGF0YToxMyxcbiBcdCAgICBod19xdWV1ZTo0LFxuJiM0MztcdCAgICB0eF90aW1lX21jOjEsXG4gXHQgICAgdHhfdGltZV9lc3Q6MTA7XG4tXHQvKiAxIGZyZWUgYml0ICovXG4gXG4gXHR1bmlvbiB7XG4gXHRcdHN0cnVjdCB7XG5AQCAtNjg3Niw2ICYjNDM7Njg3NiwxNyBAQCB2b2lkIGllZWU4MDIxMV9zdGFfcmVnaXN0ZXJfYWlydGltZShzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLCB1OCB0aWQsXG4gYm9vbFxuIGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVjayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV90eHEgKnR4cSk7XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBpZWVlODAyMTFfdHhxX2FxbF9wZW5kaW5nIC0gZ2V0IHBlbmRpbmcgQVFMIGFpcnRpbWUgZm9yIGEgdHhxXG4mIzQzOyAqXG4mIzQzOyAqIEBodzogcG9pbnRlciBvYnRhaW5lZCBmcm9tIGllZWU4MDIxMV9hbGxvY19odygpXG4mIzQzOyAqIEB0eHE6IHBvaW50ZXIgb2J0YWluZWQgZnJvbSBzdGF0aW9uIG9yIHZpcnR1YWwgaW50ZXJmYWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogcGVuZGluZyBhaXJ0aW1lIChpbiB1c2VjKSBmb3IgdGhlIGdpdmVuIHR4cS5cbiYjNDM7ICovXG4mIzQzO3UzMiBpZWVlODAyMTFfdHhxX2FxbF9wZW5kaW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqdHhxKTtcbiYjNDM7XG4gLyoqXG4gICogaWVlZTgwMjExX2l0ZXJfa2V5cyAtIGl0ZXJhdGUga2V5cyBwcm9ncmFtbWVkIGludG8gdGhlIGRldmljZVxuICAqIEBodzogcG9pbnRlciBvYnRhaW5lZCBmcm9tIGllZWU4MDIxMV9hbGxvY19odygpXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2FpcnRpbWUuYyBiL25ldC9tYWM4MDIxMS9haXJ0aW1lLmNcbmluZGV4IGM2MWRmNjM3MjMyYTliLi4wYzU0Y2RiZDc1M2NkNyAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9haXJ0aW1lLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9haXJ0aW1lLmNcbkBAIC02ODUsNyAmIzQzOzY4NSw3IEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX2ZpbGxfcnhfc3RhdHVzKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0LFxuIFx0aWYgKGllZWU4MDIxMV9maWxsX3JhdGVfaW5mbyhodywgc3RhdCwgYmFuZCwgcmkpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmICghaWVlZTgwMjExX3JhdGVfdmFsaWQocmF0ZSkpXG4mIzQzO1x0aWYgKCFyYXRlIHx8ICFpZWVlODAyMTFfcmF0ZV92YWxpZChyYXRlKSlcbiBcdFx0cmV0dXJuIC0xO1xuIFxuIFx0aWYgKHJhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9UWF9SQ18xNjBfTUhaX1dJRFRIKVxuQEAgLTc1Myw2ICYjNDM7NzUzLDUzIEBAIHUzMiBpZWVlODAyMTFfY2FsY190eF9haXJ0aW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChpZWVlODAyMTFfY2FsY190eF9haXJ0aW1lKTtcbiBcbiYjNDM7dTMyIGllZWU4MDIxMV9yYXRlX2V4cGVjdGVkX3R4X2FpcnRpbWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqdHhfcmF0ZSxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IHJhdGVfaW5mbyAqcmksXG4mIzQzO1x0XHRcdFx0ICAgICAgIGVudW0gbmw4MDIxMV9iYW5kIGJhbmQsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGJvb2wgYW1wZHUsIGludCBsZW4pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyBzdGF0O1xuJiM0MztcdHUzMiBkdXJhdGlvbiwgb3ZlcmhlYWQ7XG4mIzQzO1x0dTggYWdnX3NoaWZ0O1xuJiM0MztcbiYjNDM7XHRpZiAoaWVlZTgwMjExX2ZpbGxfcnhfc3RhdHVzKFx1MDAyNnN0YXQsIGh3LCB0eF9yYXRlLCByaSwgYmFuZCwgbGVuKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAoc3RhdC5lbmNvZGluZyA9PSBSWF9FTkNfTEVHQUNZIHx8ICFhbXBkdSlcbiYjNDM7XHRcdHJldHVybiBpZWVlODAyMTFfY2FsY19yeF9haXJ0aW1lKGh3LCBcdTAwMjZzdGF0LCBsZW4pICogMTAyNDtcbiYjNDM7XG4mIzQzO1x0ZHVyYXRpb24gPSBpZWVlODAyMTFfZ2V0X3JhdGVfZHVyYXRpb24oaHcsIFx1MDAyNnN0YXQsIFx1MDAyNm92ZXJoZWFkKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBc3N1bWUgdGhhdCBIVC9WSFQgdHJhbnNtaXNzaW9uIG9uIGFueSBBQyBleGNlcHQgVk8gd2lsbFxuJiM0MztcdCAqIHVzZSBhZ2dyZWdhdGlvbi4gU2luY2Ugd2UgZG9uJiMzOTt0IGhhdmUgcmVsaWFibGUgcmVwb3J0aW5nXG4mIzQzO1x0ICogb2YgYWdncmVnYXRpb24gbGVuZ3RoLCBhc3N1bWUgYW4gYXZlcmFnZSBzaXplIGJhc2VkIG9uIHRoZVxuJiM0MztcdCAqIHR4IHJhdGUuXG4mIzQzO1x0ICogVGhpcyB3aWxsIG5vdCBiZSB2ZXJ5IGFjY3VyYXRlLCBidXQgbXVjaCBiZXR0ZXIgdGhhbiBzaW1wbHlcbiYjNDM7XHQgKiBhc3N1bWluZyB1bi1hZ2dyZWdhdGVkIHR4IGluIGFsbCBjYXNlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoZHVyYXRpb24gXHUwMDNlIDQwMCAqIDEwMjQpIC8qIFx1MDAzYz0gVkhUMjAgTUNTMiAxUyAqL1xuJiM0MztcdFx0YWdnX3NoaWZ0ID0gMTtcbiYjNDM7XHRlbHNlIGlmIChkdXJhdGlvbiBcdTAwM2UgMjUwICogMTAyNCkgLyogXHUwMDNjPSBWSFQyMCBNQ1MzIDFTIG9yIE1DUzEgMlMgKi9cbiYjNDM7XHRcdGFnZ19zaGlmdCA9IDI7XG4mIzQzO1x0ZWxzZSBpZiAoZHVyYXRpb24gXHUwMDNlIDE1MCAqIDEwMjQpIC8qIFx1MDAzYz0gVkhUMjAgTUNTNSAxUyBvciBNQ1MyIDJTICovXG4mIzQzO1x0XHRhZ2dfc2hpZnQgPSAzO1xuJiM0MztcdGVsc2UgaWYgKGR1cmF0aW9uIFx1MDAzZSA3MCAqIDEwMjQpIC8qIFx1MDAzYz0gVkhUMjAgTUNTNSAyUyAqL1xuJiM0MztcdFx0YWdnX3NoaWZ0ID0gNDtcbiYjNDM7XHRlbHNlIGlmIChzdGF0LmVuY29kaW5nICE9IFJYX0VOQ19IRSB8fFxuJiM0MztcdFx0IGR1cmF0aW9uIFx1MDAzZSAyMCAqIDEwMjQpIC8qIFx1MDAzYz0gSEU0MCBNQ1M2IDJTICovXG4mIzQzO1x0XHRhZ2dfc2hpZnQgPSA1O1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGFnZ19zaGlmdCA9IDY7XG4mIzQzO1xuJiM0MztcdGR1cmF0aW9uICo9IGxlbjtcbiYjNDM7XHRkdXJhdGlvbiAvPSBBVkdfUEtUX1NJWkU7XG4mIzQzO1x0ZHVyYXRpb24gJiM0Mzs9IChvdmVyaGVhZCAqIDEwMjQgXHUwMDNlXHUwMDNlIGFnZ19zaGlmdCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkdXJhdGlvbjtcbiYjNDM7fVxuJiM0MztcbiB1MzIgaWVlZTgwMjExX2NhbGNfZXhwZWN0ZWRfdHhfYWlydGltZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsXG5AQCAtNzc1LDQ1ICYjNDM7ODIyLDEzIEBAIHUzMiBpZWVlODAyMTFfY2FsY19leHBlY3RlZF90eF9haXJ0aW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIFx0aWYgKHB1YnN0YSkge1xuIFx0XHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IGNvbnRhaW5lcl9vZihwdWJzdGEsIHN0cnVjdCBzdGFfaW5mbyxcbiBcdFx0XHRcdFx0XHQgICAgc3RhKTtcbi1cdFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgc3RhdDtcbiBcdFx0c3RydWN0IGllZWU4MDIxMV90eF9yYXRlICp0eF9yYXRlID0gXHUwMDI2c3RhLVx1MDAzZWRlZmxpbmsudHhfc3RhdHMubGFzdF9yYXRlO1xuIFx0XHRzdHJ1Y3QgcmF0ZV9pbmZvICpyaSA9IFx1MDAyNnN0YS1cdTAwM2VkZWZsaW5rLnR4X3N0YXRzLmxhc3RfcmF0ZV9pbmZvO1xuLVx0XHR1MzIgZHVyYXRpb24sIG92ZXJoZWFkO1xuLVx0XHR1OCBhZ2dfc2hpZnQ7XG4tXG4tXHRcdGlmIChpZWVlODAyMTFfZmlsbF9yeF9zdGF0dXMoXHUwMDI2c3RhdCwgaHcsIHR4X3JhdGUsIHJpLCBiYW5kLCBsZW4pKVxuLVx0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0dTMyIGR1cmF0aW9uO1xuIFxuLVx0XHRpZiAoc3RhdC5lbmNvZGluZyA9PSBSWF9FTkNfTEVHQUNZIHx8ICFhbXBkdSlcbi1cdFx0XHRyZXR1cm4gaWVlZTgwMjExX2NhbGNfcnhfYWlydGltZShodywgXHUwMDI2c3RhdCwgbGVuKTtcbi1cbi1cdFx0ZHVyYXRpb24gPSBpZWVlODAyMTFfZ2V0X3JhdGVfZHVyYXRpb24oaHcsIFx1MDAyNnN0YXQsIFx1MDAyNm92ZXJoZWFkKTtcbi1cdFx0Lypcbi1cdFx0ICogQXNzdW1lIHRoYXQgSFQvVkhUIHRyYW5zbWlzc2lvbiBvbiBhbnkgQUMgZXhjZXB0IFZPIHdpbGxcbi1cdFx0ICogdXNlIGFnZ3JlZ2F0aW9uLiBTaW5jZSB3ZSBkb24mIzM5O3QgaGF2ZSByZWxpYWJsZSByZXBvcnRpbmdcbi1cdFx0ICogb2YgYWdncmVnYXRpb24gbGVuZ3RoLCBhc3N1bWUgYW4gYXZlcmFnZSBzaXplIGJhc2VkIG9uIHRoZVxuLVx0XHQgKiB0eCByYXRlLlxuLVx0XHQgKiBUaGlzIHdpbGwgbm90IGJlIHZlcnkgYWNjdXJhdGUsIGJ1dCBtdWNoIGJldHRlciB0aGFuIHNpbXBseVxuLVx0XHQgKiBhc3N1bWluZyB1bi1hZ2dyZWdhdGVkIHR4IGluIGFsbCBjYXNlcy5cbi1cdFx0ICovXG4tXHRcdGlmIChkdXJhdGlvbiBcdTAwM2UgNDAwICogMTAyNCkgLyogXHUwMDNjPSBWSFQyMCBNQ1MyIDFTICovXG4tXHRcdFx0YWdnX3NoaWZ0ID0gMTtcbi1cdFx0ZWxzZSBpZiAoZHVyYXRpb24gXHUwMDNlIDI1MCAqIDEwMjQpIC8qIFx1MDAzYz0gVkhUMjAgTUNTMyAxUyBvciBNQ1MxIDJTICovXG4tXHRcdFx0YWdnX3NoaWZ0ID0gMjtcbi1cdFx0ZWxzZSBpZiAoZHVyYXRpb24gXHUwMDNlIDE1MCAqIDEwMjQpIC8qIFx1MDAzYz0gVkhUMjAgTUNTNSAxUyBvciBNQ1MyIDJTICovXG4tXHRcdFx0YWdnX3NoaWZ0ID0gMztcbi1cdFx0ZWxzZSBpZiAoZHVyYXRpb24gXHUwMDNlIDcwICogMTAyNCkgLyogXHUwMDNjPSBWSFQyMCBNQ1M1IDJTICovXG4tXHRcdFx0YWdnX3NoaWZ0ID0gNDtcbi1cdFx0ZWxzZSBpZiAoc3RhdC5lbmNvZGluZyAhPSBSWF9FTkNfSEUgfHxcbi1cdFx0XHQgZHVyYXRpb24gXHUwMDNlIDIwICogMTAyNCkgLyogXHUwMDNjPSBIRTQwIE1DUzYgMlMgKi9cbi1cdFx0XHRhZ2dfc2hpZnQgPSA1O1xuLVx0XHRlbHNlXG4tXHRcdFx0YWdnX3NoaWZ0ID0gNjtcbi1cbi1cdFx0ZHVyYXRpb24gKj0gbGVuO1xuLVx0XHRkdXJhdGlvbiAvPSBBVkdfUEtUX1NJWkU7XG4mIzQzO1x0XHRkdXJhdGlvbiA9IGllZWU4MDIxMV9yYXRlX2V4cGVjdGVkX3R4X2FpcnRpbWUoaHcsIHR4X3JhdGUsIHJpLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgIGJhbmQsIHRydWUsIGxlbik7XG4gXHRcdGR1cmF0aW9uIC89IDEwMjQ7XG4tXHRcdGR1cmF0aW9uICYjNDM7PSAob3ZlcmhlYWQgXHUwMDNlXHUwMDNlIGFnZ19zaGlmdCk7XG4gXG4gXHRcdHJldHVybiBtYXhfdCh1MzIsIGR1cmF0aW9uLCA0KTtcbiBcdH1cbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvZGVidWdmcy5jIGIvbmV0L21hYzgwMjExL2RlYnVnZnMuY1xuaW5kZXggYTRkNTQ2MWY2NDgwZjAuLjhlYmY1YmNmM2MwZWMxIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2RlYnVnZnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2RlYnVnZnMuY1xuQEAgLTIxMCwxMSAmIzQzOzIxMCwxMyBAQCBzdGF0aWMgc3NpemVfdCBhcWxfcGVuZGluZ19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRcdFwmIzM0O1ZJICAgICAldSB1c1xcblwmIzM0O1xuIFx0XHRcdFwmIzM0O0JFICAgICAldSB1c1xcblwmIzM0O1xuIFx0XHRcdFwmIzM0O0JLICAgICAldSB1c1xcblwmIzM0O1xuJiM0MztcdFx0XHRcJiMzNDtNQyAgICAgJXUgdXNcXG5cJiMzNDtcbiBcdFx0XHRcJiMzNDt0b3RhbCAgJXUgdXNcXG5cJiMzNDssXG4gXHRcdFx0YXRvbWljX3JlYWQoXHUwMDI2bG9jYWwtXHUwMDNlYXFsX2FjX3BlbmRpbmdfYWlydGltZVtJRUVFODAyMTFfQUNfVk9dKSxcbiBcdFx0XHRhdG9taWNfcmVhZChcdTAwMjZsb2NhbC1cdTAwM2VhcWxfYWNfcGVuZGluZ19haXJ0aW1lW0lFRUU4MDIxMV9BQ19WSV0pLFxuIFx0XHRcdGF0b21pY19yZWFkKFx1MDAyNmxvY2FsLVx1MDAzZWFxbF9hY19wZW5kaW5nX2FpcnRpbWVbSUVFRTgwMjExX0FDX0JFXSksXG4gXHRcdFx0YXRvbWljX3JlYWQoXHUwMDI2bG9jYWwtXHUwMDNlYXFsX2FjX3BlbmRpbmdfYWlydGltZVtJRUVFODAyMTFfQUNfQktdKSxcbiYjNDM7XHRcdFx0YXRvbWljX3JlYWQoXHUwMDI2bG9jYWwtXHUwMDNlYXFsX21jX3BlbmRpbmdfYWlydGltZSksXG4gXHRcdFx0YXRvbWljX3JlYWQoXHUwMDI2bG9jYWwtXHUwMDNlYXFsX3RvdGFsX3BlbmRpbmdfYWlydGltZSkpO1xuIFx0cmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcyxcbiBcdFx0XHRcdCAgICAgICBidWYsIGxlbik7XG5AQCAtMjM5LDcgJiM0MzsyNDEsOCBAQCBzdGF0aWMgc3NpemVfdCBhcWxfdHhxX2xpbWl0X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdFx0XCYjMzQ7Vk9cdCV1XHRcdCV1XFxuXCYjMzQ7XG4gXHRcdFx0XCYjMzQ7VklcdCV1XHRcdCV1XFxuXCYjMzQ7XG4gXHRcdFx0XCYjMzQ7QkVcdCV1XHRcdCV1XFxuXCYjMzQ7XG4tXHRcdFx0XCYjMzQ7QktcdCV1XHRcdCV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcJiMzNDtCS1x0JXVcdFx0JXVcXG5cJiMzNDtcbiYjNDM7XHRcdFx0XCYjMzQ7TUNcdCV1XFxuXCYjMzQ7LFxuIFx0XHRcdGxvY2FsLVx1MDAzZWFxbF90eHFfbGltaXRfbG93W0lFRUU4MDIxMV9BQ19WT10sXG4gXHRcdFx0bG9jYWwtXHUwMDNlYXFsX3R4cV9saW1pdF9oaWdoW0lFRUU4MDIxMV9BQ19WT10sXG4gXHRcdFx0bG9jYWwtXHUwMDNlYXFsX3R4cV9saW1pdF9sb3dbSUVFRTgwMjExX0FDX1ZJXSxcbkBAIC0yNDcsNyAmIzQzOzI1MCw4IEBAIHN0YXRpYyBzc2l6ZV90IGFxbF90eHFfbGltaXRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdFx0XHRsb2NhbC1cdTAwM2VhcWxfdHhxX2xpbWl0X2xvd1tJRUVFODAyMTFfQUNfQkVdLFxuIFx0XHRcdGxvY2FsLVx1MDAzZWFxbF90eHFfbGltaXRfaGlnaFtJRUVFODAyMTFfQUNfQkVdLFxuIFx0XHRcdGxvY2FsLVx1MDAzZWFxbF90eHFfbGltaXRfbG93W0lFRUU4MDIxMV9BQ19CS10sXG4tXHRcdFx0bG9jYWwtXHUwMDNlYXFsX3R4cV9saW1pdF9oaWdoW0lFRUU4MDIxMV9BQ19CS10pO1xuJiM0MztcdFx0XHRsb2NhbC1cdTAwM2VhcWxfdHhxX2xpbWl0X2hpZ2hbSUVFRTgwMjExX0FDX0JLXSxcbiYjNDM7XHRcdFx0bG9jYWwtXHUwMDNlYXFsX3R4cV9saW1pdF9tYyk7XG4gXHRyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLFxuIFx0XHRcdFx0ICAgICAgIGJ1ZiwgbGVuKTtcbiB9XG5AQCAtMjczLDYgJiM0MzsyNzcsMTEgQEAgc3RhdGljIHNzaXplX3QgYXFsX3R4cV9saW1pdF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdGVsc2VcbiBcdFx0YnVmW2NvdW50XSA9ICYjMzk7XFwwJiMzOTs7XG4gXG4mIzQzO1x0aWYgKHNzY2FuZihidWYsIFwmIzM0O21jYXN0ICV1XCYjMzQ7LCBcdTAwMjZxX2xpbWl0X2xvdykgPT0gMSkge1xuJiM0MztcdFx0bG9jYWwtXHUwMDNlYXFsX3R4cV9saW1pdF9tYyA9IHFfbGltaXRfbG93O1xuJiM0MztcdFx0cmV0dXJuIGNvdW50O1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoc3NjYW5mKGJ1ZiwgXCYjMzQ7JXUgJXUgJXVcJiMzNDssIFx1MDAyNmFjLCBcdTAwMjZxX2xpbWl0X2xvdywgXHUwMDI2cV9saW1pdF9oaWdoKSAhPSAzKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaCBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXG5pbmRleCAzNGE5ZWE4YjZmODU3ZS4uNzhmZWE3YTE3YWU3NjYgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbkBAIC0xNDY0LDEwICYjNDM7MTQ2NCwxMiBAQCBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsIHtcbiBcdHNwaW5sb2NrX3QgaGFuZGxlX3dha2VfdHhfcXVldWVfbG9jaztcbiBcbiBcdHUxNiBhaXJ0aW1lX2ZsYWdzO1xuJiM0MztcdHUzMiBhcWxfdHhxX2xpbWl0X21jO1xuIFx0dTMyIGFxbF90eHFfbGltaXRfbG93W0lFRUU4MDIxMV9OVU1fQUNTXTtcbiBcdHUzMiBhcWxfdHhxX2xpbWl0X2hpZ2hbSUVFRTgwMjExX05VTV9BQ1NdO1xuIFx0dTMyIGFxbF90aHJlc2hvbGQ7XG4gXHRhdG9taWNfdCBhcWxfdG90YWxfcGVuZGluZ19haXJ0aW1lO1xuJiM0MztcdGF0b21pY190IGFxbF9tY19wZW5kaW5nX2FpcnRpbWU7XG4gXHRhdG9taWNfdCBhcWxfYWNfcGVuZGluZ19haXJ0aW1lW0lFRUU4MDIxMV9OVU1fQUNTXTtcbiBcbiBcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzICpvcHM7XG5AQCAtMjkzOSw2ICYjNDM7Mjk0MSwxMSBAQCB1OCAqaWVlZTgwMjExX2dldF9ic3NpZChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLCBzaXplX3QgbGVuLFxuIFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaWVlZTgwMjExX2V0aHRvb2xfb3BzO1xuIFxuJiM0Mzt1MzIgaWVlZTgwMjExX3JhdGVfZXhwZWN0ZWRfdHhfYWlydGltZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICp0eF9yYXRlLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgcmF0ZV9pbmZvICpyaSxcbiYjNDM7XHRcdFx0XHQgICAgICAgZW51bSBubDgwMjExX2JhbmQgYmFuZCxcbiYjNDM7XHRcdFx0XHQgICAgICAgYm9vbCBhbXBkdSwgaW50IGxlbik7XG4gdTMyIGllZWU4MDIxMV9jYWxjX2V4cGVjdGVkX3R4X2FpcnRpbWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tYWluLmMgYi9uZXQvbWFjODAyMTEvbWFpbi5jXG5pbmRleCBlYjFlYWFmMzQ2MTJlMS4uYjVkYzdmNjU5YjVkZTUgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvbWFpbi5jXG5AQCAtOTg4LDYgJiM0Mzs5ODgsNyBAQCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICppZWVlODAyMTFfYWxsb2NfaHdfbm0oc2l6ZV90IHByaXZfZGF0YV9sZW4sXG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZsb2NhbC1cdTAwM2VyeF9wYXRoX2xvY2spO1xuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bG9jYWwtXHUwMDNlcXVldWVfc3RvcF9yZWFzb25fbG9jayk7XG4gXG4mIzQzO1x0bG9jYWwtXHUwMDNlYXFsX3R4cV9saW1pdF9tYyA9IElFRUU4MDIxMV9ERUZBVUxUX0FRTF9UWFFfTElNSVRfTUM7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJRUVFODAyMTFfTlVNX0FDUzsgaSYjNDM7JiM0MzspIHtcbiBcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bG9jYWwtXHUwMDNlYWN0aXZlX3R4cXNbaV0pO1xuIFx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZsb2NhbC1cdTAwM2VhY3RpdmVfdHhxX2xvY2tbaV0pO1xuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmNcbmluZGV4IDIyZWJhMGU2ZTU0YzViLi5kMTJhZWQ5YzE3NTYxNyAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uY1xuQEAgLTI0OTEsMTMgJiM0MzsyNDkxLDI4IEBAIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0YV9yZWNhbGNfYWdncmVnYXRlcyk7XG4gXG4gdm9pZCBpZWVlODAyMTFfc3RhX3VwZGF0ZV9wZW5kaW5nX2FpcnRpbWUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4gXHRcdFx0XHRcdCAgc3RydWN0IHN0YV9pbmZvICpzdGEsIHU4IGFjLFxuLVx0XHRcdFx0XHQgIHUxNiB0eF9haXJ0aW1lLCBib29sIHR4X2NvbXBsZXRlZClcbiYjNDM7XHRcdFx0XHRcdCAgdTE2IHR4X2FpcnRpbWUsIGJvb2wgdHhfY29tcGxldGVkLFxuJiM0MztcdFx0XHRcdFx0ICBib29sIG1jYXN0KVxuIHtcbiBcdGludCB0eF9wZW5kaW5nO1xuIFxuIFx0aWYgKCF3aXBoeV9leHRfZmVhdHVyZV9pc3NldChsb2NhbC1cdTAwM2Vody53aXBoeSwgTkw4MDIxMV9FWFRfRkVBVFVSRV9BUUwpKVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0aWYgKG1jYXN0KSB7XG4mIzQzO1x0XHRpZiAoIXR4X2NvbXBsZXRlZCkge1xuJiM0MztcdFx0XHRhdG9taWNfYWRkKHR4X2FpcnRpbWUsIFx1MDAyNmxvY2FsLVx1MDAzZWFxbF9tY19wZW5kaW5nX2FpcnRpbWUpO1xuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0dHhfcGVuZGluZyA9IGF0b21pY19zdWJfcmV0dXJuKHR4X2FpcnRpbWUsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgXHUwMDI2bG9jYWwtXHUwMDNlYXFsX21jX3BlbmRpbmdfYWlydGltZSk7XG4mIzQzO1x0XHRpZiAodHhfcGVuZGluZyBcdTAwM2MgMClcbiYjNDM7XHRcdFx0YXRvbWljX2NtcHhjaGcoXHUwMDI2bG9jYWwtXHUwMDNlYXFsX21jX3BlbmRpbmdfYWlydGltZSxcbiYjNDM7XHRcdFx0XHQgICAgICAgdHhfcGVuZGluZywgMCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmICghdHhfY29tcGxldGVkKSB7XG4gXHRcdGlmIChzdGEpXG4gXHRcdFx0YXRvbWljX2FkZCh0eF9haXJ0aW1lLFxuQEAgLTI3OTcsNiAmIzQzOzI4MTIsMjggQEAgdm9pZCBzdGFfc2V0X2FjY3VtdWxhdGVkX3JlbW92ZWRfbGlua3Nfc2luZm8oc3RydWN0IHN0YV9pbmZvICpzdGEsXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgdTMyIHN0YV9lc3RpbWF0ZV9leHBlY3RlZF90aHJvdWdocHV0KHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuJiM0MztcdFx0XHRcdFx0ICAgIHN0cnVjdCByYXRlX2luZm8gKnJpLFxuJiM0MztcdFx0XHRcdFx0ICAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBcdTAwMjZzdGEtXHUwMDNlc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlaHc7XG4mIzQzO1x0c3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmY7XG4mIzQzO1x0dTMyIGR1cmF0aW9uO1xuJiM0MztcdHU4IGJhbmQ7XG4mIzQzO1xuJiM0MztcdGNvbmYgPSByY3VfZGVyZWZlcmVuY2UoYnNzX2NvbmYtXHUwMDNlY2hhbmN0eF9jb25mKTtcbiYjNDM7XHRpZiAoIWNvbmYpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRiYW5kID0gY29uZi1cdTAwM2VkZWYuY2hhbi1cdTAwM2ViYW5kO1xuJiM0MztcbiYjNDM7XHRkdXJhdGlvbiA9IGllZWU4MDIxMV9yYXRlX2V4cGVjdGVkX3R4X2FpcnRpbWUoaHcsIE5VTEwsIHJpLCBiYW5kLCB0cnVlLCAxMDI0KTtcbiYjNDM7XHRkdXJhdGlvbiAmIzQzOz0gZHVyYXRpb24gXHUwMDNlXHUwMDNlIDQ7IC8qIGFkZCBhc3N1bWVkIHBhY2tldCBlcnJvciByYXRlIG9mIH42JSAqL1xuJiM0MztcdGlmICghZHVyYXRpb24pXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuICgoMTAyNCAqIFVTRUNfUEVSX1NFQykgLyBkdXJhdGlvbikgKiA4O1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHN0YV9zZXRfbGlua19zaW5mbyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbiBcdFx0XHQgICAgICAgc3RydWN0IGxpbmtfc3RhdGlvbl9pbmZvICpsaW5rX3NpbmZvLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluayxcbkBAIC0zMDExLDYgJiM0MzszMDQ4LDEwIEBAIHN0YXRpYyB2b2lkIHN0YV9zZXRfbGlua19zaW5mbyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbiBcdGxpbmtfc2luZm8tXHUwMDNlYnNzX3BhcmFtLmJlYWNvbl9pbnRlcnZhbCA9IGxpbmstXHUwMDNlY29uZi1cdTAwM2ViZWFjb25faW50O1xuIFxuIFx0dGhyID0gc3RhX2dldF9leHBlY3RlZF90aHJvdWdocHV0KHN0YSk7XG4mIzQzO1x0aWYgKCF0aHIgXHUwMDI2XHUwMDI2IChsaW5rX3NpbmZvLVx1MDAzZWZpbGxlZCBcdTAwMjYgQklUX1VMTChOTDgwMjExX1NUQV9JTkZPX1RYX0JJVFJBVEUpKSlcbiYjNDM7XHRcdHRociA9IHN0YV9lc3RpbWF0ZV9leHBlY3RlZF90aHJvdWdocHV0KHN0YSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2bGlua19zaW5mby1cdTAwM2V0eHJhdGUsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgIGxpbmstXHUwMDNlY29uZik7XG4gXG4gXHRpZiAodGhyICE9IDApIHtcbiBcdFx0bGlua19zaW5mby1cdTAwM2VmaWxsZWQgfD1cbkBAIC0zMjY0LDYgJiM0MzszMzA1LDE0IEBAIHZvaWQgc3RhX3NldF9zaW5mbyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgc3RydWN0IHN0YXRpb25faW5mbyAqc2luZm8sXG4gXHRpZiAodGhyICE9IDApIHtcbiBcdFx0c2luZm8tXHUwMDNlZmlsbGVkIHw9IEJJVF9VTEwoTkw4MDIxMV9TVEFfSU5GT19FWFBFQ1RFRF9USFJPVUdIUFVUKTtcbiBcdFx0c2luZm8tXHUwMDNlZXhwZWN0ZWRfdGhyb3VnaHB1dCA9IHRocjtcbiYjNDM7XHR9IGVsc2UgaWYgKCFzdGEtXHUwMDNlc3RhLnZhbGlkX2xpbmtzIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgKHNpbmZvLVx1MDAzZWZpbGxlZCBcdTAwMjYgQklUX1VMTChOTDgwMjExX1NUQV9JTkZPX1RYX0JJVFJBVEUpKSkge1xuJiM0MztcdFx0dGhyID0gc3RhX2VzdGltYXRlX2V4cGVjdGVkX3Rocm91Z2hwdXQoc3RhLCBcdTAwMjZzaW5mby1cdTAwM2V0eHJhdGUsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgIFx1MDAyNnNkYXRhLVx1MDAzZXZpZi5ic3NfY29uZik7XG4mIzQzO1x0XHRpZiAodGhyKSB7XG4mIzQzO1x0XHRcdHNpbmZvLVx1MDAzZWZpbGxlZCB8PSBCSVRfVUxMKE5MODAyMTFfU1RBX0lORk9fRVhQRUNURURfVEhST1VHSFBVVCk7XG4mIzQzO1x0XHRcdHNpbmZvLVx1MDAzZWV4cGVjdGVkX3Rocm91Z2hwdXQgPSB0aHI7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRpZiAoIShzaW5mby1cdTAwM2VmaWxsZWQgXHUwMDI2IEJJVF9VTEwoTkw4MDIxMV9TVEFfSU5GT19BQ0tfU0lHTkFMKSkgXHUwMDI2XHUwMDI2XG5AQCAtMzI4NCw2ICYjNDM7MzMzMyw3IEBAIHZvaWQgc3RhX3NldF9zaW5mbyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgc3RydWN0IHN0YXRpb25faW5mbyAqc2luZm8sXG4gXHRpZiAoc3RhLVx1MDAzZXN0YS52YWxpZF9saW5rcykge1xuIFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluaztcbiBcdFx0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhO1xuJiM0MztcdFx0dTMyIGVzdF90aHIgPSAwO1xuIFx0XHRpbnQgbGlua19pZDtcbiBcbiBcdFx0c2luZm8tXHUwMDNlbWxvX3BhcmFtc192YWxpZCA9IHRydWU7XG5AQCAtMzI5NSwxNyAmIzQzOzMzNDUsMjUgQEAgdm9pZCBzdGFfc2V0X3NpbmZvKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbyxcbiBcdFx0c2luZm8tXHUwMDNldmFsaWRfbGlua3MgPSBzdGEtXHUwMDNlc3RhLnZhbGlkX2xpbmtzO1xuIFxuIFx0XHRmb3JfZWFjaF92YWxpZF9saW5rKHNpbmZvLCBsaW5rX2lkKSB7XG4mIzQzO1x0XHRcdHN0cnVjdCBsaW5rX3N0YXRpb25faW5mbyAqbGlua19zaW5mbyA9IHNpbmZvLVx1MDAzZWxpbmtzW2xpbmtfaWRdO1xuJiM0MztcbiBcdFx0XHRsaW5rX3N0YSA9IHdpcGh5X2RlcmVmZXJlbmNlKHN0YS1cdTAwM2Vsb2NhbC1cdTAwM2Vody53aXBoeSxcbiBcdFx0XHRcdFx0XHQgICAgIHN0YS1cdTAwM2VsaW5rW2xpbmtfaWRdKTtcbiBcdFx0XHRsaW5rID0gd2lwaHlfZGVyZWZlcmVuY2Uoc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlaHcud2lwaHksXG4gXHRcdFx0XHRcdFx0IHNkYXRhLVx1MDAzZWxpbmtbbGlua19pZF0pO1xuIFxuLVx0XHRcdGlmICghbGlua19zdGEgfHwgIXNpbmZvLVx1MDAzZWxpbmtzW2xpbmtfaWRdIHx8ICFsaW5rKSB7XG4mIzQzO1x0XHRcdGlmICghbGlua19zdGEgfHwgIWxpbmtfc2luZm8gfHwgIWxpbmspIHtcbiBcdFx0XHRcdHNpbmZvLVx1MDAzZXZhbGlkX2xpbmtzIFx1MDAyNj0gfkJJVChsaW5rX2lkKTtcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdH1cbi1cdFx0XHRzdGFfc2V0X2xpbmtfc2luZm8oc3RhLCBzaW5mby1cdTAwM2VsaW5rc1tsaW5rX2lkXSxcbi1cdFx0XHRcdFx0ICAgbGluaywgdGlkc3RhdHMpO1xuJiM0MztcdFx0XHRzdGFfc2V0X2xpbmtfc2luZm8oc3RhLCBsaW5rX3NpbmZvLCBsaW5rLCB0aWRzdGF0cyk7XG4mIzQzO1x0XHRcdGlmICghdGhyIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgKGxpbmtfc2luZm8tXHUwMDNlZmlsbGVkIFx1MDAyNiBCSVRfVUxMKE5MODAyMTFfU1RBX0lORk9fRVhQRUNURURfVEhST1VHSFBVVCkpKVxuJiM0MztcdFx0XHRcdGVzdF90aHIgJiM0Mzs9IGxpbmtfc2luZm8tXHUwMDNlZXhwZWN0ZWRfdGhyb3VnaHB1dDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChlc3RfdGhyKSB7XG4mIzQzO1x0XHRcdHNpbmZvLVx1MDAzZWZpbGxlZCB8PSBCSVRfVUxMKE5MODAyMTFfU1RBX0lORk9fRVhQRUNURURfVEhST1VHSFBVVCk7XG4mIzQzO1x0XHRcdHNpbmZvLVx1MDAzZWV4cGVjdGVkX3Rocm91Z2hwdXQgPSBlc3RfdGhyO1xuIFx0XHR9XG4gXHR9XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmhcbmluZGV4IDVkYTMxNDJkODUxNmVmLi5lZTBkMzI4NzdjNWI0NyAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uaFxuQEAgLTE0Nyw3ICYjNDM7MTQ3LDggQEAgc3RydWN0IGFpcnRpbWVfaW5mbyB7XG4gXG4gdm9pZCBpZWVlODAyMTFfc3RhX3VwZGF0ZV9wZW5kaW5nX2FpcnRpbWUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4gXHRcdFx0XHRcdCAgc3RydWN0IHN0YV9pbmZvICpzdGEsIHU4IGFjLFxuLVx0XHRcdFx0XHQgIHUxNiB0eF9haXJ0aW1lLCBib29sIHR4X2NvbXBsZXRlZCk7XG4mIzQzO1x0XHRcdFx0XHQgIHUxNiB0eF9haXJ0aW1lLCBib29sIHR4X2NvbXBsZXRlZCxcbiYjNDM7XHRcdFx0XHRcdCAgYm9vbCBtY2FzdCk7XG4gXG4gc3RydWN0IHN0YV9pbmZvO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGF0dXMuYyBiL25ldC9tYWM4MDIxMS9zdGF0dXMuY1xuaW5kZXggZGQxZGJiYTA2ODM4ZTUuLmM3NjRlMWE5NTQ4Njk2IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL3N0YXR1cy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvc3RhdHVzLmNcbkBAIC03NzQsNyAmIzQzOzc3NCw3IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yZXBvcnRfdXNlZF9za2Ioc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4gXHRcdGllZWU4MDIxMV9zdGFfdXBkYXRlX3BlbmRpbmdfYWlydGltZShsb2NhbCwgc3RhLFxuIFx0XHRcdFx0XHRcdCAgICAgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYiksXG4gXHRcdFx0XHRcdFx0ICAgICB0eF90aW1lX2VzdCxcbi1cdFx0XHRcdFx0XHQgICAgIHRydWUpO1xuJiM0MztcdFx0XHRcdFx0XHQgICAgIHRydWUsIGluZm8tXHUwMDNldHhfdGltZV9tYyk7XG4gXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0fVxuIFxuQEAgLTExODYsMTAgJiM0MzsxMTg2LDExIEBAIHZvaWQgaWVlZTgwMjExX3R4X3N0YXR1c19leHQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXHRcdC8qIERvIHRoaXMgaGVyZSB0byBhdm9pZCB0aGUgZXhwZW5zaXZlIGxvb2t1cCBvZiB0aGUgc3RhXG4gXHRcdCAqIGluIGllZWU4MDIxMV9yZXBvcnRfdXNlZF9za2IoKS5cbiBcdFx0ICovXG4mIzQzO1x0XHRib29sIG1jYXN0ID0gSUVFRTgwMjExX1NLQl9DQihza2IpLVx1MDAzZXR4X3RpbWVfbWM7XG4gXHRcdGllZWU4MDIxMV9zdGFfdXBkYXRlX3BlbmRpbmdfYWlydGltZShsb2NhbCwgc3RhLFxuIFx0XHRcdFx0XHRcdCAgICAgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYiksXG4gXHRcdFx0XHRcdFx0ICAgICB0eF90aW1lX2VzdCxcbi1cdFx0XHRcdFx0XHQgICAgIHRydWUpO1xuJiM0MztcdFx0XHRcdFx0XHQgICAgIHRydWUsIG1jYXN0KTtcbiBcdFx0aWVlZTgwMjExX2luZm9fc2V0X3R4X3RpbWVfZXN0KElFRUU4MDIxMV9TS0JfQ0Ioc2tiKSwgMCk7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3R4LmMgYi9uZXQvbWFjODAyMTEvdHguY1xuaW5kZXggOTFiMTQxMTJlMjRmMDguLjg1YWZmMzc4MTkyNDJhIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL3R4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS90eC5jXG5AQCAtNDA1NCwyMCAmIzQzOzQwNTQsMjAgQEAgc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV90eF9kZXF1ZXVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIGVuY2FwX291dDpcbiBcdGluZm8tXHUwMDNlY29udHJvbC52aWYgPSB2aWY7XG4gXG4tXHRpZiAodHguc3RhIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KGxvY2FsLVx1MDAzZWh3LndpcGh5LCBOTDgwMjExX0VYVF9GRUFUVVJFX0FRTCkpIHtcbi1cdFx0Ym9vbCBhbXBkdSA9IHR4cS1cdTAwM2VhYyAhPSBJRUVFODAyMTFfQUNfVk87XG4mIzQzO1x0aWYgKHdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KGxvY2FsLVx1MDAzZWh3LndpcGh5LCBOTDgwMjExX0VYVF9GRUFUVVJFX0FRTCkpIHtcbiYjNDM7XHRcdGJvb2wgYW1wZHUgPSB0eHEtXHUwMDNlc3RhIFx1MDAyNlx1MDAyNiB0eHEtXHUwMDNlYWMgIT0gSUVFRTgwMjExX0FDX1ZPO1xuIFx0XHR1MzIgYWlydGltZTtcbiBcbiBcdFx0YWlydGltZSA9IGllZWU4MDIxMV9jYWxjX2V4cGVjdGVkX3R4X2FpcnRpbWUoaHcsIHZpZiwgdHhxLVx1MDAzZXN0YSxcbiBcdFx0XHRcdFx0XHRcdCAgICAgc2tiLVx1MDAzZWxlbiwgYW1wZHUpO1xuLVx0XHRpZiAoYWlydGltZSkge1xuLVx0XHRcdGFpcnRpbWUgPSBpZWVlODAyMTFfaW5mb19zZXRfdHhfdGltZV9lc3QoaW5mbywgYWlydGltZSk7XG4tXHRcdFx0aWVlZTgwMjExX3N0YV91cGRhdGVfcGVuZGluZ19haXJ0aW1lKGxvY2FsLCB0eC5zdGEsXG4tXHRcdFx0XHRcdFx0XHQgICAgIHR4cS1cdTAwM2VhYyxcbi1cdFx0XHRcdFx0XHRcdCAgICAgYWlydGltZSxcbi1cdFx0XHRcdFx0XHRcdCAgICAgZmFsc2UpO1xuLVx0XHR9XG4mIzQzO1x0XHRpZiAoIWFpcnRpbWUpXG4mIzQzO1x0XHRcdHJldHVybiBza2I7XG4mIzQzO1xuJiM0MztcdFx0YWlydGltZSA9IGllZWU4MDIxMV9pbmZvX3NldF90eF90aW1lX2VzdChpbmZvLCBhaXJ0aW1lKTtcbiYjNDM7XHRcdGluZm8tXHUwMDNldHhfdGltZV9tYyA9ICF0eC5zdGE7XG4mIzQzO1x0XHRpZWVlODAyMTFfc3RhX3VwZGF0ZV9wZW5kaW5nX2FpcnRpbWUobG9jYWwsIHR4LnN0YSwgdHhxLVx1MDAzZWFjLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIGFpcnRpbWUsIGZhbHNlLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIGluZm8tXHUwMDNldHhfdGltZV9tYyk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gc2tiO1xuQEAgLTQxMTksNiAmIzQzOzQxMTksNyBAQCBzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqaWVlZTgwMjExX25leHRfdHhxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBhYylcbiBcdHN0cnVjdCBpZWVlODAyMTFfdHhxICpyZXQgPSBOVUxMO1xuIFx0c3RydWN0IHR4cV9pbmZvICp0eHFpID0gTlVMTCwgKmhlYWQgPSBOVUxMO1xuIFx0Ym9vbCBmb3VuZF9lbGlnaWJsZV90eHEgPSBmYWxzZTtcbiYjNDM7XHRib29sIGFxbF9jaGVjaztcbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZsb2NhbC1cdTAwM2VhY3RpdmVfdHhxX2xvY2tbYWNdKTtcbiBcbkBAIC00MTQyLDI2ICYjNDM7NDE0MywyOCBAQCBzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqaWVlZTgwMjExX25leHRfdHhxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBhYylcbiBcdGlmICghaGVhZClcbiBcdFx0aGVhZCA9IHR4cWk7XG4gXG4mIzQzO1x0YXFsX2NoZWNrID0gaWVlZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrKGh3LCBcdTAwMjZ0eHFpLVx1MDAzZXR4cSk7XG4mIzQzO1x0aWYgKGFxbF9jaGVjaylcbiYjNDM7XHRcdGZvdW5kX2VsaWdpYmxlX3R4cSA9IHRydWU7XG4mIzQzO1xuIFx0aWYgKHR4cWktXHUwMDNldHhxLnN0YSkge1xuIFx0XHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IGNvbnRhaW5lcl9vZih0eHFpLVx1MDAzZXR4cS5zdGEsXG4gXHRcdFx0XHRcdFx0ICAgIHN0cnVjdCBzdGFfaW5mbywgc3RhKTtcbi1cdFx0Ym9vbCBhcWxfY2hlY2sgPSBpZWVlODAyMTFfdHhxX2FpcnRpbWVfY2hlY2soaHcsIFx1MDAyNnR4cWktXHUwMDNldHhxKTtcbi1cdFx0czMyIGRlZmljaXQgPSBpZWVlODAyMTFfc3RhX2RlZmljaXQoc3RhLCB0eHFpLVx1MDAzZXR4cS5hYyk7XG4gXG4tXHRcdGlmIChhcWxfY2hlY2spXG4tXHRcdFx0Zm91bmRfZWxpZ2libGVfdHhxID0gdHJ1ZTtcbi1cbi1cdFx0aWYgKGRlZmljaXQgXHUwMDNjIDApXG4mIzQzO1x0XHRpZiAoaWVlZTgwMjExX3N0YV9kZWZpY2l0KHN0YSwgdHhxaS1cdTAwM2V0eHEuYWMpIFx1MDAzYyAwKSB7XG4gXHRcdFx0c3RhLVx1MDAzZWFpcnRpbWVbdHhxaS1cdTAwM2V0eHEuYWNdLmRlZmljaXQgJiM0Mzs9XG4gXHRcdFx0XHRzdGEtXHUwMDNlYWlydGltZV93ZWlnaHQ7XG4gXG4tXHRcdGlmIChkZWZpY2l0IFx1MDAzYyAwIHx8ICFhcWxfY2hlY2spIHtcbi1cdFx0XHRsaXN0X21vdmVfdGFpbChcdTAwMjZ0eHFpLVx1MDAzZXNjaGVkdWxlX29yZGVyLFxuLVx0XHRcdFx0ICAgICAgIFx1MDAyNmxvY2FsLVx1MDAzZWFjdGl2ZV90eHFzW3R4cWktXHUwMDNldHhxLmFjXSk7XG4tXHRcdFx0Z290byBiZWdpbjtcbiYjNDM7XHRcdFx0YXFsX2NoZWNrID0gZmFsc2U7XG4gXHRcdH1cbiBcdH1cbiBcbiYjNDM7XHRpZiAoIWFxbF9jaGVjaykge1xuJiM0MztcdFx0bGlzdF9tb3ZlX3RhaWwoXHUwMDI2dHhxaS1cdTAwM2VzY2hlZHVsZV9vcmRlcixcbiYjNDM7XHRcdFx0XHQgICBcdTAwMjZsb2NhbC1cdTAwM2VhY3RpdmVfdHhxc1t0eHFpLVx1MDAzZXR4cS5hY10pO1xuJiM0MztcdFx0Z290byBiZWdpbjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKHR4cWktXHUwMDNlc2NoZWR1bGVfcm91bmQgPT0gbG9jYWwtXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdKVxuIFx0XHRnb3RvIG91dDtcbiBcbkBAIC00MjI4LDcgJiM0Mzs0MjMxLDggQEAgYm9vbCBpZWVlODAyMTFfdHhxX2FpcnRpbWVfY2hlY2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0aWYgKCF0eHEtXHUwMDNlc3RhKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdHJldHVybiBhdG9taWNfcmVhZChcdTAwMjZsb2NhbC1cdTAwM2VhcWxfbWNfcGVuZGluZ19haXJ0aW1lKSBcdTAwM2NcbiYjNDM7XHRcdCAgICAgICBsb2NhbC1cdTAwM2VhcWxfdHhxX2xpbWl0X21jO1xuIFxuIFx0aWYgKHVubGlrZWx5KHR4cS1cdTAwM2V0aWQgPT0gSUVFRTgwMjExX05VTV9USURTKSlcbiBcdFx0cmV0dXJuIHRydWU7XG5AQCAtNDI0OCw2ICYjNDM7NDI1MiwyNCBAQCBib29sIGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVjayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiB9XG4gRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdHhxX2FpcnRpbWVfY2hlY2spO1xuIFxuJiM0Mzt1MzIgaWVlZTgwMjExX3R4cV9hcWxfcGVuZGluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IGllZWU4MDIxMV90eHEgKnR4cSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpO1xuJiM0MztcdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkodHhxLVx1MDAzZXRpZCA9PSBJRUVFODAyMTFfTlVNX1RJRFMpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmICghdHhxLVx1MDAzZXN0YSlcbiYjNDM7XHRcdHJldHVybiBhdG9taWNfcmVhZChcdTAwMjZsb2NhbC1cdTAwM2VhcWxfbWNfcGVuZGluZ19haXJ0aW1lKTtcbiYjNDM7XG4mIzQzO1x0c3RhID0gY29udGFpbmVyX29mKHR4cS1cdTAwM2VzdGEsIHN0cnVjdCBzdGFfaW5mbywgc3RhKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGF0b21pY19yZWFkKFx1MDAyNnN0YS1cdTAwM2VhaXJ0aW1lW3R4cS1cdTAwM2VhY10uYXFsX3R4X3BlbmRpbmcpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3R4cV9hcWxfcGVuZGluZyk7XG4mIzQzO1xuIHN0YXRpYyBib29sXG4gaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9haXJ0aW1lX2NoZWNrKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1OCBhYylcbiB7XG5AQCAtNDI3NywxNSAmIzQzOzQyOTksMTUgQEAgYm9vbCBpZWVlODAyMTFfdHhxX21heV90cmFuc21pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZsb2NhbC1cdTAwM2VhY3RpdmVfdHhxX2xvY2tbYWNdKTtcbiBcbi1cdGlmICghdHhxaS1cdTAwM2V0eHEuc3RhKVxuLVx0XHRnb3RvIG91dDtcbi1cbiBcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnR4cWktXHUwMDNlc2NoZWR1bGVfb3JkZXIpKVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdGlmICghaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9haXJ0aW1lX2NoZWNrKGxvY2FsLCBhYykpXG4gXHRcdGdvdG8gb3V0O1xuIFxuJiM0MztcdGlmICghdHhxaS1cdTAwM2V0eHEuc3RhKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGl0ZXIsIHRtcCwgXHUwMDI2bG9jYWwtXHUwMDNlYWN0aXZlX3R4cXNbYWNdLFxuIFx0XHRcdFx0IHNjaGVkdWxlX29yZGVyKSB7XG4gXHRcdGlmIChpdGVyID09IHR4cWkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTQ6NTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjExX3N0YV91cGRhdGVfcGVuZGluZ19haXJ0aW1lJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV90eHFfYWlydGltZV9jaGVjayYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfdHhxX2FxbF9wZW5kaW5nJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9yYXRlX2V4cGVjdGVkX3R4X2FpcnRpbWUmIzM0OywKICAgICYjMzQ7c3RhX2VzdGltYXRlX2V4cGVjdGVkX3Rocm91Z2hwdXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBBaXJ0aW1lIFF1ZXVlIExpbWl0IChBUUwpIHN1cHBvcnQgZm9yIG11bHRpY2FzdCB0cmFmZmljIGFuZCBtb2RpZmllcyB0aGUgZXhwZWN0ZWQgdGhyb3VnaHB1dCBjYWxjdWxhdGlvbiBmb3Igc3RhdGlvbnMgaW4gbWFjODAyMTEuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbG9naWMgZm9yIDgwMi4xMSBuZXR3b3JraW5nIGFuZCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBtYWM4MDIxMV9od3NpbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzlkNTg1MzliZWI3NDBiYzU3YjYzMmYxNzg3NDVjYzVjYTgyZmNhMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDIyIDE0OjU0OjI5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaCBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmgKaW5kZXggZjVhYmYxZGI3NTU4YmMuLjczNTRiYTA3OTM2M2E1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmgKQEAgLTM3MjIsNiAmIzQzOzM3MjIsNyBAQCBlbnVtIHdpcGh5X3BhcmFtc19mbGFncyB7CiAvKiBUaGUgcGVyIFRYUSBkZXZpY2UgcXVldWUgbGltaXQgaW4gYWlydGltZSAqLwogI2RlZmluZSBJRUVFODAyMTFfREVGQVVMVF9BUUxfVFhRX0xJTUlUX0wJNTAwMAogI2RlZmluZSBJRUVFODAyMTFfREVGQVVMVF9BUUxfVFhRX0xJTUlUX0gJMTIwMDAKJiM0MzsjZGVmaW5lIElFRUU4MDIxMV9ERUZBVUxUX0FRTF9UWFFfTElNSVRfTUMJNTAwMDAKIAogLyogVGhlIHBlciBpbnRlcmZhY2UgYWlydGltZSB0aHJlc2hvbGQgdG8gc3dpdGNoIHRvIGxvd2VyIHF1ZXVlIGxpbWl0ICovCiAjZGVmaW5lIElFRUU4MDIxMV9BUUxfVEhSRVNIT0xECQkJMjQwMDAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmggYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCmluZGV4IDRmOTVkYTAyMzc0NmY5Li4yM2Q4ZDQ2MzljZGQ2ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCkBAIC0xMzU0LDggJiM0MzsxMzU0LDggQEAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvIHsKIAkgICAgc3RhdHVzX2RhdGFfaWRyOjEsCiAJICAgIHN0YXR1c19kYXRhOjEzLAogCSAgICBod19xdWV1ZTo0LAomIzQzOwkgICAgdHhfdGltZV9tYzoxLAogCSAgICB0eF90aW1lX2VzdDoxMDsKLQkvKiAxIGZyZWUgYml0ICovCiAKIAl1bmlvbiB7CiAJCXN0cnVjdCB7CkBAIC02ODc2LDYgJiM0Mzs2ODc2LDE3IEBAIHZvaWQgaWVlZTgwMjExX3N0YV9yZWdpc3Rlcl9haXJ0aW1lKHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsIHU4IHRpZCwKIGJvb2wKIGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVjayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV90eHEgKnR4cSk7CiAKJiM0MzsvKioKJiM0MzsgKiBpZWVlODAyMTFfdHhxX2FxbF9wZW5kaW5nIC0gZ2V0IHBlbmRpbmcgQVFMIGFpcnRpbWUgZm9yIGEgdHhxCiYjNDM7ICoKJiM0MzsgKiBAaHc6IHBvaW50ZXIgb2J0YWluZWQgZnJvbSBpZWVlODAyMTFfYWxsb2NfaHcoKQomIzQzOyAqIEB0eHE6IHBvaW50ZXIgb2J0YWluZWQgZnJvbSBzdGF0aW9uIG9yIHZpcnR1YWwgaW50ZXJmYWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHBlbmRpbmcgYWlydGltZSAoaW4gdXNlYykgZm9yIHRoZSBnaXZlbiB0eHEuCiYjNDM7ICovCiYjNDM7dTMyIGllZWU4MDIxMV90eHFfYXFsX3BlbmRpbmcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiYjNDM7CQkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eHEgKnR4cSk7CiYjNDM7CiAvKioKICAqIGllZWU4MDIxMV9pdGVyX2tleXMgLSBpdGVyYXRlIGtleXMgcHJvZ3JhbW1lZCBpbnRvIHRoZSBkZXZpY2UKICAqIEBodzogcG9pbnRlciBvYnRhaW5lZCBmcm9tIGllZWU4MDIxMV9hbGxvY19odygpCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvYWlydGltZS5jIGIvbmV0L21hYzgwMjExL2FpcnRpbWUuYwppbmRleCBjNjFkZjYzNzIzMmE5Yi4uMGM1NGNkYmQ3NTNjZDcgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9haXJ0aW1lLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2FpcnRpbWUuYwpAQCAtNjg1LDcgJiM0Mzs2ODUsNyBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9maWxsX3J4X3N0YXR1cyhzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdCwKIAlpZiAoaWVlZTgwMjExX2ZpbGxfcmF0ZV9pbmZvKGh3LCBzdGF0LCBiYW5kLCByaSkpCiAJCXJldHVybiAwOwogCi0JaWYgKCFpZWVlODAyMTFfcmF0ZV92YWxpZChyYXRlKSkKJiM0MzsJaWYgKCFyYXRlIHx8ICFpZWVlODAyMTFfcmF0ZV92YWxpZChyYXRlKSkKIAkJcmV0dXJuIC0xOwogCiAJaWYgKHJhdGUtJmd0O2ZsYWdzICZhbXA7IElFRUU4MDIxMV9UWF9SQ18xNjBfTUhaX1dJRFRIKQpAQCAtNzUzLDYgJiM0Mzs3NTMsNTMgQEAgdTMyIGllZWU4MDIxMV9jYWxjX3R4X2FpcnRpbWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZWVlODAyMTFfY2FsY190eF9haXJ0aW1lKTsKIAomIzQzO3UzMiBpZWVlODAyMTFfcmF0ZV9leHBlY3RlZF90eF9haXJ0aW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAomIzQzOwkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICp0eF9yYXRlLAomIzQzOwkJCQkgICAgICAgc3RydWN0IHJhdGVfaW5mbyAqcmksCiYjNDM7CQkJCSAgICAgICBlbnVtIG5sODAyMTFfYmFuZCBiYW5kLAomIzQzOwkJCQkgICAgICAgYm9vbCBhbXBkdSwgaW50IGxlbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHN0YXQ7CiYjNDM7CXUzMiBkdXJhdGlvbiwgb3ZlcmhlYWQ7CiYjNDM7CXU4IGFnZ19zaGlmdDsKJiM0MzsKJiM0MzsJaWYgKGllZWU4MDIxMV9maWxsX3J4X3N0YXR1cygmYW1wO3N0YXQsIGh3LCB0eF9yYXRlLCByaSwgYmFuZCwgbGVuKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAoc3RhdC5lbmNvZGluZyA9PSBSWF9FTkNfTEVHQUNZIHx8ICFhbXBkdSkKJiM0MzsJCXJldHVybiBpZWVlODAyMTFfY2FsY19yeF9haXJ0aW1lKGh3LCAmYW1wO3N0YXQsIGxlbikgKiAxMDI0OwomIzQzOwomIzQzOwlkdXJhdGlvbiA9IGllZWU4MDIxMV9nZXRfcmF0ZV9kdXJhdGlvbihodywgJmFtcDtzdGF0LCAmYW1wO292ZXJoZWFkKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQXNzdW1lIHRoYXQgSFQvVkhUIHRyYW5zbWlzc2lvbiBvbiBhbnkgQUMgZXhjZXB0IFZPIHdpbGwKJiM0MzsJICogdXNlIGFnZ3JlZ2F0aW9uLiBTaW5jZSB3ZSBkb24mIzM5O3QgaGF2ZSByZWxpYWJsZSByZXBvcnRpbmcKJiM0MzsJICogb2YgYWdncmVnYXRpb24gbGVuZ3RoLCBhc3N1bWUgYW4gYXZlcmFnZSBzaXplIGJhc2VkIG9uIHRoZQomIzQzOwkgKiB0eCByYXRlLgomIzQzOwkgKiBUaGlzIHdpbGwgbm90IGJlIHZlcnkgYWNjdXJhdGUsIGJ1dCBtdWNoIGJldHRlciB0aGFuIHNpbXBseQomIzQzOwkgKiBhc3N1bWluZyB1bi1hZ2dyZWdhdGVkIHR4IGluIGFsbCBjYXNlcy4KJiM0MzsJICovCiYjNDM7CWlmIChkdXJhdGlvbiAmZ3Q7IDQwMCAqIDEwMjQpIC8qICZsdDs9IFZIVDIwIE1DUzIgMVMgKi8KJiM0MzsJCWFnZ19zaGlmdCA9IDE7CiYjNDM7CWVsc2UgaWYgKGR1cmF0aW9uICZndDsgMjUwICogMTAyNCkgLyogJmx0Oz0gVkhUMjAgTUNTMyAxUyBvciBNQ1MxIDJTICovCiYjNDM7CQlhZ2dfc2hpZnQgPSAyOwomIzQzOwllbHNlIGlmIChkdXJhdGlvbiAmZ3Q7IDE1MCAqIDEwMjQpIC8qICZsdDs9IFZIVDIwIE1DUzUgMVMgb3IgTUNTMiAyUyAqLwomIzQzOwkJYWdnX3NoaWZ0ID0gMzsKJiM0MzsJZWxzZSBpZiAoZHVyYXRpb24gJmd0OyA3MCAqIDEwMjQpIC8qICZsdDs9IFZIVDIwIE1DUzUgMlMgKi8KJiM0MzsJCWFnZ19zaGlmdCA9IDQ7CiYjNDM7CWVsc2UgaWYgKHN0YXQuZW5jb2RpbmcgIT0gUlhfRU5DX0hFIHx8CiYjNDM7CQkgZHVyYXRpb24gJmd0OyAyMCAqIDEwMjQpIC8qICZsdDs9IEhFNDAgTUNTNiAyUyAqLwomIzQzOwkJYWdnX3NoaWZ0ID0gNTsKJiM0MzsJZWxzZQomIzQzOwkJYWdnX3NoaWZ0ID0gNjsKJiM0MzsKJiM0MzsJZHVyYXRpb24gKj0gbGVuOwomIzQzOwlkdXJhdGlvbiAvPSBBVkdfUEtUX1NJWkU7CiYjNDM7CWR1cmF0aW9uICYjNDM7PSAob3ZlcmhlYWQgKiAxMDI0ICZndDsmZ3Q7IGFnZ19zaGlmdCk7CiYjNDM7CiYjNDM7CXJldHVybiBkdXJhdGlvbjsKJiM0Mzt9CiYjNDM7CiB1MzIgaWVlZTgwMjExX2NhbGNfZXhwZWN0ZWRfdHhfYWlydGltZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSwKQEAgLTc3NSw0NSAmIzQzOzgyMiwxMyBAQCB1MzIgaWVlZTgwMjExX2NhbGNfZXhwZWN0ZWRfdHhfYWlydGltZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAlpZiAocHVic3RhKSB7CiAJCXN0cnVjdCBzdGFfaW5mbyAqc3RhID0gY29udGFpbmVyX29mKHB1YnN0YSwgc3RydWN0IHN0YV9pbmZvLAogCQkJCQkJICAgIHN0YSk7Ci0JCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHN0YXQ7CiAJCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqdHhfcmF0ZSA9ICZhbXA7c3RhLSZndDtkZWZsaW5rLnR4X3N0YXRzLmxhc3RfcmF0ZTsKIAkJc3RydWN0IHJhdGVfaW5mbyAqcmkgPSAmYW1wO3N0YS0mZ3Q7ZGVmbGluay50eF9zdGF0cy5sYXN0X3JhdGVfaW5mbzsKLQkJdTMyIGR1cmF0aW9uLCBvdmVyaGVhZDsKLQkJdTggYWdnX3NoaWZ0OwotCi0JCWlmIChpZWVlODAyMTFfZmlsbF9yeF9zdGF0dXMoJmFtcDtzdGF0LCBodywgdHhfcmF0ZSwgcmksIGJhbmQsIGxlbikpCi0JCQlyZXR1cm4gMDsKJiM0MzsJCXUzMiBkdXJhdGlvbjsKIAotCQlpZiAoc3RhdC5lbmNvZGluZyA9PSBSWF9FTkNfTEVHQUNZIHx8ICFhbXBkdSkKLQkJCXJldHVybiBpZWVlODAyMTFfY2FsY19yeF9haXJ0aW1lKGh3LCAmYW1wO3N0YXQsIGxlbik7Ci0KLQkJZHVyYXRpb24gPSBpZWVlODAyMTFfZ2V0X3JhdGVfZHVyYXRpb24oaHcsICZhbXA7c3RhdCwgJmFtcDtvdmVyaGVhZCk7Ci0JCS8qCi0JCSAqIEFzc3VtZSB0aGF0IEhUL1ZIVCB0cmFuc21pc3Npb24gb24gYW55IEFDIGV4Y2VwdCBWTyB3aWxsCi0JCSAqIHVzZSBhZ2dyZWdhdGlvbi4gU2luY2Ugd2UgZG9uJiMzOTt0IGhhdmUgcmVsaWFibGUgcmVwb3J0aW5nCi0JCSAqIG9mIGFnZ3JlZ2F0aW9uIGxlbmd0aCwgYXNzdW1lIGFuIGF2ZXJhZ2Ugc2l6ZSBiYXNlZCBvbiB0aGUKLQkJICogdHggcmF0ZS4KLQkJICogVGhpcyB3aWxsIG5vdCBiZSB2ZXJ5IGFjY3VyYXRlLCBidXQgbXVjaCBiZXR0ZXIgdGhhbiBzaW1wbHkKLQkJICogYXNzdW1pbmcgdW4tYWdncmVnYXRlZCB0eCBpbiBhbGwgY2FzZXMuCi0JCSAqLwotCQlpZiAoZHVyYXRpb24gJmd0OyA0MDAgKiAxMDI0KSAvKiAmbHQ7PSBWSFQyMCBNQ1MyIDFTICovCi0JCQlhZ2dfc2hpZnQgPSAxOwotCQllbHNlIGlmIChkdXJhdGlvbiAmZ3Q7IDI1MCAqIDEwMjQpIC8qICZsdDs9IFZIVDIwIE1DUzMgMVMgb3IgTUNTMSAyUyAqLwotCQkJYWdnX3NoaWZ0ID0gMjsKLQkJZWxzZSBpZiAoZHVyYXRpb24gJmd0OyAxNTAgKiAxMDI0KSAvKiAmbHQ7PSBWSFQyMCBNQ1M1IDFTIG9yIE1DUzIgMlMgKi8KLQkJCWFnZ19zaGlmdCA9IDM7Ci0JCWVsc2UgaWYgKGR1cmF0aW9uICZndDsgNzAgKiAxMDI0KSAvKiAmbHQ7PSBWSFQyMCBNQ1M1IDJTICovCi0JCQlhZ2dfc2hpZnQgPSA0OwotCQllbHNlIGlmIChzdGF0LmVuY29kaW5nICE9IFJYX0VOQ19IRSB8fAotCQkJIGR1cmF0aW9uICZndDsgMjAgKiAxMDI0KSAvKiAmbHQ7PSBIRTQwIE1DUzYgMlMgKi8KLQkJCWFnZ19zaGlmdCA9IDU7Ci0JCWVsc2UKLQkJCWFnZ19zaGlmdCA9IDY7Ci0KLQkJZHVyYXRpb24gKj0gbGVuOwotCQlkdXJhdGlvbiAvPSBBVkdfUEtUX1NJWkU7CiYjNDM7CQlkdXJhdGlvbiA9IGllZWU4MDIxMV9yYXRlX2V4cGVjdGVkX3R4X2FpcnRpbWUoaHcsIHR4X3JhdGUsIHJpLAomIzQzOwkJCQkJCQkgICAgICBiYW5kLCB0cnVlLCBsZW4pOwogCQlkdXJhdGlvbiAvPSAxMDI0OwotCQlkdXJhdGlvbiAmIzQzOz0gKG92ZXJoZWFkICZndDsmZ3Q7IGFnZ19zaGlmdCk7CiAKIAkJcmV0dXJuIG1heF90KHUzMiwgZHVyYXRpb24sIDQpOwogCX0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMgYi9uZXQvbWFjODAyMTEvZGVidWdmcy5jCmluZGV4IGE0ZDU0NjFmNjQ4MGYwLi44ZWJmNWJjZjNjMGVjMSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2RlYnVnZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvZGVidWdmcy5jCkBAIC0yMTAsMTEgJiM0MzsyMTAsMTMgQEAgc3RhdGljIHNzaXplX3QgYXFsX3BlbmRpbmdfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCSYjMzQ7VkkgICAgICV1IHVzXG4mIzM0OwogCQkJJiMzNDtCRSAgICAgJXUgdXNcbiYjMzQ7CiAJCQkmIzM0O0JLICAgICAldSB1c1xuJiMzNDsKJiM0MzsJCQkmIzM0O01DICAgICAldSB1c1xuJiMzNDsKIAkJCSYjMzQ7dG90YWwgICV1IHVzXG4mIzM0OywKIAkJCWF0b21pY19yZWFkKCZhbXA7bG9jYWwtJmd0O2FxbF9hY19wZW5kaW5nX2FpcnRpbWVbSUVFRTgwMjExX0FDX1ZPXSksCiAJCQlhdG9taWNfcmVhZCgmYW1wO2xvY2FsLSZndDthcWxfYWNfcGVuZGluZ19haXJ0aW1lW0lFRUU4MDIxMV9BQ19WSV0pLAogCQkJYXRvbWljX3JlYWQoJmFtcDtsb2NhbC0mZ3Q7YXFsX2FjX3BlbmRpbmdfYWlydGltZVtJRUVFODAyMTFfQUNfQkVdKSwKIAkJCWF0b21pY19yZWFkKCZhbXA7bG9jYWwtJmd0O2FxbF9hY19wZW5kaW5nX2FpcnRpbWVbSUVFRTgwMjExX0FDX0JLXSksCiYjNDM7CQkJYXRvbWljX3JlYWQoJmFtcDtsb2NhbC0mZ3Q7YXFsX21jX3BlbmRpbmdfYWlydGltZSksCiAJCQlhdG9taWNfcmVhZCgmYW1wO2xvY2FsLSZndDthcWxfdG90YWxfcGVuZGluZ19haXJ0aW1lKSk7CiAJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywKIAkJCQkgICAgICAgYnVmLCBsZW4pOwpAQCAtMjM5LDcgJiM0MzsyNDEsOCBAQCBzdGF0aWMgc3NpemVfdCBhcWxfdHhxX2xpbWl0X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkmIzM0O1ZPCSV1CQkldVxuJiMzNDsKIAkJCSYjMzQ7VkkJJXUJCSV1XG4mIzM0OwogCQkJJiMzNDtCRQkldQkJJXVcbiYjMzQ7Ci0JCQkmIzM0O0JLCSV1CQkldVxuJiMzNDssCiYjNDM7CQkJJiMzNDtCSwkldQkJJXVcbiYjMzQ7CiYjNDM7CQkJJiMzNDtNQwkldVxuJiMzNDssCiAJCQlsb2NhbC0mZ3Q7YXFsX3R4cV9saW1pdF9sb3dbSUVFRTgwMjExX0FDX1ZPXSwKIAkJCWxvY2FsLSZndDthcWxfdHhxX2xpbWl0X2hpZ2hbSUVFRTgwMjExX0FDX1ZPXSwKIAkJCWxvY2FsLSZndDthcWxfdHhxX2xpbWl0X2xvd1tJRUVFODAyMTFfQUNfVkldLApAQCAtMjQ3LDcgJiM0MzsyNTAsOCBAQCBzdGF0aWMgc3NpemVfdCBhcWxfdHhxX2xpbWl0X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCiAJCQlsb2NhbC0mZ3Q7YXFsX3R4cV9saW1pdF9sb3dbSUVFRTgwMjExX0FDX0JFXSwKIAkJCWxvY2FsLSZndDthcWxfdHhxX2xpbWl0X2hpZ2hbSUVFRTgwMjExX0FDX0JFXSwKIAkJCWxvY2FsLSZndDthcWxfdHhxX2xpbWl0X2xvd1tJRUVFODAyMTFfQUNfQktdLAotCQkJbG9jYWwtJmd0O2FxbF90eHFfbGltaXRfaGlnaFtJRUVFODAyMTFfQUNfQktdKTsKJiM0MzsJCQlsb2NhbC0mZ3Q7YXFsX3R4cV9saW1pdF9oaWdoW0lFRUU4MDIxMV9BQ19CS10sCiYjNDM7CQkJbG9jYWwtJmd0O2FxbF90eHFfbGltaXRfbWMpOwogCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsCiAJCQkJICAgICAgIGJ1ZiwgbGVuKTsKIH0KQEAgLTI3Myw2ICYjNDM7Mjc3LDExIEBAIHN0YXRpYyBzc2l6ZV90IGFxbF90eHFfbGltaXRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCiAJZWxzZQogCQlidWZbY291bnRdID0gJiMzOTtcMCYjMzk7OwogCiYjNDM7CWlmIChzc2NhbmYoYnVmLCAmIzM0O21jYXN0ICV1JiMzNDssICZhbXA7cV9saW1pdF9sb3cpID09IDEpIHsKJiM0MzsJCWxvY2FsLSZndDthcWxfdHhxX2xpbWl0X21jID0gcV9saW1pdF9sb3c7CiYjNDM7CQlyZXR1cm4gY291bnQ7CiYjNDM7CX0KJiM0MzsKIAlpZiAoc3NjYW5mKGJ1ZiwgJiMzNDsldSAldSAldSYjMzQ7LCAmYW1wO2FjLCAmYW1wO3FfbGltaXRfbG93LCAmYW1wO3FfbGltaXRfaGlnaCkgIT0gMykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKaW5kZXggMzRhOWVhOGI2Zjg1N2UuLjc4ZmVhN2ExN2FlNzY2IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaApAQCAtMTQ2NCwxMCAmIzQzOzE0NjQsMTIgQEAgc3RydWN0IGllZWU4MDIxMV9sb2NhbCB7CiAJc3BpbmxvY2tfdCBoYW5kbGVfd2FrZV90eF9xdWV1ZV9sb2NrOwogCiAJdTE2IGFpcnRpbWVfZmxhZ3M7CiYjNDM7CXUzMiBhcWxfdHhxX2xpbWl0X21jOwogCXUzMiBhcWxfdHhxX2xpbWl0X2xvd1tJRUVFODAyMTFfTlVNX0FDU107CiAJdTMyIGFxbF90eHFfbGltaXRfaGlnaFtJRUVFODAyMTFfTlVNX0FDU107CiAJdTMyIGFxbF90aHJlc2hvbGQ7CiAJYXRvbWljX3QgYXFsX3RvdGFsX3BlbmRpbmdfYWlydGltZTsKJiM0MzsJYXRvbWljX3QgYXFsX21jX3BlbmRpbmdfYWlydGltZTsKIAlhdG9taWNfdCBhcWxfYWNfcGVuZGluZ19haXJ0aW1lW0lFRUU4MDIxMV9OVU1fQUNTXTsKIAogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzICpvcHM7CkBAIC0yOTM5LDYgJiM0MzsyOTQxLDExIEBAIHU4ICppZWVlODAyMTFfZ2V0X2Jzc2lkKHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsIHNpemVfdCBsZW4sCiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaWVlZTgwMjExX2V0aHRvb2xfb3BzOwogCiYjNDM7dTMyIGllZWU4MDIxMV9yYXRlX2V4cGVjdGVkX3R4X2FpcnRpbWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnR4X3JhdGUsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgcmF0ZV9pbmZvICpyaSwKJiM0MzsJCQkJICAgICAgIGVudW0gbmw4MDIxMV9iYW5kIGJhbmQsCiYjNDM7CQkJCSAgICAgICBib29sIGFtcGR1LCBpbnQgbGVuKTsKIHUzMiBpZWVlODAyMTFfY2FsY19leHBlY3RlZF90eF9haXJ0aW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21haW4uYyBiL25ldC9tYWM4MDIxMS9tYWluLmMKaW5kZXggZWIxZWFhZjM0NjEyZTEuLmI1ZGM3ZjY1OWI1ZGU1IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9tYWluLmMKQEAgLTk4OCw2ICYjNDM7OTg4LDcgQEAgc3RydWN0IGllZWU4MDIxMV9odyAqaWVlZTgwMjExX2FsbG9jX2h3X25tKHNpemVfdCBwcml2X2RhdGFfbGVuLAogCXNwaW5fbG9ja19pbml0KCZhbXA7bG9jYWwtJmd0O3J4X3BhdGhfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmFtcDtsb2NhbC0mZ3Q7cXVldWVfc3RvcF9yZWFzb25fbG9jayk7CiAKJiM0MzsJbG9jYWwtJmd0O2FxbF90eHFfbGltaXRfbWMgPSBJRUVFODAyMTFfREVGQVVMVF9BUUxfVFhRX0xJTUlUX01DOwogCWZvciAoaSA9IDA7IGkgJmx0OyBJRUVFODAyMTFfTlVNX0FDUzsgaSYjNDM7JiM0MzspIHsKIAkJSU5JVF9MSVNUX0hFQUQoJmFtcDtsb2NhbC0mZ3Q7YWN0aXZlX3R4cXNbaV0pOwogCQlzcGluX2xvY2tfaW5pdCgmYW1wO2xvY2FsLSZndDthY3RpdmVfdHhxX2xvY2tbaV0pOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uYwppbmRleCAyMmViYTBlNmU1NGM1Yi4uZDEyYWVkOWMxNzU2MTcgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jCkBAIC0yNDkxLDEzICYjNDM7MjQ5MSwyOCBAQCBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdGFfcmVjYWxjX2FnZ3JlZ2F0ZXMpOwogCiB2b2lkIGllZWU4MDIxMV9zdGFfdXBkYXRlX3BlbmRpbmdfYWlydGltZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCQkJICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTggYWMsCi0JCQkJCSAgdTE2IHR4X2FpcnRpbWUsIGJvb2wgdHhfY29tcGxldGVkKQomIzQzOwkJCQkJICB1MTYgdHhfYWlydGltZSwgYm9vbCB0eF9jb21wbGV0ZWQsCiYjNDM7CQkJCQkgIGJvb2wgbWNhc3QpCiB7CiAJaW50IHR4X3BlbmRpbmc7CiAKIAlpZiAoIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KGxvY2FsLSZndDtody53aXBoeSwgTkw4MDIxMV9FWFRfRkVBVFVSRV9BUUwpKQogCQlyZXR1cm47CiAKJiM0MzsJaWYgKG1jYXN0KSB7CiYjNDM7CQlpZiAoIXR4X2NvbXBsZXRlZCkgewomIzQzOwkJCWF0b21pY19hZGQodHhfYWlydGltZSwgJmFtcDtsb2NhbC0mZ3Q7YXFsX21jX3BlbmRpbmdfYWlydGltZSk7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQomIzQzOwomIzQzOwkJdHhfcGVuZGluZyA9IGF0b21pY19zdWJfcmV0dXJuKHR4X2FpcnRpbWUsCiYjNDM7CQkJCQkgICAgICAgJmFtcDtsb2NhbC0mZ3Q7YXFsX21jX3BlbmRpbmdfYWlydGltZSk7CiYjNDM7CQlpZiAodHhfcGVuZGluZyAmbHQ7IDApCiYjNDM7CQkJYXRvbWljX2NtcHhjaGcoJmFtcDtsb2NhbC0mZ3Q7YXFsX21jX3BlbmRpbmdfYWlydGltZSwKJiM0MzsJCQkJICAgICAgIHR4X3BlbmRpbmcsIDApOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiAJaWYgKCF0eF9jb21wbGV0ZWQpIHsKIAkJaWYgKHN0YSkKIAkJCWF0b21pY19hZGQodHhfYWlydGltZSwKQEAgLTI3OTcsNiAmIzQzOzI4MTIsMjggQEAgdm9pZCBzdGFfc2V0X2FjY3VtdWxhdGVkX3JlbW92ZWRfbGlua3Nfc2luZm8oc3RydWN0IHN0YV9pbmZvICpzdGEsCiAJfQogfQogCiYjNDM7c3RhdGljIHUzMiBzdGFfZXN0aW1hdGVfZXhwZWN0ZWRfdGhyb3VnaHB1dChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKJiM0MzsJCQkJCSAgICBzdHJ1Y3QgcmF0ZV9pbmZvICpyaSwKJiM0MzsJCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gJmFtcDtzdGEtJmd0O3NkYXRhLSZndDtsb2NhbC0mZ3Q7aHc7CiYjNDM7CXN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjb25mOwomIzQzOwl1MzIgZHVyYXRpb247CiYjNDM7CXU4IGJhbmQ7CiYjNDM7CiYjNDM7CWNvbmYgPSByY3VfZGVyZWZlcmVuY2UoYnNzX2NvbmYtJmd0O2NoYW5jdHhfY29uZik7CiYjNDM7CWlmICghY29uZikKJiM0MzsJCXJldHVybiAwOwomIzQzOwliYW5kID0gY29uZi0mZ3Q7ZGVmLmNoYW4tJmd0O2JhbmQ7CiYjNDM7CiYjNDM7CWR1cmF0aW9uID0gaWVlZTgwMjExX3JhdGVfZXhwZWN0ZWRfdHhfYWlydGltZShodywgTlVMTCwgcmksIGJhbmQsIHRydWUsIDEwMjQpOwomIzQzOwlkdXJhdGlvbiAmIzQzOz0gZHVyYXRpb24gJmd0OyZndDsgNDsgLyogYWRkIGFzc3VtZWQgcGFja2V0IGVycm9yIHJhdGUgb2YgfjYlICovCiYjNDM7CWlmICghZHVyYXRpb24pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuICgoMTAyNCAqIFVTRUNfUEVSX1NFQykgLyBkdXJhdGlvbikgKiA4OwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHN0YV9zZXRfbGlua19zaW5mbyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKIAkJCSAgICAgICBzdHJ1Y3QgbGlua19zdGF0aW9uX2luZm8gKmxpbmtfc2luZm8sCiAJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmssCkBAIC0zMDExLDYgJiM0MzszMDQ4LDEwIEBAIHN0YXRpYyB2b2lkIHN0YV9zZXRfbGlua19zaW5mbyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKIAlsaW5rX3NpbmZvLSZndDtic3NfcGFyYW0uYmVhY29uX2ludGVydmFsID0gbGluay0mZ3Q7Y29uZi0mZ3Q7YmVhY29uX2ludDsKIAogCXRociA9IHN0YV9nZXRfZXhwZWN0ZWRfdGhyb3VnaHB1dChzdGEpOwomIzQzOwlpZiAoIXRociAmYW1wOyZhbXA7IChsaW5rX3NpbmZvLSZndDtmaWxsZWQgJmFtcDsgQklUX1VMTChOTDgwMjExX1NUQV9JTkZPX1RYX0JJVFJBVEUpKSkKJiM0MzsJCXRociA9IHN0YV9lc3RpbWF0ZV9leHBlY3RlZF90aHJvdWdocHV0KHN0YSwKJiM0MzsJCQkJCQkgICAgICAmYW1wO2xpbmtfc2luZm8tJmd0O3R4cmF0ZSwKJiM0MzsJCQkJCQkgICAgICBsaW5rLSZndDtjb25mKTsKIAogCWlmICh0aHIgIT0gMCkgewogCQlsaW5rX3NpbmZvLSZndDtmaWxsZWQgfD0KQEAgLTMyNjQsNiAmIzQzOzMzMDUsMTQgQEAgdm9pZCBzdGFfc2V0X3NpbmZvKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbywKIAlpZiAodGhyICE9IDApIHsKIAkJc2luZm8tJmd0O2ZpbGxlZCB8PSBCSVRfVUxMKE5MODAyMTFfU1RBX0lORk9fRVhQRUNURURfVEhST1VHSFBVVCk7CiAJCXNpbmZvLSZndDtleHBlY3RlZF90aHJvdWdocHV0ID0gdGhyOwomIzQzOwl9IGVsc2UgaWYgKCFzdGEtJmd0O3N0YS52YWxpZF9saW5rcyAmYW1wOyZhbXA7CiYjNDM7CQkgICAoc2luZm8tJmd0O2ZpbGxlZCAmYW1wOyBCSVRfVUxMKE5MODAyMTFfU1RBX0lORk9fVFhfQklUUkFURSkpKSB7CiYjNDM7CQl0aHIgPSBzdGFfZXN0aW1hdGVfZXhwZWN0ZWRfdGhyb3VnaHB1dChzdGEsICZhbXA7c2luZm8tJmd0O3R4cmF0ZSwKJiM0MzsJCQkJCQkgICAgICAmYW1wO3NkYXRhLSZndDt2aWYuYnNzX2NvbmYpOwomIzQzOwkJaWYgKHRocikgewomIzQzOwkJCXNpbmZvLSZndDtmaWxsZWQgfD0gQklUX1VMTChOTDgwMjExX1NUQV9JTkZPX0VYUEVDVEVEX1RIUk9VR0hQVVQpOwomIzQzOwkJCXNpbmZvLSZndDtleHBlY3RlZF90aHJvdWdocHV0ID0gdGhyOwomIzQzOwkJfQogCX0KIAogCWlmICghKHNpbmZvLSZndDtmaWxsZWQgJmFtcDsgQklUX1VMTChOTDgwMjExX1NUQV9JTkZPX0FDS19TSUdOQUwpKSAmYW1wOyZhbXA7CkBAIC0zMjg0LDYgJiM0MzszMzMzLDcgQEAgdm9pZCBzdGFfc2V0X3NpbmZvKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbywKIAlpZiAoc3RhLSZndDtzdGEudmFsaWRfbGlua3MpIHsKIAkJc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbms7CiAJCXN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YTsKJiM0MzsJCXUzMiBlc3RfdGhyID0gMDsKIAkJaW50IGxpbmtfaWQ7CiAKIAkJc2luZm8tJmd0O21sb19wYXJhbXNfdmFsaWQgPSB0cnVlOwpAQCAtMzI5NSwxNyAmIzQzOzMzNDUsMjUgQEAgdm9pZCBzdGFfc2V0X3NpbmZvKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbywKIAkJc2luZm8tJmd0O3ZhbGlkX2xpbmtzID0gc3RhLSZndDtzdGEudmFsaWRfbGlua3M7CiAKIAkJZm9yX2VhY2hfdmFsaWRfbGluayhzaW5mbywgbGlua19pZCkgewomIzQzOwkJCXN0cnVjdCBsaW5rX3N0YXRpb25faW5mbyAqbGlua19zaW5mbyA9IHNpbmZvLSZndDtsaW5rc1tsaW5rX2lkXTsKJiM0MzsKIAkJCWxpbmtfc3RhID0gd2lwaHlfZGVyZWZlcmVuY2Uoc3RhLSZndDtsb2NhbC0mZ3Q7aHcud2lwaHksCiAJCQkJCQkgICAgIHN0YS0mZ3Q7bGlua1tsaW5rX2lkXSk7CiAJCQlsaW5rID0gd2lwaHlfZGVyZWZlcmVuY2Uoc2RhdGEtJmd0O2xvY2FsLSZndDtody53aXBoeSwKIAkJCQkJCSBzZGF0YS0mZ3Q7bGlua1tsaW5rX2lkXSk7CiAKLQkJCWlmICghbGlua19zdGEgfHwgIXNpbmZvLSZndDtsaW5rc1tsaW5rX2lkXSB8fCAhbGluaykgewomIzQzOwkJCWlmICghbGlua19zdGEgfHwgIWxpbmtfc2luZm8gfHwgIWxpbmspIHsKIAkJCQlzaW5mby0mZ3Q7dmFsaWRfbGlua3MgJmFtcDs9IH5CSVQobGlua19pZCk7CiAJCQkJY29udGludWU7CiAJCQl9Ci0JCQlzdGFfc2V0X2xpbmtfc2luZm8oc3RhLCBzaW5mby0mZ3Q7bGlua3NbbGlua19pZF0sCi0JCQkJCSAgIGxpbmssIHRpZHN0YXRzKTsKJiM0MzsJCQlzdGFfc2V0X2xpbmtfc2luZm8oc3RhLCBsaW5rX3NpbmZvLCBsaW5rLCB0aWRzdGF0cyk7CiYjNDM7CQkJaWYgKCF0aHIgJmFtcDsmYW1wOwomIzQzOwkJCSAgICAobGlua19zaW5mby0mZ3Q7ZmlsbGVkICZhbXA7IEJJVF9VTEwoTkw4MDIxMV9TVEFfSU5GT19FWFBFQ1RFRF9USFJPVUdIUFVUKSkpCiYjNDM7CQkJCWVzdF90aHIgJiM0Mzs9IGxpbmtfc2luZm8tJmd0O2V4cGVjdGVkX3Rocm91Z2hwdXQ7CiYjNDM7CQl9CiYjNDM7CQlpZiAoZXN0X3RocikgewomIzQzOwkJCXNpbmZvLSZndDtmaWxsZWQgfD0gQklUX1VMTChOTDgwMjExX1NUQV9JTkZPX0VYUEVDVEVEX1RIUk9VR0hQVVQpOwomIzQzOwkJCXNpbmZvLSZndDtleHBlY3RlZF90aHJvdWdocHV0ID0gZXN0X3RocjsKIAkJfQogCX0KIH0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmgKaW5kZXggNWRhMzE0MmQ4NTE2ZWYuLmVlMGQzMjg3N2M1YjQ3IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uaApAQCAtMTQ3LDcgJiM0MzsxNDcsOCBAQCBzdHJ1Y3QgYWlydGltZV9pbmZvIHsKIAogdm9pZCBpZWVlODAyMTFfc3RhX3VwZGF0ZV9wZW5kaW5nX2FpcnRpbWUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkJCSAgc3RydWN0IHN0YV9pbmZvICpzdGEsIHU4IGFjLAotCQkJCQkgIHUxNiB0eF9haXJ0aW1lLCBib29sIHR4X2NvbXBsZXRlZCk7CiYjNDM7CQkJCQkgIHUxNiB0eF9haXJ0aW1lLCBib29sIHR4X2NvbXBsZXRlZCwKJiM0MzsJCQkJCSAgYm9vbCBtY2FzdCk7CiAKIHN0cnVjdCBzdGFfaW5mbzsKIApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3N0YXR1cy5jIGIvbmV0L21hYzgwMjExL3N0YXR1cy5jCmluZGV4IGRkMWRiYmEwNjgzOGU1Li5jNzY0ZTFhOTU0ODY5NiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3N0YXR1cy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9zdGF0dXMuYwpAQCAtNzc0LDcgJiM0Mzs3NzQsNyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcmVwb3J0X3VzZWRfc2tiKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQlpZWVlODAyMTFfc3RhX3VwZGF0ZV9wZW5kaW5nX2FpcnRpbWUobG9jYWwsIHN0YSwKIAkJCQkJCSAgICAgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYiksCiAJCQkJCQkgICAgIHR4X3RpbWVfZXN0LAotCQkJCQkJICAgICB0cnVlKTsKJiM0MzsJCQkJCQkgICAgIHRydWUsIGluZm8tJmd0O3R4X3RpbWVfbWMpOwogCQlyY3VfcmVhZF91bmxvY2soKTsKIAl9CiAKQEAgLTExODYsMTAgJiM0MzsxMTg2LDExIEBAIHZvaWQgaWVlZTgwMjExX3R4X3N0YXR1c19leHQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCS8qIERvIHRoaXMgaGVyZSB0byBhdm9pZCB0aGUgZXhwZW5zaXZlIGxvb2t1cCBvZiB0aGUgc3RhCiAJCSAqIGluIGllZWU4MDIxMV9yZXBvcnRfdXNlZF9za2IoKS4KIAkJICovCiYjNDM7CQlib29sIG1jYXN0ID0gSUVFRTgwMjExX1NLQl9DQihza2IpLSZndDt0eF90aW1lX21jOwogCQlpZWVlODAyMTFfc3RhX3VwZGF0ZV9wZW5kaW5nX2FpcnRpbWUobG9jYWwsIHN0YSwKIAkJCQkJCSAgICAgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYiksCiAJCQkJCQkgICAgIHR4X3RpbWVfZXN0LAotCQkJCQkJICAgICB0cnVlKTsKJiM0MzsJCQkJCQkgICAgIHRydWUsIG1jYXN0KTsKIAkJaWVlZTgwMjExX2luZm9fc2V0X3R4X3RpbWVfZXN0KElFRUU4MDIxMV9TS0JfQ0Ioc2tiKSwgMCk7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jCmluZGV4IDkxYjE0MTEyZTI0ZjA4Li44NWFmZjM3ODE5MjQyYSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3R4LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL3R4LmMKQEAgLTQwNTQsMjAgJiM0Mzs0MDU0LDIwIEBAIHN0cnVjdCBza19idWZmICppZWVlODAyMTFfdHhfZGVxdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIGVuY2FwX291dDoKIAlpbmZvLSZndDtjb250cm9sLnZpZiA9IHZpZjsKIAotCWlmICh0eC5zdGEgJmFtcDsmYW1wOwotCSAgICB3aXBoeV9leHRfZmVhdHVyZV9pc3NldChsb2NhbC0mZ3Q7aHcud2lwaHksIE5MODAyMTFfRVhUX0ZFQVRVUkVfQVFMKSkgewotCQlib29sIGFtcGR1ID0gdHhxLSZndDthYyAhPSBJRUVFODAyMTFfQUNfVk87CiYjNDM7CWlmICh3aXBoeV9leHRfZmVhdHVyZV9pc3NldChsb2NhbC0mZ3Q7aHcud2lwaHksIE5MODAyMTFfRVhUX0ZFQVRVUkVfQVFMKSkgewomIzQzOwkJYm9vbCBhbXBkdSA9IHR4cS0mZ3Q7c3RhICZhbXA7JmFtcDsgdHhxLSZndDthYyAhPSBJRUVFODAyMTFfQUNfVk87CiAJCXUzMiBhaXJ0aW1lOwogCiAJCWFpcnRpbWUgPSBpZWVlODAyMTFfY2FsY19leHBlY3RlZF90eF9haXJ0aW1lKGh3LCB2aWYsIHR4cS0mZ3Q7c3RhLAogCQkJCQkJCSAgICAgc2tiLSZndDtsZW4sIGFtcGR1KTsKLQkJaWYgKGFpcnRpbWUpIHsKLQkJCWFpcnRpbWUgPSBpZWVlODAyMTFfaW5mb19zZXRfdHhfdGltZV9lc3QoaW5mbywgYWlydGltZSk7Ci0JCQlpZWVlODAyMTFfc3RhX3VwZGF0ZV9wZW5kaW5nX2FpcnRpbWUobG9jYWwsIHR4LnN0YSwKLQkJCQkJCQkgICAgIHR4cS0mZ3Q7YWMsCi0JCQkJCQkJICAgICBhaXJ0aW1lLAotCQkJCQkJCSAgICAgZmFsc2UpOwotCQl9CiYjNDM7CQlpZiAoIWFpcnRpbWUpCiYjNDM7CQkJcmV0dXJuIHNrYjsKJiM0MzsKJiM0MzsJCWFpcnRpbWUgPSBpZWVlODAyMTFfaW5mb19zZXRfdHhfdGltZV9lc3QoaW5mbywgYWlydGltZSk7CiYjNDM7CQlpbmZvLSZndDt0eF90aW1lX21jID0gIXR4LnN0YTsKJiM0MzsJCWllZWU4MDIxMV9zdGFfdXBkYXRlX3BlbmRpbmdfYWlydGltZShsb2NhbCwgdHguc3RhLCB0eHEtJmd0O2FjLAomIzQzOwkJCQkJCSAgICAgYWlydGltZSwgZmFsc2UsCiYjNDM7CQkJCQkJICAgICBpbmZvLSZndDt0eF90aW1lX21jKTsKIAl9CiAKIAlyZXR1cm4gc2tiOwpAQCAtNDExOSw2ICYjNDM7NDExOSw3IEBAIHN0cnVjdCBpZWVlODAyMTFfdHhxICppZWVlODAyMTFfbmV4dF90eHEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKQogCXN0cnVjdCBpZWVlODAyMTFfdHhxICpyZXQgPSBOVUxMOwogCXN0cnVjdCB0eHFfaW5mbyAqdHhxaSA9IE5VTEwsICpoZWFkID0gTlVMTDsKIAlib29sIGZvdW5kX2VsaWdpYmxlX3R4cSA9IGZhbHNlOwomIzQzOwlib29sIGFxbF9jaGVjazsKIAogCXNwaW5fbG9ja19iaCgmYW1wO2xvY2FsLSZndDthY3RpdmVfdHhxX2xvY2tbYWNdKTsKIApAQCAtNDE0MiwyNiAmIzQzOzQxNDMsMjggQEAgc3RydWN0IGllZWU4MDIxMV90eHEgKmllZWU4MDIxMV9uZXh0X3R4cShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggYWMpCiAJaWYgKCFoZWFkKQogCQloZWFkID0gdHhxaTsKIAomIzQzOwlhcWxfY2hlY2sgPSBpZWVlODAyMTFfdHhxX2FpcnRpbWVfY2hlY2soaHcsICZhbXA7dHhxaS0mZ3Q7dHhxKTsKJiM0MzsJaWYgKGFxbF9jaGVjaykKJiM0MzsJCWZvdW5kX2VsaWdpYmxlX3R4cSA9IHRydWU7CiYjNDM7CiAJaWYgKHR4cWktJmd0O3R4cS5zdGEpIHsKIAkJc3RydWN0IHN0YV9pbmZvICpzdGEgPSBjb250YWluZXJfb2YodHhxaS0mZ3Q7dHhxLnN0YSwKIAkJCQkJCSAgICBzdHJ1Y3Qgc3RhX2luZm8sIHN0YSk7Ci0JCWJvb2wgYXFsX2NoZWNrID0gaWVlZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrKGh3LCAmYW1wO3R4cWktJmd0O3R4cSk7Ci0JCXMzMiBkZWZpY2l0ID0gaWVlZTgwMjExX3N0YV9kZWZpY2l0KHN0YSwgdHhxaS0mZ3Q7dHhxLmFjKTsKIAotCQlpZiAoYXFsX2NoZWNrKQotCQkJZm91bmRfZWxpZ2libGVfdHhxID0gdHJ1ZTsKLQotCQlpZiAoZGVmaWNpdCAmbHQ7IDApCiYjNDM7CQlpZiAoaWVlZTgwMjExX3N0YV9kZWZpY2l0KHN0YSwgdHhxaS0mZ3Q7dHhxLmFjKSAmbHQ7IDApIHsKIAkJCXN0YS0mZ3Q7YWlydGltZVt0eHFpLSZndDt0eHEuYWNdLmRlZmljaXQgJiM0Mzs9CiAJCQkJc3RhLSZndDthaXJ0aW1lX3dlaWdodDsKIAotCQlpZiAoZGVmaWNpdCAmbHQ7IDAgfHwgIWFxbF9jaGVjaykgewotCQkJbGlzdF9tb3ZlX3RhaWwoJmFtcDt0eHFpLSZndDtzY2hlZHVsZV9vcmRlciwKLQkJCQkgICAgICAgJmFtcDtsb2NhbC0mZ3Q7YWN0aXZlX3R4cXNbdHhxaS0mZ3Q7dHhxLmFjXSk7Ci0JCQlnb3RvIGJlZ2luOwomIzQzOwkJCWFxbF9jaGVjayA9IGZhbHNlOwogCQl9CiAJfQogCiYjNDM7CWlmICghYXFsX2NoZWNrKSB7CiYjNDM7CQlsaXN0X21vdmVfdGFpbCgmYW1wO3R4cWktJmd0O3NjaGVkdWxlX29yZGVyLAomIzQzOwkJCQkgICAmYW1wO2xvY2FsLSZndDthY3RpdmVfdHhxc1t0eHFpLSZndDt0eHEuYWNdKTsKJiM0MzsJCWdvdG8gYmVnaW47CiYjNDM7CX0KJiM0MzsKIAlpZiAodHhxaS0mZ3Q7c2NoZWR1bGVfcm91bmQgPT0gbG9jYWwtJmd0O3NjaGVkdWxlX3JvdW5kW2FjXSkKIAkJZ290byBvdXQ7CiAKQEAgLTQyMjgsNyAmIzQzOzQyMzEsOCBAQCBib29sIGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVjayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJcmV0dXJuIHRydWU7CiAKIAlpZiAoIXR4cS0mZ3Q7c3RhKQotCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCXJldHVybiBhdG9taWNfcmVhZCgmYW1wO2xvY2FsLSZndDthcWxfbWNfcGVuZGluZ19haXJ0aW1lKSAmbHQ7CiYjNDM7CQkgICAgICAgbG9jYWwtJmd0O2FxbF90eHFfbGltaXRfbWM7CiAKIAlpZiAodW5saWtlbHkodHhxLSZndDt0aWQgPT0gSUVFRTgwMjExX05VTV9USURTKSkKIAkJcmV0dXJuIHRydWU7CkBAIC00MjQ4LDYgJiM0Mzs0MjUyLDI0IEBAIGJvb2wgaWVlZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdHhxX2FpcnRpbWVfY2hlY2spOwogCiYjNDM7dTMyIGllZWU4MDIxMV90eHFfYXFsX3BlbmRpbmcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiYjNDM7CQkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eHEgKnR4cSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwomIzQzOwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KHR4cS0mZ3Q7dGlkID09IElFRUU4MDIxMV9OVU1fVElEUykpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKCF0eHEtJmd0O3N0YSkKJiM0MzsJCXJldHVybiBhdG9taWNfcmVhZCgmYW1wO2xvY2FsLSZndDthcWxfbWNfcGVuZGluZ19haXJ0aW1lKTsKJiM0MzsKJiM0MzsJc3RhID0gY29udGFpbmVyX29mKHR4cS0mZ3Q7c3RhLCBzdHJ1Y3Qgc3RhX2luZm8sIHN0YSk7CiYjNDM7CiYjNDM7CXJldHVybiBhdG9taWNfcmVhZCgmYW1wO3N0YS0mZ3Q7YWlydGltZVt0eHEtJmd0O2FjXS5hcWxfdHhfcGVuZGluZyk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3R4cV9hcWxfcGVuZGluZyk7CiYjNDM7CiBzdGF0aWMgYm9vbAogaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9haXJ0aW1lX2NoZWNrKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1OCBhYykKIHsKQEAgLTQyNzcsMTUgJiM0Mzs0Mjk5LDE1IEBAIGJvb2wgaWVlZTgwMjExX3R4cV9tYXlfdHJhbnNtaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAKIAlzcGluX2xvY2tfYmgoJmFtcDtsb2NhbC0mZ3Q7YWN0aXZlX3R4cV9sb2NrW2FjXSk7CiAKLQlpZiAoIXR4cWktJmd0O3R4cS5zdGEpCi0JCWdvdG8gb3V0OwotCiAJaWYgKGxpc3RfZW1wdHkoJmFtcDt0eHFpLSZndDtzY2hlZHVsZV9vcmRlcikpCiAJCWdvdG8gb3V0OwogCiAJaWYgKCFpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2FpcnRpbWVfY2hlY2sobG9jYWwsIGFjKSkKIAkJZ290byBvdXQ7CiAKJiM0MzsJaWYgKCF0eHFpLSZndDt0eHEuc3RhKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGl0ZXIsIHRtcCwgJmFtcDtsb2NhbC0mZ3Q7YWN0aXZlX3R4cXNbYWNdLAogCQkJCSBzY2hlZHVsZV9vcmRlcikgewogCQlpZiAoaXRlciA9PSB0eHFpKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDUxMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDMxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIG1hYzgwMjExIFBhdGNoIGZvciBBUUwgYW5kIFRocm91Z2hwdXQgTW9kaWZpY2F0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgbWFraW5nIHNvbWUgaW50ZXJlc3RpbmcgY2hhbmdlcyB0byB0aGUgYG1hYzgwMjExYCB3aXJlbGVzcyBzdGFjay4gTG9va3MgbGlrZSBpdCYjMzk7cyBhZGRpbmcgQWlydGltZSBRdWV1ZSBMaW1pdCAoQVFMKSBzdXBwb3J0LCBzcGVjaWZpY2FsbHkgZm9yIG11bHRpY2FzdCB0cmFmZmljIOKAkyB0aGF0JiMzOTtzIGEga2V5IGFyZWEgdG8gb3B0aW1pemUuIEl0JiMzOTtzIGFsc28gbW9kaWZ5aW5nIGhvdyB0aGUgZXhwZWN0ZWQgdGhyb3VnaHB1dCBmb3Igc3RhdGlvbnMgaXMgY2FsY3VsYXRlZC4gVGhhdCYjMzk7cyBpbnRyaWd1aW5nOyBnZXR0aW5nIHRob3NlIHRocm91Z2hwdXQgZXN0aW1hdGlvbnMgcmlnaHQgaXMgY3J1Y2lhbCBmb3IgYWlydGltZSBmYWlybmVzcyBhbmQgb3ZlcmFsbCBwZXJmb3JtYW5jZS4KCkkgc2VlIGl0IHRvdWNoZXMgcXVpdGUgYSBmZXcgY29yZSBmaWxlczogYGNmZzgwMjExLmhgLCBgbWFjODAyMTEuaGAsIHRoZSBhaXJ0aW1lIGltcGxlbWVudGF0aW9uIChgYWlydGltZS5jYCksIGRlYnVnIGZhY2lsaXRpZXMsIGludGVybmFsIElFRUU4MDIxMSBzdHJ1Y3R1cmVzLCB0aGUgbWFpbiBtb2R1bGUgKGBtYWluLmNgKSwgc3RhdGlvbiBpbmZvcm1hdGlvbiBtYW5hZ2VtZW50IChgc3RhX2luZm8uY2AsIGBzdGFfaW5mby5oYCksIHN0YXR1cyB1cGRhdGVzLCBhbmQgdGhlIHRyYW5zbWl0IHBhdGggKGB0eC5jYCkuIFRoYXQgaW5kaWNhdGVzIGl04oCZcyByZWFsbHkgZ2V0dGluZyBpbnRvIHRoZSBoZWFydCBvZiB0aGUgc3RhY2suCgpOb3csIEkgbmVlZCB0byB2ZXJpZnkgaXRzIHJlYWNoYWJpbGl0eSBhbmQgZnVuY3Rpb25hbGl0eS4gU2luY2UgaXQmIzM5O3MgbW9kaWZ5aW5nIHRoZSBjb3JlIGxvZ2ljIHJlbGF0ZWQgdG8gYWlydGltZSBjYWxjdWxhdGlvbnMsIHRyYW5zbWlzc2lvbiBxdWV1ZSAodHhxKSBhaXJ0aW1lIGNoZWNrcywgYW5kIHN0YXRpb24gdGhyb3VnaHB1dCwgSSBuZWVkIHRvIGtub3cgaG93IHRvIHRlc3QgdGhpcy4gSSB0aGluayBJIGNhbiB1c2UgYG1hYzgwMjExX2h3c2ltYCB0byByZWFjaCBpdCwgd2hpY2ggaXMgaWRlYWwgZm9yIHRoaXMga2luZCBvZiBsb3ctbGV2ZWwgbW9kaWZpY2F0aW9uLgoKQmVmb3JlIEkgZ28gZnVydGhlciwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gTmF0dXJhbGx5LCBgTUFDODAyMTFgIGl0c2VsZiBpcyBhIGdpdmVuLiBJIHNob3VsZCBzZWFyY2ggdGhlIEtjb25maWcgZmlsZXMgZm9yIGFueSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBBUUwgc3BlY2lmaWNhbGx5LCBwYXJ0aWN1bGFybHkgYE5MODAyMTFfRVhUX0ZFQVRVUkVfQVFMYCBvciBqdXN0IGBBUUxgIHRvIG1ha2Ugc3VyZSB0aGUgZmVhdHVyZSBpcyBwcm9wZXJseSBlbmFibGVkLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0FRTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI1OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6CgoqKkRpZ2dpbmcgaW50byBtYWM4MDIxMSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGlzIHByb2JsZW0sIEkgd2FudCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3Qgb3Zlcmxvb2tpbmcgc29tZXRoaW5nIG9idmlvdXMuIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGdvaW5nIHRvIGRvIGlzIHF1aWNrbHkgc2NhbiBteSBtZW50YWwgZGF0YWJhc2UuIFRoZXJlJiMzOTtzIGEgZ29vZCBjaGFuY2UgSSBhbHJlYWR5IGtub3cgdGhpcywgYnV0IGxldCYjMzk7cyBqdXN0IG1ha2UgYWJzb2x1dGVseSBjZXJ0YWluLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHNwZWNpZmljYWxseSBjaGVjayBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byAqbWFjODAyMTEqIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBiZSBtZXRob2RpY2FsIGhlcmUuIEFyZSB0aGVyZSBhbnkgY3VzdG9tIGRpcmVjdGl2ZXMsIG1vZHVsZSBwYXJhbWV0ZXJzLCBvciBxdWlya3MgdGhhdCBtaWdodCBiZSBpbmZsdWVuY2luZyB0aGUgYmVoYXZpb3IgSSYjMzk7bSBzZWVpbmc/IEkmIzM5O20gdGFsa2luZyBhYm91dCBhbnl0aGluZyB0aGF0IGNvdWxkIGJlIGEgc3BlY2lmaWMsIHRhcmdldGVkIHNldHRpbmcgZm9yIHRoYXQgc3Vic3lzdGVtLCBiZWZvcmUgSSBzdGFydCBsb29raW5nIGF0IG1vcmUgZ2VuZXJpYyBrZXJuZWwgb3Igc3lzdGVtLXdpZGUgc2V0dGluZ3MuIEl0JiMzOTtzIG9mdGVuIHRoZSBjYXNlIHRoYXQgc29tZSBzdWJ0bGUgY29uZmlndXJhdGlvbiBpcyBqdXN0IG92ZXJsb29rZWQgaW4gdGhlIG5vaXNlLiBJIHdvdWxkIGhhdGUgdG8gc3BlbmQgbW9yZSB0aGFuIGEgbWludXRlIG9uIGEgY29tcGxleCBzb2x1dGlvbiBvbmx5IHRvIHJlYWxpc2UgdGhhdCBhIHNpbXBsZSBjb25maWcgd2FzIG1pc3NlZC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIHNvbWV0aGluZyBiYXNpYyB0aGF0JiMzOTtzIHNwZWNpZmljIHRvIHRoZSBtYWM4MDIxMSBkcml2ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1BQzgwMjExJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI6Y29uZmlnIE1BQzgwMjExXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBJRUVFIDgwMi4xMSBOZXR3b3JraW5nIFN0YWNrIChtYWM4MDIxMSlcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz0xOT1pZiBNQUM4MDIxMSAhPSBuXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIxOmNvbmZpZyBNQUM4MDIxMV9IQVNfUkNcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyLVx0Ym9vbFxubmV0L21hYzgwMjExL0tjb25maWctMjMtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNDpjb25maWcgTUFDODAyMTFfUkNfTUlOU1RSRUxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1LVx0Ym9vbCBcJiMzNDtNaW5zdHJlbFwmIzM0OyBpZiBFWFBFUlRcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz0zMT1jaG9pY2Vcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00MC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjQxOmNvbmZpZyBNQUM4MDIxMV9SQ19ERUZBVUxUX01JTlNUUkVMXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00Mi1cdGJvb2wgXCYjMzQ7TWluc3RyZWxcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz00OD1lbmRjaG9pY2Vcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQ5LVxubmV0L21hYzgwMjExL0tjb25maWc6NTA6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTUxLVx0c3RyaW5nXG4tLVxubmV0L21hYzgwMjExL0tjb25maWc9NTc9Y29tbWVudCBcJiMzNDtTb21lIHdpcmVsZXNzIGRyaXZlcnMgcmVxdWlyZSBhIHJhdGUgY29udHJvbCBhbGdvcml0aG1cJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01OS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjYwOmNvbmZpZyBNQUM4MDIxMV9LVU5JVF9URVNUXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02MS1cdHRyaXN0YXRlIFwmIzM0O0tVbml0IHRlc3RzIGZvciBtYWM4MDIxMVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubmV0L21hYzgwMjExL0tjb25maWctNjktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3MDpjb25maWcgTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL0tjb25maWctNzEtXHRib29sIFwmIzM0O0VuYWJsZSBtYWM4MDIxMSBtZXNoIG5ldHdvcmtpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTc4LVxubmV0L21hYzgwMjExL0tjb25maWc6Nzk6Y29uZmlnIE1BQzgwMjExX0xFRFNcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTgwLVx0Ym9vbCBcJiMzNDtFbmFibGUgTEVEIHRyaWdnZXJzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctODctXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo4ODpjb25maWcgTUFDODAyMTFfREVCVUdGU1xubmV0L21hYzgwMjExL0tjb25maWctODktXHRib29sIFwmIzM0O0V4cG9ydCBtYWM4MDIxMSBpbnRlcm5hbHMgaW4gRGVidWdGU1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTk2LVxubmV0L21hYzgwMjExL0tjb25maWc6OTc6Y29uZmlnIE1BQzgwMjExX01FU1NBR0VfVFJBQ0lOR1xubmV0L21hYzgwMjExL0tjb25maWctOTgtXHRib29sIFwmIzM0O1RyYWNlIGFsbCBtYWM4MDIxMSBkZWJ1ZyBtZXNzYWdlc1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEwOS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExMDptZW51Y29uZmlnIE1BQzgwMjExX0RFQlVHX01FTlVcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExMS1cdGJvb2wgXCYjMzQ7U2VsZWN0IG1hYzgwMjExIGRlYnVnZ2luZyBmZWF0dXJlc1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExNS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExNjpjb25maWcgTUFDODAyMTFfTk9JTkxJTkVcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExNy1cdGJvb2wgXCYjMzQ7RG8gbm90IGlubGluZSBUWC9SWCBoYW5kbGVyc1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEzMS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjEzMjpjb25maWcgTUFDODAyMTFfVkVSQk9TRV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTMzLVx0Ym9vbCBcJiMzNDtWZXJib3NlIGRlYnVnZ2luZyBvdXRwdXRcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNDItXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNDM6Y29uZmlnIE1BQzgwMjExX01MTUVfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0NC1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtYW5hZ2VkIE1MTUUgb3V0cHV0XCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTUzLVxubmV0L21hYzgwMjExL0tjb25maWc6MTU0OmNvbmZpZyBNQUM4MDIxMV9TVEFfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE1NS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBzdGF0aW9uIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE2Mi1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE2Mzpjb25maWcgTUFDODAyMTFfSFRfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE2NC1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBIVCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNzQtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNzU6Y29uZmlnIE1BQzgwMjExX09DQl9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTc2LVx0Ym9vbCBcJiMzNDtWZXJib3NlIE9DQiBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODUtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxODY6Y29uZmlnIE1BQzgwMjExX0lCU1NfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4Ny1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBJQlNTIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE5Ni1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE5Nzpjb25maWcgTUFDODAyMTFfUFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE5OC1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBwb3dlcnNhdmUgbW9kZSBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMDgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMDk6Y29uZmlnIE1BQzgwMjExX01QTF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjEwLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggcGVlciBsaW5rIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyMS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIyMjpjb25maWcgTUFDODAyMTFfTVBBVEhfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyMy1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHBhdGggZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjM0LVxubmV0L21hYzgwMjExL0tjb25maWc6MjM1OmNvbmZpZyBNQUM4MDIxMV9NSFdNUF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjM2LVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggSFdNUCByb3V0aW5nIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0Ny1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0ODpjb25maWcgTUFDODAyMTFfTUVTSF9TWU5DX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNDktXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBzeW5jaHJvbml6YXRpb24gZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjU4LVxubmV0L21hYzgwMjExL0tjb25maWc6MjU5OmNvbmZpZyBNQUM4MDIxMV9NRVNIX0NTQV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjYwLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggY2hhbm5lbCBzd2l0Y2ggZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjY5LVxubmV0L21hYzgwMjExL0tjb25maWc6MjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIX1BTX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNzEtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBwb3dlcnNhdmUgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjgwLVxubmV0L21hYzgwMjExL0tjb25maWc6MjgxOmNvbmZpZyBNQUM4MDIxMV9URExTX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODItXHRib29sIFwmIzM0O1ZlcmJvc2UgVERMUyBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yOTItXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOTM6Y29uZmlnIE1BQzgwMjExX0RFQlVHX0NPVU5URVJTXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yOTQtXHRib29sIFwmIzM0O0V4dHJhIHN0YXRpc3RpY3MgZm9yIFRYL1JYIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMwNy1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjMwODpjb25maWcgTUFDODAyMTFfU1RBX0hBU0hfTUFYX1NJWkVcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMwOS1cdGludCBcJiMzNDtTdGF0aW9uIGhhc2ggdGFibGUgbWF4aW11bSBzaXplXCYjMzQ7IGlmIE1BQzgwMjExX0RFQlVHX01FTlVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc0NQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDExNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1hYzgwMjExIEFpcnRpbWUgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgY2FuIHNlZSBpdCYjMzk7cyB0b3VjaGluZyBzb21lIGNyaXRpY2FsIHBhcnRzIG9mIHRoZSBtYWM4MDIxMSBhaXJ0aW1lIG1hbmFnZW1lbnQgc3lzdGVtLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIG1vZGlmeWluZyBgaWVlZTgwMjExX3JhdGVfZXhwZWN0ZWRfdHhfYWlydGltZWAsIGBpZWVlODAyMTFfY2FsY19leHBlY3RlZF90eF9haXJ0aW1lYCwgYGllZWU4MDIxMV9zdGFfdXBkYXRlX3BlbmRpbmdfYWlydGltZWAsIGBpZWVlODAyMTFfdHhxX2FpcnRpbWVfY2hlY2tgLCBhbmQgYGllZWU4MDIxMV90eHFfYXFsX3BlbmRpbmdgLiBUaGVzZSBhcmUgYWxsIGNvcmUgZnVuY3Rpb25zIOKAkyBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MsIHJlYWxseSDigJMgd2l0aGluIHRoZSBmcmFtZXdvcmssIGVzcGVjaWFsbHkgYXMgdGhleSByZWxhdGUgdG8gY2FsY3VsYXRpbmcgYW5kIG1hbmFnaW5nIHRyYW5zbWlzc2lvbiBhaXJ0aW1lIGZvciA4MDIuMTEgZnJhbWVzLiBUaGUgY2hhbmdlcyBoZXJlIGNvdWxkIGJlIHByZXR0eSBpbXBhY3RmdWwsIGFmZmVjdGluZyBzY2hlZHVsaW5nLCBmYWlybmVzcywgYW5kIG92ZXJhbGwgcGVyZm9ybWFuY2UuIFRpbWUgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kICp3aHkqIHRoZXNlIHNwZWNpZmljIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdGFyZ2V0ZWQuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGtleSBmdW5jdGlvbnMgc28gSSBjYW4gcHJvcGVybHkgYXNzZXNzIHRoZSBpbXBsaWNhdGlvbiBvZiB0aGUgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWVlZTgwMjExX3JhdGVfZXhwZWN0ZWRfdHhfYWlydGltZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL2FpcnRpbWUuYz03NTQ9RVhQT1JUX1NZTUJPTF9HUEwoaWVlZTgwMjExX2NhbGNfdHhfYWlydGltZSk7XG5uZXQvbWFjODAyMTEvYWlydGltZS5jLTc1NS1cbm5ldC9tYWM4MDIxMS9haXJ0aW1lLmM6NzU2OnUzMiBpZWVlODAyMTFfcmF0ZV9leHBlY3RlZF90eF9haXJ0aW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxubmV0L21hYzgwMjExL2FpcnRpbWUuYy03NTctXHRcdFx0XHQgICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICp0eF9yYXRlLFxuLS1cbm5ldC9tYWM4MDIxMS9haXJ0aW1lLmM9ODAzPXUzMiBpZWVlODAyMTFfY2FsY19leHBlY3RlZF90eF9haXJ0aW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbm5ldC9tYWM4MDIxMS9haXJ0aW1lLmMtODI4LVxubmV0L21hYzgwMjExL2FpcnRpbWUuYzo4Mjk6XHRcdGR1cmF0aW9uID0gaWVlZTgwMjExX3JhdGVfZXhwZWN0ZWRfdHhfYWlydGltZShodywgdHhfcmF0ZSwgcmksXG5uZXQvbWFjODAyMTEvYWlydGltZS5jLTgzMC1cdFx0XHRcdFx0XHRcdCAgICAgIGJhbmQsIHRydWUsIGxlbik7XG4tLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9Mjk0Mj1leHRlcm4gY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGllZWU4MDIxMV9ldGh0b29sX29wcztcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTI5NDMtXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoyOTQ0OnUzMiBpZWVlODAyMTFfcmF0ZV9leHBlY3RlZF90eF9haXJ0aW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjk0NS1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnR4X3JhdGUsXG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9MjgxNT1zdGF0aWMgdTMyIHN0YV9lc3RpbWF0ZV9leHBlY3RlZF90aHJvdWdocHV0KHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTI4MjgtXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzoyODI5Olx0ZHVyYXRpb24gPSBpZWVlODAyMTFfcmF0ZV9leHBlY3RlZF90eF9haXJ0aW1lKGh3LCBOVUxMLCByaSwgYmFuZCwgdHJ1ZSwgMTAyNCk7XG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0yODMwLVx0ZHVyYXRpb24gJiM0Mzs9IGR1cmF0aW9uIFx1MDAzZVx1MDAzZSA0OyAvKiBhZGQgYXNzdW1lZCBwYWNrZXQgZXJyb3IgcmF0ZSBvZiB+NiUgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDgwMAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIGBpZWVlODAyMTFfdHhxX2FxbF9wZW5kaW5nYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBpZWVlODAyMTFfdHhxX2FxbF9wZW5kaW5nYC4gVGhhdCBmdW5jdGlvbiBuYW1lIGl0c2VsZiBpcyBhIHByZXR0eSBiaWcgY2x1ZS4gSXQmIzM5O3Mgb2J2aW91c2x5IHJlbGF0ZWQgdG8gdGhlIDgwMi4xMSB0cmFuc21pdCBxdWV1ZSBhbmQgbGlrZWx5IGNvbm5lY3RlZCB0byBBY3RpdmUgUXVldWUgTWFuYWdlbWVudCAoQVFNKS4gSSYjMzk7bSBhc3N1bWluZyB3ZSYjMzk7cmUgbG9va2luZyBhdCBwZW5kaW5nIHBhY2tldHMsIHRoZSBvbmVzIHdhaXRpbmcgdG8gYmUgc2VudCwgcmlnaHQ/IEdpdmVuIHRoZSBjb250ZXh0IG9mIEFRTSwgSSYjMzk7ZCBiZXQgd2UmIzM5O3JlIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJiMzOTtzIGJhY2sgcHJlc3N1cmUgb3IgY29uZ2VzdGlvbiB3aXRoaW4gdGhlIHF1ZXVlLiBXZSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gcmVwb3J0cyB0aGUgc3RhdGUgb2YgdGhpbmdzOyBkb2VzIGl0IHJldHVybiBhIHNpbXBsZSBjb3VudCwgYSBib29sZWFuIGluZGljYXRpbmcgaWYgKmFueSogcGFja2V0cyBhcmUgcGVuZGluZywgb3Igc29tZXRoaW5nIG1vcmUgbnVhbmNlZCBsaWtlIGEgcGVyLUFDIChBY2Nlc3MgQ2F0ZWdvcnkpIGJyZWFrZG93biBvciBldmVuIHNvbWUga2luZCBvZiBlc3RpbWF0ZSBvZiB0aGUgcXVldWVkIGJ5dGVzPyBBcmUgd2UgdGFsa2luZyBhYm91dCBwYWNrZXRzICplbnF1ZXVlZCogYnV0IG5vdCB5ZXQgKnRyYW5zbWl0dGVkKiwgb3IgZG8gd2UgaW5jbHVkZSBwYWNrZXRzIGluIGZsaWdodCB0byBhIGRlZ3JlZT8gVGhpcyB3aWxsIGFmZmVjdCBob3cgaXQmIzM5O3MgdXNlZCB3aXRoaW4gYSBsYXJnZXIgQVFNIGNvbnRyb2wgbG9vcC4gSSYjMzk7ZCBuZWVkIHRvIGNvbmZpcm0gd2hhdCB0aGUgZnVuY3Rpb24gZG9lcyB3aXRoIGl0cyBwYXJhbWV0ZXJzIC0gYXJlIHRoZXkgdGhlIFRYIHF1ZXVlIGl0c2VsZiwgc3BlY2lmaWMgQUNzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSBxdWljayBwZWVrIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBpdHMgaW50ZW5kZWQgdXNlIHdpbGwgYmUgdXNlZnVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZWVlODAyMTFfdHhxX2FxbF9wZW5kaW5nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvdHguYz00MjUzPUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrKTtcbm5ldC9tYWM4MDIxMS90eC5jLTQyNTQtXG5uZXQvbWFjODAyMTEvdHguYzo0MjU1OnUzMiBpZWVlODAyMTFfdHhxX2FxbF9wZW5kaW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxubmV0L21hYzgwMjExL3R4LmMtNDI1Ni1cdFx0XHQgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqdHhxKVxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTQyNzAtfVxubmV0L21hYzgwMjExL3R4LmM6NDI3MTpFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV90eHFfYXFsX3BlbmRpbmcpO1xubmV0L21hYzgwMjExL3R4LmMtNDI3Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTQ6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0MDUKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkRpdmluZyBpbnRvIGBpZWVlODAyMTFfdHhxX2FpcnRpbWVfY2hlY2tgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIGl0LiBMZXQmIzM5O3MgZGlnIGludG8gYGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVja2AuIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsLiBJdCYjMzk7cyB0aGUgZ2F0ZWtlZXBlciwgdGhlIGFyYml0ZXIgb2YgZmFpcm5lc3MgaW4gb3VyIHdpcmVsZXNzIHN0YWNrLiBUaGlzIGlzIHdoZXJlIHdlIGRlY2lkZSBpZiBhIGZyYW1lIGdldHMgYWlydGltZSBvciBnZXRzIGhlbGQgYmFjaywgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0IGNvbGQuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHRoZSBndXRzIG9mIGhvdyB3ZSBtYW5hZ2UgY29udGVudGlvbiBhbmQgcHJpb3JpdGl6ZSB0cmFmZmljIGluIHRoaXMgaW50ZXJmYWNlLiBJIHdhbnQgdG8gc2VlIGhvdyBpdCYjMzk7cyBtYWtpbmcgaXRzIGRldGVybWluYXRpb25zOiB3aGF0IGZhY3RvcnMgYXJlIGJlaW5nIGNvbnNpZGVyZWQsIHdoYXQgdGhlIHRocmVzaG9sZHMgYXJlLCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBsb2dpYyBmbG93IGlzLiBLbm93aW5nIHRoaXMgZnVuY3Rpb24mIzM5O3MgbG9naWMgaXMgYWJzb2x1dGVseSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIG9mIG91ciB3aXJlbGVzcyBuZXR3b3JrIHVuZGVyIGxvYWQuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIGFpcnRpbWUgZmFpcm5lc3MgYW5kIGFueSBvdGhlciBhZG1pc3Npb24gY29udHJvbCBtZWNoYW5pc21zIHdlJiMzOTt2ZSBpbXBsZW1lbnRlZC4gSXMgdGhlcmUgYSBwb3RlbnRpYWwgYm90dGxlbmVjaz8gQXJlIHRoZXJlIGFueSBoaWRkZW4gYnVncyBsdXJraW5nIHRoYXQgY291bGQgYmUgY2F1c2luZyB1bmZhaXIgZGlzdHJpYnV0aW9uIG9yIHVuZXhwZWN0ZWQgZHJvcHM/IEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGFsZ29yaXRobSBpcyByb2J1c3QsIHRoYXQgaXQgYWNjb3VudHMgZm9yIG91ciB2YXJpb3VzIHRyYWZmaWMgdHlwZXMsIGFuZCB0aGF0IGl0JiMzOTtzIG9wdGltaXplZCBhcyBiZXN0IGFzIGNhbiBiZS4gVGhpcyBpcyBhIGNyaXRpY2FsIGJ1aWxkaW5nIGJsb2NrLCBzbyBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTQ6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWVlZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvdHguYz0zODc1PXN0cnVjdCBza19idWZmICppZWVlODAyMTFfdHhfZGVxdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5uZXQvbWFjODAyMTEvdHguYy0zODkzLVxubmV0L21hYzgwMjExL3R4LmM6Mzg5NDpcdGlmICghaWVlZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrKGh3LCB0eHEpKVxubmV0L21hYzgwMjExL3R4LmMtMzg5NS1cdFx0cmV0dXJuIE5VTEw7XG4tLVxubmV0L21hYzgwMjExL3R4LmM9NDExNj1zdHJ1Y3QgaWVlZTgwMjExX3R4cSAqaWVlZTgwMjExX25leHRfdHhxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBhYylcbi0tXG5uZXQvbWFjODAyMTEvdHguYy00MTQ1LVxubmV0L21hYzgwMjExL3R4LmM6NDE0NjpcdGFxbF9jaGVjayA9IGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVjayhodywgXHUwMDI2dHhxaS1cdTAwM2V0eHEpO1xubmV0L21hYzgwMjExL3R4LmMtNDE0Ny1cdGlmIChhcWxfY2hlY2spXG4tLVxubmV0L21hYzgwMjExL3R4LmM9NDIxOT1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShhcWxfZGlzYWJsZSk7XG5uZXQvbWFjODAyMTEvdHguYy00MjIwLVxubmV0L21hYzgwMjExL3R4LmM6NDIyMTpib29sIGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVjayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbm5ldC9tYWM4MDIxMS90eC5jLTQyMjItXHRcdFx0XHQgc3RydWN0IGllZWU4MDIxMV90eHEgKnR4cSlcbi0tXG5uZXQvbWFjODAyMTEvdHguYy00MjUyLX1cbm5ldC9tYWM4MDIxMS90eC5jOjQyNTM6RVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdHhxX2FpcnRpbWVfY2hlY2spO1xubmV0L21hYzgwMjExL3R4LmMtNDI1NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTQ6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyOTgKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgaWVlZTgwMjExX3N0YV91cGRhdGVfcGVuZGluZ19haXJ0aW1lYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBpZWVlODAyMTFfc3RhX3VwZGF0ZV9wZW5kaW5nX2FpcnRpbWVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHBlbmRpbmcgYWlydGltZSB1cGRhdGVzIGZvciBhIHN0YXRpb24uIE15IGluaXRpYWwgZm9jdXMgaXMgbGlrZWx5IHRvIGJlIG9uIHRoZSBmdW5jdGlvbiYjMzk7cyBjb3JlIGxvZ2ljLiBXaGF0IHRyaWdnZXJzIHRoaXMgdXBkYXRlPyBJcyBpdCByZWxhdGVkIHRvIFFvUywgYWRtaXNzaW9uIGNvbnRyb2wsIG9yIHNvbWUgZm9ybSBvZiByYXRlIGFkYXB0YXRpb24/IEkgZXhwZWN0IHRvIHNlZSBjb25kaXRpb25hbHMgYW5kIHBvc3NpYmx5IGxvb3BzIHJlbGF0ZWQgdG8gY2hlY2tpbmcgdmFyaW91cyBhaXJ0aW1lIGNhbGN1bGF0aW9uIHBhcmFtZXRlcnMuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgbW9kaWZpZWQgd2l0aGluIHRoaXMgZnVuY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgYGllZWU4MDIxMV9zdGFgIHN0cnVjdHVyZSBhbmQgYW55IHJlbGF0ZWQgc3RydWN0cyDigJMgcHJvYmFibHkgc29tZXRoaW5nIGNvbnRhaW5pbmcgYWlydGltZSB1c2FnZSBvciBncmFudGVkIHRpbWUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHNlZSBob3cgdGhlIHBlbmRpbmcgYWlydGltZSBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIG92ZXJhbGwgYWlydGltZSBhY2NvdW50aW5nIGZvciBhIHN0YXRpb24uIElzIHRoaXMgYSBzaW1wbGUgaW5jcmVtZW50LCBvciBkb2VzIGl0IGludm9sdmUgbW9yZSBzb3BoaXN0aWNhdGVkIGNhbGN1bGF0aW9ucywgcGVyaGFwcyB0YWtpbmcgaW50byBhY2NvdW50IGNoYW5uZWwgY29uZGl0aW9ucyBhbmQgcGFja2V0IGNoYXJhY3RlcmlzdGljcz8KCkJleW9uZCB0aGUgZGlyZWN0IG1vZGlmaWNhdGlvbiBvZiBkYXRhIHN0cnVjdHVyZXMsIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gRG9lcyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0IHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHNjaGVkdWxlciwgc3VjaCBhcyBwYWNrZXQgcXVldWluZyBvciB0cmFuc21pc3Npb24gc2NoZWR1bGluZz8gSSB3YW50IHRvIHNlZSBpZiBhbnkgbG9ja3MgYXJlIHRha2VuLCBhbmQgd2hlcmUgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC4gV2hhdCBpbnRlcnJ1cHQgY29udGV4dCBkb2VzIGl0IHJ1biBpbj8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGFyZWFzIGZvciBvcHRpbWl6YXRpb24sIG9yIGNvbW1vbiBwaXRmYWxscyB0aGF0IGNvdWxkIGxlYWQgdG8gYWlydGltZSBzdGFydmF0aW9uIG9yIHVuZmFpciBhbGxvY2F0aW9uPyBJIGFsc28gbmVlZCB0byBzZWUgYW55IG90aGVyIHJlbGF0ZWQgdXBkYXRlIGZ1bmN0aW9ucy4gVGhpcyBjb3VsZCBnaXZlIG1lIGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyB0aGUgYWlydGltZSBhbGxvY2F0aW9uIHN5c3RlbSB3b3Jrcy4KCkkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgYSBkZWxpY2F0ZSBiYWxhbmNlIGJldHdlZW4gYWNjdXJhY3ksIG92ZXJoZWFkLCBhbmQgZmFpcm5lc3MgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0cmFkZS1vZmZzIHRoZSBkZXZlbG9wZXJzIG1hZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE0OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2llZWU4MDIxMV9zdGFfdXBkYXRlX3BlbmRpbmdfYWlydGltZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL3N0YV9pbmZvLmM9MjQ5MD1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdGFfcmVjYWxjX2FnZ3JlZ2F0ZXMpO1xubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMjQ5MS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjI0OTI6dm9pZCBpZWVlODAyMTFfc3RhX3VwZGF0ZV9wZW5kaW5nX2FpcnRpbWUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0yNDkzLVx0XHRcdFx0XHQgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1OCBhYyxcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaD0xMzg9c3RydWN0IGFpcnRpbWVfaW5mbyB7XG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtMTQ3LVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmg6MTQ4OnZvaWQgaWVlZTgwMjExX3N0YV91cGRhdGVfcGVuZGluZ19haXJ0aW1lKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtMTQ5LVx0XHRcdFx0XHQgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1OCBhYyxcbi0tXG5uZXQvbWFjODAyMTEvc3RhdHVzLmM9NzU2PXN0YXRpYyB2b2lkIGllZWU4MDIxMV9yZXBvcnRfdXNlZF9za2Ioc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4tLVxubmV0L21hYzgwMjExL3N0YXR1cy5jLTc3My1cdFx0c3RhID0gc3RhX2luZm9fZ2V0X2J5X2FkZHJzKGxvY2FsLCBoZHItXHUwMDNlYWRkcjEsIGhkci1cdTAwM2VhZGRyMik7XG5uZXQvbWFjODAyMTEvc3RhdHVzLmM6Nzc0Olx0XHRpZWVlODAyMTFfc3RhX3VwZGF0ZV9wZW5kaW5nX2FpcnRpbWUobG9jYWwsIHN0YSxcbm5ldC9tYWM4MDIxMS9zdGF0dXMuYy03NzUtXHRcdFx0XHRcdFx0ICAgICBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSxcbi0tXG5uZXQvbWFjODAyMTEvc3RhdHVzLmM9MTE2ND12b2lkIGllZWU4MDIxMV90eF9zdGF0dXNfZXh0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbm5ldC9tYWM4MDIxMS9zdGF0dXMuYy0xMTg5LVx0XHRib29sIG1jYXN0ID0gSUVFRTgwMjExX1NLQl9DQihza2IpLVx1MDAzZXR4X3RpbWVfbWM7XG5uZXQvbWFjODAyMTEvc3RhdHVzLmM6MTE5MDpcdFx0aWVlZTgwMjExX3N0YV91cGRhdGVfcGVuZGluZ19haXJ0aW1lKGxvY2FsLCBzdGEsXG5uZXQvbWFjODAyMTEvc3RhdHVzLmMtMTE5MS1cdFx0XHRcdFx0XHQgICAgIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpLFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jPTM4NzU9c3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV90eF9kZXF1ZXVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTQwNjctXHRcdGluZm8tXHUwMDNldHhfdGltZV9tYyA9ICF0eC5zdGE7XG5uZXQvbWFjODAyMTEvdHguYzo0MDY4Olx0XHRpZWVlODAyMTFfc3RhX3VwZGF0ZV9wZW5kaW5nX2FpcnRpbWUobG9jYWwsIHR4LnN0YSwgdHhxLVx1MDAzZWFjLFxubmV0L21hYzgwMjExL3R4LmMtNDA2OS1cdFx0XHRcdFx0XHQgICAgIGFpcnRpbWUsIGZhbHNlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzU0OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNdWx0aWNhc3QgQVFMIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBBUUwgKEFpcnRpbWUgRmFpcm5lc3MgUXVldWVpbmcpIGZ1bmN0aW9uYWxpdHkgZm9yIG11bHRpY2FzdCB0cmFmZmljLiBNeSBwcmltYXJ5IGNvbmNlcm4gcmlnaHQgbm93IGlzIGVuc3VyaW5nIHRoZSBjb3JyZWN0IGludGVncmF0aW9uIGFuZCB0aGF0IHdlIGhhdmVuJiMzOTt0IG92ZXJsb29rZWQgYW55IGNydWNpYWwgY29tcG9uZW50cy4gTXkgZm9jdXMgc2hvdWxkIGJlIG9uIHZlcmlmeWluZyB0aGUgdXNhZ2Ugb2YgdGhlc2Ugc3ltYm9scyB3aXRoaW4gdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMsIHNwZWNpZmljYWxseTogYGllZWU4MDIxMV9zdGFfdXBkYXRlX3BlbmRpbmdfYWlydGltZWAsIGBpZWVlODAyMTFfdHhxX2FpcnRpbWVfY2hlY2tgLCBgaWVlZTgwMjExX3R4cV9hcWxfcGVuZGluZ2AsIGBpZWVlODAyMTFfcmF0ZV9leHBlY3RlZF90eF9haXJ0aW1lYCwgYW5kIGBzdGFfZXN0aW1hdGVfZXhwZWN0ZWRfdGhyb3VnaHB1dGAuCgpGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgTUFDODAyMTFgIGlzIHRoZSBjb3JyZWN0IGNvbmZpZyB0byBlbmFibGUgdGhpcy4gVGhlIGNvZGUmIzM5O3MgbG9jYXRlZCB3aXRoaW4gYG5ldC9tYWM4MDIxMS9gLCBzbyBJIGJlbGlldmUgYE1BQzgwMjExYCBpcyB0aGUgcmVsZXZhbnQgY29uZmlnIGl0ZW0uIEJ1dCBsZXQmIzM5O3MgYmUgYWJzb2x1dGVseSBjZXJ0YWluIOKAkyBpcyB0aGVyZSBhbnl0aGluZyBlbHNlPyBUaGUgY29kZSB1c2VzIGB3aXBoeV9leHRfZmVhdHVyZV9pc3NldChsb2NhbC0mZ3Q7aHcud2lwaHksIE5MODAyMTFfRVhUX0ZFQVRVUkVfQVFMKWAsIHdoaWNoIGluZGljYXRlcyBhIHJ1bnRpbWUgZmVhdHVyZSBmbGFnIGlzIHVzZWQuCgpJIG5lZWQgdG8gcXVpY2tseSBzY2FuIHRvIGNvbmZpcm0gdGhlcmUgYXJlIG5vIG90aGVyIGNvbmZpZ3VyYXRpb25zIG5lZWRlZC4gRnJvbSBteSBpbml0aWFsIGFzc2Vzc21lbnQsIGBNQUM4MDIxMWAgYWxvbmUgc2hvdWxkIHN1ZmZpY2UuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSYjMzk7bGwgcGVyZm9ybSBhIHF1aWNrIGRvdWJsZS1jaGVjayBvbiBob3cgYHN0YV9lc3RpbWF0ZV9leHBlY3RlZF90aHJvdWdocHV0YCBpcyB1c2VkIGluIHRoaXMgY29udGV4dC4gSXQmIzM5O3MgYSBrZXkgZWxlbWVudCwgYW5kIEkgd2FudCB0byBlbnN1cmUgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGNvcnJlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE0OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YV9lc3RpbWF0ZV9leHBlY3RlZF90aHJvdWdocHV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvc3RhX2luZm8uYz0yNzg5PXZvaWQgc3RhX3NldF9hY2N1bXVsYXRlZF9yZW1vdmVkX2xpbmtzX3NpbmZvKHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTI4MTQtXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzoyODE1OnN0YXRpYyB1MzIgc3RhX2VzdGltYXRlX2V4cGVjdGVkX3Rocm91Z2hwdXQoc3RydWN0IHN0YV9pbmZvICpzdGEsXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0yODE2LVx0XHRcdFx0XHQgICAgc3RydWN0IHJhdGVfaW5mbyAqcmksXG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9MjgzNz1zdGF0aWMgdm9pZCBzdGFfc2V0X2xpbmtfc2luZm8oc3RydWN0IHN0YV9pbmZvICpzdGEsXG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMzA1MS1cdGlmICghdGhyIFx1MDAyNlx1MDAyNiAobGlua19zaW5mby1cdTAwM2VmaWxsZWQgXHUwMDI2IEJJVF9VTEwoTkw4MDIxMV9TVEFfSU5GT19UWF9CSVRSQVRFKSkpXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzozMDUyOlx0XHR0aHIgPSBzdGFfZXN0aW1hdGVfZXhwZWN0ZWRfdGhyb3VnaHB1dChzdGEsXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0zMDUzLVx0XHRcdFx0XHRcdCAgICAgIFx1MDAyNmxpbmtfc2luZm8tXHUwMDNldHhyYXRlLFxuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jPTMwNzk9dm9pZCBzdGFfc2V0X3NpbmZvKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbyxcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0zMzA5LVx0XHQgICAoc2luZm8tXHUwMDNlZmlsbGVkIFx1MDAyNiBCSVRfVUxMKE5MODAyMTFfU1RBX0lORk9fVFhfQklUUkFURSkpKSB7XG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzozMzEwOlx0XHR0aHIgPSBzdGFfZXN0aW1hdGVfZXhwZWN0ZWRfdGhyb3VnaHB1dChzdGEsIFx1MDAyNnNpbmZvLVx1MDAzZXR4cmF0ZSxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTMzMTEtXHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2c2RhdGEtXHUwMDNldmlmLmJzc19jb25mKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTQ6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2NTUKCQkJCQkJCW91dHB1dDogMTgyCgkJCQkJCQl0aG91Z2h0czogMTg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIEkgdW5kZXJzdGFuZCBpdDoKCioqQWlydGltZSBRdWV1ZSBMaW1pdCBmb3IgTXVsdGljYXN0IGFuZCBUaHJvdWdocHV0IENhbGN1bGF0aW9uKioKCkFscmlnaHQsIHNvIHRoZSBwYXRjaCBsb29rcyBnb29kIOKAkyBmdW5jdGlvbmFsIGFuZCBkZWZpbml0ZWx5IHJlYWNoYWJsZSB3aXRoaW4gdGhlIGV4aXN0aW5nIDgwMi4xMSBzdGFjay4gTXkgZm9jdXMgaGVyZSBpcyBvbiB0aGUgYWRkaXRpb24gb2YgQWlydGltZSBRdWV1ZSBMaW1pdCAoQVFMKSBzdXBwb3J0IGZvciBtdWx0aWNhc3QgdHJhZmZpYywgYWxvbmdzaWRlIG1vZGlmaWNhdGlvbnMgdG8gaG93IHdlIGVzdGltYXRlIGV4cGVjdGVkIHRocm91Z2hwdXQgZm9yIHN0YXRpb25zIHdpdGhpbiBtYWM4MDIxMS4gVGhpcyBpcyBzb2xpZCwgY29yZSBsb2dpYy4gU2VlbXMgbGlrZSB0aGUgZGV2ZWxvcGVycyBoYXZlIGJlZW4gZGlnZ2luZyBpbnRvOiBgaWVlZTgwMjExX3N0YV91cGRhdGVfcGVuZGluZ19haXJ0aW1lYCwgYGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVja2AsIGBpZWVlODAyMTFfdHhxX2FxbF9wZW5kaW5nYCwgYGllZWU4MDIxMV9yYXRlX2V4cGVjdGVkX3R4X2FpcnRpbWVgIGFuZCBgc3RhX2VzdGltYXRlX2V4cGVjdGVkX3Rocm91Z2hwdXRgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGRpcmVjdGx5IGludm9sdmVkIGluIHRoZSBjcml0aWNhbCBwYXRoLiBUaGUgZmFjdCB0aGF0IGBNQUM4MDIxMWAgaXMgdGhlIHJlbGV2YW50IGNvbmZpZyBjb25maXJtcyBpdOKAmXMgd2l0aGluIHRoZSBoZWFydCBvZiB0aGUgbWFjODAyMTEgZnJhbWV3b3JrLiBXZSBjYW4gdHJpZ2dlciB0aGlzIHRocm91Z2ggYG1hYzgwMjExX2h3c2ltYCB3aGljaCBpcyBncmVhdCBmb3IgdGVzdGluZyB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5LiBTZWVtcyBsaWtlIHRoZSBjb3JyZWN0IGFwcHJvYWNoIGFuZCBkaXJlY3Rpb24uCgpMZXQmIzM5O3MgY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTQ6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjExX3N0YV91cGRhdGVfcGVuZGluZ19haXJ0aW1lJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV90eHFfYWlydGltZV9jaGVjayYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfdHhxX2FxbF9wZW5kaW5nJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9yYXRlX2V4cGVjdGVkX3R4X2FpcnRpbWUmIzM0OywKICAgICYjMzQ7c3RhX2VzdGltYXRlX2V4cGVjdGVkX3Rocm91Z2hwdXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBBaXJ0aW1lIFF1ZXVlIExpbWl0IChBUUwpIHN1cHBvcnQgZm9yIG11bHRpY2FzdCB0cmFmZmljIGFuZCBtb2RpZmllcyB0aGUgZXhwZWN0ZWQgdGhyb3VnaHB1dCBjYWxjdWxhdGlvbiBmb3Igc3RhdGlvbnMgaW4gbWFjODAyMTEuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbG9naWMgZm9yIDgwMi4xMSBuZXR3b3JraW5nIGFuZCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBtYWM4MDIxMV9od3NpbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUFDODAyMTEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpZWVlODAyMTFfc3RhX3VwZGF0ZV9wZW5kaW5nX2FpcnRpbWUmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV90eHFfYXFsX3BlbmRpbmcmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3JhdGVfZXhwZWN0ZWRfdHhfYWlydGltZSYjMzQ7LAogICAgJiMzNDtzdGFfZXN0aW1hdGVfZXhwZWN0ZWRfdGhyb3VnaHB1dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIEFpcnRpbWUgUXVldWUgTGltaXQgKEFRTCkgc3VwcG9ydCBmb3IgbXVsdGljYXN0IHRyYWZmaWMgYW5kIG1vZGlmaWVzIHRoZSBleHBlY3RlZCB0aHJvdWdocHV0IGNhbGN1bGF0aW9uIGZvciBzdGF0aW9ucyBpbiBtYWM4MDIxMS4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBsb2dpYyBmb3IgODAyLjExIG5ldHdvcmtpbmcgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgdmlhIG1hYzgwMjExX2h3c2ltLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjJUMTQ6NTQ6MzEuMzg0NDEwMjk2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE2MTY5NDc5MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZWVlODAyMTFfc3RhX3VwZGF0ZV9wZW5kaW5nX2FpcnRpbWVcIixcbiAgICBcImllZWU4MDIxMV90eHFfYWlydGltZV9jaGVja1wiLFxuICAgIFwiaWVlZTgwMjExX3R4cV9hcWxfcGVuZGluZ1wiLFxuICAgIFwiaWVlZTgwMjExX3JhdGVfZXhwZWN0ZWRfdHhfYWlydGltZVwiLFxuICAgIFwic3RhX2VzdGltYXRlX2V4cGVjdGVkX3Rocm91Z2hwdXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIEFpcnRpbWUgUXVldWUgTGltaXQgKEFRTCkgc3VwcG9ydCBmb3IgbXVsdGljYXN0IHRyYWZmaWMgYW5kIG1vZGlmaWVzIHRoZSBleHBlY3RlZCB0aHJvdWdocHV0IGNhbGN1bGF0aW9uIGZvciBzdGF0aW9ucyBpbiBtYWM4MDIxMS4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBsb2dpYyBmb3IgODAyLjExIG5ldHdvcmtpbmcgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgdmlhIG1hYzgwMjExX2h3c2ltLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNDo1NDozMS4zODQ0MTc2MzZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NDIwMTY5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc5ZDU4NTM5YmViNzQwYmM1N2I2MzJmMTc4NzQ1Y2M1Y2E4MmZjYTJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMjIgMTQ6NTQ6MjkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaCBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmhcXG5pbmRleCBmNWFiZjFkYjc1NThiYy4uNzM1NGJhMDc5MzYzYTUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxcbisrKyBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmhcXG5AQCAtMzcyMiw2ICszNzIyLDcgQEAgZW51bSB3aXBoeV9wYXJhbXNfZmxhZ3Mge1xcbiAvKiBUaGUgcGVyIFRYUSBkZXZpY2UgcXVldWUgbGltaXQgaW4gYWlydGltZSAqL1xcbiAjZGVmaW5lIElFRUU4MDIxMV9ERUZBVUxUX0FRTF9UWFFfTElNSVRfTFxcdDUwMDBcXG4gI2RlZmluZSBJRUVFODAyMTFfREVGQVVMVF9BUUxfVFhRX0xJTUlUX0hcXHQxMjAwMFxcbisjZGVmaW5lIElFRUU4MDIxMV9ERUZBVUxUX0FRTF9UWFFfTElNSVRfTUNcXHQ1MDAwMFxcbiBcXG4gLyogVGhlIHBlciBpbnRlcmZhY2UgYWlydGltZSB0aHJlc2hvbGQgdG8gc3dpdGNoIHRvIGxvd2VyIHF1ZXVlIGxpbWl0ICovXFxuICNkZWZpbmUgSUVFRTgwMjExX0FRTF9USFJFU0hPTERcXHRcXHRcXHQyNDAwMFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxcbmluZGV4IDRmOTVkYTAyMzc0NmY5Li4yM2Q4ZDQ2MzljZGQ2ZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxcbkBAIC0xMzU0LDggKzEzNTQsOCBAQCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8ge1xcbiBcXHQgICAgc3RhdHVzX2RhdGFfaWRyOjEsXFxuIFxcdCAgICBzdGF0dXNfZGF0YToxMyxcXG4gXFx0ICAgIGh3X3F1ZXVlOjQsXFxuK1xcdCAgICB0eF90aW1lX21jOjEsXFxuIFxcdCAgICB0eF90aW1lX2VzdDoxMDtcXG4tXFx0LyogMSBmcmVlIGJpdCAqL1xcbiBcXG4gXFx0dW5pb24ge1xcbiBcXHRcXHRzdHJ1Y3Qge1xcbkBAIC02ODc2LDYgKzY4NzYsMTcgQEAgdm9pZCBpZWVlODAyMTFfc3RhX3JlZ2lzdGVyX2FpcnRpbWUoc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSwgdTggdGlkLFxcbiBib29sXFxuIGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVjayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV90eHEgKnR4cSk7XFxuIFxcbisvKipcXG4rICogaWVlZTgwMjExX3R4cV9hcWxfcGVuZGluZyAtIGdldCBwZW5kaW5nIEFRTCBhaXJ0aW1lIGZvciBhIHR4cVxcbisgKlxcbisgKiBAaHc6IHBvaW50ZXIgb2J0YWluZWQgZnJvbSBpZWVlODAyMTFfYWxsb2NfaHcoKVxcbisgKiBAdHhxOiBwb2ludGVyIG9idGFpbmVkIGZyb20gc3RhdGlvbiBvciB2aXJ0dWFsIGludGVyZmFjZVxcbisgKlxcbisgKiBSZXR1cm46IHBlbmRpbmcgYWlydGltZSAoaW4gdXNlYykgZm9yIHRoZSBnaXZlbiB0eHEuXFxuKyAqL1xcbit1MzIgaWVlZTgwMjExX3R4cV9hcWxfcGVuZGluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IGllZWU4MDIxMV90eHEgKnR4cSk7XFxuK1xcbiAvKipcXG4gICogaWVlZTgwMjExX2l0ZXJfa2V5cyAtIGl0ZXJhdGUga2V5cyBwcm9ncmFtbWVkIGludG8gdGhlIGRldmljZVxcbiAgKiBAaHc6IHBvaW50ZXIgb2J0YWluZWQgZnJvbSBpZWVlODAyMTFfYWxsb2NfaHcoKVxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvYWlydGltZS5jIGIvbmV0L21hYzgwMjExL2FpcnRpbWUuY1xcbmluZGV4IGM2MWRmNjM3MjMyYTliLi4wYzU0Y2RiZDc1M2NkNyAxMDA2NDRcXG4tLS0gYS9uZXQvbWFjODAyMTEvYWlydGltZS5jXFxuKysrIGIvbmV0L21hYzgwMjExL2FpcnRpbWUuY1xcbkBAIC02ODUsNyArNjg1LDcgQEAgc3RhdGljIGludCBpZWVlODAyMTFfZmlsbF9yeF9zdGF0dXMoc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXQsXFxuIFxcdGlmIChpZWVlODAyMTFfZmlsbF9yYXRlX2luZm8oaHcsIHN0YXQsIGJhbmQsIHJpKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRpZiAoIWllZWU4MDIxMV9yYXRlX3ZhbGlkKHJhdGUpKVxcbitcXHRpZiAoIXJhdGUgfHwgIWllZWU4MDIxMV9yYXRlX3ZhbGlkKHJhdGUpKVxcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcbiBcXHRpZiAocmF0ZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRUVFODAyMTFfVFhfUkNfMTYwX01IWl9XSURUSClcXG5AQCAtNzUzLDYgKzc1Myw1MyBAQCB1MzIgaWVlZTgwMjExX2NhbGNfdHhfYWlydGltZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChpZWVlODAyMTFfY2FsY190eF9haXJ0aW1lKTtcXG4gXFxuK3UzMiBpZWVlODAyMTFfcmF0ZV9leHBlY3RlZF90eF9haXJ0aW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICp0eF9yYXRlLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHJhdGVfaW5mbyAqcmksXFxuK1xcdFxcdFxcdFxcdCAgICAgICBlbnVtIG5sODAyMTFfYmFuZCBiYW5kLFxcbitcXHRcXHRcXHRcXHQgICAgICAgYm9vbCBhbXBkdSwgaW50IGxlbilcXG4re1xcbitcXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyBzdGF0O1xcbitcXHR1MzIgZHVyYXRpb24sIG92ZXJoZWFkO1xcbitcXHR1OCBhZ2dfc2hpZnQ7XFxuK1xcbitcXHRpZiAoaWVlZTgwMjExX2ZpbGxfcnhfc3RhdHVzKFxcdTAwMjZzdGF0LCBodywgdHhfcmF0ZSwgcmksIGJhbmQsIGxlbikpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKHN0YXQuZW5jb2RpbmcgPT0gUlhfRU5DX0xFR0FDWSB8fCAhYW1wZHUpXFxuK1xcdFxcdHJldHVybiBpZWVlODAyMTFfY2FsY19yeF9haXJ0aW1lKGh3LCBcXHUwMDI2c3RhdCwgbGVuKSAqIDEwMjQ7XFxuK1xcbitcXHRkdXJhdGlvbiA9IGllZWU4MDIxMV9nZXRfcmF0ZV9kdXJhdGlvbihodywgXFx1MDAyNnN0YXQsIFxcdTAwMjZvdmVyaGVhZCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBBc3N1bWUgdGhhdCBIVC9WSFQgdHJhbnNtaXNzaW9uIG9uIGFueSBBQyBleGNlcHQgVk8gd2lsbFxcbitcXHQgKiB1c2UgYWdncmVnYXRpb24uIFNpbmNlIHdlIGRvbid0IGhhdmUgcmVsaWFibGUgcmVwb3J0aW5nXFxuK1xcdCAqIG9mIGFnZ3JlZ2F0aW9uIGxlbmd0aCwgYXNzdW1lIGFuIGF2ZXJhZ2Ugc2l6ZSBiYXNlZCBvbiB0aGVcXG4rXFx0ICogdHggcmF0ZS5cXG4rXFx0ICogVGhpcyB3aWxsIG5vdCBiZSB2ZXJ5IGFjY3VyYXRlLCBidXQgbXVjaCBiZXR0ZXIgdGhhbiBzaW1wbHlcXG4rXFx0ICogYXNzdW1pbmcgdW4tYWdncmVnYXRlZCB0eCBpbiBhbGwgY2FzZXMuXFxuK1xcdCAqL1xcbitcXHRpZiAoZHVyYXRpb24gXFx1MDAzZSA0MDAgKiAxMDI0KSAvKiBcXHUwMDNjPSBWSFQyMCBNQ1MyIDFTICovXFxuK1xcdFxcdGFnZ19zaGlmdCA9IDE7XFxuK1xcdGVsc2UgaWYgKGR1cmF0aW9uIFxcdTAwM2UgMjUwICogMTAyNCkgLyogXFx1MDAzYz0gVkhUMjAgTUNTMyAxUyBvciBNQ1MxIDJTICovXFxuK1xcdFxcdGFnZ19zaGlmdCA9IDI7XFxuK1xcdGVsc2UgaWYgKGR1cmF0aW9uIFxcdTAwM2UgMTUwICogMTAyNCkgLyogXFx1MDAzYz0gVkhUMjAgTUNTNSAxUyBvciBNQ1MyIDJTICovXFxuK1xcdFxcdGFnZ19zaGlmdCA9IDM7XFxuK1xcdGVsc2UgaWYgKGR1cmF0aW9uIFxcdTAwM2UgNzAgKiAxMDI0KSAvKiBcXHUwMDNjPSBWSFQyMCBNQ1M1IDJTICovXFxuK1xcdFxcdGFnZ19zaGlmdCA9IDQ7XFxuK1xcdGVsc2UgaWYgKHN0YXQuZW5jb2RpbmcgIT0gUlhfRU5DX0hFIHx8XFxuK1xcdFxcdCBkdXJhdGlvbiBcXHUwMDNlIDIwICogMTAyNCkgLyogXFx1MDAzYz0gSEU0MCBNQ1M2IDJTICovXFxuK1xcdFxcdGFnZ19zaGlmdCA9IDU7XFxuK1xcdGVsc2VcXG4rXFx0XFx0YWdnX3NoaWZ0ID0gNjtcXG4rXFxuK1xcdGR1cmF0aW9uICo9IGxlbjtcXG4rXFx0ZHVyYXRpb24gLz0gQVZHX1BLVF9TSVpFO1xcbitcXHRkdXJhdGlvbiArPSAob3ZlcmhlYWQgKiAxMDI0IFxcdTAwM2VcXHUwMDNlIGFnZ19zaGlmdCk7XFxuK1xcbitcXHRyZXR1cm4gZHVyYXRpb247XFxuK31cXG4rXFxuIHUzMiBpZWVlODAyMTFfY2FsY19leHBlY3RlZF90eF9haXJ0aW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbiBcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsXFxuQEAgLTc3NSw0NSArODIyLDEzIEBAIHUzMiBpZWVlODAyMTFfY2FsY19leHBlY3RlZF90eF9haXJ0aW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbiBcXHRpZiAocHVic3RhKSB7XFxuIFxcdFxcdHN0cnVjdCBzdGFfaW5mbyAqc3RhID0gY29udGFpbmVyX29mKHB1YnN0YSwgc3RydWN0IHN0YV9pbmZvLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgc3RhKTtcXG4tXFx0XFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgc3RhdDtcXG4gXFx0XFx0c3RydWN0IGllZWU4MDIxMV90eF9yYXRlICp0eF9yYXRlID0gXFx1MDAyNnN0YS1cXHUwMDNlZGVmbGluay50eF9zdGF0cy5sYXN0X3JhdGU7XFxuIFxcdFxcdHN0cnVjdCByYXRlX2luZm8gKnJpID0gXFx1MDAyNnN0YS1cXHUwMDNlZGVmbGluay50eF9zdGF0cy5sYXN0X3JhdGVfaW5mbztcXG4tXFx0XFx0dTMyIGR1cmF0aW9uLCBvdmVyaGVhZDtcXG4tXFx0XFx0dTggYWdnX3NoaWZ0O1xcbi1cXG4tXFx0XFx0aWYgKGllZWU4MDIxMV9maWxsX3J4X3N0YXR1cyhcXHUwMDI2c3RhdCwgaHcsIHR4X3JhdGUsIHJpLCBiYW5kLCBsZW4pKVxcbi1cXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0dTMyIGR1cmF0aW9uO1xcbiBcXG4tXFx0XFx0aWYgKHN0YXQuZW5jb2RpbmcgPT0gUlhfRU5DX0xFR0FDWSB8fCAhYW1wZHUpXFxuLVxcdFxcdFxcdHJldHVybiBpZWVlODAyMTFfY2FsY19yeF9haXJ0aW1lKGh3LCBcXHUwMDI2c3RhdCwgbGVuKTtcXG4tXFxuLVxcdFxcdGR1cmF0aW9uID0gaWVlZTgwMjExX2dldF9yYXRlX2R1cmF0aW9uKGh3LCBcXHUwMDI2c3RhdCwgXFx1MDAyNm92ZXJoZWFkKTtcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogQXNzdW1lIHRoYXQgSFQvVkhUIHRyYW5zbWlzc2lvbiBvbiBhbnkgQUMgZXhjZXB0IFZPIHdpbGxcXG4tXFx0XFx0ICogdXNlIGFnZ3JlZ2F0aW9uLiBTaW5jZSB3ZSBkb24ndCBoYXZlIHJlbGlhYmxlIHJlcG9ydGluZ1xcbi1cXHRcXHQgKiBvZiBhZ2dyZWdhdGlvbiBsZW5ndGgsIGFzc3VtZSBhbiBhdmVyYWdlIHNpemUgYmFzZWQgb24gdGhlXFxuLVxcdFxcdCAqIHR4IHJhdGUuXFxuLVxcdFxcdCAqIFRoaXMgd2lsbCBub3QgYmUgdmVyeSBhY2N1cmF0ZSwgYnV0IG11Y2ggYmV0dGVyIHRoYW4gc2ltcGx5XFxuLVxcdFxcdCAqIGFzc3VtaW5nIHVuLWFnZ3JlZ2F0ZWQgdHggaW4gYWxsIGNhc2VzLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0aWYgKGR1cmF0aW9uIFxcdTAwM2UgNDAwICogMTAyNCkgLyogXFx1MDAzYz0gVkhUMjAgTUNTMiAxUyAqL1xcbi1cXHRcXHRcXHRhZ2dfc2hpZnQgPSAxO1xcbi1cXHRcXHRlbHNlIGlmIChkdXJhdGlvbiBcXHUwMDNlIDI1MCAqIDEwMjQpIC8qIFxcdTAwM2M9IFZIVDIwIE1DUzMgMVMgb3IgTUNTMSAyUyAqL1xcbi1cXHRcXHRcXHRhZ2dfc2hpZnQgPSAyO1xcbi1cXHRcXHRlbHNlIGlmIChkdXJhdGlvbiBcXHUwMDNlIDE1MCAqIDEwMjQpIC8qIFxcdTAwM2M9IFZIVDIwIE1DUzUgMVMgb3IgTUNTMiAyUyAqL1xcbi1cXHRcXHRcXHRhZ2dfc2hpZnQgPSAzO1xcbi1cXHRcXHRlbHNlIGlmIChkdXJhdGlvbiBcXHUwMDNlIDcwICogMTAyNCkgLyogXFx1MDAzYz0gVkhUMjAgTUNTNSAyUyAqL1xcbi1cXHRcXHRcXHRhZ2dfc2hpZnQgPSA0O1xcbi1cXHRcXHRlbHNlIGlmIChzdGF0LmVuY29kaW5nICE9IFJYX0VOQ19IRSB8fFxcbi1cXHRcXHRcXHQgZHVyYXRpb24gXFx1MDAzZSAyMCAqIDEwMjQpIC8qIFxcdTAwM2M9IEhFNDAgTUNTNiAyUyAqL1xcbi1cXHRcXHRcXHRhZ2dfc2hpZnQgPSA1O1xcbi1cXHRcXHRlbHNlXFxuLVxcdFxcdFxcdGFnZ19zaGlmdCA9IDY7XFxuLVxcbi1cXHRcXHRkdXJhdGlvbiAqPSBsZW47XFxuLVxcdFxcdGR1cmF0aW9uIC89IEFWR19QS1RfU0laRTtcXG4rXFx0XFx0ZHVyYXRpb24gPSBpZWVlODAyMTFfcmF0ZV9leHBlY3RlZF90eF9haXJ0aW1lKGh3LCB0eF9yYXRlLCByaSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgYmFuZCwgdHJ1ZSwgbGVuKTtcXG4gXFx0XFx0ZHVyYXRpb24gLz0gMTAyNDtcXG4tXFx0XFx0ZHVyYXRpb24gKz0gKG92ZXJoZWFkIFxcdTAwM2VcXHUwMDNlIGFnZ19zaGlmdCk7XFxuIFxcbiBcXHRcXHRyZXR1cm4gbWF4X3QodTMyLCBkdXJhdGlvbiwgNCk7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RlYnVnZnMuYyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmNcXG5pbmRleCBhNGQ1NDYxZjY0ODBmMC4uOGViZjViY2YzYzBlYzEgMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjExL2RlYnVnZnMuY1xcbisrKyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmNcXG5AQCAtMjEwLDExICsyMTAsMTMgQEAgc3RhdGljIHNzaXplX3QgYXFsX3BlbmRpbmdfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0XFx0XFx0XFxcIlZJICAgICAldSB1c1xcXFxuXFxcIlxcbiBcXHRcXHRcXHRcXFwiQkUgICAgICV1IHVzXFxcXG5cXFwiXFxuIFxcdFxcdFxcdFxcXCJCSyAgICAgJXUgdXNcXFxcblxcXCJcXG4rXFx0XFx0XFx0XFxcIk1DICAgICAldSB1c1xcXFxuXFxcIlxcbiBcXHRcXHRcXHRcXFwidG90YWwgICV1IHVzXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRhdG9taWNfcmVhZChcXHUwMDI2bG9jYWwtXFx1MDAzZWFxbF9hY19wZW5kaW5nX2FpcnRpbWVbSUVFRTgwMjExX0FDX1ZPXSksXFxuIFxcdFxcdFxcdGF0b21pY19yZWFkKFxcdTAwMjZsb2NhbC1cXHUwMDNlYXFsX2FjX3BlbmRpbmdfYWlydGltZVtJRUVFODAyMTFfQUNfVkldKSxcXG4gXFx0XFx0XFx0YXRvbWljX3JlYWQoXFx1MDAyNmxvY2FsLVxcdTAwM2VhcWxfYWNfcGVuZGluZ19haXJ0aW1lW0lFRUU4MDIxMV9BQ19CRV0pLFxcbiBcXHRcXHRcXHRhdG9taWNfcmVhZChcXHUwMDI2bG9jYWwtXFx1MDAzZWFxbF9hY19wZW5kaW5nX2FpcnRpbWVbSUVFRTgwMjExX0FDX0JLXSksXFxuK1xcdFxcdFxcdGF0b21pY19yZWFkKFxcdTAwMjZsb2NhbC1cXHUwMDNlYXFsX21jX3BlbmRpbmdfYWlydGltZSksXFxuIFxcdFxcdFxcdGF0b21pY19yZWFkKFxcdTAwMjZsb2NhbC1cXHUwMDNlYXFsX3RvdGFsX3BlbmRpbmdfYWlydGltZSkpO1xcbiBcXHRyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgYnVmLCBsZW4pO1xcbkBAIC0yMzksNyArMjQxLDggQEAgc3RhdGljIHNzaXplX3QgYXFsX3R4cV9saW1pdF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLFxcbiBcXHRcXHRcXHRcXFwiVk9cXHQldVxcdFxcdCV1XFxcXG5cXFwiXFxuIFxcdFxcdFxcdFxcXCJWSVxcdCV1XFx0XFx0JXVcXFxcblxcXCJcXG4gXFx0XFx0XFx0XFxcIkJFXFx0JXVcXHRcXHQldVxcXFxuXFxcIlxcbi1cXHRcXHRcXHRcXFwiQktcXHQldVxcdFxcdCV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXFwiQktcXHQldVxcdFxcdCV1XFxcXG5cXFwiXFxuK1xcdFxcdFxcdFxcXCJNQ1xcdCV1XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRsb2NhbC1cXHUwMDNlYXFsX3R4cV9saW1pdF9sb3dbSUVFRTgwMjExX0FDX1ZPXSxcXG4gXFx0XFx0XFx0bG9jYWwtXFx1MDAzZWFxbF90eHFfbGltaXRfaGlnaFtJRUVFODAyMTFfQUNfVk9dLFxcbiBcXHRcXHRcXHRsb2NhbC1cXHUwMDNlYXFsX3R4cV9saW1pdF9sb3dbSUVFRTgwMjExX0FDX1ZJXSxcXG5AQCAtMjQ3LDcgKzI1MCw4IEBAIHN0YXRpYyBzc2l6ZV90IGFxbF90eHFfbGltaXRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0XFx0XFx0bG9jYWwtXFx1MDAzZWFxbF90eHFfbGltaXRfbG93W0lFRUU4MDIxMV9BQ19CRV0sXFxuIFxcdFxcdFxcdGxvY2FsLVxcdTAwM2VhcWxfdHhxX2xpbWl0X2hpZ2hbSUVFRTgwMjExX0FDX0JFXSxcXG4gXFx0XFx0XFx0bG9jYWwtXFx1MDAzZWFxbF90eHFfbGltaXRfbG93W0lFRUU4MDIxMV9BQ19CS10sXFxuLVxcdFxcdFxcdGxvY2FsLVxcdTAwM2VhcWxfdHhxX2xpbWl0X2hpZ2hbSUVFRTgwMjExX0FDX0JLXSk7XFxuK1xcdFxcdFxcdGxvY2FsLVxcdTAwM2VhcWxfdHhxX2xpbWl0X2hpZ2hbSUVFRTgwMjExX0FDX0JLXSxcXG4rXFx0XFx0XFx0bG9jYWwtXFx1MDAzZWFxbF90eHFfbGltaXRfbWMpO1xcbiBcXHRyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgYnVmLCBsZW4pO1xcbiB9XFxuQEAgLTI3Myw2ICsyNzcsMTEgQEAgc3RhdGljIHNzaXplX3QgYXFsX3R4cV9saW1pdF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0ZWxzZVxcbiBcXHRcXHRidWZbY291bnRdID0gJ1xcXFwwJztcXG4gXFxuK1xcdGlmIChzc2NhbmYoYnVmLCBcXFwibWNhc3QgJXVcXFwiLCBcXHUwMDI2cV9saW1pdF9sb3cpID09IDEpIHtcXG4rXFx0XFx0bG9jYWwtXFx1MDAzZWFxbF90eHFfbGltaXRfbWMgPSBxX2xpbWl0X2xvdztcXG4rXFx0XFx0cmV0dXJuIGNvdW50O1xcbitcXHR9XFxuK1xcbiBcXHRpZiAoc3NjYW5mKGJ1ZiwgXFxcIiV1ICV1ICV1XFxcIiwgXFx1MDAyNmFjLCBcXHUwMDI2cV9saW1pdF9sb3csIFxcdTAwMjZxX2xpbWl0X2hpZ2gpICE9IDMpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmggYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxcbmluZGV4IDM0YTllYThiNmY4NTdlLi43OGZlYTdhMTdhZTc2NiAxMDA2NDRcXG4tLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxcbisrKyBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXFxuQEAgLTE0NjQsMTAgKzE0NjQsMTIgQEAgc3RydWN0IGllZWU4MDIxMV9sb2NhbCB7XFxuIFxcdHNwaW5sb2NrX3QgaGFuZGxlX3dha2VfdHhfcXVldWVfbG9jaztcXG4gXFxuIFxcdHUxNiBhaXJ0aW1lX2ZsYWdzO1xcbitcXHR1MzIgYXFsX3R4cV9saW1pdF9tYztcXG4gXFx0dTMyIGFxbF90eHFfbGltaXRfbG93W0lFRUU4MDIxMV9OVU1fQUNTXTtcXG4gXFx0dTMyIGFxbF90eHFfbGltaXRfaGlnaFtJRUVFODAyMTFfTlVNX0FDU107XFxuIFxcdHUzMiBhcWxfdGhyZXNob2xkO1xcbiBcXHRhdG9taWNfdCBhcWxfdG90YWxfcGVuZGluZ19haXJ0aW1lO1xcbitcXHRhdG9taWNfdCBhcWxfbWNfcGVuZGluZ19haXJ0aW1lO1xcbiBcXHRhdG9taWNfdCBhcWxfYWNfcGVuZGluZ19haXJ0aW1lW0lFRUU4MDIxMV9OVU1fQUNTXTtcXG4gXFxuIFxcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzICpvcHM7XFxuQEAgLTI5MzksNiArMjk0MSwxMSBAQCB1OCAqaWVlZTgwMjExX2dldF9ic3NpZChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLCBzaXplX3QgbGVuLFxcbiBcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBpZWVlODAyMTFfZXRodG9vbF9vcHM7XFxuIFxcbit1MzIgaWVlZTgwMjExX3JhdGVfZXhwZWN0ZWRfdHhfYWlydGltZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqdHhfcmF0ZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCByYXRlX2luZm8gKnJpLFxcbitcXHRcXHRcXHRcXHQgICAgICAgZW51bSBubDgwMjExX2JhbmQgYmFuZCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGJvb2wgYW1wZHUsIGludCBsZW4pO1xcbiB1MzIgaWVlZTgwMjExX2NhbGNfZXhwZWN0ZWRfdHhfYWlydGltZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLFxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWFpbi5jIGIvbmV0L21hYzgwMjExL21haW4uY1xcbmluZGV4IGViMWVhYWYzNDYxMmUxLi5iNWRjN2Y2NTliNWRlNSAxMDA2NDRcXG4tLS0gYS9uZXQvbWFjODAyMTEvbWFpbi5jXFxuKysrIGIvbmV0L21hYzgwMjExL21haW4uY1xcbkBAIC05ODgsNiArOTg4LDcgQEAgc3RydWN0IGllZWU4MDIxMV9odyAqaWVlZTgwMjExX2FsbG9jX2h3X25tKHNpemVfdCBwcml2X2RhdGFfbGVuLFxcbiBcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bG9jYWwtXFx1MDAzZXJ4X3BhdGhfbG9jayk7XFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZsb2NhbC1cXHUwMDNlcXVldWVfc3RvcF9yZWFzb25fbG9jayk7XFxuIFxcbitcXHRsb2NhbC1cXHUwMDNlYXFsX3R4cV9saW1pdF9tYyA9IElFRUU4MDIxMV9ERUZBVUxUX0FRTF9UWFFfTElNSVRfTUM7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBJRUVFODAyMTFfTlVNX0FDUzsgaSsrKSB7XFxuIFxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZsb2NhbC1cXHUwMDNlYWN0aXZlX3R4cXNbaV0pO1xcbiBcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bG9jYWwtXFx1MDAzZWFjdGl2ZV90eHFfbG9ja1tpXSk7XFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmNcXG5pbmRleCAyMmViYTBlNmU1NGM1Yi4uZDEyYWVkOWMxNzU2MTcgMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmNcXG4rKysgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uY1xcbkBAIC0yNDkxLDEzICsyNDkxLDI4IEBAIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0YV9yZWNhbGNfYWdncmVnYXRlcyk7XFxuIFxcbiB2b2lkIGllZWU4MDIxMV9zdGFfdXBkYXRlX3BlbmRpbmdfYWlydGltZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcXG4gXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTggYWMsXFxuLVxcdFxcdFxcdFxcdFxcdCAgdTE2IHR4X2FpcnRpbWUsIGJvb2wgdHhfY29tcGxldGVkKVxcbitcXHRcXHRcXHRcXHRcXHQgIHUxNiB0eF9haXJ0aW1lLCBib29sIHR4X2NvbXBsZXRlZCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBib29sIG1jYXN0KVxcbiB7XFxuIFxcdGludCB0eF9wZW5kaW5nO1xcbiBcXG4gXFx0aWYgKCF3aXBoeV9leHRfZmVhdHVyZV9pc3NldChsb2NhbC1cXHUwMDNlaHcud2lwaHksIE5MODAyMTFfRVhUX0ZFQVRVUkVfQVFMKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0aWYgKG1jYXN0KSB7XFxuK1xcdFxcdGlmICghdHhfY29tcGxldGVkKSB7XFxuK1xcdFxcdFxcdGF0b21pY19hZGQodHhfYWlydGltZSwgXFx1MDAyNmxvY2FsLVxcdTAwM2VhcWxfbWNfcGVuZGluZ19haXJ0aW1lKTtcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHR0eF9wZW5kaW5nID0gYXRvbWljX3N1Yl9yZXR1cm4odHhfYWlydGltZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZsb2NhbC1cXHUwMDNlYXFsX21jX3BlbmRpbmdfYWlydGltZSk7XFxuK1xcdFxcdGlmICh0eF9wZW5kaW5nIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0YXRvbWljX2NtcHhjaGcoXFx1MDAyNmxvY2FsLVxcdTAwM2VhcWxfbWNfcGVuZGluZ19haXJ0aW1lLFxcbitcXHRcXHRcXHRcXHQgICAgICAgdHhfcGVuZGluZywgMCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKCF0eF9jb21wbGV0ZWQpIHtcXG4gXFx0XFx0aWYgKHN0YSlcXG4gXFx0XFx0XFx0YXRvbWljX2FkZCh0eF9haXJ0aW1lLFxcbkBAIC0yNzk3LDYgKzI4MTIsMjggQEAgdm9pZCBzdGFfc2V0X2FjY3VtdWxhdGVkX3JlbW92ZWRfbGlua3Nfc2luZm8oc3RydWN0IHN0YV9pbmZvICpzdGEsXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIHUzMiBzdGFfZXN0aW1hdGVfZXhwZWN0ZWRfdGhyb3VnaHB1dChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCByYXRlX2luZm8gKnJpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYpXFxuK3tcXG4rXFx0c3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBcXHUwMDI2c3RhLVxcdTAwM2VzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZWh3O1xcbitcXHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZjtcXG4rXFx0dTMyIGR1cmF0aW9uO1xcbitcXHR1OCBiYW5kO1xcbitcXG4rXFx0Y29uZiA9IHJjdV9kZXJlZmVyZW5jZShic3NfY29uZi1cXHUwMDNlY2hhbmN0eF9jb25mKTtcXG4rXFx0aWYgKCFjb25mKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0YmFuZCA9IGNvbmYtXFx1MDAzZWRlZi5jaGFuLVxcdTAwM2ViYW5kO1xcbitcXG4rXFx0ZHVyYXRpb24gPSBpZWVlODAyMTFfcmF0ZV9leHBlY3RlZF90eF9haXJ0aW1lKGh3LCBOVUxMLCByaSwgYmFuZCwgdHJ1ZSwgMTAyNCk7XFxuK1xcdGR1cmF0aW9uICs9IGR1cmF0aW9uIFxcdTAwM2VcXHUwMDNlIDQ7IC8qIGFkZCBhc3N1bWVkIHBhY2tldCBlcnJvciByYXRlIG9mIH42JSAqL1xcbitcXHRpZiAoIWR1cmF0aW9uKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldHVybiAoKDEwMjQgKiBVU0VDX1BFUl9TRUMpIC8gZHVyYXRpb24pICogODtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgc3RhX3NldF9saW5rX3NpbmZvKHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxcbiBcXHRcXHRcXHQgICAgICAgc3RydWN0IGxpbmtfc3RhdGlvbl9pbmZvICpsaW5rX3NpbmZvLFxcbiBcXHRcXHRcXHQgICAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmssXFxuQEAgLTMwMTEsNiArMzA0OCwxMCBAQCBzdGF0aWMgdm9pZCBzdGFfc2V0X2xpbmtfc2luZm8oc3RydWN0IHN0YV9pbmZvICpzdGEsXFxuIFxcdGxpbmtfc2luZm8tXFx1MDAzZWJzc19wYXJhbS5iZWFjb25faW50ZXJ2YWwgPSBsaW5rLVxcdTAwM2Vjb25mLVxcdTAwM2ViZWFjb25faW50O1xcbiBcXG4gXFx0dGhyID0gc3RhX2dldF9leHBlY3RlZF90aHJvdWdocHV0KHN0YSk7XFxuK1xcdGlmICghdGhyIFxcdTAwMjZcXHUwMDI2IChsaW5rX3NpbmZvLVxcdTAwM2VmaWxsZWQgXFx1MDAyNiBCSVRfVUxMKE5MODAyMTFfU1RBX0lORk9fVFhfQklUUkFURSkpKVxcbitcXHRcXHR0aHIgPSBzdGFfZXN0aW1hdGVfZXhwZWN0ZWRfdGhyb3VnaHB1dChzdGEsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZsaW5rX3NpbmZvLVxcdTAwM2V0eHJhdGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGxpbmstXFx1MDAzZWNvbmYpO1xcbiBcXG4gXFx0aWYgKHRociAhPSAwKSB7XFxuIFxcdFxcdGxpbmtfc2luZm8tXFx1MDAzZWZpbGxlZCB8PVxcbkBAIC0zMjY0LDYgKzMzMDUsMTQgQEAgdm9pZCBzdGFfc2V0X3NpbmZvKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbyxcXG4gXFx0aWYgKHRociAhPSAwKSB7XFxuIFxcdFxcdHNpbmZvLVxcdTAwM2VmaWxsZWQgfD0gQklUX1VMTChOTDgwMjExX1NUQV9JTkZPX0VYUEVDVEVEX1RIUk9VR0hQVVQpO1xcbiBcXHRcXHRzaW5mby1cXHUwMDNlZXhwZWN0ZWRfdGhyb3VnaHB1dCA9IHRocjtcXG4rXFx0fSBlbHNlIGlmICghc3RhLVxcdTAwM2VzdGEudmFsaWRfbGlua3MgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgKHNpbmZvLVxcdTAwM2VmaWxsZWQgXFx1MDAyNiBCSVRfVUxMKE5MODAyMTFfU1RBX0lORk9fVFhfQklUUkFURSkpKSB7XFxuK1xcdFxcdHRociA9IHN0YV9lc3RpbWF0ZV9leHBlY3RlZF90aHJvdWdocHV0KHN0YSwgXFx1MDAyNnNpbmZvLVxcdTAwM2V0eHJhdGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZzZGF0YS1cXHUwMDNldmlmLmJzc19jb25mKTtcXG4rXFx0XFx0aWYgKHRocikge1xcbitcXHRcXHRcXHRzaW5mby1cXHUwMDNlZmlsbGVkIHw9IEJJVF9VTEwoTkw4MDIxMV9TVEFfSU5GT19FWFBFQ1RFRF9USFJPVUdIUFVUKTtcXG4rXFx0XFx0XFx0c2luZm8tXFx1MDAzZWV4cGVjdGVkX3Rocm91Z2hwdXQgPSB0aHI7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0aWYgKCEoc2luZm8tXFx1MDAzZWZpbGxlZCBcXHUwMDI2IEJJVF9VTEwoTkw4MDIxMV9TVEFfSU5GT19BQ0tfU0lHTkFMKSkgXFx1MDAyNlxcdTAwMjZcXG5AQCAtMzI4NCw2ICszMzMzLDcgQEAgdm9pZCBzdGFfc2V0X3NpbmZvKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbyxcXG4gXFx0aWYgKHN0YS1cXHUwMDNlc3RhLnZhbGlkX2xpbmtzKSB7XFxuIFxcdFxcdHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rO1xcbiBcXHRcXHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7XFxuK1xcdFxcdHUzMiBlc3RfdGhyID0gMDtcXG4gXFx0XFx0aW50IGxpbmtfaWQ7XFxuIFxcbiBcXHRcXHRzaW5mby1cXHUwMDNlbWxvX3BhcmFtc192YWxpZCA9IHRydWU7XFxuQEAgLTMyOTUsMTcgKzMzNDUsMjUgQEAgdm9pZCBzdGFfc2V0X3NpbmZvKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbyxcXG4gXFx0XFx0c2luZm8tXFx1MDAzZXZhbGlkX2xpbmtzID0gc3RhLVxcdTAwM2VzdGEudmFsaWRfbGlua3M7XFxuIFxcbiBcXHRcXHRmb3JfZWFjaF92YWxpZF9saW5rKHNpbmZvLCBsaW5rX2lkKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCBsaW5rX3N0YXRpb25faW5mbyAqbGlua19zaW5mbyA9IHNpbmZvLVxcdTAwM2VsaW5rc1tsaW5rX2lkXTtcXG4rXFxuIFxcdFxcdFxcdGxpbmtfc3RhID0gd2lwaHlfZGVyZWZlcmVuY2Uoc3RhLVxcdTAwM2Vsb2NhbC1cXHUwMDNlaHcud2lwaHksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgc3RhLVxcdTAwM2VsaW5rW2xpbmtfaWRdKTtcXG4gXFx0XFx0XFx0bGluayA9IHdpcGh5X2RlcmVmZXJlbmNlKHNkYXRhLVxcdTAwM2Vsb2NhbC1cXHUwMDNlaHcud2lwaHksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCBzZGF0YS1cXHUwMDNlbGlua1tsaW5rX2lkXSk7XFxuIFxcbi1cXHRcXHRcXHRpZiAoIWxpbmtfc3RhIHx8ICFzaW5mby1cXHUwMDNlbGlua3NbbGlua19pZF0gfHwgIWxpbmspIHtcXG4rXFx0XFx0XFx0aWYgKCFsaW5rX3N0YSB8fCAhbGlua19zaW5mbyB8fCAhbGluaykge1xcbiBcXHRcXHRcXHRcXHRzaW5mby1cXHUwMDNldmFsaWRfbGlua3MgXFx1MDAyNj0gfkJJVChsaW5rX2lkKTtcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0c3RhX3NldF9saW5rX3NpbmZvKHN0YSwgc2luZm8tXFx1MDAzZWxpbmtzW2xpbmtfaWRdLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBsaW5rLCB0aWRzdGF0cyk7XFxuK1xcdFxcdFxcdHN0YV9zZXRfbGlua19zaW5mbyhzdGEsIGxpbmtfc2luZm8sIGxpbmssIHRpZHN0YXRzKTtcXG4rXFx0XFx0XFx0aWYgKCF0aHIgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgIChsaW5rX3NpbmZvLVxcdTAwM2VmaWxsZWQgXFx1MDAyNiBCSVRfVUxMKE5MODAyMTFfU1RBX0lORk9fRVhQRUNURURfVEhST1VHSFBVVCkpKVxcbitcXHRcXHRcXHRcXHRlc3RfdGhyICs9IGxpbmtfc2luZm8tXFx1MDAzZWV4cGVjdGVkX3Rocm91Z2hwdXQ7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKGVzdF90aHIpIHtcXG4rXFx0XFx0XFx0c2luZm8tXFx1MDAzZWZpbGxlZCB8PSBCSVRfVUxMKE5MODAyMTFfU1RBX0lORk9fRVhQRUNURURfVEhST1VHSFBVVCk7XFxuK1xcdFxcdFxcdHNpbmZvLVxcdTAwM2VleHBlY3RlZF90aHJvdWdocHV0ID0gZXN0X3RocjtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmggYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uaFxcbmluZGV4IDVkYTMxNDJkODUxNmVmLi5lZTBkMzI4NzdjNWI0NyAxMDA2NDRcXG4tLS0gYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uaFxcbisrKyBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oXFxuQEAgLTE0Nyw3ICsxNDcsOCBAQCBzdHJ1Y3QgYWlydGltZV9pbmZvIHtcXG4gXFxuIHZvaWQgaWVlZTgwMjExX3N0YV91cGRhdGVfcGVuZGluZ19haXJ0aW1lKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcbiBcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1OCBhYyxcXG4tXFx0XFx0XFx0XFx0XFx0ICB1MTYgdHhfYWlydGltZSwgYm9vbCB0eF9jb21wbGV0ZWQpO1xcbitcXHRcXHRcXHRcXHRcXHQgIHUxNiB0eF9haXJ0aW1lLCBib29sIHR4X2NvbXBsZXRlZCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBib29sIG1jYXN0KTtcXG4gXFxuIHN0cnVjdCBzdGFfaW5mbztcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGF0dXMuYyBiL25ldC9tYWM4MDIxMS9zdGF0dXMuY1xcbmluZGV4IGRkMWRiYmEwNjgzOGU1Li5jNzY0ZTFhOTU0ODY5NiAxMDA2NDRcXG4tLS0gYS9uZXQvbWFjODAyMTEvc3RhdHVzLmNcXG4rKysgYi9uZXQvbWFjODAyMTEvc3RhdHVzLmNcXG5AQCAtNzc0LDcgKzc3NCw3IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yZXBvcnRfdXNlZF9za2Ioc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXFxuIFxcdFxcdGllZWU4MDIxMV9zdGFfdXBkYXRlX3BlbmRpbmdfYWlydGltZShsb2NhbCwgc3RhLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHR4X3RpbWVfZXN0LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIHRydWUpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHRydWUsIGluZm8tXFx1MDAzZXR4X3RpbWVfbWMpO1xcbiBcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0fVxcbiBcXG5AQCAtMTE4NiwxMCArMTE4NiwxMSBAQCB2b2lkIGllZWU4MDIxMV90eF9zdGF0dXNfZXh0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbiBcXHRcXHQvKiBEbyB0aGlzIGhlcmUgdG8gYXZvaWQgdGhlIGV4cGVuc2l2ZSBsb29rdXAgb2YgdGhlIHN0YVxcbiBcXHRcXHQgKiBpbiBpZWVlODAyMTFfcmVwb3J0X3VzZWRfc2tiKCkuXFxuIFxcdFxcdCAqL1xcbitcXHRcXHRib29sIG1jYXN0ID0gSUVFRTgwMjExX1NLQl9DQihza2IpLVxcdTAwM2V0eF90aW1lX21jO1xcbiBcXHRcXHRpZWVlODAyMTFfc3RhX3VwZGF0ZV9wZW5kaW5nX2FpcnRpbWUobG9jYWwsIHN0YSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICB0eF90aW1lX2VzdCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICB0cnVlKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICB0cnVlLCBtY2FzdCk7XFxuIFxcdFxcdGllZWU4MDIxMV9pbmZvX3NldF90eF90aW1lX2VzdChJRUVFODAyMTFfU0tCX0NCKHNrYiksIDApO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jXFxuaW5kZXggOTFiMTQxMTJlMjRmMDguLjg1YWZmMzc4MTkyNDJhIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS90eC5jXFxuKysrIGIvbmV0L21hYzgwMjExL3R4LmNcXG5AQCAtNDA1NCwyMCArNDA1NCwyMCBAQCBzdHJ1Y3Qgc2tfYnVmZiAqaWVlZTgwMjExX3R4X2RlcXVldWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuIGVuY2FwX291dDpcXG4gXFx0aW5mby1cXHUwMDNlY29udHJvbC52aWYgPSB2aWY7XFxuIFxcbi1cXHRpZiAodHguc3RhIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICB3aXBoeV9leHRfZmVhdHVyZV9pc3NldChsb2NhbC1cXHUwMDNlaHcud2lwaHksIE5MODAyMTFfRVhUX0ZFQVRVUkVfQVFMKSkge1xcbi1cXHRcXHRib29sIGFtcGR1ID0gdHhxLVxcdTAwM2VhYyAhPSBJRUVFODAyMTFfQUNfVk87XFxuK1xcdGlmICh3aXBoeV9leHRfZmVhdHVyZV9pc3NldChsb2NhbC1cXHUwMDNlaHcud2lwaHksIE5MODAyMTFfRVhUX0ZFQVRVUkVfQVFMKSkge1xcbitcXHRcXHRib29sIGFtcGR1ID0gdHhxLVxcdTAwM2VzdGEgXFx1MDAyNlxcdTAwMjYgdHhxLVxcdTAwM2VhYyAhPSBJRUVFODAyMTFfQUNfVk87XFxuIFxcdFxcdHUzMiBhaXJ0aW1lO1xcbiBcXG4gXFx0XFx0YWlydGltZSA9IGllZWU4MDIxMV9jYWxjX2V4cGVjdGVkX3R4X2FpcnRpbWUoaHcsIHZpZiwgdHhxLVxcdTAwM2VzdGEsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgc2tiLVxcdTAwM2VsZW4sIGFtcGR1KTtcXG4tXFx0XFx0aWYgKGFpcnRpbWUpIHtcXG4tXFx0XFx0XFx0YWlydGltZSA9IGllZWU4MDIxMV9pbmZvX3NldF90eF90aW1lX2VzdChpbmZvLCBhaXJ0aW1lKTtcXG4tXFx0XFx0XFx0aWVlZTgwMjExX3N0YV91cGRhdGVfcGVuZGluZ19haXJ0aW1lKGxvY2FsLCB0eC5zdGEsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdHhxLVxcdTAwM2VhYyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBhaXJ0aW1lLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGZhbHNlKTtcXG4tXFx0XFx0fVxcbitcXHRcXHRpZiAoIWFpcnRpbWUpXFxuK1xcdFxcdFxcdHJldHVybiBza2I7XFxuK1xcbitcXHRcXHRhaXJ0aW1lID0gaWVlZTgwMjExX2luZm9fc2V0X3R4X3RpbWVfZXN0KGluZm8sIGFpcnRpbWUpO1xcbitcXHRcXHRpbmZvLVxcdTAwM2V0eF90aW1lX21jID0gIXR4LnN0YTtcXG4rXFx0XFx0aWVlZTgwMjExX3N0YV91cGRhdGVfcGVuZGluZ19haXJ0aW1lKGxvY2FsLCB0eC5zdGEsIHR4cS1cXHUwMDNlYWMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgYWlydGltZSwgZmFsc2UsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgaW5mby1cXHUwMDNldHhfdGltZV9tYyk7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiBza2I7XFxuQEAgLTQxMTksNiArNDExOSw3IEBAIHN0cnVjdCBpZWVlODAyMTFfdHhxICppZWVlODAyMTFfbmV4dF90eHEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKVxcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqcmV0ID0gTlVMTDtcXG4gXFx0c3RydWN0IHR4cV9pbmZvICp0eHFpID0gTlVMTCwgKmhlYWQgPSBOVUxMO1xcbiBcXHRib29sIGZvdW5kX2VsaWdpYmxlX3R4cSA9IGZhbHNlO1xcbitcXHRib29sIGFxbF9jaGVjaztcXG4gXFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bG9jYWwtXFx1MDAzZWFjdGl2ZV90eHFfbG9ja1thY10pO1xcbiBcXG5AQCAtNDE0MiwyNiArNDE0MywyOCBAQCBzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqaWVlZTgwMjExX25leHRfdHhxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBhYylcXG4gXFx0aWYgKCFoZWFkKVxcbiBcXHRcXHRoZWFkID0gdHhxaTtcXG4gXFxuK1xcdGFxbF9jaGVjayA9IGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVjayhodywgXFx1MDAyNnR4cWktXFx1MDAzZXR4cSk7XFxuK1xcdGlmIChhcWxfY2hlY2spXFxuK1xcdFxcdGZvdW5kX2VsaWdpYmxlX3R4cSA9IHRydWU7XFxuK1xcbiBcXHRpZiAodHhxaS1cXHUwMDNldHhxLnN0YSkge1xcbiBcXHRcXHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IGNvbnRhaW5lcl9vZih0eHFpLVxcdTAwM2V0eHEuc3RhLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHN0YV9pbmZvLCBzdGEpO1xcbi1cXHRcXHRib29sIGFxbF9jaGVjayA9IGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVjayhodywgXFx1MDAyNnR4cWktXFx1MDAzZXR4cSk7XFxuLVxcdFxcdHMzMiBkZWZpY2l0ID0gaWVlZTgwMjExX3N0YV9kZWZpY2l0KHN0YSwgdHhxaS1cXHUwMDNldHhxLmFjKTtcXG4gXFxuLVxcdFxcdGlmIChhcWxfY2hlY2spXFxuLVxcdFxcdFxcdGZvdW5kX2VsaWdpYmxlX3R4cSA9IHRydWU7XFxuLVxcbi1cXHRcXHRpZiAoZGVmaWNpdCBcXHUwMDNjIDApXFxuK1xcdFxcdGlmIChpZWVlODAyMTFfc3RhX2RlZmljaXQoc3RhLCB0eHFpLVxcdTAwM2V0eHEuYWMpIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRcXHRzdGEtXFx1MDAzZWFpcnRpbWVbdHhxaS1cXHUwMDNldHhxLmFjXS5kZWZpY2l0ICs9XFxuIFxcdFxcdFxcdFxcdHN0YS1cXHUwMDNlYWlydGltZV93ZWlnaHQ7XFxuIFxcbi1cXHRcXHRpZiAoZGVmaWNpdCBcXHUwMDNjIDAgfHwgIWFxbF9jaGVjaykge1xcbi1cXHRcXHRcXHRsaXN0X21vdmVfdGFpbChcXHUwMDI2dHhxaS1cXHUwMDNlc2NoZWR1bGVfb3JkZXIsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2bG9jYWwtXFx1MDAzZWFjdGl2ZV90eHFzW3R4cWktXFx1MDAzZXR4cS5hY10pO1xcbi1cXHRcXHRcXHRnb3RvIGJlZ2luO1xcbitcXHRcXHRcXHRhcWxfY2hlY2sgPSBmYWxzZTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbitcXHRpZiAoIWFxbF9jaGVjaykge1xcbitcXHRcXHRsaXN0X21vdmVfdGFpbChcXHUwMDI2dHhxaS1cXHUwMDNlc2NoZWR1bGVfb3JkZXIsXFxuK1xcdFxcdFxcdFxcdCAgIFxcdTAwMjZsb2NhbC1cXHUwMDNlYWN0aXZlX3R4cXNbdHhxaS1cXHUwMDNldHhxLmFjXSk7XFxuK1xcdFxcdGdvdG8gYmVnaW47XFxuK1xcdH1cXG4rXFxuIFxcdGlmICh0eHFpLVxcdTAwM2VzY2hlZHVsZV9yb3VuZCA9PSBsb2NhbC1cXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuQEAgLTQyMjgsNyArNDIzMSw4IEBAIGJvb2wgaWVlZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuIFxcdGlmICghdHhxLVxcdTAwM2VzdGEpXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHRyZXR1cm4gYXRvbWljX3JlYWQoXFx1MDAyNmxvY2FsLVxcdTAwM2VhcWxfbWNfcGVuZGluZ19haXJ0aW1lKSBcXHUwMDNjXFxuK1xcdFxcdCAgICAgICBsb2NhbC1cXHUwMDNlYXFsX3R4cV9saW1pdF9tYztcXG4gXFxuIFxcdGlmICh1bmxpa2VseSh0eHEtXFx1MDAzZXRpZCA9PSBJRUVFODAyMTFfTlVNX1RJRFMpKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG5AQCAtNDI0OCw2ICs0MjUyLDI0IEBAIGJvb2wgaWVlZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbiB9XFxuIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrKTtcXG4gXFxuK3UzMiBpZWVlODAyMTFfdHhxX2FxbF9wZW5kaW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqdHhxKVxcbit7XFxuK1xcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpO1xcbitcXHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YTtcXG4rXFxuK1xcdGlmICh1bmxpa2VseSh0eHEtXFx1MDAzZXRpZCA9PSBJRUVFODAyMTFfTlVNX1RJRFMpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmICghdHhxLVxcdTAwM2VzdGEpXFxuK1xcdFxcdHJldHVybiBhdG9taWNfcmVhZChcXHUwMDI2bG9jYWwtXFx1MDAzZWFxbF9tY19wZW5kaW5nX2FpcnRpbWUpO1xcbitcXG4rXFx0c3RhID0gY29udGFpbmVyX29mKHR4cS1cXHUwMDNlc3RhLCBzdHJ1Y3Qgc3RhX2luZm8sIHN0YSk7XFxuK1xcbitcXHRyZXR1cm4gYXRvbWljX3JlYWQoXFx1MDAyNnN0YS1cXHUwMDNlYWlydGltZVt0eHEtXFx1MDAzZWFjXS5hcWxfdHhfcGVuZGluZyk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdHhxX2FxbF9wZW5kaW5nKTtcXG4rXFxuIHN0YXRpYyBib29sXFxuIGllZWU4MDIxMV90eHFfc2NoZWR1bGVfYWlydGltZV9jaGVjayhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTggYWMpXFxuIHtcXG5AQCAtNDI3NywxNSArNDI5OSwxNSBAQCBib29sIGllZWU4MDIxMV90eHFfbWF5X3RyYW5zbWl0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbiBcXG4gXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZsb2NhbC1cXHUwMDNlYWN0aXZlX3R4cV9sb2NrW2FjXSk7XFxuIFxcbi1cXHRpZiAoIXR4cWktXFx1MDAzZXR4cS5zdGEpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXG4gXFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNnR4cWktXFx1MDAzZXNjaGVkdWxlX29yZGVyKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHRpZiAoIWllZWU4MDIxMV90eHFfc2NoZWR1bGVfYWlydGltZV9jaGVjayhsb2NhbCwgYWMpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuK1xcdGlmICghdHhxaS1cXHUwMDNldHhxLnN0YSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaXRlciwgdG1wLCBcXHUwMDI2bG9jYWwtXFx1MDAzZWFjdGl2ZV90eHFzW2FjXSxcXG4gXFx0XFx0XFx0XFx0IHNjaGVkdWxlX29yZGVyKSB7XFxuIFxcdFxcdGlmIChpdGVyID09IHR4cWkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjU0OjMyLjIyOTUyNzU2NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjUwNzcxODE3NDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWVlZTgwMjExX3N0YV91cGRhdGVfcGVuZGluZ19haXJ0aW1lXCIsXG4gICAgXCJpZWVlODAyMTFfdHhxX2FpcnRpbWVfY2hlY2tcIixcbiAgICBcImllZWU4MDIxMV90eHFfYXFsX3BlbmRpbmdcIixcbiAgICBcImllZWU4MDIxMV9yYXRlX2V4cGVjdGVkX3R4X2FpcnRpbWVcIixcbiAgICBcInN0YV9lc3RpbWF0ZV9leHBlY3RlZF90aHJvdWdocHV0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBBaXJ0aW1lIFF1ZXVlIExpbWl0IChBUUwpIHN1cHBvcnQgZm9yIG11bHRpY2FzdCB0cmFmZmljIGFuZCBtb2RpZmllcyB0aGUgZXhwZWN0ZWQgdGhyb3VnaHB1dCBjYWxjdWxhdGlvbiBmb3Igc3RhdGlvbnMgaW4gbWFjODAyMTEuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbG9naWMgZm9yIDgwMi4xMSBuZXR3b3JraW5nIGFuZCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBtYWM4MDIxMV9od3NpbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3OWQ1ODUzOWJlYjc0MGJjNTdiNjMyZjE3ODc0NWNjNWNhODJmY2EyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjIgMTQ6NTQ6MjkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oIGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuaW5kZXggZjVhYmYxZGI3NTU4YmMuLjczNTRiYTA3OTM2M2E1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuKysrIGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuQEAgLTM3MjIsNiArMzcyMiw3IEBAIGVudW0gd2lwaHlfcGFyYW1zX2ZsYWdzIHtcbiAvKiBUaGUgcGVyIFRYUSBkZXZpY2UgcXVldWUgbGltaXQgaW4gYWlydGltZSAqL1xuICNkZWZpbmUgSUVFRTgwMjExX0RFRkFVTFRfQVFMX1RYUV9MSU1JVF9MXHQ1MDAwXG4gI2RlZmluZSBJRUVFODAyMTFfREVGQVVMVF9BUUxfVFhRX0xJTUlUX0hcdDEyMDAwXG4rI2RlZmluZSBJRUVFODAyMTFfREVGQVVMVF9BUUxfVFhRX0xJTUlUX01DXHQ1MDAwMFxuIFxuIC8qIFRoZSBwZXIgaW50ZXJmYWNlIGFpcnRpbWUgdGhyZXNob2xkIHRvIHN3aXRjaCB0byBsb3dlciBxdWV1ZSBsaW1pdCAqL1xuICNkZWZpbmUgSUVFRTgwMjExX0FRTF9USFJFU0hPTERcdFx0XHQyNDAwMFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmggYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXG5pbmRleCA0Zjk1ZGEwMjM3NDZmOS4uMjNkOGQ0NjM5Y2RkNmQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXG4rKysgYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXG5AQCAtMTM1NCw4ICsxMzU0LDggQEAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvIHtcbiBcdCAgICBzdGF0dXNfZGF0YV9pZHI6MSxcbiBcdCAgICBzdGF0dXNfZGF0YToxMyxcbiBcdCAgICBod19xdWV1ZTo0LFxuK1x0ICAgIHR4X3RpbWVfbWM6MSxcbiBcdCAgICB0eF90aW1lX2VzdDoxMDtcbi1cdC8qIDEgZnJlZSBiaXQgKi9cbiBcbiBcdHVuaW9uIHtcbiBcdFx0c3RydWN0IHtcbkBAIC02ODc2LDYgKzY4NzYsMTcgQEAgdm9pZCBpZWVlODAyMTFfc3RhX3JlZ2lzdGVyX2FpcnRpbWUoc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSwgdTggdGlkLFxuIGJvb2xcbiBpZWVlODAyMTFfdHhxX2FpcnRpbWVfY2hlY2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdHhxICp0eHEpO1xuIFxuKy8qKlxuKyAqIGllZWU4MDIxMV90eHFfYXFsX3BlbmRpbmcgLSBnZXQgcGVuZGluZyBBUUwgYWlydGltZSBmb3IgYSB0eHFcbisgKlxuKyAqIEBodzogcG9pbnRlciBvYnRhaW5lZCBmcm9tIGllZWU4MDIxMV9hbGxvY19odygpXG4rICogQHR4cTogcG9pbnRlciBvYnRhaW5lZCBmcm9tIHN0YXRpb24gb3IgdmlydHVhbCBpbnRlcmZhY2VcbisgKlxuKyAqIFJldHVybjogcGVuZGluZyBhaXJ0aW1lIChpbiB1c2VjKSBmb3IgdGhlIGdpdmVuIHR4cS5cbisgKi9cbit1MzIgaWVlZTgwMjExX3R4cV9hcWxfcGVuZGluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbitcdFx0XHQgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqdHhxKTtcbitcbiAvKipcbiAgKiBpZWVlODAyMTFfaXRlcl9rZXlzIC0gaXRlcmF0ZSBrZXlzIHByb2dyYW1tZWQgaW50byB0aGUgZGV2aWNlXG4gICogQGh3OiBwb2ludGVyIG9idGFpbmVkIGZyb20gaWVlZTgwMjExX2FsbG9jX2h3KClcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvYWlydGltZS5jIGIvbmV0L21hYzgwMjExL2FpcnRpbWUuY1xuaW5kZXggYzYxZGY2MzcyMzJhOWIuLjBjNTRjZGJkNzUzY2Q3IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2FpcnRpbWUuY1xuKysrIGIvbmV0L21hYzgwMjExL2FpcnRpbWUuY1xuQEAgLTY4NSw3ICs2ODUsNyBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9maWxsX3J4X3N0YXR1cyhzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdCxcbiBcdGlmIChpZWVlODAyMTFfZmlsbF9yYXRlX2luZm8oaHcsIHN0YXQsIGJhbmQsIHJpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAoIWllZWU4MDIxMV9yYXRlX3ZhbGlkKHJhdGUpKVxuK1x0aWYgKCFyYXRlIHx8ICFpZWVlODAyMTFfcmF0ZV92YWxpZChyYXRlKSlcbiBcdFx0cmV0dXJuIC0xO1xuIFxuIFx0aWYgKHJhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9UWF9SQ18xNjBfTUhaX1dJRFRIKVxuQEAgLTc1Myw2ICs3NTMsNTMgQEAgdTMyIGllZWU4MDIxMV9jYWxjX3R4X2FpcnRpbWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMV9jYWxjX3R4X2FpcnRpbWUpO1xuIFxuK3UzMiBpZWVlODAyMTFfcmF0ZV9leHBlY3RlZF90eF9haXJ0aW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqdHhfcmF0ZSxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgcmF0ZV9pbmZvICpyaSxcbitcdFx0XHRcdCAgICAgICBlbnVtIG5sODAyMTFfYmFuZCBiYW5kLFxuK1x0XHRcdFx0ICAgICAgIGJvb2wgYW1wZHUsIGludCBsZW4pXG4re1xuK1x0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgc3RhdDtcbitcdHUzMiBkdXJhdGlvbiwgb3ZlcmhlYWQ7XG4rXHR1OCBhZ2dfc2hpZnQ7XG4rXG4rXHRpZiAoaWVlZTgwMjExX2ZpbGxfcnhfc3RhdHVzKFx1MDAyNnN0YXQsIGh3LCB0eF9yYXRlLCByaSwgYmFuZCwgbGVuKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoc3RhdC5lbmNvZGluZyA9PSBSWF9FTkNfTEVHQUNZIHx8ICFhbXBkdSlcbitcdFx0cmV0dXJuIGllZWU4MDIxMV9jYWxjX3J4X2FpcnRpbWUoaHcsIFx1MDAyNnN0YXQsIGxlbikgKiAxMDI0O1xuK1xuK1x0ZHVyYXRpb24gPSBpZWVlODAyMTFfZ2V0X3JhdGVfZHVyYXRpb24oaHcsIFx1MDAyNnN0YXQsIFx1MDAyNm92ZXJoZWFkKTtcbitcbitcdC8qXG4rXHQgKiBBc3N1bWUgdGhhdCBIVC9WSFQgdHJhbnNtaXNzaW9uIG9uIGFueSBBQyBleGNlcHQgVk8gd2lsbFxuK1x0ICogdXNlIGFnZ3JlZ2F0aW9uLiBTaW5jZSB3ZSBkb24ndCBoYXZlIHJlbGlhYmxlIHJlcG9ydGluZ1xuK1x0ICogb2YgYWdncmVnYXRpb24gbGVuZ3RoLCBhc3N1bWUgYW4gYXZlcmFnZSBzaXplIGJhc2VkIG9uIHRoZVxuK1x0ICogdHggcmF0ZS5cbitcdCAqIFRoaXMgd2lsbCBub3QgYmUgdmVyeSBhY2N1cmF0ZSwgYnV0IG11Y2ggYmV0dGVyIHRoYW4gc2ltcGx5XG4rXHQgKiBhc3N1bWluZyB1bi1hZ2dyZWdhdGVkIHR4IGluIGFsbCBjYXNlcy5cbitcdCAqL1xuK1x0aWYgKGR1cmF0aW9uIFx1MDAzZSA0MDAgKiAxMDI0KSAvKiBcdTAwM2M9IFZIVDIwIE1DUzIgMVMgKi9cbitcdFx0YWdnX3NoaWZ0ID0gMTtcbitcdGVsc2UgaWYgKGR1cmF0aW9uIFx1MDAzZSAyNTAgKiAxMDI0KSAvKiBcdTAwM2M9IFZIVDIwIE1DUzMgMVMgb3IgTUNTMSAyUyAqL1xuK1x0XHRhZ2dfc2hpZnQgPSAyO1xuK1x0ZWxzZSBpZiAoZHVyYXRpb24gXHUwMDNlIDE1MCAqIDEwMjQpIC8qIFx1MDAzYz0gVkhUMjAgTUNTNSAxUyBvciBNQ1MyIDJTICovXG4rXHRcdGFnZ19zaGlmdCA9IDM7XG4rXHRlbHNlIGlmIChkdXJhdGlvbiBcdTAwM2UgNzAgKiAxMDI0KSAvKiBcdTAwM2M9IFZIVDIwIE1DUzUgMlMgKi9cbitcdFx0YWdnX3NoaWZ0ID0gNDtcbitcdGVsc2UgaWYgKHN0YXQuZW5jb2RpbmcgIT0gUlhfRU5DX0hFIHx8XG4rXHRcdCBkdXJhdGlvbiBcdTAwM2UgMjAgKiAxMDI0KSAvKiBcdTAwM2M9IEhFNDAgTUNTNiAyUyAqL1xuK1x0XHRhZ2dfc2hpZnQgPSA1O1xuK1x0ZWxzZVxuK1x0XHRhZ2dfc2hpZnQgPSA2O1xuK1xuK1x0ZHVyYXRpb24gKj0gbGVuO1xuK1x0ZHVyYXRpb24gLz0gQVZHX1BLVF9TSVpFO1xuK1x0ZHVyYXRpb24gKz0gKG92ZXJoZWFkICogMTAyNCBcdTAwM2VcdTAwM2UgYWdnX3NoaWZ0KTtcbitcbitcdHJldHVybiBkdXJhdGlvbjtcbit9XG4rXG4gdTMyIGllZWU4MDIxMV9jYWxjX2V4cGVjdGVkX3R4X2FpcnRpbWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLFxuQEAgLTc3NSw0NSArODIyLDEzIEBAIHUzMiBpZWVlODAyMTFfY2FsY19leHBlY3RlZF90eF9haXJ0aW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIFx0aWYgKHB1YnN0YSkge1xuIFx0XHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IGNvbnRhaW5lcl9vZihwdWJzdGEsIHN0cnVjdCBzdGFfaW5mbyxcbiBcdFx0XHRcdFx0XHQgICAgc3RhKTtcbi1cdFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgc3RhdDtcbiBcdFx0c3RydWN0IGllZWU4MDIxMV90eF9yYXRlICp0eF9yYXRlID0gXHUwMDI2c3RhLVx1MDAzZWRlZmxpbmsudHhfc3RhdHMubGFzdF9yYXRlO1xuIFx0XHRzdHJ1Y3QgcmF0ZV9pbmZvICpyaSA9IFx1MDAyNnN0YS1cdTAwM2VkZWZsaW5rLnR4X3N0YXRzLmxhc3RfcmF0ZV9pbmZvO1xuLVx0XHR1MzIgZHVyYXRpb24sIG92ZXJoZWFkO1xuLVx0XHR1OCBhZ2dfc2hpZnQ7XG4tXG4tXHRcdGlmIChpZWVlODAyMTFfZmlsbF9yeF9zdGF0dXMoXHUwMDI2c3RhdCwgaHcsIHR4X3JhdGUsIHJpLCBiYW5kLCBsZW4pKVxuLVx0XHRcdHJldHVybiAwO1xuK1x0XHR1MzIgZHVyYXRpb247XG4gXG4tXHRcdGlmIChzdGF0LmVuY29kaW5nID09IFJYX0VOQ19MRUdBQ1kgfHwgIWFtcGR1KVxuLVx0XHRcdHJldHVybiBpZWVlODAyMTFfY2FsY19yeF9haXJ0aW1lKGh3LCBcdTAwMjZzdGF0LCBsZW4pO1xuLVxuLVx0XHRkdXJhdGlvbiA9IGllZWU4MDIxMV9nZXRfcmF0ZV9kdXJhdGlvbihodywgXHUwMDI2c3RhdCwgXHUwMDI2b3ZlcmhlYWQpO1xuLVx0XHQvKlxuLVx0XHQgKiBBc3N1bWUgdGhhdCBIVC9WSFQgdHJhbnNtaXNzaW9uIG9uIGFueSBBQyBleGNlcHQgVk8gd2lsbFxuLVx0XHQgKiB1c2UgYWdncmVnYXRpb24uIFNpbmNlIHdlIGRvbid0IGhhdmUgcmVsaWFibGUgcmVwb3J0aW5nXG4tXHRcdCAqIG9mIGFnZ3JlZ2F0aW9uIGxlbmd0aCwgYXNzdW1lIGFuIGF2ZXJhZ2Ugc2l6ZSBiYXNlZCBvbiB0aGVcbi1cdFx0ICogdHggcmF0ZS5cbi1cdFx0ICogVGhpcyB3aWxsIG5vdCBiZSB2ZXJ5IGFjY3VyYXRlLCBidXQgbXVjaCBiZXR0ZXIgdGhhbiBzaW1wbHlcbi1cdFx0ICogYXNzdW1pbmcgdW4tYWdncmVnYXRlZCB0eCBpbiBhbGwgY2FzZXMuXG4tXHRcdCAqL1xuLVx0XHRpZiAoZHVyYXRpb24gXHUwMDNlIDQwMCAqIDEwMjQpIC8qIFx1MDAzYz0gVkhUMjAgTUNTMiAxUyAqL1xuLVx0XHRcdGFnZ19zaGlmdCA9IDE7XG4tXHRcdGVsc2UgaWYgKGR1cmF0aW9uIFx1MDAzZSAyNTAgKiAxMDI0KSAvKiBcdTAwM2M9IFZIVDIwIE1DUzMgMVMgb3IgTUNTMSAyUyAqL1xuLVx0XHRcdGFnZ19zaGlmdCA9IDI7XG4tXHRcdGVsc2UgaWYgKGR1cmF0aW9uIFx1MDAzZSAxNTAgKiAxMDI0KSAvKiBcdTAwM2M9IFZIVDIwIE1DUzUgMVMgb3IgTUNTMiAyUyAqL1xuLVx0XHRcdGFnZ19zaGlmdCA9IDM7XG4tXHRcdGVsc2UgaWYgKGR1cmF0aW9uIFx1MDAzZSA3MCAqIDEwMjQpIC8qIFx1MDAzYz0gVkhUMjAgTUNTNSAyUyAqL1xuLVx0XHRcdGFnZ19zaGlmdCA9IDQ7XG4tXHRcdGVsc2UgaWYgKHN0YXQuZW5jb2RpbmcgIT0gUlhfRU5DX0hFIHx8XG4tXHRcdFx0IGR1cmF0aW9uIFx1MDAzZSAyMCAqIDEwMjQpIC8qIFx1MDAzYz0gSEU0MCBNQ1M2IDJTICovXG4tXHRcdFx0YWdnX3NoaWZ0ID0gNTtcbi1cdFx0ZWxzZVxuLVx0XHRcdGFnZ19zaGlmdCA9IDY7XG4tXG4tXHRcdGR1cmF0aW9uICo9IGxlbjtcbi1cdFx0ZHVyYXRpb24gLz0gQVZHX1BLVF9TSVpFO1xuK1x0XHRkdXJhdGlvbiA9IGllZWU4MDIxMV9yYXRlX2V4cGVjdGVkX3R4X2FpcnRpbWUoaHcsIHR4X3JhdGUsIHJpLFxuK1x0XHRcdFx0XHRcdFx0ICAgICAgYmFuZCwgdHJ1ZSwgbGVuKTtcbiBcdFx0ZHVyYXRpb24gLz0gMTAyNDtcbi1cdFx0ZHVyYXRpb24gKz0gKG92ZXJoZWFkIFx1MDAzZVx1MDAzZSBhZ2dfc2hpZnQpO1xuIFxuIFx0XHRyZXR1cm4gbWF4X3QodTMyLCBkdXJhdGlvbiwgNCk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RlYnVnZnMuYyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmNcbmluZGV4IGE0ZDU0NjFmNjQ4MGYwLi44ZWJmNWJjZjNjMGVjMSAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmNcbisrKyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmNcbkBAIC0yMTAsMTEgKzIxMCwxMyBAQCBzdGF0aWMgc3NpemVfdCBhcWxfcGVuZGluZ19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRcdFwiVkkgICAgICV1IHVzXFxuXCJcbiBcdFx0XHRcIkJFICAgICAldSB1c1xcblwiXG4gXHRcdFx0XCJCSyAgICAgJXUgdXNcXG5cIlxuK1x0XHRcdFwiTUMgICAgICV1IHVzXFxuXCJcbiBcdFx0XHRcInRvdGFsICAldSB1c1xcblwiLFxuIFx0XHRcdGF0b21pY19yZWFkKFx1MDAyNmxvY2FsLVx1MDAzZWFxbF9hY19wZW5kaW5nX2FpcnRpbWVbSUVFRTgwMjExX0FDX1ZPXSksXG4gXHRcdFx0YXRvbWljX3JlYWQoXHUwMDI2bG9jYWwtXHUwMDNlYXFsX2FjX3BlbmRpbmdfYWlydGltZVtJRUVFODAyMTFfQUNfVkldKSxcbiBcdFx0XHRhdG9taWNfcmVhZChcdTAwMjZsb2NhbC1cdTAwM2VhcWxfYWNfcGVuZGluZ19haXJ0aW1lW0lFRUU4MDIxMV9BQ19CRV0pLFxuIFx0XHRcdGF0b21pY19yZWFkKFx1MDAyNmxvY2FsLVx1MDAzZWFxbF9hY19wZW5kaW5nX2FpcnRpbWVbSUVFRTgwMjExX0FDX0JLXSksXG4rXHRcdFx0YXRvbWljX3JlYWQoXHUwMDI2bG9jYWwtXHUwMDNlYXFsX21jX3BlbmRpbmdfYWlydGltZSksXG4gXHRcdFx0YXRvbWljX3JlYWQoXHUwMDI2bG9jYWwtXHUwMDNlYXFsX3RvdGFsX3BlbmRpbmdfYWlydGltZSkpO1xuIFx0cmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcyxcbiBcdFx0XHRcdCAgICAgICBidWYsIGxlbik7XG5AQCAtMjM5LDcgKzI0MSw4IEBAIHN0YXRpYyBzc2l6ZV90IGFxbF90eHFfbGltaXRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdFx0XHRcIlZPXHQldVx0XHQldVxcblwiXG4gXHRcdFx0XCJWSVx0JXVcdFx0JXVcXG5cIlxuIFx0XHRcdFwiQkVcdCV1XHRcdCV1XFxuXCJcbi1cdFx0XHRcIkJLXHQldVx0XHQldVxcblwiLFxuK1x0XHRcdFwiQktcdCV1XHRcdCV1XFxuXCJcbitcdFx0XHRcIk1DXHQldVxcblwiLFxuIFx0XHRcdGxvY2FsLVx1MDAzZWFxbF90eHFfbGltaXRfbG93W0lFRUU4MDIxMV9BQ19WT10sXG4gXHRcdFx0bG9jYWwtXHUwMDNlYXFsX3R4cV9saW1pdF9oaWdoW0lFRUU4MDIxMV9BQ19WT10sXG4gXHRcdFx0bG9jYWwtXHUwMDNlYXFsX3R4cV9saW1pdF9sb3dbSUVFRTgwMjExX0FDX1ZJXSxcbkBAIC0yNDcsNyArMjUwLDggQEAgc3RhdGljIHNzaXplX3QgYXFsX3R4cV9saW1pdF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRcdGxvY2FsLVx1MDAzZWFxbF90eHFfbGltaXRfbG93W0lFRUU4MDIxMV9BQ19CRV0sXG4gXHRcdFx0bG9jYWwtXHUwMDNlYXFsX3R4cV9saW1pdF9oaWdoW0lFRUU4MDIxMV9BQ19CRV0sXG4gXHRcdFx0bG9jYWwtXHUwMDNlYXFsX3R4cV9saW1pdF9sb3dbSUVFRTgwMjExX0FDX0JLXSxcbi1cdFx0XHRsb2NhbC1cdTAwM2VhcWxfdHhxX2xpbWl0X2hpZ2hbSUVFRTgwMjExX0FDX0JLXSk7XG4rXHRcdFx0bG9jYWwtXHUwMDNlYXFsX3R4cV9saW1pdF9oaWdoW0lFRUU4MDIxMV9BQ19CS10sXG4rXHRcdFx0bG9jYWwtXHUwMDNlYXFsX3R4cV9saW1pdF9tYyk7XG4gXHRyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLFxuIFx0XHRcdFx0ICAgICAgIGJ1ZiwgbGVuKTtcbiB9XG5AQCAtMjczLDYgKzI3NywxMSBAQCBzdGF0aWMgc3NpemVfdCBhcWxfdHhxX2xpbWl0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0ZWxzZVxuIFx0XHRidWZbY291bnRdID0gJ1xcMCc7XG4gXG4rXHRpZiAoc3NjYW5mKGJ1ZiwgXCJtY2FzdCAldVwiLCBcdTAwMjZxX2xpbWl0X2xvdykgPT0gMSkge1xuK1x0XHRsb2NhbC1cdTAwM2VhcWxfdHhxX2xpbWl0X21jID0gcV9saW1pdF9sb3c7XG4rXHRcdHJldHVybiBjb3VudDtcbitcdH1cbitcbiBcdGlmIChzc2NhbmYoYnVmLCBcIiV1ICV1ICV1XCIsIFx1MDAyNmFjLCBcdTAwMjZxX2xpbWl0X2xvdywgXHUwMDI2cV9saW1pdF9oaWdoKSAhPSAzKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaCBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXG5pbmRleCAzNGE5ZWE4YjZmODU3ZS4uNzhmZWE3YTE3YWU3NjYgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxuKysrIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbkBAIC0xNDY0LDEwICsxNDY0LDEyIEBAIHN0cnVjdCBpZWVlODAyMTFfbG9jYWwge1xuIFx0c3BpbmxvY2tfdCBoYW5kbGVfd2FrZV90eF9xdWV1ZV9sb2NrO1xuIFxuIFx0dTE2IGFpcnRpbWVfZmxhZ3M7XG4rXHR1MzIgYXFsX3R4cV9saW1pdF9tYztcbiBcdHUzMiBhcWxfdHhxX2xpbWl0X2xvd1tJRUVFODAyMTFfTlVNX0FDU107XG4gXHR1MzIgYXFsX3R4cV9saW1pdF9oaWdoW0lFRUU4MDIxMV9OVU1fQUNTXTtcbiBcdHUzMiBhcWxfdGhyZXNob2xkO1xuIFx0YXRvbWljX3QgYXFsX3RvdGFsX3BlbmRpbmdfYWlydGltZTtcbitcdGF0b21pY190IGFxbF9tY19wZW5kaW5nX2FpcnRpbWU7XG4gXHRhdG9taWNfdCBhcWxfYWNfcGVuZGluZ19haXJ0aW1lW0lFRUU4MDIxMV9OVU1fQUNTXTtcbiBcbiBcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzICpvcHM7XG5AQCAtMjkzOSw2ICsyOTQxLDExIEBAIHU4ICppZWVlODAyMTFfZ2V0X2Jzc2lkKHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsIHNpemVfdCBsZW4sXG4gXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBpZWVlODAyMTFfZXRodG9vbF9vcHM7XG4gXG4rdTMyIGllZWU4MDIxMV9yYXRlX2V4cGVjdGVkX3R4X2FpcnRpbWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICp0eF9yYXRlLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCByYXRlX2luZm8gKnJpLFxuK1x0XHRcdFx0ICAgICAgIGVudW0gbmw4MDIxMV9iYW5kIGJhbmQsXG4rXHRcdFx0XHQgICAgICAgYm9vbCBhbXBkdSwgaW50IGxlbik7XG4gdTMyIGllZWU4MDIxMV9jYWxjX2V4cGVjdGVkX3R4X2FpcnRpbWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tYWluLmMgYi9uZXQvbWFjODAyMTEvbWFpbi5jXG5pbmRleCBlYjFlYWFmMzQ2MTJlMS4uYjVkYzdmNjU5YjVkZTUgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvbWFpbi5jXG4rKysgYi9uZXQvbWFjODAyMTEvbWFpbi5jXG5AQCAtOTg4LDYgKzk4OCw3IEBAIHN0cnVjdCBpZWVlODAyMTFfaHcgKmllZWU4MDIxMV9hbGxvY19od19ubShzaXplX3QgcHJpdl9kYXRhX2xlbixcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNmxvY2FsLVx1MDAzZXJ4X3BhdGhfbG9jayk7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZsb2NhbC1cdTAwM2VxdWV1ZV9zdG9wX3JlYXNvbl9sb2NrKTtcbiBcbitcdGxvY2FsLVx1MDAzZWFxbF90eHFfbGltaXRfbWMgPSBJRUVFODAyMTFfREVGQVVMVF9BUUxfVFhRX0xJTUlUX01DO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSUVFRTgwMjExX05VTV9BQ1M7IGkrKykge1xuIFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZsb2NhbC1cdTAwM2VhY3RpdmVfdHhxc1tpXSk7XG4gXHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNmxvY2FsLVx1MDAzZWFjdGl2ZV90eHFfbG9ja1tpXSk7XG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uY1xuaW5kZXggMjJlYmEwZTZlNTRjNWIuLmQxMmFlZDljMTc1NjE3IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmNcbisrKyBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jXG5AQCAtMjQ5MSwxMyArMjQ5MSwyOCBAQCBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdGFfcmVjYWxjX2FnZ3JlZ2F0ZXMpO1xuIFxuIHZvaWQgaWVlZTgwMjExX3N0YV91cGRhdGVfcGVuZGluZ19haXJ0aW1lKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1OCBhYyxcbi1cdFx0XHRcdFx0ICB1MTYgdHhfYWlydGltZSwgYm9vbCB0eF9jb21wbGV0ZWQpXG4rXHRcdFx0XHRcdCAgdTE2IHR4X2FpcnRpbWUsIGJvb2wgdHhfY29tcGxldGVkLFxuK1x0XHRcdFx0XHQgIGJvb2wgbWNhc3QpXG4ge1xuIFx0aW50IHR4X3BlbmRpbmc7XG4gXG4gXHRpZiAoIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KGxvY2FsLVx1MDAzZWh3LndpcGh5LCBOTDgwMjExX0VYVF9GRUFUVVJFX0FRTCkpXG4gXHRcdHJldHVybjtcbiBcbitcdGlmIChtY2FzdCkge1xuK1x0XHRpZiAoIXR4X2NvbXBsZXRlZCkge1xuK1x0XHRcdGF0b21pY19hZGQodHhfYWlydGltZSwgXHUwMDI2bG9jYWwtXHUwMDNlYXFsX21jX3BlbmRpbmdfYWlydGltZSk7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4rXG4rXHRcdHR4X3BlbmRpbmcgPSBhdG9taWNfc3ViX3JldHVybih0eF9haXJ0aW1lLFxuK1x0XHRcdFx0XHQgICAgICAgXHUwMDI2bG9jYWwtXHUwMDNlYXFsX21jX3BlbmRpbmdfYWlydGltZSk7XG4rXHRcdGlmICh0eF9wZW5kaW5nIFx1MDAzYyAwKVxuK1x0XHRcdGF0b21pY19jbXB4Y2hnKFx1MDAyNmxvY2FsLVx1MDAzZWFxbF9tY19wZW5kaW5nX2FpcnRpbWUsXG4rXHRcdFx0XHQgICAgICAgdHhfcGVuZGluZywgMCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbiBcdGlmICghdHhfY29tcGxldGVkKSB7XG4gXHRcdGlmIChzdGEpXG4gXHRcdFx0YXRvbWljX2FkZCh0eF9haXJ0aW1lLFxuQEAgLTI3OTcsNiArMjgxMiwyOCBAQCB2b2lkIHN0YV9zZXRfYWNjdW11bGF0ZWRfcmVtb3ZlZF9saW5rc19zaW5mbyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbiBcdH1cbiB9XG4gXG4rc3RhdGljIHUzMiBzdGFfZXN0aW1hdGVfZXhwZWN0ZWRfdGhyb3VnaHB1dChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbitcdFx0XHRcdFx0ICAgIHN0cnVjdCByYXRlX2luZm8gKnJpLFxuK1x0XHRcdFx0XHQgICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYpXG4re1xuK1x0c3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBcdTAwMjZzdGEtXHUwMDNlc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlaHc7XG4rXHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZjtcbitcdHUzMiBkdXJhdGlvbjtcbitcdHU4IGJhbmQ7XG4rXG4rXHRjb25mID0gcmN1X2RlcmVmZXJlbmNlKGJzc19jb25mLVx1MDAzZWNoYW5jdHhfY29uZik7XG4rXHRpZiAoIWNvbmYpXG4rXHRcdHJldHVybiAwO1xuK1x0YmFuZCA9IGNvbmYtXHUwMDNlZGVmLmNoYW4tXHUwMDNlYmFuZDtcbitcbitcdGR1cmF0aW9uID0gaWVlZTgwMjExX3JhdGVfZXhwZWN0ZWRfdHhfYWlydGltZShodywgTlVMTCwgcmksIGJhbmQsIHRydWUsIDEwMjQpO1xuK1x0ZHVyYXRpb24gKz0gZHVyYXRpb24gXHUwMDNlXHUwMDNlIDQ7IC8qIGFkZCBhc3N1bWVkIHBhY2tldCBlcnJvciByYXRlIG9mIH42JSAqL1xuK1x0aWYgKCFkdXJhdGlvbilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4gKCgxMDI0ICogVVNFQ19QRVJfU0VDKSAvIGR1cmF0aW9uKSAqIDg7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHN0YV9zZXRfbGlua19zaW5mbyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbiBcdFx0XHQgICAgICAgc3RydWN0IGxpbmtfc3RhdGlvbl9pbmZvICpsaW5rX3NpbmZvLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluayxcbkBAIC0zMDExLDYgKzMwNDgsMTAgQEAgc3RhdGljIHZvaWQgc3RhX3NldF9saW5rX3NpbmZvKHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuIFx0bGlua19zaW5mby1cdTAwM2Vic3NfcGFyYW0uYmVhY29uX2ludGVydmFsID0gbGluay1cdTAwM2Vjb25mLVx1MDAzZWJlYWNvbl9pbnQ7XG4gXG4gXHR0aHIgPSBzdGFfZ2V0X2V4cGVjdGVkX3Rocm91Z2hwdXQoc3RhKTtcbitcdGlmICghdGhyIFx1MDAyNlx1MDAyNiAobGlua19zaW5mby1cdTAwM2VmaWxsZWQgXHUwMDI2IEJJVF9VTEwoTkw4MDIxMV9TVEFfSU5GT19UWF9CSVRSQVRFKSkpXG4rXHRcdHRociA9IHN0YV9lc3RpbWF0ZV9leHBlY3RlZF90aHJvdWdocHV0KHN0YSxcbitcdFx0XHRcdFx0XHQgICAgICBcdTAwMjZsaW5rX3NpbmZvLVx1MDAzZXR4cmF0ZSxcbitcdFx0XHRcdFx0XHQgICAgICBsaW5rLVx1MDAzZWNvbmYpO1xuIFxuIFx0aWYgKHRociAhPSAwKSB7XG4gXHRcdGxpbmtfc2luZm8tXHUwMDNlZmlsbGVkIHw9XG5AQCAtMzI2NCw2ICszMzA1LDE0IEBAIHZvaWQgc3RhX3NldF9zaW5mbyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgc3RydWN0IHN0YXRpb25faW5mbyAqc2luZm8sXG4gXHRpZiAodGhyICE9IDApIHtcbiBcdFx0c2luZm8tXHUwMDNlZmlsbGVkIHw9IEJJVF9VTEwoTkw4MDIxMV9TVEFfSU5GT19FWFBFQ1RFRF9USFJPVUdIUFVUKTtcbiBcdFx0c2luZm8tXHUwMDNlZXhwZWN0ZWRfdGhyb3VnaHB1dCA9IHRocjtcbitcdH0gZWxzZSBpZiAoIXN0YS1cdTAwM2VzdGEudmFsaWRfbGlua3MgXHUwMDI2XHUwMDI2XG4rXHRcdCAgIChzaW5mby1cdTAwM2VmaWxsZWQgXHUwMDI2IEJJVF9VTEwoTkw4MDIxMV9TVEFfSU5GT19UWF9CSVRSQVRFKSkpIHtcbitcdFx0dGhyID0gc3RhX2VzdGltYXRlX2V4cGVjdGVkX3Rocm91Z2hwdXQoc3RhLCBcdTAwMjZzaW5mby1cdTAwM2V0eHJhdGUsXG4rXHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2c2RhdGEtXHUwMDNldmlmLmJzc19jb25mKTtcbitcdFx0aWYgKHRocikge1xuK1x0XHRcdHNpbmZvLVx1MDAzZWZpbGxlZCB8PSBCSVRfVUxMKE5MODAyMTFfU1RBX0lORk9fRVhQRUNURURfVEhST1VHSFBVVCk7XG4rXHRcdFx0c2luZm8tXHUwMDNlZXhwZWN0ZWRfdGhyb3VnaHB1dCA9IHRocjtcbitcdFx0fVxuIFx0fVxuIFxuIFx0aWYgKCEoc2luZm8tXHUwMDNlZmlsbGVkIFx1MDAyNiBCSVRfVUxMKE5MODAyMTFfU1RBX0lORk9fQUNLX1NJR05BTCkpIFx1MDAyNlx1MDAyNlxuQEAgLTMyODQsNiArMzMzMyw3IEBAIHZvaWQgc3RhX3NldF9zaW5mbyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgc3RydWN0IHN0YXRpb25faW5mbyAqc2luZm8sXG4gXHRpZiAoc3RhLVx1MDAzZXN0YS52YWxpZF9saW5rcykge1xuIFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluaztcbiBcdFx0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhO1xuK1x0XHR1MzIgZXN0X3RociA9IDA7XG4gXHRcdGludCBsaW5rX2lkO1xuIFxuIFx0XHRzaW5mby1cdTAwM2VtbG9fcGFyYW1zX3ZhbGlkID0gdHJ1ZTtcbkBAIC0zMjk1LDE3ICszMzQ1LDI1IEBAIHZvaWQgc3RhX3NldF9zaW5mbyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgc3RydWN0IHN0YXRpb25faW5mbyAqc2luZm8sXG4gXHRcdHNpbmZvLVx1MDAzZXZhbGlkX2xpbmtzID0gc3RhLVx1MDAzZXN0YS52YWxpZF9saW5rcztcbiBcbiBcdFx0Zm9yX2VhY2hfdmFsaWRfbGluayhzaW5mbywgbGlua19pZCkge1xuK1x0XHRcdHN0cnVjdCBsaW5rX3N0YXRpb25faW5mbyAqbGlua19zaW5mbyA9IHNpbmZvLVx1MDAzZWxpbmtzW2xpbmtfaWRdO1xuK1xuIFx0XHRcdGxpbmtfc3RhID0gd2lwaHlfZGVyZWZlcmVuY2Uoc3RhLVx1MDAzZWxvY2FsLVx1MDAzZWh3LndpcGh5LFxuIFx0XHRcdFx0XHRcdCAgICAgc3RhLVx1MDAzZWxpbmtbbGlua19pZF0pO1xuIFx0XHRcdGxpbmsgPSB3aXBoeV9kZXJlZmVyZW5jZShzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2Vody53aXBoeSxcbiBcdFx0XHRcdFx0XHQgc2RhdGEtXHUwMDNlbGlua1tsaW5rX2lkXSk7XG4gXG4tXHRcdFx0aWYgKCFsaW5rX3N0YSB8fCAhc2luZm8tXHUwMDNlbGlua3NbbGlua19pZF0gfHwgIWxpbmspIHtcbitcdFx0XHRpZiAoIWxpbmtfc3RhIHx8ICFsaW5rX3NpbmZvIHx8ICFsaW5rKSB7XG4gXHRcdFx0XHRzaW5mby1cdTAwM2V2YWxpZF9saW5rcyBcdTAwMjY9IH5CSVQobGlua19pZCk7XG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR9XG4tXHRcdFx0c3RhX3NldF9saW5rX3NpbmZvKHN0YSwgc2luZm8tXHUwMDNlbGlua3NbbGlua19pZF0sXG4tXHRcdFx0XHRcdCAgIGxpbmssIHRpZHN0YXRzKTtcbitcdFx0XHRzdGFfc2V0X2xpbmtfc2luZm8oc3RhLCBsaW5rX3NpbmZvLCBsaW5rLCB0aWRzdGF0cyk7XG4rXHRcdFx0aWYgKCF0aHIgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIChsaW5rX3NpbmZvLVx1MDAzZWZpbGxlZCBcdTAwMjYgQklUX1VMTChOTDgwMjExX1NUQV9JTkZPX0VYUEVDVEVEX1RIUk9VR0hQVVQpKSlcbitcdFx0XHRcdGVzdF90aHIgKz0gbGlua19zaW5mby1cdTAwM2VleHBlY3RlZF90aHJvdWdocHV0O1xuK1x0XHR9XG4rXHRcdGlmIChlc3RfdGhyKSB7XG4rXHRcdFx0c2luZm8tXHUwMDNlZmlsbGVkIHw9IEJJVF9VTEwoTkw4MDIxMV9TVEFfSU5GT19FWFBFQ1RFRF9USFJPVUdIUFVUKTtcbitcdFx0XHRzaW5mby1cdTAwM2VleHBlY3RlZF90aHJvdWdocHV0ID0gZXN0X3RocjtcbiBcdFx0fVxuIFx0fVxuIH1cbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uaCBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oXG5pbmRleCA1ZGEzMTQyZDg1MTZlZi4uZWUwZDMyODc3YzViNDcgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uaFxuKysrIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmhcbkBAIC0xNDcsNyArMTQ3LDggQEAgc3RydWN0IGFpcnRpbWVfaW5mbyB7XG4gXG4gdm9pZCBpZWVlODAyMTFfc3RhX3VwZGF0ZV9wZW5kaW5nX2FpcnRpbWUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4gXHRcdFx0XHRcdCAgc3RydWN0IHN0YV9pbmZvICpzdGEsIHU4IGFjLFxuLVx0XHRcdFx0XHQgIHUxNiB0eF9haXJ0aW1lLCBib29sIHR4X2NvbXBsZXRlZCk7XG4rXHRcdFx0XHRcdCAgdTE2IHR4X2FpcnRpbWUsIGJvb2wgdHhfY29tcGxldGVkLFxuK1x0XHRcdFx0XHQgIGJvb2wgbWNhc3QpO1xuIFxuIHN0cnVjdCBzdGFfaW5mbztcbiBcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc3RhdHVzLmMgYi9uZXQvbWFjODAyMTEvc3RhdHVzLmNcbmluZGV4IGRkMWRiYmEwNjgzOGU1Li5jNzY0ZTFhOTU0ODY5NiAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9zdGF0dXMuY1xuKysrIGIvbmV0L21hYzgwMjExL3N0YXR1cy5jXG5AQCAtNzc0LDcgKzc3NCw3IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yZXBvcnRfdXNlZF9za2Ioc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4gXHRcdGllZWU4MDIxMV9zdGFfdXBkYXRlX3BlbmRpbmdfYWlydGltZShsb2NhbCwgc3RhLFxuIFx0XHRcdFx0XHRcdCAgICAgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYiksXG4gXHRcdFx0XHRcdFx0ICAgICB0eF90aW1lX2VzdCxcbi1cdFx0XHRcdFx0XHQgICAgIHRydWUpO1xuK1x0XHRcdFx0XHRcdCAgICAgdHJ1ZSwgaW5mby1cdTAwM2V0eF90aW1lX21jKTtcbiBcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHR9XG4gXG5AQCAtMTE4NiwxMCArMTE4NiwxMSBAQCB2b2lkIGllZWU4MDIxMV90eF9zdGF0dXNfZXh0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIFx0XHQvKiBEbyB0aGlzIGhlcmUgdG8gYXZvaWQgdGhlIGV4cGVuc2l2ZSBsb29rdXAgb2YgdGhlIHN0YVxuIFx0XHQgKiBpbiBpZWVlODAyMTFfcmVwb3J0X3VzZWRfc2tiKCkuXG4gXHRcdCAqL1xuK1x0XHRib29sIG1jYXN0ID0gSUVFRTgwMjExX1NLQl9DQihza2IpLVx1MDAzZXR4X3RpbWVfbWM7XG4gXHRcdGllZWU4MDIxMV9zdGFfdXBkYXRlX3BlbmRpbmdfYWlydGltZShsb2NhbCwgc3RhLFxuIFx0XHRcdFx0XHRcdCAgICAgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYiksXG4gXHRcdFx0XHRcdFx0ICAgICB0eF90aW1lX2VzdCxcbi1cdFx0XHRcdFx0XHQgICAgIHRydWUpO1xuK1x0XHRcdFx0XHRcdCAgICAgdHJ1ZSwgbWNhc3QpO1xuIFx0XHRpZWVlODAyMTFfaW5mb19zZXRfdHhfdGltZV9lc3QoSUVFRTgwMjExX1NLQl9DQihza2IpLCAwKTtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jXG5pbmRleCA5MWIxNDExMmUyNGYwOC4uODVhZmYzNzgxOTI0MmEgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvdHguY1xuKysrIGIvbmV0L21hYzgwMjExL3R4LmNcbkBAIC00MDU0LDIwICs0MDU0LDIwIEBAIHN0cnVjdCBza19idWZmICppZWVlODAyMTFfdHhfZGVxdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBlbmNhcF9vdXQ6XG4gXHRpbmZvLVx1MDAzZWNvbnRyb2wudmlmID0gdmlmO1xuIFxuLVx0aWYgKHR4LnN0YSBcdTAwMjZcdTAwMjZcbi1cdCAgICB3aXBoeV9leHRfZmVhdHVyZV9pc3NldChsb2NhbC1cdTAwM2Vody53aXBoeSwgTkw4MDIxMV9FWFRfRkVBVFVSRV9BUUwpKSB7XG4tXHRcdGJvb2wgYW1wZHUgPSB0eHEtXHUwMDNlYWMgIT0gSUVFRTgwMjExX0FDX1ZPO1xuK1x0aWYgKHdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KGxvY2FsLVx1MDAzZWh3LndpcGh5LCBOTDgwMjExX0VYVF9GRUFUVVJFX0FRTCkpIHtcbitcdFx0Ym9vbCBhbXBkdSA9IHR4cS1cdTAwM2VzdGEgXHUwMDI2XHUwMDI2IHR4cS1cdTAwM2VhYyAhPSBJRUVFODAyMTFfQUNfVk87XG4gXHRcdHUzMiBhaXJ0aW1lO1xuIFxuIFx0XHRhaXJ0aW1lID0gaWVlZTgwMjExX2NhbGNfZXhwZWN0ZWRfdHhfYWlydGltZShodywgdmlmLCB0eHEtXHUwMDNlc3RhLFxuIFx0XHRcdFx0XHRcdFx0ICAgICBza2ItXHUwMDNlbGVuLCBhbXBkdSk7XG4tXHRcdGlmIChhaXJ0aW1lKSB7XG4tXHRcdFx0YWlydGltZSA9IGllZWU4MDIxMV9pbmZvX3NldF90eF90aW1lX2VzdChpbmZvLCBhaXJ0aW1lKTtcbi1cdFx0XHRpZWVlODAyMTFfc3RhX3VwZGF0ZV9wZW5kaW5nX2FpcnRpbWUobG9jYWwsIHR4LnN0YSxcbi1cdFx0XHRcdFx0XHRcdCAgICAgdHhxLVx1MDAzZWFjLFxuLVx0XHRcdFx0XHRcdFx0ICAgICBhaXJ0aW1lLFxuLVx0XHRcdFx0XHRcdFx0ICAgICBmYWxzZSk7XG4tXHRcdH1cbitcdFx0aWYgKCFhaXJ0aW1lKVxuK1x0XHRcdHJldHVybiBza2I7XG4rXG4rXHRcdGFpcnRpbWUgPSBpZWVlODAyMTFfaW5mb19zZXRfdHhfdGltZV9lc3QoaW5mbywgYWlydGltZSk7XG4rXHRcdGluZm8tXHUwMDNldHhfdGltZV9tYyA9ICF0eC5zdGE7XG4rXHRcdGllZWU4MDIxMV9zdGFfdXBkYXRlX3BlbmRpbmdfYWlydGltZShsb2NhbCwgdHguc3RhLCB0eHEtXHUwMDNlYWMsXG4rXHRcdFx0XHRcdFx0ICAgICBhaXJ0aW1lLCBmYWxzZSxcbitcdFx0XHRcdFx0XHQgICAgIGluZm8tXHUwMDNldHhfdGltZV9tYyk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gc2tiO1xuQEAgLTQxMTksNiArNDExOSw3IEBAIHN0cnVjdCBpZWVlODAyMTFfdHhxICppZWVlODAyMTFfbmV4dF90eHEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKVxuIFx0c3RydWN0IGllZWU4MDIxMV90eHEgKnJldCA9IE5VTEw7XG4gXHRzdHJ1Y3QgdHhxX2luZm8gKnR4cWkgPSBOVUxMLCAqaGVhZCA9IE5VTEw7XG4gXHRib29sIGZvdW5kX2VsaWdpYmxlX3R4cSA9IGZhbHNlO1xuK1x0Ym9vbCBhcWxfY2hlY2s7XG4gXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2bG9jYWwtXHUwMDNlYWN0aXZlX3R4cV9sb2NrW2FjXSk7XG4gXG5AQCAtNDE0MiwyNiArNDE0MywyOCBAQCBzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqaWVlZTgwMjExX25leHRfdHhxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBhYylcbiBcdGlmICghaGVhZClcbiBcdFx0aGVhZCA9IHR4cWk7XG4gXG4rXHRhcWxfY2hlY2sgPSBpZWVlODAyMTFfdHhxX2FpcnRpbWVfY2hlY2soaHcsIFx1MDAyNnR4cWktXHUwMDNldHhxKTtcbitcdGlmIChhcWxfY2hlY2spXG4rXHRcdGZvdW5kX2VsaWdpYmxlX3R4cSA9IHRydWU7XG4rXG4gXHRpZiAodHhxaS1cdTAwM2V0eHEuc3RhKSB7XG4gXHRcdHN0cnVjdCBzdGFfaW5mbyAqc3RhID0gY29udGFpbmVyX29mKHR4cWktXHUwMDNldHhxLnN0YSxcbiBcdFx0XHRcdFx0XHQgICAgc3RydWN0IHN0YV9pbmZvLCBzdGEpO1xuLVx0XHRib29sIGFxbF9jaGVjayA9IGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVjayhodywgXHUwMDI2dHhxaS1cdTAwM2V0eHEpO1xuLVx0XHRzMzIgZGVmaWNpdCA9IGllZWU4MDIxMV9zdGFfZGVmaWNpdChzdGEsIHR4cWktXHUwMDNldHhxLmFjKTtcbiBcbi1cdFx0aWYgKGFxbF9jaGVjaylcbi1cdFx0XHRmb3VuZF9lbGlnaWJsZV90eHEgPSB0cnVlO1xuLVxuLVx0XHRpZiAoZGVmaWNpdCBcdTAwM2MgMClcbitcdFx0aWYgKGllZWU4MDIxMV9zdGFfZGVmaWNpdChzdGEsIHR4cWktXHUwMDNldHhxLmFjKSBcdTAwM2MgMCkge1xuIFx0XHRcdHN0YS1cdTAwM2VhaXJ0aW1lW3R4cWktXHUwMDNldHhxLmFjXS5kZWZpY2l0ICs9XG4gXHRcdFx0XHRzdGEtXHUwMDNlYWlydGltZV93ZWlnaHQ7XG4gXG4tXHRcdGlmIChkZWZpY2l0IFx1MDAzYyAwIHx8ICFhcWxfY2hlY2spIHtcbi1cdFx0XHRsaXN0X21vdmVfdGFpbChcdTAwMjZ0eHFpLVx1MDAzZXNjaGVkdWxlX29yZGVyLFxuLVx0XHRcdFx0ICAgICAgIFx1MDAyNmxvY2FsLVx1MDAzZWFjdGl2ZV90eHFzW3R4cWktXHUwMDNldHhxLmFjXSk7XG4tXHRcdFx0Z290byBiZWdpbjtcbitcdFx0XHRhcWxfY2hlY2sgPSBmYWxzZTtcbiBcdFx0fVxuIFx0fVxuIFxuK1x0aWYgKCFhcWxfY2hlY2spIHtcbitcdFx0bGlzdF9tb3ZlX3RhaWwoXHUwMDI2dHhxaS1cdTAwM2VzY2hlZHVsZV9vcmRlcixcbitcdFx0XHRcdCAgIFx1MDAyNmxvY2FsLVx1MDAzZWFjdGl2ZV90eHFzW3R4cWktXHUwMDNldHhxLmFjXSk7XG4rXHRcdGdvdG8gYmVnaW47XG4rXHR9XG4rXG4gXHRpZiAodHhxaS1cdTAwM2VzY2hlZHVsZV9yb3VuZCA9PSBsb2NhbC1cdTAwM2VzY2hlZHVsZV9yb3VuZFthY10pXG4gXHRcdGdvdG8gb3V0O1xuIFxuQEAgLTQyMjgsNyArNDIzMSw4IEBAIGJvb2wgaWVlZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdGlmICghdHhxLVx1MDAzZXN0YSlcbi1cdFx0cmV0dXJuIHRydWU7XG4rXHRcdHJldHVybiBhdG9taWNfcmVhZChcdTAwMjZsb2NhbC1cdTAwM2VhcWxfbWNfcGVuZGluZ19haXJ0aW1lKSBcdTAwM2NcbitcdFx0ICAgICAgIGxvY2FsLVx1MDAzZWFxbF90eHFfbGltaXRfbWM7XG4gXG4gXHRpZiAodW5saWtlbHkodHhxLVx1MDAzZXRpZCA9PSBJRUVFODAyMTFfTlVNX1RJRFMpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbkBAIC00MjQ4LDYgKzQyNTIsMjQgQEAgYm9vbCBpZWVlODAyMTFfdHhxX2FpcnRpbWVfY2hlY2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gfVxuIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrKTtcbiBcbit1MzIgaWVlZTgwMjExX3R4cV9hcWxfcGVuZGluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbitcdFx0XHQgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqdHhxKVxuK3tcbitcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpO1xuK1x0c3RydWN0IHN0YV9pbmZvICpzdGE7XG4rXG4rXHRpZiAodW5saWtlbHkodHhxLVx1MDAzZXRpZCA9PSBJRUVFODAyMTFfTlVNX1RJRFMpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmICghdHhxLVx1MDAzZXN0YSlcbitcdFx0cmV0dXJuIGF0b21pY19yZWFkKFx1MDAyNmxvY2FsLVx1MDAzZWFxbF9tY19wZW5kaW5nX2FpcnRpbWUpO1xuK1xuK1x0c3RhID0gY29udGFpbmVyX29mKHR4cS1cdTAwM2VzdGEsIHN0cnVjdCBzdGFfaW5mbywgc3RhKTtcbitcbitcdHJldHVybiBhdG9taWNfcmVhZChcdTAwMjZzdGEtXHUwMDNlYWlydGltZVt0eHEtXHUwMDNlYWNdLmFxbF90eF9wZW5kaW5nKTtcbit9XG4rRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdHhxX2FxbF9wZW5kaW5nKTtcbitcbiBzdGF0aWMgYm9vbFxuIGllZWU4MDIxMV90eHFfc2NoZWR1bGVfYWlydGltZV9jaGVjayhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTggYWMpXG4ge1xuQEAgLTQyNzcsMTUgKzQyOTksMTUgQEAgYm9vbCBpZWVlODAyMTFfdHhxX21heV90cmFuc21pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZsb2NhbC1cdTAwM2VhY3RpdmVfdHhxX2xvY2tbYWNdKTtcbiBcbi1cdGlmICghdHhxaS1cdTAwM2V0eHEuc3RhKVxuLVx0XHRnb3RvIG91dDtcbi1cbiBcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnR4cWktXHUwMDNlc2NoZWR1bGVfb3JkZXIpKVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdGlmICghaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9haXJ0aW1lX2NoZWNrKGxvY2FsLCBhYykpXG4gXHRcdGdvdG8gb3V0O1xuIFxuK1x0aWYgKCF0eHFpLVx1MDAzZXR4cS5zdGEpXG4rXHRcdGdvdG8gb3V0O1xuK1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGl0ZXIsIHRtcCwgXHUwMDI2bG9jYWwtXHUwMDNlYWN0aXZlX3R4cXNbYWNdLFxuIFx0XHRcdFx0IHNjaGVkdWxlX29yZGVyKSB7XG4gXHRcdGlmIChpdGVyID09IHR4cWkpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNDo1NDozMi4yMjk1Mjk1MDVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjA5NDM5MTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgbWFjODAyMTEgUGF0Y2ggZm9yIEFRTCBhbmQgVGhyb3VnaHB1dCBNb2RpZmljYXRpb25zKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyBtYWtpbmcgc29tZSBpbnRlcmVzdGluZyBjaGFuZ2VzIHRvIHRoZSBgbWFjODAyMTFgIHdpcmVsZXNzIHN0YWNrLiBMb29rcyBsaWtlIGl0J3MgYWRkaW5nIEFpcnRpbWUgUXVldWUgTGltaXQgKEFRTCkgc3VwcG9ydCwgc3BlY2lmaWNhbGx5IGZvciBtdWx0aWNhc3QgdHJhZmZpYyDigJMgdGhhdCdzIGEga2V5IGFyZWEgdG8gb3B0aW1pemUuIEl0J3MgYWxzbyBtb2RpZnlpbmcgaG93IHRoZSBleHBlY3RlZCB0aHJvdWdocHV0IGZvciBzdGF0aW9ucyBpcyBjYWxjdWxhdGVkLiBUaGF0J3MgaW50cmlndWluZzsgZ2V0dGluZyB0aG9zZSB0aHJvdWdocHV0IGVzdGltYXRpb25zIHJpZ2h0IGlzIGNydWNpYWwgZm9yIGFpcnRpbWUgZmFpcm5lc3MgYW5kIG92ZXJhbGwgcGVyZm9ybWFuY2UuXG5cbkkgc2VlIGl0IHRvdWNoZXMgcXVpdGUgYSBmZXcgY29yZSBmaWxlczogYGNmZzgwMjExLmhgLCBgbWFjODAyMTEuaGAsIHRoZSBhaXJ0aW1lIGltcGxlbWVudGF0aW9uIChgYWlydGltZS5jYCksIGRlYnVnIGZhY2lsaXRpZXMsIGludGVybmFsIElFRUU4MDIxMSBzdHJ1Y3R1cmVzLCB0aGUgbWFpbiBtb2R1bGUgKGBtYWluLmNgKSwgc3RhdGlvbiBpbmZvcm1hdGlvbiBtYW5hZ2VtZW50IChgc3RhX2luZm8uY2AsIGBzdGFfaW5mby5oYCksIHN0YXR1cyB1cGRhdGVzLCBhbmQgdGhlIHRyYW5zbWl0IHBhdGggKGB0eC5jYCkuIFRoYXQgaW5kaWNhdGVzIGl04oCZcyByZWFsbHkgZ2V0dGluZyBpbnRvIHRoZSBoZWFydCBvZiB0aGUgc3RhY2suXG5cbk5vdywgSSBuZWVkIHRvIHZlcmlmeSBpdHMgcmVhY2hhYmlsaXR5IGFuZCBmdW5jdGlvbmFsaXR5LiBTaW5jZSBpdCdzIG1vZGlmeWluZyB0aGUgY29yZSBsb2dpYyByZWxhdGVkIHRvIGFpcnRpbWUgY2FsY3VsYXRpb25zLCB0cmFuc21pc3Npb24gcXVldWUgKHR4cSkgYWlydGltZSBjaGVja3MsIGFuZCBzdGF0aW9uIHRocm91Z2hwdXQsIEkgbmVlZCB0byBrbm93IGhvdyB0byB0ZXN0IHRoaXMuIEkgdGhpbmsgSSBjYW4gdXNlIGBtYWM4MDIxMV9od3NpbWAgdG8gcmVhY2ggaXQsIHdoaWNoIGlzIGlkZWFsIGZvciB0aGlzIGtpbmQgb2YgbG93LWxldmVsIG1vZGlmaWNhdGlvbi5cblxuQmVmb3JlIEkgZ28gZnVydGhlciwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gTmF0dXJhbGx5LCBgTUFDODAyMTFgIGl0c2VsZiBpcyBhIGdpdmVuLiBJIHNob3VsZCBzZWFyY2ggdGhlIEtjb25maWcgZmlsZXMgZm9yIGFueSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBBUUwgc3BlY2lmaWNhbGx5LCBwYXJ0aWN1bGFybHkgYE5MODAyMTFfRVhUX0ZFQVRVUkVfQVFMYCBvciBqdXN0IGBBUUxgIHRvIG1ha2Ugc3VyZSB0aGUgZmVhdHVyZSBpcyBwcm9wZXJseSBlbmFibGVkLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDUxMSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjU0OjM4LjgzODk3MTYxNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjQzMzEyODMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkFRTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTEvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTQ6NTQ6MzkuMDYzMzE0MTA4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU5MjA0Mjk3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6XG5cbioqRGlnZ2luZyBpbnRvIG1hYzgwMjExIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhpcyBwcm9ibGVtLCBJIHdhbnQgdG8gbWFrZSBzdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgc29tZXRoaW5nIG9idmlvdXMuIFRoZSBmaXJzdCB0aGluZyBJJ20gZ29pbmcgdG8gZG8gaXMgcXVpY2tseSBzY2FuIG15IG1lbnRhbCBkYXRhYmFzZS4gVGhlcmUncyBhIGdvb2QgY2hhbmNlIEkgYWxyZWFkeSBrbm93IHRoaXMsIGJ1dCBsZXQncyBqdXN0IG1ha2UgYWJzb2x1dGVseSBjZXJ0YWluLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gc3BlY2lmaWNhbGx5IGNoZWNrIGZvciBhbnl0aGluZyByZWxhdGVkIHRvICptYWM4MDIxMSogY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwgaGVyZS4gQXJlIHRoZXJlIGFueSBjdXN0b20gZGlyZWN0aXZlcywgbW9kdWxlIHBhcmFtZXRlcnMsIG9yIHF1aXJrcyB0aGF0IG1pZ2h0IGJlIGluZmx1ZW5jaW5nIHRoZSBiZWhhdmlvciBJJ20gc2VlaW5nPyBJJ20gdGFsa2luZyBhYm91dCBhbnl0aGluZyB0aGF0IGNvdWxkIGJlIGEgc3BlY2lmaWMsIHRhcmdldGVkIHNldHRpbmcgZm9yIHRoYXQgc3Vic3lzdGVtLCBiZWZvcmUgSSBzdGFydCBsb29raW5nIGF0IG1vcmUgZ2VuZXJpYyBrZXJuZWwgb3Igc3lzdGVtLXdpZGUgc2V0dGluZ3MuIEl0J3Mgb2Z0ZW4gdGhlIGNhc2UgdGhhdCBzb21lIHN1YnRsZSBjb25maWd1cmF0aW9uIGlzIGp1c3Qgb3Zlcmxvb2tlZCBpbiB0aGUgbm9pc2UuIEkgd291bGQgaGF0ZSB0byBzcGVuZCBtb3JlIHRoYW4gYSBtaW51dGUgb24gYSBjb21wbGV4IHNvbHV0aW9uIG9ubHkgdG8gcmVhbGlzZSB0aGF0IGEgc2ltcGxlIGNvbmZpZyB3YXMgbWlzc2VkLiBMZXQncyBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIHNvbWV0aGluZyBiYXNpYyB0aGF0J3Mgc3BlY2lmaWMgdG8gdGhlIG1hYzgwMjExIGRyaXZlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyNTgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNDo1NDo0NC42NTUzNjA0NzlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg4MDU3NzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQUM4MDIxMVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTEvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI6Y29uZmlnIE1BQzgwMjExXFxubmV0L21hYzgwMjExL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBJRUVFIDgwMi4xMSBOZXR3b3JraW5nIFN0YWNrIChtYWM4MDIxMSlcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZz0xOT1pZiBNQUM4MDIxMSAhPSBuXFxubmV0L21hYzgwMjExL0tjb25maWctMjAtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjE6Y29uZmlnIE1BQzgwMjExX0hBU19SQ1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyLVxcdGJvb2xcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMy1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNDpjb25maWcgTUFDODAyMTFfUkNfTUlOU1RSRUxcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNS1cXHRib29sIFxcXCJNaW5zdHJlbFxcXCIgaWYgRVhQRVJUXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZz0zMT1jaG9pY2VcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQwLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjQxOmNvbmZpZyBNQUM4MDIxMV9SQ19ERUZBVUxUX01JTlNUUkVMXFxubmV0L21hYzgwMjExL0tjb25maWctNDItXFx0Ym9vbCBcXFwiTWluc3RyZWxcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZz00OD1lbmRjaG9pY2VcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00OS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo1MDpjb25maWcgTUFDODAyMTFfUkNfREVGQVVMVFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTUxLVxcdHN0cmluZ1xcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9NTc9Y29tbWVudCBcXFwiU29tZSB3aXJlbGVzcyBkcml2ZXJzIHJlcXVpcmUgYSByYXRlIGNvbnRyb2wgYWxnb3JpdGhtXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctNTktXFxubmV0L21hYzgwMjExL0tjb25maWc6NjA6Y29uZmlnIE1BQzgwMjExX0tVTklUX1RFU1RcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02MS1cXHR0cmlzdGF0ZSBcXFwiS1VuaXQgdGVzdHMgZm9yIG1hYzgwMjExXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02OS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3MDpjb25maWcgTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTcxLVxcdGJvb2wgXFxcIkVuYWJsZSBtYWM4MDIxMSBtZXNoIG5ldHdvcmtpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTc4LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjc5OmNvbmZpZyBNQUM4MDIxMV9MRURTXFxubmV0L21hYzgwMjExL0tjb25maWctODAtXFx0Ym9vbCBcXFwiRW5hYmxlIExFRCB0cmlnZ2Vyc1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTg3LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjg4OmNvbmZpZyBNQUM4MDIxMV9ERUJVR0ZTXFxubmV0L21hYzgwMjExL0tjb25maWctODktXFx0Ym9vbCBcXFwiRXhwb3J0IG1hYzgwMjExIGludGVybmFscyBpbiBEZWJ1Z0ZTXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctOTYtXFxubmV0L21hYzgwMjExL0tjb25maWc6OTc6Y29uZmlnIE1BQzgwMjExX01FU1NBR0VfVFJBQ0lOR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTk4LVxcdGJvb2wgXFxcIlRyYWNlIGFsbCBtYWM4MDIxMSBkZWJ1ZyBtZXNzYWdlc1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEwOS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMTA6bWVudWNvbmZpZyBNQUM4MDIxMV9ERUJVR19NRU5VXFxubmV0L21hYzgwMjExL0tjb25maWctMTExLVxcdGJvb2wgXFxcIlNlbGVjdCBtYWM4MDIxMSBkZWJ1Z2dpbmcgZmVhdHVyZXNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTUtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTE2OmNvbmZpZyBNQUM4MDIxMV9OT0lOTElORVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExNy1cXHRib29sIFxcXCJEbyBub3QgaW5saW5lIFRYL1JYIGhhbmRsZXJzXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTMxLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjEzMjpjb25maWcgTUFDODAyMTFfVkVSQk9TRV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEzMy1cXHRib29sIFxcXCJWZXJib3NlIGRlYnVnZ2luZyBvdXRwdXRcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNDItXFxubmV0L21hYzgwMjExL0tjb25maWc6MTQzOmNvbmZpZyBNQUM4MDIxMV9NTE1FX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTQ0LVxcdGJvb2wgXFxcIlZlcmJvc2UgbWFuYWdlZCBNTE1FIG91dHB1dFxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE1My1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNTQ6Y29uZmlnIE1BQzgwMjExX1NUQV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE1NS1cXHRib29sIFxcXCJWZXJib3NlIHN0YXRpb24gZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTYyLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE2Mzpjb25maWcgTUFDODAyMTFfSFRfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNjQtXFx0Ym9vbCBcXFwiVmVyYm9zZSBIVCBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNzQtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTc1OmNvbmZpZyBNQUM4MDIxMV9PQ0JfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNzYtXFx0Ym9vbCBcXFwiVmVyYm9zZSBPQ0IgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTg1LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE4Njpjb25maWcgTUFDODAyMTFfSUJTU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4Ny1cXHRib29sIFxcXCJWZXJib3NlIElCU1MgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTk2LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE5Nzpjb25maWcgTUFDODAyMTFfUFNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xOTgtXFx0Ym9vbCBcXFwiVmVyYm9zZSBwb3dlcnNhdmUgbW9kZSBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMDgtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjA5OmNvbmZpZyBNQUM4MDIxMV9NUExfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMTAtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHBlZXIgbGluayBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMjEtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjIyOmNvbmZpZyBNQUM4MDIxMV9NUEFUSF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyMy1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggcGF0aCBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzQtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjM1OmNvbmZpZyBNQUM4MDIxMV9NSFdNUF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzNi1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggSFdNUCByb3V0aW5nIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0Ny1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNDg6Y29uZmlnIE1BQzgwMjExX01FU0hfU1lOQ19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0OS1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggc3luY2hyb25pemF0aW9uIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1OC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNTk6Y29uZmlnIE1BQzgwMjExX01FU0hfQ1NBX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjYwLVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBjaGFubmVsIHN3aXRjaCBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjktXFxubmV0L21hYzgwMjExL0tjb25maWc6MjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIX1BTX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjcxLVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBwb3dlcnNhdmUgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjgwLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI4MTpjb25maWcgTUFDODAyMTFfVERMU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4Mi1cXHRib29sIFxcXCJWZXJib3NlIFRETFMgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjkyLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI5Mzpjb25maWcgTUFDODAyMTFfREVCVUdfQ09VTlRFUlNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yOTQtXFx0Ym9vbCBcXFwiRXh0cmEgc3RhdGlzdGljcyBmb3IgVFgvUlggZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMzA3LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjMwODpjb25maWcgTUFDODAyMTFfU1RBX0hBU0hfTUFYX1NJWkVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zMDktXFx0aW50IFxcXCJTdGF0aW9uIGhhc2ggdGFibGUgbWF4aW11bSBzaXplXFxcIiBpZiBNQUM4MDIxMV9ERUJVR19NRU5VXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjU0OjQ0Ljg0MzQyNDY5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODYzNjM1MTA3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1hYzgwMjExIEFpcnRpbWUgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIGNhbiBzZWUgaXQncyB0b3VjaGluZyBzb21lIGNyaXRpY2FsIHBhcnRzIG9mIHRoZSBtYWM4MDIxMSBhaXJ0aW1lIG1hbmFnZW1lbnQgc3lzdGVtLiBTcGVjaWZpY2FsbHksIGl0J3MgbW9kaWZ5aW5nIGBpZWVlODAyMTFfcmF0ZV9leHBlY3RlZF90eF9haXJ0aW1lYCwgYGllZWU4MDIxMV9jYWxjX2V4cGVjdGVkX3R4X2FpcnRpbWVgLCBgaWVlZTgwMjExX3N0YV91cGRhdGVfcGVuZGluZ19haXJ0aW1lYCwgYGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVja2AsIGFuZCBgaWVlZTgwMjExX3R4cV9hcWxfcGVuZGluZ2AuIFRoZXNlIGFyZSBhbGwgY29yZSBmdW5jdGlvbnMg4oCTIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcywgcmVhbGx5IOKAkyB3aXRoaW4gdGhlIGZyYW1ld29yaywgZXNwZWNpYWxseSBhcyB0aGV5IHJlbGF0ZSB0byBjYWxjdWxhdGluZyBhbmQgbWFuYWdpbmcgdHJhbnNtaXNzaW9uIGFpcnRpbWUgZm9yIDgwMi4xMSBmcmFtZXMuIFRoZSBjaGFuZ2VzIGhlcmUgY291bGQgYmUgcHJldHR5IGltcGFjdGZ1bCwgYWZmZWN0aW5nIHNjaGVkdWxpbmcsIGZhaXJuZXNzLCBhbmQgb3ZlcmFsbCBwZXJmb3JtYW5jZS4gVGltZSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgKndoeSogdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIGFyZSBiZWluZyB0YXJnZXRlZC4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUga2V5IGZ1bmN0aW9ucyBzbyBJIGNhbiBwcm9wZXJseSBhc3Nlc3MgdGhlIGltcGxpY2F0aW9uIG9mIHRoZSBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NDUsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTQ6NTQ6NTMuNDc5Nzc4NTY3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4Mjk1NTU2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZWVlODAyMTFfcmF0ZV9leHBlY3RlZF90eF9haXJ0aW1lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL2FpcnRpbWUuYz03NTQ9RVhQT1JUX1NZTUJPTF9HUEwoaWVlZTgwMjExX2NhbGNfdHhfYWlydGltZSk7XFxubmV0L21hYzgwMjExL2FpcnRpbWUuYy03NTUtXFxubmV0L21hYzgwMjExL2FpcnRpbWUuYzo3NTY6dTMyIGllZWU4MDIxMV9yYXRlX2V4cGVjdGVkX3R4X2FpcnRpbWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxubmV0L21hYzgwMjExL2FpcnRpbWUuYy03NTctXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqdHhfcmF0ZSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9haXJ0aW1lLmM9ODAzPXUzMiBpZWVlODAyMTFfY2FsY19leHBlY3RlZF90eF9haXJ0aW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxubmV0L21hYzgwMjExL2FpcnRpbWUuYy04MjgtXFxubmV0L21hYzgwMjExL2FpcnRpbWUuYzo4Mjk6XFx0XFx0ZHVyYXRpb24gPSBpZWVlODAyMTFfcmF0ZV9leHBlY3RlZF90eF9haXJ0aW1lKGh3LCB0eF9yYXRlLCByaSxcXG5uZXQvbWFjODAyMTEvYWlydGltZS5jLTgzMC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBiYW5kLCB0cnVlLCBsZW4pO1xcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9Mjk0Mj1leHRlcm4gY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGllZWU4MDIxMV9ldGh0b29sX29wcztcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yOTQzLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjI5NDQ6dTMyIGllZWU4MDIxMV9yYXRlX2V4cGVjdGVkX3R4X2FpcnRpbWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjk0NS1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICp0eF9yYXRlLFxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9MjgxNT1zdGF0aWMgdTMyIHN0YV9lc3RpbWF0ZV9leHBlY3RlZF90aHJvdWdocHV0KHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMjgyOC1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzoyODI5OlxcdGR1cmF0aW9uID0gaWVlZTgwMjExX3JhdGVfZXhwZWN0ZWRfdHhfYWlydGltZShodywgTlVMTCwgcmksIGJhbmQsIHRydWUsIDEwMjQpO1xcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTI4MzAtXFx0ZHVyYXRpb24gKz0gZHVyYXRpb24gXFx1MDAzZVxcdTAwM2UgNDsgLyogYWRkIGFzc3VtZWQgcGFja2V0IGVycm9yIHJhdGUgb2YgfjYlICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjU0OjUzLjc2MjczOTkwM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MzMzNTE0MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIGBpZWVlODAyMTFfdHhxX2FxbF9wZW5kaW5nYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYGllZWU4MDIxMV90eHFfYXFsX3BlbmRpbmdgLiBUaGF0IGZ1bmN0aW9uIG5hbWUgaXRzZWxmIGlzIGEgcHJldHR5IGJpZyBjbHVlLiBJdCdzIG9idmlvdXNseSByZWxhdGVkIHRvIHRoZSA4MDIuMTEgdHJhbnNtaXQgcXVldWUgYW5kIGxpa2VseSBjb25uZWN0ZWQgdG8gQWN0aXZlIFF1ZXVlIE1hbmFnZW1lbnQgKEFRTSkuIEknbSBhc3N1bWluZyB3ZSdyZSBsb29raW5nIGF0IHBlbmRpbmcgcGFja2V0cywgdGhlIG9uZXMgd2FpdGluZyB0byBiZSBzZW50LCByaWdodD8gR2l2ZW4gdGhlIGNvbnRleHQgb2YgQVFNLCBJJ2QgYmV0IHdlJ3JlIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJ3MgYmFjayBwcmVzc3VyZSBvciBjb25nZXN0aW9uIHdpdGhpbiB0aGUgcXVldWUuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiByZXBvcnRzIHRoZSBzdGF0ZSBvZiB0aGluZ3M7IGRvZXMgaXQgcmV0dXJuIGEgc2ltcGxlIGNvdW50LCBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiAqYW55KiBwYWNrZXRzIGFyZSBwZW5kaW5nLCBvciBzb21ldGhpbmcgbW9yZSBudWFuY2VkIGxpa2UgYSBwZXItQUMgKEFjY2VzcyBDYXRlZ29yeSkgYnJlYWtkb3duIG9yIGV2ZW4gc29tZSBraW5kIG9mIGVzdGltYXRlIG9mIHRoZSBxdWV1ZWQgYnl0ZXM/IEFyZSB3ZSB0YWxraW5nIGFib3V0IHBhY2tldHMgKmVucXVldWVkKiBidXQgbm90IHlldCAqdHJhbnNtaXR0ZWQqLCBvciBkbyB3ZSBpbmNsdWRlIHBhY2tldHMgaW4gZmxpZ2h0IHRvIGEgZGVncmVlPyBUaGlzIHdpbGwgYWZmZWN0IGhvdyBpdCdzIHVzZWQgd2l0aGluIGEgbGFyZ2VyIEFRTSBjb250cm9sIGxvb3AuIEknZCBuZWVkIHRvIGNvbmZpcm0gd2hhdCB0aGUgZnVuY3Rpb24gZG9lcyB3aXRoIGl0cyBwYXJhbWV0ZXJzIC0gYXJlIHRoZXkgdGhlIFRYIHF1ZXVlIGl0c2VsZiwgc3BlY2lmaWMgQUNzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSBxdWljayBwZWVrIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBpdHMgaW50ZW5kZWQgdXNlIHdpbGwgYmUgdXNlZnVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDgwMCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjU0OjU5LjU5NjExMzAyOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxMTU1MTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImllZWU4MDIxMV90eHFfYXFsX3BlbmRpbmdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvdHguYz00MjUzPUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrKTtcXG5uZXQvbWFjODAyMTEvdHguYy00MjU0LVxcbm5ldC9tYWM4MDIxMS90eC5jOjQyNTU6dTMyIGllZWU4MDIxMV90eHFfYXFsX3BlbmRpbmcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxubmV0L21hYzgwMjExL3R4LmMtNDI1Ni1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqdHhxKVxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtNDI3MC19XFxubmV0L21hYzgwMjExL3R4LmM6NDI3MTpFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV90eHFfYXFsX3BlbmRpbmcpO1xcbm5ldC9tYWM4MDIxMS90eC5jLTQyNzItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjU0OjU5Ljc3NzI3NTUyOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTM4MTUxNDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqRGl2aW5nIGludG8gYGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVja2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byBpdC4gTGV0J3MgZGlnIGludG8gYGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVja2AuIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsLiBJdCdzIHRoZSBnYXRla2VlcGVyLCB0aGUgYXJiaXRlciBvZiBmYWlybmVzcyBpbiBvdXIgd2lyZWxlc3Mgc3RhY2suIFRoaXMgaXMgd2hlcmUgd2UgZGVjaWRlIGlmIGEgZnJhbWUgZ2V0cyBhaXJ0aW1lIG9yIGdldHMgaGVsZCBiYWNrLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgY29sZC4gV2UncmUgdGFsa2luZyBhYm91dCB0aGUgZ3V0cyBvZiBob3cgd2UgbWFuYWdlIGNvbnRlbnRpb24gYW5kIHByaW9yaXRpemUgdHJhZmZpYyBpbiB0aGlzIGludGVyZmFjZS4gSSB3YW50IHRvIHNlZSBob3cgaXQncyBtYWtpbmcgaXRzIGRldGVybWluYXRpb25zOiB3aGF0IGZhY3RvcnMgYXJlIGJlaW5nIGNvbnNpZGVyZWQsIHdoYXQgdGhlIHRocmVzaG9sZHMgYXJlLCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBsb2dpYyBmbG93IGlzLiBLbm93aW5nIHRoaXMgZnVuY3Rpb24ncyBsb2dpYyBpcyBhYnNvbHV0ZWx5IGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3Mgb2Ygb3VyIHdpcmVsZXNzIG5ldHdvcmsgdW5kZXIgbG9hZC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gYWlydGltZSBmYWlybmVzcyBhbmQgYW55IG90aGVyIGFkbWlzc2lvbiBjb250cm9sIG1lY2hhbmlzbXMgd2UndmUgaW1wbGVtZW50ZWQuIElzIHRoZXJlIGEgcG90ZW50aWFsIGJvdHRsZW5lY2s/IEFyZSB0aGVyZSBhbnkgaGlkZGVuIGJ1Z3MgbHVya2luZyB0aGF0IGNvdWxkIGJlIGNhdXNpbmcgdW5mYWlyIGRpc3RyaWJ1dGlvbiBvciB1bmV4cGVjdGVkIGRyb3BzPyBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBhbGdvcml0aG0gaXMgcm9idXN0LCB0aGF0IGl0IGFjY291bnRzIGZvciBvdXIgdmFyaW91cyB0cmFmZmljIHR5cGVzLCBhbmQgdGhhdCBpdCdzIG9wdGltaXplZCBhcyBiZXN0IGFzIGNhbiBiZS4gVGhpcyBpcyBhIGNyaXRpY2FsIGJ1aWxkaW5nIGJsb2NrLCBzbyBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQwNSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjU1OjAzLjcxNTQyOTk5NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzODEzMzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImllZWU4MDIxMV90eHFfYWlydGltZV9jaGVja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS90eC5jPTM4NzU9c3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV90eF9kZXF1ZXVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtMzg5My1cXG5uZXQvbWFjODAyMTEvdHguYzozODk0OlxcdGlmICghaWVlZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrKGh3LCB0eHEpKVxcbm5ldC9tYWM4MDIxMS90eC5jLTM4OTUtXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYz00MTE2PXN0cnVjdCBpZWVlODAyMTFfdHhxICppZWVlODAyMTFfbmV4dF90eHEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKVxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtNDE0NS1cXG5uZXQvbWFjODAyMTEvdHguYzo0MTQ2OlxcdGFxbF9jaGVjayA9IGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVjayhodywgXFx1MDAyNnR4cWktXFx1MDAzZXR4cSk7XFxubmV0L21hYzgwMjExL3R4LmMtNDE0Ny1cXHRpZiAoYXFsX2NoZWNrKVxcbi0tXFxubmV0L21hYzgwMjExL3R4LmM9NDIxOT1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShhcWxfZGlzYWJsZSk7XFxubmV0L21hYzgwMjExL3R4LmMtNDIyMC1cXG5uZXQvbWFjODAyMTEvdHguYzo0MjIxOmJvb2wgaWVlZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbm5ldC9tYWM4MDIxMS90eC5jLTQyMjItXFx0XFx0XFx0XFx0IHN0cnVjdCBpZWVlODAyMTFfdHhxICp0eHEpXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy00MjUyLX1cXG5uZXQvbWFjODAyMTEvdHguYzo0MjUzOkVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrKTtcXG5uZXQvbWFjODAyMTEvdHguYy00MjU0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNDo1NTowMy45NTkyNDkxNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTQ0MjMxOTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgaWVlZTgwMjExX3N0YV91cGRhdGVfcGVuZGluZ19haXJ0aW1lYCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byBgaWVlZTgwMjExX3N0YV91cGRhdGVfcGVuZGluZ19haXJ0aW1lYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBwZW5kaW5nIGFpcnRpbWUgdXBkYXRlcyBmb3IgYSBzdGF0aW9uLiBNeSBpbml0aWFsIGZvY3VzIGlzIGxpa2VseSB0byBiZSBvbiB0aGUgZnVuY3Rpb24ncyBjb3JlIGxvZ2ljLiBXaGF0IHRyaWdnZXJzIHRoaXMgdXBkYXRlPyBJcyBpdCByZWxhdGVkIHRvIFFvUywgYWRtaXNzaW9uIGNvbnRyb2wsIG9yIHNvbWUgZm9ybSBvZiByYXRlIGFkYXB0YXRpb24/IEkgZXhwZWN0IHRvIHNlZSBjb25kaXRpb25hbHMgYW5kIHBvc3NpYmx5IGxvb3BzIHJlbGF0ZWQgdG8gY2hlY2tpbmcgdmFyaW91cyBhaXJ0aW1lIGNhbGN1bGF0aW9uIHBhcmFtZXRlcnMuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBtb2RpZmllZCB3aXRoaW4gdGhpcyBmdW5jdGlvbi4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGBpZWVlODAyMTFfc3RhYCBzdHJ1Y3R1cmUgYW5kIGFueSByZWxhdGVkIHN0cnVjdHMg4oCTIHByb2JhYmx5IHNvbWV0aGluZyBjb250YWluaW5nIGFpcnRpbWUgdXNhZ2Ugb3IgZ3JhbnRlZCB0aW1lLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBzZWUgaG93IHRoZSBwZW5kaW5nIGFpcnRpbWUgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBvdmVyYWxsIGFpcnRpbWUgYWNjb3VudGluZyBmb3IgYSBzdGF0aW9uLiBJcyB0aGlzIGEgc2ltcGxlIGluY3JlbWVudCwgb3IgZG9lcyBpdCBpbnZvbHZlIG1vcmUgc29waGlzdGljYXRlZCBjYWxjdWxhdGlvbnMsIHBlcmhhcHMgdGFraW5nIGludG8gYWNjb3VudCBjaGFubmVsIGNvbmRpdGlvbnMgYW5kIHBhY2tldCBjaGFyYWN0ZXJpc3RpY3M/XG5cbkJleW9uZCB0aGUgZGlyZWN0IG1vZGlmaWNhdGlvbiBvZiBkYXRhIHN0cnVjdHVyZXMsIEknbSBnb2luZyB0byBsb29rIGZvciBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLiBEb2VzIHRoaXMgZnVuY3Rpb24gaW50ZXJhY3Qgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc2NoZWR1bGVyLCBzdWNoIGFzIHBhY2tldCBxdWV1aW5nIG9yIHRyYW5zbWlzc2lvbiBzY2hlZHVsaW5nPyBJIHdhbnQgdG8gc2VlIGlmIGFueSBsb2NrcyBhcmUgdGFrZW4sIGFuZCB3aGVyZSB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLiBXaGF0IGludGVycnVwdCBjb250ZXh0IGRvZXMgaXQgcnVuIGluPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYXJlYXMgZm9yIG9wdGltaXphdGlvbiwgb3IgY29tbW9uIHBpdGZhbGxzIHRoYXQgY291bGQgbGVhZCB0byBhaXJ0aW1lIHN0YXJ2YXRpb24gb3IgdW5mYWlyIGFsbG9jYXRpb24/IEkgYWxzbyBuZWVkIHRvIHNlZSBhbnkgb3RoZXIgcmVsYXRlZCB1cGRhdGUgZnVuY3Rpb25zLiBUaGlzIGNvdWxkIGdpdmUgbWUgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IHRoZSBhaXJ0aW1lIGFsbG9jYXRpb24gc3lzdGVtIHdvcmtzLlxuXG5JJ20gZXhwZWN0aW5nIHRvIGZpbmQgYSBkZWxpY2F0ZSBiYWxhbmNlIGJldHdlZW4gYWNjdXJhY3ksIG92ZXJoZWFkLCBhbmQgZmFpcm5lc3MgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0cmFkZS1vZmZzIHRoZSBkZXZlbG9wZXJzIG1hZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2Mjk4LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTQ6NTU6MDguMTAzNDkxNzY4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjg3NTgxNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWVlZTgwMjExX3N0YV91cGRhdGVfcGVuZGluZ19haXJ0aW1lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL3N0YV9pbmZvLmM9MjQ5MD1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdGFfcmVjYWxjX2FnZ3JlZ2F0ZXMpO1xcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTI0OTEtXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6MjQ5Mjp2b2lkIGllZWU4MDIxMV9zdGFfdXBkYXRlX3BlbmRpbmdfYWlydGltZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0yNDkzLVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHN0YV9pbmZvICpzdGEsIHU4IGFjLFxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmg9MTM4PXN0cnVjdCBhaXJ0aW1lX2luZm8ge1xcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtMTQ3LVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oOjE0ODp2b2lkIGllZWU4MDIxMV9zdGFfdXBkYXRlX3BlbmRpbmdfYWlydGltZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaC0xNDktXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTggYWMsXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhdHVzLmM9NzU2PXN0YXRpYyB2b2lkIGllZWU4MDIxMV9yZXBvcnRfdXNlZF9za2Ioc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhdHVzLmMtNzczLVxcdFxcdHN0YSA9IHN0YV9pbmZvX2dldF9ieV9hZGRycyhsb2NhbCwgaGRyLVxcdTAwM2VhZGRyMSwgaGRyLVxcdTAwM2VhZGRyMik7XFxubmV0L21hYzgwMjExL3N0YXR1cy5jOjc3NDpcXHRcXHRpZWVlODAyMTFfc3RhX3VwZGF0ZV9wZW5kaW5nX2FpcnRpbWUobG9jYWwsIHN0YSxcXG5uZXQvbWFjODAyMTEvc3RhdHVzLmMtNzc1LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYiksXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhdHVzLmM9MTE2ND12b2lkIGllZWU4MDIxMV90eF9zdGF0dXNfZXh0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxubmV0L21hYzgwMjExL3N0YXR1cy5jLTExODktXFx0XFx0Ym9vbCBtY2FzdCA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKS1cXHUwMDNldHhfdGltZV9tYztcXG5uZXQvbWFjODAyMTEvc3RhdHVzLmM6MTE5MDpcXHRcXHRpZWVlODAyMTFfc3RhX3VwZGF0ZV9wZW5kaW5nX2FpcnRpbWUobG9jYWwsIHN0YSxcXG5uZXQvbWFjODAyMTEvc3RhdHVzLmMtMTE5MS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpLFxcbi0tXFxubmV0L21hYzgwMjExL3R4LmM9Mzg3NT1zdHJ1Y3Qgc2tfYnVmZiAqaWVlZTgwMjExX3R4X2RlcXVldWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy00MDY3LVxcdFxcdGluZm8tXFx1MDAzZXR4X3RpbWVfbWMgPSAhdHguc3RhO1xcbm5ldC9tYWM4MDIxMS90eC5jOjQwNjg6XFx0XFx0aWVlZTgwMjExX3N0YV91cGRhdGVfcGVuZGluZ19haXJ0aW1lKGxvY2FsLCB0eC5zdGEsIHR4cS1cXHUwMDNlYWMsXFxubmV0L21hYzgwMjExL3R4LmMtNDA2OS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIGFpcnRpbWUsIGZhbHNlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNDo1NTowOC4zMzIyNTk5MDFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTkxMTM2Mjc2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNdWx0aWNhc3QgQVFMIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIEFRTCAoQWlydGltZSBGYWlybmVzcyBRdWV1ZWluZykgZnVuY3Rpb25hbGl0eSBmb3IgbXVsdGljYXN0IHRyYWZmaWMuIE15IHByaW1hcnkgY29uY2VybiByaWdodCBub3cgaXMgZW5zdXJpbmcgdGhlIGNvcnJlY3QgaW50ZWdyYXRpb24gYW5kIHRoYXQgd2UgaGF2ZW4ndCBvdmVybG9va2VkIGFueSBjcnVjaWFsIGNvbXBvbmVudHMuIE15IGZvY3VzIHNob3VsZCBiZSBvbiB2ZXJpZnlpbmcgdGhlIHVzYWdlIG9mIHRoZXNlIHN5bWJvbHMgd2l0aGluIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLCBzcGVjaWZpY2FsbHk6IGBpZWVlODAyMTFfc3RhX3VwZGF0ZV9wZW5kaW5nX2FpcnRpbWVgLCBgaWVlZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrYCwgYGllZWU4MDIxMV90eHFfYXFsX3BlbmRpbmdgLCBgaWVlZTgwMjExX3JhdGVfZXhwZWN0ZWRfdHhfYWlydGltZWAsIGFuZCBgc3RhX2VzdGltYXRlX2V4cGVjdGVkX3Rocm91Z2hwdXRgLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgTUFDODAyMTFgIGlzIHRoZSBjb3JyZWN0IGNvbmZpZyB0byBlbmFibGUgdGhpcy4gVGhlIGNvZGUncyBsb2NhdGVkIHdpdGhpbiBgbmV0L21hYzgwMjExL2AsIHNvIEkgYmVsaWV2ZSBgTUFDODAyMTFgIGlzIHRoZSByZWxldmFudCBjb25maWcgaXRlbS4gQnV0IGxldCdzIGJlIGFic29sdXRlbHkgY2VydGFpbiDigJMgaXMgdGhlcmUgYW55dGhpbmcgZWxzZT8gVGhlIGNvZGUgdXNlcyBgd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQobG9jYWwtXHUwMDNlaHcud2lwaHksIE5MODAyMTFfRVhUX0ZFQVRVUkVfQVFMKWAsIHdoaWNoIGluZGljYXRlcyBhIHJ1bnRpbWUgZmVhdHVyZSBmbGFnIGlzIHVzZWQuXG5cbkkgbmVlZCB0byBxdWlja2x5IHNjYW4gdG8gY29uZmlybSB0aGVyZSBhcmUgbm8gb3RoZXIgY29uZmlndXJhdGlvbnMgbmVlZGVkLiBGcm9tIG15IGluaXRpYWwgYXNzZXNzbWVudCwgYE1BQzgwMjExYCBhbG9uZSBzaG91bGQgc3VmZmljZS5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEknbGwgcGVyZm9ybSBhIHF1aWNrIGRvdWJsZS1jaGVjayBvbiBob3cgYHN0YV9lc3RpbWF0ZV9leHBlY3RlZF90aHJvdWdocHV0YCBpcyB1c2VkIGluIHRoaXMgY29udGV4dC4gSXQncyBhIGtleSBlbGVtZW50LCBhbmQgSSB3YW50IHRvIGVuc3VyZSBteSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgY29ycmVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1NDksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTQ6NTU6MTQuMjQzNjI1MTgxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjM1OTY0MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhX2VzdGltYXRlX2V4cGVjdGVkX3Rocm91Z2hwdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvc3RhX2luZm8uYz0yNzg5PXZvaWQgc3RhX3NldF9hY2N1bXVsYXRlZF9yZW1vdmVkX2xpbmtzX3NpbmZvKHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMjgxNC1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzoyODE1OnN0YXRpYyB1MzIgc3RhX2VzdGltYXRlX2V4cGVjdGVkX3Rocm91Z2hwdXQoc3RydWN0IHN0YV9pbmZvICpzdGEsXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMjgxNi1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHJhdGVfaW5mbyAqcmksXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYz0yODM3PXN0YXRpYyB2b2lkIHN0YV9zZXRfbGlua19zaW5mbyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTMwNTEtXFx0aWYgKCF0aHIgXFx1MDAyNlxcdTAwMjYgKGxpbmtfc2luZm8tXFx1MDAzZWZpbGxlZCBcXHUwMDI2IEJJVF9VTEwoTkw4MDIxMV9TVEFfSU5GT19UWF9CSVRSQVRFKSkpXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6MzA1MjpcXHRcXHR0aHIgPSBzdGFfZXN0aW1hdGVfZXhwZWN0ZWRfdGhyb3VnaHB1dChzdGEsXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMzA1My1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2bGlua19zaW5mby1cXHUwMDNldHhyYXRlLFxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9MzA3OT12b2lkIHN0YV9zZXRfc2luZm8oc3RydWN0IHN0YV9pbmZvICpzdGEsIHN0cnVjdCBzdGF0aW9uX2luZm8gKnNpbmZvLFxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMzMwOS1cXHRcXHQgICAoc2luZm8tXFx1MDAzZWZpbGxlZCBcXHUwMDI2IEJJVF9VTEwoTkw4MDIxMV9TVEFfSU5GT19UWF9CSVRSQVRFKSkpIHtcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzozMzEwOlxcdFxcdHRociA9IHN0YV9lc3RpbWF0ZV9leHBlY3RlZF90aHJvdWdocHV0KHN0YSwgXFx1MDAyNnNpbmZvLVxcdTAwM2V0eHJhdGUsXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMzMxMS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2c2RhdGEtXFx1MDAzZXZpZi5ic3NfY29uZik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjU1OjE0LjUwNzIyNzg1NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjMwNTc1NjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgSSB1bmRlcnN0YW5kIGl0OlxuXG4qKkFpcnRpbWUgUXVldWUgTGltaXQgZm9yIE11bHRpY2FzdCBhbmQgVGhyb3VnaHB1dCBDYWxjdWxhdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBwYXRjaCBsb29rcyBnb29kIOKAkyBmdW5jdGlvbmFsIGFuZCBkZWZpbml0ZWx5IHJlYWNoYWJsZSB3aXRoaW4gdGhlIGV4aXN0aW5nIDgwMi4xMSBzdGFjay4gTXkgZm9jdXMgaGVyZSBpcyBvbiB0aGUgYWRkaXRpb24gb2YgQWlydGltZSBRdWV1ZSBMaW1pdCAoQVFMKSBzdXBwb3J0IGZvciBtdWx0aWNhc3QgdHJhZmZpYywgYWxvbmdzaWRlIG1vZGlmaWNhdGlvbnMgdG8gaG93IHdlIGVzdGltYXRlIGV4cGVjdGVkIHRocm91Z2hwdXQgZm9yIHN0YXRpb25zIHdpdGhpbiBtYWM4MDIxMS4gVGhpcyBpcyBzb2xpZCwgY29yZSBsb2dpYy4gU2VlbXMgbGlrZSB0aGUgZGV2ZWxvcGVycyBoYXZlIGJlZW4gZGlnZ2luZyBpbnRvOiBgaWVlZTgwMjExX3N0YV91cGRhdGVfcGVuZGluZ19haXJ0aW1lYCwgYGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVja2AsIGBpZWVlODAyMTFfdHhxX2FxbF9wZW5kaW5nYCwgYGllZWU4MDIxMV9yYXRlX2V4cGVjdGVkX3R4X2FpcnRpbWVgIGFuZCBgc3RhX2VzdGltYXRlX2V4cGVjdGVkX3Rocm91Z2hwdXRgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGRpcmVjdGx5IGludm9sdmVkIGluIHRoZSBjcml0aWNhbCBwYXRoLiBUaGUgZmFjdCB0aGF0IGBNQUM4MDIxMWAgaXMgdGhlIHJlbGV2YW50IGNvbmZpZyBjb25maXJtcyBpdOKAmXMgd2l0aGluIHRoZSBoZWFydCBvZiB0aGUgbWFjODAyMTEgZnJhbWV3b3JrLiBXZSBjYW4gdHJpZ2dlciB0aGlzIHRocm91Z2ggYG1hYzgwMjExX2h3c2ltYCB3aGljaCBpcyBncmVhdCBmb3IgdGVzdGluZyB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5LiBTZWVtcyBsaWtlIHRoZSBjb3JyZWN0IGFwcHJvYWNoIGFuZCBkaXJlY3Rpb24uXG5cbkxldCdzIGNhbGwgc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NjU1LCJPdXRwdXRUb2tlbnMiOjE4MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNDo1NToyMi43Mzc4MDY5OTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjM1MzE1OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWVlZTgwMjExX3N0YV91cGRhdGVfcGVuZGluZ19haXJ0aW1lXCIsXG4gICAgXCJpZWVlODAyMTFfdHhxX2FpcnRpbWVfY2hlY2tcIixcbiAgICBcImllZWU4MDIxMV90eHFfYXFsX3BlbmRpbmdcIixcbiAgICBcImllZWU4MDIxMV9yYXRlX2V4cGVjdGVkX3R4X2FpcnRpbWVcIixcbiAgICBcInN0YV9lc3RpbWF0ZV9leHBlY3RlZF90aHJvdWdocHV0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBBaXJ0aW1lIFF1ZXVlIExpbWl0IChBUUwpIHN1cHBvcnQgZm9yIG11bHRpY2FzdCB0cmFmZmljIGFuZCBtb2RpZmllcyB0aGUgZXhwZWN0ZWQgdGhyb3VnaHB1dCBjYWxjdWxhdGlvbiBmb3Igc3RhdGlvbnMgaW4gbWFjODAyMTEuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbG9naWMgZm9yIDgwMi4xMSBuZXR3b3JraW5nIGFuZCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBtYWM4MDIxMV9od3NpbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImllZWU4MDIxMV9zdGFfdXBkYXRlX3BlbmRpbmdfYWlydGltZVwiLFxuICAgIFwiaWVlZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrXCIsXG4gICAgXCJpZWVlODAyMTFfdHhxX2FxbF9wZW5kaW5nXCIsXG4gICAgXCJpZWVlODAyMTFfcmF0ZV9leHBlY3RlZF90eF9haXJ0aW1lXCIsXG4gICAgXCJzdGFfZXN0aW1hdGVfZXhwZWN0ZWRfdGhyb3VnaHB1dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgQWlydGltZSBRdWV1ZSBMaW1pdCAoQVFMKSBzdXBwb3J0IGZvciBtdWx0aWNhc3QgdHJhZmZpYyBhbmQgbW9kaWZpZXMgdGhlIGV4cGVjdGVkIHRocm91Z2hwdXQgY2FsY3VsYXRpb24gZm9yIHN0YXRpb25zIGluIG1hYzgwMjExLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGxvZ2ljIGZvciA4MDIuMTEgbmV0d29ya2luZyBhbmQgY2FuIGJlIHRyaWdnZXJlZCB2aWEgbWFjODAyMTFfaHdzaW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpn79r[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-22 14:37:57 +0000 UTC FinishedAt: 2026-07-22 14:55:24 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "248951ddc14de84de3910f9b13f51491a8cd91df", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "248951ddc14de84de3910f9b13f51491a8cd91df", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211" ], "series_id": "841f2ede-edcb-4915-b2b9-ee74b05a0de9" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ieee80211_sta_update_pending_airtime", "ieee80211_txq_airtime_check", "ieee80211_txq_aql_pending", "ieee80211_rate_expected_tx_airtime", "sta_estimate_expected_throughput" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE0OjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjExX3N0YV91cGRhdGVfcGVuZGluZ19haXJ0aW1lJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV90eHFfYWlydGltZV9jaGVjayYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfdHhxX2FxbF9wZW5kaW5nJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9yYXRlX2V4cGVjdGVkX3R4X2FpcnRpbWUmIzM0OywKICAgICYjMzQ7c3RhX2VzdGltYXRlX2V4cGVjdGVkX3Rocm91Z2hwdXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBBaXJ0aW1lIFF1ZXVlIExpbWl0IChBUUwpIHN1cHBvcnQgZm9yIG11bHRpY2FzdCB0cmFmZmljIGFuZCBtb2RpZmllcyB0aGUgZXhwZWN0ZWQgdGhyb3VnaHB1dCBjYWxjdWxhdGlvbiBmb3Igc3RhdGlvbnMgaW4gbWFjODAyMTEuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbG9naWMgZm9yIDgwMi4xMSBuZXR3b3JraW5nIGFuZCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBtYWM4MDIxMV9od3NpbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNDo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDc5ZDU4NTM5YmViNzQwYmM1N2I2MzJmMTc4NzQ1Y2M1Y2E4MmZjYTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyMiAxNDo1NDoyOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oIGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuaW5kZXggZjVhYmYxZGI3NTU4YmMuLjczNTRiYTA3OTM2M2E1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuQEAgLTM3MjIsNiAmIzQzOzM3MjIsNyBAQCBlbnVtIHdpcGh5X3BhcmFtc19mbGFncyB7XG4gLyogVGhlIHBlciBUWFEgZGV2aWNlIHF1ZXVlIGxpbWl0IGluIGFpcnRpbWUgKi9cbiAjZGVmaW5lIElFRUU4MDIxMV9ERUZBVUxUX0FRTF9UWFFfTElNSVRfTFx0NTAwMFxuICNkZWZpbmUgSUVFRTgwMjExX0RFRkFVTFRfQVFMX1RYUV9MSU1JVF9IXHQxMjAwMFxuJiM0MzsjZGVmaW5lIElFRUU4MDIxMV9ERUZBVUxUX0FRTF9UWFFfTElNSVRfTUNcdDUwMDAwXG4gXG4gLyogVGhlIHBlciBpbnRlcmZhY2UgYWlydGltZSB0aHJlc2hvbGQgdG8gc3dpdGNoIHRvIGxvd2VyIHF1ZXVlIGxpbWl0ICovXG4gI2RlZmluZSBJRUVFODAyMTFfQVFMX1RIUkVTSE9MRFx0XHRcdDI0MDAwXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmhcbmluZGV4IDRmOTVkYTAyMzc0NmY5Li4yM2Q4ZDQ2MzljZGQ2ZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmhcbkBAIC0xMzU0LDggJiM0MzsxMzU0LDggQEAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvIHtcbiBcdCAgICBzdGF0dXNfZGF0YV9pZHI6MSxcbiBcdCAgICBzdGF0dXNfZGF0YToxMyxcbiBcdCAgICBod19xdWV1ZTo0LFxuJiM0MztcdCAgICB0eF90aW1lX21jOjEsXG4gXHQgICAgdHhfdGltZV9lc3Q6MTA7XG4tXHQvKiAxIGZyZWUgYml0ICovXG4gXG4gXHR1bmlvbiB7XG4gXHRcdHN0cnVjdCB7XG5AQCAtNjg3Niw2ICYjNDM7Njg3NiwxNyBAQCB2b2lkIGllZWU4MDIxMV9zdGFfcmVnaXN0ZXJfYWlydGltZShzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLCB1OCB0aWQsXG4gYm9vbFxuIGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVjayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV90eHEgKnR4cSk7XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBpZWVlODAyMTFfdHhxX2FxbF9wZW5kaW5nIC0gZ2V0IHBlbmRpbmcgQVFMIGFpcnRpbWUgZm9yIGEgdHhxXG4mIzQzOyAqXG4mIzQzOyAqIEBodzogcG9pbnRlciBvYnRhaW5lZCBmcm9tIGllZWU4MDIxMV9hbGxvY19odygpXG4mIzQzOyAqIEB0eHE6IHBvaW50ZXIgb2J0YWluZWQgZnJvbSBzdGF0aW9uIG9yIHZpcnR1YWwgaW50ZXJmYWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogcGVuZGluZyBhaXJ0aW1lIChpbiB1c2VjKSBmb3IgdGhlIGdpdmVuIHR4cS5cbiYjNDM7ICovXG4mIzQzO3UzMiBpZWVlODAyMTFfdHhxX2FxbF9wZW5kaW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqdHhxKTtcbiYjNDM7XG4gLyoqXG4gICogaWVlZTgwMjExX2l0ZXJfa2V5cyAtIGl0ZXJhdGUga2V5cyBwcm9ncmFtbWVkIGludG8gdGhlIGRldmljZVxuICAqIEBodzogcG9pbnRlciBvYnRhaW5lZCBmcm9tIGllZWU4MDIxMV9hbGxvY19odygpXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2FpcnRpbWUuYyBiL25ldC9tYWM4MDIxMS9haXJ0aW1lLmNcbmluZGV4IGM2MWRmNjM3MjMyYTliLi4wYzU0Y2RiZDc1M2NkNyAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9haXJ0aW1lLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9haXJ0aW1lLmNcbkBAIC02ODUsNyAmIzQzOzY4NSw3IEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX2ZpbGxfcnhfc3RhdHVzKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0LFxuIFx0aWYgKGllZWU4MDIxMV9maWxsX3JhdGVfaW5mbyhodywgc3RhdCwgYmFuZCwgcmkpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmICghaWVlZTgwMjExX3JhdGVfdmFsaWQocmF0ZSkpXG4mIzQzO1x0aWYgKCFyYXRlIHx8ICFpZWVlODAyMTFfcmF0ZV92YWxpZChyYXRlKSlcbiBcdFx0cmV0dXJuIC0xO1xuIFxuIFx0aWYgKHJhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9UWF9SQ18xNjBfTUhaX1dJRFRIKVxuQEAgLTc1Myw2ICYjNDM7NzUzLDUzIEBAIHUzMiBpZWVlODAyMTFfY2FsY190eF9haXJ0aW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChpZWVlODAyMTFfY2FsY190eF9haXJ0aW1lKTtcbiBcbiYjNDM7dTMyIGllZWU4MDIxMV9yYXRlX2V4cGVjdGVkX3R4X2FpcnRpbWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqdHhfcmF0ZSxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IHJhdGVfaW5mbyAqcmksXG4mIzQzO1x0XHRcdFx0ICAgICAgIGVudW0gbmw4MDIxMV9iYW5kIGJhbmQsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGJvb2wgYW1wZHUsIGludCBsZW4pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyBzdGF0O1xuJiM0MztcdHUzMiBkdXJhdGlvbiwgb3ZlcmhlYWQ7XG4mIzQzO1x0dTggYWdnX3NoaWZ0O1xuJiM0MztcbiYjNDM7XHRpZiAoaWVlZTgwMjExX2ZpbGxfcnhfc3RhdHVzKFx1MDAyNnN0YXQsIGh3LCB0eF9yYXRlLCByaSwgYmFuZCwgbGVuKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAoc3RhdC5lbmNvZGluZyA9PSBSWF9FTkNfTEVHQUNZIHx8ICFhbXBkdSlcbiYjNDM7XHRcdHJldHVybiBpZWVlODAyMTFfY2FsY19yeF9haXJ0aW1lKGh3LCBcdTAwMjZzdGF0LCBsZW4pICogMTAyNDtcbiYjNDM7XG4mIzQzO1x0ZHVyYXRpb24gPSBpZWVlODAyMTFfZ2V0X3JhdGVfZHVyYXRpb24oaHcsIFx1MDAyNnN0YXQsIFx1MDAyNm92ZXJoZWFkKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBc3N1bWUgdGhhdCBIVC9WSFQgdHJhbnNtaXNzaW9uIG9uIGFueSBBQyBleGNlcHQgVk8gd2lsbFxuJiM0MztcdCAqIHVzZSBhZ2dyZWdhdGlvbi4gU2luY2Ugd2UgZG9uJiMzOTt0IGhhdmUgcmVsaWFibGUgcmVwb3J0aW5nXG4mIzQzO1x0ICogb2YgYWdncmVnYXRpb24gbGVuZ3RoLCBhc3N1bWUgYW4gYXZlcmFnZSBzaXplIGJhc2VkIG9uIHRoZVxuJiM0MztcdCAqIHR4IHJhdGUuXG4mIzQzO1x0ICogVGhpcyB3aWxsIG5vdCBiZSB2ZXJ5IGFjY3VyYXRlLCBidXQgbXVjaCBiZXR0ZXIgdGhhbiBzaW1wbHlcbiYjNDM7XHQgKiBhc3N1bWluZyB1bi1hZ2dyZWdhdGVkIHR4IGluIGFsbCBjYXNlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoZHVyYXRpb24gXHUwMDNlIDQwMCAqIDEwMjQpIC8qIFx1MDAzYz0gVkhUMjAgTUNTMiAxUyAqL1xuJiM0MztcdFx0YWdnX3NoaWZ0ID0gMTtcbiYjNDM7XHRlbHNlIGlmIChkdXJhdGlvbiBcdTAwM2UgMjUwICogMTAyNCkgLyogXHUwMDNjPSBWSFQyMCBNQ1MzIDFTIG9yIE1DUzEgMlMgKi9cbiYjNDM7XHRcdGFnZ19zaGlmdCA9IDI7XG4mIzQzO1x0ZWxzZSBpZiAoZHVyYXRpb24gXHUwMDNlIDE1MCAqIDEwMjQpIC8qIFx1MDAzYz0gVkhUMjAgTUNTNSAxUyBvciBNQ1MyIDJTICovXG4mIzQzO1x0XHRhZ2dfc2hpZnQgPSAzO1xuJiM0MztcdGVsc2UgaWYgKGR1cmF0aW9uIFx1MDAzZSA3MCAqIDEwMjQpIC8qIFx1MDAzYz0gVkhUMjAgTUNTNSAyUyAqL1xuJiM0MztcdFx0YWdnX3NoaWZ0ID0gNDtcbiYjNDM7XHRlbHNlIGlmIChzdGF0LmVuY29kaW5nICE9IFJYX0VOQ19IRSB8fFxuJiM0MztcdFx0IGR1cmF0aW9uIFx1MDAzZSAyMCAqIDEwMjQpIC8qIFx1MDAzYz0gSEU0MCBNQ1M2IDJTICovXG4mIzQzO1x0XHRhZ2dfc2hpZnQgPSA1O1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGFnZ19zaGlmdCA9IDY7XG4mIzQzO1xuJiM0MztcdGR1cmF0aW9uICo9IGxlbjtcbiYjNDM7XHRkdXJhdGlvbiAvPSBBVkdfUEtUX1NJWkU7XG4mIzQzO1x0ZHVyYXRpb24gJiM0Mzs9IChvdmVyaGVhZCAqIDEwMjQgXHUwMDNlXHUwMDNlIGFnZ19zaGlmdCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkdXJhdGlvbjtcbiYjNDM7fVxuJiM0MztcbiB1MzIgaWVlZTgwMjExX2NhbGNfZXhwZWN0ZWRfdHhfYWlydGltZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsXG5AQCAtNzc1LDQ1ICYjNDM7ODIyLDEzIEBAIHUzMiBpZWVlODAyMTFfY2FsY19leHBlY3RlZF90eF9haXJ0aW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIFx0aWYgKHB1YnN0YSkge1xuIFx0XHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IGNvbnRhaW5lcl9vZihwdWJzdGEsIHN0cnVjdCBzdGFfaW5mbyxcbiBcdFx0XHRcdFx0XHQgICAgc3RhKTtcbi1cdFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgc3RhdDtcbiBcdFx0c3RydWN0IGllZWU4MDIxMV90eF9yYXRlICp0eF9yYXRlID0gXHUwMDI2c3RhLVx1MDAzZWRlZmxpbmsudHhfc3RhdHMubGFzdF9yYXRlO1xuIFx0XHRzdHJ1Y3QgcmF0ZV9pbmZvICpyaSA9IFx1MDAyNnN0YS1cdTAwM2VkZWZsaW5rLnR4X3N0YXRzLmxhc3RfcmF0ZV9pbmZvO1xuLVx0XHR1MzIgZHVyYXRpb24sIG92ZXJoZWFkO1xuLVx0XHR1OCBhZ2dfc2hpZnQ7XG4tXG4tXHRcdGlmIChpZWVlODAyMTFfZmlsbF9yeF9zdGF0dXMoXHUwMDI2c3RhdCwgaHcsIHR4X3JhdGUsIHJpLCBiYW5kLCBsZW4pKVxuLVx0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0dTMyIGR1cmF0aW9uO1xuIFxuLVx0XHRpZiAoc3RhdC5lbmNvZGluZyA9PSBSWF9FTkNfTEVHQUNZIHx8ICFhbXBkdSlcbi1cdFx0XHRyZXR1cm4gaWVlZTgwMjExX2NhbGNfcnhfYWlydGltZShodywgXHUwMDI2c3RhdCwgbGVuKTtcbi1cbi1cdFx0ZHVyYXRpb24gPSBpZWVlODAyMTFfZ2V0X3JhdGVfZHVyYXRpb24oaHcsIFx1MDAyNnN0YXQsIFx1MDAyNm92ZXJoZWFkKTtcbi1cdFx0Lypcbi1cdFx0ICogQXNzdW1lIHRoYXQgSFQvVkhUIHRyYW5zbWlzc2lvbiBvbiBhbnkgQUMgZXhjZXB0IFZPIHdpbGxcbi1cdFx0ICogdXNlIGFnZ3JlZ2F0aW9uLiBTaW5jZSB3ZSBkb24mIzM5O3QgaGF2ZSByZWxpYWJsZSByZXBvcnRpbmdcbi1cdFx0ICogb2YgYWdncmVnYXRpb24gbGVuZ3RoLCBhc3N1bWUgYW4gYXZlcmFnZSBzaXplIGJhc2VkIG9uIHRoZVxuLVx0XHQgKiB0eCByYXRlLlxuLVx0XHQgKiBUaGlzIHdpbGwgbm90IGJlIHZlcnkgYWNjdXJhdGUsIGJ1dCBtdWNoIGJldHRlciB0aGFuIHNpbXBseVxuLVx0XHQgKiBhc3N1bWluZyB1bi1hZ2dyZWdhdGVkIHR4IGluIGFsbCBjYXNlcy5cbi1cdFx0ICovXG4tXHRcdGlmIChkdXJhdGlvbiBcdTAwM2UgNDAwICogMTAyNCkgLyogXHUwMDNjPSBWSFQyMCBNQ1MyIDFTICovXG4tXHRcdFx0YWdnX3NoaWZ0ID0gMTtcbi1cdFx0ZWxzZSBpZiAoZHVyYXRpb24gXHUwMDNlIDI1MCAqIDEwMjQpIC8qIFx1MDAzYz0gVkhUMjAgTUNTMyAxUyBvciBNQ1MxIDJTICovXG4tXHRcdFx0YWdnX3NoaWZ0ID0gMjtcbi1cdFx0ZWxzZSBpZiAoZHVyYXRpb24gXHUwMDNlIDE1MCAqIDEwMjQpIC8qIFx1MDAzYz0gVkhUMjAgTUNTNSAxUyBvciBNQ1MyIDJTICovXG4tXHRcdFx0YWdnX3NoaWZ0ID0gMztcbi1cdFx0ZWxzZSBpZiAoZHVyYXRpb24gXHUwMDNlIDcwICogMTAyNCkgLyogXHUwMDNjPSBWSFQyMCBNQ1M1IDJTICovXG4tXHRcdFx0YWdnX3NoaWZ0ID0gNDtcbi1cdFx0ZWxzZSBpZiAoc3RhdC5lbmNvZGluZyAhPSBSWF9FTkNfSEUgfHxcbi1cdFx0XHQgZHVyYXRpb24gXHUwMDNlIDIwICogMTAyNCkgLyogXHUwMDNjPSBIRTQwIE1DUzYgMlMgKi9cbi1cdFx0XHRhZ2dfc2hpZnQgPSA1O1xuLVx0XHRlbHNlXG4tXHRcdFx0YWdnX3NoaWZ0ID0gNjtcbi1cbi1cdFx0ZHVyYXRpb24gKj0gbGVuO1xuLVx0XHRkdXJhdGlvbiAvPSBBVkdfUEtUX1NJWkU7XG4mIzQzO1x0XHRkdXJhdGlvbiA9IGllZWU4MDIxMV9yYXRlX2V4cGVjdGVkX3R4X2FpcnRpbWUoaHcsIHR4X3JhdGUsIHJpLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgIGJhbmQsIHRydWUsIGxlbik7XG4gXHRcdGR1cmF0aW9uIC89IDEwMjQ7XG4tXHRcdGR1cmF0aW9uICYjNDM7PSAob3ZlcmhlYWQgXHUwMDNlXHUwMDNlIGFnZ19zaGlmdCk7XG4gXG4gXHRcdHJldHVybiBtYXhfdCh1MzIsIGR1cmF0aW9uLCA0KTtcbiBcdH1cbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvZGVidWdmcy5jIGIvbmV0L21hYzgwMjExL2RlYnVnZnMuY1xuaW5kZXggYTRkNTQ2MWY2NDgwZjAuLjhlYmY1YmNmM2MwZWMxIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2RlYnVnZnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2RlYnVnZnMuY1xuQEAgLTIxMCwxMSAmIzQzOzIxMCwxMyBAQCBzdGF0aWMgc3NpemVfdCBhcWxfcGVuZGluZ19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRcdFwmIzM0O1ZJICAgICAldSB1c1xcblwmIzM0O1xuIFx0XHRcdFwmIzM0O0JFICAgICAldSB1c1xcblwmIzM0O1xuIFx0XHRcdFwmIzM0O0JLICAgICAldSB1c1xcblwmIzM0O1xuJiM0MztcdFx0XHRcJiMzNDtNQyAgICAgJXUgdXNcXG5cJiMzNDtcbiBcdFx0XHRcJiMzNDt0b3RhbCAgJXUgdXNcXG5cJiMzNDssXG4gXHRcdFx0YXRvbWljX3JlYWQoXHUwMDI2bG9jYWwtXHUwMDNlYXFsX2FjX3BlbmRpbmdfYWlydGltZVtJRUVFODAyMTFfQUNfVk9dKSxcbiBcdFx0XHRhdG9taWNfcmVhZChcdTAwMjZsb2NhbC1cdTAwM2VhcWxfYWNfcGVuZGluZ19haXJ0aW1lW0lFRUU4MDIxMV9BQ19WSV0pLFxuIFx0XHRcdGF0b21pY19yZWFkKFx1MDAyNmxvY2FsLVx1MDAzZWFxbF9hY19wZW5kaW5nX2FpcnRpbWVbSUVFRTgwMjExX0FDX0JFXSksXG4gXHRcdFx0YXRvbWljX3JlYWQoXHUwMDI2bG9jYWwtXHUwMDNlYXFsX2FjX3BlbmRpbmdfYWlydGltZVtJRUVFODAyMTFfQUNfQktdKSxcbiYjNDM7XHRcdFx0YXRvbWljX3JlYWQoXHUwMDI2bG9jYWwtXHUwMDNlYXFsX21jX3BlbmRpbmdfYWlydGltZSksXG4gXHRcdFx0YXRvbWljX3JlYWQoXHUwMDI2bG9jYWwtXHUwMDNlYXFsX3RvdGFsX3BlbmRpbmdfYWlydGltZSkpO1xuIFx0cmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcyxcbiBcdFx0XHRcdCAgICAgICBidWYsIGxlbik7XG5AQCAtMjM5LDcgJiM0MzsyNDEsOCBAQCBzdGF0aWMgc3NpemVfdCBhcWxfdHhxX2xpbWl0X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdFx0XCYjMzQ7Vk9cdCV1XHRcdCV1XFxuXCYjMzQ7XG4gXHRcdFx0XCYjMzQ7VklcdCV1XHRcdCV1XFxuXCYjMzQ7XG4gXHRcdFx0XCYjMzQ7QkVcdCV1XHRcdCV1XFxuXCYjMzQ7XG4tXHRcdFx0XCYjMzQ7QktcdCV1XHRcdCV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcJiMzNDtCS1x0JXVcdFx0JXVcXG5cJiMzNDtcbiYjNDM7XHRcdFx0XCYjMzQ7TUNcdCV1XFxuXCYjMzQ7LFxuIFx0XHRcdGxvY2FsLVx1MDAzZWFxbF90eHFfbGltaXRfbG93W0lFRUU4MDIxMV9BQ19WT10sXG4gXHRcdFx0bG9jYWwtXHUwMDNlYXFsX3R4cV9saW1pdF9oaWdoW0lFRUU4MDIxMV9BQ19WT10sXG4gXHRcdFx0bG9jYWwtXHUwMDNlYXFsX3R4cV9saW1pdF9sb3dbSUVFRTgwMjExX0FDX1ZJXSxcbkBAIC0yNDcsNyAmIzQzOzI1MCw4IEBAIHN0YXRpYyBzc2l6ZV90IGFxbF90eHFfbGltaXRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdFx0XHRsb2NhbC1cdTAwM2VhcWxfdHhxX2xpbWl0X2xvd1tJRUVFODAyMTFfQUNfQkVdLFxuIFx0XHRcdGxvY2FsLVx1MDAzZWFxbF90eHFfbGltaXRfaGlnaFtJRUVFODAyMTFfQUNfQkVdLFxuIFx0XHRcdGxvY2FsLVx1MDAzZWFxbF90eHFfbGltaXRfbG93W0lFRUU4MDIxMV9BQ19CS10sXG4tXHRcdFx0bG9jYWwtXHUwMDNlYXFsX3R4cV9saW1pdF9oaWdoW0lFRUU4MDIxMV9BQ19CS10pO1xuJiM0MztcdFx0XHRsb2NhbC1cdTAwM2VhcWxfdHhxX2xpbWl0X2hpZ2hbSUVFRTgwMjExX0FDX0JLXSxcbiYjNDM7XHRcdFx0bG9jYWwtXHUwMDNlYXFsX3R4cV9saW1pdF9tYyk7XG4gXHRyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLFxuIFx0XHRcdFx0ICAgICAgIGJ1ZiwgbGVuKTtcbiB9XG5AQCAtMjczLDYgJiM0MzsyNzcsMTEgQEAgc3RhdGljIHNzaXplX3QgYXFsX3R4cV9saW1pdF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdGVsc2VcbiBcdFx0YnVmW2NvdW50XSA9ICYjMzk7XFwwJiMzOTs7XG4gXG4mIzQzO1x0aWYgKHNzY2FuZihidWYsIFwmIzM0O21jYXN0ICV1XCYjMzQ7LCBcdTAwMjZxX2xpbWl0X2xvdykgPT0gMSkge1xuJiM0MztcdFx0bG9jYWwtXHUwMDNlYXFsX3R4cV9saW1pdF9tYyA9IHFfbGltaXRfbG93O1xuJiM0MztcdFx0cmV0dXJuIGNvdW50O1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoc3NjYW5mKGJ1ZiwgXCYjMzQ7JXUgJXUgJXVcJiMzNDssIFx1MDAyNmFjLCBcdTAwMjZxX2xpbWl0X2xvdywgXHUwMDI2cV9saW1pdF9oaWdoKSAhPSAzKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaCBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXG5pbmRleCAzNGE5ZWE4YjZmODU3ZS4uNzhmZWE3YTE3YWU3NjYgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbkBAIC0xNDY0LDEwICYjNDM7MTQ2NCwxMiBAQCBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsIHtcbiBcdHNwaW5sb2NrX3QgaGFuZGxlX3dha2VfdHhfcXVldWVfbG9jaztcbiBcbiBcdHUxNiBhaXJ0aW1lX2ZsYWdzO1xuJiM0MztcdHUzMiBhcWxfdHhxX2xpbWl0X21jO1xuIFx0dTMyIGFxbF90eHFfbGltaXRfbG93W0lFRUU4MDIxMV9OVU1fQUNTXTtcbiBcdHUzMiBhcWxfdHhxX2xpbWl0X2hpZ2hbSUVFRTgwMjExX05VTV9BQ1NdO1xuIFx0dTMyIGFxbF90aHJlc2hvbGQ7XG4gXHRhdG9taWNfdCBhcWxfdG90YWxfcGVuZGluZ19haXJ0aW1lO1xuJiM0MztcdGF0b21pY190IGFxbF9tY19wZW5kaW5nX2FpcnRpbWU7XG4gXHRhdG9taWNfdCBhcWxfYWNfcGVuZGluZ19haXJ0aW1lW0lFRUU4MDIxMV9OVU1fQUNTXTtcbiBcbiBcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzICpvcHM7XG5AQCAtMjkzOSw2ICYjNDM7Mjk0MSwxMSBAQCB1OCAqaWVlZTgwMjExX2dldF9ic3NpZChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLCBzaXplX3QgbGVuLFxuIFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaWVlZTgwMjExX2V0aHRvb2xfb3BzO1xuIFxuJiM0Mzt1MzIgaWVlZTgwMjExX3JhdGVfZXhwZWN0ZWRfdHhfYWlydGltZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICp0eF9yYXRlLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgcmF0ZV9pbmZvICpyaSxcbiYjNDM7XHRcdFx0XHQgICAgICAgZW51bSBubDgwMjExX2JhbmQgYmFuZCxcbiYjNDM7XHRcdFx0XHQgICAgICAgYm9vbCBhbXBkdSwgaW50IGxlbik7XG4gdTMyIGllZWU4MDIxMV9jYWxjX2V4cGVjdGVkX3R4X2FpcnRpbWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tYWluLmMgYi9uZXQvbWFjODAyMTEvbWFpbi5jXG5pbmRleCBlYjFlYWFmMzQ2MTJlMS4uYjVkYzdmNjU5YjVkZTUgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvbWFpbi5jXG5AQCAtOTg4LDYgJiM0Mzs5ODgsNyBAQCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICppZWVlODAyMTFfYWxsb2NfaHdfbm0oc2l6ZV90IHByaXZfZGF0YV9sZW4sXG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZsb2NhbC1cdTAwM2VyeF9wYXRoX2xvY2spO1xuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bG9jYWwtXHUwMDNlcXVldWVfc3RvcF9yZWFzb25fbG9jayk7XG4gXG4mIzQzO1x0bG9jYWwtXHUwMDNlYXFsX3R4cV9saW1pdF9tYyA9IElFRUU4MDIxMV9ERUZBVUxUX0FRTF9UWFFfTElNSVRfTUM7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJRUVFODAyMTFfTlVNX0FDUzsgaSYjNDM7JiM0MzspIHtcbiBcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bG9jYWwtXHUwMDNlYWN0aXZlX3R4cXNbaV0pO1xuIFx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZsb2NhbC1cdTAwM2VhY3RpdmVfdHhxX2xvY2tbaV0pO1xuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmNcbmluZGV4IDIyZWJhMGU2ZTU0YzViLi5kMTJhZWQ5YzE3NTYxNyAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uY1xuQEAgLTI0OTEsMTMgJiM0MzsyNDkxLDI4IEBAIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0YV9yZWNhbGNfYWdncmVnYXRlcyk7XG4gXG4gdm9pZCBpZWVlODAyMTFfc3RhX3VwZGF0ZV9wZW5kaW5nX2FpcnRpbWUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4gXHRcdFx0XHRcdCAgc3RydWN0IHN0YV9pbmZvICpzdGEsIHU4IGFjLFxuLVx0XHRcdFx0XHQgIHUxNiB0eF9haXJ0aW1lLCBib29sIHR4X2NvbXBsZXRlZClcbiYjNDM7XHRcdFx0XHRcdCAgdTE2IHR4X2FpcnRpbWUsIGJvb2wgdHhfY29tcGxldGVkLFxuJiM0MztcdFx0XHRcdFx0ICBib29sIG1jYXN0KVxuIHtcbiBcdGludCB0eF9wZW5kaW5nO1xuIFxuIFx0aWYgKCF3aXBoeV9leHRfZmVhdHVyZV9pc3NldChsb2NhbC1cdTAwM2Vody53aXBoeSwgTkw4MDIxMV9FWFRfRkVBVFVSRV9BUUwpKVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0aWYgKG1jYXN0KSB7XG4mIzQzO1x0XHRpZiAoIXR4X2NvbXBsZXRlZCkge1xuJiM0MztcdFx0XHRhdG9taWNfYWRkKHR4X2FpcnRpbWUsIFx1MDAyNmxvY2FsLVx1MDAzZWFxbF9tY19wZW5kaW5nX2FpcnRpbWUpO1xuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0dHhfcGVuZGluZyA9IGF0b21pY19zdWJfcmV0dXJuKHR4X2FpcnRpbWUsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgXHUwMDI2bG9jYWwtXHUwMDNlYXFsX21jX3BlbmRpbmdfYWlydGltZSk7XG4mIzQzO1x0XHRpZiAodHhfcGVuZGluZyBcdTAwM2MgMClcbiYjNDM7XHRcdFx0YXRvbWljX2NtcHhjaGcoXHUwMDI2bG9jYWwtXHUwMDNlYXFsX21jX3BlbmRpbmdfYWlydGltZSxcbiYjNDM7XHRcdFx0XHQgICAgICAgdHhfcGVuZGluZywgMCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmICghdHhfY29tcGxldGVkKSB7XG4gXHRcdGlmIChzdGEpXG4gXHRcdFx0YXRvbWljX2FkZCh0eF9haXJ0aW1lLFxuQEAgLTI3OTcsNiAmIzQzOzI4MTIsMjggQEAgdm9pZCBzdGFfc2V0X2FjY3VtdWxhdGVkX3JlbW92ZWRfbGlua3Nfc2luZm8oc3RydWN0IHN0YV9pbmZvICpzdGEsXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgdTMyIHN0YV9lc3RpbWF0ZV9leHBlY3RlZF90aHJvdWdocHV0KHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuJiM0MztcdFx0XHRcdFx0ICAgIHN0cnVjdCByYXRlX2luZm8gKnJpLFxuJiM0MztcdFx0XHRcdFx0ICAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBcdTAwMjZzdGEtXHUwMDNlc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlaHc7XG4mIzQzO1x0c3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmY7XG4mIzQzO1x0dTMyIGR1cmF0aW9uO1xuJiM0MztcdHU4IGJhbmQ7XG4mIzQzO1xuJiM0MztcdGNvbmYgPSByY3VfZGVyZWZlcmVuY2UoYnNzX2NvbmYtXHUwMDNlY2hhbmN0eF9jb25mKTtcbiYjNDM7XHRpZiAoIWNvbmYpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRiYW5kID0gY29uZi1cdTAwM2VkZWYuY2hhbi1cdTAwM2ViYW5kO1xuJiM0MztcbiYjNDM7XHRkdXJhdGlvbiA9IGllZWU4MDIxMV9yYXRlX2V4cGVjdGVkX3R4X2FpcnRpbWUoaHcsIE5VTEwsIHJpLCBiYW5kLCB0cnVlLCAxMDI0KTtcbiYjNDM7XHRkdXJhdGlvbiAmIzQzOz0gZHVyYXRpb24gXHUwMDNlXHUwMDNlIDQ7IC8qIGFkZCBhc3N1bWVkIHBhY2tldCBlcnJvciByYXRlIG9mIH42JSAqL1xuJiM0MztcdGlmICghZHVyYXRpb24pXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuICgoMTAyNCAqIFVTRUNfUEVSX1NFQykgLyBkdXJhdGlvbikgKiA4O1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHN0YV9zZXRfbGlua19zaW5mbyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbiBcdFx0XHQgICAgICAgc3RydWN0IGxpbmtfc3RhdGlvbl9pbmZvICpsaW5rX3NpbmZvLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluayxcbkBAIC0zMDExLDYgJiM0MzszMDQ4LDEwIEBAIHN0YXRpYyB2b2lkIHN0YV9zZXRfbGlua19zaW5mbyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbiBcdGxpbmtfc2luZm8tXHUwMDNlYnNzX3BhcmFtLmJlYWNvbl9pbnRlcnZhbCA9IGxpbmstXHUwMDNlY29uZi1cdTAwM2ViZWFjb25faW50O1xuIFxuIFx0dGhyID0gc3RhX2dldF9leHBlY3RlZF90aHJvdWdocHV0KHN0YSk7XG4mIzQzO1x0aWYgKCF0aHIgXHUwMDI2XHUwMDI2IChsaW5rX3NpbmZvLVx1MDAzZWZpbGxlZCBcdTAwMjYgQklUX1VMTChOTDgwMjExX1NUQV9JTkZPX1RYX0JJVFJBVEUpKSlcbiYjNDM7XHRcdHRociA9IHN0YV9lc3RpbWF0ZV9leHBlY3RlZF90aHJvdWdocHV0KHN0YSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2bGlua19zaW5mby1cdTAwM2V0eHJhdGUsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgIGxpbmstXHUwMDNlY29uZik7XG4gXG4gXHRpZiAodGhyICE9IDApIHtcbiBcdFx0bGlua19zaW5mby1cdTAwM2VmaWxsZWQgfD1cbkBAIC0zMjY0LDYgJiM0MzszMzA1LDE0IEBAIHZvaWQgc3RhX3NldF9zaW5mbyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgc3RydWN0IHN0YXRpb25faW5mbyAqc2luZm8sXG4gXHRpZiAodGhyICE9IDApIHtcbiBcdFx0c2luZm8tXHUwMDNlZmlsbGVkIHw9IEJJVF9VTEwoTkw4MDIxMV9TVEFfSU5GT19FWFBFQ1RFRF9USFJPVUdIUFVUKTtcbiBcdFx0c2luZm8tXHUwMDNlZXhwZWN0ZWRfdGhyb3VnaHB1dCA9IHRocjtcbiYjNDM7XHR9IGVsc2UgaWYgKCFzdGEtXHUwMDNlc3RhLnZhbGlkX2xpbmtzIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgKHNpbmZvLVx1MDAzZWZpbGxlZCBcdTAwMjYgQklUX1VMTChOTDgwMjExX1NUQV9JTkZPX1RYX0JJVFJBVEUpKSkge1xuJiM0MztcdFx0dGhyID0gc3RhX2VzdGltYXRlX2V4cGVjdGVkX3Rocm91Z2hwdXQoc3RhLCBcdTAwMjZzaW5mby1cdTAwM2V0eHJhdGUsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgIFx1MDAyNnNkYXRhLVx1MDAzZXZpZi5ic3NfY29uZik7XG4mIzQzO1x0XHRpZiAodGhyKSB7XG4mIzQzO1x0XHRcdHNpbmZvLVx1MDAzZWZpbGxlZCB8PSBCSVRfVUxMKE5MODAyMTFfU1RBX0lORk9fRVhQRUNURURfVEhST1VHSFBVVCk7XG4mIzQzO1x0XHRcdHNpbmZvLVx1MDAzZWV4cGVjdGVkX3Rocm91Z2hwdXQgPSB0aHI7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRpZiAoIShzaW5mby1cdTAwM2VmaWxsZWQgXHUwMDI2IEJJVF9VTEwoTkw4MDIxMV9TVEFfSU5GT19BQ0tfU0lHTkFMKSkgXHUwMDI2XHUwMDI2XG5AQCAtMzI4NCw2ICYjNDM7MzMzMyw3IEBAIHZvaWQgc3RhX3NldF9zaW5mbyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgc3RydWN0IHN0YXRpb25faW5mbyAqc2luZm8sXG4gXHRpZiAoc3RhLVx1MDAzZXN0YS52YWxpZF9saW5rcykge1xuIFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluaztcbiBcdFx0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhO1xuJiM0MztcdFx0dTMyIGVzdF90aHIgPSAwO1xuIFx0XHRpbnQgbGlua19pZDtcbiBcbiBcdFx0c2luZm8tXHUwMDNlbWxvX3BhcmFtc192YWxpZCA9IHRydWU7XG5AQCAtMzI5NSwxNyAmIzQzOzMzNDUsMjUgQEAgdm9pZCBzdGFfc2V0X3NpbmZvKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbyxcbiBcdFx0c2luZm8tXHUwMDNldmFsaWRfbGlua3MgPSBzdGEtXHUwMDNlc3RhLnZhbGlkX2xpbmtzO1xuIFxuIFx0XHRmb3JfZWFjaF92YWxpZF9saW5rKHNpbmZvLCBsaW5rX2lkKSB7XG4mIzQzO1x0XHRcdHN0cnVjdCBsaW5rX3N0YXRpb25faW5mbyAqbGlua19zaW5mbyA9IHNpbmZvLVx1MDAzZWxpbmtzW2xpbmtfaWRdO1xuJiM0MztcbiBcdFx0XHRsaW5rX3N0YSA9IHdpcGh5X2RlcmVmZXJlbmNlKHN0YS1cdTAwM2Vsb2NhbC1cdTAwM2Vody53aXBoeSxcbiBcdFx0XHRcdFx0XHQgICAgIHN0YS1cdTAwM2VsaW5rW2xpbmtfaWRdKTtcbiBcdFx0XHRsaW5rID0gd2lwaHlfZGVyZWZlcmVuY2Uoc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlaHcud2lwaHksXG4gXHRcdFx0XHRcdFx0IHNkYXRhLVx1MDAzZWxpbmtbbGlua19pZF0pO1xuIFxuLVx0XHRcdGlmICghbGlua19zdGEgfHwgIXNpbmZvLVx1MDAzZWxpbmtzW2xpbmtfaWRdIHx8ICFsaW5rKSB7XG4mIzQzO1x0XHRcdGlmICghbGlua19zdGEgfHwgIWxpbmtfc2luZm8gfHwgIWxpbmspIHtcbiBcdFx0XHRcdHNpbmZvLVx1MDAzZXZhbGlkX2xpbmtzIFx1MDAyNj0gfkJJVChsaW5rX2lkKTtcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdH1cbi1cdFx0XHRzdGFfc2V0X2xpbmtfc2luZm8oc3RhLCBzaW5mby1cdTAwM2VsaW5rc1tsaW5rX2lkXSxcbi1cdFx0XHRcdFx0ICAgbGluaywgdGlkc3RhdHMpO1xuJiM0MztcdFx0XHRzdGFfc2V0X2xpbmtfc2luZm8oc3RhLCBsaW5rX3NpbmZvLCBsaW5rLCB0aWRzdGF0cyk7XG4mIzQzO1x0XHRcdGlmICghdGhyIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgKGxpbmtfc2luZm8tXHUwMDNlZmlsbGVkIFx1MDAyNiBCSVRfVUxMKE5MODAyMTFfU1RBX0lORk9fRVhQRUNURURfVEhST1VHSFBVVCkpKVxuJiM0MztcdFx0XHRcdGVzdF90aHIgJiM0Mzs9IGxpbmtfc2luZm8tXHUwMDNlZXhwZWN0ZWRfdGhyb3VnaHB1dDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChlc3RfdGhyKSB7XG4mIzQzO1x0XHRcdHNpbmZvLVx1MDAzZWZpbGxlZCB8PSBCSVRfVUxMKE5MODAyMTFfU1RBX0lORk9fRVhQRUNURURfVEhST1VHSFBVVCk7XG4mIzQzO1x0XHRcdHNpbmZvLVx1MDAzZWV4cGVjdGVkX3Rocm91Z2hwdXQgPSBlc3RfdGhyO1xuIFx0XHR9XG4gXHR9XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmhcbmluZGV4IDVkYTMxNDJkODUxNmVmLi5lZTBkMzI4NzdjNWI0NyAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uaFxuQEAgLTE0Nyw3ICYjNDM7MTQ3LDggQEAgc3RydWN0IGFpcnRpbWVfaW5mbyB7XG4gXG4gdm9pZCBpZWVlODAyMTFfc3RhX3VwZGF0ZV9wZW5kaW5nX2FpcnRpbWUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4gXHRcdFx0XHRcdCAgc3RydWN0IHN0YV9pbmZvICpzdGEsIHU4IGFjLFxuLVx0XHRcdFx0XHQgIHUxNiB0eF9haXJ0aW1lLCBib29sIHR4X2NvbXBsZXRlZCk7XG4mIzQzO1x0XHRcdFx0XHQgIHUxNiB0eF9haXJ0aW1lLCBib29sIHR4X2NvbXBsZXRlZCxcbiYjNDM7XHRcdFx0XHRcdCAgYm9vbCBtY2FzdCk7XG4gXG4gc3RydWN0IHN0YV9pbmZvO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGF0dXMuYyBiL25ldC9tYWM4MDIxMS9zdGF0dXMuY1xuaW5kZXggZGQxZGJiYTA2ODM4ZTUuLmM3NjRlMWE5NTQ4Njk2IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL3N0YXR1cy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvc3RhdHVzLmNcbkBAIC03NzQsNyAmIzQzOzc3NCw3IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yZXBvcnRfdXNlZF9za2Ioc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4gXHRcdGllZWU4MDIxMV9zdGFfdXBkYXRlX3BlbmRpbmdfYWlydGltZShsb2NhbCwgc3RhLFxuIFx0XHRcdFx0XHRcdCAgICAgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYiksXG4gXHRcdFx0XHRcdFx0ICAgICB0eF90aW1lX2VzdCxcbi1cdFx0XHRcdFx0XHQgICAgIHRydWUpO1xuJiM0MztcdFx0XHRcdFx0XHQgICAgIHRydWUsIGluZm8tXHUwMDNldHhfdGltZV9tYyk7XG4gXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0fVxuIFxuQEAgLTExODYsMTAgJiM0MzsxMTg2LDExIEBAIHZvaWQgaWVlZTgwMjExX3R4X3N0YXR1c19leHQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXHRcdC8qIERvIHRoaXMgaGVyZSB0byBhdm9pZCB0aGUgZXhwZW5zaXZlIGxvb2t1cCBvZiB0aGUgc3RhXG4gXHRcdCAqIGluIGllZWU4MDIxMV9yZXBvcnRfdXNlZF9za2IoKS5cbiBcdFx0ICovXG4mIzQzO1x0XHRib29sIG1jYXN0ID0gSUVFRTgwMjExX1NLQl9DQihza2IpLVx1MDAzZXR4X3RpbWVfbWM7XG4gXHRcdGllZWU4MDIxMV9zdGFfdXBkYXRlX3BlbmRpbmdfYWlydGltZShsb2NhbCwgc3RhLFxuIFx0XHRcdFx0XHRcdCAgICAgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYiksXG4gXHRcdFx0XHRcdFx0ICAgICB0eF90aW1lX2VzdCxcbi1cdFx0XHRcdFx0XHQgICAgIHRydWUpO1xuJiM0MztcdFx0XHRcdFx0XHQgICAgIHRydWUsIG1jYXN0KTtcbiBcdFx0aWVlZTgwMjExX2luZm9fc2V0X3R4X3RpbWVfZXN0KElFRUU4MDIxMV9TS0JfQ0Ioc2tiKSwgMCk7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3R4LmMgYi9uZXQvbWFjODAyMTEvdHguY1xuaW5kZXggOTFiMTQxMTJlMjRmMDguLjg1YWZmMzc4MTkyNDJhIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL3R4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS90eC5jXG5AQCAtNDA1NCwyMCAmIzQzOzQwNTQsMjAgQEAgc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV90eF9kZXF1ZXVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIGVuY2FwX291dDpcbiBcdGluZm8tXHUwMDNlY29udHJvbC52aWYgPSB2aWY7XG4gXG4tXHRpZiAodHguc3RhIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KGxvY2FsLVx1MDAzZWh3LndpcGh5LCBOTDgwMjExX0VYVF9GRUFUVVJFX0FRTCkpIHtcbi1cdFx0Ym9vbCBhbXBkdSA9IHR4cS1cdTAwM2VhYyAhPSBJRUVFODAyMTFfQUNfVk87XG4mIzQzO1x0aWYgKHdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KGxvY2FsLVx1MDAzZWh3LndpcGh5LCBOTDgwMjExX0VYVF9GRUFUVVJFX0FRTCkpIHtcbiYjNDM7XHRcdGJvb2wgYW1wZHUgPSB0eHEtXHUwMDNlc3RhIFx1MDAyNlx1MDAyNiB0eHEtXHUwMDNlYWMgIT0gSUVFRTgwMjExX0FDX1ZPO1xuIFx0XHR1MzIgYWlydGltZTtcbiBcbiBcdFx0YWlydGltZSA9IGllZWU4MDIxMV9jYWxjX2V4cGVjdGVkX3R4X2FpcnRpbWUoaHcsIHZpZiwgdHhxLVx1MDAzZXN0YSxcbiBcdFx0XHRcdFx0XHRcdCAgICAgc2tiLVx1MDAzZWxlbiwgYW1wZHUpO1xuLVx0XHRpZiAoYWlydGltZSkge1xuLVx0XHRcdGFpcnRpbWUgPSBpZWVlODAyMTFfaW5mb19zZXRfdHhfdGltZV9lc3QoaW5mbywgYWlydGltZSk7XG4tXHRcdFx0aWVlZTgwMjExX3N0YV91cGRhdGVfcGVuZGluZ19haXJ0aW1lKGxvY2FsLCB0eC5zdGEsXG4tXHRcdFx0XHRcdFx0XHQgICAgIHR4cS1cdTAwM2VhYyxcbi1cdFx0XHRcdFx0XHRcdCAgICAgYWlydGltZSxcbi1cdFx0XHRcdFx0XHRcdCAgICAgZmFsc2UpO1xuLVx0XHR9XG4mIzQzO1x0XHRpZiAoIWFpcnRpbWUpXG4mIzQzO1x0XHRcdHJldHVybiBza2I7XG4mIzQzO1xuJiM0MztcdFx0YWlydGltZSA9IGllZWU4MDIxMV9pbmZvX3NldF90eF90aW1lX2VzdChpbmZvLCBhaXJ0aW1lKTtcbiYjNDM7XHRcdGluZm8tXHUwMDNldHhfdGltZV9tYyA9ICF0eC5zdGE7XG4mIzQzO1x0XHRpZWVlODAyMTFfc3RhX3VwZGF0ZV9wZW5kaW5nX2FpcnRpbWUobG9jYWwsIHR4LnN0YSwgdHhxLVx1MDAzZWFjLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIGFpcnRpbWUsIGZhbHNlLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIGluZm8tXHUwMDNldHhfdGltZV9tYyk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gc2tiO1xuQEAgLTQxMTksNiAmIzQzOzQxMTksNyBAQCBzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqaWVlZTgwMjExX25leHRfdHhxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBhYylcbiBcdHN0cnVjdCBpZWVlODAyMTFfdHhxICpyZXQgPSBOVUxMO1xuIFx0c3RydWN0IHR4cV9pbmZvICp0eHFpID0gTlVMTCwgKmhlYWQgPSBOVUxMO1xuIFx0Ym9vbCBmb3VuZF9lbGlnaWJsZV90eHEgPSBmYWxzZTtcbiYjNDM7XHRib29sIGFxbF9jaGVjaztcbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZsb2NhbC1cdTAwM2VhY3RpdmVfdHhxX2xvY2tbYWNdKTtcbiBcbkBAIC00MTQyLDI2ICYjNDM7NDE0MywyOCBAQCBzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqaWVlZTgwMjExX25leHRfdHhxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBhYylcbiBcdGlmICghaGVhZClcbiBcdFx0aGVhZCA9IHR4cWk7XG4gXG4mIzQzO1x0YXFsX2NoZWNrID0gaWVlZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrKGh3LCBcdTAwMjZ0eHFpLVx1MDAzZXR4cSk7XG4mIzQzO1x0aWYgKGFxbF9jaGVjaylcbiYjNDM7XHRcdGZvdW5kX2VsaWdpYmxlX3R4cSA9IHRydWU7XG4mIzQzO1xuIFx0aWYgKHR4cWktXHUwMDNldHhxLnN0YSkge1xuIFx0XHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IGNvbnRhaW5lcl9vZih0eHFpLVx1MDAzZXR4cS5zdGEsXG4gXHRcdFx0XHRcdFx0ICAgIHN0cnVjdCBzdGFfaW5mbywgc3RhKTtcbi1cdFx0Ym9vbCBhcWxfY2hlY2sgPSBpZWVlODAyMTFfdHhxX2FpcnRpbWVfY2hlY2soaHcsIFx1MDAyNnR4cWktXHUwMDNldHhxKTtcbi1cdFx0czMyIGRlZmljaXQgPSBpZWVlODAyMTFfc3RhX2RlZmljaXQoc3RhLCB0eHFpLVx1MDAzZXR4cS5hYyk7XG4gXG4tXHRcdGlmIChhcWxfY2hlY2spXG4tXHRcdFx0Zm91bmRfZWxpZ2libGVfdHhxID0gdHJ1ZTtcbi1cbi1cdFx0aWYgKGRlZmljaXQgXHUwMDNjIDApXG4mIzQzO1x0XHRpZiAoaWVlZTgwMjExX3N0YV9kZWZpY2l0KHN0YSwgdHhxaS1cdTAwM2V0eHEuYWMpIFx1MDAzYyAwKSB7XG4gXHRcdFx0c3RhLVx1MDAzZWFpcnRpbWVbdHhxaS1cdTAwM2V0eHEuYWNdLmRlZmljaXQgJiM0Mzs9XG4gXHRcdFx0XHRzdGEtXHUwMDNlYWlydGltZV93ZWlnaHQ7XG4gXG4tXHRcdGlmIChkZWZpY2l0IFx1MDAzYyAwIHx8ICFhcWxfY2hlY2spIHtcbi1cdFx0XHRsaXN0X21vdmVfdGFpbChcdTAwMjZ0eHFpLVx1MDAzZXNjaGVkdWxlX29yZGVyLFxuLVx0XHRcdFx0ICAgICAgIFx1MDAyNmxvY2FsLVx1MDAzZWFjdGl2ZV90eHFzW3R4cWktXHUwMDNldHhxLmFjXSk7XG4tXHRcdFx0Z290byBiZWdpbjtcbiYjNDM7XHRcdFx0YXFsX2NoZWNrID0gZmFsc2U7XG4gXHRcdH1cbiBcdH1cbiBcbiYjNDM7XHRpZiAoIWFxbF9jaGVjaykge1xuJiM0MztcdFx0bGlzdF9tb3ZlX3RhaWwoXHUwMDI2dHhxaS1cdTAwM2VzY2hlZHVsZV9vcmRlcixcbiYjNDM7XHRcdFx0XHQgICBcdTAwMjZsb2NhbC1cdTAwM2VhY3RpdmVfdHhxc1t0eHFpLVx1MDAzZXR4cS5hY10pO1xuJiM0MztcdFx0Z290byBiZWdpbjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKHR4cWktXHUwMDNlc2NoZWR1bGVfcm91bmQgPT0gbG9jYWwtXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdKVxuIFx0XHRnb3RvIG91dDtcbiBcbkBAIC00MjI4LDcgJiM0Mzs0MjMxLDggQEAgYm9vbCBpZWVlODAyMTFfdHhxX2FpcnRpbWVfY2hlY2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0aWYgKCF0eHEtXHUwMDNlc3RhKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdHJldHVybiBhdG9taWNfcmVhZChcdTAwMjZsb2NhbC1cdTAwM2VhcWxfbWNfcGVuZGluZ19haXJ0aW1lKSBcdTAwM2NcbiYjNDM7XHRcdCAgICAgICBsb2NhbC1cdTAwM2VhcWxfdHhxX2xpbWl0X21jO1xuIFxuIFx0aWYgKHVubGlrZWx5KHR4cS1cdTAwM2V0aWQgPT0gSUVFRTgwMjExX05VTV9USURTKSlcbiBcdFx0cmV0dXJuIHRydWU7XG5AQCAtNDI0OCw2ICYjNDM7NDI1MiwyNCBAQCBib29sIGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVjayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiB9XG4gRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdHhxX2FpcnRpbWVfY2hlY2spO1xuIFxuJiM0Mzt1MzIgaWVlZTgwMjExX3R4cV9hcWxfcGVuZGluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IGllZWU4MDIxMV90eHEgKnR4cSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpO1xuJiM0MztcdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkodHhxLVx1MDAzZXRpZCA9PSBJRUVFODAyMTFfTlVNX1RJRFMpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmICghdHhxLVx1MDAzZXN0YSlcbiYjNDM7XHRcdHJldHVybiBhdG9taWNfcmVhZChcdTAwMjZsb2NhbC1cdTAwM2VhcWxfbWNfcGVuZGluZ19haXJ0aW1lKTtcbiYjNDM7XG4mIzQzO1x0c3RhID0gY29udGFpbmVyX29mKHR4cS1cdTAwM2VzdGEsIHN0cnVjdCBzdGFfaW5mbywgc3RhKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGF0b21pY19yZWFkKFx1MDAyNnN0YS1cdTAwM2VhaXJ0aW1lW3R4cS1cdTAwM2VhY10uYXFsX3R4X3BlbmRpbmcpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3R4cV9hcWxfcGVuZGluZyk7XG4mIzQzO1xuIHN0YXRpYyBib29sXG4gaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9haXJ0aW1lX2NoZWNrKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1OCBhYylcbiB7XG5AQCAtNDI3NywxNSAmIzQzOzQyOTksMTUgQEAgYm9vbCBpZWVlODAyMTFfdHhxX21heV90cmFuc21pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZsb2NhbC1cdTAwM2VhY3RpdmVfdHhxX2xvY2tbYWNdKTtcbiBcbi1cdGlmICghdHhxaS1cdTAwM2V0eHEuc3RhKVxuLVx0XHRnb3RvIG91dDtcbi1cbiBcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnR4cWktXHUwMDNlc2NoZWR1bGVfb3JkZXIpKVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdGlmICghaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9haXJ0aW1lX2NoZWNrKGxvY2FsLCBhYykpXG4gXHRcdGdvdG8gb3V0O1xuIFxuJiM0MztcdGlmICghdHhxaS1cdTAwM2V0eHEuc3RhKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGl0ZXIsIHRtcCwgXHUwMDI2bG9jYWwtXHUwMDNlYWN0aXZlX3R4cXNbYWNdLFxuIFx0XHRcdFx0IHNjaGVkdWxlX29yZGVyKSB7XG4gXHRcdGlmIChpdGVyID09IHR4cWkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTQ6NTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjExX3N0YV91cGRhdGVfcGVuZGluZ19haXJ0aW1lJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV90eHFfYWlydGltZV9jaGVjayYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfdHhxX2FxbF9wZW5kaW5nJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9yYXRlX2V4cGVjdGVkX3R4X2FpcnRpbWUmIzM0OywKICAgICYjMzQ7c3RhX2VzdGltYXRlX2V4cGVjdGVkX3Rocm91Z2hwdXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBBaXJ0aW1lIFF1ZXVlIExpbWl0IChBUUwpIHN1cHBvcnQgZm9yIG11bHRpY2FzdCB0cmFmZmljIGFuZCBtb2RpZmllcyB0aGUgZXhwZWN0ZWQgdGhyb3VnaHB1dCBjYWxjdWxhdGlvbiBmb3Igc3RhdGlvbnMgaW4gbWFjODAyMTEuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbG9naWMgZm9yIDgwMi4xMSBuZXR3b3JraW5nIGFuZCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBtYWM4MDIxMV9od3NpbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzlkNTg1MzliZWI3NDBiYzU3YjYzMmYxNzg3NDVjYzVjYTgyZmNhMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDIyIDE0OjU0OjI5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaCBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmgKaW5kZXggZjVhYmYxZGI3NTU4YmMuLjczNTRiYTA3OTM2M2E1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmgKQEAgLTM3MjIsNiAmIzQzOzM3MjIsNyBAQCBlbnVtIHdpcGh5X3BhcmFtc19mbGFncyB7CiAvKiBUaGUgcGVyIFRYUSBkZXZpY2UgcXVldWUgbGltaXQgaW4gYWlydGltZSAqLwogI2RlZmluZSBJRUVFODAyMTFfREVGQVVMVF9BUUxfVFhRX0xJTUlUX0wJNTAwMAogI2RlZmluZSBJRUVFODAyMTFfREVGQVVMVF9BUUxfVFhRX0xJTUlUX0gJMTIwMDAKJiM0MzsjZGVmaW5lIElFRUU4MDIxMV9ERUZBVUxUX0FRTF9UWFFfTElNSVRfTUMJNTAwMDAKIAogLyogVGhlIHBlciBpbnRlcmZhY2UgYWlydGltZSB0aHJlc2hvbGQgdG8gc3dpdGNoIHRvIGxvd2VyIHF1ZXVlIGxpbWl0ICovCiAjZGVmaW5lIElFRUU4MDIxMV9BUUxfVEhSRVNIT0xECQkJMjQwMDAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmggYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCmluZGV4IDRmOTVkYTAyMzc0NmY5Li4yM2Q4ZDQ2MzljZGQ2ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCkBAIC0xMzU0LDggJiM0MzsxMzU0LDggQEAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvIHsKIAkgICAgc3RhdHVzX2RhdGFfaWRyOjEsCiAJICAgIHN0YXR1c19kYXRhOjEzLAogCSAgICBod19xdWV1ZTo0LAomIzQzOwkgICAgdHhfdGltZV9tYzoxLAogCSAgICB0eF90aW1lX2VzdDoxMDsKLQkvKiAxIGZyZWUgYml0ICovCiAKIAl1bmlvbiB7CiAJCXN0cnVjdCB7CkBAIC02ODc2LDYgJiM0Mzs2ODc2LDE3IEBAIHZvaWQgaWVlZTgwMjExX3N0YV9yZWdpc3Rlcl9haXJ0aW1lKHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsIHU4IHRpZCwKIGJvb2wKIGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVjayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV90eHEgKnR4cSk7CiAKJiM0MzsvKioKJiM0MzsgKiBpZWVlODAyMTFfdHhxX2FxbF9wZW5kaW5nIC0gZ2V0IHBlbmRpbmcgQVFMIGFpcnRpbWUgZm9yIGEgdHhxCiYjNDM7ICoKJiM0MzsgKiBAaHc6IHBvaW50ZXIgb2J0YWluZWQgZnJvbSBpZWVlODAyMTFfYWxsb2NfaHcoKQomIzQzOyAqIEB0eHE6IHBvaW50ZXIgb2J0YWluZWQgZnJvbSBzdGF0aW9uIG9yIHZpcnR1YWwgaW50ZXJmYWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHBlbmRpbmcgYWlydGltZSAoaW4gdXNlYykgZm9yIHRoZSBnaXZlbiB0eHEuCiYjNDM7ICovCiYjNDM7dTMyIGllZWU4MDIxMV90eHFfYXFsX3BlbmRpbmcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiYjNDM7CQkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eHEgKnR4cSk7CiYjNDM7CiAvKioKICAqIGllZWU4MDIxMV9pdGVyX2tleXMgLSBpdGVyYXRlIGtleXMgcHJvZ3JhbW1lZCBpbnRvIHRoZSBkZXZpY2UKICAqIEBodzogcG9pbnRlciBvYnRhaW5lZCBmcm9tIGllZWU4MDIxMV9hbGxvY19odygpCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvYWlydGltZS5jIGIvbmV0L21hYzgwMjExL2FpcnRpbWUuYwppbmRleCBjNjFkZjYzNzIzMmE5Yi4uMGM1NGNkYmQ3NTNjZDcgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9haXJ0aW1lLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2FpcnRpbWUuYwpAQCAtNjg1LDcgJiM0Mzs2ODUsNyBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9maWxsX3J4X3N0YXR1cyhzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdCwKIAlpZiAoaWVlZTgwMjExX2ZpbGxfcmF0ZV9pbmZvKGh3LCBzdGF0LCBiYW5kLCByaSkpCiAJCXJldHVybiAwOwogCi0JaWYgKCFpZWVlODAyMTFfcmF0ZV92YWxpZChyYXRlKSkKJiM0MzsJaWYgKCFyYXRlIHx8ICFpZWVlODAyMTFfcmF0ZV92YWxpZChyYXRlKSkKIAkJcmV0dXJuIC0xOwogCiAJaWYgKHJhdGUtJmd0O2ZsYWdzICZhbXA7IElFRUU4MDIxMV9UWF9SQ18xNjBfTUhaX1dJRFRIKQpAQCAtNzUzLDYgJiM0Mzs3NTMsNTMgQEAgdTMyIGllZWU4MDIxMV9jYWxjX3R4X2FpcnRpbWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZWVlODAyMTFfY2FsY190eF9haXJ0aW1lKTsKIAomIzQzO3UzMiBpZWVlODAyMTFfcmF0ZV9leHBlY3RlZF90eF9haXJ0aW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAomIzQzOwkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICp0eF9yYXRlLAomIzQzOwkJCQkgICAgICAgc3RydWN0IHJhdGVfaW5mbyAqcmksCiYjNDM7CQkJCSAgICAgICBlbnVtIG5sODAyMTFfYmFuZCBiYW5kLAomIzQzOwkJCQkgICAgICAgYm9vbCBhbXBkdSwgaW50IGxlbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHN0YXQ7CiYjNDM7CXUzMiBkdXJhdGlvbiwgb3ZlcmhlYWQ7CiYjNDM7CXU4IGFnZ19zaGlmdDsKJiM0MzsKJiM0MzsJaWYgKGllZWU4MDIxMV9maWxsX3J4X3N0YXR1cygmYW1wO3N0YXQsIGh3LCB0eF9yYXRlLCByaSwgYmFuZCwgbGVuKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAoc3RhdC5lbmNvZGluZyA9PSBSWF9FTkNfTEVHQUNZIHx8ICFhbXBkdSkKJiM0MzsJCXJldHVybiBpZWVlODAyMTFfY2FsY19yeF9haXJ0aW1lKGh3LCAmYW1wO3N0YXQsIGxlbikgKiAxMDI0OwomIzQzOwomIzQzOwlkdXJhdGlvbiA9IGllZWU4MDIxMV9nZXRfcmF0ZV9kdXJhdGlvbihodywgJmFtcDtzdGF0LCAmYW1wO292ZXJoZWFkKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQXNzdW1lIHRoYXQgSFQvVkhUIHRyYW5zbWlzc2lvbiBvbiBhbnkgQUMgZXhjZXB0IFZPIHdpbGwKJiM0MzsJICogdXNlIGFnZ3JlZ2F0aW9uLiBTaW5jZSB3ZSBkb24mIzM5O3QgaGF2ZSByZWxpYWJsZSByZXBvcnRpbmcKJiM0MzsJICogb2YgYWdncmVnYXRpb24gbGVuZ3RoLCBhc3N1bWUgYW4gYXZlcmFnZSBzaXplIGJhc2VkIG9uIHRoZQomIzQzOwkgKiB0eCByYXRlLgomIzQzOwkgKiBUaGlzIHdpbGwgbm90IGJlIHZlcnkgYWNjdXJhdGUsIGJ1dCBtdWNoIGJldHRlciB0aGFuIHNpbXBseQomIzQzOwkgKiBhc3N1bWluZyB1bi1hZ2dyZWdhdGVkIHR4IGluIGFsbCBjYXNlcy4KJiM0MzsJICovCiYjNDM7CWlmIChkdXJhdGlvbiAmZ3Q7IDQwMCAqIDEwMjQpIC8qICZsdDs9IFZIVDIwIE1DUzIgMVMgKi8KJiM0MzsJCWFnZ19zaGlmdCA9IDE7CiYjNDM7CWVsc2UgaWYgKGR1cmF0aW9uICZndDsgMjUwICogMTAyNCkgLyogJmx0Oz0gVkhUMjAgTUNTMyAxUyBvciBNQ1MxIDJTICovCiYjNDM7CQlhZ2dfc2hpZnQgPSAyOwomIzQzOwllbHNlIGlmIChkdXJhdGlvbiAmZ3Q7IDE1MCAqIDEwMjQpIC8qICZsdDs9IFZIVDIwIE1DUzUgMVMgb3IgTUNTMiAyUyAqLwomIzQzOwkJYWdnX3NoaWZ0ID0gMzsKJiM0MzsJZWxzZSBpZiAoZHVyYXRpb24gJmd0OyA3MCAqIDEwMjQpIC8qICZsdDs9IFZIVDIwIE1DUzUgMlMgKi8KJiM0MzsJCWFnZ19zaGlmdCA9IDQ7CiYjNDM7CWVsc2UgaWYgKHN0YXQuZW5jb2RpbmcgIT0gUlhfRU5DX0hFIHx8CiYjNDM7CQkgZHVyYXRpb24gJmd0OyAyMCAqIDEwMjQpIC8qICZsdDs9IEhFNDAgTUNTNiAyUyAqLwomIzQzOwkJYWdnX3NoaWZ0ID0gNTsKJiM0MzsJZWxzZQomIzQzOwkJYWdnX3NoaWZ0ID0gNjsKJiM0MzsKJiM0MzsJZHVyYXRpb24gKj0gbGVuOwomIzQzOwlkdXJhdGlvbiAvPSBBVkdfUEtUX1NJWkU7CiYjNDM7CWR1cmF0aW9uICYjNDM7PSAob3ZlcmhlYWQgKiAxMDI0ICZndDsmZ3Q7IGFnZ19zaGlmdCk7CiYjNDM7CiYjNDM7CXJldHVybiBkdXJhdGlvbjsKJiM0Mzt9CiYjNDM7CiB1MzIgaWVlZTgwMjExX2NhbGNfZXhwZWN0ZWRfdHhfYWlydGltZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSwKQEAgLTc3NSw0NSAmIzQzOzgyMiwxMyBAQCB1MzIgaWVlZTgwMjExX2NhbGNfZXhwZWN0ZWRfdHhfYWlydGltZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAlpZiAocHVic3RhKSB7CiAJCXN0cnVjdCBzdGFfaW5mbyAqc3RhID0gY29udGFpbmVyX29mKHB1YnN0YSwgc3RydWN0IHN0YV9pbmZvLAogCQkJCQkJICAgIHN0YSk7Ci0JCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHN0YXQ7CiAJCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqdHhfcmF0ZSA9ICZhbXA7c3RhLSZndDtkZWZsaW5rLnR4X3N0YXRzLmxhc3RfcmF0ZTsKIAkJc3RydWN0IHJhdGVfaW5mbyAqcmkgPSAmYW1wO3N0YS0mZ3Q7ZGVmbGluay50eF9zdGF0cy5sYXN0X3JhdGVfaW5mbzsKLQkJdTMyIGR1cmF0aW9uLCBvdmVyaGVhZDsKLQkJdTggYWdnX3NoaWZ0OwotCi0JCWlmIChpZWVlODAyMTFfZmlsbF9yeF9zdGF0dXMoJmFtcDtzdGF0LCBodywgdHhfcmF0ZSwgcmksIGJhbmQsIGxlbikpCi0JCQlyZXR1cm4gMDsKJiM0MzsJCXUzMiBkdXJhdGlvbjsKIAotCQlpZiAoc3RhdC5lbmNvZGluZyA9PSBSWF9FTkNfTEVHQUNZIHx8ICFhbXBkdSkKLQkJCXJldHVybiBpZWVlODAyMTFfY2FsY19yeF9haXJ0aW1lKGh3LCAmYW1wO3N0YXQsIGxlbik7Ci0KLQkJZHVyYXRpb24gPSBpZWVlODAyMTFfZ2V0X3JhdGVfZHVyYXRpb24oaHcsICZhbXA7c3RhdCwgJmFtcDtvdmVyaGVhZCk7Ci0JCS8qCi0JCSAqIEFzc3VtZSB0aGF0IEhUL1ZIVCB0cmFuc21pc3Npb24gb24gYW55IEFDIGV4Y2VwdCBWTyB3aWxsCi0JCSAqIHVzZSBhZ2dyZWdhdGlvbi4gU2luY2Ugd2UgZG9uJiMzOTt0IGhhdmUgcmVsaWFibGUgcmVwb3J0aW5nCi0JCSAqIG9mIGFnZ3JlZ2F0aW9uIGxlbmd0aCwgYXNzdW1lIGFuIGF2ZXJhZ2Ugc2l6ZSBiYXNlZCBvbiB0aGUKLQkJICogdHggcmF0ZS4KLQkJICogVGhpcyB3aWxsIG5vdCBiZSB2ZXJ5IGFjY3VyYXRlLCBidXQgbXVjaCBiZXR0ZXIgdGhhbiBzaW1wbHkKLQkJICogYXNzdW1pbmcgdW4tYWdncmVnYXRlZCB0eCBpbiBhbGwgY2FzZXMuCi0JCSAqLwotCQlpZiAoZHVyYXRpb24gJmd0OyA0MDAgKiAxMDI0KSAvKiAmbHQ7PSBWSFQyMCBNQ1MyIDFTICovCi0JCQlhZ2dfc2hpZnQgPSAxOwotCQllbHNlIGlmIChkdXJhdGlvbiAmZ3Q7IDI1MCAqIDEwMjQpIC8qICZsdDs9IFZIVDIwIE1DUzMgMVMgb3IgTUNTMSAyUyAqLwotCQkJYWdnX3NoaWZ0ID0gMjsKLQkJZWxzZSBpZiAoZHVyYXRpb24gJmd0OyAxNTAgKiAxMDI0KSAvKiAmbHQ7PSBWSFQyMCBNQ1M1IDFTIG9yIE1DUzIgMlMgKi8KLQkJCWFnZ19zaGlmdCA9IDM7Ci0JCWVsc2UgaWYgKGR1cmF0aW9uICZndDsgNzAgKiAxMDI0KSAvKiAmbHQ7PSBWSFQyMCBNQ1M1IDJTICovCi0JCQlhZ2dfc2hpZnQgPSA0OwotCQllbHNlIGlmIChzdGF0LmVuY29kaW5nICE9IFJYX0VOQ19IRSB8fAotCQkJIGR1cmF0aW9uICZndDsgMjAgKiAxMDI0KSAvKiAmbHQ7PSBIRTQwIE1DUzYgMlMgKi8KLQkJCWFnZ19zaGlmdCA9IDU7Ci0JCWVsc2UKLQkJCWFnZ19zaGlmdCA9IDY7Ci0KLQkJZHVyYXRpb24gKj0gbGVuOwotCQlkdXJhdGlvbiAvPSBBVkdfUEtUX1NJWkU7CiYjNDM7CQlkdXJhdGlvbiA9IGllZWU4MDIxMV9yYXRlX2V4cGVjdGVkX3R4X2FpcnRpbWUoaHcsIHR4X3JhdGUsIHJpLAomIzQzOwkJCQkJCQkgICAgICBiYW5kLCB0cnVlLCBsZW4pOwogCQlkdXJhdGlvbiAvPSAxMDI0OwotCQlkdXJhdGlvbiAmIzQzOz0gKG92ZXJoZWFkICZndDsmZ3Q7IGFnZ19zaGlmdCk7CiAKIAkJcmV0dXJuIG1heF90KHUzMiwgZHVyYXRpb24sIDQpOwogCX0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMgYi9uZXQvbWFjODAyMTEvZGVidWdmcy5jCmluZGV4IGE0ZDU0NjFmNjQ4MGYwLi44ZWJmNWJjZjNjMGVjMSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2RlYnVnZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvZGVidWdmcy5jCkBAIC0yMTAsMTEgJiM0MzsyMTAsMTMgQEAgc3RhdGljIHNzaXplX3QgYXFsX3BlbmRpbmdfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCSYjMzQ7VkkgICAgICV1IHVzXG4mIzM0OwogCQkJJiMzNDtCRSAgICAgJXUgdXNcbiYjMzQ7CiAJCQkmIzM0O0JLICAgICAldSB1c1xuJiMzNDsKJiM0MzsJCQkmIzM0O01DICAgICAldSB1c1xuJiMzNDsKIAkJCSYjMzQ7dG90YWwgICV1IHVzXG4mIzM0OywKIAkJCWF0b21pY19yZWFkKCZhbXA7bG9jYWwtJmd0O2FxbF9hY19wZW5kaW5nX2FpcnRpbWVbSUVFRTgwMjExX0FDX1ZPXSksCiAJCQlhdG9taWNfcmVhZCgmYW1wO2xvY2FsLSZndDthcWxfYWNfcGVuZGluZ19haXJ0aW1lW0lFRUU4MDIxMV9BQ19WSV0pLAogCQkJYXRvbWljX3JlYWQoJmFtcDtsb2NhbC0mZ3Q7YXFsX2FjX3BlbmRpbmdfYWlydGltZVtJRUVFODAyMTFfQUNfQkVdKSwKIAkJCWF0b21pY19yZWFkKCZhbXA7bG9jYWwtJmd0O2FxbF9hY19wZW5kaW5nX2FpcnRpbWVbSUVFRTgwMjExX0FDX0JLXSksCiYjNDM7CQkJYXRvbWljX3JlYWQoJmFtcDtsb2NhbC0mZ3Q7YXFsX21jX3BlbmRpbmdfYWlydGltZSksCiAJCQlhdG9taWNfcmVhZCgmYW1wO2xvY2FsLSZndDthcWxfdG90YWxfcGVuZGluZ19haXJ0aW1lKSk7CiAJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywKIAkJCQkgICAgICAgYnVmLCBsZW4pOwpAQCAtMjM5LDcgJiM0MzsyNDEsOCBAQCBzdGF0aWMgc3NpemVfdCBhcWxfdHhxX2xpbWl0X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkmIzM0O1ZPCSV1CQkldVxuJiMzNDsKIAkJCSYjMzQ7VkkJJXUJCSV1XG4mIzM0OwogCQkJJiMzNDtCRQkldQkJJXVcbiYjMzQ7Ci0JCQkmIzM0O0JLCSV1CQkldVxuJiMzNDssCiYjNDM7CQkJJiMzNDtCSwkldQkJJXVcbiYjMzQ7CiYjNDM7CQkJJiMzNDtNQwkldVxuJiMzNDssCiAJCQlsb2NhbC0mZ3Q7YXFsX3R4cV9saW1pdF9sb3dbSUVFRTgwMjExX0FDX1ZPXSwKIAkJCWxvY2FsLSZndDthcWxfdHhxX2xpbWl0X2hpZ2hbSUVFRTgwMjExX0FDX1ZPXSwKIAkJCWxvY2FsLSZndDthcWxfdHhxX2xpbWl0X2xvd1tJRUVFODAyMTFfQUNfVkldLApAQCAtMjQ3LDcgJiM0MzsyNTAsOCBAQCBzdGF0aWMgc3NpemVfdCBhcWxfdHhxX2xpbWl0X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCiAJCQlsb2NhbC0mZ3Q7YXFsX3R4cV9saW1pdF9sb3dbSUVFRTgwMjExX0FDX0JFXSwKIAkJCWxvY2FsLSZndDthcWxfdHhxX2xpbWl0X2hpZ2hbSUVFRTgwMjExX0FDX0JFXSwKIAkJCWxvY2FsLSZndDthcWxfdHhxX2xpbWl0X2xvd1tJRUVFODAyMTFfQUNfQktdLAotCQkJbG9jYWwtJmd0O2FxbF90eHFfbGltaXRfaGlnaFtJRUVFODAyMTFfQUNfQktdKTsKJiM0MzsJCQlsb2NhbC0mZ3Q7YXFsX3R4cV9saW1pdF9oaWdoW0lFRUU4MDIxMV9BQ19CS10sCiYjNDM7CQkJbG9jYWwtJmd0O2FxbF90eHFfbGltaXRfbWMpOwogCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsCiAJCQkJICAgICAgIGJ1ZiwgbGVuKTsKIH0KQEAgLTI3Myw2ICYjNDM7Mjc3LDExIEBAIHN0YXRpYyBzc2l6ZV90IGFxbF90eHFfbGltaXRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCiAJZWxzZQogCQlidWZbY291bnRdID0gJiMzOTtcMCYjMzk7OwogCiYjNDM7CWlmIChzc2NhbmYoYnVmLCAmIzM0O21jYXN0ICV1JiMzNDssICZhbXA7cV9saW1pdF9sb3cpID09IDEpIHsKJiM0MzsJCWxvY2FsLSZndDthcWxfdHhxX2xpbWl0X21jID0gcV9saW1pdF9sb3c7CiYjNDM7CQlyZXR1cm4gY291bnQ7CiYjNDM7CX0KJiM0MzsKIAlpZiAoc3NjYW5mKGJ1ZiwgJiMzNDsldSAldSAldSYjMzQ7LCAmYW1wO2FjLCAmYW1wO3FfbGltaXRfbG93LCAmYW1wO3FfbGltaXRfaGlnaCkgIT0gMykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKaW5kZXggMzRhOWVhOGI2Zjg1N2UuLjc4ZmVhN2ExN2FlNzY2IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaApAQCAtMTQ2NCwxMCAmIzQzOzE0NjQsMTIgQEAgc3RydWN0IGllZWU4MDIxMV9sb2NhbCB7CiAJc3BpbmxvY2tfdCBoYW5kbGVfd2FrZV90eF9xdWV1ZV9sb2NrOwogCiAJdTE2IGFpcnRpbWVfZmxhZ3M7CiYjNDM7CXUzMiBhcWxfdHhxX2xpbWl0X21jOwogCXUzMiBhcWxfdHhxX2xpbWl0X2xvd1tJRUVFODAyMTFfTlVNX0FDU107CiAJdTMyIGFxbF90eHFfbGltaXRfaGlnaFtJRUVFODAyMTFfTlVNX0FDU107CiAJdTMyIGFxbF90aHJlc2hvbGQ7CiAJYXRvbWljX3QgYXFsX3RvdGFsX3BlbmRpbmdfYWlydGltZTsKJiM0MzsJYXRvbWljX3QgYXFsX21jX3BlbmRpbmdfYWlydGltZTsKIAlhdG9taWNfdCBhcWxfYWNfcGVuZGluZ19haXJ0aW1lW0lFRUU4MDIxMV9OVU1fQUNTXTsKIAogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzICpvcHM7CkBAIC0yOTM5LDYgJiM0MzsyOTQxLDExIEBAIHU4ICppZWVlODAyMTFfZ2V0X2Jzc2lkKHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsIHNpemVfdCBsZW4sCiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaWVlZTgwMjExX2V0aHRvb2xfb3BzOwogCiYjNDM7dTMyIGllZWU4MDIxMV9yYXRlX2V4cGVjdGVkX3R4X2FpcnRpbWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnR4X3JhdGUsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgcmF0ZV9pbmZvICpyaSwKJiM0MzsJCQkJICAgICAgIGVudW0gbmw4MDIxMV9iYW5kIGJhbmQsCiYjNDM7CQkJCSAgICAgICBib29sIGFtcGR1LCBpbnQgbGVuKTsKIHUzMiBpZWVlODAyMTFfY2FsY19leHBlY3RlZF90eF9haXJ0aW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21haW4uYyBiL25ldC9tYWM4MDIxMS9tYWluLmMKaW5kZXggZWIxZWFhZjM0NjEyZTEuLmI1ZGM3ZjY1OWI1ZGU1IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9tYWluLmMKQEAgLTk4OCw2ICYjNDM7OTg4LDcgQEAgc3RydWN0IGllZWU4MDIxMV9odyAqaWVlZTgwMjExX2FsbG9jX2h3X25tKHNpemVfdCBwcml2X2RhdGFfbGVuLAogCXNwaW5fbG9ja19pbml0KCZhbXA7bG9jYWwtJmd0O3J4X3BhdGhfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmFtcDtsb2NhbC0mZ3Q7cXVldWVfc3RvcF9yZWFzb25fbG9jayk7CiAKJiM0MzsJbG9jYWwtJmd0O2FxbF90eHFfbGltaXRfbWMgPSBJRUVFODAyMTFfREVGQVVMVF9BUUxfVFhRX0xJTUlUX01DOwogCWZvciAoaSA9IDA7IGkgJmx0OyBJRUVFODAyMTFfTlVNX0FDUzsgaSYjNDM7JiM0MzspIHsKIAkJSU5JVF9MSVNUX0hFQUQoJmFtcDtsb2NhbC0mZ3Q7YWN0aXZlX3R4cXNbaV0pOwogCQlzcGluX2xvY2tfaW5pdCgmYW1wO2xvY2FsLSZndDthY3RpdmVfdHhxX2xvY2tbaV0pOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uYwppbmRleCAyMmViYTBlNmU1NGM1Yi4uZDEyYWVkOWMxNzU2MTcgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jCkBAIC0yNDkxLDEzICYjNDM7MjQ5MSwyOCBAQCBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdGFfcmVjYWxjX2FnZ3JlZ2F0ZXMpOwogCiB2b2lkIGllZWU4MDIxMV9zdGFfdXBkYXRlX3BlbmRpbmdfYWlydGltZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCQkJICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTggYWMsCi0JCQkJCSAgdTE2IHR4X2FpcnRpbWUsIGJvb2wgdHhfY29tcGxldGVkKQomIzQzOwkJCQkJICB1MTYgdHhfYWlydGltZSwgYm9vbCB0eF9jb21wbGV0ZWQsCiYjNDM7CQkJCQkgIGJvb2wgbWNhc3QpCiB7CiAJaW50IHR4X3BlbmRpbmc7CiAKIAlpZiAoIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KGxvY2FsLSZndDtody53aXBoeSwgTkw4MDIxMV9FWFRfRkVBVFVSRV9BUUwpKQogCQlyZXR1cm47CiAKJiM0MzsJaWYgKG1jYXN0KSB7CiYjNDM7CQlpZiAoIXR4X2NvbXBsZXRlZCkgewomIzQzOwkJCWF0b21pY19hZGQodHhfYWlydGltZSwgJmFtcDtsb2NhbC0mZ3Q7YXFsX21jX3BlbmRpbmdfYWlydGltZSk7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQomIzQzOwomIzQzOwkJdHhfcGVuZGluZyA9IGF0b21pY19zdWJfcmV0dXJuKHR4X2FpcnRpbWUsCiYjNDM7CQkJCQkgICAgICAgJmFtcDtsb2NhbC0mZ3Q7YXFsX21jX3BlbmRpbmdfYWlydGltZSk7CiYjNDM7CQlpZiAodHhfcGVuZGluZyAmbHQ7IDApCiYjNDM7CQkJYXRvbWljX2NtcHhjaGcoJmFtcDtsb2NhbC0mZ3Q7YXFsX21jX3BlbmRpbmdfYWlydGltZSwKJiM0MzsJCQkJICAgICAgIHR4X3BlbmRpbmcsIDApOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiAJaWYgKCF0eF9jb21wbGV0ZWQpIHsKIAkJaWYgKHN0YSkKIAkJCWF0b21pY19hZGQodHhfYWlydGltZSwKQEAgLTI3OTcsNiAmIzQzOzI4MTIsMjggQEAgdm9pZCBzdGFfc2V0X2FjY3VtdWxhdGVkX3JlbW92ZWRfbGlua3Nfc2luZm8oc3RydWN0IHN0YV9pbmZvICpzdGEsCiAJfQogfQogCiYjNDM7c3RhdGljIHUzMiBzdGFfZXN0aW1hdGVfZXhwZWN0ZWRfdGhyb3VnaHB1dChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKJiM0MzsJCQkJCSAgICBzdHJ1Y3QgcmF0ZV9pbmZvICpyaSwKJiM0MzsJCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gJmFtcDtzdGEtJmd0O3NkYXRhLSZndDtsb2NhbC0mZ3Q7aHc7CiYjNDM7CXN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjb25mOwomIzQzOwl1MzIgZHVyYXRpb247CiYjNDM7CXU4IGJhbmQ7CiYjNDM7CiYjNDM7CWNvbmYgPSByY3VfZGVyZWZlcmVuY2UoYnNzX2NvbmYtJmd0O2NoYW5jdHhfY29uZik7CiYjNDM7CWlmICghY29uZikKJiM0MzsJCXJldHVybiAwOwomIzQzOwliYW5kID0gY29uZi0mZ3Q7ZGVmLmNoYW4tJmd0O2JhbmQ7CiYjNDM7CiYjNDM7CWR1cmF0aW9uID0gaWVlZTgwMjExX3JhdGVfZXhwZWN0ZWRfdHhfYWlydGltZShodywgTlVMTCwgcmksIGJhbmQsIHRydWUsIDEwMjQpOwomIzQzOwlkdXJhdGlvbiAmIzQzOz0gZHVyYXRpb24gJmd0OyZndDsgNDsgLyogYWRkIGFzc3VtZWQgcGFja2V0IGVycm9yIHJhdGUgb2YgfjYlICovCiYjNDM7CWlmICghZHVyYXRpb24pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuICgoMTAyNCAqIFVTRUNfUEVSX1NFQykgLyBkdXJhdGlvbikgKiA4OwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHN0YV9zZXRfbGlua19zaW5mbyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKIAkJCSAgICAgICBzdHJ1Y3QgbGlua19zdGF0aW9uX2luZm8gKmxpbmtfc2luZm8sCiAJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmssCkBAIC0zMDExLDYgJiM0MzszMDQ4LDEwIEBAIHN0YXRpYyB2b2lkIHN0YV9zZXRfbGlua19zaW5mbyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKIAlsaW5rX3NpbmZvLSZndDtic3NfcGFyYW0uYmVhY29uX2ludGVydmFsID0gbGluay0mZ3Q7Y29uZi0mZ3Q7YmVhY29uX2ludDsKIAogCXRociA9IHN0YV9nZXRfZXhwZWN0ZWRfdGhyb3VnaHB1dChzdGEpOwomIzQzOwlpZiAoIXRociAmYW1wOyZhbXA7IChsaW5rX3NpbmZvLSZndDtmaWxsZWQgJmFtcDsgQklUX1VMTChOTDgwMjExX1NUQV9JTkZPX1RYX0JJVFJBVEUpKSkKJiM0MzsJCXRociA9IHN0YV9lc3RpbWF0ZV9leHBlY3RlZF90aHJvdWdocHV0KHN0YSwKJiM0MzsJCQkJCQkgICAgICAmYW1wO2xpbmtfc2luZm8tJmd0O3R4cmF0ZSwKJiM0MzsJCQkJCQkgICAgICBsaW5rLSZndDtjb25mKTsKIAogCWlmICh0aHIgIT0gMCkgewogCQlsaW5rX3NpbmZvLSZndDtmaWxsZWQgfD0KQEAgLTMyNjQsNiAmIzQzOzMzMDUsMTQgQEAgdm9pZCBzdGFfc2V0X3NpbmZvKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbywKIAlpZiAodGhyICE9IDApIHsKIAkJc2luZm8tJmd0O2ZpbGxlZCB8PSBCSVRfVUxMKE5MODAyMTFfU1RBX0lORk9fRVhQRUNURURfVEhST1VHSFBVVCk7CiAJCXNpbmZvLSZndDtleHBlY3RlZF90aHJvdWdocHV0ID0gdGhyOwomIzQzOwl9IGVsc2UgaWYgKCFzdGEtJmd0O3N0YS52YWxpZF9saW5rcyAmYW1wOyZhbXA7CiYjNDM7CQkgICAoc2luZm8tJmd0O2ZpbGxlZCAmYW1wOyBCSVRfVUxMKE5MODAyMTFfU1RBX0lORk9fVFhfQklUUkFURSkpKSB7CiYjNDM7CQl0aHIgPSBzdGFfZXN0aW1hdGVfZXhwZWN0ZWRfdGhyb3VnaHB1dChzdGEsICZhbXA7c2luZm8tJmd0O3R4cmF0ZSwKJiM0MzsJCQkJCQkgICAgICAmYW1wO3NkYXRhLSZndDt2aWYuYnNzX2NvbmYpOwomIzQzOwkJaWYgKHRocikgewomIzQzOwkJCXNpbmZvLSZndDtmaWxsZWQgfD0gQklUX1VMTChOTDgwMjExX1NUQV9JTkZPX0VYUEVDVEVEX1RIUk9VR0hQVVQpOwomIzQzOwkJCXNpbmZvLSZndDtleHBlY3RlZF90aHJvdWdocHV0ID0gdGhyOwomIzQzOwkJfQogCX0KIAogCWlmICghKHNpbmZvLSZndDtmaWxsZWQgJmFtcDsgQklUX1VMTChOTDgwMjExX1NUQV9JTkZPX0FDS19TSUdOQUwpKSAmYW1wOyZhbXA7CkBAIC0zMjg0LDYgJiM0MzszMzMzLDcgQEAgdm9pZCBzdGFfc2V0X3NpbmZvKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbywKIAlpZiAoc3RhLSZndDtzdGEudmFsaWRfbGlua3MpIHsKIAkJc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbms7CiAJCXN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YTsKJiM0MzsJCXUzMiBlc3RfdGhyID0gMDsKIAkJaW50IGxpbmtfaWQ7CiAKIAkJc2luZm8tJmd0O21sb19wYXJhbXNfdmFsaWQgPSB0cnVlOwpAQCAtMzI5NSwxNyAmIzQzOzMzNDUsMjUgQEAgdm9pZCBzdGFfc2V0X3NpbmZvKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbywKIAkJc2luZm8tJmd0O3ZhbGlkX2xpbmtzID0gc3RhLSZndDtzdGEudmFsaWRfbGlua3M7CiAKIAkJZm9yX2VhY2hfdmFsaWRfbGluayhzaW5mbywgbGlua19pZCkgewomIzQzOwkJCXN0cnVjdCBsaW5rX3N0YXRpb25faW5mbyAqbGlua19zaW5mbyA9IHNpbmZvLSZndDtsaW5rc1tsaW5rX2lkXTsKJiM0MzsKIAkJCWxpbmtfc3RhID0gd2lwaHlfZGVyZWZlcmVuY2Uoc3RhLSZndDtsb2NhbC0mZ3Q7aHcud2lwaHksCiAJCQkJCQkgICAgIHN0YS0mZ3Q7bGlua1tsaW5rX2lkXSk7CiAJCQlsaW5rID0gd2lwaHlfZGVyZWZlcmVuY2Uoc2RhdGEtJmd0O2xvY2FsLSZndDtody53aXBoeSwKIAkJCQkJCSBzZGF0YS0mZ3Q7bGlua1tsaW5rX2lkXSk7CiAKLQkJCWlmICghbGlua19zdGEgfHwgIXNpbmZvLSZndDtsaW5rc1tsaW5rX2lkXSB8fCAhbGluaykgewomIzQzOwkJCWlmICghbGlua19zdGEgfHwgIWxpbmtfc2luZm8gfHwgIWxpbmspIHsKIAkJCQlzaW5mby0mZ3Q7dmFsaWRfbGlua3MgJmFtcDs9IH5CSVQobGlua19pZCk7CiAJCQkJY29udGludWU7CiAJCQl9Ci0JCQlzdGFfc2V0X2xpbmtfc2luZm8oc3RhLCBzaW5mby0mZ3Q7bGlua3NbbGlua19pZF0sCi0JCQkJCSAgIGxpbmssIHRpZHN0YXRzKTsKJiM0MzsJCQlzdGFfc2V0X2xpbmtfc2luZm8oc3RhLCBsaW5rX3NpbmZvLCBsaW5rLCB0aWRzdGF0cyk7CiYjNDM7CQkJaWYgKCF0aHIgJmFtcDsmYW1wOwomIzQzOwkJCSAgICAobGlua19zaW5mby0mZ3Q7ZmlsbGVkICZhbXA7IEJJVF9VTEwoTkw4MDIxMV9TVEFfSU5GT19FWFBFQ1RFRF9USFJPVUdIUFVUKSkpCiYjNDM7CQkJCWVzdF90aHIgJiM0Mzs9IGxpbmtfc2luZm8tJmd0O2V4cGVjdGVkX3Rocm91Z2hwdXQ7CiYjNDM7CQl9CiYjNDM7CQlpZiAoZXN0X3RocikgewomIzQzOwkJCXNpbmZvLSZndDtmaWxsZWQgfD0gQklUX1VMTChOTDgwMjExX1NUQV9JTkZPX0VYUEVDVEVEX1RIUk9VR0hQVVQpOwomIzQzOwkJCXNpbmZvLSZndDtleHBlY3RlZF90aHJvdWdocHV0ID0gZXN0X3RocjsKIAkJfQogCX0KIH0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmgKaW5kZXggNWRhMzE0MmQ4NTE2ZWYuLmVlMGQzMjg3N2M1YjQ3IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uaApAQCAtMTQ3LDcgJiM0MzsxNDcsOCBAQCBzdHJ1Y3QgYWlydGltZV9pbmZvIHsKIAogdm9pZCBpZWVlODAyMTFfc3RhX3VwZGF0ZV9wZW5kaW5nX2FpcnRpbWUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkJCSAgc3RydWN0IHN0YV9pbmZvICpzdGEsIHU4IGFjLAotCQkJCQkgIHUxNiB0eF9haXJ0aW1lLCBib29sIHR4X2NvbXBsZXRlZCk7CiYjNDM7CQkJCQkgIHUxNiB0eF9haXJ0aW1lLCBib29sIHR4X2NvbXBsZXRlZCwKJiM0MzsJCQkJCSAgYm9vbCBtY2FzdCk7CiAKIHN0cnVjdCBzdGFfaW5mbzsKIApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3N0YXR1cy5jIGIvbmV0L21hYzgwMjExL3N0YXR1cy5jCmluZGV4IGRkMWRiYmEwNjgzOGU1Li5jNzY0ZTFhOTU0ODY5NiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3N0YXR1cy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9zdGF0dXMuYwpAQCAtNzc0LDcgJiM0Mzs3NzQsNyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcmVwb3J0X3VzZWRfc2tiKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQlpZWVlODAyMTFfc3RhX3VwZGF0ZV9wZW5kaW5nX2FpcnRpbWUobG9jYWwsIHN0YSwKIAkJCQkJCSAgICAgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYiksCiAJCQkJCQkgICAgIHR4X3RpbWVfZXN0LAotCQkJCQkJICAgICB0cnVlKTsKJiM0MzsJCQkJCQkgICAgIHRydWUsIGluZm8tJmd0O3R4X3RpbWVfbWMpOwogCQlyY3VfcmVhZF91bmxvY2soKTsKIAl9CiAKQEAgLTExODYsMTAgJiM0MzsxMTg2LDExIEBAIHZvaWQgaWVlZTgwMjExX3R4X3N0YXR1c19leHQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCS8qIERvIHRoaXMgaGVyZSB0byBhdm9pZCB0aGUgZXhwZW5zaXZlIGxvb2t1cCBvZiB0aGUgc3RhCiAJCSAqIGluIGllZWU4MDIxMV9yZXBvcnRfdXNlZF9za2IoKS4KIAkJICovCiYjNDM7CQlib29sIG1jYXN0ID0gSUVFRTgwMjExX1NLQl9DQihza2IpLSZndDt0eF90aW1lX21jOwogCQlpZWVlODAyMTFfc3RhX3VwZGF0ZV9wZW5kaW5nX2FpcnRpbWUobG9jYWwsIHN0YSwKIAkJCQkJCSAgICAgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYiksCiAJCQkJCQkgICAgIHR4X3RpbWVfZXN0LAotCQkJCQkJICAgICB0cnVlKTsKJiM0MzsJCQkJCQkgICAgIHRydWUsIG1jYXN0KTsKIAkJaWVlZTgwMjExX2luZm9fc2V0X3R4X3RpbWVfZXN0KElFRUU4MDIxMV9TS0JfQ0Ioc2tiKSwgMCk7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jCmluZGV4IDkxYjE0MTEyZTI0ZjA4Li44NWFmZjM3ODE5MjQyYSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3R4LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL3R4LmMKQEAgLTQwNTQsMjAgJiM0Mzs0MDU0LDIwIEBAIHN0cnVjdCBza19idWZmICppZWVlODAyMTFfdHhfZGVxdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIGVuY2FwX291dDoKIAlpbmZvLSZndDtjb250cm9sLnZpZiA9IHZpZjsKIAotCWlmICh0eC5zdGEgJmFtcDsmYW1wOwotCSAgICB3aXBoeV9leHRfZmVhdHVyZV9pc3NldChsb2NhbC0mZ3Q7aHcud2lwaHksIE5MODAyMTFfRVhUX0ZFQVRVUkVfQVFMKSkgewotCQlib29sIGFtcGR1ID0gdHhxLSZndDthYyAhPSBJRUVFODAyMTFfQUNfVk87CiYjNDM7CWlmICh3aXBoeV9leHRfZmVhdHVyZV9pc3NldChsb2NhbC0mZ3Q7aHcud2lwaHksIE5MODAyMTFfRVhUX0ZFQVRVUkVfQVFMKSkgewomIzQzOwkJYm9vbCBhbXBkdSA9IHR4cS0mZ3Q7c3RhICZhbXA7JmFtcDsgdHhxLSZndDthYyAhPSBJRUVFODAyMTFfQUNfVk87CiAJCXUzMiBhaXJ0aW1lOwogCiAJCWFpcnRpbWUgPSBpZWVlODAyMTFfY2FsY19leHBlY3RlZF90eF9haXJ0aW1lKGh3LCB2aWYsIHR4cS0mZ3Q7c3RhLAogCQkJCQkJCSAgICAgc2tiLSZndDtsZW4sIGFtcGR1KTsKLQkJaWYgKGFpcnRpbWUpIHsKLQkJCWFpcnRpbWUgPSBpZWVlODAyMTFfaW5mb19zZXRfdHhfdGltZV9lc3QoaW5mbywgYWlydGltZSk7Ci0JCQlpZWVlODAyMTFfc3RhX3VwZGF0ZV9wZW5kaW5nX2FpcnRpbWUobG9jYWwsIHR4LnN0YSwKLQkJCQkJCQkgICAgIHR4cS0mZ3Q7YWMsCi0JCQkJCQkJICAgICBhaXJ0aW1lLAotCQkJCQkJCSAgICAgZmFsc2UpOwotCQl9CiYjNDM7CQlpZiAoIWFpcnRpbWUpCiYjNDM7CQkJcmV0dXJuIHNrYjsKJiM0MzsKJiM0MzsJCWFpcnRpbWUgPSBpZWVlODAyMTFfaW5mb19zZXRfdHhfdGltZV9lc3QoaW5mbywgYWlydGltZSk7CiYjNDM7CQlpbmZvLSZndDt0eF90aW1lX21jID0gIXR4LnN0YTsKJiM0MzsJCWllZWU4MDIxMV9zdGFfdXBkYXRlX3BlbmRpbmdfYWlydGltZShsb2NhbCwgdHguc3RhLCB0eHEtJmd0O2FjLAomIzQzOwkJCQkJCSAgICAgYWlydGltZSwgZmFsc2UsCiYjNDM7CQkJCQkJICAgICBpbmZvLSZndDt0eF90aW1lX21jKTsKIAl9CiAKIAlyZXR1cm4gc2tiOwpAQCAtNDExOSw2ICYjNDM7NDExOSw3IEBAIHN0cnVjdCBpZWVlODAyMTFfdHhxICppZWVlODAyMTFfbmV4dF90eHEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKQogCXN0cnVjdCBpZWVlODAyMTFfdHhxICpyZXQgPSBOVUxMOwogCXN0cnVjdCB0eHFfaW5mbyAqdHhxaSA9IE5VTEwsICpoZWFkID0gTlVMTDsKIAlib29sIGZvdW5kX2VsaWdpYmxlX3R4cSA9IGZhbHNlOwomIzQzOwlib29sIGFxbF9jaGVjazsKIAogCXNwaW5fbG9ja19iaCgmYW1wO2xvY2FsLSZndDthY3RpdmVfdHhxX2xvY2tbYWNdKTsKIApAQCAtNDE0MiwyNiAmIzQzOzQxNDMsMjggQEAgc3RydWN0IGllZWU4MDIxMV90eHEgKmllZWU4MDIxMV9uZXh0X3R4cShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggYWMpCiAJaWYgKCFoZWFkKQogCQloZWFkID0gdHhxaTsKIAomIzQzOwlhcWxfY2hlY2sgPSBpZWVlODAyMTFfdHhxX2FpcnRpbWVfY2hlY2soaHcsICZhbXA7dHhxaS0mZ3Q7dHhxKTsKJiM0MzsJaWYgKGFxbF9jaGVjaykKJiM0MzsJCWZvdW5kX2VsaWdpYmxlX3R4cSA9IHRydWU7CiYjNDM7CiAJaWYgKHR4cWktJmd0O3R4cS5zdGEpIHsKIAkJc3RydWN0IHN0YV9pbmZvICpzdGEgPSBjb250YWluZXJfb2YodHhxaS0mZ3Q7dHhxLnN0YSwKIAkJCQkJCSAgICBzdHJ1Y3Qgc3RhX2luZm8sIHN0YSk7Ci0JCWJvb2wgYXFsX2NoZWNrID0gaWVlZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrKGh3LCAmYW1wO3R4cWktJmd0O3R4cSk7Ci0JCXMzMiBkZWZpY2l0ID0gaWVlZTgwMjExX3N0YV9kZWZpY2l0KHN0YSwgdHhxaS0mZ3Q7dHhxLmFjKTsKIAotCQlpZiAoYXFsX2NoZWNrKQotCQkJZm91bmRfZWxpZ2libGVfdHhxID0gdHJ1ZTsKLQotCQlpZiAoZGVmaWNpdCAmbHQ7IDApCiYjNDM7CQlpZiAoaWVlZTgwMjExX3N0YV9kZWZpY2l0KHN0YSwgdHhxaS0mZ3Q7dHhxLmFjKSAmbHQ7IDApIHsKIAkJCXN0YS0mZ3Q7YWlydGltZVt0eHFpLSZndDt0eHEuYWNdLmRlZmljaXQgJiM0Mzs9CiAJCQkJc3RhLSZndDthaXJ0aW1lX3dlaWdodDsKIAotCQlpZiAoZGVmaWNpdCAmbHQ7IDAgfHwgIWFxbF9jaGVjaykgewotCQkJbGlzdF9tb3ZlX3RhaWwoJmFtcDt0eHFpLSZndDtzY2hlZHVsZV9vcmRlciwKLQkJCQkgICAgICAgJmFtcDtsb2NhbC0mZ3Q7YWN0aXZlX3R4cXNbdHhxaS0mZ3Q7dHhxLmFjXSk7Ci0JCQlnb3RvIGJlZ2luOwomIzQzOwkJCWFxbF9jaGVjayA9IGZhbHNlOwogCQl9CiAJfQogCiYjNDM7CWlmICghYXFsX2NoZWNrKSB7CiYjNDM7CQlsaXN0X21vdmVfdGFpbCgmYW1wO3R4cWktJmd0O3NjaGVkdWxlX29yZGVyLAomIzQzOwkJCQkgICAmYW1wO2xvY2FsLSZndDthY3RpdmVfdHhxc1t0eHFpLSZndDt0eHEuYWNdKTsKJiM0MzsJCWdvdG8gYmVnaW47CiYjNDM7CX0KJiM0MzsKIAlpZiAodHhxaS0mZ3Q7c2NoZWR1bGVfcm91bmQgPT0gbG9jYWwtJmd0O3NjaGVkdWxlX3JvdW5kW2FjXSkKIAkJZ290byBvdXQ7CiAKQEAgLTQyMjgsNyAmIzQzOzQyMzEsOCBAQCBib29sIGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVjayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJcmV0dXJuIHRydWU7CiAKIAlpZiAoIXR4cS0mZ3Q7c3RhKQotCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCXJldHVybiBhdG9taWNfcmVhZCgmYW1wO2xvY2FsLSZndDthcWxfbWNfcGVuZGluZ19haXJ0aW1lKSAmbHQ7CiYjNDM7CQkgICAgICAgbG9jYWwtJmd0O2FxbF90eHFfbGltaXRfbWM7CiAKIAlpZiAodW5saWtlbHkodHhxLSZndDt0aWQgPT0gSUVFRTgwMjExX05VTV9USURTKSkKIAkJcmV0dXJuIHRydWU7CkBAIC00MjQ4LDYgJiM0Mzs0MjUyLDI0IEBAIGJvb2wgaWVlZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdHhxX2FpcnRpbWVfY2hlY2spOwogCiYjNDM7dTMyIGllZWU4MDIxMV90eHFfYXFsX3BlbmRpbmcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiYjNDM7CQkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eHEgKnR4cSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwomIzQzOwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KHR4cS0mZ3Q7dGlkID09IElFRUU4MDIxMV9OVU1fVElEUykpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKCF0eHEtJmd0O3N0YSkKJiM0MzsJCXJldHVybiBhdG9taWNfcmVhZCgmYW1wO2xvY2FsLSZndDthcWxfbWNfcGVuZGluZ19haXJ0aW1lKTsKJiM0MzsKJiM0MzsJc3RhID0gY29udGFpbmVyX29mKHR4cS0mZ3Q7c3RhLCBzdHJ1Y3Qgc3RhX2luZm8sIHN0YSk7CiYjNDM7CiYjNDM7CXJldHVybiBhdG9taWNfcmVhZCgmYW1wO3N0YS0mZ3Q7YWlydGltZVt0eHEtJmd0O2FjXS5hcWxfdHhfcGVuZGluZyk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3R4cV9hcWxfcGVuZGluZyk7CiYjNDM7CiBzdGF0aWMgYm9vbAogaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9haXJ0aW1lX2NoZWNrKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1OCBhYykKIHsKQEAgLTQyNzcsMTUgJiM0Mzs0Mjk5LDE1IEBAIGJvb2wgaWVlZTgwMjExX3R4cV9tYXlfdHJhbnNtaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAKIAlzcGluX2xvY2tfYmgoJmFtcDtsb2NhbC0mZ3Q7YWN0aXZlX3R4cV9sb2NrW2FjXSk7CiAKLQlpZiAoIXR4cWktJmd0O3R4cS5zdGEpCi0JCWdvdG8gb3V0OwotCiAJaWYgKGxpc3RfZW1wdHkoJmFtcDt0eHFpLSZndDtzY2hlZHVsZV9vcmRlcikpCiAJCWdvdG8gb3V0OwogCiAJaWYgKCFpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2FpcnRpbWVfY2hlY2sobG9jYWwsIGFjKSkKIAkJZ290byBvdXQ7CiAKJiM0MzsJaWYgKCF0eHFpLSZndDt0eHEuc3RhKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGl0ZXIsIHRtcCwgJmFtcDtsb2NhbC0mZ3Q7YWN0aXZlX3R4cXNbYWNdLAogCQkJCSBzY2hlZHVsZV9vcmRlcikgewogCQlpZiAoaXRlciA9PSB0eHFpKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDUxMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDMxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIG1hYzgwMjExIFBhdGNoIGZvciBBUUwgYW5kIFRocm91Z2hwdXQgTW9kaWZpY2F0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgbWFraW5nIHNvbWUgaW50ZXJlc3RpbmcgY2hhbmdlcyB0byB0aGUgYG1hYzgwMjExYCB3aXJlbGVzcyBzdGFjay4gTG9va3MgbGlrZSBpdCYjMzk7cyBhZGRpbmcgQWlydGltZSBRdWV1ZSBMaW1pdCAoQVFMKSBzdXBwb3J0LCBzcGVjaWZpY2FsbHkgZm9yIG11bHRpY2FzdCB0cmFmZmljIOKAkyB0aGF0JiMzOTtzIGEga2V5IGFyZWEgdG8gb3B0aW1pemUuIEl0JiMzOTtzIGFsc28gbW9kaWZ5aW5nIGhvdyB0aGUgZXhwZWN0ZWQgdGhyb3VnaHB1dCBmb3Igc3RhdGlvbnMgaXMgY2FsY3VsYXRlZC4gVGhhdCYjMzk7cyBpbnRyaWd1aW5nOyBnZXR0aW5nIHRob3NlIHRocm91Z2hwdXQgZXN0aW1hdGlvbnMgcmlnaHQgaXMgY3J1Y2lhbCBmb3IgYWlydGltZSBmYWlybmVzcyBhbmQgb3ZlcmFsbCBwZXJmb3JtYW5jZS4KCkkgc2VlIGl0IHRvdWNoZXMgcXVpdGUgYSBmZXcgY29yZSBmaWxlczogYGNmZzgwMjExLmhgLCBgbWFjODAyMTEuaGAsIHRoZSBhaXJ0aW1lIGltcGxlbWVudGF0aW9uIChgYWlydGltZS5jYCksIGRlYnVnIGZhY2lsaXRpZXMsIGludGVybmFsIElFRUU4MDIxMSBzdHJ1Y3R1cmVzLCB0aGUgbWFpbiBtb2R1bGUgKGBtYWluLmNgKSwgc3RhdGlvbiBpbmZvcm1hdGlvbiBtYW5hZ2VtZW50IChgc3RhX2luZm8uY2AsIGBzdGFfaW5mby5oYCksIHN0YXR1cyB1cGRhdGVzLCBhbmQgdGhlIHRyYW5zbWl0IHBhdGggKGB0eC5jYCkuIFRoYXQgaW5kaWNhdGVzIGl04oCZcyByZWFsbHkgZ2V0dGluZyBpbnRvIHRoZSBoZWFydCBvZiB0aGUgc3RhY2suCgpOb3csIEkgbmVlZCB0byB2ZXJpZnkgaXRzIHJlYWNoYWJpbGl0eSBhbmQgZnVuY3Rpb25hbGl0eS4gU2luY2UgaXQmIzM5O3MgbW9kaWZ5aW5nIHRoZSBjb3JlIGxvZ2ljIHJlbGF0ZWQgdG8gYWlydGltZSBjYWxjdWxhdGlvbnMsIHRyYW5zbWlzc2lvbiBxdWV1ZSAodHhxKSBhaXJ0aW1lIGNoZWNrcywgYW5kIHN0YXRpb24gdGhyb3VnaHB1dCwgSSBuZWVkIHRvIGtub3cgaG93IHRvIHRlc3QgdGhpcy4gSSB0aGluayBJIGNhbiB1c2UgYG1hYzgwMjExX2h3c2ltYCB0byByZWFjaCBpdCwgd2hpY2ggaXMgaWRlYWwgZm9yIHRoaXMga2luZCBvZiBsb3ctbGV2ZWwgbW9kaWZpY2F0aW9uLgoKQmVmb3JlIEkgZ28gZnVydGhlciwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gTmF0dXJhbGx5LCBgTUFDODAyMTFgIGl0c2VsZiBpcyBhIGdpdmVuLiBJIHNob3VsZCBzZWFyY2ggdGhlIEtjb25maWcgZmlsZXMgZm9yIGFueSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBBUUwgc3BlY2lmaWNhbGx5LCBwYXJ0aWN1bGFybHkgYE5MODAyMTFfRVhUX0ZFQVRVUkVfQVFMYCBvciBqdXN0IGBBUUxgIHRvIG1ha2Ugc3VyZSB0aGUgZmVhdHVyZSBpcyBwcm9wZXJseSBlbmFibGVkLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0FRTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI1OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6CgoqKkRpZ2dpbmcgaW50byBtYWM4MDIxMSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGlzIHByb2JsZW0sIEkgd2FudCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3Qgb3Zlcmxvb2tpbmcgc29tZXRoaW5nIG9idmlvdXMuIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGdvaW5nIHRvIGRvIGlzIHF1aWNrbHkgc2NhbiBteSBtZW50YWwgZGF0YWJhc2UuIFRoZXJlJiMzOTtzIGEgZ29vZCBjaGFuY2UgSSBhbHJlYWR5IGtub3cgdGhpcywgYnV0IGxldCYjMzk7cyBqdXN0IG1ha2UgYWJzb2x1dGVseSBjZXJ0YWluLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHNwZWNpZmljYWxseSBjaGVjayBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byAqbWFjODAyMTEqIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBiZSBtZXRob2RpY2FsIGhlcmUuIEFyZSB0aGVyZSBhbnkgY3VzdG9tIGRpcmVjdGl2ZXMsIG1vZHVsZSBwYXJhbWV0ZXJzLCBvciBxdWlya3MgdGhhdCBtaWdodCBiZSBpbmZsdWVuY2luZyB0aGUgYmVoYXZpb3IgSSYjMzk7bSBzZWVpbmc/IEkmIzM5O20gdGFsa2luZyBhYm91dCBhbnl0aGluZyB0aGF0IGNvdWxkIGJlIGEgc3BlY2lmaWMsIHRhcmdldGVkIHNldHRpbmcgZm9yIHRoYXQgc3Vic3lzdGVtLCBiZWZvcmUgSSBzdGFydCBsb29raW5nIGF0IG1vcmUgZ2VuZXJpYyBrZXJuZWwgb3Igc3lzdGVtLXdpZGUgc2V0dGluZ3MuIEl0JiMzOTtzIG9mdGVuIHRoZSBjYXNlIHRoYXQgc29tZSBzdWJ0bGUgY29uZmlndXJhdGlvbiBpcyBqdXN0IG92ZXJsb29rZWQgaW4gdGhlIG5vaXNlLiBJIHdvdWxkIGhhdGUgdG8gc3BlbmQgbW9yZSB0aGFuIGEgbWludXRlIG9uIGEgY29tcGxleCBzb2x1dGlvbiBvbmx5IHRvIHJlYWxpc2UgdGhhdCBhIHNpbXBsZSBjb25maWcgd2FzIG1pc3NlZC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIHNvbWV0aGluZyBiYXNpYyB0aGF0JiMzOTtzIHNwZWNpZmljIHRvIHRoZSBtYWM4MDIxMSBkcml2ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1BQzgwMjExJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI6Y29uZmlnIE1BQzgwMjExXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBJRUVFIDgwMi4xMSBOZXR3b3JraW5nIFN0YWNrIChtYWM4MDIxMSlcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz0xOT1pZiBNQUM4MDIxMSAhPSBuXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIxOmNvbmZpZyBNQUM4MDIxMV9IQVNfUkNcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyLVx0Ym9vbFxubmV0L21hYzgwMjExL0tjb25maWctMjMtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNDpjb25maWcgTUFDODAyMTFfUkNfTUlOU1RSRUxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1LVx0Ym9vbCBcJiMzNDtNaW5zdHJlbFwmIzM0OyBpZiBFWFBFUlRcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz0zMT1jaG9pY2Vcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00MC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjQxOmNvbmZpZyBNQUM4MDIxMV9SQ19ERUZBVUxUX01JTlNUUkVMXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00Mi1cdGJvb2wgXCYjMzQ7TWluc3RyZWxcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz00OD1lbmRjaG9pY2Vcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQ5LVxubmV0L21hYzgwMjExL0tjb25maWc6NTA6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTUxLVx0c3RyaW5nXG4tLVxubmV0L21hYzgwMjExL0tjb25maWc9NTc9Y29tbWVudCBcJiMzNDtTb21lIHdpcmVsZXNzIGRyaXZlcnMgcmVxdWlyZSBhIHJhdGUgY29udHJvbCBhbGdvcml0aG1cJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01OS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjYwOmNvbmZpZyBNQUM4MDIxMV9LVU5JVF9URVNUXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02MS1cdHRyaXN0YXRlIFwmIzM0O0tVbml0IHRlc3RzIGZvciBtYWM4MDIxMVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubmV0L21hYzgwMjExL0tjb25maWctNjktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3MDpjb25maWcgTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL0tjb25maWctNzEtXHRib29sIFwmIzM0O0VuYWJsZSBtYWM4MDIxMSBtZXNoIG5ldHdvcmtpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTc4LVxubmV0L21hYzgwMjExL0tjb25maWc6Nzk6Y29uZmlnIE1BQzgwMjExX0xFRFNcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTgwLVx0Ym9vbCBcJiMzNDtFbmFibGUgTEVEIHRyaWdnZXJzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctODctXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo4ODpjb25maWcgTUFDODAyMTFfREVCVUdGU1xubmV0L21hYzgwMjExL0tjb25maWctODktXHRib29sIFwmIzM0O0V4cG9ydCBtYWM4MDIxMSBpbnRlcm5hbHMgaW4gRGVidWdGU1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTk2LVxubmV0L21hYzgwMjExL0tjb25maWc6OTc6Y29uZmlnIE1BQzgwMjExX01FU1NBR0VfVFJBQ0lOR1xubmV0L21hYzgwMjExL0tjb25maWctOTgtXHRib29sIFwmIzM0O1RyYWNlIGFsbCBtYWM4MDIxMSBkZWJ1ZyBtZXNzYWdlc1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEwOS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExMDptZW51Y29uZmlnIE1BQzgwMjExX0RFQlVHX01FTlVcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExMS1cdGJvb2wgXCYjMzQ7U2VsZWN0IG1hYzgwMjExIGRlYnVnZ2luZyBmZWF0dXJlc1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExNS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExNjpjb25maWcgTUFDODAyMTFfTk9JTkxJTkVcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExNy1cdGJvb2wgXCYjMzQ7RG8gbm90IGlubGluZSBUWC9SWCBoYW5kbGVyc1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEzMS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjEzMjpjb25maWcgTUFDODAyMTFfVkVSQk9TRV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTMzLVx0Ym9vbCBcJiMzNDtWZXJib3NlIGRlYnVnZ2luZyBvdXRwdXRcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNDItXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNDM6Y29uZmlnIE1BQzgwMjExX01MTUVfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0NC1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtYW5hZ2VkIE1MTUUgb3V0cHV0XCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTUzLVxubmV0L21hYzgwMjExL0tjb25maWc6MTU0OmNvbmZpZyBNQUM4MDIxMV9TVEFfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE1NS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBzdGF0aW9uIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE2Mi1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE2Mzpjb25maWcgTUFDODAyMTFfSFRfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE2NC1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBIVCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNzQtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNzU6Y29uZmlnIE1BQzgwMjExX09DQl9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTc2LVx0Ym9vbCBcJiMzNDtWZXJib3NlIE9DQiBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODUtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxODY6Y29uZmlnIE1BQzgwMjExX0lCU1NfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4Ny1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBJQlNTIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE5Ni1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE5Nzpjb25maWcgTUFDODAyMTFfUFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE5OC1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBwb3dlcnNhdmUgbW9kZSBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMDgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMDk6Y29uZmlnIE1BQzgwMjExX01QTF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjEwLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggcGVlciBsaW5rIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyMS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIyMjpjb25maWcgTUFDODAyMTFfTVBBVEhfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyMy1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHBhdGggZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjM0LVxubmV0L21hYzgwMjExL0tjb25maWc6MjM1OmNvbmZpZyBNQUM4MDIxMV9NSFdNUF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjM2LVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggSFdNUCByb3V0aW5nIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0Ny1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0ODpjb25maWcgTUFDODAyMTFfTUVTSF9TWU5DX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNDktXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBzeW5jaHJvbml6YXRpb24gZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjU4LVxubmV0L21hYzgwMjExL0tjb25maWc6MjU5OmNvbmZpZyBNQUM4MDIxMV9NRVNIX0NTQV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjYwLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggY2hhbm5lbCBzd2l0Y2ggZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjY5LVxubmV0L21hYzgwMjExL0tjb25maWc6MjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIX1BTX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNzEtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBwb3dlcnNhdmUgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjgwLVxubmV0L21hYzgwMjExL0tjb25maWc6MjgxOmNvbmZpZyBNQUM4MDIxMV9URExTX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODItXHRib29sIFwmIzM0O1ZlcmJvc2UgVERMUyBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yOTItXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOTM6Y29uZmlnIE1BQzgwMjExX0RFQlVHX0NPVU5URVJTXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yOTQtXHRib29sIFwmIzM0O0V4dHJhIHN0YXRpc3RpY3MgZm9yIFRYL1JYIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMwNy1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjMwODpjb25maWcgTUFDODAyMTFfU1RBX0hBU0hfTUFYX1NJWkVcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMwOS1cdGludCBcJiMzNDtTdGF0aW9uIGhhc2ggdGFibGUgbWF4aW11bSBzaXplXCYjMzQ7IGlmIE1BQzgwMjExX0RFQlVHX01FTlVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc0NQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDExNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1hYzgwMjExIEFpcnRpbWUgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgY2FuIHNlZSBpdCYjMzk7cyB0b3VjaGluZyBzb21lIGNyaXRpY2FsIHBhcnRzIG9mIHRoZSBtYWM4MDIxMSBhaXJ0aW1lIG1hbmFnZW1lbnQgc3lzdGVtLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIG1vZGlmeWluZyBgaWVlZTgwMjExX3JhdGVfZXhwZWN0ZWRfdHhfYWlydGltZWAsIGBpZWVlODAyMTFfY2FsY19leHBlY3RlZF90eF9haXJ0aW1lYCwgYGllZWU4MDIxMV9zdGFfdXBkYXRlX3BlbmRpbmdfYWlydGltZWAsIGBpZWVlODAyMTFfdHhxX2FpcnRpbWVfY2hlY2tgLCBhbmQgYGllZWU4MDIxMV90eHFfYXFsX3BlbmRpbmdgLiBUaGVzZSBhcmUgYWxsIGNvcmUgZnVuY3Rpb25zIOKAkyBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MsIHJlYWxseSDigJMgd2l0aGluIHRoZSBmcmFtZXdvcmssIGVzcGVjaWFsbHkgYXMgdGhleSByZWxhdGUgdG8gY2FsY3VsYXRpbmcgYW5kIG1hbmFnaW5nIHRyYW5zbWlzc2lvbiBhaXJ0aW1lIGZvciA4MDIuMTEgZnJhbWVzLiBUaGUgY2hhbmdlcyBoZXJlIGNvdWxkIGJlIHByZXR0eSBpbXBhY3RmdWwsIGFmZmVjdGluZyBzY2hlZHVsaW5nLCBmYWlybmVzcywgYW5kIG92ZXJhbGwgcGVyZm9ybWFuY2UuIFRpbWUgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kICp3aHkqIHRoZXNlIHNwZWNpZmljIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdGFyZ2V0ZWQuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGtleSBmdW5jdGlvbnMgc28gSSBjYW4gcHJvcGVybHkgYXNzZXNzIHRoZSBpbXBsaWNhdGlvbiBvZiB0aGUgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWVlZTgwMjExX3JhdGVfZXhwZWN0ZWRfdHhfYWlydGltZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL2FpcnRpbWUuYz03NTQ9RVhQT1JUX1NZTUJPTF9HUEwoaWVlZTgwMjExX2NhbGNfdHhfYWlydGltZSk7XG5uZXQvbWFjODAyMTEvYWlydGltZS5jLTc1NS1cbm5ldC9tYWM4MDIxMS9haXJ0aW1lLmM6NzU2OnUzMiBpZWVlODAyMTFfcmF0ZV9leHBlY3RlZF90eF9haXJ0aW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxubmV0L21hYzgwMjExL2FpcnRpbWUuYy03NTctXHRcdFx0XHQgICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICp0eF9yYXRlLFxuLS1cbm5ldC9tYWM4MDIxMS9haXJ0aW1lLmM9ODAzPXUzMiBpZWVlODAyMTFfY2FsY19leHBlY3RlZF90eF9haXJ0aW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbm5ldC9tYWM4MDIxMS9haXJ0aW1lLmMtODI4LVxubmV0L21hYzgwMjExL2FpcnRpbWUuYzo4Mjk6XHRcdGR1cmF0aW9uID0gaWVlZTgwMjExX3JhdGVfZXhwZWN0ZWRfdHhfYWlydGltZShodywgdHhfcmF0ZSwgcmksXG5uZXQvbWFjODAyMTEvYWlydGltZS5jLTgzMC1cdFx0XHRcdFx0XHRcdCAgICAgIGJhbmQsIHRydWUsIGxlbik7XG4tLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9Mjk0Mj1leHRlcm4gY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGllZWU4MDIxMV9ldGh0b29sX29wcztcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTI5NDMtXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoyOTQ0OnUzMiBpZWVlODAyMTFfcmF0ZV9leHBlY3RlZF90eF9haXJ0aW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjk0NS1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnR4X3JhdGUsXG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9MjgxNT1zdGF0aWMgdTMyIHN0YV9lc3RpbWF0ZV9leHBlY3RlZF90aHJvdWdocHV0KHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTI4MjgtXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzoyODI5Olx0ZHVyYXRpb24gPSBpZWVlODAyMTFfcmF0ZV9leHBlY3RlZF90eF9haXJ0aW1lKGh3LCBOVUxMLCByaSwgYmFuZCwgdHJ1ZSwgMTAyNCk7XG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0yODMwLVx0ZHVyYXRpb24gJiM0Mzs9IGR1cmF0aW9uIFx1MDAzZVx1MDAzZSA0OyAvKiBhZGQgYXNzdW1lZCBwYWNrZXQgZXJyb3IgcmF0ZSBvZiB+NiUgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDgwMAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIGBpZWVlODAyMTFfdHhxX2FxbF9wZW5kaW5nYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBpZWVlODAyMTFfdHhxX2FxbF9wZW5kaW5nYC4gVGhhdCBmdW5jdGlvbiBuYW1lIGl0c2VsZiBpcyBhIHByZXR0eSBiaWcgY2x1ZS4gSXQmIzM5O3Mgb2J2aW91c2x5IHJlbGF0ZWQgdG8gdGhlIDgwMi4xMSB0cmFuc21pdCBxdWV1ZSBhbmQgbGlrZWx5IGNvbm5lY3RlZCB0byBBY3RpdmUgUXVldWUgTWFuYWdlbWVudCAoQVFNKS4gSSYjMzk7bSBhc3N1bWluZyB3ZSYjMzk7cmUgbG9va2luZyBhdCBwZW5kaW5nIHBhY2tldHMsIHRoZSBvbmVzIHdhaXRpbmcgdG8gYmUgc2VudCwgcmlnaHQ/IEdpdmVuIHRoZSBjb250ZXh0IG9mIEFRTSwgSSYjMzk7ZCBiZXQgd2UmIzM5O3JlIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJiMzOTtzIGJhY2sgcHJlc3N1cmUgb3IgY29uZ2VzdGlvbiB3aXRoaW4gdGhlIHF1ZXVlLiBXZSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gcmVwb3J0cyB0aGUgc3RhdGUgb2YgdGhpbmdzOyBkb2VzIGl0IHJldHVybiBhIHNpbXBsZSBjb3VudCwgYSBib29sZWFuIGluZGljYXRpbmcgaWYgKmFueSogcGFja2V0cyBhcmUgcGVuZGluZywgb3Igc29tZXRoaW5nIG1vcmUgbnVhbmNlZCBsaWtlIGEgcGVyLUFDIChBY2Nlc3MgQ2F0ZWdvcnkpIGJyZWFrZG93biBvciBldmVuIHNvbWUga2luZCBvZiBlc3RpbWF0ZSBvZiB0aGUgcXVldWVkIGJ5dGVzPyBBcmUgd2UgdGFsa2luZyBhYm91dCBwYWNrZXRzICplbnF1ZXVlZCogYnV0IG5vdCB5ZXQgKnRyYW5zbWl0dGVkKiwgb3IgZG8gd2UgaW5jbHVkZSBwYWNrZXRzIGluIGZsaWdodCB0byBhIGRlZ3JlZT8gVGhpcyB3aWxsIGFmZmVjdCBob3cgaXQmIzM5O3MgdXNlZCB3aXRoaW4gYSBsYXJnZXIgQVFNIGNvbnRyb2wgbG9vcC4gSSYjMzk7ZCBuZWVkIHRvIGNvbmZpcm0gd2hhdCB0aGUgZnVuY3Rpb24gZG9lcyB3aXRoIGl0cyBwYXJhbWV0ZXJzIC0gYXJlIHRoZXkgdGhlIFRYIHF1ZXVlIGl0c2VsZiwgc3BlY2lmaWMgQUNzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSBxdWljayBwZWVrIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBpdHMgaW50ZW5kZWQgdXNlIHdpbGwgYmUgdXNlZnVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZWVlODAyMTFfdHhxX2FxbF9wZW5kaW5nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvdHguYz00MjUzPUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrKTtcbm5ldC9tYWM4MDIxMS90eC5jLTQyNTQtXG5uZXQvbWFjODAyMTEvdHguYzo0MjU1OnUzMiBpZWVlODAyMTFfdHhxX2FxbF9wZW5kaW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxubmV0L21hYzgwMjExL3R4LmMtNDI1Ni1cdFx0XHQgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqdHhxKVxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTQyNzAtfVxubmV0L21hYzgwMjExL3R4LmM6NDI3MTpFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV90eHFfYXFsX3BlbmRpbmcpO1xubmV0L21hYzgwMjExL3R4LmMtNDI3Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTQ6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0MDUKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkRpdmluZyBpbnRvIGBpZWVlODAyMTFfdHhxX2FpcnRpbWVfY2hlY2tgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIGl0LiBMZXQmIzM5O3MgZGlnIGludG8gYGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVja2AuIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsLiBJdCYjMzk7cyB0aGUgZ2F0ZWtlZXBlciwgdGhlIGFyYml0ZXIgb2YgZmFpcm5lc3MgaW4gb3VyIHdpcmVsZXNzIHN0YWNrLiBUaGlzIGlzIHdoZXJlIHdlIGRlY2lkZSBpZiBhIGZyYW1lIGdldHMgYWlydGltZSBvciBnZXRzIGhlbGQgYmFjaywgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0IGNvbGQuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHRoZSBndXRzIG9mIGhvdyB3ZSBtYW5hZ2UgY29udGVudGlvbiBhbmQgcHJpb3JpdGl6ZSB0cmFmZmljIGluIHRoaXMgaW50ZXJmYWNlLiBJIHdhbnQgdG8gc2VlIGhvdyBpdCYjMzk7cyBtYWtpbmcgaXRzIGRldGVybWluYXRpb25zOiB3aGF0IGZhY3RvcnMgYXJlIGJlaW5nIGNvbnNpZGVyZWQsIHdoYXQgdGhlIHRocmVzaG9sZHMgYXJlLCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBsb2dpYyBmbG93IGlzLiBLbm93aW5nIHRoaXMgZnVuY3Rpb24mIzM5O3MgbG9naWMgaXMgYWJzb2x1dGVseSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIG9mIG91ciB3aXJlbGVzcyBuZXR3b3JrIHVuZGVyIGxvYWQuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIGFpcnRpbWUgZmFpcm5lc3MgYW5kIGFueSBvdGhlciBhZG1pc3Npb24gY29udHJvbCBtZWNoYW5pc21zIHdlJiMzOTt2ZSBpbXBsZW1lbnRlZC4gSXMgdGhlcmUgYSBwb3RlbnRpYWwgYm90dGxlbmVjaz8gQXJlIHRoZXJlIGFueSBoaWRkZW4gYnVncyBsdXJraW5nIHRoYXQgY291bGQgYmUgY2F1c2luZyB1bmZhaXIgZGlzdHJpYnV0aW9uIG9yIHVuZXhwZWN0ZWQgZHJvcHM/IEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGFsZ29yaXRobSBpcyByb2J1c3QsIHRoYXQgaXQgYWNjb3VudHMgZm9yIG91ciB2YXJpb3VzIHRyYWZmaWMgdHlwZXMsIGFuZCB0aGF0IGl0JiMzOTtzIG9wdGltaXplZCBhcyBiZXN0IGFzIGNhbiBiZS4gVGhpcyBpcyBhIGNyaXRpY2FsIGJ1aWxkaW5nIGJsb2NrLCBzbyBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTQ6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWVlZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvdHguYz0zODc1PXN0cnVjdCBza19idWZmICppZWVlODAyMTFfdHhfZGVxdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5uZXQvbWFjODAyMTEvdHguYy0zODkzLVxubmV0L21hYzgwMjExL3R4LmM6Mzg5NDpcdGlmICghaWVlZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrKGh3LCB0eHEpKVxubmV0L21hYzgwMjExL3R4LmMtMzg5NS1cdFx0cmV0dXJuIE5VTEw7XG4tLVxubmV0L21hYzgwMjExL3R4LmM9NDExNj1zdHJ1Y3QgaWVlZTgwMjExX3R4cSAqaWVlZTgwMjExX25leHRfdHhxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBhYylcbi0tXG5uZXQvbWFjODAyMTEvdHguYy00MTQ1LVxubmV0L21hYzgwMjExL3R4LmM6NDE0NjpcdGFxbF9jaGVjayA9IGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVjayhodywgXHUwMDI2dHhxaS1cdTAwM2V0eHEpO1xubmV0L21hYzgwMjExL3R4LmMtNDE0Ny1cdGlmIChhcWxfY2hlY2spXG4tLVxubmV0L21hYzgwMjExL3R4LmM9NDIxOT1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShhcWxfZGlzYWJsZSk7XG5uZXQvbWFjODAyMTEvdHguYy00MjIwLVxubmV0L21hYzgwMjExL3R4LmM6NDIyMTpib29sIGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVjayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbm5ldC9tYWM4MDIxMS90eC5jLTQyMjItXHRcdFx0XHQgc3RydWN0IGllZWU4MDIxMV90eHEgKnR4cSlcbi0tXG5uZXQvbWFjODAyMTEvdHguYy00MjUyLX1cbm5ldC9tYWM4MDIxMS90eC5jOjQyNTM6RVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdHhxX2FpcnRpbWVfY2hlY2spO1xubmV0L21hYzgwMjExL3R4LmMtNDI1NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTQ6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyOTgKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgaWVlZTgwMjExX3N0YV91cGRhdGVfcGVuZGluZ19haXJ0aW1lYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBpZWVlODAyMTFfc3RhX3VwZGF0ZV9wZW5kaW5nX2FpcnRpbWVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHBlbmRpbmcgYWlydGltZSB1cGRhdGVzIGZvciBhIHN0YXRpb24uIE15IGluaXRpYWwgZm9jdXMgaXMgbGlrZWx5IHRvIGJlIG9uIHRoZSBmdW5jdGlvbiYjMzk7cyBjb3JlIGxvZ2ljLiBXaGF0IHRyaWdnZXJzIHRoaXMgdXBkYXRlPyBJcyBpdCByZWxhdGVkIHRvIFFvUywgYWRtaXNzaW9uIGNvbnRyb2wsIG9yIHNvbWUgZm9ybSBvZiByYXRlIGFkYXB0YXRpb24/IEkgZXhwZWN0IHRvIHNlZSBjb25kaXRpb25hbHMgYW5kIHBvc3NpYmx5IGxvb3BzIHJlbGF0ZWQgdG8gY2hlY2tpbmcgdmFyaW91cyBhaXJ0aW1lIGNhbGN1bGF0aW9uIHBhcmFtZXRlcnMuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgbW9kaWZpZWQgd2l0aGluIHRoaXMgZnVuY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgYGllZWU4MDIxMV9zdGFgIHN0cnVjdHVyZSBhbmQgYW55IHJlbGF0ZWQgc3RydWN0cyDigJMgcHJvYmFibHkgc29tZXRoaW5nIGNvbnRhaW5pbmcgYWlydGltZSB1c2FnZSBvciBncmFudGVkIHRpbWUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHNlZSBob3cgdGhlIHBlbmRpbmcgYWlydGltZSBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIG92ZXJhbGwgYWlydGltZSBhY2NvdW50aW5nIGZvciBhIHN0YXRpb24uIElzIHRoaXMgYSBzaW1wbGUgaW5jcmVtZW50LCBvciBkb2VzIGl0IGludm9sdmUgbW9yZSBzb3BoaXN0aWNhdGVkIGNhbGN1bGF0aW9ucywgcGVyaGFwcyB0YWtpbmcgaW50byBhY2NvdW50IGNoYW5uZWwgY29uZGl0aW9ucyBhbmQgcGFja2V0IGNoYXJhY3RlcmlzdGljcz8KCkJleW9uZCB0aGUgZGlyZWN0IG1vZGlmaWNhdGlvbiBvZiBkYXRhIHN0cnVjdHVyZXMsIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gRG9lcyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0IHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHNjaGVkdWxlciwgc3VjaCBhcyBwYWNrZXQgcXVldWluZyBvciB0cmFuc21pc3Npb24gc2NoZWR1bGluZz8gSSB3YW50IHRvIHNlZSBpZiBhbnkgbG9ja3MgYXJlIHRha2VuLCBhbmQgd2hlcmUgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC4gV2hhdCBpbnRlcnJ1cHQgY29udGV4dCBkb2VzIGl0IHJ1biBpbj8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGFyZWFzIGZvciBvcHRpbWl6YXRpb24sIG9yIGNvbW1vbiBwaXRmYWxscyB0aGF0IGNvdWxkIGxlYWQgdG8gYWlydGltZSBzdGFydmF0aW9uIG9yIHVuZmFpciBhbGxvY2F0aW9uPyBJIGFsc28gbmVlZCB0byBzZWUgYW55IG90aGVyIHJlbGF0ZWQgdXBkYXRlIGZ1bmN0aW9ucy4gVGhpcyBjb3VsZCBnaXZlIG1lIGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyB0aGUgYWlydGltZSBhbGxvY2F0aW9uIHN5c3RlbSB3b3Jrcy4KCkkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgYSBkZWxpY2F0ZSBiYWxhbmNlIGJldHdlZW4gYWNjdXJhY3ksIG92ZXJoZWFkLCBhbmQgZmFpcm5lc3MgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0cmFkZS1vZmZzIHRoZSBkZXZlbG9wZXJzIG1hZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE0OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2llZWU4MDIxMV9zdGFfdXBkYXRlX3BlbmRpbmdfYWlydGltZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL3N0YV9pbmZvLmM9MjQ5MD1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdGFfcmVjYWxjX2FnZ3JlZ2F0ZXMpO1xubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMjQ5MS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjI0OTI6dm9pZCBpZWVlODAyMTFfc3RhX3VwZGF0ZV9wZW5kaW5nX2FpcnRpbWUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0yNDkzLVx0XHRcdFx0XHQgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1OCBhYyxcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaD0xMzg9c3RydWN0IGFpcnRpbWVfaW5mbyB7XG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtMTQ3LVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmg6MTQ4OnZvaWQgaWVlZTgwMjExX3N0YV91cGRhdGVfcGVuZGluZ19haXJ0aW1lKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtMTQ5LVx0XHRcdFx0XHQgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1OCBhYyxcbi0tXG5uZXQvbWFjODAyMTEvc3RhdHVzLmM9NzU2PXN0YXRpYyB2b2lkIGllZWU4MDIxMV9yZXBvcnRfdXNlZF9za2Ioc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4tLVxubmV0L21hYzgwMjExL3N0YXR1cy5jLTc3My1cdFx0c3RhID0gc3RhX2luZm9fZ2V0X2J5X2FkZHJzKGxvY2FsLCBoZHItXHUwMDNlYWRkcjEsIGhkci1cdTAwM2VhZGRyMik7XG5uZXQvbWFjODAyMTEvc3RhdHVzLmM6Nzc0Olx0XHRpZWVlODAyMTFfc3RhX3VwZGF0ZV9wZW5kaW5nX2FpcnRpbWUobG9jYWwsIHN0YSxcbm5ldC9tYWM4MDIxMS9zdGF0dXMuYy03NzUtXHRcdFx0XHRcdFx0ICAgICBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSxcbi0tXG5uZXQvbWFjODAyMTEvc3RhdHVzLmM9MTE2ND12b2lkIGllZWU4MDIxMV90eF9zdGF0dXNfZXh0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbm5ldC9tYWM4MDIxMS9zdGF0dXMuYy0xMTg5LVx0XHRib29sIG1jYXN0ID0gSUVFRTgwMjExX1NLQl9DQihza2IpLVx1MDAzZXR4X3RpbWVfbWM7XG5uZXQvbWFjODAyMTEvc3RhdHVzLmM6MTE5MDpcdFx0aWVlZTgwMjExX3N0YV91cGRhdGVfcGVuZGluZ19haXJ0aW1lKGxvY2FsLCBzdGEsXG5uZXQvbWFjODAyMTEvc3RhdHVzLmMtMTE5MS1cdFx0XHRcdFx0XHQgICAgIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpLFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jPTM4NzU9c3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV90eF9kZXF1ZXVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTQwNjctXHRcdGluZm8tXHUwMDNldHhfdGltZV9tYyA9ICF0eC5zdGE7XG5uZXQvbWFjODAyMTEvdHguYzo0MDY4Olx0XHRpZWVlODAyMTFfc3RhX3VwZGF0ZV9wZW5kaW5nX2FpcnRpbWUobG9jYWwsIHR4LnN0YSwgdHhxLVx1MDAzZWFjLFxubmV0L21hYzgwMjExL3R4LmMtNDA2OS1cdFx0XHRcdFx0XHQgICAgIGFpcnRpbWUsIGZhbHNlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzU0OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNdWx0aWNhc3QgQVFMIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBBUUwgKEFpcnRpbWUgRmFpcm5lc3MgUXVldWVpbmcpIGZ1bmN0aW9uYWxpdHkgZm9yIG11bHRpY2FzdCB0cmFmZmljLiBNeSBwcmltYXJ5IGNvbmNlcm4gcmlnaHQgbm93IGlzIGVuc3VyaW5nIHRoZSBjb3JyZWN0IGludGVncmF0aW9uIGFuZCB0aGF0IHdlIGhhdmVuJiMzOTt0IG92ZXJsb29rZWQgYW55IGNydWNpYWwgY29tcG9uZW50cy4gTXkgZm9jdXMgc2hvdWxkIGJlIG9uIHZlcmlmeWluZyB0aGUgdXNhZ2Ugb2YgdGhlc2Ugc3ltYm9scyB3aXRoaW4gdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMsIHNwZWNpZmljYWxseTogYGllZWU4MDIxMV9zdGFfdXBkYXRlX3BlbmRpbmdfYWlydGltZWAsIGBpZWVlODAyMTFfdHhxX2FpcnRpbWVfY2hlY2tgLCBgaWVlZTgwMjExX3R4cV9hcWxfcGVuZGluZ2AsIGBpZWVlODAyMTFfcmF0ZV9leHBlY3RlZF90eF9haXJ0aW1lYCwgYW5kIGBzdGFfZXN0aW1hdGVfZXhwZWN0ZWRfdGhyb3VnaHB1dGAuCgpGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgTUFDODAyMTFgIGlzIHRoZSBjb3JyZWN0IGNvbmZpZyB0byBlbmFibGUgdGhpcy4gVGhlIGNvZGUmIzM5O3MgbG9jYXRlZCB3aXRoaW4gYG5ldC9tYWM4MDIxMS9gLCBzbyBJIGJlbGlldmUgYE1BQzgwMjExYCBpcyB0aGUgcmVsZXZhbnQgY29uZmlnIGl0ZW0uIEJ1dCBsZXQmIzM5O3MgYmUgYWJzb2x1dGVseSBjZXJ0YWluIOKAkyBpcyB0aGVyZSBhbnl0aGluZyBlbHNlPyBUaGUgY29kZSB1c2VzIGB3aXBoeV9leHRfZmVhdHVyZV9pc3NldChsb2NhbC0mZ3Q7aHcud2lwaHksIE5MODAyMTFfRVhUX0ZFQVRVUkVfQVFMKWAsIHdoaWNoIGluZGljYXRlcyBhIHJ1bnRpbWUgZmVhdHVyZSBmbGFnIGlzIHVzZWQuCgpJIG5lZWQgdG8gcXVpY2tseSBzY2FuIHRvIGNvbmZpcm0gdGhlcmUgYXJlIG5vIG90aGVyIGNvbmZpZ3VyYXRpb25zIG5lZWRlZC4gRnJvbSBteSBpbml0aWFsIGFzc2Vzc21lbnQsIGBNQUM4MDIxMWAgYWxvbmUgc2hvdWxkIHN1ZmZpY2UuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSYjMzk7bGwgcGVyZm9ybSBhIHF1aWNrIGRvdWJsZS1jaGVjayBvbiBob3cgYHN0YV9lc3RpbWF0ZV9leHBlY3RlZF90aHJvdWdocHV0YCBpcyB1c2VkIGluIHRoaXMgY29udGV4dC4gSXQmIzM5O3MgYSBrZXkgZWxlbWVudCwgYW5kIEkgd2FudCB0byBlbnN1cmUgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGNvcnJlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE0OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YV9lc3RpbWF0ZV9leHBlY3RlZF90aHJvdWdocHV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvc3RhX2luZm8uYz0yNzg5PXZvaWQgc3RhX3NldF9hY2N1bXVsYXRlZF9yZW1vdmVkX2xpbmtzX3NpbmZvKHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTI4MTQtXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzoyODE1OnN0YXRpYyB1MzIgc3RhX2VzdGltYXRlX2V4cGVjdGVkX3Rocm91Z2hwdXQoc3RydWN0IHN0YV9pbmZvICpzdGEsXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0yODE2LVx0XHRcdFx0XHQgICAgc3RydWN0IHJhdGVfaW5mbyAqcmksXG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9MjgzNz1zdGF0aWMgdm9pZCBzdGFfc2V0X2xpbmtfc2luZm8oc3RydWN0IHN0YV9pbmZvICpzdGEsXG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMzA1MS1cdGlmICghdGhyIFx1MDAyNlx1MDAyNiAobGlua19zaW5mby1cdTAwM2VmaWxsZWQgXHUwMDI2IEJJVF9VTEwoTkw4MDIxMV9TVEFfSU5GT19UWF9CSVRSQVRFKSkpXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzozMDUyOlx0XHR0aHIgPSBzdGFfZXN0aW1hdGVfZXhwZWN0ZWRfdGhyb3VnaHB1dChzdGEsXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0zMDUzLVx0XHRcdFx0XHRcdCAgICAgIFx1MDAyNmxpbmtfc2luZm8tXHUwMDNldHhyYXRlLFxuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jPTMwNzk9dm9pZCBzdGFfc2V0X3NpbmZvKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbyxcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0zMzA5LVx0XHQgICAoc2luZm8tXHUwMDNlZmlsbGVkIFx1MDAyNiBCSVRfVUxMKE5MODAyMTFfU1RBX0lORk9fVFhfQklUUkFURSkpKSB7XG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzozMzEwOlx0XHR0aHIgPSBzdGFfZXN0aW1hdGVfZXhwZWN0ZWRfdGhyb3VnaHB1dChzdGEsIFx1MDAyNnNpbmZvLVx1MDAzZXR4cmF0ZSxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTMzMTEtXHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2c2RhdGEtXHUwMDNldmlmLmJzc19jb25mKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTQ6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2NTUKCQkJCQkJCW91dHB1dDogMTgyCgkJCQkJCQl0aG91Z2h0czogMTg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIEkgdW5kZXJzdGFuZCBpdDoKCioqQWlydGltZSBRdWV1ZSBMaW1pdCBmb3IgTXVsdGljYXN0IGFuZCBUaHJvdWdocHV0IENhbGN1bGF0aW9uKioKCkFscmlnaHQsIHNvIHRoZSBwYXRjaCBsb29rcyBnb29kIOKAkyBmdW5jdGlvbmFsIGFuZCBkZWZpbml0ZWx5IHJlYWNoYWJsZSB3aXRoaW4gdGhlIGV4aXN0aW5nIDgwMi4xMSBzdGFjay4gTXkgZm9jdXMgaGVyZSBpcyBvbiB0aGUgYWRkaXRpb24gb2YgQWlydGltZSBRdWV1ZSBMaW1pdCAoQVFMKSBzdXBwb3J0IGZvciBtdWx0aWNhc3QgdHJhZmZpYywgYWxvbmdzaWRlIG1vZGlmaWNhdGlvbnMgdG8gaG93IHdlIGVzdGltYXRlIGV4cGVjdGVkIHRocm91Z2hwdXQgZm9yIHN0YXRpb25zIHdpdGhpbiBtYWM4MDIxMS4gVGhpcyBpcyBzb2xpZCwgY29yZSBsb2dpYy4gU2VlbXMgbGlrZSB0aGUgZGV2ZWxvcGVycyBoYXZlIGJlZW4gZGlnZ2luZyBpbnRvOiBgaWVlZTgwMjExX3N0YV91cGRhdGVfcGVuZGluZ19haXJ0aW1lYCwgYGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVja2AsIGBpZWVlODAyMTFfdHhxX2FxbF9wZW5kaW5nYCwgYGllZWU4MDIxMV9yYXRlX2V4cGVjdGVkX3R4X2FpcnRpbWVgIGFuZCBgc3RhX2VzdGltYXRlX2V4cGVjdGVkX3Rocm91Z2hwdXRgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGRpcmVjdGx5IGludm9sdmVkIGluIHRoZSBjcml0aWNhbCBwYXRoLiBUaGUgZmFjdCB0aGF0IGBNQUM4MDIxMWAgaXMgdGhlIHJlbGV2YW50IGNvbmZpZyBjb25maXJtcyBpdOKAmXMgd2l0aGluIHRoZSBoZWFydCBvZiB0aGUgbWFjODAyMTEgZnJhbWV3b3JrLiBXZSBjYW4gdHJpZ2dlciB0aGlzIHRocm91Z2ggYG1hYzgwMjExX2h3c2ltYCB3aGljaCBpcyBncmVhdCBmb3IgdGVzdGluZyB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5LiBTZWVtcyBsaWtlIHRoZSBjb3JyZWN0IGFwcHJvYWNoIGFuZCBkaXJlY3Rpb24uCgpMZXQmIzM5O3MgY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTQ6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjExX3N0YV91cGRhdGVfcGVuZGluZ19haXJ0aW1lJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV90eHFfYWlydGltZV9jaGVjayYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfdHhxX2FxbF9wZW5kaW5nJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9yYXRlX2V4cGVjdGVkX3R4X2FpcnRpbWUmIzM0OywKICAgICYjMzQ7c3RhX2VzdGltYXRlX2V4cGVjdGVkX3Rocm91Z2hwdXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBBaXJ0aW1lIFF1ZXVlIExpbWl0IChBUUwpIHN1cHBvcnQgZm9yIG11bHRpY2FzdCB0cmFmZmljIGFuZCBtb2RpZmllcyB0aGUgZXhwZWN0ZWQgdGhyb3VnaHB1dCBjYWxjdWxhdGlvbiBmb3Igc3RhdGlvbnMgaW4gbWFjODAyMTEuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbG9naWMgZm9yIDgwMi4xMSBuZXR3b3JraW5nIGFuZCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBtYWM4MDIxMV9od3NpbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUFDODAyMTEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpZWVlODAyMTFfc3RhX3VwZGF0ZV9wZW5kaW5nX2FpcnRpbWUmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV90eHFfYXFsX3BlbmRpbmcmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3JhdGVfZXhwZWN0ZWRfdHhfYWlydGltZSYjMzQ7LAogICAgJiMzNDtzdGFfZXN0aW1hdGVfZXhwZWN0ZWRfdGhyb3VnaHB1dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIEFpcnRpbWUgUXVldWUgTGltaXQgKEFRTCkgc3VwcG9ydCBmb3IgbXVsdGljYXN0IHRyYWZmaWMgYW5kIG1vZGlmaWVzIHRoZSBleHBlY3RlZCB0aHJvdWdocHV0IGNhbGN1bGF0aW9uIGZvciBzdGF0aW9ucyBpbiBtYWM4MDIxMS4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBsb2dpYyBmb3IgODAyLjExIG5ldHdvcmtpbmcgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgdmlhIG1hYzgwMjExX2h3c2ltLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjJUMTQ6NTQ6MzEuMzg0NDEwMjk2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE2MTY5NDc5MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZWVlODAyMTFfc3RhX3VwZGF0ZV9wZW5kaW5nX2FpcnRpbWVcIixcbiAgICBcImllZWU4MDIxMV90eHFfYWlydGltZV9jaGVja1wiLFxuICAgIFwiaWVlZTgwMjExX3R4cV9hcWxfcGVuZGluZ1wiLFxuICAgIFwiaWVlZTgwMjExX3JhdGVfZXhwZWN0ZWRfdHhfYWlydGltZVwiLFxuICAgIFwic3RhX2VzdGltYXRlX2V4cGVjdGVkX3Rocm91Z2hwdXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIEFpcnRpbWUgUXVldWUgTGltaXQgKEFRTCkgc3VwcG9ydCBmb3IgbXVsdGljYXN0IHRyYWZmaWMgYW5kIG1vZGlmaWVzIHRoZSBleHBlY3RlZCB0aHJvdWdocHV0IGNhbGN1bGF0aW9uIGZvciBzdGF0aW9ucyBpbiBtYWM4MDIxMS4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBsb2dpYyBmb3IgODAyLjExIG5ldHdvcmtpbmcgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgdmlhIG1hYzgwMjExX2h3c2ltLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNDo1NDozMS4zODQ0MTc2MzZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NDIwMTY5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc5ZDU4NTM5YmViNzQwYmM1N2I2MzJmMTc4NzQ1Y2M1Y2E4MmZjYTJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMjIgMTQ6NTQ6MjkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaCBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmhcXG5pbmRleCBmNWFiZjFkYjc1NThiYy4uNzM1NGJhMDc5MzYzYTUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxcbisrKyBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmhcXG5AQCAtMzcyMiw2ICszNzIyLDcgQEAgZW51bSB3aXBoeV9wYXJhbXNfZmxhZ3Mge1xcbiAvKiBUaGUgcGVyIFRYUSBkZXZpY2UgcXVldWUgbGltaXQgaW4gYWlydGltZSAqL1xcbiAjZGVmaW5lIElFRUU4MDIxMV9ERUZBVUxUX0FRTF9UWFFfTElNSVRfTFxcdDUwMDBcXG4gI2RlZmluZSBJRUVFODAyMTFfREVGQVVMVF9BUUxfVFhRX0xJTUlUX0hcXHQxMjAwMFxcbisjZGVmaW5lIElFRUU4MDIxMV9ERUZBVUxUX0FRTF9UWFFfTElNSVRfTUNcXHQ1MDAwMFxcbiBcXG4gLyogVGhlIHBlciBpbnRlcmZhY2UgYWlydGltZSB0aHJlc2hvbGQgdG8gc3dpdGNoIHRvIGxvd2VyIHF1ZXVlIGxpbWl0ICovXFxuICNkZWZpbmUgSUVFRTgwMjExX0FRTF9USFJFU0hPTERcXHRcXHRcXHQyNDAwMFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxcbmluZGV4IDRmOTVkYTAyMzc0NmY5Li4yM2Q4ZDQ2MzljZGQ2ZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxcbkBAIC0xMzU0LDggKzEzNTQsOCBAQCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8ge1xcbiBcXHQgICAgc3RhdHVzX2RhdGFfaWRyOjEsXFxuIFxcdCAgICBzdGF0dXNfZGF0YToxMyxcXG4gXFx0ICAgIGh3X3F1ZXVlOjQsXFxuK1xcdCAgICB0eF90aW1lX21jOjEsXFxuIFxcdCAgICB0eF90aW1lX2VzdDoxMDtcXG4tXFx0LyogMSBmcmVlIGJpdCAqL1xcbiBcXG4gXFx0dW5pb24ge1xcbiBcXHRcXHRzdHJ1Y3Qge1xcbkBAIC02ODc2LDYgKzY4NzYsMTcgQEAgdm9pZCBpZWVlODAyMTFfc3RhX3JlZ2lzdGVyX2FpcnRpbWUoc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSwgdTggdGlkLFxcbiBib29sXFxuIGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVjayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV90eHEgKnR4cSk7XFxuIFxcbisvKipcXG4rICogaWVlZTgwMjExX3R4cV9hcWxfcGVuZGluZyAtIGdldCBwZW5kaW5nIEFRTCBhaXJ0aW1lIGZvciBhIHR4cVxcbisgKlxcbisgKiBAaHc6IHBvaW50ZXIgb2J0YWluZWQgZnJvbSBpZWVlODAyMTFfYWxsb2NfaHcoKVxcbisgKiBAdHhxOiBwb2ludGVyIG9idGFpbmVkIGZyb20gc3RhdGlvbiBvciB2aXJ0dWFsIGludGVyZmFjZVxcbisgKlxcbisgKiBSZXR1cm46IHBlbmRpbmcgYWlydGltZSAoaW4gdXNlYykgZm9yIHRoZSBnaXZlbiB0eHEuXFxuKyAqL1xcbit1MzIgaWVlZTgwMjExX3R4cV9hcWxfcGVuZGluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IGllZWU4MDIxMV90eHEgKnR4cSk7XFxuK1xcbiAvKipcXG4gICogaWVlZTgwMjExX2l0ZXJfa2V5cyAtIGl0ZXJhdGUga2V5cyBwcm9ncmFtbWVkIGludG8gdGhlIGRldmljZVxcbiAgKiBAaHc6IHBvaW50ZXIgb2J0YWluZWQgZnJvbSBpZWVlODAyMTFfYWxsb2NfaHcoKVxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvYWlydGltZS5jIGIvbmV0L21hYzgwMjExL2FpcnRpbWUuY1xcbmluZGV4IGM2MWRmNjM3MjMyYTliLi4wYzU0Y2RiZDc1M2NkNyAxMDA2NDRcXG4tLS0gYS9uZXQvbWFjODAyMTEvYWlydGltZS5jXFxuKysrIGIvbmV0L21hYzgwMjExL2FpcnRpbWUuY1xcbkBAIC02ODUsNyArNjg1LDcgQEAgc3RhdGljIGludCBpZWVlODAyMTFfZmlsbF9yeF9zdGF0dXMoc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXQsXFxuIFxcdGlmIChpZWVlODAyMTFfZmlsbF9yYXRlX2luZm8oaHcsIHN0YXQsIGJhbmQsIHJpKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRpZiAoIWllZWU4MDIxMV9yYXRlX3ZhbGlkKHJhdGUpKVxcbitcXHRpZiAoIXJhdGUgfHwgIWllZWU4MDIxMV9yYXRlX3ZhbGlkKHJhdGUpKVxcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcbiBcXHRpZiAocmF0ZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRUVFODAyMTFfVFhfUkNfMTYwX01IWl9XSURUSClcXG5AQCAtNzUzLDYgKzc1Myw1MyBAQCB1MzIgaWVlZTgwMjExX2NhbGNfdHhfYWlydGltZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChpZWVlODAyMTFfY2FsY190eF9haXJ0aW1lKTtcXG4gXFxuK3UzMiBpZWVlODAyMTFfcmF0ZV9leHBlY3RlZF90eF9haXJ0aW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICp0eF9yYXRlLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHJhdGVfaW5mbyAqcmksXFxuK1xcdFxcdFxcdFxcdCAgICAgICBlbnVtIG5sODAyMTFfYmFuZCBiYW5kLFxcbitcXHRcXHRcXHRcXHQgICAgICAgYm9vbCBhbXBkdSwgaW50IGxlbilcXG4re1xcbitcXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyBzdGF0O1xcbitcXHR1MzIgZHVyYXRpb24sIG92ZXJoZWFkO1xcbitcXHR1OCBhZ2dfc2hpZnQ7XFxuK1xcbitcXHRpZiAoaWVlZTgwMjExX2ZpbGxfcnhfc3RhdHVzKFxcdTAwMjZzdGF0LCBodywgdHhfcmF0ZSwgcmksIGJhbmQsIGxlbikpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKHN0YXQuZW5jb2RpbmcgPT0gUlhfRU5DX0xFR0FDWSB8fCAhYW1wZHUpXFxuK1xcdFxcdHJldHVybiBpZWVlODAyMTFfY2FsY19yeF9haXJ0aW1lKGh3LCBcXHUwMDI2c3RhdCwgbGVuKSAqIDEwMjQ7XFxuK1xcbitcXHRkdXJhdGlvbiA9IGllZWU4MDIxMV9nZXRfcmF0ZV9kdXJhdGlvbihodywgXFx1MDAyNnN0YXQsIFxcdTAwMjZvdmVyaGVhZCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBBc3N1bWUgdGhhdCBIVC9WSFQgdHJhbnNtaXNzaW9uIG9uIGFueSBBQyBleGNlcHQgVk8gd2lsbFxcbitcXHQgKiB1c2UgYWdncmVnYXRpb24uIFNpbmNlIHdlIGRvbid0IGhhdmUgcmVsaWFibGUgcmVwb3J0aW5nXFxuK1xcdCAqIG9mIGFnZ3JlZ2F0aW9uIGxlbmd0aCwgYXNzdW1lIGFuIGF2ZXJhZ2Ugc2l6ZSBiYXNlZCBvbiB0aGVcXG4rXFx0ICogdHggcmF0ZS5cXG4rXFx0ICogVGhpcyB3aWxsIG5vdCBiZSB2ZXJ5IGFjY3VyYXRlLCBidXQgbXVjaCBiZXR0ZXIgdGhhbiBzaW1wbHlcXG4rXFx0ICogYXNzdW1pbmcgdW4tYWdncmVnYXRlZCB0eCBpbiBhbGwgY2FzZXMuXFxuK1xcdCAqL1xcbitcXHRpZiAoZHVyYXRpb24gXFx1MDAzZSA0MDAgKiAxMDI0KSAvKiBcXHUwMDNjPSBWSFQyMCBNQ1MyIDFTICovXFxuK1xcdFxcdGFnZ19zaGlmdCA9IDE7XFxuK1xcdGVsc2UgaWYgKGR1cmF0aW9uIFxcdTAwM2UgMjUwICogMTAyNCkgLyogXFx1MDAzYz0gVkhUMjAgTUNTMyAxUyBvciBNQ1MxIDJTICovXFxuK1xcdFxcdGFnZ19zaGlmdCA9IDI7XFxuK1xcdGVsc2UgaWYgKGR1cmF0aW9uIFxcdTAwM2UgMTUwICogMTAyNCkgLyogXFx1MDAzYz0gVkhUMjAgTUNTNSAxUyBvciBNQ1MyIDJTICovXFxuK1xcdFxcdGFnZ19zaGlmdCA9IDM7XFxuK1xcdGVsc2UgaWYgKGR1cmF0aW9uIFxcdTAwM2UgNzAgKiAxMDI0KSAvKiBcXHUwMDNjPSBWSFQyMCBNQ1M1IDJTICovXFxuK1xcdFxcdGFnZ19zaGlmdCA9IDQ7XFxuK1xcdGVsc2UgaWYgKHN0YXQuZW5jb2RpbmcgIT0gUlhfRU5DX0hFIHx8XFxuK1xcdFxcdCBkdXJhdGlvbiBcXHUwMDNlIDIwICogMTAyNCkgLyogXFx1MDAzYz0gSEU0MCBNQ1M2IDJTICovXFxuK1xcdFxcdGFnZ19zaGlmdCA9IDU7XFxuK1xcdGVsc2VcXG4rXFx0XFx0YWdnX3NoaWZ0ID0gNjtcXG4rXFxuK1xcdGR1cmF0aW9uICo9IGxlbjtcXG4rXFx0ZHVyYXRpb24gLz0gQVZHX1BLVF9TSVpFO1xcbitcXHRkdXJhdGlvbiArPSAob3ZlcmhlYWQgKiAxMDI0IFxcdTAwM2VcXHUwMDNlIGFnZ19zaGlmdCk7XFxuK1xcbitcXHRyZXR1cm4gZHVyYXRpb247XFxuK31cXG4rXFxuIHUzMiBpZWVlODAyMTFfY2FsY19leHBlY3RlZF90eF9haXJ0aW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbiBcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsXFxuQEAgLTc3NSw0NSArODIyLDEzIEBAIHUzMiBpZWVlODAyMTFfY2FsY19leHBlY3RlZF90eF9haXJ0aW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbiBcXHRpZiAocHVic3RhKSB7XFxuIFxcdFxcdHN0cnVjdCBzdGFfaW5mbyAqc3RhID0gY29udGFpbmVyX29mKHB1YnN0YSwgc3RydWN0IHN0YV9pbmZvLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgc3RhKTtcXG4tXFx0XFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgc3RhdDtcXG4gXFx0XFx0c3RydWN0IGllZWU4MDIxMV90eF9yYXRlICp0eF9yYXRlID0gXFx1MDAyNnN0YS1cXHUwMDNlZGVmbGluay50eF9zdGF0cy5sYXN0X3JhdGU7XFxuIFxcdFxcdHN0cnVjdCByYXRlX2luZm8gKnJpID0gXFx1MDAyNnN0YS1cXHUwMDNlZGVmbGluay50eF9zdGF0cy5sYXN0X3JhdGVfaW5mbztcXG4tXFx0XFx0dTMyIGR1cmF0aW9uLCBvdmVyaGVhZDtcXG4tXFx0XFx0dTggYWdnX3NoaWZ0O1xcbi1cXG4tXFx0XFx0aWYgKGllZWU4MDIxMV9maWxsX3J4X3N0YXR1cyhcXHUwMDI2c3RhdCwgaHcsIHR4X3JhdGUsIHJpLCBiYW5kLCBsZW4pKVxcbi1cXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0dTMyIGR1cmF0aW9uO1xcbiBcXG4tXFx0XFx0aWYgKHN0YXQuZW5jb2RpbmcgPT0gUlhfRU5DX0xFR0FDWSB8fCAhYW1wZHUpXFxuLVxcdFxcdFxcdHJldHVybiBpZWVlODAyMTFfY2FsY19yeF9haXJ0aW1lKGh3LCBcXHUwMDI2c3RhdCwgbGVuKTtcXG4tXFxuLVxcdFxcdGR1cmF0aW9uID0gaWVlZTgwMjExX2dldF9yYXRlX2R1cmF0aW9uKGh3LCBcXHUwMDI2c3RhdCwgXFx1MDAyNm92ZXJoZWFkKTtcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogQXNzdW1lIHRoYXQgSFQvVkhUIHRyYW5zbWlzc2lvbiBvbiBhbnkgQUMgZXhjZXB0IFZPIHdpbGxcXG4tXFx0XFx0ICogdXNlIGFnZ3JlZ2F0aW9uLiBTaW5jZSB3ZSBkb24ndCBoYXZlIHJlbGlhYmxlIHJlcG9ydGluZ1xcbi1cXHRcXHQgKiBvZiBhZ2dyZWdhdGlvbiBsZW5ndGgsIGFzc3VtZSBhbiBhdmVyYWdlIHNpemUgYmFzZWQgb24gdGhlXFxuLVxcdFxcdCAqIHR4IHJhdGUuXFxuLVxcdFxcdCAqIFRoaXMgd2lsbCBub3QgYmUgdmVyeSBhY2N1cmF0ZSwgYnV0IG11Y2ggYmV0dGVyIHRoYW4gc2ltcGx5XFxuLVxcdFxcdCAqIGFzc3VtaW5nIHVuLWFnZ3JlZ2F0ZWQgdHggaW4gYWxsIGNhc2VzLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0aWYgKGR1cmF0aW9uIFxcdTAwM2UgNDAwICogMTAyNCkgLyogXFx1MDAzYz0gVkhUMjAgTUNTMiAxUyAqL1xcbi1cXHRcXHRcXHRhZ2dfc2hpZnQgPSAxO1xcbi1cXHRcXHRlbHNlIGlmIChkdXJhdGlvbiBcXHUwMDNlIDI1MCAqIDEwMjQpIC8qIFxcdTAwM2M9IFZIVDIwIE1DUzMgMVMgb3IgTUNTMSAyUyAqL1xcbi1cXHRcXHRcXHRhZ2dfc2hpZnQgPSAyO1xcbi1cXHRcXHRlbHNlIGlmIChkdXJhdGlvbiBcXHUwMDNlIDE1MCAqIDEwMjQpIC8qIFxcdTAwM2M9IFZIVDIwIE1DUzUgMVMgb3IgTUNTMiAyUyAqL1xcbi1cXHRcXHRcXHRhZ2dfc2hpZnQgPSAzO1xcbi1cXHRcXHRlbHNlIGlmIChkdXJhdGlvbiBcXHUwMDNlIDcwICogMTAyNCkgLyogXFx1MDAzYz0gVkhUMjAgTUNTNSAyUyAqL1xcbi1cXHRcXHRcXHRhZ2dfc2hpZnQgPSA0O1xcbi1cXHRcXHRlbHNlIGlmIChzdGF0LmVuY29kaW5nICE9IFJYX0VOQ19IRSB8fFxcbi1cXHRcXHRcXHQgZHVyYXRpb24gXFx1MDAzZSAyMCAqIDEwMjQpIC8qIFxcdTAwM2M9IEhFNDAgTUNTNiAyUyAqL1xcbi1cXHRcXHRcXHRhZ2dfc2hpZnQgPSA1O1xcbi1cXHRcXHRlbHNlXFxuLVxcdFxcdFxcdGFnZ19zaGlmdCA9IDY7XFxuLVxcbi1cXHRcXHRkdXJhdGlvbiAqPSBsZW47XFxuLVxcdFxcdGR1cmF0aW9uIC89IEFWR19QS1RfU0laRTtcXG4rXFx0XFx0ZHVyYXRpb24gPSBpZWVlODAyMTFfcmF0ZV9leHBlY3RlZF90eF9haXJ0aW1lKGh3LCB0eF9yYXRlLCByaSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgYmFuZCwgdHJ1ZSwgbGVuKTtcXG4gXFx0XFx0ZHVyYXRpb24gLz0gMTAyNDtcXG4tXFx0XFx0ZHVyYXRpb24gKz0gKG92ZXJoZWFkIFxcdTAwM2VcXHUwMDNlIGFnZ19zaGlmdCk7XFxuIFxcbiBcXHRcXHRyZXR1cm4gbWF4X3QodTMyLCBkdXJhdGlvbiwgNCk7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RlYnVnZnMuYyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmNcXG5pbmRleCBhNGQ1NDYxZjY0ODBmMC4uOGViZjViY2YzYzBlYzEgMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjExL2RlYnVnZnMuY1xcbisrKyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmNcXG5AQCAtMjEwLDExICsyMTAsMTMgQEAgc3RhdGljIHNzaXplX3QgYXFsX3BlbmRpbmdfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0XFx0XFx0XFxcIlZJICAgICAldSB1c1xcXFxuXFxcIlxcbiBcXHRcXHRcXHRcXFwiQkUgICAgICV1IHVzXFxcXG5cXFwiXFxuIFxcdFxcdFxcdFxcXCJCSyAgICAgJXUgdXNcXFxcblxcXCJcXG4rXFx0XFx0XFx0XFxcIk1DICAgICAldSB1c1xcXFxuXFxcIlxcbiBcXHRcXHRcXHRcXFwidG90YWwgICV1IHVzXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRhdG9taWNfcmVhZChcXHUwMDI2bG9jYWwtXFx1MDAzZWFxbF9hY19wZW5kaW5nX2FpcnRpbWVbSUVFRTgwMjExX0FDX1ZPXSksXFxuIFxcdFxcdFxcdGF0b21pY19yZWFkKFxcdTAwMjZsb2NhbC1cXHUwMDNlYXFsX2FjX3BlbmRpbmdfYWlydGltZVtJRUVFODAyMTFfQUNfVkldKSxcXG4gXFx0XFx0XFx0YXRvbWljX3JlYWQoXFx1MDAyNmxvY2FsLVxcdTAwM2VhcWxfYWNfcGVuZGluZ19haXJ0aW1lW0lFRUU4MDIxMV9BQ19CRV0pLFxcbiBcXHRcXHRcXHRhdG9taWNfcmVhZChcXHUwMDI2bG9jYWwtXFx1MDAzZWFxbF9hY19wZW5kaW5nX2FpcnRpbWVbSUVFRTgwMjExX0FDX0JLXSksXFxuK1xcdFxcdFxcdGF0b21pY19yZWFkKFxcdTAwMjZsb2NhbC1cXHUwMDNlYXFsX21jX3BlbmRpbmdfYWlydGltZSksXFxuIFxcdFxcdFxcdGF0b21pY19yZWFkKFxcdTAwMjZsb2NhbC1cXHUwMDNlYXFsX3RvdGFsX3BlbmRpbmdfYWlydGltZSkpO1xcbiBcXHRyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgYnVmLCBsZW4pO1xcbkBAIC0yMzksNyArMjQxLDggQEAgc3RhdGljIHNzaXplX3QgYXFsX3R4cV9saW1pdF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLFxcbiBcXHRcXHRcXHRcXFwiVk9cXHQldVxcdFxcdCV1XFxcXG5cXFwiXFxuIFxcdFxcdFxcdFxcXCJWSVxcdCV1XFx0XFx0JXVcXFxcblxcXCJcXG4gXFx0XFx0XFx0XFxcIkJFXFx0JXVcXHRcXHQldVxcXFxuXFxcIlxcbi1cXHRcXHRcXHRcXFwiQktcXHQldVxcdFxcdCV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXFwiQktcXHQldVxcdFxcdCV1XFxcXG5cXFwiXFxuK1xcdFxcdFxcdFxcXCJNQ1xcdCV1XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRsb2NhbC1cXHUwMDNlYXFsX3R4cV9saW1pdF9sb3dbSUVFRTgwMjExX0FDX1ZPXSxcXG4gXFx0XFx0XFx0bG9jYWwtXFx1MDAzZWFxbF90eHFfbGltaXRfaGlnaFtJRUVFODAyMTFfQUNfVk9dLFxcbiBcXHRcXHRcXHRsb2NhbC1cXHUwMDNlYXFsX3R4cV9saW1pdF9sb3dbSUVFRTgwMjExX0FDX1ZJXSxcXG5AQCAtMjQ3LDcgKzI1MCw4IEBAIHN0YXRpYyBzc2l6ZV90IGFxbF90eHFfbGltaXRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0XFx0XFx0bG9jYWwtXFx1MDAzZWFxbF90eHFfbGltaXRfbG93W0lFRUU4MDIxMV9BQ19CRV0sXFxuIFxcdFxcdFxcdGxvY2FsLVxcdTAwM2VhcWxfdHhxX2xpbWl0X2hpZ2hbSUVFRTgwMjExX0FDX0JFXSxcXG4gXFx0XFx0XFx0bG9jYWwtXFx1MDAzZWFxbF90eHFfbGltaXRfbG93W0lFRUU4MDIxMV9BQ19CS10sXFxuLVxcdFxcdFxcdGxvY2FsLVxcdTAwM2VhcWxfdHhxX2xpbWl0X2hpZ2hbSUVFRTgwMjExX0FDX0JLXSk7XFxuK1xcdFxcdFxcdGxvY2FsLVxcdTAwM2VhcWxfdHhxX2xpbWl0X2hpZ2hbSUVFRTgwMjExX0FDX0JLXSxcXG4rXFx0XFx0XFx0bG9jYWwtXFx1MDAzZWFxbF90eHFfbGltaXRfbWMpO1xcbiBcXHRyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgYnVmLCBsZW4pO1xcbiB9XFxuQEAgLTI3Myw2ICsyNzcsMTEgQEAgc3RhdGljIHNzaXplX3QgYXFsX3R4cV9saW1pdF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0ZWxzZVxcbiBcXHRcXHRidWZbY291bnRdID0gJ1xcXFwwJztcXG4gXFxuK1xcdGlmIChzc2NhbmYoYnVmLCBcXFwibWNhc3QgJXVcXFwiLCBcXHUwMDI2cV9saW1pdF9sb3cpID09IDEpIHtcXG4rXFx0XFx0bG9jYWwtXFx1MDAzZWFxbF90eHFfbGltaXRfbWMgPSBxX2xpbWl0X2xvdztcXG4rXFx0XFx0cmV0dXJuIGNvdW50O1xcbitcXHR9XFxuK1xcbiBcXHRpZiAoc3NjYW5mKGJ1ZiwgXFxcIiV1ICV1ICV1XFxcIiwgXFx1MDAyNmFjLCBcXHUwMDI2cV9saW1pdF9sb3csIFxcdTAwMjZxX2xpbWl0X2hpZ2gpICE9IDMpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmggYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxcbmluZGV4IDM0YTllYThiNmY4NTdlLi43OGZlYTdhMTdhZTc2NiAxMDA2NDRcXG4tLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxcbisrKyBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXFxuQEAgLTE0NjQsMTAgKzE0NjQsMTIgQEAgc3RydWN0IGllZWU4MDIxMV9sb2NhbCB7XFxuIFxcdHNwaW5sb2NrX3QgaGFuZGxlX3dha2VfdHhfcXVldWVfbG9jaztcXG4gXFxuIFxcdHUxNiBhaXJ0aW1lX2ZsYWdzO1xcbitcXHR1MzIgYXFsX3R4cV9saW1pdF9tYztcXG4gXFx0dTMyIGFxbF90eHFfbGltaXRfbG93W0lFRUU4MDIxMV9OVU1fQUNTXTtcXG4gXFx0dTMyIGFxbF90eHFfbGltaXRfaGlnaFtJRUVFODAyMTFfTlVNX0FDU107XFxuIFxcdHUzMiBhcWxfdGhyZXNob2xkO1xcbiBcXHRhdG9taWNfdCBhcWxfdG90YWxfcGVuZGluZ19haXJ0aW1lO1xcbitcXHRhdG9taWNfdCBhcWxfbWNfcGVuZGluZ19haXJ0aW1lO1xcbiBcXHRhdG9taWNfdCBhcWxfYWNfcGVuZGluZ19haXJ0aW1lW0lFRUU4MDIxMV9OVU1fQUNTXTtcXG4gXFxuIFxcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzICpvcHM7XFxuQEAgLTI5MzksNiArMjk0MSwxMSBAQCB1OCAqaWVlZTgwMjExX2dldF9ic3NpZChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLCBzaXplX3QgbGVuLFxcbiBcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBpZWVlODAyMTFfZXRodG9vbF9vcHM7XFxuIFxcbit1MzIgaWVlZTgwMjExX3JhdGVfZXhwZWN0ZWRfdHhfYWlydGltZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqdHhfcmF0ZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCByYXRlX2luZm8gKnJpLFxcbitcXHRcXHRcXHRcXHQgICAgICAgZW51bSBubDgwMjExX2JhbmQgYmFuZCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGJvb2wgYW1wZHUsIGludCBsZW4pO1xcbiB1MzIgaWVlZTgwMjExX2NhbGNfZXhwZWN0ZWRfdHhfYWlydGltZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLFxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWFpbi5jIGIvbmV0L21hYzgwMjExL21haW4uY1xcbmluZGV4IGViMWVhYWYzNDYxMmUxLi5iNWRjN2Y2NTliNWRlNSAxMDA2NDRcXG4tLS0gYS9uZXQvbWFjODAyMTEvbWFpbi5jXFxuKysrIGIvbmV0L21hYzgwMjExL21haW4uY1xcbkBAIC05ODgsNiArOTg4LDcgQEAgc3RydWN0IGllZWU4MDIxMV9odyAqaWVlZTgwMjExX2FsbG9jX2h3X25tKHNpemVfdCBwcml2X2RhdGFfbGVuLFxcbiBcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bG9jYWwtXFx1MDAzZXJ4X3BhdGhfbG9jayk7XFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZsb2NhbC1cXHUwMDNlcXVldWVfc3RvcF9yZWFzb25fbG9jayk7XFxuIFxcbitcXHRsb2NhbC1cXHUwMDNlYXFsX3R4cV9saW1pdF9tYyA9IElFRUU4MDIxMV9ERUZBVUxUX0FRTF9UWFFfTElNSVRfTUM7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBJRUVFODAyMTFfTlVNX0FDUzsgaSsrKSB7XFxuIFxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZsb2NhbC1cXHUwMDNlYWN0aXZlX3R4cXNbaV0pO1xcbiBcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bG9jYWwtXFx1MDAzZWFjdGl2ZV90eHFfbG9ja1tpXSk7XFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmNcXG5pbmRleCAyMmViYTBlNmU1NGM1Yi4uZDEyYWVkOWMxNzU2MTcgMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmNcXG4rKysgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uY1xcbkBAIC0yNDkxLDEzICsyNDkxLDI4IEBAIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0YV9yZWNhbGNfYWdncmVnYXRlcyk7XFxuIFxcbiB2b2lkIGllZWU4MDIxMV9zdGFfdXBkYXRlX3BlbmRpbmdfYWlydGltZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcXG4gXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTggYWMsXFxuLVxcdFxcdFxcdFxcdFxcdCAgdTE2IHR4X2FpcnRpbWUsIGJvb2wgdHhfY29tcGxldGVkKVxcbitcXHRcXHRcXHRcXHRcXHQgIHUxNiB0eF9haXJ0aW1lLCBib29sIHR4X2NvbXBsZXRlZCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBib29sIG1jYXN0KVxcbiB7XFxuIFxcdGludCB0eF9wZW5kaW5nO1xcbiBcXG4gXFx0aWYgKCF3aXBoeV9leHRfZmVhdHVyZV9pc3NldChsb2NhbC1cXHUwMDNlaHcud2lwaHksIE5MODAyMTFfRVhUX0ZFQVRVUkVfQVFMKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0aWYgKG1jYXN0KSB7XFxuK1xcdFxcdGlmICghdHhfY29tcGxldGVkKSB7XFxuK1xcdFxcdFxcdGF0b21pY19hZGQodHhfYWlydGltZSwgXFx1MDAyNmxvY2FsLVxcdTAwM2VhcWxfbWNfcGVuZGluZ19haXJ0aW1lKTtcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHR0eF9wZW5kaW5nID0gYXRvbWljX3N1Yl9yZXR1cm4odHhfYWlydGltZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZsb2NhbC1cXHUwMDNlYXFsX21jX3BlbmRpbmdfYWlydGltZSk7XFxuK1xcdFxcdGlmICh0eF9wZW5kaW5nIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0YXRvbWljX2NtcHhjaGcoXFx1MDAyNmxvY2FsLVxcdTAwM2VhcWxfbWNfcGVuZGluZ19haXJ0aW1lLFxcbitcXHRcXHRcXHRcXHQgICAgICAgdHhfcGVuZGluZywgMCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKCF0eF9jb21wbGV0ZWQpIHtcXG4gXFx0XFx0aWYgKHN0YSlcXG4gXFx0XFx0XFx0YXRvbWljX2FkZCh0eF9haXJ0aW1lLFxcbkBAIC0yNzk3LDYgKzI4MTIsMjggQEAgdm9pZCBzdGFfc2V0X2FjY3VtdWxhdGVkX3JlbW92ZWRfbGlua3Nfc2luZm8oc3RydWN0IHN0YV9pbmZvICpzdGEsXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIHUzMiBzdGFfZXN0aW1hdGVfZXhwZWN0ZWRfdGhyb3VnaHB1dChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCByYXRlX2luZm8gKnJpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYpXFxuK3tcXG4rXFx0c3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBcXHUwMDI2c3RhLVxcdTAwM2VzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZWh3O1xcbitcXHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZjtcXG4rXFx0dTMyIGR1cmF0aW9uO1xcbitcXHR1OCBiYW5kO1xcbitcXG4rXFx0Y29uZiA9IHJjdV9kZXJlZmVyZW5jZShic3NfY29uZi1cXHUwMDNlY2hhbmN0eF9jb25mKTtcXG4rXFx0aWYgKCFjb25mKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0YmFuZCA9IGNvbmYtXFx1MDAzZWRlZi5jaGFuLVxcdTAwM2ViYW5kO1xcbitcXG4rXFx0ZHVyYXRpb24gPSBpZWVlODAyMTFfcmF0ZV9leHBlY3RlZF90eF9haXJ0aW1lKGh3LCBOVUxMLCByaSwgYmFuZCwgdHJ1ZSwgMTAyNCk7XFxuK1xcdGR1cmF0aW9uICs9IGR1cmF0aW9uIFxcdTAwM2VcXHUwMDNlIDQ7IC8qIGFkZCBhc3N1bWVkIHBhY2tldCBlcnJvciByYXRlIG9mIH42JSAqL1xcbitcXHRpZiAoIWR1cmF0aW9uKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldHVybiAoKDEwMjQgKiBVU0VDX1BFUl9TRUMpIC8gZHVyYXRpb24pICogODtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgc3RhX3NldF9saW5rX3NpbmZvKHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxcbiBcXHRcXHRcXHQgICAgICAgc3RydWN0IGxpbmtfc3RhdGlvbl9pbmZvICpsaW5rX3NpbmZvLFxcbiBcXHRcXHRcXHQgICAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmssXFxuQEAgLTMwMTEsNiArMzA0OCwxMCBAQCBzdGF0aWMgdm9pZCBzdGFfc2V0X2xpbmtfc2luZm8oc3RydWN0IHN0YV9pbmZvICpzdGEsXFxuIFxcdGxpbmtfc2luZm8tXFx1MDAzZWJzc19wYXJhbS5iZWFjb25faW50ZXJ2YWwgPSBsaW5rLVxcdTAwM2Vjb25mLVxcdTAwM2ViZWFjb25faW50O1xcbiBcXG4gXFx0dGhyID0gc3RhX2dldF9leHBlY3RlZF90aHJvdWdocHV0KHN0YSk7XFxuK1xcdGlmICghdGhyIFxcdTAwMjZcXHUwMDI2IChsaW5rX3NpbmZvLVxcdTAwM2VmaWxsZWQgXFx1MDAyNiBCSVRfVUxMKE5MODAyMTFfU1RBX0lORk9fVFhfQklUUkFURSkpKVxcbitcXHRcXHR0aHIgPSBzdGFfZXN0aW1hdGVfZXhwZWN0ZWRfdGhyb3VnaHB1dChzdGEsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZsaW5rX3NpbmZvLVxcdTAwM2V0eHJhdGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGxpbmstXFx1MDAzZWNvbmYpO1xcbiBcXG4gXFx0aWYgKHRociAhPSAwKSB7XFxuIFxcdFxcdGxpbmtfc2luZm8tXFx1MDAzZWZpbGxlZCB8PVxcbkBAIC0zMjY0LDYgKzMzMDUsMTQgQEAgdm9pZCBzdGFfc2V0X3NpbmZvKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbyxcXG4gXFx0aWYgKHRociAhPSAwKSB7XFxuIFxcdFxcdHNpbmZvLVxcdTAwM2VmaWxsZWQgfD0gQklUX1VMTChOTDgwMjExX1NUQV9JTkZPX0VYUEVDVEVEX1RIUk9VR0hQVVQpO1xcbiBcXHRcXHRzaW5mby1cXHUwMDNlZXhwZWN0ZWRfdGhyb3VnaHB1dCA9IHRocjtcXG4rXFx0fSBlbHNlIGlmICghc3RhLVxcdTAwM2VzdGEudmFsaWRfbGlua3MgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgKHNpbmZvLVxcdTAwM2VmaWxsZWQgXFx1MDAyNiBCSVRfVUxMKE5MODAyMTFfU1RBX0lORk9fVFhfQklUUkFURSkpKSB7XFxuK1xcdFxcdHRociA9IHN0YV9lc3RpbWF0ZV9leHBlY3RlZF90aHJvdWdocHV0KHN0YSwgXFx1MDAyNnNpbmZvLVxcdTAwM2V0eHJhdGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZzZGF0YS1cXHUwMDNldmlmLmJzc19jb25mKTtcXG4rXFx0XFx0aWYgKHRocikge1xcbitcXHRcXHRcXHRzaW5mby1cXHUwMDNlZmlsbGVkIHw9IEJJVF9VTEwoTkw4MDIxMV9TVEFfSU5GT19FWFBFQ1RFRF9USFJPVUdIUFVUKTtcXG4rXFx0XFx0XFx0c2luZm8tXFx1MDAzZWV4cGVjdGVkX3Rocm91Z2hwdXQgPSB0aHI7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0aWYgKCEoc2luZm8tXFx1MDAzZWZpbGxlZCBcXHUwMDI2IEJJVF9VTEwoTkw4MDIxMV9TVEFfSU5GT19BQ0tfU0lHTkFMKSkgXFx1MDAyNlxcdTAwMjZcXG5AQCAtMzI4NCw2ICszMzMzLDcgQEAgdm9pZCBzdGFfc2V0X3NpbmZvKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbyxcXG4gXFx0aWYgKHN0YS1cXHUwMDNlc3RhLnZhbGlkX2xpbmtzKSB7XFxuIFxcdFxcdHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rO1xcbiBcXHRcXHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7XFxuK1xcdFxcdHUzMiBlc3RfdGhyID0gMDtcXG4gXFx0XFx0aW50IGxpbmtfaWQ7XFxuIFxcbiBcXHRcXHRzaW5mby1cXHUwMDNlbWxvX3BhcmFtc192YWxpZCA9IHRydWU7XFxuQEAgLTMyOTUsMTcgKzMzNDUsMjUgQEAgdm9pZCBzdGFfc2V0X3NpbmZvKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbyxcXG4gXFx0XFx0c2luZm8tXFx1MDAzZXZhbGlkX2xpbmtzID0gc3RhLVxcdTAwM2VzdGEudmFsaWRfbGlua3M7XFxuIFxcbiBcXHRcXHRmb3JfZWFjaF92YWxpZF9saW5rKHNpbmZvLCBsaW5rX2lkKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCBsaW5rX3N0YXRpb25faW5mbyAqbGlua19zaW5mbyA9IHNpbmZvLVxcdTAwM2VsaW5rc1tsaW5rX2lkXTtcXG4rXFxuIFxcdFxcdFxcdGxpbmtfc3RhID0gd2lwaHlfZGVyZWZlcmVuY2Uoc3RhLVxcdTAwM2Vsb2NhbC1cXHUwMDNlaHcud2lwaHksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgc3RhLVxcdTAwM2VsaW5rW2xpbmtfaWRdKTtcXG4gXFx0XFx0XFx0bGluayA9IHdpcGh5X2RlcmVmZXJlbmNlKHNkYXRhLVxcdTAwM2Vsb2NhbC1cXHUwMDNlaHcud2lwaHksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCBzZGF0YS1cXHUwMDNlbGlua1tsaW5rX2lkXSk7XFxuIFxcbi1cXHRcXHRcXHRpZiAoIWxpbmtfc3RhIHx8ICFzaW5mby1cXHUwMDNlbGlua3NbbGlua19pZF0gfHwgIWxpbmspIHtcXG4rXFx0XFx0XFx0aWYgKCFsaW5rX3N0YSB8fCAhbGlua19zaW5mbyB8fCAhbGluaykge1xcbiBcXHRcXHRcXHRcXHRzaW5mby1cXHUwMDNldmFsaWRfbGlua3MgXFx1MDAyNj0gfkJJVChsaW5rX2lkKTtcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0c3RhX3NldF9saW5rX3NpbmZvKHN0YSwgc2luZm8tXFx1MDAzZWxpbmtzW2xpbmtfaWRdLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBsaW5rLCB0aWRzdGF0cyk7XFxuK1xcdFxcdFxcdHN0YV9zZXRfbGlua19zaW5mbyhzdGEsIGxpbmtfc2luZm8sIGxpbmssIHRpZHN0YXRzKTtcXG4rXFx0XFx0XFx0aWYgKCF0aHIgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgIChsaW5rX3NpbmZvLVxcdTAwM2VmaWxsZWQgXFx1MDAyNiBCSVRfVUxMKE5MODAyMTFfU1RBX0lORk9fRVhQRUNURURfVEhST1VHSFBVVCkpKVxcbitcXHRcXHRcXHRcXHRlc3RfdGhyICs9IGxpbmtfc2luZm8tXFx1MDAzZWV4cGVjdGVkX3Rocm91Z2hwdXQ7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKGVzdF90aHIpIHtcXG4rXFx0XFx0XFx0c2luZm8tXFx1MDAzZWZpbGxlZCB8PSBCSVRfVUxMKE5MODAyMTFfU1RBX0lORk9fRVhQRUNURURfVEhST1VHSFBVVCk7XFxuK1xcdFxcdFxcdHNpbmZvLVxcdTAwM2VleHBlY3RlZF90aHJvdWdocHV0ID0gZXN0X3RocjtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmggYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uaFxcbmluZGV4IDVkYTMxNDJkODUxNmVmLi5lZTBkMzI4NzdjNWI0NyAxMDA2NDRcXG4tLS0gYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uaFxcbisrKyBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oXFxuQEAgLTE0Nyw3ICsxNDcsOCBAQCBzdHJ1Y3QgYWlydGltZV9pbmZvIHtcXG4gXFxuIHZvaWQgaWVlZTgwMjExX3N0YV91cGRhdGVfcGVuZGluZ19haXJ0aW1lKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcbiBcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1OCBhYyxcXG4tXFx0XFx0XFx0XFx0XFx0ICB1MTYgdHhfYWlydGltZSwgYm9vbCB0eF9jb21wbGV0ZWQpO1xcbitcXHRcXHRcXHRcXHRcXHQgIHUxNiB0eF9haXJ0aW1lLCBib29sIHR4X2NvbXBsZXRlZCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBib29sIG1jYXN0KTtcXG4gXFxuIHN0cnVjdCBzdGFfaW5mbztcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGF0dXMuYyBiL25ldC9tYWM4MDIxMS9zdGF0dXMuY1xcbmluZGV4IGRkMWRiYmEwNjgzOGU1Li5jNzY0ZTFhOTU0ODY5NiAxMDA2NDRcXG4tLS0gYS9uZXQvbWFjODAyMTEvc3RhdHVzLmNcXG4rKysgYi9uZXQvbWFjODAyMTEvc3RhdHVzLmNcXG5AQCAtNzc0LDcgKzc3NCw3IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yZXBvcnRfdXNlZF9za2Ioc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXFxuIFxcdFxcdGllZWU4MDIxMV9zdGFfdXBkYXRlX3BlbmRpbmdfYWlydGltZShsb2NhbCwgc3RhLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHR4X3RpbWVfZXN0LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIHRydWUpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHRydWUsIGluZm8tXFx1MDAzZXR4X3RpbWVfbWMpO1xcbiBcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0fVxcbiBcXG5AQCAtMTE4NiwxMCArMTE4NiwxMSBAQCB2b2lkIGllZWU4MDIxMV90eF9zdGF0dXNfZXh0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbiBcXHRcXHQvKiBEbyB0aGlzIGhlcmUgdG8gYXZvaWQgdGhlIGV4cGVuc2l2ZSBsb29rdXAgb2YgdGhlIHN0YVxcbiBcXHRcXHQgKiBpbiBpZWVlODAyMTFfcmVwb3J0X3VzZWRfc2tiKCkuXFxuIFxcdFxcdCAqL1xcbitcXHRcXHRib29sIG1jYXN0ID0gSUVFRTgwMjExX1NLQl9DQihza2IpLVxcdTAwM2V0eF90aW1lX21jO1xcbiBcXHRcXHRpZWVlODAyMTFfc3RhX3VwZGF0ZV9wZW5kaW5nX2FpcnRpbWUobG9jYWwsIHN0YSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICB0eF90aW1lX2VzdCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICB0cnVlKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICB0cnVlLCBtY2FzdCk7XFxuIFxcdFxcdGllZWU4MDIxMV9pbmZvX3NldF90eF90aW1lX2VzdChJRUVFODAyMTFfU0tCX0NCKHNrYiksIDApO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jXFxuaW5kZXggOTFiMTQxMTJlMjRmMDguLjg1YWZmMzc4MTkyNDJhIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS90eC5jXFxuKysrIGIvbmV0L21hYzgwMjExL3R4LmNcXG5AQCAtNDA1NCwyMCArNDA1NCwyMCBAQCBzdHJ1Y3Qgc2tfYnVmZiAqaWVlZTgwMjExX3R4X2RlcXVldWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuIGVuY2FwX291dDpcXG4gXFx0aW5mby1cXHUwMDNlY29udHJvbC52aWYgPSB2aWY7XFxuIFxcbi1cXHRpZiAodHguc3RhIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICB3aXBoeV9leHRfZmVhdHVyZV9pc3NldChsb2NhbC1cXHUwMDNlaHcud2lwaHksIE5MODAyMTFfRVhUX0ZFQVRVUkVfQVFMKSkge1xcbi1cXHRcXHRib29sIGFtcGR1ID0gdHhxLVxcdTAwM2VhYyAhPSBJRUVFODAyMTFfQUNfVk87XFxuK1xcdGlmICh3aXBoeV9leHRfZmVhdHVyZV9pc3NldChsb2NhbC1cXHUwMDNlaHcud2lwaHksIE5MODAyMTFfRVhUX0ZFQVRVUkVfQVFMKSkge1xcbitcXHRcXHRib29sIGFtcGR1ID0gdHhxLVxcdTAwM2VzdGEgXFx1MDAyNlxcdTAwMjYgdHhxLVxcdTAwM2VhYyAhPSBJRUVFODAyMTFfQUNfVk87XFxuIFxcdFxcdHUzMiBhaXJ0aW1lO1xcbiBcXG4gXFx0XFx0YWlydGltZSA9IGllZWU4MDIxMV9jYWxjX2V4cGVjdGVkX3R4X2FpcnRpbWUoaHcsIHZpZiwgdHhxLVxcdTAwM2VzdGEsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgc2tiLVxcdTAwM2VsZW4sIGFtcGR1KTtcXG4tXFx0XFx0aWYgKGFpcnRpbWUpIHtcXG4tXFx0XFx0XFx0YWlydGltZSA9IGllZWU4MDIxMV9pbmZvX3NldF90eF90aW1lX2VzdChpbmZvLCBhaXJ0aW1lKTtcXG4tXFx0XFx0XFx0aWVlZTgwMjExX3N0YV91cGRhdGVfcGVuZGluZ19haXJ0aW1lKGxvY2FsLCB0eC5zdGEsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdHhxLVxcdTAwM2VhYyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBhaXJ0aW1lLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGZhbHNlKTtcXG4tXFx0XFx0fVxcbitcXHRcXHRpZiAoIWFpcnRpbWUpXFxuK1xcdFxcdFxcdHJldHVybiBza2I7XFxuK1xcbitcXHRcXHRhaXJ0aW1lID0gaWVlZTgwMjExX2luZm9fc2V0X3R4X3RpbWVfZXN0KGluZm8sIGFpcnRpbWUpO1xcbitcXHRcXHRpbmZvLVxcdTAwM2V0eF90aW1lX21jID0gIXR4LnN0YTtcXG4rXFx0XFx0aWVlZTgwMjExX3N0YV91cGRhdGVfcGVuZGluZ19haXJ0aW1lKGxvY2FsLCB0eC5zdGEsIHR4cS1cXHUwMDNlYWMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgYWlydGltZSwgZmFsc2UsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgaW5mby1cXHUwMDNldHhfdGltZV9tYyk7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiBza2I7XFxuQEAgLTQxMTksNiArNDExOSw3IEBAIHN0cnVjdCBpZWVlODAyMTFfdHhxICppZWVlODAyMTFfbmV4dF90eHEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKVxcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqcmV0ID0gTlVMTDtcXG4gXFx0c3RydWN0IHR4cV9pbmZvICp0eHFpID0gTlVMTCwgKmhlYWQgPSBOVUxMO1xcbiBcXHRib29sIGZvdW5kX2VsaWdpYmxlX3R4cSA9IGZhbHNlO1xcbitcXHRib29sIGFxbF9jaGVjaztcXG4gXFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bG9jYWwtXFx1MDAzZWFjdGl2ZV90eHFfbG9ja1thY10pO1xcbiBcXG5AQCAtNDE0MiwyNiArNDE0MywyOCBAQCBzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqaWVlZTgwMjExX25leHRfdHhxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBhYylcXG4gXFx0aWYgKCFoZWFkKVxcbiBcXHRcXHRoZWFkID0gdHhxaTtcXG4gXFxuK1xcdGFxbF9jaGVjayA9IGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVjayhodywgXFx1MDAyNnR4cWktXFx1MDAzZXR4cSk7XFxuK1xcdGlmIChhcWxfY2hlY2spXFxuK1xcdFxcdGZvdW5kX2VsaWdpYmxlX3R4cSA9IHRydWU7XFxuK1xcbiBcXHRpZiAodHhxaS1cXHUwMDNldHhxLnN0YSkge1xcbiBcXHRcXHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IGNvbnRhaW5lcl9vZih0eHFpLVxcdTAwM2V0eHEuc3RhLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHN0YV9pbmZvLCBzdGEpO1xcbi1cXHRcXHRib29sIGFxbF9jaGVjayA9IGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVjayhodywgXFx1MDAyNnR4cWktXFx1MDAzZXR4cSk7XFxuLVxcdFxcdHMzMiBkZWZpY2l0ID0gaWVlZTgwMjExX3N0YV9kZWZpY2l0KHN0YSwgdHhxaS1cXHUwMDNldHhxLmFjKTtcXG4gXFxuLVxcdFxcdGlmIChhcWxfY2hlY2spXFxuLVxcdFxcdFxcdGZvdW5kX2VsaWdpYmxlX3R4cSA9IHRydWU7XFxuLVxcbi1cXHRcXHRpZiAoZGVmaWNpdCBcXHUwMDNjIDApXFxuK1xcdFxcdGlmIChpZWVlODAyMTFfc3RhX2RlZmljaXQoc3RhLCB0eHFpLVxcdTAwM2V0eHEuYWMpIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRcXHRzdGEtXFx1MDAzZWFpcnRpbWVbdHhxaS1cXHUwMDNldHhxLmFjXS5kZWZpY2l0ICs9XFxuIFxcdFxcdFxcdFxcdHN0YS1cXHUwMDNlYWlydGltZV93ZWlnaHQ7XFxuIFxcbi1cXHRcXHRpZiAoZGVmaWNpdCBcXHUwMDNjIDAgfHwgIWFxbF9jaGVjaykge1xcbi1cXHRcXHRcXHRsaXN0X21vdmVfdGFpbChcXHUwMDI2dHhxaS1cXHUwMDNlc2NoZWR1bGVfb3JkZXIsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2bG9jYWwtXFx1MDAzZWFjdGl2ZV90eHFzW3R4cWktXFx1MDAzZXR4cS5hY10pO1xcbi1cXHRcXHRcXHRnb3RvIGJlZ2luO1xcbitcXHRcXHRcXHRhcWxfY2hlY2sgPSBmYWxzZTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbitcXHRpZiAoIWFxbF9jaGVjaykge1xcbitcXHRcXHRsaXN0X21vdmVfdGFpbChcXHUwMDI2dHhxaS1cXHUwMDNlc2NoZWR1bGVfb3JkZXIsXFxuK1xcdFxcdFxcdFxcdCAgIFxcdTAwMjZsb2NhbC1cXHUwMDNlYWN0aXZlX3R4cXNbdHhxaS1cXHUwMDNldHhxLmFjXSk7XFxuK1xcdFxcdGdvdG8gYmVnaW47XFxuK1xcdH1cXG4rXFxuIFxcdGlmICh0eHFpLVxcdTAwM2VzY2hlZHVsZV9yb3VuZCA9PSBsb2NhbC1cXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuQEAgLTQyMjgsNyArNDIzMSw4IEBAIGJvb2wgaWVlZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuIFxcdGlmICghdHhxLVxcdTAwM2VzdGEpXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHRyZXR1cm4gYXRvbWljX3JlYWQoXFx1MDAyNmxvY2FsLVxcdTAwM2VhcWxfbWNfcGVuZGluZ19haXJ0aW1lKSBcXHUwMDNjXFxuK1xcdFxcdCAgICAgICBsb2NhbC1cXHUwMDNlYXFsX3R4cV9saW1pdF9tYztcXG4gXFxuIFxcdGlmICh1bmxpa2VseSh0eHEtXFx1MDAzZXRpZCA9PSBJRUVFODAyMTFfTlVNX1RJRFMpKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG5AQCAtNDI0OCw2ICs0MjUyLDI0IEBAIGJvb2wgaWVlZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbiB9XFxuIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrKTtcXG4gXFxuK3UzMiBpZWVlODAyMTFfdHhxX2FxbF9wZW5kaW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqdHhxKVxcbit7XFxuK1xcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpO1xcbitcXHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YTtcXG4rXFxuK1xcdGlmICh1bmxpa2VseSh0eHEtXFx1MDAzZXRpZCA9PSBJRUVFODAyMTFfTlVNX1RJRFMpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmICghdHhxLVxcdTAwM2VzdGEpXFxuK1xcdFxcdHJldHVybiBhdG9taWNfcmVhZChcXHUwMDI2bG9jYWwtXFx1MDAzZWFxbF9tY19wZW5kaW5nX2FpcnRpbWUpO1xcbitcXG4rXFx0c3RhID0gY29udGFpbmVyX29mKHR4cS1cXHUwMDNlc3RhLCBzdHJ1Y3Qgc3RhX2luZm8sIHN0YSk7XFxuK1xcbitcXHRyZXR1cm4gYXRvbWljX3JlYWQoXFx1MDAyNnN0YS1cXHUwMDNlYWlydGltZVt0eHEtXFx1MDAzZWFjXS5hcWxfdHhfcGVuZGluZyk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdHhxX2FxbF9wZW5kaW5nKTtcXG4rXFxuIHN0YXRpYyBib29sXFxuIGllZWU4MDIxMV90eHFfc2NoZWR1bGVfYWlydGltZV9jaGVjayhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTggYWMpXFxuIHtcXG5AQCAtNDI3NywxNSArNDI5OSwxNSBAQCBib29sIGllZWU4MDIxMV90eHFfbWF5X3RyYW5zbWl0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbiBcXG4gXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZsb2NhbC1cXHUwMDNlYWN0aXZlX3R4cV9sb2NrW2FjXSk7XFxuIFxcbi1cXHRpZiAoIXR4cWktXFx1MDAzZXR4cS5zdGEpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXG4gXFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNnR4cWktXFx1MDAzZXNjaGVkdWxlX29yZGVyKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHRpZiAoIWllZWU4MDIxMV90eHFfc2NoZWR1bGVfYWlydGltZV9jaGVjayhsb2NhbCwgYWMpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuK1xcdGlmICghdHhxaS1cXHUwMDNldHhxLnN0YSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaXRlciwgdG1wLCBcXHUwMDI2bG9jYWwtXFx1MDAzZWFjdGl2ZV90eHFzW2FjXSxcXG4gXFx0XFx0XFx0XFx0IHNjaGVkdWxlX29yZGVyKSB7XFxuIFxcdFxcdGlmIChpdGVyID09IHR4cWkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjU0OjMyLjIyOTUyNzU2NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjUwNzcxODE3NDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWVlZTgwMjExX3N0YV91cGRhdGVfcGVuZGluZ19haXJ0aW1lXCIsXG4gICAgXCJpZWVlODAyMTFfdHhxX2FpcnRpbWVfY2hlY2tcIixcbiAgICBcImllZWU4MDIxMV90eHFfYXFsX3BlbmRpbmdcIixcbiAgICBcImllZWU4MDIxMV9yYXRlX2V4cGVjdGVkX3R4X2FpcnRpbWVcIixcbiAgICBcInN0YV9lc3RpbWF0ZV9leHBlY3RlZF90aHJvdWdocHV0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBBaXJ0aW1lIFF1ZXVlIExpbWl0IChBUUwpIHN1cHBvcnQgZm9yIG11bHRpY2FzdCB0cmFmZmljIGFuZCBtb2RpZmllcyB0aGUgZXhwZWN0ZWQgdGhyb3VnaHB1dCBjYWxjdWxhdGlvbiBmb3Igc3RhdGlvbnMgaW4gbWFjODAyMTEuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbG9naWMgZm9yIDgwMi4xMSBuZXR3b3JraW5nIGFuZCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBtYWM4MDIxMV9od3NpbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3OWQ1ODUzOWJlYjc0MGJjNTdiNjMyZjE3ODc0NWNjNWNhODJmY2EyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjIgMTQ6NTQ6MjkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oIGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuaW5kZXggZjVhYmYxZGI3NTU4YmMuLjczNTRiYTA3OTM2M2E1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuKysrIGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuQEAgLTM3MjIsNiArMzcyMiw3IEBAIGVudW0gd2lwaHlfcGFyYW1zX2ZsYWdzIHtcbiAvKiBUaGUgcGVyIFRYUSBkZXZpY2UgcXVldWUgbGltaXQgaW4gYWlydGltZSAqL1xuICNkZWZpbmUgSUVFRTgwMjExX0RFRkFVTFRfQVFMX1RYUV9MSU1JVF9MXHQ1MDAwXG4gI2RlZmluZSBJRUVFODAyMTFfREVGQVVMVF9BUUxfVFhRX0xJTUlUX0hcdDEyMDAwXG4rI2RlZmluZSBJRUVFODAyMTFfREVGQVVMVF9BUUxfVFhRX0xJTUlUX01DXHQ1MDAwMFxuIFxuIC8qIFRoZSBwZXIgaW50ZXJmYWNlIGFpcnRpbWUgdGhyZXNob2xkIHRvIHN3aXRjaCB0byBsb3dlciBxdWV1ZSBsaW1pdCAqL1xuICNkZWZpbmUgSUVFRTgwMjExX0FRTF9USFJFU0hPTERcdFx0XHQyNDAwMFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmggYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXG5pbmRleCA0Zjk1ZGEwMjM3NDZmOS4uMjNkOGQ0NjM5Y2RkNmQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXG4rKysgYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXG5AQCAtMTM1NCw4ICsxMzU0LDggQEAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvIHtcbiBcdCAgICBzdGF0dXNfZGF0YV9pZHI6MSxcbiBcdCAgICBzdGF0dXNfZGF0YToxMyxcbiBcdCAgICBod19xdWV1ZTo0LFxuK1x0ICAgIHR4X3RpbWVfbWM6MSxcbiBcdCAgICB0eF90aW1lX2VzdDoxMDtcbi1cdC8qIDEgZnJlZSBiaXQgKi9cbiBcbiBcdHVuaW9uIHtcbiBcdFx0c3RydWN0IHtcbkBAIC02ODc2LDYgKzY4NzYsMTcgQEAgdm9pZCBpZWVlODAyMTFfc3RhX3JlZ2lzdGVyX2FpcnRpbWUoc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSwgdTggdGlkLFxuIGJvb2xcbiBpZWVlODAyMTFfdHhxX2FpcnRpbWVfY2hlY2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdHhxICp0eHEpO1xuIFxuKy8qKlxuKyAqIGllZWU4MDIxMV90eHFfYXFsX3BlbmRpbmcgLSBnZXQgcGVuZGluZyBBUUwgYWlydGltZSBmb3IgYSB0eHFcbisgKlxuKyAqIEBodzogcG9pbnRlciBvYnRhaW5lZCBmcm9tIGllZWU4MDIxMV9hbGxvY19odygpXG4rICogQHR4cTogcG9pbnRlciBvYnRhaW5lZCBmcm9tIHN0YXRpb24gb3IgdmlydHVhbCBpbnRlcmZhY2VcbisgKlxuKyAqIFJldHVybjogcGVuZGluZyBhaXJ0aW1lIChpbiB1c2VjKSBmb3IgdGhlIGdpdmVuIHR4cS5cbisgKi9cbit1MzIgaWVlZTgwMjExX3R4cV9hcWxfcGVuZGluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbitcdFx0XHQgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqdHhxKTtcbitcbiAvKipcbiAgKiBpZWVlODAyMTFfaXRlcl9rZXlzIC0gaXRlcmF0ZSBrZXlzIHByb2dyYW1tZWQgaW50byB0aGUgZGV2aWNlXG4gICogQGh3OiBwb2ludGVyIG9idGFpbmVkIGZyb20gaWVlZTgwMjExX2FsbG9jX2h3KClcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvYWlydGltZS5jIGIvbmV0L21hYzgwMjExL2FpcnRpbWUuY1xuaW5kZXggYzYxZGY2MzcyMzJhOWIuLjBjNTRjZGJkNzUzY2Q3IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2FpcnRpbWUuY1xuKysrIGIvbmV0L21hYzgwMjExL2FpcnRpbWUuY1xuQEAgLTY4NSw3ICs2ODUsNyBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9maWxsX3J4X3N0YXR1cyhzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdCxcbiBcdGlmIChpZWVlODAyMTFfZmlsbF9yYXRlX2luZm8oaHcsIHN0YXQsIGJhbmQsIHJpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAoIWllZWU4MDIxMV9yYXRlX3ZhbGlkKHJhdGUpKVxuK1x0aWYgKCFyYXRlIHx8ICFpZWVlODAyMTFfcmF0ZV92YWxpZChyYXRlKSlcbiBcdFx0cmV0dXJuIC0xO1xuIFxuIFx0aWYgKHJhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9UWF9SQ18xNjBfTUhaX1dJRFRIKVxuQEAgLTc1Myw2ICs3NTMsNTMgQEAgdTMyIGllZWU4MDIxMV9jYWxjX3R4X2FpcnRpbWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMV9jYWxjX3R4X2FpcnRpbWUpO1xuIFxuK3UzMiBpZWVlODAyMTFfcmF0ZV9leHBlY3RlZF90eF9haXJ0aW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqdHhfcmF0ZSxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgcmF0ZV9pbmZvICpyaSxcbitcdFx0XHRcdCAgICAgICBlbnVtIG5sODAyMTFfYmFuZCBiYW5kLFxuK1x0XHRcdFx0ICAgICAgIGJvb2wgYW1wZHUsIGludCBsZW4pXG4re1xuK1x0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgc3RhdDtcbitcdHUzMiBkdXJhdGlvbiwgb3ZlcmhlYWQ7XG4rXHR1OCBhZ2dfc2hpZnQ7XG4rXG4rXHRpZiAoaWVlZTgwMjExX2ZpbGxfcnhfc3RhdHVzKFx1MDAyNnN0YXQsIGh3LCB0eF9yYXRlLCByaSwgYmFuZCwgbGVuKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoc3RhdC5lbmNvZGluZyA9PSBSWF9FTkNfTEVHQUNZIHx8ICFhbXBkdSlcbitcdFx0cmV0dXJuIGllZWU4MDIxMV9jYWxjX3J4X2FpcnRpbWUoaHcsIFx1MDAyNnN0YXQsIGxlbikgKiAxMDI0O1xuK1xuK1x0ZHVyYXRpb24gPSBpZWVlODAyMTFfZ2V0X3JhdGVfZHVyYXRpb24oaHcsIFx1MDAyNnN0YXQsIFx1MDAyNm92ZXJoZWFkKTtcbitcbitcdC8qXG4rXHQgKiBBc3N1bWUgdGhhdCBIVC9WSFQgdHJhbnNtaXNzaW9uIG9uIGFueSBBQyBleGNlcHQgVk8gd2lsbFxuK1x0ICogdXNlIGFnZ3JlZ2F0aW9uLiBTaW5jZSB3ZSBkb24ndCBoYXZlIHJlbGlhYmxlIHJlcG9ydGluZ1xuK1x0ICogb2YgYWdncmVnYXRpb24gbGVuZ3RoLCBhc3N1bWUgYW4gYXZlcmFnZSBzaXplIGJhc2VkIG9uIHRoZVxuK1x0ICogdHggcmF0ZS5cbitcdCAqIFRoaXMgd2lsbCBub3QgYmUgdmVyeSBhY2N1cmF0ZSwgYnV0IG11Y2ggYmV0dGVyIHRoYW4gc2ltcGx5XG4rXHQgKiBhc3N1bWluZyB1bi1hZ2dyZWdhdGVkIHR4IGluIGFsbCBjYXNlcy5cbitcdCAqL1xuK1x0aWYgKGR1cmF0aW9uIFx1MDAzZSA0MDAgKiAxMDI0KSAvKiBcdTAwM2M9IFZIVDIwIE1DUzIgMVMgKi9cbitcdFx0YWdnX3NoaWZ0ID0gMTtcbitcdGVsc2UgaWYgKGR1cmF0aW9uIFx1MDAzZSAyNTAgKiAxMDI0KSAvKiBcdTAwM2M9IFZIVDIwIE1DUzMgMVMgb3IgTUNTMSAyUyAqL1xuK1x0XHRhZ2dfc2hpZnQgPSAyO1xuK1x0ZWxzZSBpZiAoZHVyYXRpb24gXHUwMDNlIDE1MCAqIDEwMjQpIC8qIFx1MDAzYz0gVkhUMjAgTUNTNSAxUyBvciBNQ1MyIDJTICovXG4rXHRcdGFnZ19zaGlmdCA9IDM7XG4rXHRlbHNlIGlmIChkdXJhdGlvbiBcdTAwM2UgNzAgKiAxMDI0KSAvKiBcdTAwM2M9IFZIVDIwIE1DUzUgMlMgKi9cbitcdFx0YWdnX3NoaWZ0ID0gNDtcbitcdGVsc2UgaWYgKHN0YXQuZW5jb2RpbmcgIT0gUlhfRU5DX0hFIHx8XG4rXHRcdCBkdXJhdGlvbiBcdTAwM2UgMjAgKiAxMDI0KSAvKiBcdTAwM2M9IEhFNDAgTUNTNiAyUyAqL1xuK1x0XHRhZ2dfc2hpZnQgPSA1O1xuK1x0ZWxzZVxuK1x0XHRhZ2dfc2hpZnQgPSA2O1xuK1xuK1x0ZHVyYXRpb24gKj0gbGVuO1xuK1x0ZHVyYXRpb24gLz0gQVZHX1BLVF9TSVpFO1xuK1x0ZHVyYXRpb24gKz0gKG92ZXJoZWFkICogMTAyNCBcdTAwM2VcdTAwM2UgYWdnX3NoaWZ0KTtcbitcbitcdHJldHVybiBkdXJhdGlvbjtcbit9XG4rXG4gdTMyIGllZWU4MDIxMV9jYWxjX2V4cGVjdGVkX3R4X2FpcnRpbWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLFxuQEAgLTc3NSw0NSArODIyLDEzIEBAIHUzMiBpZWVlODAyMTFfY2FsY19leHBlY3RlZF90eF9haXJ0aW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIFx0aWYgKHB1YnN0YSkge1xuIFx0XHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IGNvbnRhaW5lcl9vZihwdWJzdGEsIHN0cnVjdCBzdGFfaW5mbyxcbiBcdFx0XHRcdFx0XHQgICAgc3RhKTtcbi1cdFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgc3RhdDtcbiBcdFx0c3RydWN0IGllZWU4MDIxMV90eF9yYXRlICp0eF9yYXRlID0gXHUwMDI2c3RhLVx1MDAzZWRlZmxpbmsudHhfc3RhdHMubGFzdF9yYXRlO1xuIFx0XHRzdHJ1Y3QgcmF0ZV9pbmZvICpyaSA9IFx1MDAyNnN0YS1cdTAwM2VkZWZsaW5rLnR4X3N0YXRzLmxhc3RfcmF0ZV9pbmZvO1xuLVx0XHR1MzIgZHVyYXRpb24sIG92ZXJoZWFkO1xuLVx0XHR1OCBhZ2dfc2hpZnQ7XG4tXG4tXHRcdGlmIChpZWVlODAyMTFfZmlsbF9yeF9zdGF0dXMoXHUwMDI2c3RhdCwgaHcsIHR4X3JhdGUsIHJpLCBiYW5kLCBsZW4pKVxuLVx0XHRcdHJldHVybiAwO1xuK1x0XHR1MzIgZHVyYXRpb247XG4gXG4tXHRcdGlmIChzdGF0LmVuY29kaW5nID09IFJYX0VOQ19MRUdBQ1kgfHwgIWFtcGR1KVxuLVx0XHRcdHJldHVybiBpZWVlODAyMTFfY2FsY19yeF9haXJ0aW1lKGh3LCBcdTAwMjZzdGF0LCBsZW4pO1xuLVxuLVx0XHRkdXJhdGlvbiA9IGllZWU4MDIxMV9nZXRfcmF0ZV9kdXJhdGlvbihodywgXHUwMDI2c3RhdCwgXHUwMDI2b3ZlcmhlYWQpO1xuLVx0XHQvKlxuLVx0XHQgKiBBc3N1bWUgdGhhdCBIVC9WSFQgdHJhbnNtaXNzaW9uIG9uIGFueSBBQyBleGNlcHQgVk8gd2lsbFxuLVx0XHQgKiB1c2UgYWdncmVnYXRpb24uIFNpbmNlIHdlIGRvbid0IGhhdmUgcmVsaWFibGUgcmVwb3J0aW5nXG4tXHRcdCAqIG9mIGFnZ3JlZ2F0aW9uIGxlbmd0aCwgYXNzdW1lIGFuIGF2ZXJhZ2Ugc2l6ZSBiYXNlZCBvbiB0aGVcbi1cdFx0ICogdHggcmF0ZS5cbi1cdFx0ICogVGhpcyB3aWxsIG5vdCBiZSB2ZXJ5IGFjY3VyYXRlLCBidXQgbXVjaCBiZXR0ZXIgdGhhbiBzaW1wbHlcbi1cdFx0ICogYXNzdW1pbmcgdW4tYWdncmVnYXRlZCB0eCBpbiBhbGwgY2FzZXMuXG4tXHRcdCAqL1xuLVx0XHRpZiAoZHVyYXRpb24gXHUwMDNlIDQwMCAqIDEwMjQpIC8qIFx1MDAzYz0gVkhUMjAgTUNTMiAxUyAqL1xuLVx0XHRcdGFnZ19zaGlmdCA9IDE7XG4tXHRcdGVsc2UgaWYgKGR1cmF0aW9uIFx1MDAzZSAyNTAgKiAxMDI0KSAvKiBcdTAwM2M9IFZIVDIwIE1DUzMgMVMgb3IgTUNTMSAyUyAqL1xuLVx0XHRcdGFnZ19zaGlmdCA9IDI7XG4tXHRcdGVsc2UgaWYgKGR1cmF0aW9uIFx1MDAzZSAxNTAgKiAxMDI0KSAvKiBcdTAwM2M9IFZIVDIwIE1DUzUgMVMgb3IgTUNTMiAyUyAqL1xuLVx0XHRcdGFnZ19zaGlmdCA9IDM7XG4tXHRcdGVsc2UgaWYgKGR1cmF0aW9uIFx1MDAzZSA3MCAqIDEwMjQpIC8qIFx1MDAzYz0gVkhUMjAgTUNTNSAyUyAqL1xuLVx0XHRcdGFnZ19zaGlmdCA9IDQ7XG4tXHRcdGVsc2UgaWYgKHN0YXQuZW5jb2RpbmcgIT0gUlhfRU5DX0hFIHx8XG4tXHRcdFx0IGR1cmF0aW9uIFx1MDAzZSAyMCAqIDEwMjQpIC8qIFx1MDAzYz0gSEU0MCBNQ1M2IDJTICovXG4tXHRcdFx0YWdnX3NoaWZ0ID0gNTtcbi1cdFx0ZWxzZVxuLVx0XHRcdGFnZ19zaGlmdCA9IDY7XG4tXG4tXHRcdGR1cmF0aW9uICo9IGxlbjtcbi1cdFx0ZHVyYXRpb24gLz0gQVZHX1BLVF9TSVpFO1xuK1x0XHRkdXJhdGlvbiA9IGllZWU4MDIxMV9yYXRlX2V4cGVjdGVkX3R4X2FpcnRpbWUoaHcsIHR4X3JhdGUsIHJpLFxuK1x0XHRcdFx0XHRcdFx0ICAgICAgYmFuZCwgdHJ1ZSwgbGVuKTtcbiBcdFx0ZHVyYXRpb24gLz0gMTAyNDtcbi1cdFx0ZHVyYXRpb24gKz0gKG92ZXJoZWFkIFx1MDAzZVx1MDAzZSBhZ2dfc2hpZnQpO1xuIFxuIFx0XHRyZXR1cm4gbWF4X3QodTMyLCBkdXJhdGlvbiwgNCk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RlYnVnZnMuYyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmNcbmluZGV4IGE0ZDU0NjFmNjQ4MGYwLi44ZWJmNWJjZjNjMGVjMSAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmNcbisrKyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmNcbkBAIC0yMTAsMTEgKzIxMCwxMyBAQCBzdGF0aWMgc3NpemVfdCBhcWxfcGVuZGluZ19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRcdFwiVkkgICAgICV1IHVzXFxuXCJcbiBcdFx0XHRcIkJFICAgICAldSB1c1xcblwiXG4gXHRcdFx0XCJCSyAgICAgJXUgdXNcXG5cIlxuK1x0XHRcdFwiTUMgICAgICV1IHVzXFxuXCJcbiBcdFx0XHRcInRvdGFsICAldSB1c1xcblwiLFxuIFx0XHRcdGF0b21pY19yZWFkKFx1MDAyNmxvY2FsLVx1MDAzZWFxbF9hY19wZW5kaW5nX2FpcnRpbWVbSUVFRTgwMjExX0FDX1ZPXSksXG4gXHRcdFx0YXRvbWljX3JlYWQoXHUwMDI2bG9jYWwtXHUwMDNlYXFsX2FjX3BlbmRpbmdfYWlydGltZVtJRUVFODAyMTFfQUNfVkldKSxcbiBcdFx0XHRhdG9taWNfcmVhZChcdTAwMjZsb2NhbC1cdTAwM2VhcWxfYWNfcGVuZGluZ19haXJ0aW1lW0lFRUU4MDIxMV9BQ19CRV0pLFxuIFx0XHRcdGF0b21pY19yZWFkKFx1MDAyNmxvY2FsLVx1MDAzZWFxbF9hY19wZW5kaW5nX2FpcnRpbWVbSUVFRTgwMjExX0FDX0JLXSksXG4rXHRcdFx0YXRvbWljX3JlYWQoXHUwMDI2bG9jYWwtXHUwMDNlYXFsX21jX3BlbmRpbmdfYWlydGltZSksXG4gXHRcdFx0YXRvbWljX3JlYWQoXHUwMDI2bG9jYWwtXHUwMDNlYXFsX3RvdGFsX3BlbmRpbmdfYWlydGltZSkpO1xuIFx0cmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcyxcbiBcdFx0XHRcdCAgICAgICBidWYsIGxlbik7XG5AQCAtMjM5LDcgKzI0MSw4IEBAIHN0YXRpYyBzc2l6ZV90IGFxbF90eHFfbGltaXRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdFx0XHRcIlZPXHQldVx0XHQldVxcblwiXG4gXHRcdFx0XCJWSVx0JXVcdFx0JXVcXG5cIlxuIFx0XHRcdFwiQkVcdCV1XHRcdCV1XFxuXCJcbi1cdFx0XHRcIkJLXHQldVx0XHQldVxcblwiLFxuK1x0XHRcdFwiQktcdCV1XHRcdCV1XFxuXCJcbitcdFx0XHRcIk1DXHQldVxcblwiLFxuIFx0XHRcdGxvY2FsLVx1MDAzZWFxbF90eHFfbGltaXRfbG93W0lFRUU4MDIxMV9BQ19WT10sXG4gXHRcdFx0bG9jYWwtXHUwMDNlYXFsX3R4cV9saW1pdF9oaWdoW0lFRUU4MDIxMV9BQ19WT10sXG4gXHRcdFx0bG9jYWwtXHUwMDNlYXFsX3R4cV9saW1pdF9sb3dbSUVFRTgwMjExX0FDX1ZJXSxcbkBAIC0yNDcsNyArMjUwLDggQEAgc3RhdGljIHNzaXplX3QgYXFsX3R4cV9saW1pdF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRcdGxvY2FsLVx1MDAzZWFxbF90eHFfbGltaXRfbG93W0lFRUU4MDIxMV9BQ19CRV0sXG4gXHRcdFx0bG9jYWwtXHUwMDNlYXFsX3R4cV9saW1pdF9oaWdoW0lFRUU4MDIxMV9BQ19CRV0sXG4gXHRcdFx0bG9jYWwtXHUwMDNlYXFsX3R4cV9saW1pdF9sb3dbSUVFRTgwMjExX0FDX0JLXSxcbi1cdFx0XHRsb2NhbC1cdTAwM2VhcWxfdHhxX2xpbWl0X2hpZ2hbSUVFRTgwMjExX0FDX0JLXSk7XG4rXHRcdFx0bG9jYWwtXHUwMDNlYXFsX3R4cV9saW1pdF9oaWdoW0lFRUU4MDIxMV9BQ19CS10sXG4rXHRcdFx0bG9jYWwtXHUwMDNlYXFsX3R4cV9saW1pdF9tYyk7XG4gXHRyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLFxuIFx0XHRcdFx0ICAgICAgIGJ1ZiwgbGVuKTtcbiB9XG5AQCAtMjczLDYgKzI3NywxMSBAQCBzdGF0aWMgc3NpemVfdCBhcWxfdHhxX2xpbWl0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0ZWxzZVxuIFx0XHRidWZbY291bnRdID0gJ1xcMCc7XG4gXG4rXHRpZiAoc3NjYW5mKGJ1ZiwgXCJtY2FzdCAldVwiLCBcdTAwMjZxX2xpbWl0X2xvdykgPT0gMSkge1xuK1x0XHRsb2NhbC1cdTAwM2VhcWxfdHhxX2xpbWl0X21jID0gcV9saW1pdF9sb3c7XG4rXHRcdHJldHVybiBjb3VudDtcbitcdH1cbitcbiBcdGlmIChzc2NhbmYoYnVmLCBcIiV1ICV1ICV1XCIsIFx1MDAyNmFjLCBcdTAwMjZxX2xpbWl0X2xvdywgXHUwMDI2cV9saW1pdF9oaWdoKSAhPSAzKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaCBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXG5pbmRleCAzNGE5ZWE4YjZmODU3ZS4uNzhmZWE3YTE3YWU3NjYgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxuKysrIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbkBAIC0xNDY0LDEwICsxNDY0LDEyIEBAIHN0cnVjdCBpZWVlODAyMTFfbG9jYWwge1xuIFx0c3BpbmxvY2tfdCBoYW5kbGVfd2FrZV90eF9xdWV1ZV9sb2NrO1xuIFxuIFx0dTE2IGFpcnRpbWVfZmxhZ3M7XG4rXHR1MzIgYXFsX3R4cV9saW1pdF9tYztcbiBcdHUzMiBhcWxfdHhxX2xpbWl0X2xvd1tJRUVFODAyMTFfTlVNX0FDU107XG4gXHR1MzIgYXFsX3R4cV9saW1pdF9oaWdoW0lFRUU4MDIxMV9OVU1fQUNTXTtcbiBcdHUzMiBhcWxfdGhyZXNob2xkO1xuIFx0YXRvbWljX3QgYXFsX3RvdGFsX3BlbmRpbmdfYWlydGltZTtcbitcdGF0b21pY190IGFxbF9tY19wZW5kaW5nX2FpcnRpbWU7XG4gXHRhdG9taWNfdCBhcWxfYWNfcGVuZGluZ19haXJ0aW1lW0lFRUU4MDIxMV9OVU1fQUNTXTtcbiBcbiBcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzICpvcHM7XG5AQCAtMjkzOSw2ICsyOTQxLDExIEBAIHU4ICppZWVlODAyMTFfZ2V0X2Jzc2lkKHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsIHNpemVfdCBsZW4sXG4gXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBpZWVlODAyMTFfZXRodG9vbF9vcHM7XG4gXG4rdTMyIGllZWU4MDIxMV9yYXRlX2V4cGVjdGVkX3R4X2FpcnRpbWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICp0eF9yYXRlLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCByYXRlX2luZm8gKnJpLFxuK1x0XHRcdFx0ICAgICAgIGVudW0gbmw4MDIxMV9iYW5kIGJhbmQsXG4rXHRcdFx0XHQgICAgICAgYm9vbCBhbXBkdSwgaW50IGxlbik7XG4gdTMyIGllZWU4MDIxMV9jYWxjX2V4cGVjdGVkX3R4X2FpcnRpbWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tYWluLmMgYi9uZXQvbWFjODAyMTEvbWFpbi5jXG5pbmRleCBlYjFlYWFmMzQ2MTJlMS4uYjVkYzdmNjU5YjVkZTUgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvbWFpbi5jXG4rKysgYi9uZXQvbWFjODAyMTEvbWFpbi5jXG5AQCAtOTg4LDYgKzk4OCw3IEBAIHN0cnVjdCBpZWVlODAyMTFfaHcgKmllZWU4MDIxMV9hbGxvY19od19ubShzaXplX3QgcHJpdl9kYXRhX2xlbixcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNmxvY2FsLVx1MDAzZXJ4X3BhdGhfbG9jayk7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZsb2NhbC1cdTAwM2VxdWV1ZV9zdG9wX3JlYXNvbl9sb2NrKTtcbiBcbitcdGxvY2FsLVx1MDAzZWFxbF90eHFfbGltaXRfbWMgPSBJRUVFODAyMTFfREVGQVVMVF9BUUxfVFhRX0xJTUlUX01DO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSUVFRTgwMjExX05VTV9BQ1M7IGkrKykge1xuIFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZsb2NhbC1cdTAwM2VhY3RpdmVfdHhxc1tpXSk7XG4gXHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNmxvY2FsLVx1MDAzZWFjdGl2ZV90eHFfbG9ja1tpXSk7XG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uY1xuaW5kZXggMjJlYmEwZTZlNTRjNWIuLmQxMmFlZDljMTc1NjE3IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmNcbisrKyBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jXG5AQCAtMjQ5MSwxMyArMjQ5MSwyOCBAQCBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdGFfcmVjYWxjX2FnZ3JlZ2F0ZXMpO1xuIFxuIHZvaWQgaWVlZTgwMjExX3N0YV91cGRhdGVfcGVuZGluZ19haXJ0aW1lKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1OCBhYyxcbi1cdFx0XHRcdFx0ICB1MTYgdHhfYWlydGltZSwgYm9vbCB0eF9jb21wbGV0ZWQpXG4rXHRcdFx0XHRcdCAgdTE2IHR4X2FpcnRpbWUsIGJvb2wgdHhfY29tcGxldGVkLFxuK1x0XHRcdFx0XHQgIGJvb2wgbWNhc3QpXG4ge1xuIFx0aW50IHR4X3BlbmRpbmc7XG4gXG4gXHRpZiAoIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KGxvY2FsLVx1MDAzZWh3LndpcGh5LCBOTDgwMjExX0VYVF9GRUFUVVJFX0FRTCkpXG4gXHRcdHJldHVybjtcbiBcbitcdGlmIChtY2FzdCkge1xuK1x0XHRpZiAoIXR4X2NvbXBsZXRlZCkge1xuK1x0XHRcdGF0b21pY19hZGQodHhfYWlydGltZSwgXHUwMDI2bG9jYWwtXHUwMDNlYXFsX21jX3BlbmRpbmdfYWlydGltZSk7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4rXG4rXHRcdHR4X3BlbmRpbmcgPSBhdG9taWNfc3ViX3JldHVybih0eF9haXJ0aW1lLFxuK1x0XHRcdFx0XHQgICAgICAgXHUwMDI2bG9jYWwtXHUwMDNlYXFsX21jX3BlbmRpbmdfYWlydGltZSk7XG4rXHRcdGlmICh0eF9wZW5kaW5nIFx1MDAzYyAwKVxuK1x0XHRcdGF0b21pY19jbXB4Y2hnKFx1MDAyNmxvY2FsLVx1MDAzZWFxbF9tY19wZW5kaW5nX2FpcnRpbWUsXG4rXHRcdFx0XHQgICAgICAgdHhfcGVuZGluZywgMCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbiBcdGlmICghdHhfY29tcGxldGVkKSB7XG4gXHRcdGlmIChzdGEpXG4gXHRcdFx0YXRvbWljX2FkZCh0eF9haXJ0aW1lLFxuQEAgLTI3OTcsNiArMjgxMiwyOCBAQCB2b2lkIHN0YV9zZXRfYWNjdW11bGF0ZWRfcmVtb3ZlZF9saW5rc19zaW5mbyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbiBcdH1cbiB9XG4gXG4rc3RhdGljIHUzMiBzdGFfZXN0aW1hdGVfZXhwZWN0ZWRfdGhyb3VnaHB1dChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbitcdFx0XHRcdFx0ICAgIHN0cnVjdCByYXRlX2luZm8gKnJpLFxuK1x0XHRcdFx0XHQgICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYpXG4re1xuK1x0c3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBcdTAwMjZzdGEtXHUwMDNlc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlaHc7XG4rXHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZjtcbitcdHUzMiBkdXJhdGlvbjtcbitcdHU4IGJhbmQ7XG4rXG4rXHRjb25mID0gcmN1X2RlcmVmZXJlbmNlKGJzc19jb25mLVx1MDAzZWNoYW5jdHhfY29uZik7XG4rXHRpZiAoIWNvbmYpXG4rXHRcdHJldHVybiAwO1xuK1x0YmFuZCA9IGNvbmYtXHUwMDNlZGVmLmNoYW4tXHUwMDNlYmFuZDtcbitcbitcdGR1cmF0aW9uID0gaWVlZTgwMjExX3JhdGVfZXhwZWN0ZWRfdHhfYWlydGltZShodywgTlVMTCwgcmksIGJhbmQsIHRydWUsIDEwMjQpO1xuK1x0ZHVyYXRpb24gKz0gZHVyYXRpb24gXHUwMDNlXHUwMDNlIDQ7IC8qIGFkZCBhc3N1bWVkIHBhY2tldCBlcnJvciByYXRlIG9mIH42JSAqL1xuK1x0aWYgKCFkdXJhdGlvbilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4gKCgxMDI0ICogVVNFQ19QRVJfU0VDKSAvIGR1cmF0aW9uKSAqIDg7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHN0YV9zZXRfbGlua19zaW5mbyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbiBcdFx0XHQgICAgICAgc3RydWN0IGxpbmtfc3RhdGlvbl9pbmZvICpsaW5rX3NpbmZvLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluayxcbkBAIC0zMDExLDYgKzMwNDgsMTAgQEAgc3RhdGljIHZvaWQgc3RhX3NldF9saW5rX3NpbmZvKHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuIFx0bGlua19zaW5mby1cdTAwM2Vic3NfcGFyYW0uYmVhY29uX2ludGVydmFsID0gbGluay1cdTAwM2Vjb25mLVx1MDAzZWJlYWNvbl9pbnQ7XG4gXG4gXHR0aHIgPSBzdGFfZ2V0X2V4cGVjdGVkX3Rocm91Z2hwdXQoc3RhKTtcbitcdGlmICghdGhyIFx1MDAyNlx1MDAyNiAobGlua19zaW5mby1cdTAwM2VmaWxsZWQgXHUwMDI2IEJJVF9VTEwoTkw4MDIxMV9TVEFfSU5GT19UWF9CSVRSQVRFKSkpXG4rXHRcdHRociA9IHN0YV9lc3RpbWF0ZV9leHBlY3RlZF90aHJvdWdocHV0KHN0YSxcbitcdFx0XHRcdFx0XHQgICAgICBcdTAwMjZsaW5rX3NpbmZvLVx1MDAzZXR4cmF0ZSxcbitcdFx0XHRcdFx0XHQgICAgICBsaW5rLVx1MDAzZWNvbmYpO1xuIFxuIFx0aWYgKHRociAhPSAwKSB7XG4gXHRcdGxpbmtfc2luZm8tXHUwMDNlZmlsbGVkIHw9XG5AQCAtMzI2NCw2ICszMzA1LDE0IEBAIHZvaWQgc3RhX3NldF9zaW5mbyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgc3RydWN0IHN0YXRpb25faW5mbyAqc2luZm8sXG4gXHRpZiAodGhyICE9IDApIHtcbiBcdFx0c2luZm8tXHUwMDNlZmlsbGVkIHw9IEJJVF9VTEwoTkw4MDIxMV9TVEFfSU5GT19FWFBFQ1RFRF9USFJPVUdIUFVUKTtcbiBcdFx0c2luZm8tXHUwMDNlZXhwZWN0ZWRfdGhyb3VnaHB1dCA9IHRocjtcbitcdH0gZWxzZSBpZiAoIXN0YS1cdTAwM2VzdGEudmFsaWRfbGlua3MgXHUwMDI2XHUwMDI2XG4rXHRcdCAgIChzaW5mby1cdTAwM2VmaWxsZWQgXHUwMDI2IEJJVF9VTEwoTkw4MDIxMV9TVEFfSU5GT19UWF9CSVRSQVRFKSkpIHtcbitcdFx0dGhyID0gc3RhX2VzdGltYXRlX2V4cGVjdGVkX3Rocm91Z2hwdXQoc3RhLCBcdTAwMjZzaW5mby1cdTAwM2V0eHJhdGUsXG4rXHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2c2RhdGEtXHUwMDNldmlmLmJzc19jb25mKTtcbitcdFx0aWYgKHRocikge1xuK1x0XHRcdHNpbmZvLVx1MDAzZWZpbGxlZCB8PSBCSVRfVUxMKE5MODAyMTFfU1RBX0lORk9fRVhQRUNURURfVEhST1VHSFBVVCk7XG4rXHRcdFx0c2luZm8tXHUwMDNlZXhwZWN0ZWRfdGhyb3VnaHB1dCA9IHRocjtcbitcdFx0fVxuIFx0fVxuIFxuIFx0aWYgKCEoc2luZm8tXHUwMDNlZmlsbGVkIFx1MDAyNiBCSVRfVUxMKE5MODAyMTFfU1RBX0lORk9fQUNLX1NJR05BTCkpIFx1MDAyNlx1MDAyNlxuQEAgLTMyODQsNiArMzMzMyw3IEBAIHZvaWQgc3RhX3NldF9zaW5mbyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgc3RydWN0IHN0YXRpb25faW5mbyAqc2luZm8sXG4gXHRpZiAoc3RhLVx1MDAzZXN0YS52YWxpZF9saW5rcykge1xuIFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluaztcbiBcdFx0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhO1xuK1x0XHR1MzIgZXN0X3RociA9IDA7XG4gXHRcdGludCBsaW5rX2lkO1xuIFxuIFx0XHRzaW5mby1cdTAwM2VtbG9fcGFyYW1zX3ZhbGlkID0gdHJ1ZTtcbkBAIC0zMjk1LDE3ICszMzQ1LDI1IEBAIHZvaWQgc3RhX3NldF9zaW5mbyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgc3RydWN0IHN0YXRpb25faW5mbyAqc2luZm8sXG4gXHRcdHNpbmZvLVx1MDAzZXZhbGlkX2xpbmtzID0gc3RhLVx1MDAzZXN0YS52YWxpZF9saW5rcztcbiBcbiBcdFx0Zm9yX2VhY2hfdmFsaWRfbGluayhzaW5mbywgbGlua19pZCkge1xuK1x0XHRcdHN0cnVjdCBsaW5rX3N0YXRpb25faW5mbyAqbGlua19zaW5mbyA9IHNpbmZvLVx1MDAzZWxpbmtzW2xpbmtfaWRdO1xuK1xuIFx0XHRcdGxpbmtfc3RhID0gd2lwaHlfZGVyZWZlcmVuY2Uoc3RhLVx1MDAzZWxvY2FsLVx1MDAzZWh3LndpcGh5LFxuIFx0XHRcdFx0XHRcdCAgICAgc3RhLVx1MDAzZWxpbmtbbGlua19pZF0pO1xuIFx0XHRcdGxpbmsgPSB3aXBoeV9kZXJlZmVyZW5jZShzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2Vody53aXBoeSxcbiBcdFx0XHRcdFx0XHQgc2RhdGEtXHUwMDNlbGlua1tsaW5rX2lkXSk7XG4gXG4tXHRcdFx0aWYgKCFsaW5rX3N0YSB8fCAhc2luZm8tXHUwMDNlbGlua3NbbGlua19pZF0gfHwgIWxpbmspIHtcbitcdFx0XHRpZiAoIWxpbmtfc3RhIHx8ICFsaW5rX3NpbmZvIHx8ICFsaW5rKSB7XG4gXHRcdFx0XHRzaW5mby1cdTAwM2V2YWxpZF9saW5rcyBcdTAwMjY9IH5CSVQobGlua19pZCk7XG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR9XG4tXHRcdFx0c3RhX3NldF9saW5rX3NpbmZvKHN0YSwgc2luZm8tXHUwMDNlbGlua3NbbGlua19pZF0sXG4tXHRcdFx0XHRcdCAgIGxpbmssIHRpZHN0YXRzKTtcbitcdFx0XHRzdGFfc2V0X2xpbmtfc2luZm8oc3RhLCBsaW5rX3NpbmZvLCBsaW5rLCB0aWRzdGF0cyk7XG4rXHRcdFx0aWYgKCF0aHIgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIChsaW5rX3NpbmZvLVx1MDAzZWZpbGxlZCBcdTAwMjYgQklUX1VMTChOTDgwMjExX1NUQV9JTkZPX0VYUEVDVEVEX1RIUk9VR0hQVVQpKSlcbitcdFx0XHRcdGVzdF90aHIgKz0gbGlua19zaW5mby1cdTAwM2VleHBlY3RlZF90aHJvdWdocHV0O1xuK1x0XHR9XG4rXHRcdGlmIChlc3RfdGhyKSB7XG4rXHRcdFx0c2luZm8tXHUwMDNlZmlsbGVkIHw9IEJJVF9VTEwoTkw4MDIxMV9TVEFfSU5GT19FWFBFQ1RFRF9USFJPVUdIUFVUKTtcbitcdFx0XHRzaW5mby1cdTAwM2VleHBlY3RlZF90aHJvdWdocHV0ID0gZXN0X3RocjtcbiBcdFx0fVxuIFx0fVxuIH1cbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uaCBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oXG5pbmRleCA1ZGEzMTQyZDg1MTZlZi4uZWUwZDMyODc3YzViNDcgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uaFxuKysrIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmhcbkBAIC0xNDcsNyArMTQ3LDggQEAgc3RydWN0IGFpcnRpbWVfaW5mbyB7XG4gXG4gdm9pZCBpZWVlODAyMTFfc3RhX3VwZGF0ZV9wZW5kaW5nX2FpcnRpbWUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4gXHRcdFx0XHRcdCAgc3RydWN0IHN0YV9pbmZvICpzdGEsIHU4IGFjLFxuLVx0XHRcdFx0XHQgIHUxNiB0eF9haXJ0aW1lLCBib29sIHR4X2NvbXBsZXRlZCk7XG4rXHRcdFx0XHRcdCAgdTE2IHR4X2FpcnRpbWUsIGJvb2wgdHhfY29tcGxldGVkLFxuK1x0XHRcdFx0XHQgIGJvb2wgbWNhc3QpO1xuIFxuIHN0cnVjdCBzdGFfaW5mbztcbiBcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc3RhdHVzLmMgYi9uZXQvbWFjODAyMTEvc3RhdHVzLmNcbmluZGV4IGRkMWRiYmEwNjgzOGU1Li5jNzY0ZTFhOTU0ODY5NiAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9zdGF0dXMuY1xuKysrIGIvbmV0L21hYzgwMjExL3N0YXR1cy5jXG5AQCAtNzc0LDcgKzc3NCw3IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yZXBvcnRfdXNlZF9za2Ioc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4gXHRcdGllZWU4MDIxMV9zdGFfdXBkYXRlX3BlbmRpbmdfYWlydGltZShsb2NhbCwgc3RhLFxuIFx0XHRcdFx0XHRcdCAgICAgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYiksXG4gXHRcdFx0XHRcdFx0ICAgICB0eF90aW1lX2VzdCxcbi1cdFx0XHRcdFx0XHQgICAgIHRydWUpO1xuK1x0XHRcdFx0XHRcdCAgICAgdHJ1ZSwgaW5mby1cdTAwM2V0eF90aW1lX21jKTtcbiBcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHR9XG4gXG5AQCAtMTE4NiwxMCArMTE4NiwxMSBAQCB2b2lkIGllZWU4MDIxMV90eF9zdGF0dXNfZXh0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIFx0XHQvKiBEbyB0aGlzIGhlcmUgdG8gYXZvaWQgdGhlIGV4cGVuc2l2ZSBsb29rdXAgb2YgdGhlIHN0YVxuIFx0XHQgKiBpbiBpZWVlODAyMTFfcmVwb3J0X3VzZWRfc2tiKCkuXG4gXHRcdCAqL1xuK1x0XHRib29sIG1jYXN0ID0gSUVFRTgwMjExX1NLQl9DQihza2IpLVx1MDAzZXR4X3RpbWVfbWM7XG4gXHRcdGllZWU4MDIxMV9zdGFfdXBkYXRlX3BlbmRpbmdfYWlydGltZShsb2NhbCwgc3RhLFxuIFx0XHRcdFx0XHRcdCAgICAgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYiksXG4gXHRcdFx0XHRcdFx0ICAgICB0eF90aW1lX2VzdCxcbi1cdFx0XHRcdFx0XHQgICAgIHRydWUpO1xuK1x0XHRcdFx0XHRcdCAgICAgdHJ1ZSwgbWNhc3QpO1xuIFx0XHRpZWVlODAyMTFfaW5mb19zZXRfdHhfdGltZV9lc3QoSUVFRTgwMjExX1NLQl9DQihza2IpLCAwKTtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jXG5pbmRleCA5MWIxNDExMmUyNGYwOC4uODVhZmYzNzgxOTI0MmEgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvdHguY1xuKysrIGIvbmV0L21hYzgwMjExL3R4LmNcbkBAIC00MDU0LDIwICs0MDU0LDIwIEBAIHN0cnVjdCBza19idWZmICppZWVlODAyMTFfdHhfZGVxdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBlbmNhcF9vdXQ6XG4gXHRpbmZvLVx1MDAzZWNvbnRyb2wudmlmID0gdmlmO1xuIFxuLVx0aWYgKHR4LnN0YSBcdTAwMjZcdTAwMjZcbi1cdCAgICB3aXBoeV9leHRfZmVhdHVyZV9pc3NldChsb2NhbC1cdTAwM2Vody53aXBoeSwgTkw4MDIxMV9FWFRfRkVBVFVSRV9BUUwpKSB7XG4tXHRcdGJvb2wgYW1wZHUgPSB0eHEtXHUwMDNlYWMgIT0gSUVFRTgwMjExX0FDX1ZPO1xuK1x0aWYgKHdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KGxvY2FsLVx1MDAzZWh3LndpcGh5LCBOTDgwMjExX0VYVF9GRUFUVVJFX0FRTCkpIHtcbitcdFx0Ym9vbCBhbXBkdSA9IHR4cS1cdTAwM2VzdGEgXHUwMDI2XHUwMDI2IHR4cS1cdTAwM2VhYyAhPSBJRUVFODAyMTFfQUNfVk87XG4gXHRcdHUzMiBhaXJ0aW1lO1xuIFxuIFx0XHRhaXJ0aW1lID0gaWVlZTgwMjExX2NhbGNfZXhwZWN0ZWRfdHhfYWlydGltZShodywgdmlmLCB0eHEtXHUwMDNlc3RhLFxuIFx0XHRcdFx0XHRcdFx0ICAgICBza2ItXHUwMDNlbGVuLCBhbXBkdSk7XG4tXHRcdGlmIChhaXJ0aW1lKSB7XG4tXHRcdFx0YWlydGltZSA9IGllZWU4MDIxMV9pbmZvX3NldF90eF90aW1lX2VzdChpbmZvLCBhaXJ0aW1lKTtcbi1cdFx0XHRpZWVlODAyMTFfc3RhX3VwZGF0ZV9wZW5kaW5nX2FpcnRpbWUobG9jYWwsIHR4LnN0YSxcbi1cdFx0XHRcdFx0XHRcdCAgICAgdHhxLVx1MDAzZWFjLFxuLVx0XHRcdFx0XHRcdFx0ICAgICBhaXJ0aW1lLFxuLVx0XHRcdFx0XHRcdFx0ICAgICBmYWxzZSk7XG4tXHRcdH1cbitcdFx0aWYgKCFhaXJ0aW1lKVxuK1x0XHRcdHJldHVybiBza2I7XG4rXG4rXHRcdGFpcnRpbWUgPSBpZWVlODAyMTFfaW5mb19zZXRfdHhfdGltZV9lc3QoaW5mbywgYWlydGltZSk7XG4rXHRcdGluZm8tXHUwMDNldHhfdGltZV9tYyA9ICF0eC5zdGE7XG4rXHRcdGllZWU4MDIxMV9zdGFfdXBkYXRlX3BlbmRpbmdfYWlydGltZShsb2NhbCwgdHguc3RhLCB0eHEtXHUwMDNlYWMsXG4rXHRcdFx0XHRcdFx0ICAgICBhaXJ0aW1lLCBmYWxzZSxcbitcdFx0XHRcdFx0XHQgICAgIGluZm8tXHUwMDNldHhfdGltZV9tYyk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gc2tiO1xuQEAgLTQxMTksNiArNDExOSw3IEBAIHN0cnVjdCBpZWVlODAyMTFfdHhxICppZWVlODAyMTFfbmV4dF90eHEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKVxuIFx0c3RydWN0IGllZWU4MDIxMV90eHEgKnJldCA9IE5VTEw7XG4gXHRzdHJ1Y3QgdHhxX2luZm8gKnR4cWkgPSBOVUxMLCAqaGVhZCA9IE5VTEw7XG4gXHRib29sIGZvdW5kX2VsaWdpYmxlX3R4cSA9IGZhbHNlO1xuK1x0Ym9vbCBhcWxfY2hlY2s7XG4gXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2bG9jYWwtXHUwMDNlYWN0aXZlX3R4cV9sb2NrW2FjXSk7XG4gXG5AQCAtNDE0MiwyNiArNDE0MywyOCBAQCBzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqaWVlZTgwMjExX25leHRfdHhxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBhYylcbiBcdGlmICghaGVhZClcbiBcdFx0aGVhZCA9IHR4cWk7XG4gXG4rXHRhcWxfY2hlY2sgPSBpZWVlODAyMTFfdHhxX2FpcnRpbWVfY2hlY2soaHcsIFx1MDAyNnR4cWktXHUwMDNldHhxKTtcbitcdGlmIChhcWxfY2hlY2spXG4rXHRcdGZvdW5kX2VsaWdpYmxlX3R4cSA9IHRydWU7XG4rXG4gXHRpZiAodHhxaS1cdTAwM2V0eHEuc3RhKSB7XG4gXHRcdHN0cnVjdCBzdGFfaW5mbyAqc3RhID0gY29udGFpbmVyX29mKHR4cWktXHUwMDNldHhxLnN0YSxcbiBcdFx0XHRcdFx0XHQgICAgc3RydWN0IHN0YV9pbmZvLCBzdGEpO1xuLVx0XHRib29sIGFxbF9jaGVjayA9IGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVjayhodywgXHUwMDI2dHhxaS1cdTAwM2V0eHEpO1xuLVx0XHRzMzIgZGVmaWNpdCA9IGllZWU4MDIxMV9zdGFfZGVmaWNpdChzdGEsIHR4cWktXHUwMDNldHhxLmFjKTtcbiBcbi1cdFx0aWYgKGFxbF9jaGVjaylcbi1cdFx0XHRmb3VuZF9lbGlnaWJsZV90eHEgPSB0cnVlO1xuLVxuLVx0XHRpZiAoZGVmaWNpdCBcdTAwM2MgMClcbitcdFx0aWYgKGllZWU4MDIxMV9zdGFfZGVmaWNpdChzdGEsIHR4cWktXHUwMDNldHhxLmFjKSBcdTAwM2MgMCkge1xuIFx0XHRcdHN0YS1cdTAwM2VhaXJ0aW1lW3R4cWktXHUwMDNldHhxLmFjXS5kZWZpY2l0ICs9XG4gXHRcdFx0XHRzdGEtXHUwMDNlYWlydGltZV93ZWlnaHQ7XG4gXG4tXHRcdGlmIChkZWZpY2l0IFx1MDAzYyAwIHx8ICFhcWxfY2hlY2spIHtcbi1cdFx0XHRsaXN0X21vdmVfdGFpbChcdTAwMjZ0eHFpLVx1MDAzZXNjaGVkdWxlX29yZGVyLFxuLVx0XHRcdFx0ICAgICAgIFx1MDAyNmxvY2FsLVx1MDAzZWFjdGl2ZV90eHFzW3R4cWktXHUwMDNldHhxLmFjXSk7XG4tXHRcdFx0Z290byBiZWdpbjtcbitcdFx0XHRhcWxfY2hlY2sgPSBmYWxzZTtcbiBcdFx0fVxuIFx0fVxuIFxuK1x0aWYgKCFhcWxfY2hlY2spIHtcbitcdFx0bGlzdF9tb3ZlX3RhaWwoXHUwMDI2dHhxaS1cdTAwM2VzY2hlZHVsZV9vcmRlcixcbitcdFx0XHRcdCAgIFx1MDAyNmxvY2FsLVx1MDAzZWFjdGl2ZV90eHFzW3R4cWktXHUwMDNldHhxLmFjXSk7XG4rXHRcdGdvdG8gYmVnaW47XG4rXHR9XG4rXG4gXHRpZiAodHhxaS1cdTAwM2VzY2hlZHVsZV9yb3VuZCA9PSBsb2NhbC1cdTAwM2VzY2hlZHVsZV9yb3VuZFthY10pXG4gXHRcdGdvdG8gb3V0O1xuIFxuQEAgLTQyMjgsNyArNDIzMSw4IEBAIGJvb2wgaWVlZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdGlmICghdHhxLVx1MDAzZXN0YSlcbi1cdFx0cmV0dXJuIHRydWU7XG4rXHRcdHJldHVybiBhdG9taWNfcmVhZChcdTAwMjZsb2NhbC1cdTAwM2VhcWxfbWNfcGVuZGluZ19haXJ0aW1lKSBcdTAwM2NcbitcdFx0ICAgICAgIGxvY2FsLVx1MDAzZWFxbF90eHFfbGltaXRfbWM7XG4gXG4gXHRpZiAodW5saWtlbHkodHhxLVx1MDAzZXRpZCA9PSBJRUVFODAyMTFfTlVNX1RJRFMpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbkBAIC00MjQ4LDYgKzQyNTIsMjQgQEAgYm9vbCBpZWVlODAyMTFfdHhxX2FpcnRpbWVfY2hlY2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gfVxuIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrKTtcbiBcbit1MzIgaWVlZTgwMjExX3R4cV9hcWxfcGVuZGluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbitcdFx0XHQgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqdHhxKVxuK3tcbitcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpO1xuK1x0c3RydWN0IHN0YV9pbmZvICpzdGE7XG4rXG4rXHRpZiAodW5saWtlbHkodHhxLVx1MDAzZXRpZCA9PSBJRUVFODAyMTFfTlVNX1RJRFMpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmICghdHhxLVx1MDAzZXN0YSlcbitcdFx0cmV0dXJuIGF0b21pY19yZWFkKFx1MDAyNmxvY2FsLVx1MDAzZWFxbF9tY19wZW5kaW5nX2FpcnRpbWUpO1xuK1xuK1x0c3RhID0gY29udGFpbmVyX29mKHR4cS1cdTAwM2VzdGEsIHN0cnVjdCBzdGFfaW5mbywgc3RhKTtcbitcbitcdHJldHVybiBhdG9taWNfcmVhZChcdTAwMjZzdGEtXHUwMDNlYWlydGltZVt0eHEtXHUwMDNlYWNdLmFxbF90eF9wZW5kaW5nKTtcbit9XG4rRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdHhxX2FxbF9wZW5kaW5nKTtcbitcbiBzdGF0aWMgYm9vbFxuIGllZWU4MDIxMV90eHFfc2NoZWR1bGVfYWlydGltZV9jaGVjayhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTggYWMpXG4ge1xuQEAgLTQyNzcsMTUgKzQyOTksMTUgQEAgYm9vbCBpZWVlODAyMTFfdHhxX21heV90cmFuc21pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZsb2NhbC1cdTAwM2VhY3RpdmVfdHhxX2xvY2tbYWNdKTtcbiBcbi1cdGlmICghdHhxaS1cdTAwM2V0eHEuc3RhKVxuLVx0XHRnb3RvIG91dDtcbi1cbiBcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnR4cWktXHUwMDNlc2NoZWR1bGVfb3JkZXIpKVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdGlmICghaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9haXJ0aW1lX2NoZWNrKGxvY2FsLCBhYykpXG4gXHRcdGdvdG8gb3V0O1xuIFxuK1x0aWYgKCF0eHFpLVx1MDAzZXR4cS5zdGEpXG4rXHRcdGdvdG8gb3V0O1xuK1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGl0ZXIsIHRtcCwgXHUwMDI2bG9jYWwtXHUwMDNlYWN0aXZlX3R4cXNbYWNdLFxuIFx0XHRcdFx0IHNjaGVkdWxlX29yZGVyKSB7XG4gXHRcdGlmIChpdGVyID09IHR4cWkpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNDo1NDozMi4yMjk1Mjk1MDVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjA5NDM5MTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgbWFjODAyMTEgUGF0Y2ggZm9yIEFRTCBhbmQgVGhyb3VnaHB1dCBNb2RpZmljYXRpb25zKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyBtYWtpbmcgc29tZSBpbnRlcmVzdGluZyBjaGFuZ2VzIHRvIHRoZSBgbWFjODAyMTFgIHdpcmVsZXNzIHN0YWNrLiBMb29rcyBsaWtlIGl0J3MgYWRkaW5nIEFpcnRpbWUgUXVldWUgTGltaXQgKEFRTCkgc3VwcG9ydCwgc3BlY2lmaWNhbGx5IGZvciBtdWx0aWNhc3QgdHJhZmZpYyDigJMgdGhhdCdzIGEga2V5IGFyZWEgdG8gb3B0aW1pemUuIEl0J3MgYWxzbyBtb2RpZnlpbmcgaG93IHRoZSBleHBlY3RlZCB0aHJvdWdocHV0IGZvciBzdGF0aW9ucyBpcyBjYWxjdWxhdGVkLiBUaGF0J3MgaW50cmlndWluZzsgZ2V0dGluZyB0aG9zZSB0aHJvdWdocHV0IGVzdGltYXRpb25zIHJpZ2h0IGlzIGNydWNpYWwgZm9yIGFpcnRpbWUgZmFpcm5lc3MgYW5kIG92ZXJhbGwgcGVyZm9ybWFuY2UuXG5cbkkgc2VlIGl0IHRvdWNoZXMgcXVpdGUgYSBmZXcgY29yZSBmaWxlczogYGNmZzgwMjExLmhgLCBgbWFjODAyMTEuaGAsIHRoZSBhaXJ0aW1lIGltcGxlbWVudGF0aW9uIChgYWlydGltZS5jYCksIGRlYnVnIGZhY2lsaXRpZXMsIGludGVybmFsIElFRUU4MDIxMSBzdHJ1Y3R1cmVzLCB0aGUgbWFpbiBtb2R1bGUgKGBtYWluLmNgKSwgc3RhdGlvbiBpbmZvcm1hdGlvbiBtYW5hZ2VtZW50IChgc3RhX2luZm8uY2AsIGBzdGFfaW5mby5oYCksIHN0YXR1cyB1cGRhdGVzLCBhbmQgdGhlIHRyYW5zbWl0IHBhdGggKGB0eC5jYCkuIFRoYXQgaW5kaWNhdGVzIGl04oCZcyByZWFsbHkgZ2V0dGluZyBpbnRvIHRoZSBoZWFydCBvZiB0aGUgc3RhY2suXG5cbk5vdywgSSBuZWVkIHRvIHZlcmlmeSBpdHMgcmVhY2hhYmlsaXR5IGFuZCBmdW5jdGlvbmFsaXR5LiBTaW5jZSBpdCdzIG1vZGlmeWluZyB0aGUgY29yZSBsb2dpYyByZWxhdGVkIHRvIGFpcnRpbWUgY2FsY3VsYXRpb25zLCB0cmFuc21pc3Npb24gcXVldWUgKHR4cSkgYWlydGltZSBjaGVja3MsIGFuZCBzdGF0aW9uIHRocm91Z2hwdXQsIEkgbmVlZCB0byBrbm93IGhvdyB0byB0ZXN0IHRoaXMuIEkgdGhpbmsgSSBjYW4gdXNlIGBtYWM4MDIxMV9od3NpbWAgdG8gcmVhY2ggaXQsIHdoaWNoIGlzIGlkZWFsIGZvciB0aGlzIGtpbmQgb2YgbG93LWxldmVsIG1vZGlmaWNhdGlvbi5cblxuQmVmb3JlIEkgZ28gZnVydGhlciwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gTmF0dXJhbGx5LCBgTUFDODAyMTFgIGl0c2VsZiBpcyBhIGdpdmVuLiBJIHNob3VsZCBzZWFyY2ggdGhlIEtjb25maWcgZmlsZXMgZm9yIGFueSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBBUUwgc3BlY2lmaWNhbGx5LCBwYXJ0aWN1bGFybHkgYE5MODAyMTFfRVhUX0ZFQVRVUkVfQVFMYCBvciBqdXN0IGBBUUxgIHRvIG1ha2Ugc3VyZSB0aGUgZmVhdHVyZSBpcyBwcm9wZXJseSBlbmFibGVkLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDUxMSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjU0OjM4LjgzODk3MTYxNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjQzMzEyODMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkFRTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTEvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTQ6NTQ6MzkuMDYzMzE0MTA4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU5MjA0Mjk3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6XG5cbioqRGlnZ2luZyBpbnRvIG1hYzgwMjExIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhpcyBwcm9ibGVtLCBJIHdhbnQgdG8gbWFrZSBzdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgc29tZXRoaW5nIG9idmlvdXMuIFRoZSBmaXJzdCB0aGluZyBJJ20gZ29pbmcgdG8gZG8gaXMgcXVpY2tseSBzY2FuIG15IG1lbnRhbCBkYXRhYmFzZS4gVGhlcmUncyBhIGdvb2QgY2hhbmNlIEkgYWxyZWFkeSBrbm93IHRoaXMsIGJ1dCBsZXQncyBqdXN0IG1ha2UgYWJzb2x1dGVseSBjZXJ0YWluLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gc3BlY2lmaWNhbGx5IGNoZWNrIGZvciBhbnl0aGluZyByZWxhdGVkIHRvICptYWM4MDIxMSogY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwgaGVyZS4gQXJlIHRoZXJlIGFueSBjdXN0b20gZGlyZWN0aXZlcywgbW9kdWxlIHBhcmFtZXRlcnMsIG9yIHF1aXJrcyB0aGF0IG1pZ2h0IGJlIGluZmx1ZW5jaW5nIHRoZSBiZWhhdmlvciBJJ20gc2VlaW5nPyBJJ20gdGFsa2luZyBhYm91dCBhbnl0aGluZyB0aGF0IGNvdWxkIGJlIGEgc3BlY2lmaWMsIHRhcmdldGVkIHNldHRpbmcgZm9yIHRoYXQgc3Vic3lzdGVtLCBiZWZvcmUgSSBzdGFydCBsb29raW5nIGF0IG1vcmUgZ2VuZXJpYyBrZXJuZWwgb3Igc3lzdGVtLXdpZGUgc2V0dGluZ3MuIEl0J3Mgb2Z0ZW4gdGhlIGNhc2UgdGhhdCBzb21lIHN1YnRsZSBjb25maWd1cmF0aW9uIGlzIGp1c3Qgb3Zlcmxvb2tlZCBpbiB0aGUgbm9pc2UuIEkgd291bGQgaGF0ZSB0byBzcGVuZCBtb3JlIHRoYW4gYSBtaW51dGUgb24gYSBjb21wbGV4IHNvbHV0aW9uIG9ubHkgdG8gcmVhbGlzZSB0aGF0IGEgc2ltcGxlIGNvbmZpZyB3YXMgbWlzc2VkLiBMZXQncyBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIHNvbWV0aGluZyBiYXNpYyB0aGF0J3Mgc3BlY2lmaWMgdG8gdGhlIG1hYzgwMjExIGRyaXZlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyNTgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNDo1NDo0NC42NTUzNjA0NzlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg4MDU3NzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQUM4MDIxMVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTEvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI6Y29uZmlnIE1BQzgwMjExXFxubmV0L21hYzgwMjExL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBJRUVFIDgwMi4xMSBOZXR3b3JraW5nIFN0YWNrIChtYWM4MDIxMSlcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZz0xOT1pZiBNQUM4MDIxMSAhPSBuXFxubmV0L21hYzgwMjExL0tjb25maWctMjAtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjE6Y29uZmlnIE1BQzgwMjExX0hBU19SQ1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyLVxcdGJvb2xcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMy1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNDpjb25maWcgTUFDODAyMTFfUkNfTUlOU1RSRUxcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNS1cXHRib29sIFxcXCJNaW5zdHJlbFxcXCIgaWYgRVhQRVJUXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZz0zMT1jaG9pY2VcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQwLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjQxOmNvbmZpZyBNQUM4MDIxMV9SQ19ERUZBVUxUX01JTlNUUkVMXFxubmV0L21hYzgwMjExL0tjb25maWctNDItXFx0Ym9vbCBcXFwiTWluc3RyZWxcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZz00OD1lbmRjaG9pY2VcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00OS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo1MDpjb25maWcgTUFDODAyMTFfUkNfREVGQVVMVFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTUxLVxcdHN0cmluZ1xcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9NTc9Y29tbWVudCBcXFwiU29tZSB3aXJlbGVzcyBkcml2ZXJzIHJlcXVpcmUgYSByYXRlIGNvbnRyb2wgYWxnb3JpdGhtXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctNTktXFxubmV0L21hYzgwMjExL0tjb25maWc6NjA6Y29uZmlnIE1BQzgwMjExX0tVTklUX1RFU1RcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02MS1cXHR0cmlzdGF0ZSBcXFwiS1VuaXQgdGVzdHMgZm9yIG1hYzgwMjExXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02OS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3MDpjb25maWcgTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTcxLVxcdGJvb2wgXFxcIkVuYWJsZSBtYWM4MDIxMSBtZXNoIG5ldHdvcmtpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTc4LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjc5OmNvbmZpZyBNQUM4MDIxMV9MRURTXFxubmV0L21hYzgwMjExL0tjb25maWctODAtXFx0Ym9vbCBcXFwiRW5hYmxlIExFRCB0cmlnZ2Vyc1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTg3LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjg4OmNvbmZpZyBNQUM4MDIxMV9ERUJVR0ZTXFxubmV0L21hYzgwMjExL0tjb25maWctODktXFx0Ym9vbCBcXFwiRXhwb3J0IG1hYzgwMjExIGludGVybmFscyBpbiBEZWJ1Z0ZTXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctOTYtXFxubmV0L21hYzgwMjExL0tjb25maWc6OTc6Y29uZmlnIE1BQzgwMjExX01FU1NBR0VfVFJBQ0lOR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTk4LVxcdGJvb2wgXFxcIlRyYWNlIGFsbCBtYWM4MDIxMSBkZWJ1ZyBtZXNzYWdlc1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEwOS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMTA6bWVudWNvbmZpZyBNQUM4MDIxMV9ERUJVR19NRU5VXFxubmV0L21hYzgwMjExL0tjb25maWctMTExLVxcdGJvb2wgXFxcIlNlbGVjdCBtYWM4MDIxMSBkZWJ1Z2dpbmcgZmVhdHVyZXNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTUtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTE2OmNvbmZpZyBNQUM4MDIxMV9OT0lOTElORVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExNy1cXHRib29sIFxcXCJEbyBub3QgaW5saW5lIFRYL1JYIGhhbmRsZXJzXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTMxLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjEzMjpjb25maWcgTUFDODAyMTFfVkVSQk9TRV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEzMy1cXHRib29sIFxcXCJWZXJib3NlIGRlYnVnZ2luZyBvdXRwdXRcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNDItXFxubmV0L21hYzgwMjExL0tjb25maWc6MTQzOmNvbmZpZyBNQUM4MDIxMV9NTE1FX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTQ0LVxcdGJvb2wgXFxcIlZlcmJvc2UgbWFuYWdlZCBNTE1FIG91dHB1dFxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE1My1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNTQ6Y29uZmlnIE1BQzgwMjExX1NUQV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE1NS1cXHRib29sIFxcXCJWZXJib3NlIHN0YXRpb24gZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTYyLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE2Mzpjb25maWcgTUFDODAyMTFfSFRfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNjQtXFx0Ym9vbCBcXFwiVmVyYm9zZSBIVCBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNzQtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTc1OmNvbmZpZyBNQUM4MDIxMV9PQ0JfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNzYtXFx0Ym9vbCBcXFwiVmVyYm9zZSBPQ0IgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTg1LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE4Njpjb25maWcgTUFDODAyMTFfSUJTU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4Ny1cXHRib29sIFxcXCJWZXJib3NlIElCU1MgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTk2LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE5Nzpjb25maWcgTUFDODAyMTFfUFNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xOTgtXFx0Ym9vbCBcXFwiVmVyYm9zZSBwb3dlcnNhdmUgbW9kZSBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMDgtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjA5OmNvbmZpZyBNQUM4MDIxMV9NUExfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMTAtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHBlZXIgbGluayBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMjEtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjIyOmNvbmZpZyBNQUM4MDIxMV9NUEFUSF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyMy1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggcGF0aCBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzQtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjM1OmNvbmZpZyBNQUM4MDIxMV9NSFdNUF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzNi1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggSFdNUCByb3V0aW5nIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0Ny1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNDg6Y29uZmlnIE1BQzgwMjExX01FU0hfU1lOQ19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0OS1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggc3luY2hyb25pemF0aW9uIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1OC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNTk6Y29uZmlnIE1BQzgwMjExX01FU0hfQ1NBX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjYwLVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBjaGFubmVsIHN3aXRjaCBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjktXFxubmV0L21hYzgwMjExL0tjb25maWc6MjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIX1BTX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjcxLVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBwb3dlcnNhdmUgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjgwLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI4MTpjb25maWcgTUFDODAyMTFfVERMU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4Mi1cXHRib29sIFxcXCJWZXJib3NlIFRETFMgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjkyLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI5Mzpjb25maWcgTUFDODAyMTFfREVCVUdfQ09VTlRFUlNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yOTQtXFx0Ym9vbCBcXFwiRXh0cmEgc3RhdGlzdGljcyBmb3IgVFgvUlggZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMzA3LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjMwODpjb25maWcgTUFDODAyMTFfU1RBX0hBU0hfTUFYX1NJWkVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zMDktXFx0aW50IFxcXCJTdGF0aW9uIGhhc2ggdGFibGUgbWF4aW11bSBzaXplXFxcIiBpZiBNQUM4MDIxMV9ERUJVR19NRU5VXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjU0OjQ0Ljg0MzQyNDY5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODYzNjM1MTA3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1hYzgwMjExIEFpcnRpbWUgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIGNhbiBzZWUgaXQncyB0b3VjaGluZyBzb21lIGNyaXRpY2FsIHBhcnRzIG9mIHRoZSBtYWM4MDIxMSBhaXJ0aW1lIG1hbmFnZW1lbnQgc3lzdGVtLiBTcGVjaWZpY2FsbHksIGl0J3MgbW9kaWZ5aW5nIGBpZWVlODAyMTFfcmF0ZV9leHBlY3RlZF90eF9haXJ0aW1lYCwgYGllZWU4MDIxMV9jYWxjX2V4cGVjdGVkX3R4X2FpcnRpbWVgLCBgaWVlZTgwMjExX3N0YV91cGRhdGVfcGVuZGluZ19haXJ0aW1lYCwgYGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVja2AsIGFuZCBgaWVlZTgwMjExX3R4cV9hcWxfcGVuZGluZ2AuIFRoZXNlIGFyZSBhbGwgY29yZSBmdW5jdGlvbnMg4oCTIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcywgcmVhbGx5IOKAkyB3aXRoaW4gdGhlIGZyYW1ld29yaywgZXNwZWNpYWxseSBhcyB0aGV5IHJlbGF0ZSB0byBjYWxjdWxhdGluZyBhbmQgbWFuYWdpbmcgdHJhbnNtaXNzaW9uIGFpcnRpbWUgZm9yIDgwMi4xMSBmcmFtZXMuIFRoZSBjaGFuZ2VzIGhlcmUgY291bGQgYmUgcHJldHR5IGltcGFjdGZ1bCwgYWZmZWN0aW5nIHNjaGVkdWxpbmcsIGZhaXJuZXNzLCBhbmQgb3ZlcmFsbCBwZXJmb3JtYW5jZS4gVGltZSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgKndoeSogdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIGFyZSBiZWluZyB0YXJnZXRlZC4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUga2V5IGZ1bmN0aW9ucyBzbyBJIGNhbiBwcm9wZXJseSBhc3Nlc3MgdGhlIGltcGxpY2F0aW9uIG9mIHRoZSBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NDUsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTQ6NTQ6NTMuNDc5Nzc4NTY3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4Mjk1NTU2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZWVlODAyMTFfcmF0ZV9leHBlY3RlZF90eF9haXJ0aW1lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL2FpcnRpbWUuYz03NTQ9RVhQT1JUX1NZTUJPTF9HUEwoaWVlZTgwMjExX2NhbGNfdHhfYWlydGltZSk7XFxubmV0L21hYzgwMjExL2FpcnRpbWUuYy03NTUtXFxubmV0L21hYzgwMjExL2FpcnRpbWUuYzo3NTY6dTMyIGllZWU4MDIxMV9yYXRlX2V4cGVjdGVkX3R4X2FpcnRpbWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxubmV0L21hYzgwMjExL2FpcnRpbWUuYy03NTctXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqdHhfcmF0ZSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9haXJ0aW1lLmM9ODAzPXUzMiBpZWVlODAyMTFfY2FsY19leHBlY3RlZF90eF9haXJ0aW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxubmV0L21hYzgwMjExL2FpcnRpbWUuYy04MjgtXFxubmV0L21hYzgwMjExL2FpcnRpbWUuYzo4Mjk6XFx0XFx0ZHVyYXRpb24gPSBpZWVlODAyMTFfcmF0ZV9leHBlY3RlZF90eF9haXJ0aW1lKGh3LCB0eF9yYXRlLCByaSxcXG5uZXQvbWFjODAyMTEvYWlydGltZS5jLTgzMC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBiYW5kLCB0cnVlLCBsZW4pO1xcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9Mjk0Mj1leHRlcm4gY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGllZWU4MDIxMV9ldGh0b29sX29wcztcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yOTQzLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjI5NDQ6dTMyIGllZWU4MDIxMV9yYXRlX2V4cGVjdGVkX3R4X2FpcnRpbWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjk0NS1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICp0eF9yYXRlLFxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9MjgxNT1zdGF0aWMgdTMyIHN0YV9lc3RpbWF0ZV9leHBlY3RlZF90aHJvdWdocHV0KHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMjgyOC1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzoyODI5OlxcdGR1cmF0aW9uID0gaWVlZTgwMjExX3JhdGVfZXhwZWN0ZWRfdHhfYWlydGltZShodywgTlVMTCwgcmksIGJhbmQsIHRydWUsIDEwMjQpO1xcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTI4MzAtXFx0ZHVyYXRpb24gKz0gZHVyYXRpb24gXFx1MDAzZVxcdTAwM2UgNDsgLyogYWRkIGFzc3VtZWQgcGFja2V0IGVycm9yIHJhdGUgb2YgfjYlICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjU0OjUzLjc2MjczOTkwM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MzMzNTE0MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIGBpZWVlODAyMTFfdHhxX2FxbF9wZW5kaW5nYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYGllZWU4MDIxMV90eHFfYXFsX3BlbmRpbmdgLiBUaGF0IGZ1bmN0aW9uIG5hbWUgaXRzZWxmIGlzIGEgcHJldHR5IGJpZyBjbHVlLiBJdCdzIG9idmlvdXNseSByZWxhdGVkIHRvIHRoZSA4MDIuMTEgdHJhbnNtaXQgcXVldWUgYW5kIGxpa2VseSBjb25uZWN0ZWQgdG8gQWN0aXZlIFF1ZXVlIE1hbmFnZW1lbnQgKEFRTSkuIEknbSBhc3N1bWluZyB3ZSdyZSBsb29raW5nIGF0IHBlbmRpbmcgcGFja2V0cywgdGhlIG9uZXMgd2FpdGluZyB0byBiZSBzZW50LCByaWdodD8gR2l2ZW4gdGhlIGNvbnRleHQgb2YgQVFNLCBJJ2QgYmV0IHdlJ3JlIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJ3MgYmFjayBwcmVzc3VyZSBvciBjb25nZXN0aW9uIHdpdGhpbiB0aGUgcXVldWUuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiByZXBvcnRzIHRoZSBzdGF0ZSBvZiB0aGluZ3M7IGRvZXMgaXQgcmV0dXJuIGEgc2ltcGxlIGNvdW50LCBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiAqYW55KiBwYWNrZXRzIGFyZSBwZW5kaW5nLCBvciBzb21ldGhpbmcgbW9yZSBudWFuY2VkIGxpa2UgYSBwZXItQUMgKEFjY2VzcyBDYXRlZ29yeSkgYnJlYWtkb3duIG9yIGV2ZW4gc29tZSBraW5kIG9mIGVzdGltYXRlIG9mIHRoZSBxdWV1ZWQgYnl0ZXM/IEFyZSB3ZSB0YWxraW5nIGFib3V0IHBhY2tldHMgKmVucXVldWVkKiBidXQgbm90IHlldCAqdHJhbnNtaXR0ZWQqLCBvciBkbyB3ZSBpbmNsdWRlIHBhY2tldHMgaW4gZmxpZ2h0IHRvIGEgZGVncmVlPyBUaGlzIHdpbGwgYWZmZWN0IGhvdyBpdCdzIHVzZWQgd2l0aGluIGEgbGFyZ2VyIEFRTSBjb250cm9sIGxvb3AuIEknZCBuZWVkIHRvIGNvbmZpcm0gd2hhdCB0aGUgZnVuY3Rpb24gZG9lcyB3aXRoIGl0cyBwYXJhbWV0ZXJzIC0gYXJlIHRoZXkgdGhlIFRYIHF1ZXVlIGl0c2VsZiwgc3BlY2lmaWMgQUNzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSBxdWljayBwZWVrIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBpdHMgaW50ZW5kZWQgdXNlIHdpbGwgYmUgdXNlZnVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDgwMCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjU0OjU5LjU5NjExMzAyOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxMTU1MTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImllZWU4MDIxMV90eHFfYXFsX3BlbmRpbmdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvdHguYz00MjUzPUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrKTtcXG5uZXQvbWFjODAyMTEvdHguYy00MjU0LVxcbm5ldC9tYWM4MDIxMS90eC5jOjQyNTU6dTMyIGllZWU4MDIxMV90eHFfYXFsX3BlbmRpbmcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxubmV0L21hYzgwMjExL3R4LmMtNDI1Ni1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqdHhxKVxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtNDI3MC19XFxubmV0L21hYzgwMjExL3R4LmM6NDI3MTpFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV90eHFfYXFsX3BlbmRpbmcpO1xcbm5ldC9tYWM4MDIxMS90eC5jLTQyNzItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjU0OjU5Ljc3NzI3NTUyOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTM4MTUxNDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqRGl2aW5nIGludG8gYGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVja2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byBpdC4gTGV0J3MgZGlnIGludG8gYGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVja2AuIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsLiBJdCdzIHRoZSBnYXRla2VlcGVyLCB0aGUgYXJiaXRlciBvZiBmYWlybmVzcyBpbiBvdXIgd2lyZWxlc3Mgc3RhY2suIFRoaXMgaXMgd2hlcmUgd2UgZGVjaWRlIGlmIGEgZnJhbWUgZ2V0cyBhaXJ0aW1lIG9yIGdldHMgaGVsZCBiYWNrLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgY29sZC4gV2UncmUgdGFsa2luZyBhYm91dCB0aGUgZ3V0cyBvZiBob3cgd2UgbWFuYWdlIGNvbnRlbnRpb24gYW5kIHByaW9yaXRpemUgdHJhZmZpYyBpbiB0aGlzIGludGVyZmFjZS4gSSB3YW50IHRvIHNlZSBob3cgaXQncyBtYWtpbmcgaXRzIGRldGVybWluYXRpb25zOiB3aGF0IGZhY3RvcnMgYXJlIGJlaW5nIGNvbnNpZGVyZWQsIHdoYXQgdGhlIHRocmVzaG9sZHMgYXJlLCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBsb2dpYyBmbG93IGlzLiBLbm93aW5nIHRoaXMgZnVuY3Rpb24ncyBsb2dpYyBpcyBhYnNvbHV0ZWx5IGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3Mgb2Ygb3VyIHdpcmVsZXNzIG5ldHdvcmsgdW5kZXIgbG9hZC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gYWlydGltZSBmYWlybmVzcyBhbmQgYW55IG90aGVyIGFkbWlzc2lvbiBjb250cm9sIG1lY2hhbmlzbXMgd2UndmUgaW1wbGVtZW50ZWQuIElzIHRoZXJlIGEgcG90ZW50aWFsIGJvdHRsZW5lY2s/IEFyZSB0aGVyZSBhbnkgaGlkZGVuIGJ1Z3MgbHVya2luZyB0aGF0IGNvdWxkIGJlIGNhdXNpbmcgdW5mYWlyIGRpc3RyaWJ1dGlvbiBvciB1bmV4cGVjdGVkIGRyb3BzPyBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBhbGdvcml0aG0gaXMgcm9idXN0LCB0aGF0IGl0IGFjY291bnRzIGZvciBvdXIgdmFyaW91cyB0cmFmZmljIHR5cGVzLCBhbmQgdGhhdCBpdCdzIG9wdGltaXplZCBhcyBiZXN0IGFzIGNhbiBiZS4gVGhpcyBpcyBhIGNyaXRpY2FsIGJ1aWxkaW5nIGJsb2NrLCBzbyBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQwNSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjU1OjAzLjcxNTQyOTk5NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzODEzMzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImllZWU4MDIxMV90eHFfYWlydGltZV9jaGVja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS90eC5jPTM4NzU9c3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV90eF9kZXF1ZXVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtMzg5My1cXG5uZXQvbWFjODAyMTEvdHguYzozODk0OlxcdGlmICghaWVlZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrKGh3LCB0eHEpKVxcbm5ldC9tYWM4MDIxMS90eC5jLTM4OTUtXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYz00MTE2PXN0cnVjdCBpZWVlODAyMTFfdHhxICppZWVlODAyMTFfbmV4dF90eHEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKVxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtNDE0NS1cXG5uZXQvbWFjODAyMTEvdHguYzo0MTQ2OlxcdGFxbF9jaGVjayA9IGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVjayhodywgXFx1MDAyNnR4cWktXFx1MDAzZXR4cSk7XFxubmV0L21hYzgwMjExL3R4LmMtNDE0Ny1cXHRpZiAoYXFsX2NoZWNrKVxcbi0tXFxubmV0L21hYzgwMjExL3R4LmM9NDIxOT1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShhcWxfZGlzYWJsZSk7XFxubmV0L21hYzgwMjExL3R4LmMtNDIyMC1cXG5uZXQvbWFjODAyMTEvdHguYzo0MjIxOmJvb2wgaWVlZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbm5ldC9tYWM4MDIxMS90eC5jLTQyMjItXFx0XFx0XFx0XFx0IHN0cnVjdCBpZWVlODAyMTFfdHhxICp0eHEpXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy00MjUyLX1cXG5uZXQvbWFjODAyMTEvdHguYzo0MjUzOkVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrKTtcXG5uZXQvbWFjODAyMTEvdHguYy00MjU0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNDo1NTowMy45NTkyNDkxNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTQ0MjMxOTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgaWVlZTgwMjExX3N0YV91cGRhdGVfcGVuZGluZ19haXJ0aW1lYCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byBgaWVlZTgwMjExX3N0YV91cGRhdGVfcGVuZGluZ19haXJ0aW1lYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBwZW5kaW5nIGFpcnRpbWUgdXBkYXRlcyBmb3IgYSBzdGF0aW9uLiBNeSBpbml0aWFsIGZvY3VzIGlzIGxpa2VseSB0byBiZSBvbiB0aGUgZnVuY3Rpb24ncyBjb3JlIGxvZ2ljLiBXaGF0IHRyaWdnZXJzIHRoaXMgdXBkYXRlPyBJcyBpdCByZWxhdGVkIHRvIFFvUywgYWRtaXNzaW9uIGNvbnRyb2wsIG9yIHNvbWUgZm9ybSBvZiByYXRlIGFkYXB0YXRpb24/IEkgZXhwZWN0IHRvIHNlZSBjb25kaXRpb25hbHMgYW5kIHBvc3NpYmx5IGxvb3BzIHJlbGF0ZWQgdG8gY2hlY2tpbmcgdmFyaW91cyBhaXJ0aW1lIGNhbGN1bGF0aW9uIHBhcmFtZXRlcnMuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBtb2RpZmllZCB3aXRoaW4gdGhpcyBmdW5jdGlvbi4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGBpZWVlODAyMTFfc3RhYCBzdHJ1Y3R1cmUgYW5kIGFueSByZWxhdGVkIHN0cnVjdHMg4oCTIHByb2JhYmx5IHNvbWV0aGluZyBjb250YWluaW5nIGFpcnRpbWUgdXNhZ2Ugb3IgZ3JhbnRlZCB0aW1lLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBzZWUgaG93IHRoZSBwZW5kaW5nIGFpcnRpbWUgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBvdmVyYWxsIGFpcnRpbWUgYWNjb3VudGluZyBmb3IgYSBzdGF0aW9uLiBJcyB0aGlzIGEgc2ltcGxlIGluY3JlbWVudCwgb3IgZG9lcyBpdCBpbnZvbHZlIG1vcmUgc29waGlzdGljYXRlZCBjYWxjdWxhdGlvbnMsIHBlcmhhcHMgdGFraW5nIGludG8gYWNjb3VudCBjaGFubmVsIGNvbmRpdGlvbnMgYW5kIHBhY2tldCBjaGFyYWN0ZXJpc3RpY3M/XG5cbkJleW9uZCB0aGUgZGlyZWN0IG1vZGlmaWNhdGlvbiBvZiBkYXRhIHN0cnVjdHVyZXMsIEknbSBnb2luZyB0byBsb29rIGZvciBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLiBEb2VzIHRoaXMgZnVuY3Rpb24gaW50ZXJhY3Qgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc2NoZWR1bGVyLCBzdWNoIGFzIHBhY2tldCBxdWV1aW5nIG9yIHRyYW5zbWlzc2lvbiBzY2hlZHVsaW5nPyBJIHdhbnQgdG8gc2VlIGlmIGFueSBsb2NrcyBhcmUgdGFrZW4sIGFuZCB3aGVyZSB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLiBXaGF0IGludGVycnVwdCBjb250ZXh0IGRvZXMgaXQgcnVuIGluPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYXJlYXMgZm9yIG9wdGltaXphdGlvbiwgb3IgY29tbW9uIHBpdGZhbGxzIHRoYXQgY291bGQgbGVhZCB0byBhaXJ0aW1lIHN0YXJ2YXRpb24gb3IgdW5mYWlyIGFsbG9jYXRpb24/IEkgYWxzbyBuZWVkIHRvIHNlZSBhbnkgb3RoZXIgcmVsYXRlZCB1cGRhdGUgZnVuY3Rpb25zLiBUaGlzIGNvdWxkIGdpdmUgbWUgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IHRoZSBhaXJ0aW1lIGFsbG9jYXRpb24gc3lzdGVtIHdvcmtzLlxuXG5JJ20gZXhwZWN0aW5nIHRvIGZpbmQgYSBkZWxpY2F0ZSBiYWxhbmNlIGJldHdlZW4gYWNjdXJhY3ksIG92ZXJoZWFkLCBhbmQgZmFpcm5lc3MgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0cmFkZS1vZmZzIHRoZSBkZXZlbG9wZXJzIG1hZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2Mjk4LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTQ6NTU6MDguMTAzNDkxNzY4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjg3NTgxNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWVlZTgwMjExX3N0YV91cGRhdGVfcGVuZGluZ19haXJ0aW1lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL3N0YV9pbmZvLmM9MjQ5MD1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdGFfcmVjYWxjX2FnZ3JlZ2F0ZXMpO1xcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTI0OTEtXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6MjQ5Mjp2b2lkIGllZWU4MDIxMV9zdGFfdXBkYXRlX3BlbmRpbmdfYWlydGltZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0yNDkzLVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHN0YV9pbmZvICpzdGEsIHU4IGFjLFxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmg9MTM4PXN0cnVjdCBhaXJ0aW1lX2luZm8ge1xcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtMTQ3LVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oOjE0ODp2b2lkIGllZWU4MDIxMV9zdGFfdXBkYXRlX3BlbmRpbmdfYWlydGltZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaC0xNDktXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTggYWMsXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhdHVzLmM9NzU2PXN0YXRpYyB2b2lkIGllZWU4MDIxMV9yZXBvcnRfdXNlZF9za2Ioc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhdHVzLmMtNzczLVxcdFxcdHN0YSA9IHN0YV9pbmZvX2dldF9ieV9hZGRycyhsb2NhbCwgaGRyLVxcdTAwM2VhZGRyMSwgaGRyLVxcdTAwM2VhZGRyMik7XFxubmV0L21hYzgwMjExL3N0YXR1cy5jOjc3NDpcXHRcXHRpZWVlODAyMTFfc3RhX3VwZGF0ZV9wZW5kaW5nX2FpcnRpbWUobG9jYWwsIHN0YSxcXG5uZXQvbWFjODAyMTEvc3RhdHVzLmMtNzc1LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYiksXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhdHVzLmM9MTE2ND12b2lkIGllZWU4MDIxMV90eF9zdGF0dXNfZXh0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxubmV0L21hYzgwMjExL3N0YXR1cy5jLTExODktXFx0XFx0Ym9vbCBtY2FzdCA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKS1cXHUwMDNldHhfdGltZV9tYztcXG5uZXQvbWFjODAyMTEvc3RhdHVzLmM6MTE5MDpcXHRcXHRpZWVlODAyMTFfc3RhX3VwZGF0ZV9wZW5kaW5nX2FpcnRpbWUobG9jYWwsIHN0YSxcXG5uZXQvbWFjODAyMTEvc3RhdHVzLmMtMTE5MS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpLFxcbi0tXFxubmV0L21hYzgwMjExL3R4LmM9Mzg3NT1zdHJ1Y3Qgc2tfYnVmZiAqaWVlZTgwMjExX3R4X2RlcXVldWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy00MDY3LVxcdFxcdGluZm8tXFx1MDAzZXR4X3RpbWVfbWMgPSAhdHguc3RhO1xcbm5ldC9tYWM4MDIxMS90eC5jOjQwNjg6XFx0XFx0aWVlZTgwMjExX3N0YV91cGRhdGVfcGVuZGluZ19haXJ0aW1lKGxvY2FsLCB0eC5zdGEsIHR4cS1cXHUwMDNlYWMsXFxubmV0L21hYzgwMjExL3R4LmMtNDA2OS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIGFpcnRpbWUsIGZhbHNlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNDo1NTowOC4zMzIyNTk5MDFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTkxMTM2Mjc2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNdWx0aWNhc3QgQVFMIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIEFRTCAoQWlydGltZSBGYWlybmVzcyBRdWV1ZWluZykgZnVuY3Rpb25hbGl0eSBmb3IgbXVsdGljYXN0IHRyYWZmaWMuIE15IHByaW1hcnkgY29uY2VybiByaWdodCBub3cgaXMgZW5zdXJpbmcgdGhlIGNvcnJlY3QgaW50ZWdyYXRpb24gYW5kIHRoYXQgd2UgaGF2ZW4ndCBvdmVybG9va2VkIGFueSBjcnVjaWFsIGNvbXBvbmVudHMuIE15IGZvY3VzIHNob3VsZCBiZSBvbiB2ZXJpZnlpbmcgdGhlIHVzYWdlIG9mIHRoZXNlIHN5bWJvbHMgd2l0aGluIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLCBzcGVjaWZpY2FsbHk6IGBpZWVlODAyMTFfc3RhX3VwZGF0ZV9wZW5kaW5nX2FpcnRpbWVgLCBgaWVlZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrYCwgYGllZWU4MDIxMV90eHFfYXFsX3BlbmRpbmdgLCBgaWVlZTgwMjExX3JhdGVfZXhwZWN0ZWRfdHhfYWlydGltZWAsIGFuZCBgc3RhX2VzdGltYXRlX2V4cGVjdGVkX3Rocm91Z2hwdXRgLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgTUFDODAyMTFgIGlzIHRoZSBjb3JyZWN0IGNvbmZpZyB0byBlbmFibGUgdGhpcy4gVGhlIGNvZGUncyBsb2NhdGVkIHdpdGhpbiBgbmV0L21hYzgwMjExL2AsIHNvIEkgYmVsaWV2ZSBgTUFDODAyMTFgIGlzIHRoZSByZWxldmFudCBjb25maWcgaXRlbS4gQnV0IGxldCdzIGJlIGFic29sdXRlbHkgY2VydGFpbiDigJMgaXMgdGhlcmUgYW55dGhpbmcgZWxzZT8gVGhlIGNvZGUgdXNlcyBgd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQobG9jYWwtXHUwMDNlaHcud2lwaHksIE5MODAyMTFfRVhUX0ZFQVRVUkVfQVFMKWAsIHdoaWNoIGluZGljYXRlcyBhIHJ1bnRpbWUgZmVhdHVyZSBmbGFnIGlzIHVzZWQuXG5cbkkgbmVlZCB0byBxdWlja2x5IHNjYW4gdG8gY29uZmlybSB0aGVyZSBhcmUgbm8gb3RoZXIgY29uZmlndXJhdGlvbnMgbmVlZGVkLiBGcm9tIG15IGluaXRpYWwgYXNzZXNzbWVudCwgYE1BQzgwMjExYCBhbG9uZSBzaG91bGQgc3VmZmljZS5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEknbGwgcGVyZm9ybSBhIHF1aWNrIGRvdWJsZS1jaGVjayBvbiBob3cgYHN0YV9lc3RpbWF0ZV9leHBlY3RlZF90aHJvdWdocHV0YCBpcyB1c2VkIGluIHRoaXMgY29udGV4dC4gSXQncyBhIGtleSBlbGVtZW50LCBhbmQgSSB3YW50IHRvIGVuc3VyZSBteSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgY29ycmVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1NDksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTQ6NTU6MTQuMjQzNjI1MTgxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjM1OTY0MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhX2VzdGltYXRlX2V4cGVjdGVkX3Rocm91Z2hwdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvc3RhX2luZm8uYz0yNzg5PXZvaWQgc3RhX3NldF9hY2N1bXVsYXRlZF9yZW1vdmVkX2xpbmtzX3NpbmZvKHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMjgxNC1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzoyODE1OnN0YXRpYyB1MzIgc3RhX2VzdGltYXRlX2V4cGVjdGVkX3Rocm91Z2hwdXQoc3RydWN0IHN0YV9pbmZvICpzdGEsXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMjgxNi1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHJhdGVfaW5mbyAqcmksXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYz0yODM3PXN0YXRpYyB2b2lkIHN0YV9zZXRfbGlua19zaW5mbyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTMwNTEtXFx0aWYgKCF0aHIgXFx1MDAyNlxcdTAwMjYgKGxpbmtfc2luZm8tXFx1MDAzZWZpbGxlZCBcXHUwMDI2IEJJVF9VTEwoTkw4MDIxMV9TVEFfSU5GT19UWF9CSVRSQVRFKSkpXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6MzA1MjpcXHRcXHR0aHIgPSBzdGFfZXN0aW1hdGVfZXhwZWN0ZWRfdGhyb3VnaHB1dChzdGEsXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMzA1My1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2bGlua19zaW5mby1cXHUwMDNldHhyYXRlLFxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9MzA3OT12b2lkIHN0YV9zZXRfc2luZm8oc3RydWN0IHN0YV9pbmZvICpzdGEsIHN0cnVjdCBzdGF0aW9uX2luZm8gKnNpbmZvLFxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMzMwOS1cXHRcXHQgICAoc2luZm8tXFx1MDAzZWZpbGxlZCBcXHUwMDI2IEJJVF9VTEwoTkw4MDIxMV9TVEFfSU5GT19UWF9CSVRSQVRFKSkpIHtcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzozMzEwOlxcdFxcdHRociA9IHN0YV9lc3RpbWF0ZV9leHBlY3RlZF90aHJvdWdocHV0KHN0YSwgXFx1MDAyNnNpbmZvLVxcdTAwM2V0eHJhdGUsXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMzMxMS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2c2RhdGEtXFx1MDAzZXZpZi5ic3NfY29uZik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjU1OjE0LjUwNzIyNzg1NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjMwNTc1NjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgSSB1bmRlcnN0YW5kIGl0OlxuXG4qKkFpcnRpbWUgUXVldWUgTGltaXQgZm9yIE11bHRpY2FzdCBhbmQgVGhyb3VnaHB1dCBDYWxjdWxhdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBwYXRjaCBsb29rcyBnb29kIOKAkyBmdW5jdGlvbmFsIGFuZCBkZWZpbml0ZWx5IHJlYWNoYWJsZSB3aXRoaW4gdGhlIGV4aXN0aW5nIDgwMi4xMSBzdGFjay4gTXkgZm9jdXMgaGVyZSBpcyBvbiB0aGUgYWRkaXRpb24gb2YgQWlydGltZSBRdWV1ZSBMaW1pdCAoQVFMKSBzdXBwb3J0IGZvciBtdWx0aWNhc3QgdHJhZmZpYywgYWxvbmdzaWRlIG1vZGlmaWNhdGlvbnMgdG8gaG93IHdlIGVzdGltYXRlIGV4cGVjdGVkIHRocm91Z2hwdXQgZm9yIHN0YXRpb25zIHdpdGhpbiBtYWM4MDIxMS4gVGhpcyBpcyBzb2xpZCwgY29yZSBsb2dpYy4gU2VlbXMgbGlrZSB0aGUgZGV2ZWxvcGVycyBoYXZlIGJlZW4gZGlnZ2luZyBpbnRvOiBgaWVlZTgwMjExX3N0YV91cGRhdGVfcGVuZGluZ19haXJ0aW1lYCwgYGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVja2AsIGBpZWVlODAyMTFfdHhxX2FxbF9wZW5kaW5nYCwgYGllZWU4MDIxMV9yYXRlX2V4cGVjdGVkX3R4X2FpcnRpbWVgIGFuZCBgc3RhX2VzdGltYXRlX2V4cGVjdGVkX3Rocm91Z2hwdXRgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGRpcmVjdGx5IGludm9sdmVkIGluIHRoZSBjcml0aWNhbCBwYXRoLiBUaGUgZmFjdCB0aGF0IGBNQUM4MDIxMWAgaXMgdGhlIHJlbGV2YW50IGNvbmZpZyBjb25maXJtcyBpdOKAmXMgd2l0aGluIHRoZSBoZWFydCBvZiB0aGUgbWFjODAyMTEgZnJhbWV3b3JrLiBXZSBjYW4gdHJpZ2dlciB0aGlzIHRocm91Z2ggYG1hYzgwMjExX2h3c2ltYCB3aGljaCBpcyBncmVhdCBmb3IgdGVzdGluZyB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5LiBTZWVtcyBsaWtlIHRoZSBjb3JyZWN0IGFwcHJvYWNoIGFuZCBkaXJlY3Rpb24uXG5cbkxldCdzIGNhbGwgc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NjU1LCJPdXRwdXRUb2tlbnMiOjE4MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNDo1NToyMi43Mzc4MDY5OTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjM1MzE1OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWVlZTgwMjExX3N0YV91cGRhdGVfcGVuZGluZ19haXJ0aW1lXCIsXG4gICAgXCJpZWVlODAyMTFfdHhxX2FpcnRpbWVfY2hlY2tcIixcbiAgICBcImllZWU4MDIxMV90eHFfYXFsX3BlbmRpbmdcIixcbiAgICBcImllZWU4MDIxMV9yYXRlX2V4cGVjdGVkX3R4X2FpcnRpbWVcIixcbiAgICBcInN0YV9lc3RpbWF0ZV9leHBlY3RlZF90aHJvdWdocHV0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBBaXJ0aW1lIFF1ZXVlIExpbWl0IChBUUwpIHN1cHBvcnQgZm9yIG11bHRpY2FzdCB0cmFmZmljIGFuZCBtb2RpZmllcyB0aGUgZXhwZWN0ZWQgdGhyb3VnaHB1dCBjYWxjdWxhdGlvbiBmb3Igc3RhdGlvbnMgaW4gbWFjODAyMTEuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbG9naWMgZm9yIDgwMi4xMSBuZXR3b3JraW5nIGFuZCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBtYWM4MDIxMV9od3NpbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImllZWU4MDIxMV9zdGFfdXBkYXRlX3BlbmRpbmdfYWlydGltZVwiLFxuICAgIFwiaWVlZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrXCIsXG4gICAgXCJpZWVlODAyMTFfdHhxX2FxbF9wZW5kaW5nXCIsXG4gICAgXCJpZWVlODAyMTFfcmF0ZV9leHBlY3RlZF90eF9haXJ0aW1lXCIsXG4gICAgXCJzdGFfZXN0aW1hdGVfZXhwZWN0ZWRfdGhyb3VnaHB1dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgQWlydGltZSBRdWV1ZSBMaW1pdCAoQVFMKSBzdXBwb3J0IGZvciBtdWx0aWNhc3QgdHJhZmZpYyBhbmQgbW9kaWZpZXMgdGhlIGV4cGVjdGVkIHRocm91Z2hwdXQgY2FsY3VsYXRpb24gZm9yIHN0YXRpb25zIGluIG1hYzgwMjExLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGxvZ2ljIGZvciA4MDIuMTEgbmV0d29ya2luZyBhbmQgY2FuIGJlIHRyaWdnZXJlZCB2aWEgbWFjODAyMTFfaHdzaW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpn79r[1] Phase: Succeeded StartedAt: 2026-07-22 14:56:13 +0000 UTC FinishedAt: 2026-07-22 14:56:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn79r[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-22 14:56:13 +0000 UTC FinishedAt: 2026-07-22 14:56:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn79r[2] Phase: Succeeded StartedAt: 2026-07-22 14:56:13 +0000 UTC FinishedAt: 2026-07-22 19:48:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn79r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_update_pending_airtime","ieee80211_txq_airtime_check","ieee80211_txq_aql_pending","ieee80211_rate_expected_tx_airtime","sta_estimate_expected_throughput"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"841f2ede-edcb-4915-b2b9-ee74b05a0de9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-22 14:56:13 +0000 UTC FinishedAt: 2026-07-22 19:48:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_update_pending_airtime","ieee80211_txq_airtime_check","ieee80211_txq_aql_pending","ieee80211_rate_expected_tx_airtime","sta_estimate_expected_throughput"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"841f2ede-edcb-4915-b2b9-ee74b05a0de9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowpn79r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_update_pending_airtime","ieee80211_txq_airtime_check","ieee80211_txq_aql_pending","ieee80211_rate_expected_tx_airtime","sta_estimate_expected_throughput"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"841f2ede-edcb-4915-b2b9-ee74b05a0de9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-22 14:56:13 +0000 UTC FinishedAt: 2026-07-22 14:56:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn79r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_update_pending_airtime","ieee80211_txq_airtime_check","ieee80211_txq_aql_pending","ieee80211_rate_expected_tx_airtime","sta_estimate_expected_throughput"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"841f2ede-edcb-4915-b2b9-ee74b05a0de9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-22 14:56:13 +0000 UTC FinishedAt: 2026-07-22 14:56:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpn79r/series-workflowpn79r-convert-artifact-256969712/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpn79r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_update_pending_airtime","ieee80211_txq_airtime_check","ieee80211_txq_aql_pending","ieee80211_rate_expected_tx_airtime","sta_estimate_expected_throughput"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"841f2ede-edcb-4915-b2b9-ee74b05a0de9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-22 14:56:36 +0000 UTC FinishedAt: 2026-07-22 15:36:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn79r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_update_pending_airtime","ieee80211_txq_airtime_check","ieee80211_txq_aql_pending","ieee80211_rate_expected_tx_airtime","sta_estimate_expected_throughput"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"841f2ede-edcb-4915-b2b9-ee74b05a0de9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-22 14:56:36 +0000 UTC FinishedAt: 2026-07-22 15:36:06 +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:*b8ca45fe-74b9-4d77-99dc-7f2797cd454d,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-workflowpn79r/series-workflowpn79r-convert-artifact-256969712/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": "c042e453-6e2f-449c-a3c8-60a70e5ab1d0", "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-workflowpn79r/series-workflowpn79r-build-action-2850690806/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpn79r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_update_pending_airtime","ieee80211_txq_airtime_check","ieee80211_txq_aql_pending","ieee80211_rate_expected_tx_airtime","sta_estimate_expected_throughput"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"841f2ede-edcb-4915-b2b9-ee74b05a0de9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-22 14:56:36 +0000 UTC FinishedAt: 2026-07-22 15:35:56 +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:*b8ca45fe-74b9-4d77-99dc-7f2797cd454d,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-workflowpn79r/series-workflowpn79r-convert-artifact-256969712/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": "c042e453-6e2f-449c-a3c8-60a70e5ab1d0", "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-workflowpn79r/series-workflowpn79r-build-action-2850690806/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpn79r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_update_pending_airtime","ieee80211_txq_airtime_check","ieee80211_txq_aql_pending","ieee80211_rate_expected_tx_airtime","sta_estimate_expected_throughput"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"841f2ede-edcb-4915-b2b9-ee74b05a0de9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-22 15:36:06 +0000 UTC FinishedAt: 2026-07-22 15:36:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn79r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_update_pending_airtime","ieee80211_txq_airtime_check","ieee80211_txq_aql_pending","ieee80211_rate_expected_tx_airtime","sta_estimate_expected_throughput"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"841f2ede-edcb-4915-b2b9-ee74b05a0de9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-22 15:36:06 +0000 UTC FinishedAt: 2026-07-22 15:36:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn79r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_update_pending_airtime","ieee80211_txq_airtime_check","ieee80211_txq_aql_pending","ieee80211_rate_expected_tx_airtime","sta_estimate_expected_throughput"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"841f2ede-edcb-4915-b2b9-ee74b05a0de9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-22 15:36:06 +0000 UTC FinishedAt: 2026-07-22 15:37:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn79r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_update_pending_airtime","ieee80211_txq_airtime_check","ieee80211_txq_aql_pending","ieee80211_rate_expected_tx_airtime","sta_estimate_expected_throughput"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"841f2ede-edcb-4915-b2b9-ee74b05a0de9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-22 15:36:06 +0000 UTC FinishedAt: 2026-07-22 15:37:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"841f2ede-edcb-4915-b2b9-ee74b05a0de9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpn79r/series-workflowpn79r-convert-artifact-354447831/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpn79r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_update_pending_airtime","ieee80211_txq_airtime_check","ieee80211_txq_aql_pending","ieee80211_rate_expected_tx_airtime","sta_estimate_expected_throughput"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"841f2ede-edcb-4915-b2b9-ee74b05a0de9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-22 15:37:39 +0000 UTC FinishedAt: 2026-07-22 15:39:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn79r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_update_pending_airtime","ieee80211_txq_airtime_check","ieee80211_txq_aql_pending","ieee80211_rate_expected_tx_airtime","sta_estimate_expected_throughput"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"841f2ede-edcb-4915-b2b9-ee74b05a0de9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-22 15:37:39 +0000 UTC FinishedAt: 2026-07-22 15:39:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c042e453-6e2f-449c-a3c8-60a70e5ab1d0,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-workflowpn79r/series-workflowpn79r-build-action-2850690806/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-workflowpn79r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_update_pending_airtime","ieee80211_txq_airtime_check","ieee80211_txq_aql_pending","ieee80211_rate_expected_tx_airtime","sta_estimate_expected_throughput"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"841f2ede-edcb-4915-b2b9-ee74b05a0de9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-22 15:39:33 +0000 UTC FinishedAt: 2026-07-22 15:39:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn79r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_update_pending_airtime","ieee80211_txq_airtime_check","ieee80211_txq_aql_pending","ieee80211_rate_expected_tx_airtime","sta_estimate_expected_throughput"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"841f2ede-edcb-4915-b2b9-ee74b05a0de9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-22 15:39:33 +0000 UTC FinishedAt: 2026-07-22 15:39:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn79r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_update_pending_airtime","ieee80211_txq_airtime_check","ieee80211_txq_aql_pending","ieee80211_rate_expected_tx_airtime","sta_estimate_expected_throughput"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"841f2ede-edcb-4915-b2b9-ee74b05a0de9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-22 15:39:33 +0000 UTC FinishedAt: 2026-07-22 16:43:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn79r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_update_pending_airtime","ieee80211_txq_airtime_check","ieee80211_txq_aql_pending","ieee80211_rate_expected_tx_airtime","sta_estimate_expected_throughput"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"841f2ede-edcb-4915-b2b9-ee74b05a0de9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-22 15:39:33 +0000 UTC FinishedAt: 2026-07-22 16:43:41 +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:*b8ca45fe-74b9-4d77-99dc-7f2797cd454d,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-workflowpn79r/series-workflowpn79r-convert-artifact-354447831/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": "f757f1c4-8d9e-476a-a948-22324220711e", "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-workflowpn79r/series-workflowpn79r-build-action-3590514971/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpn79r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_update_pending_airtime","ieee80211_txq_airtime_check","ieee80211_txq_aql_pending","ieee80211_rate_expected_tx_airtime","sta_estimate_expected_throughput"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"841f2ede-edcb-4915-b2b9-ee74b05a0de9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-22 15:39:33 +0000 UTC FinishedAt: 2026-07-22 16:43:30 +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:*b8ca45fe-74b9-4d77-99dc-7f2797cd454d,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-workflowpn79r/series-workflowpn79r-convert-artifact-354447831/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": "f757f1c4-8d9e-476a-a948-22324220711e", "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-workflowpn79r/series-workflowpn79r-build-action-3590514971/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpn79r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_update_pending_airtime","ieee80211_txq_airtime_check","ieee80211_txq_aql_pending","ieee80211_rate_expected_tx_airtime","sta_estimate_expected_throughput"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"841f2ede-edcb-4915-b2b9-ee74b05a0de9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-22 16:43:41 +0000 UTC FinishedAt: 2026-07-22 16:43:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn79r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_update_pending_airtime","ieee80211_txq_airtime_check","ieee80211_txq_aql_pending","ieee80211_rate_expected_tx_airtime","sta_estimate_expected_throughput"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"841f2ede-edcb-4915-b2b9-ee74b05a0de9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-22 16:43:41 +0000 UTC FinishedAt: 2026-07-22 16:43:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn79r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_update_pending_airtime","ieee80211_txq_airtime_check","ieee80211_txq_aql_pending","ieee80211_rate_expected_tx_airtime","sta_estimate_expected_throughput"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"841f2ede-edcb-4915-b2b9-ee74b05a0de9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-22 16:43:41 +0000 UTC FinishedAt: 2026-07-22 16:46:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn79r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_update_pending_airtime","ieee80211_txq_airtime_check","ieee80211_txq_aql_pending","ieee80211_rate_expected_tx_airtime","sta_estimate_expected_throughput"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"841f2ede-edcb-4915-b2b9-ee74b05a0de9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-22 16:43:41 +0000 UTC FinishedAt: 2026-07-22 16:46:01 +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:*f757f1c4-8d9e-476a-a948-22324220711e,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-workflowpn79r/series-workflowpn79r-build-action-3590514971/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-workflowpn79r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_update_pending_airtime","ieee80211_txq_airtime_check","ieee80211_txq_aql_pending","ieee80211_rate_expected_tx_airtime","sta_estimate_expected_throughput"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"841f2ede-edcb-4915-b2b9-ee74b05a0de9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-22 16:46:12 +0000 UTC FinishedAt: 2026-07-22 19:48:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn79r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_update_pending_airtime","ieee80211_txq_airtime_check","ieee80211_txq_aql_pending","ieee80211_rate_expected_tx_airtime","sta_estimate_expected_throughput"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"841f2ede-edcb-4915-b2b9-ee74b05a0de9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-22 16:46:12 +0000 UTC FinishedAt: 2026-07-22 19:48:19 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_update_pending_airtime","ieee80211_txq_airtime_check","ieee80211_txq_aql_pending","ieee80211_rate_expected_tx_airtime","sta_estimate_expected_throughput"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*c042e453-6e2f-449c-a3c8-60a70e5ab1d0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f757f1c4-8d9e-476a-a948-22324220711e,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-workflowpn79r/series-workflowpn79r-build-action-2850690806/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-workflowpn79r/series-workflowpn79r-build-action-3590514971/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowpn79r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_update_pending_airtime","ieee80211_txq_airtime_check","ieee80211_txq_aql_pending","ieee80211_rate_expected_tx_airtime","sta_estimate_expected_throughput"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"841f2ede-edcb-4915-b2b9-ee74b05a0de9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-22 16:46:12 +0000 UTC FinishedAt: 2026-07-22 16:46:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn79r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_update_pending_airtime","ieee80211_txq_airtime_check","ieee80211_txq_aql_pending","ieee80211_rate_expected_tx_airtime","sta_estimate_expected_throughput"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"841f2ede-edcb-4915-b2b9-ee74b05a0de9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-22 16:46:12 +0000 UTC FinishedAt: 2026-07-22 16:46:17 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_update_pending_airtime","ieee80211_txq_airtime_check","ieee80211_txq_aql_pending","ieee80211_rate_expected_tx_airtime","sta_estimate_expected_throughput"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpn79r/series-workflowpn79r-convert-artifact-315686288/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpn79r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_update_pending_airtime","ieee80211_txq_airtime_check","ieee80211_txq_aql_pending","ieee80211_rate_expected_tx_airtime","sta_estimate_expected_throughput"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"841f2ede-edcb-4915-b2b9-ee74b05a0de9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-22 16:46:12 +0000 UTC FinishedAt: 2026-07-22 16:46:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn79r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_update_pending_airtime","ieee80211_txq_airtime_check","ieee80211_txq_aql_pending","ieee80211_rate_expected_tx_airtime","sta_estimate_expected_throughput"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"841f2ede-edcb-4915-b2b9-ee74b05a0de9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-22 16:46:12 +0000 UTC FinishedAt: 2026-07-22 16:46:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn79r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_update_pending_airtime","ieee80211_txq_airtime_check","ieee80211_txq_aql_pending","ieee80211_rate_expected_tx_airtime","sta_estimate_expected_throughput"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"841f2ede-edcb-4915-b2b9-ee74b05a0de9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-22 16:46:13 +0000 UTC FinishedAt: 2026-07-22 16:46:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn79r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_update_pending_airtime","ieee80211_txq_airtime_check","ieee80211_txq_aql_pending","ieee80211_rate_expected_tx_airtime","sta_estimate_expected_throughput"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"841f2ede-edcb-4915-b2b9-ee74b05a0de9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-22 16:46:25 +0000 UTC FinishedAt: 2026-07-22 19:48:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn79r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_update_pending_airtime","ieee80211_txq_airtime_check","ieee80211_txq_aql_pending","ieee80211_rate_expected_tx_airtime","sta_estimate_expected_throughput"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"841f2ede-edcb-4915-b2b9-ee74b05a0de9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-22 16:46:25 +0000 UTC FinishedAt: 2026-07-22 19:48:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c042e453-6e2f-449c-a3c8-60a70e5ab1d0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f757f1c4-8d9e-476a-a948-22324220711e,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-workflowpn79r/series-workflowpn79r-build-action-2850690806/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-workflowpn79r/series-workflowpn79r-build-action-3590514971/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-workflowpn79r/series-workflowpn79r-convert-artifact-315686288/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,}