Name: series-workflow4v5dq Phase: Succeeded StartedAt: 2026-06-24 10:20:51 +0000 UTC FinishedAt: 2026-06-24 11:00:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4v5dq[0] Phase: Succeeded StartedAt: 2026-06-24 10:20:51 +0000 UTC FinishedAt: 2026-06-24 10:38:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4v5dq[0].run-triage Phase: Succeeded StartedAt: 2026-06-24 10:20:51 +0000 UTC FinishedAt: 2026-06-24 10:38: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": "13a1e1a618858407fa12c391f664ea750651f6b2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "13a1e1a618858407fa12c391f664ea750651f6b2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "series_id": "d4c59d8b-93e2-409b-9bad-d23dd34e05e7" }, "track": "KASAN", "fuzz": { "focus": [ "io_uring" ], "focus_symbols": [ "io_clone_file_node", "io_clone_files", "io_register_clone_files" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDEwOjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fY2xvbmVfZmlsZV9ub2RlJiMzNDssCiAgICAmIzM0O2lvX2Nsb25lX2ZpbGVzJiMzNDssCiAgICAmIzM0O2lvX3JlZ2lzdGVyX2Nsb25lX2ZpbGVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgaW9fdXJpbmcgcmVnaXN0cmF0aW9uIG9wY29kZSBgSU9SSU5HX1JFR0lTVEVSX0NMT05FX0ZJTEVTYCB3aGljaCBhbGxvd3MgY2xvbmluZyBmaWxlIGRlc2NyaXB0b3JzIGZyb20gYW5vdGhlciBpb191cmluZyByaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIChpb191cmluZykgdGhhdCBhZGRzIG5ldyByZWFjaGFibGUgY29kZSBwYXRocyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxMDozNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQwYzJkZmQ5ZWNiYzQ1MWYyZjM4NGY3Zjk2OGVkNjJlMDRmZGM5ZTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1biAyNCAxMDozNzo1MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oXG5pbmRleCA5MDlmYjdhZWE2MzhlYi4uNjdmY2M0MGY4ZGZjM2MgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmhcbkBAIC03MjMsNiAmIzQzOzcyMyw5IEBAIGVudW0gaW9fdXJpbmdfcmVnaXN0ZXJfb3Age1xuIFx0LyogcmVnaXN0ZXIgYnBmIGZpbHRlcmluZyBwcm9ncmFtcyAqL1xuIFx0SU9SSU5HX1JFR0lTVEVSX0JQRl9GSUxURVJcdFx0PSAzNyxcbiBcbiYjNDM7XHQvKiBjbG9uZSBmaWxlIGRlc2NyaXB0b3JzIGZyb20gYW5vdGhlciByaW5nICovXG4mIzQzO1x0SU9SSU5HX1JFR0lTVEVSX0NMT05FX0ZJTEVTXHRcdD0gMzgsXG4mIzQzO1xuIFx0LyogdGhpcyBnb2VzIGxhc3QgKi9cbiBcdElPUklOR19SRUdJU1RFUl9MQVNULFxuIFxuQEAgLTg1NCw2ICYjNDM7ODU3LDE1IEBAIHN0cnVjdCBpb191cmluZ19jbG9uZV9idWZmZXJzIHtcbiBcdF9fdTMyXHRwYWRbM107XG4gfTtcbiBcbiYjNDM7c3RydWN0IGlvX3VyaW5nX2Nsb25lX2ZpbGVzIHtcbiYjNDM7XHRfX3UzMiBzcmNfZmQ7XG4mIzQzO1x0X191MzIgZmxhZ3M7XG4mIzQzO1x0X191MzIgc3JjX29mZjtcbiYjNDM7XHRfX3UzMiBkc3Rfb2ZmO1xuJiM0MztcdF9fdTMyIG5yO1xuJiM0MztcdF9fdTMyIHBhZFszXTtcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IGlvX3VyaW5nX2J1ZiB7XG4gXHRfX3U2NFx0YWRkcjtcbiBcdF9fdTMyXHRsZW47XG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvcmVnaXN0ZXIuYyBiL2lvX3VyaW5nL3JlZ2lzdGVyLmNcbmluZGV4IGRjZTVlMmY5Y2Y3NzAyLi5iYmM4YzUwNmVhMmRiZiAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL3JlZ2lzdGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL3JlZ2lzdGVyLmNcbkBAIC05MjQsNiAmIzQzOzkyNCwxMiBAQCBzdGF0aWMgaW50IF9faW9fdXJpbmdfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHVuc2lnbmVkIG9wY29kZSxcbiBcdFx0XHRicmVhaztcbiBcdFx0cmV0ID0gaW9fcmVnaXN0ZXJfY2xvbmVfYnVmZmVycyhjdHgsIGFyZyk7XG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgSU9SSU5HX1JFR0lTVEVSX0NMT05FX0ZJTEVTOlxuJiM0MztcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdGlmICghYXJnIHx8IG5yX2FyZ3MgIT0gMSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRyZXQgPSBpb19yZWdpc3Rlcl9jbG9uZV9maWxlcyhjdHgsIGFyZyk7XG4mIzQzO1x0XHRicmVhaztcbiBcdGNhc2UgSU9SSU5HX1JFR0lTVEVSX1pDUlhfSUZROlxuIFx0XHRyZXQgPSAtRUlOVkFMO1xuIFx0XHRpZiAoIWFyZyB8fCBucl9hcmdzICE9IDEpXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvcnNyYy5jIGIvaW9fdXJpbmcvcnNyYy5jXG5pbmRleCA2NTAzMDM2MjZiZTZlZC4uNWRkZDcxNWUyYTYzNjUgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9yc3JjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL3JzcmMuY1xuQEAgLTEzMDMsNiAmIzQzOzEzMDMsMTUxIEBAIGludCBpb19yZWdpc3Rlcl9jbG9uZV9idWZmZXJzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgaW9fY2xvbmVfZmlsZV9ub2RlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgaW9fcnNyY19ub2RlICpzcmNfbm9kZSxcbiYjNDM7XHRcdFx0ICAgICAgaW50IGRzdF9pbmRleCxcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IGlvX2ZpbGVfdGFibGUgKm5ld190YWJsZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpb19yc3JjX25vZGUgKmRzdF9ub2RlO1xuJiM0MztcdHN0cnVjdCBmaWxlICpmaWxlO1xuJiM0MztcbiYjNDM7XHRkc3Rfbm9kZSA9IGlvX3JzcmNfbm9kZV9hbGxvYyhjdHgsIElPUklOR19SU1JDX0ZJTEUpO1xuJiM0MztcdGlmICghZHN0X25vZGUpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0ZmlsZSA9IGlvX3Nsb3RfZmlsZShzcmNfbm9kZSk7XG4mIzQzO1x0Z2V0X2ZpbGUoZmlsZSk7XG4mIzQzO1x0aW9fZml4ZWRfZmlsZV9zZXQoZHN0X25vZGUsIGZpbGUpO1xuJiM0MztcbiYjNDM7XHRuZXdfdGFibGUtXHUwMDNlZGF0YS5ub2Rlc1tkc3RfaW5kZXhdID0gZHN0X25vZGU7XG4mIzQzO1x0aW9fZmlsZV9iaXRtYXBfc2V0KG5ld190YWJsZSwgZHN0X2luZGV4KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaW9fY2xvbmVfZmlsZXMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19yaW5nX2N0eCAqc3JjX2N0eCxcbiYjNDM7XHRcdFx0ICBzdHJ1Y3QgaW9fdXJpbmdfY2xvbmVfZmlsZXMgKmFyZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpb19maWxlX3RhYmxlIG5ld19maWxlX3RhYmxlO1xuJiM0MztcdHVuc2lnbmVkIGludCBkc3RfbnIgPSBjdHgtXHUwMDNlZmlsZV90YWJsZS5kYXRhLm5yO1xuJiM0MztcdHVuc2lnbmVkIGludCBzcmNfbnIgPSBzcmNfY3R4LVx1MDAzZWZpbGVfdGFibGUuZGF0YS5ucjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbmV3X25yLCBpO1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmN0eC1cdTAwM2V1cmluZ19sb2NrKTtcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnNyY19jdHgtXHUwMDNldXJpbmdfbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmIChkc3RfbnIgXHUwMDI2XHUwMDI2ICEoYXJnLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfUkVHSVNURVJfRFNUX1JFUExBQ0UpKVxuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzcmNfbnIpXG4mIzQzO1x0XHRyZXR1cm4gLUVOWElPO1xuJiM0MztcbiYjNDM7XHRpZiAoIWFyZy1cdTAwM2VucilcbiYjNDM7XHRcdGFyZy1cdTAwM2VuciA9IHNyY19ucjtcbiYjNDM7XHRlbHNlIGlmIChhcmctXHUwMDNlbnIgXHUwMDNlIHNyY19ucilcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAoY2hlY2tfYWRkX292ZXJmbG93KGFyZy1cdTAwM2VzcmNfb2ZmLCBhcmctXHUwMDNlbnIsIFx1MDAyNmkpIHx8IGkgXHUwMDNlIHNyY19ucilcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdGlmIChjaGVja19hZGRfb3ZlcmZsb3coYXJnLVx1MDAzZWRzdF9vZmYsIGFyZy1cdTAwM2VuciwgXHUwMDI2aSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0bmV3X25yID0gbWF4KGRzdF9uciwgYXJnLVx1MDAzZWRzdF9vZmYgJiM0MzsgYXJnLVx1MDAzZW5yKTtcbiYjNDM7XHRpZiAobmV3X25yIFx1MDAzZSBJT1JJTkdfTUFYX0ZJWEVEX0ZJTEVTKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdG1lbXNldChcdTAwMjZuZXdfZmlsZV90YWJsZSwgMCwgc2l6ZW9mKG5ld19maWxlX3RhYmxlKSk7XG4mIzQzO1x0aWYgKCFpb19hbGxvY19maWxlX3RhYmxlcyhjdHgsIFx1MDAyNm5ld19maWxlX3RhYmxlLCBuZXdfbnIpKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdC8qIENvcHkgb3JpZ2luYWwgbm9kZXMgZnJvbSBiZWZvcmUgdGhlIGNsb25lZCByYW5nZSAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1pbihhcmctXHUwMDNlZHN0X29mZiwgZHN0X25yKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBpb19yc3JjX25vZGUgKnNyY19ub2RlID0gaW9fcnNyY19ub2RlX2xvb2t1cChcdTAwMjZjdHgtXHUwMDNlZmlsZV90YWJsZS5kYXRhLCBpKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXNyY19ub2RlKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdGlmIChpb19jbG9uZV9maWxlX25vZGUoY3R4LCBzcmNfbm9kZSwgaSwgXHUwMDI2bmV3X2ZpbGVfdGFibGUpKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIENvcHkgdGhlIGFjdHVhbCBjbG9uZWQgcmFuZ2UgZnJvbSB0aGUgc291cmNlIHJpbmcgKi9cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhcmctXHUwMDNlbnI7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgaW9fcnNyY19ub2RlICpzcmNfbm9kZSA9IGlvX3JzcmNfbm9kZV9sb29rdXAoXHUwMDI2c3JjX2N0eC1cdTAwM2VmaWxlX3RhYmxlLmRhdGEsXG4mIzQzO1x0XHRcdFx0YXJnLVx1MDAzZXNyY19vZmYgJiM0MzsgaSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFzcmNfbm9kZSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRpZiAoaW9fY2xvbmVfZmlsZV9ub2RlKGN0eCwgc3JjX25vZGUsIGFyZy1cdTAwM2Vkc3Rfb2ZmICYjNDM7IGksIFx1MDAyNm5ld19maWxlX3RhYmxlKSlcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBDb3B5IG9yaWdpbmFsIG5vZGVzIGZyb20gYWZ0ZXIgdGhlIGNsb25lZCByYW5nZSAqL1xuJiM0MztcdGZvciAoaSA9IGFyZy1cdTAwM2Vkc3Rfb2ZmICYjNDM7IGFyZy1cdTAwM2VucjsgaSBcdTAwM2MgZHN0X25yOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IGlvX3JzcmNfbm9kZSAqc3JjX25vZGUgPSBpb19yc3JjX25vZGVfbG9va3VwKFx1MDAyNmN0eC1cdTAwM2VmaWxlX3RhYmxlLmRhdGEsIGkpO1xuJiM0MztcbiYjNDM7XHRcdGlmICghc3JjX25vZGUpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKGlvX2Nsb25lX2ZpbGVfbm9kZShjdHgsIHNyY19ub2RlLCBpLCBcdTAwMjZuZXdfZmlsZV90YWJsZSkpXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogZnJlZSB0aGUgb2xkIGZpbGUgdGFibGUgaWYgdGhlcmUgaXMgYW55IGRhdGEgcHJlc2VudCAqL1xuJiM0MztcdGlmIChkc3RfbnIpXG4mIzQzO1x0XHRpb19mcmVlX2ZpbGVfdGFibGVzKGN0eCwgXHUwMDI2Y3R4LVx1MDAzZWZpbGVfdGFibGUpO1xuJiM0MztcbiYjNDM7XHRXQVJOX09OX09OQ0UoY3R4LVx1MDAzZWZpbGVfdGFibGUuZGF0YS5ucik7XG4mIzQzO1x0Y3R4LVx1MDAzZWZpbGVfdGFibGUgPSBuZXdfZmlsZV90YWJsZTtcbiYjNDM7XHRpb19maWxlX3RhYmxlX3NldF9hbGxvY19yYW5nZShjdHgsIDAsIGN0eC1cdTAwM2VmaWxlX3RhYmxlLmRhdGEubnIpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdC8qIEVycm9yIFBhdGg6IFNhZmVseSBkZXN0cm95IHdoYXRldmVyIHdlIHBhcnRpYWxseSBidWlsdCAqL1xuJiM0MztcdGlvX2ZyZWVfZmlsZV90YWJsZXMoY3R4LCBcdTAwMjZuZXdfZmlsZV90YWJsZSk7XG4mIzQzO1x0cmV0dXJuIC1FTk9NRU07XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBpb19yZWdpc3Rlcl9jbG9uZV9maWxlcyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpb191cmluZ19jbG9uZV9maWxlcyBjbG9uZV9hcmc7XG4mIzQzO1x0c3RydWN0IGlvX3JpbmdfY3R4ICpzcmNfY3R4O1xuJiM0MztcdGJvb2wgcmVnaXN0ZXJlZF9zcmM7XG4mIzQzO1x0c3RydWN0IGZpbGUgKmZpbGU7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmNsb25lX2FyZywgYXJnLCBzaXplb2YoY2xvbmVfYXJnKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHRpZiAoY2xvbmVfYXJnLmZsYWdzIFx1MDAyNlxuJiM0MztcdCAgICB+KElPUklOR19SRUdJU1RFUl9TUkNfUkVHSVNURVJFRCB8IElPUklOR19SRUdJU1RFUl9EU1RfUkVQTEFDRSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aWYgKG1lbWNocl9pbnYoY2xvbmVfYXJnLnBhZCwgMCwgc2l6ZW9mKGNsb25lX2FyZy5wYWQpKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZWdpc3RlcmVkX3NyYyA9ICEhKGNsb25lX2FyZy5mbGFncyBcdTAwMjYgSU9SSU5HX1JFR0lTVEVSX1NSQ19SRUdJU1RFUkVEKTsgXG4mIzQzO1x0ZmlsZSA9IGlvX3VyaW5nX2N0eF9nZXRfZmlsZShjbG9uZV9hcmcuc3JjX2ZkLCByZWdpc3RlcmVkX3NyYyk7XG4mIzQzO1x0aWYgKElTX0VSUihmaWxlKSlcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKGZpbGUpO1xuJiM0MztcbiYjNDM7XHRzcmNfY3R4ID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4mIzQzO1x0LyogU2FtZSByaW5nIGNsb25lIGlzIG5vdCBhbGxvd2VkICovXG4mIzQzO1x0aWYgKHNyY19jdHggPT0gY3R4KSB7XG4mIzQzO1x0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2Y3R4LVx1MDAzZXVyaW5nX2xvY2spO1xuJiM0MztcdGxvY2tfdHdvX3JpbmdzKGN0eCwgc3JjX2N0eCk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGlvX2Nsb25lX2ZpbGVzKGN0eCwgc3JjX2N0eCwgXHUwMDI2Y2xvbmVfYXJnKTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnNyY19jdHgtXHUwMDNldXJpbmdfbG9jayk7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0aWYgKCFyZWdpc3RlcmVkX3NyYylcbiYjNDM7XHRcdGZwdXQoZmlsZSk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIGlvX3ZlY19mcmVlKHN0cnVjdCBpb3VfdmVjICppdilcbiB7XG4gXHRpZiAoIWl2LVx1MDAzZWlvdmVjKVxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3JzcmMuaCBiL2lvX3VyaW5nL3JzcmMuaFxuaW5kZXggNDRlMzM4NmY3YzFjYTkuLjMyZjVjNDdjNDZhZmExIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvcnNyYy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9yc3JjLmhcbkBAIC03NSw2ICYjNDM7NzUsNyBAQCBpbnQgaW9fcHJlcF9yZWdfaW92ZWMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb3VfdmVjICppdixcbiBcdFx0XHRjb25zdCBzdHJ1Y3QgaW92ZWMgX191c2VyICp1dmVjLCBzaXplX3QgdXZlY19zZWdzKTtcbiBcbiBpbnQgaW9fcmVnaXN0ZXJfY2xvbmVfYnVmZmVycyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZyk7XG4mIzQzO2ludCBpb19yZWdpc3Rlcl9jbG9uZV9maWxlcyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZyk7XG4gaW50IGlvX3NxZV9idWZmZXJzX3VucmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpO1xuIGludCBpb19zcWVfYnVmZmVyc19yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZyxcbiBcdFx0XHQgICAgdW5zaWduZWQgaW50IG5yX2FyZ3MsIHU2NCBfX3VzZXIgKnRhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDEwOjM3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fY2xvbmVfZmlsZV9ub2RlJiMzNDssCiAgICAmIzM0O2lvX2Nsb25lX2ZpbGVzJiMzNDssCiAgICAmIzM0O2lvX3JlZ2lzdGVyX2Nsb25lX2ZpbGVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgaW9fdXJpbmcgcmVnaXN0cmF0aW9uIG9wY29kZSBgSU9SSU5HX1JFR0lTVEVSX0NMT05FX0ZJTEVTYCB3aGljaCBhbGxvd3MgY2xvbmluZyBmaWxlIGRlc2NyaXB0b3JzIGZyb20gYW5vdGhlciBpb191cmluZyByaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIChpb191cmluZykgdGhhdCBhZGRzIG5ldyByZWFjaGFibGUgY29kZSBwYXRocyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDBjMmRmZDllY2JjNDUxZjJmMzg0ZjdmOTY4ZWQ2MmUwNGZkYzllMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVuIDI0IDEwOjM3OjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmggYi9pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaAppbmRleCA5MDlmYjdhZWE2MzhlYi4uNjdmY2M0MGY4ZGZjM2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oCkBAIC03MjMsNiAmIzQzOzcyMyw5IEBAIGVudW0gaW9fdXJpbmdfcmVnaXN0ZXJfb3AgewogCS8qIHJlZ2lzdGVyIGJwZiBmaWx0ZXJpbmcgcHJvZ3JhbXMgKi8KIAlJT1JJTkdfUkVHSVNURVJfQlBGX0ZJTFRFUgkJPSAzNywKIAomIzQzOwkvKiBjbG9uZSBmaWxlIGRlc2NyaXB0b3JzIGZyb20gYW5vdGhlciByaW5nICovCiYjNDM7CUlPUklOR19SRUdJU1RFUl9DTE9ORV9GSUxFUwkJPSAzOCwKJiM0MzsKIAkvKiB0aGlzIGdvZXMgbGFzdCAqLwogCUlPUklOR19SRUdJU1RFUl9MQVNULAogCkBAIC04NTQsNiAmIzQzOzg1NywxNSBAQCBzdHJ1Y3QgaW9fdXJpbmdfY2xvbmVfYnVmZmVycyB7CiAJX191MzIJcGFkWzNdOwogfTsKIAomIzQzO3N0cnVjdCBpb191cmluZ19jbG9uZV9maWxlcyB7CiYjNDM7CV9fdTMyIHNyY19mZDsKJiM0MzsJX191MzIgZmxhZ3M7CiYjNDM7CV9fdTMyIHNyY19vZmY7CiYjNDM7CV9fdTMyIGRzdF9vZmY7CiYjNDM7CV9fdTMyIG5yOwomIzQzOwlfX3UzMiBwYWRbM107CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBpb191cmluZ19idWYgewogCV9fdTY0CWFkZHI7CiAJX191MzIJbGVuOwpkaWZmIC0tZ2l0IGEvaW9fdXJpbmcvcmVnaXN0ZXIuYyBiL2lvX3VyaW5nL3JlZ2lzdGVyLmMKaW5kZXggZGNlNWUyZjljZjc3MDIuLmJiYzhjNTA2ZWEyZGJmIDEwMDY0NAotLS0gYS9pb191cmluZy9yZWdpc3Rlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL3JlZ2lzdGVyLmMKQEAgLTkyNCw2ICYjNDM7OTI0LDEyIEBAIHN0YXRpYyBpbnQgX19pb191cmluZ19yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdW5zaWduZWQgb3Bjb2RlLAogCQkJYnJlYWs7CiAJCXJldCA9IGlvX3JlZ2lzdGVyX2Nsb25lX2J1ZmZlcnMoY3R4LCBhcmcpOwogCQlicmVhazsKJiM0MzsJY2FzZSBJT1JJTkdfUkVHSVNURVJfQ0xPTkVfRklMRVM6CiYjNDM7CQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJaWYgKCFhcmcgfHwgbnJfYXJncyAhPSAxKQomIzQzOwkJCWJyZWFrOwomIzQzOwkJcmV0ID0gaW9fcmVnaXN0ZXJfY2xvbmVfZmlsZXMoY3R4LCBhcmcpOwomIzQzOwkJYnJlYWs7CiAJY2FzZSBJT1JJTkdfUkVHSVNURVJfWkNSWF9JRlE6CiAJCXJldCA9IC1FSU5WQUw7CiAJCWlmICghYXJnIHx8IG5yX2FyZ3MgIT0gMSkKZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3JzcmMuYyBiL2lvX3VyaW5nL3JzcmMuYwppbmRleCA2NTAzMDM2MjZiZTZlZC4uNWRkZDcxNWUyYTYzNjUgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL3JzcmMuYwomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9yc3JjLmMKQEAgLTEzMDMsNiAmIzQzOzEzMDMsMTUxIEBAIGludCBpb19yZWdpc3Rlcl9jbG9uZV9idWZmZXJzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnKQogCXJldHVybiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgaW50IGlvX2Nsb25lX2ZpbGVfbm9kZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgaW9fcnNyY19ub2RlICpzcmNfbm9kZSwKJiM0MzsJCQkgICAgICBpbnQgZHN0X2luZGV4LAomIzQzOwkJCSAgICAgIHN0cnVjdCBpb19maWxlX3RhYmxlICpuZXdfdGFibGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW9fcnNyY19ub2RlICpkc3Rfbm9kZTsKJiM0MzsJc3RydWN0IGZpbGUgKmZpbGU7CiYjNDM7CiYjNDM7CWRzdF9ub2RlID0gaW9fcnNyY19ub2RlX2FsbG9jKGN0eCwgSU9SSU5HX1JTUkNfRklMRSk7CiYjNDM7CWlmICghZHN0X25vZGUpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJZmlsZSA9IGlvX3Nsb3RfZmlsZShzcmNfbm9kZSk7CiYjNDM7CWdldF9maWxlKGZpbGUpOwomIzQzOwlpb19maXhlZF9maWxlX3NldChkc3Rfbm9kZSwgZmlsZSk7CiYjNDM7CiYjNDM7CW5ld190YWJsZS0mZ3Q7ZGF0YS5ub2Rlc1tkc3RfaW5kZXhdID0gZHN0X25vZGU7CiYjNDM7CWlvX2ZpbGVfYml0bWFwX3NldChuZXdfdGFibGUsIGRzdF9pbmRleCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGlvX2Nsb25lX2ZpbGVzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fcmluZ19jdHggKnNyY19jdHgsCiYjNDM7CQkJICBzdHJ1Y3QgaW9fdXJpbmdfY2xvbmVfZmlsZXMgKmFyZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb19maWxlX3RhYmxlIG5ld19maWxlX3RhYmxlOwomIzQzOwl1bnNpZ25lZCBpbnQgZHN0X25yID0gY3R4LSZndDtmaWxlX3RhYmxlLmRhdGEubnI7CiYjNDM7CXVuc2lnbmVkIGludCBzcmNfbnIgPSBzcmNfY3R4LSZndDtmaWxlX3RhYmxlLmRhdGEubnI7CiYjNDM7CXVuc2lnbmVkIGludCBuZXdfbnIsIGk7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtjdHgtJmd0O3VyaW5nX2xvY2spOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7c3JjX2N0eC0mZ3Q7dXJpbmdfbG9jayk7CiYjNDM7CiYjNDM7CWlmIChkc3RfbnIgJmFtcDsmYW1wOyAhKGFyZy0mZ3Q7ZmxhZ3MgJmFtcDsgSU9SSU5HX1JFR0lTVEVSX0RTVF9SRVBMQUNFKSkKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CiYjNDM7CWlmICghc3JjX25yKQomIzQzOwkJcmV0dXJuIC1FTlhJTzsKJiM0MzsKJiM0MzsJaWYgKCFhcmctJmd0O25yKQomIzQzOwkJYXJnLSZndDtuciA9IHNyY19ucjsKJiM0MzsJZWxzZSBpZiAoYXJnLSZndDtuciAmZ3Q7IHNyY19ucikKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAoY2hlY2tfYWRkX292ZXJmbG93KGFyZy0mZ3Q7c3JjX29mZiwgYXJnLSZndDtuciwgJmFtcDtpKSB8fCBpICZndDsgc3JjX25yKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmIChjaGVja19hZGRfb3ZlcmZsb3coYXJnLSZndDtkc3Rfb2ZmLCBhcmctJmd0O25yLCAmYW1wO2kpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CW5ld19uciA9IG1heChkc3RfbnIsIGFyZy0mZ3Q7ZHN0X29mZiAmIzQzOyBhcmctJmd0O25yKTsKJiM0MzsJaWYgKG5ld19uciAmZ3Q7IElPUklOR19NQVhfRklYRURfRklMRVMpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJbWVtc2V0KCZhbXA7bmV3X2ZpbGVfdGFibGUsIDAsIHNpemVvZihuZXdfZmlsZV90YWJsZSkpOwomIzQzOwlpZiAoIWlvX2FsbG9jX2ZpbGVfdGFibGVzKGN0eCwgJmFtcDtuZXdfZmlsZV90YWJsZSwgbmV3X25yKSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwkvKiBDb3B5IG9yaWdpbmFsIG5vZGVzIGZyb20gYmVmb3JlIHRoZSBjbG9uZWQgcmFuZ2UgKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG1pbihhcmctJmd0O2RzdF9vZmYsIGRzdF9ucik7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgaW9fcnNyY19ub2RlICpzcmNfbm9kZSA9IGlvX3JzcmNfbm9kZV9sb29rdXAoJmFtcDtjdHgtJmd0O2ZpbGVfdGFibGUuZGF0YSwgaSk7CiYjNDM7CiYjNDM7CQlpZiAoIXNyY19ub2RlKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJaWYgKGlvX2Nsb25lX2ZpbGVfbm9kZShjdHgsIHNyY19ub2RlLCBpLCAmYW1wO25ld19maWxlX3RhYmxlKSkKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBDb3B5IHRoZSBhY3R1YWwgY2xvbmVkIHJhbmdlIGZyb20gdGhlIHNvdXJjZSByaW5nICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBhcmctJmd0O25yOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGlvX3JzcmNfbm9kZSAqc3JjX25vZGUgPSBpb19yc3JjX25vZGVfbG9va3VwKCZhbXA7c3JjX2N0eC0mZ3Q7ZmlsZV90YWJsZS5kYXRhLAomIzQzOwkJCQlhcmctJmd0O3NyY19vZmYgJiM0MzsgaSk7CiYjNDM7CiYjNDM7CQlpZiAoIXNyY19ub2RlKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJaWYgKGlvX2Nsb25lX2ZpbGVfbm9kZShjdHgsIHNyY19ub2RlLCBhcmctJmd0O2RzdF9vZmYgJiM0MzsgaSwgJmFtcDtuZXdfZmlsZV90YWJsZSkpCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQ29weSBvcmlnaW5hbCBub2RlcyBmcm9tIGFmdGVyIHRoZSBjbG9uZWQgcmFuZ2UgKi8KJiM0MzsJZm9yIChpID0gYXJnLSZndDtkc3Rfb2ZmICYjNDM7IGFyZy0mZ3Q7bnI7IGkgJmx0OyBkc3RfbnI7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgaW9fcnNyY19ub2RlICpzcmNfbm9kZSA9IGlvX3JzcmNfbm9kZV9sb29rdXAoJmFtcDtjdHgtJmd0O2ZpbGVfdGFibGUuZGF0YSwgaSk7CiYjNDM7CiYjNDM7CQlpZiAoIXNyY19ub2RlKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJaWYgKGlvX2Nsb25lX2ZpbGVfbm9kZShjdHgsIHNyY19ub2RlLCBpLCAmYW1wO25ld19maWxlX3RhYmxlKSkKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBmcmVlIHRoZSBvbGQgZmlsZSB0YWJsZSBpZiB0aGVyZSBpcyBhbnkgZGF0YSBwcmVzZW50ICovCiYjNDM7CWlmIChkc3RfbnIpCiYjNDM7CQlpb19mcmVlX2ZpbGVfdGFibGVzKGN0eCwgJmFtcDtjdHgtJmd0O2ZpbGVfdGFibGUpOwomIzQzOwomIzQzOwlXQVJOX09OX09OQ0UoY3R4LSZndDtmaWxlX3RhYmxlLmRhdGEubnIpOwomIzQzOwljdHgtJmd0O2ZpbGVfdGFibGUgPSBuZXdfZmlsZV90YWJsZTsKJiM0MzsJaW9fZmlsZV90YWJsZV9zZXRfYWxsb2NfcmFuZ2UoY3R4LCAwLCBjdHgtJmd0O2ZpbGVfdGFibGUuZGF0YS5ucik7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO291dDoKJiM0MzsJLyogRXJyb3IgUGF0aDogU2FmZWx5IGRlc3Ryb3kgd2hhdGV2ZXIgd2UgcGFydGlhbGx5IGJ1aWx0ICovCiYjNDM7CWlvX2ZyZWVfZmlsZV90YWJsZXMoY3R4LCAmYW1wO25ld19maWxlX3RhYmxlKTsKJiM0MzsJcmV0dXJuIC1FTk9NRU07CiYjNDM7fQomIzQzOwomIzQzO2ludCBpb19yZWdpc3Rlcl9jbG9uZV9maWxlcyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb191cmluZ19jbG9uZV9maWxlcyBjbG9uZV9hcmc7CiYjNDM7CXN0cnVjdCBpb19yaW5nX2N0eCAqc3JjX2N0eDsKJiM0MzsJYm9vbCByZWdpc3RlcmVkX3NyYzsKJiM0MzsJc3RydWN0IGZpbGUgKmZpbGU7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChjb3B5X2Zyb21fdXNlcigmYW1wO2Nsb25lX2FyZywgYXJnLCBzaXplb2YoY2xvbmVfYXJnKSkpCiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJaWYgKGNsb25lX2FyZy5mbGFncyAmYW1wOwomIzQzOwkgICAgfihJT1JJTkdfUkVHSVNURVJfU1JDX1JFR0lTVEVSRUQgfCBJT1JJTkdfUkVHSVNURVJfRFNUX1JFUExBQ0UpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChtZW1jaHJfaW52KGNsb25lX2FyZy5wYWQsIDAsIHNpemVvZihjbG9uZV9hcmcucGFkKSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmVnaXN0ZXJlZF9zcmMgPSAhIShjbG9uZV9hcmcuZmxhZ3MgJmFtcDsgSU9SSU5HX1JFR0lTVEVSX1NSQ19SRUdJU1RFUkVEKTsgCiYjNDM7CWZpbGUgPSBpb191cmluZ19jdHhfZ2V0X2ZpbGUoY2xvbmVfYXJnLnNyY19mZCwgcmVnaXN0ZXJlZF9zcmMpOwomIzQzOwlpZiAoSVNfRVJSKGZpbGUpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoZmlsZSk7CiYjNDM7CiYjNDM7CXNyY19jdHggPSBmaWxlLSZndDtwcml2YXRlX2RhdGE7CiYjNDM7CS8qIFNhbWUgcmluZyBjbG9uZSBpcyBub3QgYWxsb3dlZCAqLwomIzQzOwlpZiAoc3JjX2N0eCA9PSBjdHgpIHsKJiM0MzsJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtjdHgtJmd0O3VyaW5nX2xvY2spOwomIzQzOwlsb2NrX3R3b19yaW5ncyhjdHgsIHNyY19jdHgpOwomIzQzOwomIzQzOwlyZXQgPSBpb19jbG9uZV9maWxlcyhjdHgsIHNyY19jdHgsICZhbXA7Y2xvbmVfYXJnKTsKJiM0MzsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7c3JjX2N0eC0mZ3Q7dXJpbmdfbG9jayk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlpZiAoIXJlZ2lzdGVyZWRfc3JjKQomIzQzOwkJZnB1dChmaWxlKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiB2b2lkIGlvX3ZlY19mcmVlKHN0cnVjdCBpb3VfdmVjICppdikKIHsKIAlpZiAoIWl2LSZndDtpb3ZlYykKZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3JzcmMuaCBiL2lvX3VyaW5nL3JzcmMuaAppbmRleCA0NGUzMzg2ZjdjMWNhOS4uMzJmNWM0N2M0NmFmYTEgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL3JzcmMuaAomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9yc3JjLmgKQEAgLTc1LDYgJiM0Mzs3NSw3IEBAIGludCBpb19wcmVwX3JlZ19pb3ZlYyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdV92ZWMgKml2LAogCQkJY29uc3Qgc3RydWN0IGlvdmVjIF9fdXNlciAqdXZlYywgc2l6ZV90IHV2ZWNfc2Vncyk7CiAKIGludCBpb19yZWdpc3Rlcl9jbG9uZV9idWZmZXJzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnKTsKJiM0MztpbnQgaW9fcmVnaXN0ZXJfY2xvbmVfZmlsZXMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcpOwogaW50IGlvX3NxZV9idWZmZXJzX3VucmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpOwogaW50IGlvX3NxZV9idWZmZXJzX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnLAogCQkJICAgIHVuc2lnbmVkIGludCBucl9hcmdzLCB1NjQgX191c2VyICp0YWdzKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTA6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMxNAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBpb191cmluZyBGaWxlIERlc2NyaXB0b3IgQ2xvbmluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGludHJvZHVjZXMgYSBuZXcgYGlvX3VyaW5nYCByZWdpc3RyYXRpb24gb3Bjb2RlLCBgSU9SSU5HX1JFR0lTVEVSX0NMT05FX0ZJTEVTYC4gTXkgZmlyc3QgdGhvdWdodCBpczogJiMzNDtJbnRlcmVzdGluZywgdGhpcyBpcyBhIGNvcmUga2VybmVsIG1vZGlmaWNhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGlvX3VyaW5nYCBzdWJzeXN0ZW0uJiMzNDsgSXQmIzM5O3MgZGlyZWN0bHkgY2hhbmdpbmcgaG93IHdlIGhhbmRsZSBmaWxlIGRlc2NyaXB0b3JzIHdpdGhpbiBpb191cmluZywgYWxsb3dpbmcgdXMgdG8gY2xvbmUgdGhlbSBmcm9tIGFub3RoZXIgcmluZy4gSSBzZWUgdGhlIG1haW4gd29yayBpcyBpbiBgaW9fdXJpbmcvcmVnaXN0ZXIuY2AgYW5kIGBpb191cmluZy9yc3JjLmNgLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgcmVnaXN0cmF0aW9uIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50IGFzcGVjdHMuCgpOb3csIGxldCBtZSBtZW50YWxseSBtYXAgdGhlIG5ldyBmdW5jdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBpb19jbG9uZV9maWxlX25vZGVgLCBgaW9fY2xvbmVfZmlsZXNgLCBhbmQgYGlvX3JlZ2lzdGVyX2Nsb25lX2ZpbGVzYC4gVGhhdCYjMzk7cyB0aGUgY29yZSBvZiB0aGUgZnVuY3Rpb25hbGl0eS4gQW5kLCBvZiBjb3Vyc2UsIHRoZSBlbnRyeSBwb2ludCwgYF9faW9fdXJpbmdfcmVnaXN0ZXJgLCBhbHRob3VnaCB0aGF0JiMzOTtzIGxpa2VseSBtb3JlIGdlbmVyaWMuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhvc2UgZnVuY3Rpb24gY2FsbHMgYW5kIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgZmxvdy4KCkkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLiBJIGtub3cgYENPTkZJR19JT19VUklOR2AgZW5hYmxlcyB0aGUgd2hvbGUgc3Vic3lzdGVtLiBHaXZlbiB0aGUgdGFyZ2V0ZWQgZmlsZXMsIGl0JiMzOTtzIHZlcnkgbGlrZWx5IHRoYXQmIzM5O3MgdGhlIG9ubHkgcmVsZXZhbnQgY29uZmlndXJhdGlvbiwgYnV0IEkmIzM5O2xsIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBzbmVha3kgZGVwZW5kZW5jaWVzIG9yIHN1YnRsZSBmZWF0dXJlcyB0aGF0IHJlcXVpcmUgYWRkaXRpb25hbCBzZXR0aW5ncy4gSSBuZWVkIHRvIGJlIGNlcnRhaW4gdGhlcmUgaXNuJiMzOTt0IHNvbWUgb2JzY3VyZSBjb25maWcgZmxhZyB0aGF0IHRyaXBzIHVwIHRoZSBidWlsZCBvciBydW50aW1lIGJlaGF2aW9yLgoKRmluYWxseSwgSSYjMzk7bGwgbmVlZCB0byBsZXZlcmFnZSBvdXIgdG9vbHMgdG8gbWV0aWN1bG91c2x5IHZlcmlmeSB0aGUgcGF0Y2guIFdlIG5lZWQgdG8gdmFsaWRhdGUgdGhlIGltcGxlbWVudGF0aW9uJiMzOTtzIGNvcnJlY3RuZXNzLCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsIGFuZCBwb3RlbnRpYWwgZm9yIGludHJvZHVjaW5nIG5ldyBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIFRoZSBjbG9uaW5nIG9mIGZpbGUgZGVzY3JpcHRvcnMgY2FuIGJlIGEgdHJpY2t5IGFyZWEgdG8gaGFuZGxlIHNlY3VyZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDEwOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19JT19VUklORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9NYWtlZmlsZT03PWVuZGlmXG5pb191cmluZy9NYWtlZmlsZS04LVxuaW9fdXJpbmcvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfSU9fVVJJTkcpXHRcdCYjNDM7PSBpb191cmluZy5vIG9wZGVmLm8ga2J1Zi5vIHJzcmMubyBub3RpZi5vIFxcXG5pb191cmluZy9NYWtlZmlsZS0xMC1cdFx0XHRcdFx0dGN0eC5vIGZpbGV0YWJsZS5vIHJ3Lm8gcG9sbC5vIFxcXG4tLVxuaW9fdXJpbmcvTWFrZWZpbGUtMTgtXG5pb191cmluZy9NYWtlZmlsZToxOTpvYmotJChDT05GSUdfSU9fVVJJTkdfWkNSWClcdCYjNDM7PSB6Y3J4Lm9cbmlvX3VyaW5nL01ha2VmaWxlLTIwLW9iai0kKENPTkZJR19JT19XUSlcdFx0JiM0Mzs9IGlvLXdxLm9cbi0tXG5pb191cmluZy9NYWtlZmlsZT0yNT1vYmotJChDT05GSUdfUFJPQ19GUykgJiM0Mzs9IGZkaW5mby5vXG5pb191cmluZy9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfSU9fVVJJTkdfTU9DS19GSUxFKSAmIzQzOz0gbW9ja19maWxlLm9cbmlvX3VyaW5nL01ha2VmaWxlOjI3Om9iai0kKENPTkZJR19JT19VUklOR19CUEYpICYjNDM7PSBicGZfZmlsdGVyLm9cbmlvX3VyaW5nL01ha2VmaWxlOjI4Om9iai0kKENPTkZJR19JT19VUklOR19CUEZfT1BTKSAmIzQzOz0gYnBmLW9wcy5vXG4tLVxuaW9fdXJpbmcvYnBmLW9wcy5oPTEzPXN0cnVjdCBpb191cmluZ19icGZfb3BzIHtcbi0tXG5pb191cmluZy9icGYtb3BzLmgtMTktXG5pb191cmluZy9icGYtb3BzLmg6MjA6I2lmZGVmIENPTkZJR19JT19VUklOR19CUEZfT1BTXG5pb191cmluZy9icGYtb3BzLmgtMjEtdm9pZCBpb191bnJlZ2lzdGVyX2JwZl9vcHMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpO1xuLS1cbmlvX3VyaW5nL2JwZl9maWx0ZXIuaC02LVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oOjc6I2lmZGVmIENPTkZJR19JT19VUklOR19CUEZcbmlvX3VyaW5nL2JwZl9maWx0ZXIuaC04LVxuLS1cbmlvX3VyaW5nL2JwZl9maWx0ZXIuaD00Mj1zdGF0aWMgaW5saW5lIHZvaWQgaW9fYnBmX2ZpbHRlcl9jbG9uZShzdHJ1Y3QgaW9fcmVzdHJpY3Rpb24gKmRzdCxcbi0tXG5pb191cmluZy9icGZfZmlsdGVyLmgtNDUtfVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oOjQ2OiNlbmRpZiAvKiBDT05GSUdfSU9fVVJJTkdfQlBGICovXG5pb191cmluZy9icGZfZmlsdGVyLmgtNDctXG4tLVxuaW9fdXJpbmcvemNyeC5oPTUyPXN0cnVjdCBpb196Y3J4X2lmcSB7XG4tLVxuaW9fdXJpbmcvemNyeC5oLTc2LVxuaW9fdXJpbmcvemNyeC5oOjc3OiNpZiBkZWZpbmVkKENPTkZJR19JT19VUklOR19aQ1JYKVxuaW9fdXJpbmcvemNyeC5oLTc4LWludCBpb196Y3J4X2N0cmwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcsIHVuc2lnbmVkIG5yX2FyZyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTA6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYwNQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBpb191cmluZyBDbG9uZSBGaWxlIERlc2NyaXB0b3IgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRpbmcgYElPUklOR19SRUdJU1RFUl9DTE9ORV9GSUxFU2AgdG8gdGhlIGBfX2lvX3VyaW5nX3JlZ2lzdGVyYCBmdW5jdGlvbiB3aXRoaW4gYGlvX3VyaW5nL3JlZ2lzdGVyLmNgLiBUaGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludC4gTG9va2luZyBhdCB0aGUgY29kZSwgdGhlIGNvcmUgbG9naWMgZm9yIHRoaXMgY2xvbmUgZnVuY3Rpb25hbGl0eSDigJMgYGlvX2Nsb25lX2ZpbGVfbm9kZWAsIGBpb19jbG9uZV9maWxlc2AsIGFuZCBgaW9fcmVnaXN0ZXJfY2xvbmVfZmlsZXNgIOKAkyByZXNpZGVzIGluIGBpb191cmluZy9yc3JjLmNgLiBBbmQgaW1wb3J0YW50bHksIHRoZXNlIGZ1bmN0aW9ucyAqYXJlKiBjb21waWxlZCB3aGVuIGBDT05GSUdfSU9fVVJJTkdgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgZ29vZDsgaXQgbWVhbnMgd2UgY2FuIHRlc3QgaXQgb24gYSBzdGFuZGFyZCBpb191cmluZyBzZXR1cC4KCkdpdmVuIHRoaXMsIEkmIzM5O20gbGVhbmluZyBzdHJvbmdseSB0b3dhcmRzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuIFRoaXMgZnVuZGFtZW50YWxseSBjaGFuZ2VzIGhvdyBpb191cmluZyBpbnRlcmFjdHMgd2l0aCBmaWxlIGRlc2NyaXB0b3JzLCBwb3RlbnRpYWxseSBpbnRyb2R1Y2luZyBuZXcgY29ybmVyIGNhc2VzIG9yIHZ1bG5lcmFiaWxpdGllcy4gSXQmIzM5O3MgYSBrZXJuZWwtbGV2ZWwgY2hhbmdlIGFuZCBpbnRyb2R1Y2VzIG5ldyBjb2RlIHBhdGhzLCBzbyBpdCYjMzk7cyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4KCkkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIGlmIGFueSBvdGhlciBjb25maWdzIGFyZSByZXF1aXJlZCBiZXlvbmQgYElPX1VSSU5HYCwgYnV0IEkgc3VzcGVjdCBub3QuIEEgcXVpY2sgZ2xhbmNlIGF0IGBpb191cmluZy9yc3JjLmNgIGNvbmZpcm1zIHRoYXQgdGhlIHJlbGV2YW50IGNvZGUgaXMgY29tcGlsZWQgdW5jb25kaXRpb25hbGx5IHdoZW4gYENPTkZJR19JT19VUklOR2AgaXMgZW5hYmxlZC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkLgoKVWx0aW1hdGVseSwgdGhlIGFkZGl0aW9uIG9mIHRoaXMgZmlsZSBkZXNjcmlwdG9yIGNsb25pbmcgbWVjaGFuaXNtIGluIHRoZSBpb191cmluZyBzeXN0ZW0gcHJlc2VudHMgbmV3IGF0dGFjayBzdXJmYWNlcyBhbmQgcG90ZW50aWFsIGZvciBzdWJ0bGUsIHVuZXhwZWN0ZWQgYmVoYXZpb3VyLiBJdOKAmXMgZGVmaW5pdGVseSB3b3J0aCBhIGRlZXAgZGl2ZSB3aXRoIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTA6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvcnNyYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxMDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjQ5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgaW9fdXJpbmcgUmVzb3VyY2UgUmVnaXN0cmF0aW9uKioKClJpZ2h0LCBzbyB0aGUgcHJvYmxlbSYjMzk7cyBub3Qgc3RlbW1pbmcgZnJvbSB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyB0aGVtc2VsdmVzIHdpdGhpbiBgaW9fdXJpbmcvcnNyYy5jYC4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgZmlyc3QgY2hlY2ssIGJ1dCBpdCYjMzk7cyBhIGRlYWQgZW5kLiBPa2F5LCB3aGVyZSBlbHNlIGNvdWxkIHRoaXMgYmUgaGFuZGxlZD8gR2l2ZW4gdGhlIG5hdHVyZSBvZiByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBob3cgdGhlIGtlcm5lbCBpbnRlcmFjdHMgd2l0aCB1c2VyIHNwYWNlLCB0aGUgbG9naWNhbCBuZXh0IHBsYWNlIHRvIGxvb2sgaXMgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIGBpb191cmluZy9yZWdpc3Rlci5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBtZWF0IG9mIGhvdyByZXNvdXJjZXMg4oCTIHBvdGVudGlhbGx5IGluY2x1ZGluZyB3aGF0ZXZlciBpcyBjYXVzaW5nIHRoZSBpc3N1ZSDigJMgYXJlIGFsbG9jYXRlZCwgbWFwcGVkLCBhbmQgZ2VuZXJhbGx5IGhhbmRsZWQgZHVyaW5nIHRoZSBzZXR1cCBwaGFzZSBvZiBhbiBpb191cmluZyBpbnN0YW5jZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDEwOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZy9yZWdpc3Rlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL3JlZ2lzdGVyLmM9MzE1PXN0YXRpYyBfX2NvbGQgaW50IGlvX3JlZ2lzdGVyX2lvd3FfYWZmKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMzI3LVxuaW9fdXJpbmcvcmVnaXN0ZXIuYzozMjg6I2lmZGVmIENPTkZJR19DT01QQVRcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMzI5LVx0aWYgKGluX2NvbXBhdF9zeXNjYWxsKCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTA6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU4OAoJCQkJCQkJb3V0cHV0OiAxMjMKCQkJCQkJCXRob3VnaHRzOiAxMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgaW9fdXJpbmcgUGF0Y2gqKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBgQ09ORklHX0lPX1VSSU5HYCBpcyB0aGUgb25seSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbiBoZXJlLiBObyBuZWVkIHRvIGRpZyBhbnkgZGVlcGVyIGZvciBvdGhlciBzZXR0aW5ncy4KCkFscmlnaHQsIHRpbWUgdG8gZm9ybXVsYXRlIGEgcHJvcGVyIHJlc3BvbnNlLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgcGF0Y2ggdGhhdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmc7IGl0IGludHJvZHVjZXMgYSBicmFuZCBuZXcgb3Bjb2RlLCBgSU9SSU5HX1JFR0lTVEVSX0NMT05FX0ZJTEVTYCwgZm9yIHRoZSBgaW9fdXJpbmdgIHN5c3RlbS4gVGhpcyBpcyBhIHNvbGlkIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGNvcmUuIE5ldyByZWFjaGFibGUgY29kZSBwYXRocyBhbHdheXMgZ2V0IG15IGF0dGVudGlvbiEgVGhlIGluY2x1c2lvbiBvZiB0aGVzZSBzcGVjaWZpYyBzeW1ib2xzIC0gYGlvX2Nsb25lX2ZpbGVfbm9kZWAsIGBpb19jbG9uZV9maWxlc2AsIGFuZCBgaW9fcmVnaXN0ZXJfY2xvbmVfZmlsZXNgIC0gYXMgZm9jdXMgcG9pbnRzIGZvciBmdXp6aW5nIGlzIHNwb3Qgb24uIFRoZXkgaGlnaGxpZ2h0IHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgYXJlIGF0IHBsYXkgaW4gdGhlIG5ldyBmdW5jdGlvbmFsaXR5LiBFc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBhbGxvd3MgY2xvbmluZyBmaWxlIGRlc2NyaXB0b3JzIGZyb20gb25lIGBpb191cmluZ2AgcmluZyB0byBhbm90aGVyLCB3aGljaCBvcGVucyB1cCBuZXcgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlcyBhbmQgcmVxdWlyZXMgcmlnb3JvdXMgdGVzdGluZy4gVGhlIHByZXNlbmNlIG9mIGBJT19VUklOR2AgaW4gdGhlIEVuYWJsZUNvbmZpZ3MgYXJyYXkgbWVhbnMgdGhlIG5ldyBmZWF0dXJlIGlzIGNvcnJlY3RseSBnYXRlZCBieSB0aGlzIHBhcmFtZXRlciwgd2hpY2ggbWVhbnMgaXQgc2hvdWxkIG5vdCBnZXQgaW4gdGhlIHdheSBvZiBvdGhlciBmZWF0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTA6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fY2xvbmVfZmlsZV9ub2RlJiMzNDssCiAgICAmIzM0O2lvX2Nsb25lX2ZpbGVzJiMzNDssCiAgICAmIzM0O2lvX3JlZ2lzdGVyX2Nsb25lX2ZpbGVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgaW9fdXJpbmcgcmVnaXN0cmF0aW9uIG9wY29kZSBgSU9SSU5HX1JFR0lTVEVSX0NMT05FX0ZJTEVTYCB3aGljaCBhbGxvd3MgY2xvbmluZyBmaWxlIGRlc2NyaXB0b3JzIGZyb20gYW5vdGhlciBpb191cmluZyByaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIChpb191cmluZykgdGhhdCBhZGRzIG5ldyByZWFjaGFibGUgY29kZSBwYXRocyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19jbG9uZV9maWxlX25vZGUmIzM0OywKICAgICYjMzQ7aW9fY2xvbmVfZmlsZXMmIzM0OywKICAgICYjMzQ7aW9fcmVnaXN0ZXJfY2xvbmVfZmlsZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBpb191cmluZyByZWdpc3RyYXRpb24gb3Bjb2RlIGBJT1JJTkdfUkVHSVNURVJfQ0xPTkVfRklMRVNgIHdoaWNoIGFsbG93cyBjbG9uaW5nIGZpbGUgZGVzY3JpcHRvcnMgZnJvbSBhbm90aGVyIGlvX3VyaW5nIHJpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBrZXJuZWwgKGlvX3VyaW5nKSB0aGF0IGFkZHMgbmV3IHJlYWNoYWJsZSBjb2RlIHBhdGhzIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTA6Mzc6NTIuNzEwMzg1NzY4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2NTM0MTE4OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb19jbG9uZV9maWxlX25vZGVcIixcbiAgICBcImlvX2Nsb25lX2ZpbGVzXCIsXG4gICAgXCJpb19yZWdpc3Rlcl9jbG9uZV9maWxlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgaW9fdXJpbmcgcmVnaXN0cmF0aW9uIG9wY29kZSBgSU9SSU5HX1JFR0lTVEVSX0NMT05FX0ZJTEVTYCB3aGljaCBhbGxvd3MgY2xvbmluZyBmaWxlIGRlc2NyaXB0b3JzIGZyb20gYW5vdGhlciBpb191cmluZyByaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIChpb191cmluZykgdGhhdCBhZGRzIG5ldyByZWFjaGFibGUgY29kZSBwYXRocyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTA6Mzc6NTIuNzEwMzkyODc4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjQ3OTYwNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0MGMyZGZkOWVjYmM0NTFmMmYzODRmN2Y5NjhlZDYyZTA0ZmRjOWUxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVuIDI0IDEwOjM3OjUwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmhcXG5pbmRleCA5MDlmYjdhZWE2MzhlYi4uNjdmY2M0MGY4ZGZjM2MgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaFxcbkBAIC03MjMsNiArNzIzLDkgQEAgZW51bSBpb191cmluZ19yZWdpc3Rlcl9vcCB7XFxuIFxcdC8qIHJlZ2lzdGVyIGJwZiBmaWx0ZXJpbmcgcHJvZ3JhbXMgKi9cXG4gXFx0SU9SSU5HX1JFR0lTVEVSX0JQRl9GSUxURVJcXHRcXHQ9IDM3LFxcbiBcXG4rXFx0LyogY2xvbmUgZmlsZSBkZXNjcmlwdG9ycyBmcm9tIGFub3RoZXIgcmluZyAqL1xcbitcXHRJT1JJTkdfUkVHSVNURVJfQ0xPTkVfRklMRVNcXHRcXHQ9IDM4LFxcbitcXG4gXFx0LyogdGhpcyBnb2VzIGxhc3QgKi9cXG4gXFx0SU9SSU5HX1JFR0lTVEVSX0xBU1QsXFxuIFxcbkBAIC04NTQsNiArODU3LDE1IEBAIHN0cnVjdCBpb191cmluZ19jbG9uZV9idWZmZXJzIHtcXG4gXFx0X191MzJcXHRwYWRbM107XFxuIH07XFxuIFxcbitzdHJ1Y3QgaW9fdXJpbmdfY2xvbmVfZmlsZXMge1xcbitcXHRfX3UzMiBzcmNfZmQ7XFxuK1xcdF9fdTMyIGZsYWdzO1xcbitcXHRfX3UzMiBzcmNfb2ZmO1xcbitcXHRfX3UzMiBkc3Rfb2ZmO1xcbitcXHRfX3UzMiBucjtcXG4rXFx0X191MzIgcGFkWzNdO1xcbit9O1xcbitcXG4gc3RydWN0IGlvX3VyaW5nX2J1ZiB7XFxuIFxcdF9fdTY0XFx0YWRkcjtcXG4gXFx0X191MzJcXHRsZW47XFxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3JlZ2lzdGVyLmMgYi9pb191cmluZy9yZWdpc3Rlci5jXFxuaW5kZXggZGNlNWUyZjljZjc3MDIuLmJiYzhjNTA2ZWEyZGJmIDEwMDY0NFxcbi0tLSBhL2lvX3VyaW5nL3JlZ2lzdGVyLmNcXG4rKysgYi9pb191cmluZy9yZWdpc3Rlci5jXFxuQEAgLTkyNCw2ICs5MjQsMTIgQEAgc3RhdGljIGludCBfX2lvX3VyaW5nX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB1bnNpZ25lZCBvcGNvZGUsXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRyZXQgPSBpb19yZWdpc3Rlcl9jbG9uZV9idWZmZXJzKGN0eCwgYXJnKTtcXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgSU9SSU5HX1JFR0lTVEVSX0NMT05FX0ZJTEVTOlxcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRpZiAoIWFyZyB8fCBucl9hcmdzICE9IDEpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRyZXQgPSBpb19yZWdpc3Rlcl9jbG9uZV9maWxlcyhjdHgsIGFyZyk7XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIElPUklOR19SRUdJU1RFUl9aQ1JYX0lGUTpcXG4gXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4gXFx0XFx0aWYgKCFhcmcgfHwgbnJfYXJncyAhPSAxKVxcbmRpZmYgLS1naXQgYS9pb191cmluZy9yc3JjLmMgYi9pb191cmluZy9yc3JjLmNcXG5pbmRleCA2NTAzMDM2MjZiZTZlZC4uNWRkZDcxNWUyYTYzNjUgMTAwNjQ0XFxuLS0tIGEvaW9fdXJpbmcvcnNyYy5jXFxuKysrIGIvaW9fdXJpbmcvcnNyYy5jXFxuQEAgLTEzMDMsNiArMTMwMywxNTEgQEAgaW50IGlvX3JlZ2lzdGVyX2Nsb25lX2J1ZmZlcnMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcpXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgaW9fY2xvbmVfZmlsZV9ub2RlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW9fcnNyY19ub2RlICpzcmNfbm9kZSxcXG4rXFx0XFx0XFx0ICAgICAgaW50IGRzdF9pbmRleCxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IGlvX2ZpbGVfdGFibGUgKm5ld190YWJsZSlcXG4re1xcbitcXHRzdHJ1Y3QgaW9fcnNyY19ub2RlICpkc3Rfbm9kZTtcXG4rXFx0c3RydWN0IGZpbGUgKmZpbGU7XFxuK1xcbitcXHRkc3Rfbm9kZSA9IGlvX3JzcmNfbm9kZV9hbGxvYyhjdHgsIElPUklOR19SU1JDX0ZJTEUpO1xcbitcXHRpZiAoIWRzdF9ub2RlKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdGZpbGUgPSBpb19zbG90X2ZpbGUoc3JjX25vZGUpO1xcbitcXHRnZXRfZmlsZShmaWxlKTtcXG4rXFx0aW9fZml4ZWRfZmlsZV9zZXQoZHN0X25vZGUsIGZpbGUpO1xcbitcXG4rXFx0bmV3X3RhYmxlLVxcdTAwM2VkYXRhLm5vZGVzW2RzdF9pbmRleF0gPSBkc3Rfbm9kZTtcXG4rXFx0aW9fZmlsZV9iaXRtYXBfc2V0KG5ld190YWJsZSwgZHN0X2luZGV4KTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGlvX2Nsb25lX2ZpbGVzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fcmluZ19jdHggKnNyY19jdHgsXFxuK1xcdFxcdFxcdCAgc3RydWN0IGlvX3VyaW5nX2Nsb25lX2ZpbGVzICphcmcpXFxuK3tcXG4rXFx0c3RydWN0IGlvX2ZpbGVfdGFibGUgbmV3X2ZpbGVfdGFibGU7XFxuK1xcdHVuc2lnbmVkIGludCBkc3RfbnIgPSBjdHgtXFx1MDAzZWZpbGVfdGFibGUuZGF0YS5ucjtcXG4rXFx0dW5zaWduZWQgaW50IHNyY19uciA9IHNyY19jdHgtXFx1MDAzZWZpbGVfdGFibGUuZGF0YS5ucjtcXG4rXFx0dW5zaWduZWQgaW50IG5ld19uciwgaTtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmN0eC1cXHUwMDNldXJpbmdfbG9jayk7XFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnNyY19jdHgtXFx1MDAzZXVyaW5nX2xvY2spO1xcbitcXG4rXFx0aWYgKGRzdF9uciBcXHUwMDI2XFx1MDAyNiAhKGFyZy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfUkVHSVNURVJfRFNUX1JFUExBQ0UpKVxcbitcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXG4rXFx0aWYgKCFzcmNfbnIpXFxuK1xcdFxcdHJldHVybiAtRU5YSU87XFxuK1xcbitcXHRpZiAoIWFyZy1cXHUwMDNlbnIpXFxuK1xcdFxcdGFyZy1cXHUwMDNlbnIgPSBzcmNfbnI7XFxuK1xcdGVsc2UgaWYgKGFyZy1cXHUwMDNlbnIgXFx1MDAzZSBzcmNfbnIpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKGNoZWNrX2FkZF9vdmVyZmxvdyhhcmctXFx1MDAzZXNyY19vZmYsIGFyZy1cXHUwMDNlbnIsIFxcdTAwMjZpKSB8fCBpIFxcdTAwM2Ugc3JjX25yKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aWYgKGNoZWNrX2FkZF9vdmVyZmxvdyhhcmctXFx1MDAzZWRzdF9vZmYsIGFyZy1cXHUwMDNlbnIsIFxcdTAwMjZpKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRuZXdfbnIgPSBtYXgoZHN0X25yLCBhcmctXFx1MDAzZWRzdF9vZmYgKyBhcmctXFx1MDAzZW5yKTtcXG4rXFx0aWYgKG5ld19uciBcXHUwMDNlIElPUklOR19NQVhfRklYRURfRklMRVMpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0bWVtc2V0KFxcdTAwMjZuZXdfZmlsZV90YWJsZSwgMCwgc2l6ZW9mKG5ld19maWxlX3RhYmxlKSk7XFxuK1xcdGlmICghaW9fYWxsb2NfZmlsZV90YWJsZXMoY3R4LCBcXHUwMDI2bmV3X2ZpbGVfdGFibGUsIG5ld19ucikpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0LyogQ29weSBvcmlnaW5hbCBub2RlcyBmcm9tIGJlZm9yZSB0aGUgY2xvbmVkIHJhbmdlICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBtaW4oYXJnLVxcdTAwM2Vkc3Rfb2ZmLCBkc3RfbnIpOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IGlvX3JzcmNfbm9kZSAqc3JjX25vZGUgPSBpb19yc3JjX25vZGVfbG9va3VwKFxcdTAwMjZjdHgtXFx1MDAzZWZpbGVfdGFibGUuZGF0YSwgaSk7XFxuK1xcbitcXHRcXHRpZiAoIXNyY19ub2RlKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKGlvX2Nsb25lX2ZpbGVfbm9kZShjdHgsIHNyY19ub2RlLCBpLCBcXHUwMDI2bmV3X2ZpbGVfdGFibGUpKVxcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0LyogQ29weSB0aGUgYWN0dWFsIGNsb25lZCByYW5nZSBmcm9tIHRoZSBzb3VyY2UgcmluZyAqL1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYXJnLVxcdTAwM2VucjsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBpb19yc3JjX25vZGUgKnNyY19ub2RlID0gaW9fcnNyY19ub2RlX2xvb2t1cChcXHUwMDI2c3JjX2N0eC1cXHUwMDNlZmlsZV90YWJsZS5kYXRhLFxcbitcXHRcXHRcXHRcXHRhcmctXFx1MDAzZXNyY19vZmYgKyBpKTtcXG4rXFxuK1xcdFxcdGlmICghc3JjX25vZGUpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRpZiAoaW9fY2xvbmVfZmlsZV9ub2RlKGN0eCwgc3JjX25vZGUsIGFyZy1cXHUwMDNlZHN0X29mZiArIGksIFxcdTAwMjZuZXdfZmlsZV90YWJsZSkpXFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHQvKiBDb3B5IG9yaWdpbmFsIG5vZGVzIGZyb20gYWZ0ZXIgdGhlIGNsb25lZCByYW5nZSAqL1xcbitcXHRmb3IgKGkgPSBhcmctXFx1MDAzZWRzdF9vZmYgKyBhcmctXFx1MDAzZW5yOyBpIFxcdTAwM2MgZHN0X25yOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IGlvX3JzcmNfbm9kZSAqc3JjX25vZGUgPSBpb19yc3JjX25vZGVfbG9va3VwKFxcdTAwMjZjdHgtXFx1MDAzZWZpbGVfdGFibGUuZGF0YSwgaSk7XFxuK1xcbitcXHRcXHRpZiAoIXNyY19ub2RlKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKGlvX2Nsb25lX2ZpbGVfbm9kZShjdHgsIHNyY19ub2RlLCBpLCBcXHUwMDI2bmV3X2ZpbGVfdGFibGUpKVxcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0LyogZnJlZSB0aGUgb2xkIGZpbGUgdGFibGUgaWYgdGhlcmUgaXMgYW55IGRhdGEgcHJlc2VudCAqL1xcbitcXHRpZiAoZHN0X25yKVxcbitcXHRcXHRpb19mcmVlX2ZpbGVfdGFibGVzKGN0eCwgXFx1MDAyNmN0eC1cXHUwMDNlZmlsZV90YWJsZSk7XFxuK1xcbitcXHRXQVJOX09OX09OQ0UoY3R4LVxcdTAwM2VmaWxlX3RhYmxlLmRhdGEubnIpO1xcbitcXHRjdHgtXFx1MDAzZWZpbGVfdGFibGUgPSBuZXdfZmlsZV90YWJsZTtcXG4rXFx0aW9fZmlsZV90YWJsZV9zZXRfYWxsb2NfcmFuZ2UoY3R4LCAwLCBjdHgtXFx1MDAzZWZpbGVfdGFibGUuZGF0YS5ucik7XFxuK1xcdHJldHVybiAwO1xcbitcXG4rb3V0OlxcbitcXHQvKiBFcnJvciBQYXRoOiBTYWZlbHkgZGVzdHJveSB3aGF0ZXZlciB3ZSBwYXJ0aWFsbHkgYnVpbHQgKi9cXG4rXFx0aW9fZnJlZV9maWxlX3RhYmxlcyhjdHgsIFxcdTAwMjZuZXdfZmlsZV90YWJsZSk7XFxuK1xcdHJldHVybiAtRU5PTUVNO1xcbit9XFxuK1xcbitpbnQgaW9fcmVnaXN0ZXJfY2xvbmVfZmlsZXMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcpXFxuK3tcXG4rXFx0c3RydWN0IGlvX3VyaW5nX2Nsb25lX2ZpbGVzIGNsb25lX2FyZztcXG4rXFx0c3RydWN0IGlvX3JpbmdfY3R4ICpzcmNfY3R4O1xcbitcXHRib29sIHJlZ2lzdGVyZWRfc3JjO1xcbitcXHRzdHJ1Y3QgZmlsZSAqZmlsZTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2Y2xvbmVfYXJnLCBhcmcsIHNpemVvZihjbG9uZV9hcmcpKSlcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdGlmIChjbG9uZV9hcmcuZmxhZ3MgXFx1MDAyNlxcbitcXHQgICAgfihJT1JJTkdfUkVHSVNURVJfU1JDX1JFR0lTVEVSRUQgfCBJT1JJTkdfUkVHSVNURVJfRFNUX1JFUExBQ0UpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChtZW1jaHJfaW52KGNsb25lX2FyZy5wYWQsIDAsIHNpemVvZihjbG9uZV9hcmcucGFkKSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmVnaXN0ZXJlZF9zcmMgPSAhIShjbG9uZV9hcmcuZmxhZ3MgXFx1MDAyNiBJT1JJTkdfUkVHSVNURVJfU1JDX1JFR0lTVEVSRUQpOyBcXG4rXFx0ZmlsZSA9IGlvX3VyaW5nX2N0eF9nZXRfZmlsZShjbG9uZV9hcmcuc3JjX2ZkLCByZWdpc3RlcmVkX3NyYyk7XFxuK1xcdGlmIChJU19FUlIoZmlsZSkpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKGZpbGUpO1xcbitcXG4rXFx0c3JjX2N0eCA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4rXFx0LyogU2FtZSByaW5nIGNsb25lIGlzIG5vdCBhbGxvd2VkICovXFxuK1xcdGlmIChzcmNfY3R4ID09IGN0eCkge1xcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjdHgtXFx1MDAzZXVyaW5nX2xvY2spO1xcbitcXHRsb2NrX3R3b19yaW5ncyhjdHgsIHNyY19jdHgpO1xcbitcXG4rXFx0cmV0ID0gaW9fY2xvbmVfZmlsZXMoY3R4LCBzcmNfY3R4LCBcXHUwMDI2Y2xvbmVfYXJnKTtcXG4rXFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2c3JjX2N0eC1cXHUwMDNldXJpbmdfbG9jayk7XFxuK1xcbitvdXQ6XFxuK1xcdGlmICghcmVnaXN0ZXJlZF9zcmMpXFxuK1xcdFxcdGZwdXQoZmlsZSk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuIHZvaWQgaW9fdmVjX2ZyZWUoc3RydWN0IGlvdV92ZWMgKml2KVxcbiB7XFxuIFxcdGlmICghaXYtXFx1MDAzZWlvdmVjKVxcbmRpZmYgLS1naXQgYS9pb191cmluZy9yc3JjLmggYi9pb191cmluZy9yc3JjLmhcXG5pbmRleCA0NGUzMzg2ZjdjMWNhOS4uMzJmNWM0N2M0NmFmYTEgMTAwNjQ0XFxuLS0tIGEvaW9fdXJpbmcvcnNyYy5oXFxuKysrIGIvaW9fdXJpbmcvcnNyYy5oXFxuQEAgLTc1LDYgKzc1LDcgQEAgaW50IGlvX3ByZXBfcmVnX2lvdmVjKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW91X3ZlYyAqaXYsXFxuIFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBpb3ZlYyBfX3VzZXIgKnV2ZWMsIHNpemVfdCB1dmVjX3NlZ3MpO1xcbiBcXG4gaW50IGlvX3JlZ2lzdGVyX2Nsb25lX2J1ZmZlcnMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcpO1xcbitpbnQgaW9fcmVnaXN0ZXJfY2xvbmVfZmlsZXMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcpO1xcbiBpbnQgaW9fc3FlX2J1ZmZlcnNfdW5yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCk7XFxuIGludCBpb19zcWVfYnVmZmVyc19yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZyxcXG4gXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBucl9hcmdzLCB1NjQgX191c2VyICp0YWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTA6Mzc6NTMuNDc2MzQ5MDRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE5ODg3NDM0MTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9fY2xvbmVfZmlsZV9ub2RlXCIsXG4gICAgXCJpb19jbG9uZV9maWxlc1wiLFxuICAgIFwiaW9fcmVnaXN0ZXJfY2xvbmVfZmlsZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGlvX3VyaW5nIHJlZ2lzdHJhdGlvbiBvcGNvZGUgYElPUklOR19SRUdJU1RFUl9DTE9ORV9GSUxFU2Agd2hpY2ggYWxsb3dzIGNsb25pbmcgZmlsZSBkZXNjcmlwdG9ycyBmcm9tIGFub3RoZXIgaW9fdXJpbmcgcmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbCAoaW9fdXJpbmcpIHRoYXQgYWRkcyBuZXcgcmVhY2hhYmxlIGNvZGUgcGF0aHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDBjMmRmZDllY2JjNDUxZjJmMzg0ZjdmOTY4ZWQ2MmUwNGZkYzllMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVuIDI0IDEwOjM3OjUwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmggYi9pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaFxuaW5kZXggOTA5ZmI3YWVhNjM4ZWIuLjY3ZmNjNDBmOGRmYzNjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oXG5AQCAtNzIzLDYgKzcyMyw5IEBAIGVudW0gaW9fdXJpbmdfcmVnaXN0ZXJfb3Age1xuIFx0LyogcmVnaXN0ZXIgYnBmIGZpbHRlcmluZyBwcm9ncmFtcyAqL1xuIFx0SU9SSU5HX1JFR0lTVEVSX0JQRl9GSUxURVJcdFx0PSAzNyxcbiBcbitcdC8qIGNsb25lIGZpbGUgZGVzY3JpcHRvcnMgZnJvbSBhbm90aGVyIHJpbmcgKi9cbitcdElPUklOR19SRUdJU1RFUl9DTE9ORV9GSUxFU1x0XHQ9IDM4LFxuK1xuIFx0LyogdGhpcyBnb2VzIGxhc3QgKi9cbiBcdElPUklOR19SRUdJU1RFUl9MQVNULFxuIFxuQEAgLTg1NCw2ICs4NTcsMTUgQEAgc3RydWN0IGlvX3VyaW5nX2Nsb25lX2J1ZmZlcnMge1xuIFx0X191MzJcdHBhZFszXTtcbiB9O1xuIFxuK3N0cnVjdCBpb191cmluZ19jbG9uZV9maWxlcyB7XG4rXHRfX3UzMiBzcmNfZmQ7XG4rXHRfX3UzMiBmbGFncztcbitcdF9fdTMyIHNyY19vZmY7XG4rXHRfX3UzMiBkc3Rfb2ZmO1xuK1x0X191MzIgbnI7XG4rXHRfX3UzMiBwYWRbM107XG4rfTtcbitcbiBzdHJ1Y3QgaW9fdXJpbmdfYnVmIHtcbiBcdF9fdTY0XHRhZGRyO1xuIFx0X191MzJcdGxlbjtcbmRpZmYgLS1naXQgYS9pb191cmluZy9yZWdpc3Rlci5jIGIvaW9fdXJpbmcvcmVnaXN0ZXIuY1xuaW5kZXggZGNlNWUyZjljZjc3MDIuLmJiYzhjNTA2ZWEyZGJmIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvcmVnaXN0ZXIuY1xuKysrIGIvaW9fdXJpbmcvcmVnaXN0ZXIuY1xuQEAgLTkyNCw2ICs5MjQsMTIgQEAgc3RhdGljIGludCBfX2lvX3VyaW5nX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB1bnNpZ25lZCBvcGNvZGUsXG4gXHRcdFx0YnJlYWs7XG4gXHRcdHJldCA9IGlvX3JlZ2lzdGVyX2Nsb25lX2J1ZmZlcnMoY3R4LCBhcmcpO1xuIFx0XHRicmVhaztcbitcdGNhc2UgSU9SSU5HX1JFR0lTVEVSX0NMT05FX0ZJTEVTOlxuK1x0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRpZiAoIWFyZyB8fCBucl9hcmdzICE9IDEpXG4rXHRcdFx0YnJlYWs7XG4rXHRcdHJldCA9IGlvX3JlZ2lzdGVyX2Nsb25lX2ZpbGVzKGN0eCwgYXJnKTtcbitcdFx0YnJlYWs7XG4gXHRjYXNlIElPUklOR19SRUdJU1RFUl9aQ1JYX0lGUTpcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0aWYgKCFhcmcgfHwgbnJfYXJncyAhPSAxKVxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3JzcmMuYyBiL2lvX3VyaW5nL3JzcmMuY1xuaW5kZXggNjUwMzAzNjI2YmU2ZWQuLjVkZGQ3MTVlMmE2MzY1IDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvcnNyYy5jXG4rKysgYi9pb191cmluZy9yc3JjLmNcbkBAIC0xMzAzLDYgKzEzMDMsMTUxIEBAIGludCBpb19yZWdpc3Rlcl9jbG9uZV9idWZmZXJzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rc3RhdGljIGludCBpb19jbG9uZV9maWxlX25vZGUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4rXHRcdFx0ICAgICAgc3RydWN0IGlvX3JzcmNfbm9kZSAqc3JjX25vZGUsXG4rXHRcdFx0ICAgICAgaW50IGRzdF9pbmRleCxcbitcdFx0XHQgICAgICBzdHJ1Y3QgaW9fZmlsZV90YWJsZSAqbmV3X3RhYmxlKVxuK3tcbitcdHN0cnVjdCBpb19yc3JjX25vZGUgKmRzdF9ub2RlO1xuK1x0c3RydWN0IGZpbGUgKmZpbGU7XG4rXG4rXHRkc3Rfbm9kZSA9IGlvX3JzcmNfbm9kZV9hbGxvYyhjdHgsIElPUklOR19SU1JDX0ZJTEUpO1xuK1x0aWYgKCFkc3Rfbm9kZSlcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRmaWxlID0gaW9fc2xvdF9maWxlKHNyY19ub2RlKTtcbitcdGdldF9maWxlKGZpbGUpO1xuK1x0aW9fZml4ZWRfZmlsZV9zZXQoZHN0X25vZGUsIGZpbGUpO1xuK1xuK1x0bmV3X3RhYmxlLVx1MDAzZWRhdGEubm9kZXNbZHN0X2luZGV4XSA9IGRzdF9ub2RlO1xuK1x0aW9fZmlsZV9iaXRtYXBfc2V0KG5ld190YWJsZSwgZHN0X2luZGV4KTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGlvX2Nsb25lX2ZpbGVzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fcmluZ19jdHggKnNyY19jdHgsXG4rXHRcdFx0ICBzdHJ1Y3QgaW9fdXJpbmdfY2xvbmVfZmlsZXMgKmFyZylcbit7XG4rXHRzdHJ1Y3QgaW9fZmlsZV90YWJsZSBuZXdfZmlsZV90YWJsZTtcbitcdHVuc2lnbmVkIGludCBkc3RfbnIgPSBjdHgtXHUwMDNlZmlsZV90YWJsZS5kYXRhLm5yO1xuK1x0dW5zaWduZWQgaW50IHNyY19uciA9IHNyY19jdHgtXHUwMDNlZmlsZV90YWJsZS5kYXRhLm5yO1xuK1x0dW5zaWduZWQgaW50IG5ld19uciwgaTtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2Y3R4LVx1MDAzZXVyaW5nX2xvY2spO1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZzcmNfY3R4LVx1MDAzZXVyaW5nX2xvY2spO1xuK1xuK1x0aWYgKGRzdF9uciBcdTAwMjZcdTAwMjYgIShhcmctXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19SRUdJU1RFUl9EU1RfUkVQTEFDRSkpXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4rXHRpZiAoIXNyY19ucilcbitcdFx0cmV0dXJuIC1FTlhJTztcbitcbitcdGlmICghYXJnLVx1MDAzZW5yKVxuK1x0XHRhcmctXHUwMDNlbnIgPSBzcmNfbnI7XG4rXHRlbHNlIGlmIChhcmctXHUwMDNlbnIgXHUwMDNlIHNyY19ucilcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAoY2hlY2tfYWRkX292ZXJmbG93KGFyZy1cdTAwM2VzcmNfb2ZmLCBhcmctXHUwMDNlbnIsIFx1MDAyNmkpIHx8IGkgXHUwMDNlIHNyY19ucilcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpZiAoY2hlY2tfYWRkX292ZXJmbG93KGFyZy1cdTAwM2Vkc3Rfb2ZmLCBhcmctXHUwMDNlbnIsIFx1MDAyNmkpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdG5ld19uciA9IG1heChkc3RfbnIsIGFyZy1cdTAwM2Vkc3Rfb2ZmICsgYXJnLVx1MDAzZW5yKTtcbitcdGlmIChuZXdfbnIgXHUwMDNlIElPUklOR19NQVhfRklYRURfRklMRVMpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0bWVtc2V0KFx1MDAyNm5ld19maWxlX3RhYmxlLCAwLCBzaXplb2YobmV3X2ZpbGVfdGFibGUpKTtcbitcdGlmICghaW9fYWxsb2NfZmlsZV90YWJsZXMoY3R4LCBcdTAwMjZuZXdfZmlsZV90YWJsZSwgbmV3X25yKSlcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHQvKiBDb3B5IG9yaWdpbmFsIG5vZGVzIGZyb20gYmVmb3JlIHRoZSBjbG9uZWQgcmFuZ2UgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1pbihhcmctXHUwMDNlZHN0X29mZiwgZHN0X25yKTsgaSsrKSB7XG4rXHRcdHN0cnVjdCBpb19yc3JjX25vZGUgKnNyY19ub2RlID0gaW9fcnNyY19ub2RlX2xvb2t1cChcdTAwMjZjdHgtXHUwMDNlZmlsZV90YWJsZS5kYXRhLCBpKTtcbitcbitcdFx0aWYgKCFzcmNfbm9kZSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKGlvX2Nsb25lX2ZpbGVfbm9kZShjdHgsIHNyY19ub2RlLCBpLCBcdTAwMjZuZXdfZmlsZV90YWJsZSkpXG4rXHRcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHQvKiBDb3B5IHRoZSBhY3R1YWwgY2xvbmVkIHJhbmdlIGZyb20gdGhlIHNvdXJjZSByaW5nICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhcmctXHUwMDNlbnI7IGkrKykge1xuK1x0XHRzdHJ1Y3QgaW9fcnNyY19ub2RlICpzcmNfbm9kZSA9IGlvX3JzcmNfbm9kZV9sb29rdXAoXHUwMDI2c3JjX2N0eC1cdTAwM2VmaWxlX3RhYmxlLmRhdGEsXG4rXHRcdFx0XHRhcmctXHUwMDNlc3JjX29mZiArIGkpO1xuK1xuK1x0XHRpZiAoIXNyY19ub2RlKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAoaW9fY2xvbmVfZmlsZV9ub2RlKGN0eCwgc3JjX25vZGUsIGFyZy1cdTAwM2Vkc3Rfb2ZmICsgaSwgXHUwMDI2bmV3X2ZpbGVfdGFibGUpKVxuK1x0XHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0LyogQ29weSBvcmlnaW5hbCBub2RlcyBmcm9tIGFmdGVyIHRoZSBjbG9uZWQgcmFuZ2UgKi9cbitcdGZvciAoaSA9IGFyZy1cdTAwM2Vkc3Rfb2ZmICsgYXJnLVx1MDAzZW5yOyBpIFx1MDAzYyBkc3RfbnI7IGkrKykge1xuK1x0XHRzdHJ1Y3QgaW9fcnNyY19ub2RlICpzcmNfbm9kZSA9IGlvX3JzcmNfbm9kZV9sb29rdXAoXHUwMDI2Y3R4LVx1MDAzZWZpbGVfdGFibGUuZGF0YSwgaSk7XG4rXG4rXHRcdGlmICghc3JjX25vZGUpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGlmIChpb19jbG9uZV9maWxlX25vZGUoY3R4LCBzcmNfbm9kZSwgaSwgXHUwMDI2bmV3X2ZpbGVfdGFibGUpKVxuK1x0XHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0LyogZnJlZSB0aGUgb2xkIGZpbGUgdGFibGUgaWYgdGhlcmUgaXMgYW55IGRhdGEgcHJlc2VudCAqL1xuK1x0aWYgKGRzdF9ucilcbitcdFx0aW9fZnJlZV9maWxlX3RhYmxlcyhjdHgsIFx1MDAyNmN0eC1cdTAwM2VmaWxlX3RhYmxlKTtcbitcbitcdFdBUk5fT05fT05DRShjdHgtXHUwMDNlZmlsZV90YWJsZS5kYXRhLm5yKTtcbitcdGN0eC1cdTAwM2VmaWxlX3RhYmxlID0gbmV3X2ZpbGVfdGFibGU7XG4rXHRpb19maWxlX3RhYmxlX3NldF9hbGxvY19yYW5nZShjdHgsIDAsIGN0eC1cdTAwM2VmaWxlX3RhYmxlLmRhdGEubnIpO1xuK1x0cmV0dXJuIDA7XG4rXG4rb3V0OlxuK1x0LyogRXJyb3IgUGF0aDogU2FmZWx5IGRlc3Ryb3kgd2hhdGV2ZXIgd2UgcGFydGlhbGx5IGJ1aWx0ICovXG4rXHRpb19mcmVlX2ZpbGVfdGFibGVzKGN0eCwgXHUwMDI2bmV3X2ZpbGVfdGFibGUpO1xuK1x0cmV0dXJuIC1FTk9NRU07XG4rfVxuK1xuK2ludCBpb19yZWdpc3Rlcl9jbG9uZV9maWxlcyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZylcbit7XG4rXHRzdHJ1Y3QgaW9fdXJpbmdfY2xvbmVfZmlsZXMgY2xvbmVfYXJnO1xuK1x0c3RydWN0IGlvX3JpbmdfY3R4ICpzcmNfY3R4O1xuK1x0Ym9vbCByZWdpc3RlcmVkX3NyYztcbitcdHN0cnVjdCBmaWxlICpmaWxlO1xuK1x0aW50IHJldDtcbitcbitcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZjbG9uZV9hcmcsIGFyZywgc2l6ZW9mKGNsb25lX2FyZykpKVxuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcdGlmIChjbG9uZV9hcmcuZmxhZ3MgXHUwMDI2XG4rXHQgICAgfihJT1JJTkdfUkVHSVNURVJfU1JDX1JFR0lTVEVSRUQgfCBJT1JJTkdfUkVHSVNURVJfRFNUX1JFUExBQ0UpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChtZW1jaHJfaW52KGNsb25lX2FyZy5wYWQsIDAsIHNpemVvZihjbG9uZV9hcmcucGFkKSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmVnaXN0ZXJlZF9zcmMgPSAhIShjbG9uZV9hcmcuZmxhZ3MgXHUwMDI2IElPUklOR19SRUdJU1RFUl9TUkNfUkVHSVNURVJFRCk7IFxuK1x0ZmlsZSA9IGlvX3VyaW5nX2N0eF9nZXRfZmlsZShjbG9uZV9hcmcuc3JjX2ZkLCByZWdpc3RlcmVkX3NyYyk7XG4rXHRpZiAoSVNfRVJSKGZpbGUpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihmaWxlKTtcbitcbitcdHNyY19jdHggPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbitcdC8qIFNhbWUgcmluZyBjbG9uZSBpcyBub3QgYWxsb3dlZCAqL1xuK1x0aWYgKHNyY19jdHggPT0gY3R4KSB7XG4rXHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmN0eC1cdTAwM2V1cmluZ19sb2NrKTtcbitcdGxvY2tfdHdvX3JpbmdzKGN0eCwgc3JjX2N0eCk7XG4rXG4rXHRyZXQgPSBpb19jbG9uZV9maWxlcyhjdHgsIHNyY19jdHgsIFx1MDAyNmNsb25lX2FyZyk7XG4rXG4rXHRtdXRleF91bmxvY2soXHUwMDI2c3JjX2N0eC1cdTAwM2V1cmluZ19sb2NrKTtcbitcbitvdXQ6XG4rXHRpZiAoIXJlZ2lzdGVyZWRfc3JjKVxuK1x0XHRmcHV0KGZpbGUpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gdm9pZCBpb192ZWNfZnJlZShzdHJ1Y3QgaW91X3ZlYyAqaXYpXG4ge1xuIFx0aWYgKCFpdi1cdTAwM2Vpb3ZlYylcbmRpZmYgLS1naXQgYS9pb191cmluZy9yc3JjLmggYi9pb191cmluZy9yc3JjLmhcbmluZGV4IDQ0ZTMzODZmN2MxY2E5Li4zMmY1YzQ3YzQ2YWZhMSAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL3JzcmMuaFxuKysrIGIvaW9fdXJpbmcvcnNyYy5oXG5AQCAtNzUsNiArNzUsNyBAQCBpbnQgaW9fcHJlcF9yZWdfaW92ZWMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb3VfdmVjICppdixcbiBcdFx0XHRjb25zdCBzdHJ1Y3QgaW92ZWMgX191c2VyICp1dmVjLCBzaXplX3QgdXZlY19zZWdzKTtcbiBcbiBpbnQgaW9fcmVnaXN0ZXJfY2xvbmVfYnVmZmVycyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZyk7XG4raW50IGlvX3JlZ2lzdGVyX2Nsb25lX2ZpbGVzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnKTtcbiBpbnQgaW9fc3FlX2J1ZmZlcnNfdW5yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCk7XG4gaW50IGlvX3NxZV9idWZmZXJzX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnLFxuIFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgbnJfYXJncywgdTY0IF9fdXNlciAqdGFncyk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxMDozNzo1My40NzYzNTE2M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2MjUxNzE0MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgaW9fdXJpbmcgRmlsZSBEZXNjcmlwdG9yIENsb25pbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBhIG5ldyBgaW9fdXJpbmdgIHJlZ2lzdHJhdGlvbiBvcGNvZGUsIGBJT1JJTkdfUkVHSVNURVJfQ0xPTkVfRklMRVNgLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiBcIkludGVyZXN0aW5nLCB0aGlzIGlzIGEgY29yZSBrZXJuZWwgbW9kaWZpY2F0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgaW9fdXJpbmdgIHN1YnN5c3RlbS5cIiBJdCdzIGRpcmVjdGx5IGNoYW5naW5nIGhvdyB3ZSBoYW5kbGUgZmlsZSBkZXNjcmlwdG9ycyB3aXRoaW4gaW9fdXJpbmcsIGFsbG93aW5nIHVzIHRvIGNsb25lIHRoZW0gZnJvbSBhbm90aGVyIHJpbmcuIEkgc2VlIHRoZSBtYWluIHdvcmsgaXMgaW4gYGlvX3VyaW5nL3JlZ2lzdGVyLmNgIGFuZCBgaW9fdXJpbmcvcnNyYy5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIHJlZ2lzdHJhdGlvbiBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudCBhc3BlY3RzLlxuXG5Ob3csIGxldCBtZSBtZW50YWxseSBtYXAgdGhlIG5ldyBmdW5jdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBpb19jbG9uZV9maWxlX25vZGVgLCBgaW9fY2xvbmVfZmlsZXNgLCBhbmQgYGlvX3JlZ2lzdGVyX2Nsb25lX2ZpbGVzYC4gVGhhdCdzIHRoZSBjb3JlIG9mIHRoZSBmdW5jdGlvbmFsaXR5LiBBbmQsIG9mIGNvdXJzZSwgdGhlIGVudHJ5IHBvaW50LCBgX19pb191cmluZ19yZWdpc3RlcmAsIGFsdGhvdWdoIHRoYXQncyBsaWtlbHkgbW9yZSBnZW5lcmljLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhvc2UgZnVuY3Rpb24gY2FsbHMgYW5kIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgZmxvdy5cblxuSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEkga25vdyBgQ09ORklHX0lPX1VSSU5HYCBlbmFibGVzIHRoZSB3aG9sZSBzdWJzeXN0ZW0uIEdpdmVuIHRoZSB0YXJnZXRlZCBmaWxlcywgaXQncyB2ZXJ5IGxpa2VseSB0aGF0J3MgdGhlIG9ubHkgcmVsZXZhbnQgY29uZmlndXJhdGlvbiwgYnV0IEknbGwgbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgc25lYWt5IGRlcGVuZGVuY2llcyBvciBzdWJ0bGUgZmVhdHVyZXMgdGhhdCByZXF1aXJlIGFkZGl0aW9uYWwgc2V0dGluZ3MuIEkgbmVlZCB0byBiZSBjZXJ0YWluIHRoZXJlIGlzbid0IHNvbWUgb2JzY3VyZSBjb25maWcgZmxhZyB0aGF0IHRyaXBzIHVwIHRoZSBidWlsZCBvciBydW50aW1lIGJlaGF2aW9yLlxuXG5GaW5hbGx5LCBJJ2xsIG5lZWQgdG8gbGV2ZXJhZ2Ugb3VyIHRvb2xzIHRvIG1ldGljdWxvdXNseSB2ZXJpZnkgdGhlIHBhdGNoLiBXZSBuZWVkIHRvIHZhbGlkYXRlIHRoZSBpbXBsZW1lbnRhdGlvbidzIGNvcnJlY3RuZXNzLCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsIGFuZCBwb3RlbnRpYWwgZm9yIGludHJvZHVjaW5nIG5ldyBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIFRoZSBjbG9uaW5nIG9mIGZpbGUgZGVzY3JpcHRvcnMgY2FuIGJlIGEgdHJpY2t5IGFyZWEgdG8gaGFuZGxlIHNlY3VyZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzE0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTA6Mzc6NTkuMTAxNTI3ODM2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDQwNzE5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfSU9fVVJJTkdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL01ha2VmaWxlPTc9ZW5kaWZcXG5pb191cmluZy9NYWtlZmlsZS04LVxcbmlvX3VyaW5nL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0lPX1VSSU5HKVxcdFxcdCs9IGlvX3VyaW5nLm8gb3BkZWYubyBrYnVmLm8gcnNyYy5vIG5vdGlmLm8gXFxcXFxcbmlvX3VyaW5nL01ha2VmaWxlLTEwLVxcdFxcdFxcdFxcdFxcdHRjdHgubyBmaWxldGFibGUubyBydy5vIHBvbGwubyBcXFxcXFxuLS1cXG5pb191cmluZy9NYWtlZmlsZS0xOC1cXG5pb191cmluZy9NYWtlZmlsZToxOTpvYmotJChDT05GSUdfSU9fVVJJTkdfWkNSWClcXHQrPSB6Y3J4Lm9cXG5pb191cmluZy9NYWtlZmlsZS0yMC1vYmotJChDT05GSUdfSU9fV1EpXFx0XFx0Kz0gaW8td3Eub1xcbi0tXFxuaW9fdXJpbmcvTWFrZWZpbGU9MjU9b2JqLSQoQ09ORklHX1BST0NfRlMpICs9IGZkaW5mby5vXFxuaW9fdXJpbmcvTWFrZWZpbGU6MjY6b2JqLSQoQ09ORklHX0lPX1VSSU5HX01PQ0tfRklMRSkgKz0gbW9ja19maWxlLm9cXG5pb191cmluZy9NYWtlZmlsZToyNzpvYmotJChDT05GSUdfSU9fVVJJTkdfQlBGKSArPSBicGZfZmlsdGVyLm9cXG5pb191cmluZy9NYWtlZmlsZToyODpvYmotJChDT05GSUdfSU9fVVJJTkdfQlBGX09QUykgKz0gYnBmLW9wcy5vXFxuLS1cXG5pb191cmluZy9icGYtb3BzLmg9MTM9c3RydWN0IGlvX3VyaW5nX2JwZl9vcHMge1xcbi0tXFxuaW9fdXJpbmcvYnBmLW9wcy5oLTE5LVxcbmlvX3VyaW5nL2JwZi1vcHMuaDoyMDojaWZkZWYgQ09ORklHX0lPX1VSSU5HX0JQRl9PUFNcXG5pb191cmluZy9icGYtb3BzLmgtMjEtdm9pZCBpb191bnJlZ2lzdGVyX2JwZl9vcHMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpO1xcbi0tXFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oLTYtXFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oOjc6I2lmZGVmIENPTkZJR19JT19VUklOR19CUEZcXG5pb191cmluZy9icGZfZmlsdGVyLmgtOC1cXG4tLVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuaD00Mj1zdGF0aWMgaW5saW5lIHZvaWQgaW9fYnBmX2ZpbHRlcl9jbG9uZShzdHJ1Y3QgaW9fcmVzdHJpY3Rpb24gKmRzdCxcXG4tLVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuaC00NS19XFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oOjQ2OiNlbmRpZiAvKiBDT05GSUdfSU9fVVJJTkdfQlBGICovXFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oLTQ3LVxcbi0tXFxuaW9fdXJpbmcvemNyeC5oPTUyPXN0cnVjdCBpb196Y3J4X2lmcSB7XFxuLS1cXG5pb191cmluZy96Y3J4LmgtNzYtXFxuaW9fdXJpbmcvemNyeC5oOjc3OiNpZiBkZWZpbmVkKENPTkZJR19JT19VUklOR19aQ1JYKVxcbmlvX3VyaW5nL3pjcnguaC03OC1pbnQgaW9femNyeF9jdHJsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnLCB1bnNpZ25lZCBucl9hcmcpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxMDozNzo1OS4zNDE5NDUxMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1NDgwNTE3OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgaW9fdXJpbmcgQ2xvbmUgRmlsZSBEZXNjcmlwdG9yIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRpbmcgYElPUklOR19SRUdJU1RFUl9DTE9ORV9GSUxFU2AgdG8gdGhlIGBfX2lvX3VyaW5nX3JlZ2lzdGVyYCBmdW5jdGlvbiB3aXRoaW4gYGlvX3VyaW5nL3JlZ2lzdGVyLmNgLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50LiBMb29raW5nIGF0IHRoZSBjb2RlLCB0aGUgY29yZSBsb2dpYyBmb3IgdGhpcyBjbG9uZSBmdW5jdGlvbmFsaXR5IOKAkyBgaW9fY2xvbmVfZmlsZV9ub2RlYCwgYGlvX2Nsb25lX2ZpbGVzYCwgYW5kIGBpb19yZWdpc3Rlcl9jbG9uZV9maWxlc2Ag4oCTIHJlc2lkZXMgaW4gYGlvX3VyaW5nL3JzcmMuY2AuIEFuZCBpbXBvcnRhbnRseSwgdGhlc2UgZnVuY3Rpb25zICphcmUqIGNvbXBpbGVkIHdoZW4gYENPTkZJR19JT19VUklOR2AgaXMgZW5hYmxlZC4gVGhhdCdzIGdvb2Q7IGl0IG1lYW5zIHdlIGNhbiB0ZXN0IGl0IG9uIGEgc3RhbmRhcmQgaW9fdXJpbmcgc2V0dXAuXG5cbkdpdmVuIHRoaXMsIEknbSBsZWFuaW5nIHN0cm9uZ2x5IHRvd2FyZHMgYFdvcnRoRnV6emluZz10cnVlYC4gVGhpcyBmdW5kYW1lbnRhbGx5IGNoYW5nZXMgaG93IGlvX3VyaW5nIGludGVyYWN0cyB3aXRoIGZpbGUgZGVzY3JpcHRvcnMsIHBvdGVudGlhbGx5IGludHJvZHVjaW5nIG5ldyBjb3JuZXIgY2FzZXMgb3IgdnVsbmVyYWJpbGl0aWVzLiBJdCdzIGEga2VybmVsLWxldmVsIGNoYW5nZSBhbmQgaW50cm9kdWNlcyBuZXcgY29kZSBwYXRocywgc28gaXQncyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy5cblxuSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayBpZiBhbnkgb3RoZXIgY29uZmlncyBhcmUgcmVxdWlyZWQgYmV5b25kIGBJT19VUklOR2AsIGJ1dCBJIHN1c3BlY3Qgbm90LiBBIHF1aWNrIGdsYW5jZSBhdCBgaW9fdXJpbmcvcnNyYy5jYCBjb25maXJtcyB0aGF0IHRoZSByZWxldmFudCBjb2RlIGlzIGNvbXBpbGVkIHVuY29uZGl0aW9uYWxseSB3aGVuIGBDT05GSUdfSU9fVVJJTkdgIGlzIGVuYWJsZWQuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC5cblxuVWx0aW1hdGVseSwgdGhlIGFkZGl0aW9uIG9mIHRoaXMgZmlsZSBkZXNjcmlwdG9yIGNsb25pbmcgbWVjaGFuaXNtIGluIHRoZSBpb191cmluZyBzeXN0ZW0gcHJlc2VudHMgbmV3IGF0dGFjayBzdXJmYWNlcyBhbmQgcG90ZW50aWFsIGZvciBzdWJ0bGUsIHVuZXhwZWN0ZWQgYmVoYXZpb3VyLiBJdOKAmXMgZGVmaW5pdGVseSB3b3J0aCBhIGRlZXAgZGl2ZSB3aXRoIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MDUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTA6Mzg6MDQuODg5OTk5NTQ4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTAwNDU0NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9yc3JjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDEwOjM4OjA1LjAwNTAxOTE2NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzM3MTIzNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgaW9fdXJpbmcgUmVzb3VyY2UgUmVnaXN0cmF0aW9uKipcblxuUmlnaHQsIHNvIHRoZSBwcm9ibGVtJ3Mgbm90IHN0ZW1taW5nIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgdGhlbXNlbHZlcyB3aXRoaW4gYGlvX3VyaW5nL3JzcmMuY2AuIFRoYXQncyBhIHJlYXNvbmFibGUgZmlyc3QgY2hlY2ssIGJ1dCBpdCdzIGEgZGVhZCBlbmQuIE9rYXksIHdoZXJlIGVsc2UgY291bGQgdGhpcyBiZSBoYW5kbGVkPyBHaXZlbiB0aGUgbmF0dXJlIG9mIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIGhvdyB0aGUga2VybmVsIGludGVyYWN0cyB3aXRoIHVzZXIgc3BhY2UsIHRoZSBsb2dpY2FsIG5leHQgcGxhY2UgdG8gbG9vayBpcyB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MuIEknbSBnb2luZyB0byBkaWcgaW50byBgaW9fdXJpbmcvcmVnaXN0ZXIuY2AuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIG1lYXQgb2YgaG93IHJlc291cmNlcyDigJMgcG90ZW50aWFsbHkgaW5jbHVkaW5nIHdoYXRldmVyIGlzIGNhdXNpbmcgdGhlIGlzc3VlIOKAkyBhcmUgYWxsb2NhdGVkLCBtYXBwZWQsIGFuZCBnZW5lcmFsbHkgaGFuZGxlZCBkdXJpbmcgdGhlIHNldHVwIHBoYXNlIG9mIGFuIGlvX3VyaW5nIGluc3RhbmNlLiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjQ5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTA6Mzg6MDguMTM4NzM2MTgxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNjQ5MjM3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL3JlZ2lzdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvcmVnaXN0ZXIuYz0zMTU9c3RhdGljIF9fY29sZCBpbnQgaW9fcmVnaXN0ZXJfaW93cV9hZmYoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy9yZWdpc3Rlci5jLTMyNy1cXG5pb191cmluZy9yZWdpc3Rlci5jOjMyODojaWZkZWYgQ09ORklHX0NPTVBBVFxcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMzI5LVxcdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxMDozODowOC4zNjUyMzYxMjVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzA3NDMzMzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGlvX3VyaW5nIFBhdGNoKipcblxuT2theSwgc28gaXQgbG9va3MgbGlrZSBgQ09ORklHX0lPX1VSSU5HYCBpcyB0aGUgb25seSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbiBoZXJlLiBObyBuZWVkIHRvIGRpZyBhbnkgZGVlcGVyIGZvciBvdGhlciBzZXR0aW5ncy5cblxuQWxyaWdodCwgdGltZSB0byBmb3JtdWxhdGUgYSBwcm9wZXIgcmVzcG9uc2UuIFdlJ3JlIGRlYWxpbmcgd2l0aCBhIHBhdGNoIHRoYXQncyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmc7IGl0IGludHJvZHVjZXMgYSBicmFuZCBuZXcgb3Bjb2RlLCBgSU9SSU5HX1JFR0lTVEVSX0NMT05FX0ZJTEVTYCwgZm9yIHRoZSBgaW9fdXJpbmdgIHN5c3RlbS4gVGhpcyBpcyBhIHNvbGlkIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUga2VybmVsJ3MgY29yZS4gTmV3IHJlYWNoYWJsZSBjb2RlIHBhdGhzIGFsd2F5cyBnZXQgbXkgYXR0ZW50aW9uISBUaGUgaW5jbHVzaW9uIG9mIHRoZXNlIHNwZWNpZmljIHN5bWJvbHMgLSBgaW9fY2xvbmVfZmlsZV9ub2RlYCwgYGlvX2Nsb25lX2ZpbGVzYCwgYW5kIGBpb19yZWdpc3Rlcl9jbG9uZV9maWxlc2AgLSBhcyBmb2N1cyBwb2ludHMgZm9yIGZ1enppbmcgaXMgc3BvdCBvbi4gVGhleSBoaWdobGlnaHQgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBhcmUgYXQgcGxheSBpbiB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuIEVzc2VudGlhbGx5LCB0aGlzIHBhdGNoIGFsbG93cyBjbG9uaW5nIGZpbGUgZGVzY3JpcHRvcnMgZnJvbSBvbmUgYGlvX3VyaW5nYCByaW5nIHRvIGFub3RoZXIsIHdoaWNoIG9wZW5zIHVwIG5ldyBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2VzIGFuZCByZXF1aXJlcyByaWdvcm91cyB0ZXN0aW5nLiBUaGUgcHJlc2VuY2Ugb2YgYElPX1VSSU5HYCBpbiB0aGUgRW5hYmxlQ29uZmlncyBhcnJheSBtZWFucyB0aGUgbmV3IGZlYXR1cmUgaXMgY29ycmVjdGx5IGdhdGVkIGJ5IHRoaXMgcGFyYW1ldGVyLCB3aGljaCBtZWFucyBpdCBzaG91bGQgbm90IGdldCBpbiB0aGUgd2F5IG9mIG90aGVyIGZlYXR1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTg4LCJPdXRwdXRUb2tlbnMiOjEyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxMDozODoxMy4wNzI2NzI4OTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTExMDEwNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9fY2xvbmVfZmlsZV9ub2RlXCIsXG4gICAgXCJpb19jbG9uZV9maWxlc1wiLFxuICAgIFwiaW9fcmVnaXN0ZXJfY2xvbmVfZmlsZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGlvX3VyaW5nIHJlZ2lzdHJhdGlvbiBvcGNvZGUgYElPUklOR19SRUdJU1RFUl9DTE9ORV9GSUxFU2Agd2hpY2ggYWxsb3dzIGNsb25pbmcgZmlsZSBkZXNjcmlwdG9ycyBmcm9tIGFub3RoZXIgaW9fdXJpbmcgcmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbCAoaW9fdXJpbmcpIHRoYXQgYWRkcyBuZXcgcmVhY2hhYmxlIGNvZGUgcGF0aHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb19jbG9uZV9maWxlX25vZGVcIixcbiAgICBcImlvX2Nsb25lX2ZpbGVzXCIsXG4gICAgXCJpb19yZWdpc3Rlcl9jbG9uZV9maWxlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgaW9fdXJpbmcgcmVnaXN0cmF0aW9uIG9wY29kZSBgSU9SSU5HX1JFR0lTVEVSX0NMT05FX0ZJTEVTYCB3aGljaCBhbGxvd3MgY2xvbmluZyBmaWxlIGRlc2NyaXB0b3JzIGZyb20gYW5vdGhlciBpb191cmluZyByaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIChpb191cmluZykgdGhhdCBhZGRzIG5ldyByZWFjaGFibGUgY29kZSBwYXRocyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4v5dq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-24 10:20:51 +0000 UTC FinishedAt: 2026-06-24 10:38:14 +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": "13a1e1a618858407fa12c391f664ea750651f6b2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "13a1e1a618858407fa12c391f664ea750651f6b2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "series_id": "d4c59d8b-93e2-409b-9bad-d23dd34e05e7" }, "track": "KASAN", "fuzz": { "focus": [ "io_uring" ], "focus_symbols": [ "io_clone_file_node", "io_clone_files", "io_register_clone_files" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDEwOjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fY2xvbmVfZmlsZV9ub2RlJiMzNDssCiAgICAmIzM0O2lvX2Nsb25lX2ZpbGVzJiMzNDssCiAgICAmIzM0O2lvX3JlZ2lzdGVyX2Nsb25lX2ZpbGVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgaW9fdXJpbmcgcmVnaXN0cmF0aW9uIG9wY29kZSBgSU9SSU5HX1JFR0lTVEVSX0NMT05FX0ZJTEVTYCB3aGljaCBhbGxvd3MgY2xvbmluZyBmaWxlIGRlc2NyaXB0b3JzIGZyb20gYW5vdGhlciBpb191cmluZyByaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIChpb191cmluZykgdGhhdCBhZGRzIG5ldyByZWFjaGFibGUgY29kZSBwYXRocyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxMDozNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQwYzJkZmQ5ZWNiYzQ1MWYyZjM4NGY3Zjk2OGVkNjJlMDRmZGM5ZTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1biAyNCAxMDozNzo1MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oXG5pbmRleCA5MDlmYjdhZWE2MzhlYi4uNjdmY2M0MGY4ZGZjM2MgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmhcbkBAIC03MjMsNiAmIzQzOzcyMyw5IEBAIGVudW0gaW9fdXJpbmdfcmVnaXN0ZXJfb3Age1xuIFx0LyogcmVnaXN0ZXIgYnBmIGZpbHRlcmluZyBwcm9ncmFtcyAqL1xuIFx0SU9SSU5HX1JFR0lTVEVSX0JQRl9GSUxURVJcdFx0PSAzNyxcbiBcbiYjNDM7XHQvKiBjbG9uZSBmaWxlIGRlc2NyaXB0b3JzIGZyb20gYW5vdGhlciByaW5nICovXG4mIzQzO1x0SU9SSU5HX1JFR0lTVEVSX0NMT05FX0ZJTEVTXHRcdD0gMzgsXG4mIzQzO1xuIFx0LyogdGhpcyBnb2VzIGxhc3QgKi9cbiBcdElPUklOR19SRUdJU1RFUl9MQVNULFxuIFxuQEAgLTg1NCw2ICYjNDM7ODU3LDE1IEBAIHN0cnVjdCBpb191cmluZ19jbG9uZV9idWZmZXJzIHtcbiBcdF9fdTMyXHRwYWRbM107XG4gfTtcbiBcbiYjNDM7c3RydWN0IGlvX3VyaW5nX2Nsb25lX2ZpbGVzIHtcbiYjNDM7XHRfX3UzMiBzcmNfZmQ7XG4mIzQzO1x0X191MzIgZmxhZ3M7XG4mIzQzO1x0X191MzIgc3JjX29mZjtcbiYjNDM7XHRfX3UzMiBkc3Rfb2ZmO1xuJiM0MztcdF9fdTMyIG5yO1xuJiM0MztcdF9fdTMyIHBhZFszXTtcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IGlvX3VyaW5nX2J1ZiB7XG4gXHRfX3U2NFx0YWRkcjtcbiBcdF9fdTMyXHRsZW47XG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvcmVnaXN0ZXIuYyBiL2lvX3VyaW5nL3JlZ2lzdGVyLmNcbmluZGV4IGRjZTVlMmY5Y2Y3NzAyLi5iYmM4YzUwNmVhMmRiZiAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL3JlZ2lzdGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL3JlZ2lzdGVyLmNcbkBAIC05MjQsNiAmIzQzOzkyNCwxMiBAQCBzdGF0aWMgaW50IF9faW9fdXJpbmdfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHVuc2lnbmVkIG9wY29kZSxcbiBcdFx0XHRicmVhaztcbiBcdFx0cmV0ID0gaW9fcmVnaXN0ZXJfY2xvbmVfYnVmZmVycyhjdHgsIGFyZyk7XG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgSU9SSU5HX1JFR0lTVEVSX0NMT05FX0ZJTEVTOlxuJiM0MztcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdGlmICghYXJnIHx8IG5yX2FyZ3MgIT0gMSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRyZXQgPSBpb19yZWdpc3Rlcl9jbG9uZV9maWxlcyhjdHgsIGFyZyk7XG4mIzQzO1x0XHRicmVhaztcbiBcdGNhc2UgSU9SSU5HX1JFR0lTVEVSX1pDUlhfSUZROlxuIFx0XHRyZXQgPSAtRUlOVkFMO1xuIFx0XHRpZiAoIWFyZyB8fCBucl9hcmdzICE9IDEpXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvcnNyYy5jIGIvaW9fdXJpbmcvcnNyYy5jXG5pbmRleCA2NTAzMDM2MjZiZTZlZC4uNWRkZDcxNWUyYTYzNjUgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9yc3JjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL3JzcmMuY1xuQEAgLTEzMDMsNiAmIzQzOzEzMDMsMTUxIEBAIGludCBpb19yZWdpc3Rlcl9jbG9uZV9idWZmZXJzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgaW9fY2xvbmVfZmlsZV9ub2RlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgaW9fcnNyY19ub2RlICpzcmNfbm9kZSxcbiYjNDM7XHRcdFx0ICAgICAgaW50IGRzdF9pbmRleCxcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IGlvX2ZpbGVfdGFibGUgKm5ld190YWJsZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpb19yc3JjX25vZGUgKmRzdF9ub2RlO1xuJiM0MztcdHN0cnVjdCBmaWxlICpmaWxlO1xuJiM0MztcbiYjNDM7XHRkc3Rfbm9kZSA9IGlvX3JzcmNfbm9kZV9hbGxvYyhjdHgsIElPUklOR19SU1JDX0ZJTEUpO1xuJiM0MztcdGlmICghZHN0X25vZGUpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0ZmlsZSA9IGlvX3Nsb3RfZmlsZShzcmNfbm9kZSk7XG4mIzQzO1x0Z2V0X2ZpbGUoZmlsZSk7XG4mIzQzO1x0aW9fZml4ZWRfZmlsZV9zZXQoZHN0X25vZGUsIGZpbGUpO1xuJiM0MztcbiYjNDM7XHRuZXdfdGFibGUtXHUwMDNlZGF0YS5ub2Rlc1tkc3RfaW5kZXhdID0gZHN0X25vZGU7XG4mIzQzO1x0aW9fZmlsZV9iaXRtYXBfc2V0KG5ld190YWJsZSwgZHN0X2luZGV4KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaW9fY2xvbmVfZmlsZXMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19yaW5nX2N0eCAqc3JjX2N0eCxcbiYjNDM7XHRcdFx0ICBzdHJ1Y3QgaW9fdXJpbmdfY2xvbmVfZmlsZXMgKmFyZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpb19maWxlX3RhYmxlIG5ld19maWxlX3RhYmxlO1xuJiM0MztcdHVuc2lnbmVkIGludCBkc3RfbnIgPSBjdHgtXHUwMDNlZmlsZV90YWJsZS5kYXRhLm5yO1xuJiM0MztcdHVuc2lnbmVkIGludCBzcmNfbnIgPSBzcmNfY3R4LVx1MDAzZWZpbGVfdGFibGUuZGF0YS5ucjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbmV3X25yLCBpO1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmN0eC1cdTAwM2V1cmluZ19sb2NrKTtcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnNyY19jdHgtXHUwMDNldXJpbmdfbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmIChkc3RfbnIgXHUwMDI2XHUwMDI2ICEoYXJnLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfUkVHSVNURVJfRFNUX1JFUExBQ0UpKVxuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzcmNfbnIpXG4mIzQzO1x0XHRyZXR1cm4gLUVOWElPO1xuJiM0MztcbiYjNDM7XHRpZiAoIWFyZy1cdTAwM2VucilcbiYjNDM7XHRcdGFyZy1cdTAwM2VuciA9IHNyY19ucjtcbiYjNDM7XHRlbHNlIGlmIChhcmctXHUwMDNlbnIgXHUwMDNlIHNyY19ucilcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAoY2hlY2tfYWRkX292ZXJmbG93KGFyZy1cdTAwM2VzcmNfb2ZmLCBhcmctXHUwMDNlbnIsIFx1MDAyNmkpIHx8IGkgXHUwMDNlIHNyY19ucilcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdGlmIChjaGVja19hZGRfb3ZlcmZsb3coYXJnLVx1MDAzZWRzdF9vZmYsIGFyZy1cdTAwM2VuciwgXHUwMDI2aSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0bmV3X25yID0gbWF4KGRzdF9uciwgYXJnLVx1MDAzZWRzdF9vZmYgJiM0MzsgYXJnLVx1MDAzZW5yKTtcbiYjNDM7XHRpZiAobmV3X25yIFx1MDAzZSBJT1JJTkdfTUFYX0ZJWEVEX0ZJTEVTKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdG1lbXNldChcdTAwMjZuZXdfZmlsZV90YWJsZSwgMCwgc2l6ZW9mKG5ld19maWxlX3RhYmxlKSk7XG4mIzQzO1x0aWYgKCFpb19hbGxvY19maWxlX3RhYmxlcyhjdHgsIFx1MDAyNm5ld19maWxlX3RhYmxlLCBuZXdfbnIpKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdC8qIENvcHkgb3JpZ2luYWwgbm9kZXMgZnJvbSBiZWZvcmUgdGhlIGNsb25lZCByYW5nZSAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1pbihhcmctXHUwMDNlZHN0X29mZiwgZHN0X25yKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBpb19yc3JjX25vZGUgKnNyY19ub2RlID0gaW9fcnNyY19ub2RlX2xvb2t1cChcdTAwMjZjdHgtXHUwMDNlZmlsZV90YWJsZS5kYXRhLCBpKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXNyY19ub2RlKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdGlmIChpb19jbG9uZV9maWxlX25vZGUoY3R4LCBzcmNfbm9kZSwgaSwgXHUwMDI2bmV3X2ZpbGVfdGFibGUpKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIENvcHkgdGhlIGFjdHVhbCBjbG9uZWQgcmFuZ2UgZnJvbSB0aGUgc291cmNlIHJpbmcgKi9cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhcmctXHUwMDNlbnI7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgaW9fcnNyY19ub2RlICpzcmNfbm9kZSA9IGlvX3JzcmNfbm9kZV9sb29rdXAoXHUwMDI2c3JjX2N0eC1cdTAwM2VmaWxlX3RhYmxlLmRhdGEsXG4mIzQzO1x0XHRcdFx0YXJnLVx1MDAzZXNyY19vZmYgJiM0MzsgaSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFzcmNfbm9kZSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRpZiAoaW9fY2xvbmVfZmlsZV9ub2RlKGN0eCwgc3JjX25vZGUsIGFyZy1cdTAwM2Vkc3Rfb2ZmICYjNDM7IGksIFx1MDAyNm5ld19maWxlX3RhYmxlKSlcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBDb3B5IG9yaWdpbmFsIG5vZGVzIGZyb20gYWZ0ZXIgdGhlIGNsb25lZCByYW5nZSAqL1xuJiM0MztcdGZvciAoaSA9IGFyZy1cdTAwM2Vkc3Rfb2ZmICYjNDM7IGFyZy1cdTAwM2VucjsgaSBcdTAwM2MgZHN0X25yOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IGlvX3JzcmNfbm9kZSAqc3JjX25vZGUgPSBpb19yc3JjX25vZGVfbG9va3VwKFx1MDAyNmN0eC1cdTAwM2VmaWxlX3RhYmxlLmRhdGEsIGkpO1xuJiM0MztcbiYjNDM7XHRcdGlmICghc3JjX25vZGUpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKGlvX2Nsb25lX2ZpbGVfbm9kZShjdHgsIHNyY19ub2RlLCBpLCBcdTAwMjZuZXdfZmlsZV90YWJsZSkpXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogZnJlZSB0aGUgb2xkIGZpbGUgdGFibGUgaWYgdGhlcmUgaXMgYW55IGRhdGEgcHJlc2VudCAqL1xuJiM0MztcdGlmIChkc3RfbnIpXG4mIzQzO1x0XHRpb19mcmVlX2ZpbGVfdGFibGVzKGN0eCwgXHUwMDI2Y3R4LVx1MDAzZWZpbGVfdGFibGUpO1xuJiM0MztcbiYjNDM7XHRXQVJOX09OX09OQ0UoY3R4LVx1MDAzZWZpbGVfdGFibGUuZGF0YS5ucik7XG4mIzQzO1x0Y3R4LVx1MDAzZWZpbGVfdGFibGUgPSBuZXdfZmlsZV90YWJsZTtcbiYjNDM7XHRpb19maWxlX3RhYmxlX3NldF9hbGxvY19yYW5nZShjdHgsIDAsIGN0eC1cdTAwM2VmaWxlX3RhYmxlLmRhdGEubnIpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdC8qIEVycm9yIFBhdGg6IFNhZmVseSBkZXN0cm95IHdoYXRldmVyIHdlIHBhcnRpYWxseSBidWlsdCAqL1xuJiM0MztcdGlvX2ZyZWVfZmlsZV90YWJsZXMoY3R4LCBcdTAwMjZuZXdfZmlsZV90YWJsZSk7XG4mIzQzO1x0cmV0dXJuIC1FTk9NRU07XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBpb19yZWdpc3Rlcl9jbG9uZV9maWxlcyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpb191cmluZ19jbG9uZV9maWxlcyBjbG9uZV9hcmc7XG4mIzQzO1x0c3RydWN0IGlvX3JpbmdfY3R4ICpzcmNfY3R4O1xuJiM0MztcdGJvb2wgcmVnaXN0ZXJlZF9zcmM7XG4mIzQzO1x0c3RydWN0IGZpbGUgKmZpbGU7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmNsb25lX2FyZywgYXJnLCBzaXplb2YoY2xvbmVfYXJnKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHRpZiAoY2xvbmVfYXJnLmZsYWdzIFx1MDAyNlxuJiM0MztcdCAgICB+KElPUklOR19SRUdJU1RFUl9TUkNfUkVHSVNURVJFRCB8IElPUklOR19SRUdJU1RFUl9EU1RfUkVQTEFDRSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aWYgKG1lbWNocl9pbnYoY2xvbmVfYXJnLnBhZCwgMCwgc2l6ZW9mKGNsb25lX2FyZy5wYWQpKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZWdpc3RlcmVkX3NyYyA9ICEhKGNsb25lX2FyZy5mbGFncyBcdTAwMjYgSU9SSU5HX1JFR0lTVEVSX1NSQ19SRUdJU1RFUkVEKTsgXG4mIzQzO1x0ZmlsZSA9IGlvX3VyaW5nX2N0eF9nZXRfZmlsZShjbG9uZV9hcmcuc3JjX2ZkLCByZWdpc3RlcmVkX3NyYyk7XG4mIzQzO1x0aWYgKElTX0VSUihmaWxlKSlcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKGZpbGUpO1xuJiM0MztcbiYjNDM7XHRzcmNfY3R4ID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4mIzQzO1x0LyogU2FtZSByaW5nIGNsb25lIGlzIG5vdCBhbGxvd2VkICovXG4mIzQzO1x0aWYgKHNyY19jdHggPT0gY3R4KSB7XG4mIzQzO1x0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2Y3R4LVx1MDAzZXVyaW5nX2xvY2spO1xuJiM0MztcdGxvY2tfdHdvX3JpbmdzKGN0eCwgc3JjX2N0eCk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGlvX2Nsb25lX2ZpbGVzKGN0eCwgc3JjX2N0eCwgXHUwMDI2Y2xvbmVfYXJnKTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnNyY19jdHgtXHUwMDNldXJpbmdfbG9jayk7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0aWYgKCFyZWdpc3RlcmVkX3NyYylcbiYjNDM7XHRcdGZwdXQoZmlsZSk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIGlvX3ZlY19mcmVlKHN0cnVjdCBpb3VfdmVjICppdilcbiB7XG4gXHRpZiAoIWl2LVx1MDAzZWlvdmVjKVxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3JzcmMuaCBiL2lvX3VyaW5nL3JzcmMuaFxuaW5kZXggNDRlMzM4NmY3YzFjYTkuLjMyZjVjNDdjNDZhZmExIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvcnNyYy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9yc3JjLmhcbkBAIC03NSw2ICYjNDM7NzUsNyBAQCBpbnQgaW9fcHJlcF9yZWdfaW92ZWMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb3VfdmVjICppdixcbiBcdFx0XHRjb25zdCBzdHJ1Y3QgaW92ZWMgX191c2VyICp1dmVjLCBzaXplX3QgdXZlY19zZWdzKTtcbiBcbiBpbnQgaW9fcmVnaXN0ZXJfY2xvbmVfYnVmZmVycyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZyk7XG4mIzQzO2ludCBpb19yZWdpc3Rlcl9jbG9uZV9maWxlcyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZyk7XG4gaW50IGlvX3NxZV9idWZmZXJzX3VucmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpO1xuIGludCBpb19zcWVfYnVmZmVyc19yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZyxcbiBcdFx0XHQgICAgdW5zaWduZWQgaW50IG5yX2FyZ3MsIHU2NCBfX3VzZXIgKnRhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDEwOjM3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fY2xvbmVfZmlsZV9ub2RlJiMzNDssCiAgICAmIzM0O2lvX2Nsb25lX2ZpbGVzJiMzNDssCiAgICAmIzM0O2lvX3JlZ2lzdGVyX2Nsb25lX2ZpbGVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgaW9fdXJpbmcgcmVnaXN0cmF0aW9uIG9wY29kZSBgSU9SSU5HX1JFR0lTVEVSX0NMT05FX0ZJTEVTYCB3aGljaCBhbGxvd3MgY2xvbmluZyBmaWxlIGRlc2NyaXB0b3JzIGZyb20gYW5vdGhlciBpb191cmluZyByaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIChpb191cmluZykgdGhhdCBhZGRzIG5ldyByZWFjaGFibGUgY29kZSBwYXRocyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDBjMmRmZDllY2JjNDUxZjJmMzg0ZjdmOTY4ZWQ2MmUwNGZkYzllMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVuIDI0IDEwOjM3OjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmggYi9pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaAppbmRleCA5MDlmYjdhZWE2MzhlYi4uNjdmY2M0MGY4ZGZjM2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oCkBAIC03MjMsNiAmIzQzOzcyMyw5IEBAIGVudW0gaW9fdXJpbmdfcmVnaXN0ZXJfb3AgewogCS8qIHJlZ2lzdGVyIGJwZiBmaWx0ZXJpbmcgcHJvZ3JhbXMgKi8KIAlJT1JJTkdfUkVHSVNURVJfQlBGX0ZJTFRFUgkJPSAzNywKIAomIzQzOwkvKiBjbG9uZSBmaWxlIGRlc2NyaXB0b3JzIGZyb20gYW5vdGhlciByaW5nICovCiYjNDM7CUlPUklOR19SRUdJU1RFUl9DTE9ORV9GSUxFUwkJPSAzOCwKJiM0MzsKIAkvKiB0aGlzIGdvZXMgbGFzdCAqLwogCUlPUklOR19SRUdJU1RFUl9MQVNULAogCkBAIC04NTQsNiAmIzQzOzg1NywxNSBAQCBzdHJ1Y3QgaW9fdXJpbmdfY2xvbmVfYnVmZmVycyB7CiAJX191MzIJcGFkWzNdOwogfTsKIAomIzQzO3N0cnVjdCBpb191cmluZ19jbG9uZV9maWxlcyB7CiYjNDM7CV9fdTMyIHNyY19mZDsKJiM0MzsJX191MzIgZmxhZ3M7CiYjNDM7CV9fdTMyIHNyY19vZmY7CiYjNDM7CV9fdTMyIGRzdF9vZmY7CiYjNDM7CV9fdTMyIG5yOwomIzQzOwlfX3UzMiBwYWRbM107CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBpb191cmluZ19idWYgewogCV9fdTY0CWFkZHI7CiAJX191MzIJbGVuOwpkaWZmIC0tZ2l0IGEvaW9fdXJpbmcvcmVnaXN0ZXIuYyBiL2lvX3VyaW5nL3JlZ2lzdGVyLmMKaW5kZXggZGNlNWUyZjljZjc3MDIuLmJiYzhjNTA2ZWEyZGJmIDEwMDY0NAotLS0gYS9pb191cmluZy9yZWdpc3Rlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL3JlZ2lzdGVyLmMKQEAgLTkyNCw2ICYjNDM7OTI0LDEyIEBAIHN0YXRpYyBpbnQgX19pb191cmluZ19yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdW5zaWduZWQgb3Bjb2RlLAogCQkJYnJlYWs7CiAJCXJldCA9IGlvX3JlZ2lzdGVyX2Nsb25lX2J1ZmZlcnMoY3R4LCBhcmcpOwogCQlicmVhazsKJiM0MzsJY2FzZSBJT1JJTkdfUkVHSVNURVJfQ0xPTkVfRklMRVM6CiYjNDM7CQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJaWYgKCFhcmcgfHwgbnJfYXJncyAhPSAxKQomIzQzOwkJCWJyZWFrOwomIzQzOwkJcmV0ID0gaW9fcmVnaXN0ZXJfY2xvbmVfZmlsZXMoY3R4LCBhcmcpOwomIzQzOwkJYnJlYWs7CiAJY2FzZSBJT1JJTkdfUkVHSVNURVJfWkNSWF9JRlE6CiAJCXJldCA9IC1FSU5WQUw7CiAJCWlmICghYXJnIHx8IG5yX2FyZ3MgIT0gMSkKZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3JzcmMuYyBiL2lvX3VyaW5nL3JzcmMuYwppbmRleCA2NTAzMDM2MjZiZTZlZC4uNWRkZDcxNWUyYTYzNjUgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL3JzcmMuYwomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9yc3JjLmMKQEAgLTEzMDMsNiAmIzQzOzEzMDMsMTUxIEBAIGludCBpb19yZWdpc3Rlcl9jbG9uZV9idWZmZXJzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnKQogCXJldHVybiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgaW50IGlvX2Nsb25lX2ZpbGVfbm9kZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgaW9fcnNyY19ub2RlICpzcmNfbm9kZSwKJiM0MzsJCQkgICAgICBpbnQgZHN0X2luZGV4LAomIzQzOwkJCSAgICAgIHN0cnVjdCBpb19maWxlX3RhYmxlICpuZXdfdGFibGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW9fcnNyY19ub2RlICpkc3Rfbm9kZTsKJiM0MzsJc3RydWN0IGZpbGUgKmZpbGU7CiYjNDM7CiYjNDM7CWRzdF9ub2RlID0gaW9fcnNyY19ub2RlX2FsbG9jKGN0eCwgSU9SSU5HX1JTUkNfRklMRSk7CiYjNDM7CWlmICghZHN0X25vZGUpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJZmlsZSA9IGlvX3Nsb3RfZmlsZShzcmNfbm9kZSk7CiYjNDM7CWdldF9maWxlKGZpbGUpOwomIzQzOwlpb19maXhlZF9maWxlX3NldChkc3Rfbm9kZSwgZmlsZSk7CiYjNDM7CiYjNDM7CW5ld190YWJsZS0mZ3Q7ZGF0YS5ub2Rlc1tkc3RfaW5kZXhdID0gZHN0X25vZGU7CiYjNDM7CWlvX2ZpbGVfYml0bWFwX3NldChuZXdfdGFibGUsIGRzdF9pbmRleCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGlvX2Nsb25lX2ZpbGVzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fcmluZ19jdHggKnNyY19jdHgsCiYjNDM7CQkJICBzdHJ1Y3QgaW9fdXJpbmdfY2xvbmVfZmlsZXMgKmFyZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb19maWxlX3RhYmxlIG5ld19maWxlX3RhYmxlOwomIzQzOwl1bnNpZ25lZCBpbnQgZHN0X25yID0gY3R4LSZndDtmaWxlX3RhYmxlLmRhdGEubnI7CiYjNDM7CXVuc2lnbmVkIGludCBzcmNfbnIgPSBzcmNfY3R4LSZndDtmaWxlX3RhYmxlLmRhdGEubnI7CiYjNDM7CXVuc2lnbmVkIGludCBuZXdfbnIsIGk7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtjdHgtJmd0O3VyaW5nX2xvY2spOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7c3JjX2N0eC0mZ3Q7dXJpbmdfbG9jayk7CiYjNDM7CiYjNDM7CWlmIChkc3RfbnIgJmFtcDsmYW1wOyAhKGFyZy0mZ3Q7ZmxhZ3MgJmFtcDsgSU9SSU5HX1JFR0lTVEVSX0RTVF9SRVBMQUNFKSkKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CiYjNDM7CWlmICghc3JjX25yKQomIzQzOwkJcmV0dXJuIC1FTlhJTzsKJiM0MzsKJiM0MzsJaWYgKCFhcmctJmd0O25yKQomIzQzOwkJYXJnLSZndDtuciA9IHNyY19ucjsKJiM0MzsJZWxzZSBpZiAoYXJnLSZndDtuciAmZ3Q7IHNyY19ucikKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAoY2hlY2tfYWRkX292ZXJmbG93KGFyZy0mZ3Q7c3JjX29mZiwgYXJnLSZndDtuciwgJmFtcDtpKSB8fCBpICZndDsgc3JjX25yKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmIChjaGVja19hZGRfb3ZlcmZsb3coYXJnLSZndDtkc3Rfb2ZmLCBhcmctJmd0O25yLCAmYW1wO2kpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CW5ld19uciA9IG1heChkc3RfbnIsIGFyZy0mZ3Q7ZHN0X29mZiAmIzQzOyBhcmctJmd0O25yKTsKJiM0MzsJaWYgKG5ld19uciAmZ3Q7IElPUklOR19NQVhfRklYRURfRklMRVMpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJbWVtc2V0KCZhbXA7bmV3X2ZpbGVfdGFibGUsIDAsIHNpemVvZihuZXdfZmlsZV90YWJsZSkpOwomIzQzOwlpZiAoIWlvX2FsbG9jX2ZpbGVfdGFibGVzKGN0eCwgJmFtcDtuZXdfZmlsZV90YWJsZSwgbmV3X25yKSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwkvKiBDb3B5IG9yaWdpbmFsIG5vZGVzIGZyb20gYmVmb3JlIHRoZSBjbG9uZWQgcmFuZ2UgKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG1pbihhcmctJmd0O2RzdF9vZmYsIGRzdF9ucik7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgaW9fcnNyY19ub2RlICpzcmNfbm9kZSA9IGlvX3JzcmNfbm9kZV9sb29rdXAoJmFtcDtjdHgtJmd0O2ZpbGVfdGFibGUuZGF0YSwgaSk7CiYjNDM7CiYjNDM7CQlpZiAoIXNyY19ub2RlKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJaWYgKGlvX2Nsb25lX2ZpbGVfbm9kZShjdHgsIHNyY19ub2RlLCBpLCAmYW1wO25ld19maWxlX3RhYmxlKSkKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBDb3B5IHRoZSBhY3R1YWwgY2xvbmVkIHJhbmdlIGZyb20gdGhlIHNvdXJjZSByaW5nICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBhcmctJmd0O25yOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGlvX3JzcmNfbm9kZSAqc3JjX25vZGUgPSBpb19yc3JjX25vZGVfbG9va3VwKCZhbXA7c3JjX2N0eC0mZ3Q7ZmlsZV90YWJsZS5kYXRhLAomIzQzOwkJCQlhcmctJmd0O3NyY19vZmYgJiM0MzsgaSk7CiYjNDM7CiYjNDM7CQlpZiAoIXNyY19ub2RlKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJaWYgKGlvX2Nsb25lX2ZpbGVfbm9kZShjdHgsIHNyY19ub2RlLCBhcmctJmd0O2RzdF9vZmYgJiM0MzsgaSwgJmFtcDtuZXdfZmlsZV90YWJsZSkpCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQ29weSBvcmlnaW5hbCBub2RlcyBmcm9tIGFmdGVyIHRoZSBjbG9uZWQgcmFuZ2UgKi8KJiM0MzsJZm9yIChpID0gYXJnLSZndDtkc3Rfb2ZmICYjNDM7IGFyZy0mZ3Q7bnI7IGkgJmx0OyBkc3RfbnI7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgaW9fcnNyY19ub2RlICpzcmNfbm9kZSA9IGlvX3JzcmNfbm9kZV9sb29rdXAoJmFtcDtjdHgtJmd0O2ZpbGVfdGFibGUuZGF0YSwgaSk7CiYjNDM7CiYjNDM7CQlpZiAoIXNyY19ub2RlKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJaWYgKGlvX2Nsb25lX2ZpbGVfbm9kZShjdHgsIHNyY19ub2RlLCBpLCAmYW1wO25ld19maWxlX3RhYmxlKSkKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBmcmVlIHRoZSBvbGQgZmlsZSB0YWJsZSBpZiB0aGVyZSBpcyBhbnkgZGF0YSBwcmVzZW50ICovCiYjNDM7CWlmIChkc3RfbnIpCiYjNDM7CQlpb19mcmVlX2ZpbGVfdGFibGVzKGN0eCwgJmFtcDtjdHgtJmd0O2ZpbGVfdGFibGUpOwomIzQzOwomIzQzOwlXQVJOX09OX09OQ0UoY3R4LSZndDtmaWxlX3RhYmxlLmRhdGEubnIpOwomIzQzOwljdHgtJmd0O2ZpbGVfdGFibGUgPSBuZXdfZmlsZV90YWJsZTsKJiM0MzsJaW9fZmlsZV90YWJsZV9zZXRfYWxsb2NfcmFuZ2UoY3R4LCAwLCBjdHgtJmd0O2ZpbGVfdGFibGUuZGF0YS5ucik7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO291dDoKJiM0MzsJLyogRXJyb3IgUGF0aDogU2FmZWx5IGRlc3Ryb3kgd2hhdGV2ZXIgd2UgcGFydGlhbGx5IGJ1aWx0ICovCiYjNDM7CWlvX2ZyZWVfZmlsZV90YWJsZXMoY3R4LCAmYW1wO25ld19maWxlX3RhYmxlKTsKJiM0MzsJcmV0dXJuIC1FTk9NRU07CiYjNDM7fQomIzQzOwomIzQzO2ludCBpb19yZWdpc3Rlcl9jbG9uZV9maWxlcyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb191cmluZ19jbG9uZV9maWxlcyBjbG9uZV9hcmc7CiYjNDM7CXN0cnVjdCBpb19yaW5nX2N0eCAqc3JjX2N0eDsKJiM0MzsJYm9vbCByZWdpc3RlcmVkX3NyYzsKJiM0MzsJc3RydWN0IGZpbGUgKmZpbGU7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChjb3B5X2Zyb21fdXNlcigmYW1wO2Nsb25lX2FyZywgYXJnLCBzaXplb2YoY2xvbmVfYXJnKSkpCiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJaWYgKGNsb25lX2FyZy5mbGFncyAmYW1wOwomIzQzOwkgICAgfihJT1JJTkdfUkVHSVNURVJfU1JDX1JFR0lTVEVSRUQgfCBJT1JJTkdfUkVHSVNURVJfRFNUX1JFUExBQ0UpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChtZW1jaHJfaW52KGNsb25lX2FyZy5wYWQsIDAsIHNpemVvZihjbG9uZV9hcmcucGFkKSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmVnaXN0ZXJlZF9zcmMgPSAhIShjbG9uZV9hcmcuZmxhZ3MgJmFtcDsgSU9SSU5HX1JFR0lTVEVSX1NSQ19SRUdJU1RFUkVEKTsgCiYjNDM7CWZpbGUgPSBpb191cmluZ19jdHhfZ2V0X2ZpbGUoY2xvbmVfYXJnLnNyY19mZCwgcmVnaXN0ZXJlZF9zcmMpOwomIzQzOwlpZiAoSVNfRVJSKGZpbGUpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoZmlsZSk7CiYjNDM7CiYjNDM7CXNyY19jdHggPSBmaWxlLSZndDtwcml2YXRlX2RhdGE7CiYjNDM7CS8qIFNhbWUgcmluZyBjbG9uZSBpcyBub3QgYWxsb3dlZCAqLwomIzQzOwlpZiAoc3JjX2N0eCA9PSBjdHgpIHsKJiM0MzsJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtjdHgtJmd0O3VyaW5nX2xvY2spOwomIzQzOwlsb2NrX3R3b19yaW5ncyhjdHgsIHNyY19jdHgpOwomIzQzOwomIzQzOwlyZXQgPSBpb19jbG9uZV9maWxlcyhjdHgsIHNyY19jdHgsICZhbXA7Y2xvbmVfYXJnKTsKJiM0MzsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7c3JjX2N0eC0mZ3Q7dXJpbmdfbG9jayk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlpZiAoIXJlZ2lzdGVyZWRfc3JjKQomIzQzOwkJZnB1dChmaWxlKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiB2b2lkIGlvX3ZlY19mcmVlKHN0cnVjdCBpb3VfdmVjICppdikKIHsKIAlpZiAoIWl2LSZndDtpb3ZlYykKZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3JzcmMuaCBiL2lvX3VyaW5nL3JzcmMuaAppbmRleCA0NGUzMzg2ZjdjMWNhOS4uMzJmNWM0N2M0NmFmYTEgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL3JzcmMuaAomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9yc3JjLmgKQEAgLTc1LDYgJiM0Mzs3NSw3IEBAIGludCBpb19wcmVwX3JlZ19pb3ZlYyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdV92ZWMgKml2LAogCQkJY29uc3Qgc3RydWN0IGlvdmVjIF9fdXNlciAqdXZlYywgc2l6ZV90IHV2ZWNfc2Vncyk7CiAKIGludCBpb19yZWdpc3Rlcl9jbG9uZV9idWZmZXJzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnKTsKJiM0MztpbnQgaW9fcmVnaXN0ZXJfY2xvbmVfZmlsZXMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcpOwogaW50IGlvX3NxZV9idWZmZXJzX3VucmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpOwogaW50IGlvX3NxZV9idWZmZXJzX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnLAogCQkJICAgIHVuc2lnbmVkIGludCBucl9hcmdzLCB1NjQgX191c2VyICp0YWdzKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTA6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMxNAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBpb191cmluZyBGaWxlIERlc2NyaXB0b3IgQ2xvbmluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGludHJvZHVjZXMgYSBuZXcgYGlvX3VyaW5nYCByZWdpc3RyYXRpb24gb3Bjb2RlLCBgSU9SSU5HX1JFR0lTVEVSX0NMT05FX0ZJTEVTYC4gTXkgZmlyc3QgdGhvdWdodCBpczogJiMzNDtJbnRlcmVzdGluZywgdGhpcyBpcyBhIGNvcmUga2VybmVsIG1vZGlmaWNhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGlvX3VyaW5nYCBzdWJzeXN0ZW0uJiMzNDsgSXQmIzM5O3MgZGlyZWN0bHkgY2hhbmdpbmcgaG93IHdlIGhhbmRsZSBmaWxlIGRlc2NyaXB0b3JzIHdpdGhpbiBpb191cmluZywgYWxsb3dpbmcgdXMgdG8gY2xvbmUgdGhlbSBmcm9tIGFub3RoZXIgcmluZy4gSSBzZWUgdGhlIG1haW4gd29yayBpcyBpbiBgaW9fdXJpbmcvcmVnaXN0ZXIuY2AgYW5kIGBpb191cmluZy9yc3JjLmNgLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgcmVnaXN0cmF0aW9uIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50IGFzcGVjdHMuCgpOb3csIGxldCBtZSBtZW50YWxseSBtYXAgdGhlIG5ldyBmdW5jdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBpb19jbG9uZV9maWxlX25vZGVgLCBgaW9fY2xvbmVfZmlsZXNgLCBhbmQgYGlvX3JlZ2lzdGVyX2Nsb25lX2ZpbGVzYC4gVGhhdCYjMzk7cyB0aGUgY29yZSBvZiB0aGUgZnVuY3Rpb25hbGl0eS4gQW5kLCBvZiBjb3Vyc2UsIHRoZSBlbnRyeSBwb2ludCwgYF9faW9fdXJpbmdfcmVnaXN0ZXJgLCBhbHRob3VnaCB0aGF0JiMzOTtzIGxpa2VseSBtb3JlIGdlbmVyaWMuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhvc2UgZnVuY3Rpb24gY2FsbHMgYW5kIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgZmxvdy4KCkkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLiBJIGtub3cgYENPTkZJR19JT19VUklOR2AgZW5hYmxlcyB0aGUgd2hvbGUgc3Vic3lzdGVtLiBHaXZlbiB0aGUgdGFyZ2V0ZWQgZmlsZXMsIGl0JiMzOTtzIHZlcnkgbGlrZWx5IHRoYXQmIzM5O3MgdGhlIG9ubHkgcmVsZXZhbnQgY29uZmlndXJhdGlvbiwgYnV0IEkmIzM5O2xsIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBzbmVha3kgZGVwZW5kZW5jaWVzIG9yIHN1YnRsZSBmZWF0dXJlcyB0aGF0IHJlcXVpcmUgYWRkaXRpb25hbCBzZXR0aW5ncy4gSSBuZWVkIHRvIGJlIGNlcnRhaW4gdGhlcmUgaXNuJiMzOTt0IHNvbWUgb2JzY3VyZSBjb25maWcgZmxhZyB0aGF0IHRyaXBzIHVwIHRoZSBidWlsZCBvciBydW50aW1lIGJlaGF2aW9yLgoKRmluYWxseSwgSSYjMzk7bGwgbmVlZCB0byBsZXZlcmFnZSBvdXIgdG9vbHMgdG8gbWV0aWN1bG91c2x5IHZlcmlmeSB0aGUgcGF0Y2guIFdlIG5lZWQgdG8gdmFsaWRhdGUgdGhlIGltcGxlbWVudGF0aW9uJiMzOTtzIGNvcnJlY3RuZXNzLCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsIGFuZCBwb3RlbnRpYWwgZm9yIGludHJvZHVjaW5nIG5ldyBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIFRoZSBjbG9uaW5nIG9mIGZpbGUgZGVzY3JpcHRvcnMgY2FuIGJlIGEgdHJpY2t5IGFyZWEgdG8gaGFuZGxlIHNlY3VyZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDEwOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19JT19VUklORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9NYWtlZmlsZT03PWVuZGlmXG5pb191cmluZy9NYWtlZmlsZS04LVxuaW9fdXJpbmcvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfSU9fVVJJTkcpXHRcdCYjNDM7PSBpb191cmluZy5vIG9wZGVmLm8ga2J1Zi5vIHJzcmMubyBub3RpZi5vIFxcXG5pb191cmluZy9NYWtlZmlsZS0xMC1cdFx0XHRcdFx0dGN0eC5vIGZpbGV0YWJsZS5vIHJ3Lm8gcG9sbC5vIFxcXG4tLVxuaW9fdXJpbmcvTWFrZWZpbGUtMTgtXG5pb191cmluZy9NYWtlZmlsZToxOTpvYmotJChDT05GSUdfSU9fVVJJTkdfWkNSWClcdCYjNDM7PSB6Y3J4Lm9cbmlvX3VyaW5nL01ha2VmaWxlLTIwLW9iai0kKENPTkZJR19JT19XUSlcdFx0JiM0Mzs9IGlvLXdxLm9cbi0tXG5pb191cmluZy9NYWtlZmlsZT0yNT1vYmotJChDT05GSUdfUFJPQ19GUykgJiM0Mzs9IGZkaW5mby5vXG5pb191cmluZy9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfSU9fVVJJTkdfTU9DS19GSUxFKSAmIzQzOz0gbW9ja19maWxlLm9cbmlvX3VyaW5nL01ha2VmaWxlOjI3Om9iai0kKENPTkZJR19JT19VUklOR19CUEYpICYjNDM7PSBicGZfZmlsdGVyLm9cbmlvX3VyaW5nL01ha2VmaWxlOjI4Om9iai0kKENPTkZJR19JT19VUklOR19CUEZfT1BTKSAmIzQzOz0gYnBmLW9wcy5vXG4tLVxuaW9fdXJpbmcvYnBmLW9wcy5oPTEzPXN0cnVjdCBpb191cmluZ19icGZfb3BzIHtcbi0tXG5pb191cmluZy9icGYtb3BzLmgtMTktXG5pb191cmluZy9icGYtb3BzLmg6MjA6I2lmZGVmIENPTkZJR19JT19VUklOR19CUEZfT1BTXG5pb191cmluZy9icGYtb3BzLmgtMjEtdm9pZCBpb191bnJlZ2lzdGVyX2JwZl9vcHMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpO1xuLS1cbmlvX3VyaW5nL2JwZl9maWx0ZXIuaC02LVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oOjc6I2lmZGVmIENPTkZJR19JT19VUklOR19CUEZcbmlvX3VyaW5nL2JwZl9maWx0ZXIuaC04LVxuLS1cbmlvX3VyaW5nL2JwZl9maWx0ZXIuaD00Mj1zdGF0aWMgaW5saW5lIHZvaWQgaW9fYnBmX2ZpbHRlcl9jbG9uZShzdHJ1Y3QgaW9fcmVzdHJpY3Rpb24gKmRzdCxcbi0tXG5pb191cmluZy9icGZfZmlsdGVyLmgtNDUtfVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oOjQ2OiNlbmRpZiAvKiBDT05GSUdfSU9fVVJJTkdfQlBGICovXG5pb191cmluZy9icGZfZmlsdGVyLmgtNDctXG4tLVxuaW9fdXJpbmcvemNyeC5oPTUyPXN0cnVjdCBpb196Y3J4X2lmcSB7XG4tLVxuaW9fdXJpbmcvemNyeC5oLTc2LVxuaW9fdXJpbmcvemNyeC5oOjc3OiNpZiBkZWZpbmVkKENPTkZJR19JT19VUklOR19aQ1JYKVxuaW9fdXJpbmcvemNyeC5oLTc4LWludCBpb196Y3J4X2N0cmwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcsIHVuc2lnbmVkIG5yX2FyZyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTA6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYwNQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBpb191cmluZyBDbG9uZSBGaWxlIERlc2NyaXB0b3IgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRpbmcgYElPUklOR19SRUdJU1RFUl9DTE9ORV9GSUxFU2AgdG8gdGhlIGBfX2lvX3VyaW5nX3JlZ2lzdGVyYCBmdW5jdGlvbiB3aXRoaW4gYGlvX3VyaW5nL3JlZ2lzdGVyLmNgLiBUaGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludC4gTG9va2luZyBhdCB0aGUgY29kZSwgdGhlIGNvcmUgbG9naWMgZm9yIHRoaXMgY2xvbmUgZnVuY3Rpb25hbGl0eSDigJMgYGlvX2Nsb25lX2ZpbGVfbm9kZWAsIGBpb19jbG9uZV9maWxlc2AsIGFuZCBgaW9fcmVnaXN0ZXJfY2xvbmVfZmlsZXNgIOKAkyByZXNpZGVzIGluIGBpb191cmluZy9yc3JjLmNgLiBBbmQgaW1wb3J0YW50bHksIHRoZXNlIGZ1bmN0aW9ucyAqYXJlKiBjb21waWxlZCB3aGVuIGBDT05GSUdfSU9fVVJJTkdgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgZ29vZDsgaXQgbWVhbnMgd2UgY2FuIHRlc3QgaXQgb24gYSBzdGFuZGFyZCBpb191cmluZyBzZXR1cC4KCkdpdmVuIHRoaXMsIEkmIzM5O20gbGVhbmluZyBzdHJvbmdseSB0b3dhcmRzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuIFRoaXMgZnVuZGFtZW50YWxseSBjaGFuZ2VzIGhvdyBpb191cmluZyBpbnRlcmFjdHMgd2l0aCBmaWxlIGRlc2NyaXB0b3JzLCBwb3RlbnRpYWxseSBpbnRyb2R1Y2luZyBuZXcgY29ybmVyIGNhc2VzIG9yIHZ1bG5lcmFiaWxpdGllcy4gSXQmIzM5O3MgYSBrZXJuZWwtbGV2ZWwgY2hhbmdlIGFuZCBpbnRyb2R1Y2VzIG5ldyBjb2RlIHBhdGhzLCBzbyBpdCYjMzk7cyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4KCkkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIGlmIGFueSBvdGhlciBjb25maWdzIGFyZSByZXF1aXJlZCBiZXlvbmQgYElPX1VSSU5HYCwgYnV0IEkgc3VzcGVjdCBub3QuIEEgcXVpY2sgZ2xhbmNlIGF0IGBpb191cmluZy9yc3JjLmNgIGNvbmZpcm1zIHRoYXQgdGhlIHJlbGV2YW50IGNvZGUgaXMgY29tcGlsZWQgdW5jb25kaXRpb25hbGx5IHdoZW4gYENPTkZJR19JT19VUklOR2AgaXMgZW5hYmxlZC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkLgoKVWx0aW1hdGVseSwgdGhlIGFkZGl0aW9uIG9mIHRoaXMgZmlsZSBkZXNjcmlwdG9yIGNsb25pbmcgbWVjaGFuaXNtIGluIHRoZSBpb191cmluZyBzeXN0ZW0gcHJlc2VudHMgbmV3IGF0dGFjayBzdXJmYWNlcyBhbmQgcG90ZW50aWFsIGZvciBzdWJ0bGUsIHVuZXhwZWN0ZWQgYmVoYXZpb3VyLiBJdOKAmXMgZGVmaW5pdGVseSB3b3J0aCBhIGRlZXAgZGl2ZSB3aXRoIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTA6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvcnNyYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxMDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjQ5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgaW9fdXJpbmcgUmVzb3VyY2UgUmVnaXN0cmF0aW9uKioKClJpZ2h0LCBzbyB0aGUgcHJvYmxlbSYjMzk7cyBub3Qgc3RlbW1pbmcgZnJvbSB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyB0aGVtc2VsdmVzIHdpdGhpbiBgaW9fdXJpbmcvcnNyYy5jYC4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgZmlyc3QgY2hlY2ssIGJ1dCBpdCYjMzk7cyBhIGRlYWQgZW5kLiBPa2F5LCB3aGVyZSBlbHNlIGNvdWxkIHRoaXMgYmUgaGFuZGxlZD8gR2l2ZW4gdGhlIG5hdHVyZSBvZiByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBob3cgdGhlIGtlcm5lbCBpbnRlcmFjdHMgd2l0aCB1c2VyIHNwYWNlLCB0aGUgbG9naWNhbCBuZXh0IHBsYWNlIHRvIGxvb2sgaXMgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIGBpb191cmluZy9yZWdpc3Rlci5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBtZWF0IG9mIGhvdyByZXNvdXJjZXMg4oCTIHBvdGVudGlhbGx5IGluY2x1ZGluZyB3aGF0ZXZlciBpcyBjYXVzaW5nIHRoZSBpc3N1ZSDigJMgYXJlIGFsbG9jYXRlZCwgbWFwcGVkLCBhbmQgZ2VuZXJhbGx5IGhhbmRsZWQgZHVyaW5nIHRoZSBzZXR1cCBwaGFzZSBvZiBhbiBpb191cmluZyBpbnN0YW5jZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDEwOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZy9yZWdpc3Rlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL3JlZ2lzdGVyLmM9MzE1PXN0YXRpYyBfX2NvbGQgaW50IGlvX3JlZ2lzdGVyX2lvd3FfYWZmKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMzI3LVxuaW9fdXJpbmcvcmVnaXN0ZXIuYzozMjg6I2lmZGVmIENPTkZJR19DT01QQVRcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMzI5LVx0aWYgKGluX2NvbXBhdF9zeXNjYWxsKCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTA6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU4OAoJCQkJCQkJb3V0cHV0OiAxMjMKCQkJCQkJCXRob3VnaHRzOiAxMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgaW9fdXJpbmcgUGF0Y2gqKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBgQ09ORklHX0lPX1VSSU5HYCBpcyB0aGUgb25seSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbiBoZXJlLiBObyBuZWVkIHRvIGRpZyBhbnkgZGVlcGVyIGZvciBvdGhlciBzZXR0aW5ncy4KCkFscmlnaHQsIHRpbWUgdG8gZm9ybXVsYXRlIGEgcHJvcGVyIHJlc3BvbnNlLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgcGF0Y2ggdGhhdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmc7IGl0IGludHJvZHVjZXMgYSBicmFuZCBuZXcgb3Bjb2RlLCBgSU9SSU5HX1JFR0lTVEVSX0NMT05FX0ZJTEVTYCwgZm9yIHRoZSBgaW9fdXJpbmdgIHN5c3RlbS4gVGhpcyBpcyBhIHNvbGlkIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGNvcmUuIE5ldyByZWFjaGFibGUgY29kZSBwYXRocyBhbHdheXMgZ2V0IG15IGF0dGVudGlvbiEgVGhlIGluY2x1c2lvbiBvZiB0aGVzZSBzcGVjaWZpYyBzeW1ib2xzIC0gYGlvX2Nsb25lX2ZpbGVfbm9kZWAsIGBpb19jbG9uZV9maWxlc2AsIGFuZCBgaW9fcmVnaXN0ZXJfY2xvbmVfZmlsZXNgIC0gYXMgZm9jdXMgcG9pbnRzIGZvciBmdXp6aW5nIGlzIHNwb3Qgb24uIFRoZXkgaGlnaGxpZ2h0IHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgYXJlIGF0IHBsYXkgaW4gdGhlIG5ldyBmdW5jdGlvbmFsaXR5LiBFc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBhbGxvd3MgY2xvbmluZyBmaWxlIGRlc2NyaXB0b3JzIGZyb20gb25lIGBpb191cmluZ2AgcmluZyB0byBhbm90aGVyLCB3aGljaCBvcGVucyB1cCBuZXcgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlcyBhbmQgcmVxdWlyZXMgcmlnb3JvdXMgdGVzdGluZy4gVGhlIHByZXNlbmNlIG9mIGBJT19VUklOR2AgaW4gdGhlIEVuYWJsZUNvbmZpZ3MgYXJyYXkgbWVhbnMgdGhlIG5ldyBmZWF0dXJlIGlzIGNvcnJlY3RseSBnYXRlZCBieSB0aGlzIHBhcmFtZXRlciwgd2hpY2ggbWVhbnMgaXQgc2hvdWxkIG5vdCBnZXQgaW4gdGhlIHdheSBvZiBvdGhlciBmZWF0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTA6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fY2xvbmVfZmlsZV9ub2RlJiMzNDssCiAgICAmIzM0O2lvX2Nsb25lX2ZpbGVzJiMzNDssCiAgICAmIzM0O2lvX3JlZ2lzdGVyX2Nsb25lX2ZpbGVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgaW9fdXJpbmcgcmVnaXN0cmF0aW9uIG9wY29kZSBgSU9SSU5HX1JFR0lTVEVSX0NMT05FX0ZJTEVTYCB3aGljaCBhbGxvd3MgY2xvbmluZyBmaWxlIGRlc2NyaXB0b3JzIGZyb20gYW5vdGhlciBpb191cmluZyByaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIChpb191cmluZykgdGhhdCBhZGRzIG5ldyByZWFjaGFibGUgY29kZSBwYXRocyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19jbG9uZV9maWxlX25vZGUmIzM0OywKICAgICYjMzQ7aW9fY2xvbmVfZmlsZXMmIzM0OywKICAgICYjMzQ7aW9fcmVnaXN0ZXJfY2xvbmVfZmlsZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBpb191cmluZyByZWdpc3RyYXRpb24gb3Bjb2RlIGBJT1JJTkdfUkVHSVNURVJfQ0xPTkVfRklMRVNgIHdoaWNoIGFsbG93cyBjbG9uaW5nIGZpbGUgZGVzY3JpcHRvcnMgZnJvbSBhbm90aGVyIGlvX3VyaW5nIHJpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBrZXJuZWwgKGlvX3VyaW5nKSB0aGF0IGFkZHMgbmV3IHJlYWNoYWJsZSBjb2RlIHBhdGhzIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTA6Mzc6NTIuNzEwMzg1NzY4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2NTM0MTE4OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb19jbG9uZV9maWxlX25vZGVcIixcbiAgICBcImlvX2Nsb25lX2ZpbGVzXCIsXG4gICAgXCJpb19yZWdpc3Rlcl9jbG9uZV9maWxlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgaW9fdXJpbmcgcmVnaXN0cmF0aW9uIG9wY29kZSBgSU9SSU5HX1JFR0lTVEVSX0NMT05FX0ZJTEVTYCB3aGljaCBhbGxvd3MgY2xvbmluZyBmaWxlIGRlc2NyaXB0b3JzIGZyb20gYW5vdGhlciBpb191cmluZyByaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIChpb191cmluZykgdGhhdCBhZGRzIG5ldyByZWFjaGFibGUgY29kZSBwYXRocyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTA6Mzc6NTIuNzEwMzkyODc4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjQ3OTYwNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0MGMyZGZkOWVjYmM0NTFmMmYzODRmN2Y5NjhlZDYyZTA0ZmRjOWUxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVuIDI0IDEwOjM3OjUwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmhcXG5pbmRleCA5MDlmYjdhZWE2MzhlYi4uNjdmY2M0MGY4ZGZjM2MgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaFxcbkBAIC03MjMsNiArNzIzLDkgQEAgZW51bSBpb191cmluZ19yZWdpc3Rlcl9vcCB7XFxuIFxcdC8qIHJlZ2lzdGVyIGJwZiBmaWx0ZXJpbmcgcHJvZ3JhbXMgKi9cXG4gXFx0SU9SSU5HX1JFR0lTVEVSX0JQRl9GSUxURVJcXHRcXHQ9IDM3LFxcbiBcXG4rXFx0LyogY2xvbmUgZmlsZSBkZXNjcmlwdG9ycyBmcm9tIGFub3RoZXIgcmluZyAqL1xcbitcXHRJT1JJTkdfUkVHSVNURVJfQ0xPTkVfRklMRVNcXHRcXHQ9IDM4LFxcbitcXG4gXFx0LyogdGhpcyBnb2VzIGxhc3QgKi9cXG4gXFx0SU9SSU5HX1JFR0lTVEVSX0xBU1QsXFxuIFxcbkBAIC04NTQsNiArODU3LDE1IEBAIHN0cnVjdCBpb191cmluZ19jbG9uZV9idWZmZXJzIHtcXG4gXFx0X191MzJcXHRwYWRbM107XFxuIH07XFxuIFxcbitzdHJ1Y3QgaW9fdXJpbmdfY2xvbmVfZmlsZXMge1xcbitcXHRfX3UzMiBzcmNfZmQ7XFxuK1xcdF9fdTMyIGZsYWdzO1xcbitcXHRfX3UzMiBzcmNfb2ZmO1xcbitcXHRfX3UzMiBkc3Rfb2ZmO1xcbitcXHRfX3UzMiBucjtcXG4rXFx0X191MzIgcGFkWzNdO1xcbit9O1xcbitcXG4gc3RydWN0IGlvX3VyaW5nX2J1ZiB7XFxuIFxcdF9fdTY0XFx0YWRkcjtcXG4gXFx0X191MzJcXHRsZW47XFxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3JlZ2lzdGVyLmMgYi9pb191cmluZy9yZWdpc3Rlci5jXFxuaW5kZXggZGNlNWUyZjljZjc3MDIuLmJiYzhjNTA2ZWEyZGJmIDEwMDY0NFxcbi0tLSBhL2lvX3VyaW5nL3JlZ2lzdGVyLmNcXG4rKysgYi9pb191cmluZy9yZWdpc3Rlci5jXFxuQEAgLTkyNCw2ICs5MjQsMTIgQEAgc3RhdGljIGludCBfX2lvX3VyaW5nX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB1bnNpZ25lZCBvcGNvZGUsXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRyZXQgPSBpb19yZWdpc3Rlcl9jbG9uZV9idWZmZXJzKGN0eCwgYXJnKTtcXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgSU9SSU5HX1JFR0lTVEVSX0NMT05FX0ZJTEVTOlxcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRpZiAoIWFyZyB8fCBucl9hcmdzICE9IDEpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRyZXQgPSBpb19yZWdpc3Rlcl9jbG9uZV9maWxlcyhjdHgsIGFyZyk7XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIElPUklOR19SRUdJU1RFUl9aQ1JYX0lGUTpcXG4gXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4gXFx0XFx0aWYgKCFhcmcgfHwgbnJfYXJncyAhPSAxKVxcbmRpZmYgLS1naXQgYS9pb191cmluZy9yc3JjLmMgYi9pb191cmluZy9yc3JjLmNcXG5pbmRleCA2NTAzMDM2MjZiZTZlZC4uNWRkZDcxNWUyYTYzNjUgMTAwNjQ0XFxuLS0tIGEvaW9fdXJpbmcvcnNyYy5jXFxuKysrIGIvaW9fdXJpbmcvcnNyYy5jXFxuQEAgLTEzMDMsNiArMTMwMywxNTEgQEAgaW50IGlvX3JlZ2lzdGVyX2Nsb25lX2J1ZmZlcnMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcpXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgaW9fY2xvbmVfZmlsZV9ub2RlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW9fcnNyY19ub2RlICpzcmNfbm9kZSxcXG4rXFx0XFx0XFx0ICAgICAgaW50IGRzdF9pbmRleCxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IGlvX2ZpbGVfdGFibGUgKm5ld190YWJsZSlcXG4re1xcbitcXHRzdHJ1Y3QgaW9fcnNyY19ub2RlICpkc3Rfbm9kZTtcXG4rXFx0c3RydWN0IGZpbGUgKmZpbGU7XFxuK1xcbitcXHRkc3Rfbm9kZSA9IGlvX3JzcmNfbm9kZV9hbGxvYyhjdHgsIElPUklOR19SU1JDX0ZJTEUpO1xcbitcXHRpZiAoIWRzdF9ub2RlKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdGZpbGUgPSBpb19zbG90X2ZpbGUoc3JjX25vZGUpO1xcbitcXHRnZXRfZmlsZShmaWxlKTtcXG4rXFx0aW9fZml4ZWRfZmlsZV9zZXQoZHN0X25vZGUsIGZpbGUpO1xcbitcXG4rXFx0bmV3X3RhYmxlLVxcdTAwM2VkYXRhLm5vZGVzW2RzdF9pbmRleF0gPSBkc3Rfbm9kZTtcXG4rXFx0aW9fZmlsZV9iaXRtYXBfc2V0KG5ld190YWJsZSwgZHN0X2luZGV4KTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGlvX2Nsb25lX2ZpbGVzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fcmluZ19jdHggKnNyY19jdHgsXFxuK1xcdFxcdFxcdCAgc3RydWN0IGlvX3VyaW5nX2Nsb25lX2ZpbGVzICphcmcpXFxuK3tcXG4rXFx0c3RydWN0IGlvX2ZpbGVfdGFibGUgbmV3X2ZpbGVfdGFibGU7XFxuK1xcdHVuc2lnbmVkIGludCBkc3RfbnIgPSBjdHgtXFx1MDAzZWZpbGVfdGFibGUuZGF0YS5ucjtcXG4rXFx0dW5zaWduZWQgaW50IHNyY19uciA9IHNyY19jdHgtXFx1MDAzZWZpbGVfdGFibGUuZGF0YS5ucjtcXG4rXFx0dW5zaWduZWQgaW50IG5ld19uciwgaTtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmN0eC1cXHUwMDNldXJpbmdfbG9jayk7XFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnNyY19jdHgtXFx1MDAzZXVyaW5nX2xvY2spO1xcbitcXG4rXFx0aWYgKGRzdF9uciBcXHUwMDI2XFx1MDAyNiAhKGFyZy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfUkVHSVNURVJfRFNUX1JFUExBQ0UpKVxcbitcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXG4rXFx0aWYgKCFzcmNfbnIpXFxuK1xcdFxcdHJldHVybiAtRU5YSU87XFxuK1xcbitcXHRpZiAoIWFyZy1cXHUwMDNlbnIpXFxuK1xcdFxcdGFyZy1cXHUwMDNlbnIgPSBzcmNfbnI7XFxuK1xcdGVsc2UgaWYgKGFyZy1cXHUwMDNlbnIgXFx1MDAzZSBzcmNfbnIpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKGNoZWNrX2FkZF9vdmVyZmxvdyhhcmctXFx1MDAzZXNyY19vZmYsIGFyZy1cXHUwMDNlbnIsIFxcdTAwMjZpKSB8fCBpIFxcdTAwM2Ugc3JjX25yKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aWYgKGNoZWNrX2FkZF9vdmVyZmxvdyhhcmctXFx1MDAzZWRzdF9vZmYsIGFyZy1cXHUwMDNlbnIsIFxcdTAwMjZpKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRuZXdfbnIgPSBtYXgoZHN0X25yLCBhcmctXFx1MDAzZWRzdF9vZmYgKyBhcmctXFx1MDAzZW5yKTtcXG4rXFx0aWYgKG5ld19uciBcXHUwMDNlIElPUklOR19NQVhfRklYRURfRklMRVMpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0bWVtc2V0KFxcdTAwMjZuZXdfZmlsZV90YWJsZSwgMCwgc2l6ZW9mKG5ld19maWxlX3RhYmxlKSk7XFxuK1xcdGlmICghaW9fYWxsb2NfZmlsZV90YWJsZXMoY3R4LCBcXHUwMDI2bmV3X2ZpbGVfdGFibGUsIG5ld19ucikpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0LyogQ29weSBvcmlnaW5hbCBub2RlcyBmcm9tIGJlZm9yZSB0aGUgY2xvbmVkIHJhbmdlICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBtaW4oYXJnLVxcdTAwM2Vkc3Rfb2ZmLCBkc3RfbnIpOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IGlvX3JzcmNfbm9kZSAqc3JjX25vZGUgPSBpb19yc3JjX25vZGVfbG9va3VwKFxcdTAwMjZjdHgtXFx1MDAzZWZpbGVfdGFibGUuZGF0YSwgaSk7XFxuK1xcbitcXHRcXHRpZiAoIXNyY19ub2RlKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKGlvX2Nsb25lX2ZpbGVfbm9kZShjdHgsIHNyY19ub2RlLCBpLCBcXHUwMDI2bmV3X2ZpbGVfdGFibGUpKVxcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0LyogQ29weSB0aGUgYWN0dWFsIGNsb25lZCByYW5nZSBmcm9tIHRoZSBzb3VyY2UgcmluZyAqL1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYXJnLVxcdTAwM2VucjsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBpb19yc3JjX25vZGUgKnNyY19ub2RlID0gaW9fcnNyY19ub2RlX2xvb2t1cChcXHUwMDI2c3JjX2N0eC1cXHUwMDNlZmlsZV90YWJsZS5kYXRhLFxcbitcXHRcXHRcXHRcXHRhcmctXFx1MDAzZXNyY19vZmYgKyBpKTtcXG4rXFxuK1xcdFxcdGlmICghc3JjX25vZGUpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRpZiAoaW9fY2xvbmVfZmlsZV9ub2RlKGN0eCwgc3JjX25vZGUsIGFyZy1cXHUwMDNlZHN0X29mZiArIGksIFxcdTAwMjZuZXdfZmlsZV90YWJsZSkpXFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHQvKiBDb3B5IG9yaWdpbmFsIG5vZGVzIGZyb20gYWZ0ZXIgdGhlIGNsb25lZCByYW5nZSAqL1xcbitcXHRmb3IgKGkgPSBhcmctXFx1MDAzZWRzdF9vZmYgKyBhcmctXFx1MDAzZW5yOyBpIFxcdTAwM2MgZHN0X25yOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IGlvX3JzcmNfbm9kZSAqc3JjX25vZGUgPSBpb19yc3JjX25vZGVfbG9va3VwKFxcdTAwMjZjdHgtXFx1MDAzZWZpbGVfdGFibGUuZGF0YSwgaSk7XFxuK1xcbitcXHRcXHRpZiAoIXNyY19ub2RlKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKGlvX2Nsb25lX2ZpbGVfbm9kZShjdHgsIHNyY19ub2RlLCBpLCBcXHUwMDI2bmV3X2ZpbGVfdGFibGUpKVxcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0LyogZnJlZSB0aGUgb2xkIGZpbGUgdGFibGUgaWYgdGhlcmUgaXMgYW55IGRhdGEgcHJlc2VudCAqL1xcbitcXHRpZiAoZHN0X25yKVxcbitcXHRcXHRpb19mcmVlX2ZpbGVfdGFibGVzKGN0eCwgXFx1MDAyNmN0eC1cXHUwMDNlZmlsZV90YWJsZSk7XFxuK1xcbitcXHRXQVJOX09OX09OQ0UoY3R4LVxcdTAwM2VmaWxlX3RhYmxlLmRhdGEubnIpO1xcbitcXHRjdHgtXFx1MDAzZWZpbGVfdGFibGUgPSBuZXdfZmlsZV90YWJsZTtcXG4rXFx0aW9fZmlsZV90YWJsZV9zZXRfYWxsb2NfcmFuZ2UoY3R4LCAwLCBjdHgtXFx1MDAzZWZpbGVfdGFibGUuZGF0YS5ucik7XFxuK1xcdHJldHVybiAwO1xcbitcXG4rb3V0OlxcbitcXHQvKiBFcnJvciBQYXRoOiBTYWZlbHkgZGVzdHJveSB3aGF0ZXZlciB3ZSBwYXJ0aWFsbHkgYnVpbHQgKi9cXG4rXFx0aW9fZnJlZV9maWxlX3RhYmxlcyhjdHgsIFxcdTAwMjZuZXdfZmlsZV90YWJsZSk7XFxuK1xcdHJldHVybiAtRU5PTUVNO1xcbit9XFxuK1xcbitpbnQgaW9fcmVnaXN0ZXJfY2xvbmVfZmlsZXMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcpXFxuK3tcXG4rXFx0c3RydWN0IGlvX3VyaW5nX2Nsb25lX2ZpbGVzIGNsb25lX2FyZztcXG4rXFx0c3RydWN0IGlvX3JpbmdfY3R4ICpzcmNfY3R4O1xcbitcXHRib29sIHJlZ2lzdGVyZWRfc3JjO1xcbitcXHRzdHJ1Y3QgZmlsZSAqZmlsZTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2Y2xvbmVfYXJnLCBhcmcsIHNpemVvZihjbG9uZV9hcmcpKSlcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdGlmIChjbG9uZV9hcmcuZmxhZ3MgXFx1MDAyNlxcbitcXHQgICAgfihJT1JJTkdfUkVHSVNURVJfU1JDX1JFR0lTVEVSRUQgfCBJT1JJTkdfUkVHSVNURVJfRFNUX1JFUExBQ0UpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChtZW1jaHJfaW52KGNsb25lX2FyZy5wYWQsIDAsIHNpemVvZihjbG9uZV9hcmcucGFkKSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmVnaXN0ZXJlZF9zcmMgPSAhIShjbG9uZV9hcmcuZmxhZ3MgXFx1MDAyNiBJT1JJTkdfUkVHSVNURVJfU1JDX1JFR0lTVEVSRUQpOyBcXG4rXFx0ZmlsZSA9IGlvX3VyaW5nX2N0eF9nZXRfZmlsZShjbG9uZV9hcmcuc3JjX2ZkLCByZWdpc3RlcmVkX3NyYyk7XFxuK1xcdGlmIChJU19FUlIoZmlsZSkpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKGZpbGUpO1xcbitcXG4rXFx0c3JjX2N0eCA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4rXFx0LyogU2FtZSByaW5nIGNsb25lIGlzIG5vdCBhbGxvd2VkICovXFxuK1xcdGlmIChzcmNfY3R4ID09IGN0eCkge1xcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjdHgtXFx1MDAzZXVyaW5nX2xvY2spO1xcbitcXHRsb2NrX3R3b19yaW5ncyhjdHgsIHNyY19jdHgpO1xcbitcXG4rXFx0cmV0ID0gaW9fY2xvbmVfZmlsZXMoY3R4LCBzcmNfY3R4LCBcXHUwMDI2Y2xvbmVfYXJnKTtcXG4rXFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2c3JjX2N0eC1cXHUwMDNldXJpbmdfbG9jayk7XFxuK1xcbitvdXQ6XFxuK1xcdGlmICghcmVnaXN0ZXJlZF9zcmMpXFxuK1xcdFxcdGZwdXQoZmlsZSk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuIHZvaWQgaW9fdmVjX2ZyZWUoc3RydWN0IGlvdV92ZWMgKml2KVxcbiB7XFxuIFxcdGlmICghaXYtXFx1MDAzZWlvdmVjKVxcbmRpZmYgLS1naXQgYS9pb191cmluZy9yc3JjLmggYi9pb191cmluZy9yc3JjLmhcXG5pbmRleCA0NGUzMzg2ZjdjMWNhOS4uMzJmNWM0N2M0NmFmYTEgMTAwNjQ0XFxuLS0tIGEvaW9fdXJpbmcvcnNyYy5oXFxuKysrIGIvaW9fdXJpbmcvcnNyYy5oXFxuQEAgLTc1LDYgKzc1LDcgQEAgaW50IGlvX3ByZXBfcmVnX2lvdmVjKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW91X3ZlYyAqaXYsXFxuIFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBpb3ZlYyBfX3VzZXIgKnV2ZWMsIHNpemVfdCB1dmVjX3NlZ3MpO1xcbiBcXG4gaW50IGlvX3JlZ2lzdGVyX2Nsb25lX2J1ZmZlcnMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcpO1xcbitpbnQgaW9fcmVnaXN0ZXJfY2xvbmVfZmlsZXMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcpO1xcbiBpbnQgaW9fc3FlX2J1ZmZlcnNfdW5yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCk7XFxuIGludCBpb19zcWVfYnVmZmVyc19yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZyxcXG4gXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBucl9hcmdzLCB1NjQgX191c2VyICp0YWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTA6Mzc6NTMuNDc2MzQ5MDRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE5ODg3NDM0MTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9fY2xvbmVfZmlsZV9ub2RlXCIsXG4gICAgXCJpb19jbG9uZV9maWxlc1wiLFxuICAgIFwiaW9fcmVnaXN0ZXJfY2xvbmVfZmlsZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGlvX3VyaW5nIHJlZ2lzdHJhdGlvbiBvcGNvZGUgYElPUklOR19SRUdJU1RFUl9DTE9ORV9GSUxFU2Agd2hpY2ggYWxsb3dzIGNsb25pbmcgZmlsZSBkZXNjcmlwdG9ycyBmcm9tIGFub3RoZXIgaW9fdXJpbmcgcmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbCAoaW9fdXJpbmcpIHRoYXQgYWRkcyBuZXcgcmVhY2hhYmxlIGNvZGUgcGF0aHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDBjMmRmZDllY2JjNDUxZjJmMzg0ZjdmOTY4ZWQ2MmUwNGZkYzllMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVuIDI0IDEwOjM3OjUwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmggYi9pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaFxuaW5kZXggOTA5ZmI3YWVhNjM4ZWIuLjY3ZmNjNDBmOGRmYzNjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oXG5AQCAtNzIzLDYgKzcyMyw5IEBAIGVudW0gaW9fdXJpbmdfcmVnaXN0ZXJfb3Age1xuIFx0LyogcmVnaXN0ZXIgYnBmIGZpbHRlcmluZyBwcm9ncmFtcyAqL1xuIFx0SU9SSU5HX1JFR0lTVEVSX0JQRl9GSUxURVJcdFx0PSAzNyxcbiBcbitcdC8qIGNsb25lIGZpbGUgZGVzY3JpcHRvcnMgZnJvbSBhbm90aGVyIHJpbmcgKi9cbitcdElPUklOR19SRUdJU1RFUl9DTE9ORV9GSUxFU1x0XHQ9IDM4LFxuK1xuIFx0LyogdGhpcyBnb2VzIGxhc3QgKi9cbiBcdElPUklOR19SRUdJU1RFUl9MQVNULFxuIFxuQEAgLTg1NCw2ICs4NTcsMTUgQEAgc3RydWN0IGlvX3VyaW5nX2Nsb25lX2J1ZmZlcnMge1xuIFx0X191MzJcdHBhZFszXTtcbiB9O1xuIFxuK3N0cnVjdCBpb191cmluZ19jbG9uZV9maWxlcyB7XG4rXHRfX3UzMiBzcmNfZmQ7XG4rXHRfX3UzMiBmbGFncztcbitcdF9fdTMyIHNyY19vZmY7XG4rXHRfX3UzMiBkc3Rfb2ZmO1xuK1x0X191MzIgbnI7XG4rXHRfX3UzMiBwYWRbM107XG4rfTtcbitcbiBzdHJ1Y3QgaW9fdXJpbmdfYnVmIHtcbiBcdF9fdTY0XHRhZGRyO1xuIFx0X191MzJcdGxlbjtcbmRpZmYgLS1naXQgYS9pb191cmluZy9yZWdpc3Rlci5jIGIvaW9fdXJpbmcvcmVnaXN0ZXIuY1xuaW5kZXggZGNlNWUyZjljZjc3MDIuLmJiYzhjNTA2ZWEyZGJmIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvcmVnaXN0ZXIuY1xuKysrIGIvaW9fdXJpbmcvcmVnaXN0ZXIuY1xuQEAgLTkyNCw2ICs5MjQsMTIgQEAgc3RhdGljIGludCBfX2lvX3VyaW5nX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB1bnNpZ25lZCBvcGNvZGUsXG4gXHRcdFx0YnJlYWs7XG4gXHRcdHJldCA9IGlvX3JlZ2lzdGVyX2Nsb25lX2J1ZmZlcnMoY3R4LCBhcmcpO1xuIFx0XHRicmVhaztcbitcdGNhc2UgSU9SSU5HX1JFR0lTVEVSX0NMT05FX0ZJTEVTOlxuK1x0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRpZiAoIWFyZyB8fCBucl9hcmdzICE9IDEpXG4rXHRcdFx0YnJlYWs7XG4rXHRcdHJldCA9IGlvX3JlZ2lzdGVyX2Nsb25lX2ZpbGVzKGN0eCwgYXJnKTtcbitcdFx0YnJlYWs7XG4gXHRjYXNlIElPUklOR19SRUdJU1RFUl9aQ1JYX0lGUTpcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0aWYgKCFhcmcgfHwgbnJfYXJncyAhPSAxKVxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3JzcmMuYyBiL2lvX3VyaW5nL3JzcmMuY1xuaW5kZXggNjUwMzAzNjI2YmU2ZWQuLjVkZGQ3MTVlMmE2MzY1IDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvcnNyYy5jXG4rKysgYi9pb191cmluZy9yc3JjLmNcbkBAIC0xMzAzLDYgKzEzMDMsMTUxIEBAIGludCBpb19yZWdpc3Rlcl9jbG9uZV9idWZmZXJzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rc3RhdGljIGludCBpb19jbG9uZV9maWxlX25vZGUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4rXHRcdFx0ICAgICAgc3RydWN0IGlvX3JzcmNfbm9kZSAqc3JjX25vZGUsXG4rXHRcdFx0ICAgICAgaW50IGRzdF9pbmRleCxcbitcdFx0XHQgICAgICBzdHJ1Y3QgaW9fZmlsZV90YWJsZSAqbmV3X3RhYmxlKVxuK3tcbitcdHN0cnVjdCBpb19yc3JjX25vZGUgKmRzdF9ub2RlO1xuK1x0c3RydWN0IGZpbGUgKmZpbGU7XG4rXG4rXHRkc3Rfbm9kZSA9IGlvX3JzcmNfbm9kZV9hbGxvYyhjdHgsIElPUklOR19SU1JDX0ZJTEUpO1xuK1x0aWYgKCFkc3Rfbm9kZSlcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRmaWxlID0gaW9fc2xvdF9maWxlKHNyY19ub2RlKTtcbitcdGdldF9maWxlKGZpbGUpO1xuK1x0aW9fZml4ZWRfZmlsZV9zZXQoZHN0X25vZGUsIGZpbGUpO1xuK1xuK1x0bmV3X3RhYmxlLVx1MDAzZWRhdGEubm9kZXNbZHN0X2luZGV4XSA9IGRzdF9ub2RlO1xuK1x0aW9fZmlsZV9iaXRtYXBfc2V0KG5ld190YWJsZSwgZHN0X2luZGV4KTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGlvX2Nsb25lX2ZpbGVzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fcmluZ19jdHggKnNyY19jdHgsXG4rXHRcdFx0ICBzdHJ1Y3QgaW9fdXJpbmdfY2xvbmVfZmlsZXMgKmFyZylcbit7XG4rXHRzdHJ1Y3QgaW9fZmlsZV90YWJsZSBuZXdfZmlsZV90YWJsZTtcbitcdHVuc2lnbmVkIGludCBkc3RfbnIgPSBjdHgtXHUwMDNlZmlsZV90YWJsZS5kYXRhLm5yO1xuK1x0dW5zaWduZWQgaW50IHNyY19uciA9IHNyY19jdHgtXHUwMDNlZmlsZV90YWJsZS5kYXRhLm5yO1xuK1x0dW5zaWduZWQgaW50IG5ld19uciwgaTtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2Y3R4LVx1MDAzZXVyaW5nX2xvY2spO1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZzcmNfY3R4LVx1MDAzZXVyaW5nX2xvY2spO1xuK1xuK1x0aWYgKGRzdF9uciBcdTAwMjZcdTAwMjYgIShhcmctXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19SRUdJU1RFUl9EU1RfUkVQTEFDRSkpXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4rXHRpZiAoIXNyY19ucilcbitcdFx0cmV0dXJuIC1FTlhJTztcbitcbitcdGlmICghYXJnLVx1MDAzZW5yKVxuK1x0XHRhcmctXHUwMDNlbnIgPSBzcmNfbnI7XG4rXHRlbHNlIGlmIChhcmctXHUwMDNlbnIgXHUwMDNlIHNyY19ucilcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAoY2hlY2tfYWRkX292ZXJmbG93KGFyZy1cdTAwM2VzcmNfb2ZmLCBhcmctXHUwMDNlbnIsIFx1MDAyNmkpIHx8IGkgXHUwMDNlIHNyY19ucilcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpZiAoY2hlY2tfYWRkX292ZXJmbG93KGFyZy1cdTAwM2Vkc3Rfb2ZmLCBhcmctXHUwMDNlbnIsIFx1MDAyNmkpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdG5ld19uciA9IG1heChkc3RfbnIsIGFyZy1cdTAwM2Vkc3Rfb2ZmICsgYXJnLVx1MDAzZW5yKTtcbitcdGlmIChuZXdfbnIgXHUwMDNlIElPUklOR19NQVhfRklYRURfRklMRVMpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0bWVtc2V0KFx1MDAyNm5ld19maWxlX3RhYmxlLCAwLCBzaXplb2YobmV3X2ZpbGVfdGFibGUpKTtcbitcdGlmICghaW9fYWxsb2NfZmlsZV90YWJsZXMoY3R4LCBcdTAwMjZuZXdfZmlsZV90YWJsZSwgbmV3X25yKSlcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHQvKiBDb3B5IG9yaWdpbmFsIG5vZGVzIGZyb20gYmVmb3JlIHRoZSBjbG9uZWQgcmFuZ2UgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1pbihhcmctXHUwMDNlZHN0X29mZiwgZHN0X25yKTsgaSsrKSB7XG4rXHRcdHN0cnVjdCBpb19yc3JjX25vZGUgKnNyY19ub2RlID0gaW9fcnNyY19ub2RlX2xvb2t1cChcdTAwMjZjdHgtXHUwMDNlZmlsZV90YWJsZS5kYXRhLCBpKTtcbitcbitcdFx0aWYgKCFzcmNfbm9kZSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKGlvX2Nsb25lX2ZpbGVfbm9kZShjdHgsIHNyY19ub2RlLCBpLCBcdTAwMjZuZXdfZmlsZV90YWJsZSkpXG4rXHRcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHQvKiBDb3B5IHRoZSBhY3R1YWwgY2xvbmVkIHJhbmdlIGZyb20gdGhlIHNvdXJjZSByaW5nICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhcmctXHUwMDNlbnI7IGkrKykge1xuK1x0XHRzdHJ1Y3QgaW9fcnNyY19ub2RlICpzcmNfbm9kZSA9IGlvX3JzcmNfbm9kZV9sb29rdXAoXHUwMDI2c3JjX2N0eC1cdTAwM2VmaWxlX3RhYmxlLmRhdGEsXG4rXHRcdFx0XHRhcmctXHUwMDNlc3JjX29mZiArIGkpO1xuK1xuK1x0XHRpZiAoIXNyY19ub2RlKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAoaW9fY2xvbmVfZmlsZV9ub2RlKGN0eCwgc3JjX25vZGUsIGFyZy1cdTAwM2Vkc3Rfb2ZmICsgaSwgXHUwMDI2bmV3X2ZpbGVfdGFibGUpKVxuK1x0XHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0LyogQ29weSBvcmlnaW5hbCBub2RlcyBmcm9tIGFmdGVyIHRoZSBjbG9uZWQgcmFuZ2UgKi9cbitcdGZvciAoaSA9IGFyZy1cdTAwM2Vkc3Rfb2ZmICsgYXJnLVx1MDAzZW5yOyBpIFx1MDAzYyBkc3RfbnI7IGkrKykge1xuK1x0XHRzdHJ1Y3QgaW9fcnNyY19ub2RlICpzcmNfbm9kZSA9IGlvX3JzcmNfbm9kZV9sb29rdXAoXHUwMDI2Y3R4LVx1MDAzZWZpbGVfdGFibGUuZGF0YSwgaSk7XG4rXG4rXHRcdGlmICghc3JjX25vZGUpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGlmIChpb19jbG9uZV9maWxlX25vZGUoY3R4LCBzcmNfbm9kZSwgaSwgXHUwMDI2bmV3X2ZpbGVfdGFibGUpKVxuK1x0XHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0LyogZnJlZSB0aGUgb2xkIGZpbGUgdGFibGUgaWYgdGhlcmUgaXMgYW55IGRhdGEgcHJlc2VudCAqL1xuK1x0aWYgKGRzdF9ucilcbitcdFx0aW9fZnJlZV9maWxlX3RhYmxlcyhjdHgsIFx1MDAyNmN0eC1cdTAwM2VmaWxlX3RhYmxlKTtcbitcbitcdFdBUk5fT05fT05DRShjdHgtXHUwMDNlZmlsZV90YWJsZS5kYXRhLm5yKTtcbitcdGN0eC1cdTAwM2VmaWxlX3RhYmxlID0gbmV3X2ZpbGVfdGFibGU7XG4rXHRpb19maWxlX3RhYmxlX3NldF9hbGxvY19yYW5nZShjdHgsIDAsIGN0eC1cdTAwM2VmaWxlX3RhYmxlLmRhdGEubnIpO1xuK1x0cmV0dXJuIDA7XG4rXG4rb3V0OlxuK1x0LyogRXJyb3IgUGF0aDogU2FmZWx5IGRlc3Ryb3kgd2hhdGV2ZXIgd2UgcGFydGlhbGx5IGJ1aWx0ICovXG4rXHRpb19mcmVlX2ZpbGVfdGFibGVzKGN0eCwgXHUwMDI2bmV3X2ZpbGVfdGFibGUpO1xuK1x0cmV0dXJuIC1FTk9NRU07XG4rfVxuK1xuK2ludCBpb19yZWdpc3Rlcl9jbG9uZV9maWxlcyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZylcbit7XG4rXHRzdHJ1Y3QgaW9fdXJpbmdfY2xvbmVfZmlsZXMgY2xvbmVfYXJnO1xuK1x0c3RydWN0IGlvX3JpbmdfY3R4ICpzcmNfY3R4O1xuK1x0Ym9vbCByZWdpc3RlcmVkX3NyYztcbitcdHN0cnVjdCBmaWxlICpmaWxlO1xuK1x0aW50IHJldDtcbitcbitcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZjbG9uZV9hcmcsIGFyZywgc2l6ZW9mKGNsb25lX2FyZykpKVxuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcdGlmIChjbG9uZV9hcmcuZmxhZ3MgXHUwMDI2XG4rXHQgICAgfihJT1JJTkdfUkVHSVNURVJfU1JDX1JFR0lTVEVSRUQgfCBJT1JJTkdfUkVHSVNURVJfRFNUX1JFUExBQ0UpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChtZW1jaHJfaW52KGNsb25lX2FyZy5wYWQsIDAsIHNpemVvZihjbG9uZV9hcmcucGFkKSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmVnaXN0ZXJlZF9zcmMgPSAhIShjbG9uZV9hcmcuZmxhZ3MgXHUwMDI2IElPUklOR19SRUdJU1RFUl9TUkNfUkVHSVNURVJFRCk7IFxuK1x0ZmlsZSA9IGlvX3VyaW5nX2N0eF9nZXRfZmlsZShjbG9uZV9hcmcuc3JjX2ZkLCByZWdpc3RlcmVkX3NyYyk7XG4rXHRpZiAoSVNfRVJSKGZpbGUpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihmaWxlKTtcbitcbitcdHNyY19jdHggPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbitcdC8qIFNhbWUgcmluZyBjbG9uZSBpcyBub3QgYWxsb3dlZCAqL1xuK1x0aWYgKHNyY19jdHggPT0gY3R4KSB7XG4rXHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmN0eC1cdTAwM2V1cmluZ19sb2NrKTtcbitcdGxvY2tfdHdvX3JpbmdzKGN0eCwgc3JjX2N0eCk7XG4rXG4rXHRyZXQgPSBpb19jbG9uZV9maWxlcyhjdHgsIHNyY19jdHgsIFx1MDAyNmNsb25lX2FyZyk7XG4rXG4rXHRtdXRleF91bmxvY2soXHUwMDI2c3JjX2N0eC1cdTAwM2V1cmluZ19sb2NrKTtcbitcbitvdXQ6XG4rXHRpZiAoIXJlZ2lzdGVyZWRfc3JjKVxuK1x0XHRmcHV0KGZpbGUpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gdm9pZCBpb192ZWNfZnJlZShzdHJ1Y3QgaW91X3ZlYyAqaXYpXG4ge1xuIFx0aWYgKCFpdi1cdTAwM2Vpb3ZlYylcbmRpZmYgLS1naXQgYS9pb191cmluZy9yc3JjLmggYi9pb191cmluZy9yc3JjLmhcbmluZGV4IDQ0ZTMzODZmN2MxY2E5Li4zMmY1YzQ3YzQ2YWZhMSAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL3JzcmMuaFxuKysrIGIvaW9fdXJpbmcvcnNyYy5oXG5AQCAtNzUsNiArNzUsNyBAQCBpbnQgaW9fcHJlcF9yZWdfaW92ZWMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb3VfdmVjICppdixcbiBcdFx0XHRjb25zdCBzdHJ1Y3QgaW92ZWMgX191c2VyICp1dmVjLCBzaXplX3QgdXZlY19zZWdzKTtcbiBcbiBpbnQgaW9fcmVnaXN0ZXJfY2xvbmVfYnVmZmVycyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZyk7XG4raW50IGlvX3JlZ2lzdGVyX2Nsb25lX2ZpbGVzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnKTtcbiBpbnQgaW9fc3FlX2J1ZmZlcnNfdW5yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCk7XG4gaW50IGlvX3NxZV9idWZmZXJzX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnLFxuIFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgbnJfYXJncywgdTY0IF9fdXNlciAqdGFncyk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxMDozNzo1My40NzYzNTE2M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2MjUxNzE0MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgaW9fdXJpbmcgRmlsZSBEZXNjcmlwdG9yIENsb25pbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBhIG5ldyBgaW9fdXJpbmdgIHJlZ2lzdHJhdGlvbiBvcGNvZGUsIGBJT1JJTkdfUkVHSVNURVJfQ0xPTkVfRklMRVNgLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiBcIkludGVyZXN0aW5nLCB0aGlzIGlzIGEgY29yZSBrZXJuZWwgbW9kaWZpY2F0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgaW9fdXJpbmdgIHN1YnN5c3RlbS5cIiBJdCdzIGRpcmVjdGx5IGNoYW5naW5nIGhvdyB3ZSBoYW5kbGUgZmlsZSBkZXNjcmlwdG9ycyB3aXRoaW4gaW9fdXJpbmcsIGFsbG93aW5nIHVzIHRvIGNsb25lIHRoZW0gZnJvbSBhbm90aGVyIHJpbmcuIEkgc2VlIHRoZSBtYWluIHdvcmsgaXMgaW4gYGlvX3VyaW5nL3JlZ2lzdGVyLmNgIGFuZCBgaW9fdXJpbmcvcnNyYy5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIHJlZ2lzdHJhdGlvbiBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudCBhc3BlY3RzLlxuXG5Ob3csIGxldCBtZSBtZW50YWxseSBtYXAgdGhlIG5ldyBmdW5jdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBpb19jbG9uZV9maWxlX25vZGVgLCBgaW9fY2xvbmVfZmlsZXNgLCBhbmQgYGlvX3JlZ2lzdGVyX2Nsb25lX2ZpbGVzYC4gVGhhdCdzIHRoZSBjb3JlIG9mIHRoZSBmdW5jdGlvbmFsaXR5LiBBbmQsIG9mIGNvdXJzZSwgdGhlIGVudHJ5IHBvaW50LCBgX19pb191cmluZ19yZWdpc3RlcmAsIGFsdGhvdWdoIHRoYXQncyBsaWtlbHkgbW9yZSBnZW5lcmljLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhvc2UgZnVuY3Rpb24gY2FsbHMgYW5kIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgZmxvdy5cblxuSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEkga25vdyBgQ09ORklHX0lPX1VSSU5HYCBlbmFibGVzIHRoZSB3aG9sZSBzdWJzeXN0ZW0uIEdpdmVuIHRoZSB0YXJnZXRlZCBmaWxlcywgaXQncyB2ZXJ5IGxpa2VseSB0aGF0J3MgdGhlIG9ubHkgcmVsZXZhbnQgY29uZmlndXJhdGlvbiwgYnV0IEknbGwgbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgc25lYWt5IGRlcGVuZGVuY2llcyBvciBzdWJ0bGUgZmVhdHVyZXMgdGhhdCByZXF1aXJlIGFkZGl0aW9uYWwgc2V0dGluZ3MuIEkgbmVlZCB0byBiZSBjZXJ0YWluIHRoZXJlIGlzbid0IHNvbWUgb2JzY3VyZSBjb25maWcgZmxhZyB0aGF0IHRyaXBzIHVwIHRoZSBidWlsZCBvciBydW50aW1lIGJlaGF2aW9yLlxuXG5GaW5hbGx5LCBJJ2xsIG5lZWQgdG8gbGV2ZXJhZ2Ugb3VyIHRvb2xzIHRvIG1ldGljdWxvdXNseSB2ZXJpZnkgdGhlIHBhdGNoLiBXZSBuZWVkIHRvIHZhbGlkYXRlIHRoZSBpbXBsZW1lbnRhdGlvbidzIGNvcnJlY3RuZXNzLCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsIGFuZCBwb3RlbnRpYWwgZm9yIGludHJvZHVjaW5nIG5ldyBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIFRoZSBjbG9uaW5nIG9mIGZpbGUgZGVzY3JpcHRvcnMgY2FuIGJlIGEgdHJpY2t5IGFyZWEgdG8gaGFuZGxlIHNlY3VyZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzE0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTA6Mzc6NTkuMTAxNTI3ODM2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDQwNzE5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfSU9fVVJJTkdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL01ha2VmaWxlPTc9ZW5kaWZcXG5pb191cmluZy9NYWtlZmlsZS04LVxcbmlvX3VyaW5nL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0lPX1VSSU5HKVxcdFxcdCs9IGlvX3VyaW5nLm8gb3BkZWYubyBrYnVmLm8gcnNyYy5vIG5vdGlmLm8gXFxcXFxcbmlvX3VyaW5nL01ha2VmaWxlLTEwLVxcdFxcdFxcdFxcdFxcdHRjdHgubyBmaWxldGFibGUubyBydy5vIHBvbGwubyBcXFxcXFxuLS1cXG5pb191cmluZy9NYWtlZmlsZS0xOC1cXG5pb191cmluZy9NYWtlZmlsZToxOTpvYmotJChDT05GSUdfSU9fVVJJTkdfWkNSWClcXHQrPSB6Y3J4Lm9cXG5pb191cmluZy9NYWtlZmlsZS0yMC1vYmotJChDT05GSUdfSU9fV1EpXFx0XFx0Kz0gaW8td3Eub1xcbi0tXFxuaW9fdXJpbmcvTWFrZWZpbGU9MjU9b2JqLSQoQ09ORklHX1BST0NfRlMpICs9IGZkaW5mby5vXFxuaW9fdXJpbmcvTWFrZWZpbGU6MjY6b2JqLSQoQ09ORklHX0lPX1VSSU5HX01PQ0tfRklMRSkgKz0gbW9ja19maWxlLm9cXG5pb191cmluZy9NYWtlZmlsZToyNzpvYmotJChDT05GSUdfSU9fVVJJTkdfQlBGKSArPSBicGZfZmlsdGVyLm9cXG5pb191cmluZy9NYWtlZmlsZToyODpvYmotJChDT05GSUdfSU9fVVJJTkdfQlBGX09QUykgKz0gYnBmLW9wcy5vXFxuLS1cXG5pb191cmluZy9icGYtb3BzLmg9MTM9c3RydWN0IGlvX3VyaW5nX2JwZl9vcHMge1xcbi0tXFxuaW9fdXJpbmcvYnBmLW9wcy5oLTE5LVxcbmlvX3VyaW5nL2JwZi1vcHMuaDoyMDojaWZkZWYgQ09ORklHX0lPX1VSSU5HX0JQRl9PUFNcXG5pb191cmluZy9icGYtb3BzLmgtMjEtdm9pZCBpb191bnJlZ2lzdGVyX2JwZl9vcHMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpO1xcbi0tXFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oLTYtXFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oOjc6I2lmZGVmIENPTkZJR19JT19VUklOR19CUEZcXG5pb191cmluZy9icGZfZmlsdGVyLmgtOC1cXG4tLVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuaD00Mj1zdGF0aWMgaW5saW5lIHZvaWQgaW9fYnBmX2ZpbHRlcl9jbG9uZShzdHJ1Y3QgaW9fcmVzdHJpY3Rpb24gKmRzdCxcXG4tLVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuaC00NS19XFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oOjQ2OiNlbmRpZiAvKiBDT05GSUdfSU9fVVJJTkdfQlBGICovXFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oLTQ3LVxcbi0tXFxuaW9fdXJpbmcvemNyeC5oPTUyPXN0cnVjdCBpb196Y3J4X2lmcSB7XFxuLS1cXG5pb191cmluZy96Y3J4LmgtNzYtXFxuaW9fdXJpbmcvemNyeC5oOjc3OiNpZiBkZWZpbmVkKENPTkZJR19JT19VUklOR19aQ1JYKVxcbmlvX3VyaW5nL3pjcnguaC03OC1pbnQgaW9femNyeF9jdHJsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnLCB1bnNpZ25lZCBucl9hcmcpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxMDozNzo1OS4zNDE5NDUxMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1NDgwNTE3OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgaW9fdXJpbmcgQ2xvbmUgRmlsZSBEZXNjcmlwdG9yIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRpbmcgYElPUklOR19SRUdJU1RFUl9DTE9ORV9GSUxFU2AgdG8gdGhlIGBfX2lvX3VyaW5nX3JlZ2lzdGVyYCBmdW5jdGlvbiB3aXRoaW4gYGlvX3VyaW5nL3JlZ2lzdGVyLmNgLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50LiBMb29raW5nIGF0IHRoZSBjb2RlLCB0aGUgY29yZSBsb2dpYyBmb3IgdGhpcyBjbG9uZSBmdW5jdGlvbmFsaXR5IOKAkyBgaW9fY2xvbmVfZmlsZV9ub2RlYCwgYGlvX2Nsb25lX2ZpbGVzYCwgYW5kIGBpb19yZWdpc3Rlcl9jbG9uZV9maWxlc2Ag4oCTIHJlc2lkZXMgaW4gYGlvX3VyaW5nL3JzcmMuY2AuIEFuZCBpbXBvcnRhbnRseSwgdGhlc2UgZnVuY3Rpb25zICphcmUqIGNvbXBpbGVkIHdoZW4gYENPTkZJR19JT19VUklOR2AgaXMgZW5hYmxlZC4gVGhhdCdzIGdvb2Q7IGl0IG1lYW5zIHdlIGNhbiB0ZXN0IGl0IG9uIGEgc3RhbmRhcmQgaW9fdXJpbmcgc2V0dXAuXG5cbkdpdmVuIHRoaXMsIEknbSBsZWFuaW5nIHN0cm9uZ2x5IHRvd2FyZHMgYFdvcnRoRnV6emluZz10cnVlYC4gVGhpcyBmdW5kYW1lbnRhbGx5IGNoYW5nZXMgaG93IGlvX3VyaW5nIGludGVyYWN0cyB3aXRoIGZpbGUgZGVzY3JpcHRvcnMsIHBvdGVudGlhbGx5IGludHJvZHVjaW5nIG5ldyBjb3JuZXIgY2FzZXMgb3IgdnVsbmVyYWJpbGl0aWVzLiBJdCdzIGEga2VybmVsLWxldmVsIGNoYW5nZSBhbmQgaW50cm9kdWNlcyBuZXcgY29kZSBwYXRocywgc28gaXQncyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy5cblxuSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayBpZiBhbnkgb3RoZXIgY29uZmlncyBhcmUgcmVxdWlyZWQgYmV5b25kIGBJT19VUklOR2AsIGJ1dCBJIHN1c3BlY3Qgbm90LiBBIHF1aWNrIGdsYW5jZSBhdCBgaW9fdXJpbmcvcnNyYy5jYCBjb25maXJtcyB0aGF0IHRoZSByZWxldmFudCBjb2RlIGlzIGNvbXBpbGVkIHVuY29uZGl0aW9uYWxseSB3aGVuIGBDT05GSUdfSU9fVVJJTkdgIGlzIGVuYWJsZWQuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC5cblxuVWx0aW1hdGVseSwgdGhlIGFkZGl0aW9uIG9mIHRoaXMgZmlsZSBkZXNjcmlwdG9yIGNsb25pbmcgbWVjaGFuaXNtIGluIHRoZSBpb191cmluZyBzeXN0ZW0gcHJlc2VudHMgbmV3IGF0dGFjayBzdXJmYWNlcyBhbmQgcG90ZW50aWFsIGZvciBzdWJ0bGUsIHVuZXhwZWN0ZWQgYmVoYXZpb3VyLiBJdOKAmXMgZGVmaW5pdGVseSB3b3J0aCBhIGRlZXAgZGl2ZSB3aXRoIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MDUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTA6Mzg6MDQuODg5OTk5NTQ4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTAwNDU0NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9yc3JjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDEwOjM4OjA1LjAwNTAxOTE2NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzM3MTIzNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgaW9fdXJpbmcgUmVzb3VyY2UgUmVnaXN0cmF0aW9uKipcblxuUmlnaHQsIHNvIHRoZSBwcm9ibGVtJ3Mgbm90IHN0ZW1taW5nIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgdGhlbXNlbHZlcyB3aXRoaW4gYGlvX3VyaW5nL3JzcmMuY2AuIFRoYXQncyBhIHJlYXNvbmFibGUgZmlyc3QgY2hlY2ssIGJ1dCBpdCdzIGEgZGVhZCBlbmQuIE9rYXksIHdoZXJlIGVsc2UgY291bGQgdGhpcyBiZSBoYW5kbGVkPyBHaXZlbiB0aGUgbmF0dXJlIG9mIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIGhvdyB0aGUga2VybmVsIGludGVyYWN0cyB3aXRoIHVzZXIgc3BhY2UsIHRoZSBsb2dpY2FsIG5leHQgcGxhY2UgdG8gbG9vayBpcyB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MuIEknbSBnb2luZyB0byBkaWcgaW50byBgaW9fdXJpbmcvcmVnaXN0ZXIuY2AuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIG1lYXQgb2YgaG93IHJlc291cmNlcyDigJMgcG90ZW50aWFsbHkgaW5jbHVkaW5nIHdoYXRldmVyIGlzIGNhdXNpbmcgdGhlIGlzc3VlIOKAkyBhcmUgYWxsb2NhdGVkLCBtYXBwZWQsIGFuZCBnZW5lcmFsbHkgaGFuZGxlZCBkdXJpbmcgdGhlIHNldHVwIHBoYXNlIG9mIGFuIGlvX3VyaW5nIGluc3RhbmNlLiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjQ5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTA6Mzg6MDguMTM4NzM2MTgxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNjQ5MjM3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL3JlZ2lzdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvcmVnaXN0ZXIuYz0zMTU9c3RhdGljIF9fY29sZCBpbnQgaW9fcmVnaXN0ZXJfaW93cV9hZmYoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy9yZWdpc3Rlci5jLTMyNy1cXG5pb191cmluZy9yZWdpc3Rlci5jOjMyODojaWZkZWYgQ09ORklHX0NPTVBBVFxcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMzI5LVxcdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxMDozODowOC4zNjUyMzYxMjVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzA3NDMzMzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGlvX3VyaW5nIFBhdGNoKipcblxuT2theSwgc28gaXQgbG9va3MgbGlrZSBgQ09ORklHX0lPX1VSSU5HYCBpcyB0aGUgb25seSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbiBoZXJlLiBObyBuZWVkIHRvIGRpZyBhbnkgZGVlcGVyIGZvciBvdGhlciBzZXR0aW5ncy5cblxuQWxyaWdodCwgdGltZSB0byBmb3JtdWxhdGUgYSBwcm9wZXIgcmVzcG9uc2UuIFdlJ3JlIGRlYWxpbmcgd2l0aCBhIHBhdGNoIHRoYXQncyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmc7IGl0IGludHJvZHVjZXMgYSBicmFuZCBuZXcgb3Bjb2RlLCBgSU9SSU5HX1JFR0lTVEVSX0NMT05FX0ZJTEVTYCwgZm9yIHRoZSBgaW9fdXJpbmdgIHN5c3RlbS4gVGhpcyBpcyBhIHNvbGlkIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUga2VybmVsJ3MgY29yZS4gTmV3IHJlYWNoYWJsZSBjb2RlIHBhdGhzIGFsd2F5cyBnZXQgbXkgYXR0ZW50aW9uISBUaGUgaW5jbHVzaW9uIG9mIHRoZXNlIHNwZWNpZmljIHN5bWJvbHMgLSBgaW9fY2xvbmVfZmlsZV9ub2RlYCwgYGlvX2Nsb25lX2ZpbGVzYCwgYW5kIGBpb19yZWdpc3Rlcl9jbG9uZV9maWxlc2AgLSBhcyBmb2N1cyBwb2ludHMgZm9yIGZ1enppbmcgaXMgc3BvdCBvbi4gVGhleSBoaWdobGlnaHQgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBhcmUgYXQgcGxheSBpbiB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuIEVzc2VudGlhbGx5LCB0aGlzIHBhdGNoIGFsbG93cyBjbG9uaW5nIGZpbGUgZGVzY3JpcHRvcnMgZnJvbSBvbmUgYGlvX3VyaW5nYCByaW5nIHRvIGFub3RoZXIsIHdoaWNoIG9wZW5zIHVwIG5ldyBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2VzIGFuZCByZXF1aXJlcyByaWdvcm91cyB0ZXN0aW5nLiBUaGUgcHJlc2VuY2Ugb2YgYElPX1VSSU5HYCBpbiB0aGUgRW5hYmxlQ29uZmlncyBhcnJheSBtZWFucyB0aGUgbmV3IGZlYXR1cmUgaXMgY29ycmVjdGx5IGdhdGVkIGJ5IHRoaXMgcGFyYW1ldGVyLCB3aGljaCBtZWFucyBpdCBzaG91bGQgbm90IGdldCBpbiB0aGUgd2F5IG9mIG90aGVyIGZlYXR1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTg4LCJPdXRwdXRUb2tlbnMiOjEyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxMDozODoxMy4wNzI2NzI4OTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTExMDEwNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9fY2xvbmVfZmlsZV9ub2RlXCIsXG4gICAgXCJpb19jbG9uZV9maWxlc1wiLFxuICAgIFwiaW9fcmVnaXN0ZXJfY2xvbmVfZmlsZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGlvX3VyaW5nIHJlZ2lzdHJhdGlvbiBvcGNvZGUgYElPUklOR19SRUdJU1RFUl9DTE9ORV9GSUxFU2Agd2hpY2ggYWxsb3dzIGNsb25pbmcgZmlsZSBkZXNjcmlwdG9ycyBmcm9tIGFub3RoZXIgaW9fdXJpbmcgcmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbCAoaW9fdXJpbmcpIHRoYXQgYWRkcyBuZXcgcmVhY2hhYmxlIGNvZGUgcGF0aHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb19jbG9uZV9maWxlX25vZGVcIixcbiAgICBcImlvX2Nsb25lX2ZpbGVzXCIsXG4gICAgXCJpb19yZWdpc3Rlcl9jbG9uZV9maWxlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgaW9fdXJpbmcgcmVnaXN0cmF0aW9uIG9wY29kZSBgSU9SSU5HX1JFR0lTVEVSX0NMT05FX0ZJTEVTYCB3aGljaCBhbGxvd3MgY2xvbmluZyBmaWxlIGRlc2NyaXB0b3JzIGZyb20gYW5vdGhlciBpb191cmluZyByaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIChpb191cmluZykgdGhhdCBhZGRzIG5ldyByZWFjaGFibGUgY29kZSBwYXRocyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4v5dq[1] Phase: Succeeded StartedAt: 2026-06-24 10:38:24 +0000 UTC FinishedAt: 2026-06-24 10:38:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4v5dq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-24 10:38:24 +0000 UTC FinishedAt: 2026-06-24 10:38:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4v5dq[2] Phase: Succeeded StartedAt: 2026-06-24 10:38:24 +0000 UTC FinishedAt: 2026-06-24 11:00:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4v5dq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13a1e1a618858407fa12c391f664ea750651f6b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_clone_file_node","io_clone_files","io_register_clone_files"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13a1e1a618858407fa12c391f664ea750651f6b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4c59d8b-93e2-409b-9bad-d23dd34e05e7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-06-24 10:38:25 +0000 UTC FinishedAt: 2026-06-24 11:00:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"13a1e1a618858407fa12c391f664ea750651f6b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_clone_file_node","io_clone_files","io_register_clone_files"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"13a1e1a618858407fa12c391f664ea750651f6b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4c59d8b-93e2-409b-9bad-d23dd34e05e7","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-workflow4v5dq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13a1e1a618858407fa12c391f664ea750651f6b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_clone_file_node","io_clone_files","io_register_clone_files"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13a1e1a618858407fa12c391f664ea750651f6b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4c59d8b-93e2-409b-9bad-d23dd34e05e7","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-06-24 10:38:25 +0000 UTC FinishedAt: 2026-06-24 10:39:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4v5dq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13a1e1a618858407fa12c391f664ea750651f6b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_clone_file_node","io_clone_files","io_register_clone_files"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13a1e1a618858407fa12c391f664ea750651f6b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4c59d8b-93e2-409b-9bad-d23dd34e05e7","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-06-24 10:38:25 +0000 UTC FinishedAt: 2026-06-24 10:39:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"13a1e1a618858407fa12c391f664ea750651f6b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-workflow4v5dq/series-workflow4v5dq-convert-artifact-4024789376/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4v5dq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13a1e1a618858407fa12c391f664ea750651f6b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_clone_file_node","io_clone_files","io_register_clone_files"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13a1e1a618858407fa12c391f664ea750651f6b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4c59d8b-93e2-409b-9bad-d23dd34e05e7","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-06-24 10:39:10 +0000 UTC FinishedAt: 2026-06-24 10:59:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4v5dq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13a1e1a618858407fa12c391f664ea750651f6b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_clone_file_node","io_clone_files","io_register_clone_files"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13a1e1a618858407fa12c391f664ea750651f6b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4c59d8b-93e2-409b-9bad-d23dd34e05e7","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-06-24 10:39:10 +0000 UTC FinishedAt: 2026-06-24 10:59:58 +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:*653d91a4-d172-4322-8c5a-3c1d5bcad85a,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-workflow4v5dq/series-workflow4v5dq-convert-artifact-4024789376/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": "e4de42de-39a0-423d-9d52-a230b8ce5443", "success": false },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-workflow4v5dq/series-workflow4v5dq-build-action-3455235142/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4v5dq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13a1e1a618858407fa12c391f664ea750651f6b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_clone_file_node","io_clone_files","io_register_clone_files"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13a1e1a618858407fa12c391f664ea750651f6b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4c59d8b-93e2-409b-9bad-d23dd34e05e7","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-06-24 10:39:10 +0000 UTC FinishedAt: 2026-06-24 10:58:10 +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:*653d91a4-d172-4322-8c5a-3c1d5bcad85a,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-workflow4v5dq/series-workflow4v5dq-convert-artifact-4024789376/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": "e4de42de-39a0-423d-9d52-a230b8ce5443", "success": false },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-workflow4v5dq/series-workflow4v5dq-build-action-3455235142/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4v5dq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13a1e1a618858407fa12c391f664ea750651f6b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_clone_file_node","io_clone_files","io_register_clone_files"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13a1e1a618858407fa12c391f664ea750651f6b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4c59d8b-93e2-409b-9bad-d23dd34e05e7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Failed StartedAt: 2026-06-24 10:59:58 +0000 UTC FinishedAt: 2026-06-24 11:00:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4v5dq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13a1e1a618858407fa12c391f664ea750651f6b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_clone_file_node","io_clone_files","io_register_clone_files"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13a1e1a618858407fa12c391f664ea750651f6b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"d4c59d8b-93e2-409b-9bad-d23dd34e05e7","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: Failed StartedAt: 2026-06-24 10:59:58 +0000 UTC FinishedAt: 2026-06-24 11:00:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}