Name: series-workflowrpd6v Phase: Succeeded StartedAt: 2026-08-02 20:07:13 +0000 UTC FinishedAt: 2026-08-03 00:17:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrpd6v[0] Phase: Succeeded StartedAt: 2026-08-02 20:07:13 +0000 UTC FinishedAt: 2026-08-02 20:10:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrpd6v[0].run-triage Phase: Succeeded StartedAt: 2026-08-02 20:07:13 +0000 UTC FinishedAt: 2026-08-02 20:10:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "69963a0678a347d57c4ac8b16939dba216eb95ce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "UNIX", "COMPAT", "SECURITY" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "69963a0678a347d57c4ac8b16939dba216eb95ce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "UNIX", "COMPAT", "SECURITY" ], "series_id": "184eb337-c6a6-4924-95bb-d6b4d70a2b41" }, "track": "KASAN", "fuzz": { "focus": [ "fs", "net" ], "focus_symbols": [ "unix_setsockopt", "scm_recv_one_fd", "scm_detach_fds", "scm_detach_fds_compat", "scm_recv_unix" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIwOjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VOSVgmIzM0OywKICAgICYjMzQ7Q09NUEFUJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dW5peF9zZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O3NjbV9yZWN2X29uZV9mZCYjMzQ7LAogICAgJiMzNDtzY21fZGV0YWNoX2ZkcyYjMzQ7LAogICAgJiMzNDtzY21fZGV0YWNoX2Zkc19jb21wYXQmIzM0OywKICAgICYjMzQ7c2NtX3JlY3ZfdW5peCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHNvY2tldCBvcHRpb24gU09fUklHSFRTX05PVFJVTkMgZm9yIEFGX1VOSVggc29ja2V0cy4gVGhpcyBvcHRpb24gbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIFNDTV9SSUdIVFMgd2hlbiBhIGZpbGUgZGVzY3JpcHRvciByZWNlaXZlIGlzIGRlbmllZCBieSBhIHNlY3VyaXR5IG1vZHVsZSAoTFNNKS4gSW5zdGVhZCBvZiB0cnVuY2F0aW5nIHRoZSBmaWxlIGRlc2NyaXB0b3IgYXJyYXkgYW5kIHNldHRpbmcgTVNHX0NUUlVOQywgaXQgcGxhY2VzIHRoZSBlcnJvciBjb2RlIGluIHRoZSB1c2VyJiMzOTtzIGZpbGUgZGVzY3JpcHRvciBhcnJheS4gVGhpcyBpbnZvbHZlcyBjaGFuZ2VzIHRvIGNvcmUgQUZfVU5JWCBzb2NrZXQgb3B0aW9uIHBhcnNpbmcgKHVuaXhfc2V0c29ja29wdCksIHNvY2tldCBjb25uZWN0aW9uIHN0YXRlIHByb3BhZ2F0aW9uLCBhbmQgdGhlIFNDTSBtZXNzYWdlIHJlY2VpdmluZyBsb2dpYyAoc2NtX3JlY3Zfb25lX2ZkLCBzY21fZGV0YWNoX2Zkcywgc2NtX2RldGFjaF9mZHNfY29tcGF0LCBzY21fcmVjdl91bml4KS4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGVycm9yIGhhbmRsaW5nIGFuZCBhcnJheSBtYW5pcHVsYXRpb24gbG9naWMgZG9lcyBub3QgaW50cm9kdWNlIG1lbW9yeSBzYWZldHkgaXNzdWVzIG9yIGxlYWtzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIwOjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTVjZGI0YTkzNmUxYTdkNjhmNzM2MWZmNzc1ZDk2MTQxNjQ3N2EzNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIgMjA6MDk6MjIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oXG5pbmRleCA1ZWY1N2Y4OGRmNmIzLi45NDZhNWZhZDI2OTEyIDEwMDY0NFxuLS0tIGEvYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmhcbkBAIC0xNTUsNiAmIzQzOzE1NSw4IEBAXG4gI2RlZmluZSBTT19JTlFcdFx0XHQ4NFxuICNkZWZpbmUgU0NNX0lOUVx0XHRcdFNPX0lOUVxuIFxuJiM0MzsjZGVmaW5lIFNPX1JJR0hUU19OT1RSVU5DICAgICAgODVcbiYjNDM7XG4gI2lmICFkZWZpbmVkKF9fS0VSTkVMX18pXG4gXG4gI2lmIF9fQklUU19QRVJfTE9ORyA9PSA2NFxuZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmhcbmluZGV4IDcyZmIxYjAwNmRhOTMuLmYxNjQxZGRlMTM1ZmMgMTAwNjQ0XG4tLS0gYS9hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmhcbkBAIC0xNjYsNiAmIzQzOzE2Niw4IEBAXG4gI2RlZmluZSBTT19JTlFcdFx0XHQ4NFxuICNkZWZpbmUgU0NNX0lOUVx0XHRcdFNPX0lOUVxuIFxuJiM0MzsjZGVmaW5lIFNPX1JJR0hUU19OT1RSVU5DICAgICAgODVcbiYjNDM7XG4gI2lmICFkZWZpbmVkKF9fS0VSTkVMX18pXG4gXG4gI2lmIF9fQklUU19QRVJfTE9ORyA9PSA2NFxuZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oXG5pbmRleCBjMTZlYzM2ZGZlZTZiLi5mM2EzODE1YzdkYzI5IDEwMDY0NFxuLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaFxuQEAgLTE0Nyw2ICYjNDM7MTQ3LDggQEBcbiAjZGVmaW5lIFNPX0lOUVx0XHRcdDB4NDA1MlxuICNkZWZpbmUgU0NNX0lOUVx0XHRcdFNPX0lOUVxuIFxuJiM0MzsjZGVmaW5lIFNPX1JJR0hUU19OT1RSVU5DXHQweDQwNTNcbiYjNDM7XG4gI2lmICFkZWZpbmVkKF9fS0VSTkVMX18pXG4gXG4gI2lmIF9fQklUU19QRVJfTE9ORyA9PSA2NFxuZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaFxuaW5kZXggNzFiZWZhMTA5ZTFjZi4uNzkwN2YzYjFmMGVlMCAxMDA2NDRcbi0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zcGFyYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oXG5AQCAtMTQ4LDYgJiM0MzsxNDgsOCBAQFxuICNkZWZpbmUgU09fSU5RICAgICAgICAgICAgICAgICAgIDB4MDA1ZFxuICNkZWZpbmUgU0NNX0lOUSAgICAgICAgICAgICAgICAgIFNPX0lOUVxuIFxuJiM0MzsjZGVmaW5lIFNPX1JJR0hUU19OT1RSVU5DICAgICAgICAweDAwNWVcbiYjNDM7XG4gI2lmICFkZWZpbmVkKF9fS0VSTkVMX18pXG4gXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYWZfdW5peC5oIGIvaW5jbHVkZS9uZXQvYWZfdW5peC5oXG5pbmRleCAzNGY1M2RkZTY1Y2VhLi5iYjFiM2RlZTAyZTgyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvYWZfdW5peC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9hZl91bml4LmhcbkBAIC00OSw2ICYjNDM7NDksNyBAQCBzdHJ1Y3QgdW5peF9zb2NrIHtcbiBcdHN0cnVjdCBzY21fc3RhdFx0XHRzY21fc3RhdDtcbiBcdGludFx0XHRcdGlucV9sZW47XG4gXHRib29sXHRcdFx0cmVjdm1zZ19pbnE7XG4mIzQzO1x0Ym9vbFx0XHRcdHNjbV9yaWdodHNfbm90cnVuYztcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfQUZfVU5JWF9PT0IpXG4gXHRzdHJ1Y3Qgc2tfYnVmZlx0XHQqb29iX3NrYjtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY20uaCBiL2luY2x1ZGUvbmV0L3NjbS5oXG5pbmRleCBjNTI1MTk2NjkzNDlmLi44NmFlNmJjMTA5ZWM2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvc2NtLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3NjbS5oXG5AQCAtNTAsOCAmIzQzOzUwLDggQEAgc3RydWN0IHNjbV9jb29raWUge1xuICNlbmRpZlxuIH07XG4gXG4tdm9pZCBzY21fZGV0YWNoX2ZkcyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20pO1xuLXZvaWQgc2NtX2RldGFjaF9mZHNfY29tcGF0KHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNjbV9jb29raWUgKnNjbSk7XG4mIzQzO3ZvaWQgc2NtX2RldGFjaF9mZHMoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2NtLCBib29sIG5vdHJ1bmMpO1xuJiM0Mzt2b2lkIHNjbV9kZXRhY2hfZmRzX2NvbXBhdChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20sIGJvb2wgbm90cnVuYyk7XG4gaW50IF9fc2NtX3NlbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2NtKTtcbiB2b2lkIF9fc2NtX2Rlc3Ryb3koc3RydWN0IHNjbV9jb29raWUgKnNjbSk7XG4gc3RydWN0IHNjbV9mcF9saXN0ICpzY21fZnBfZHVwKHN0cnVjdCBzY21fZnBfbGlzdCAqZnBsKTtcbkBAIC0xMDcsMTMgJiM0MzsxMDcsOCBAQCB2b2lkIHNjbV9yZWN2KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbiB2b2lkIHNjbV9yZWN2X3VuaXgoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuIFx0XHQgICBzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2NtLCBpbnQgZmxhZ3MpO1xuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNjbV9yZWN2X29uZV9mZChzdHJ1Y3QgZmlsZSAqZiwgaW50IF9fdXNlciAqdWZkLFxuLVx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4te1xuLVx0aWYgKCF1ZmQpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuLVx0cmV0dXJuIHJlY2VpdmVfZmQoZiwgdWZkLCBmbGFncyk7XG4tfVxuJiM0MztpbnQgc2NtX3JlY3Zfb25lX2ZkKHN0cnVjdCBmaWxlICpmLCBpbnQgX191c2VyICp1ZmQsIHVuc2lnbmVkIGludCBmbGFncyxcbiYjNDM7XHRcdCAgICBib29sIG5vdHJ1bmMpO1xuIFxuICNlbmRpZiAvKiBfX0xJTlVYX05FVF9TQ01fSCAqL1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaCBiL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaFxuaW5kZXggNTNiNWE4YzAwMmIxZS4uODRlYTdiOTI5MzZlMiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NvY2tldC5oXG5AQCAtMTUwLDYgJiM0MzsxNTAsOCBAQFxuICNkZWZpbmUgU09fSU5RXHRcdFx0ODRcbiAjZGVmaW5lIFNDTV9JTlFcdFx0XHRTT19JTlFcbiBcbiYjNDM7I2RlZmluZSBTT19SSUdIVFNfTk9UUlVOQ1x0ODVcbiYjNDM7XG4gI2lmICFkZWZpbmVkKF9fS0VSTkVMX18pXG4gXG4gI2lmIF9fQklUU19QRVJfTE9ORyA9PSA2NCB8fCAoZGVmaW5lZChfX3g4Nl82NF9fKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChfX0lMUDMyX18pKVxuZGlmZiAtLWdpdCBhL25ldC9jb21wYXQuYyBiL25ldC9jb21wYXQuY1xuaW5kZXggZDY4Y2Y5YzNhYWQ1Zi4uNmJkZjRhMmM5MDc3ZCAxMDA2NDRcbi0tLSBhL25ldC9jb21wYXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvbXBhdC5jXG5AQCAtMjg2LDcgJiM0MzsyODYsNyBAQCBzdGF0aWMgaW50IHNjbV9tYXhfZmRzX2NvbXBhdChzdHJ1Y3QgbXNnaGRyICptc2cpXG4gXHRyZXR1cm4gKG1zZy1cdTAwM2Vtc2dfY29udHJvbGxlbiAtIHNpemVvZihzdHJ1Y3QgY29tcGF0X2Ntc2doZHIpKSAvIHNpemVvZihpbnQpO1xuIH1cbiBcbi12b2lkIHNjbV9kZXRhY2hfZmRzX2NvbXBhdChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20pXG4mIzQzO3ZvaWQgc2NtX2RldGFjaF9mZHNfY29tcGF0KHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNjbV9jb29raWUgKnNjbSwgYm9vbCBub3RydW5jKVxuIHtcbiBcdHN0cnVjdCBjb21wYXRfY21zZ2hkciBfX3VzZXIgKmNtID1cbiBcdFx0KHN0cnVjdCBjb21wYXRfY21zZ2hkciBfX3VzZXIgKiltc2ctXHUwMDNlbXNnX2NvbnRyb2xfdXNlcjtcbkBAIC0yOTYsNyAmIzQzOzI5Niw3IEBAIHZvaWQgc2NtX2RldGFjaF9mZHNfY29tcGF0KHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNjbV9jb29raWUgKnNjbSlcbiBcdGludCBlcnIgPSAwLCBpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZmRtYXg7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGVyciA9IHNjbV9yZWN2X29uZV9mZChzY20tXHUwMDNlZnAtXHUwMDNlZnBbaV0sIGNtc2dfZGF0YSAmIzQzOyBpLCBvX2ZsYWdzKTtcbiYjNDM7XHRcdGVyciA9IHNjbV9yZWN2X29uZV9mZChzY20tXHUwMDNlZnAtXHUwMDNlZnBbaV0sIGNtc2dfZGF0YSAmIzQzOyBpLCBvX2ZsYWdzLCBub3RydW5jKTtcbiBcdFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0XHRicmVhaztcbiBcdH1cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9zY20uYyBiL25ldC9jb3JlL3NjbS5jXG5pbmRleCBlZWMxM2Y1MGVjYWY2Li5mMGQ0NGVjZGIxMWZjIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc2NtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NjbS5jXG5AQCAtMzUxLDcgJiM0MzszNTEsMzEgQEAgc3RhdGljIGludCBzY21fbWF4X2ZkcyhzdHJ1Y3QgbXNnaGRyICptc2cpXG4gXHRyZXR1cm4gKG1zZy1cdTAwM2Vtc2dfY29udHJvbGxlbiAtIHNpemVvZihzdHJ1Y3QgY21zZ2hkcikpIC8gc2l6ZW9mKGludCk7XG4gfVxuIFxuLXZvaWQgc2NtX2RldGFjaF9mZHMoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2NtKVxuJiM0MztpbnQgc2NtX3JlY3Zfb25lX2ZkKHN0cnVjdCBmaWxlICpmLCBpbnQgX191c2VyICp1ZmQsIHVuc2lnbmVkIGludCBmbGFncyxcbiYjNDM7XHRcdCAgICBib29sIG5vdHJ1bmMpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyb3I7XG4mIzQzO1xuJiM0MztcdGlmICghdWZkKVxuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1xuJiM0MztcdGVycm9yID0gc2VjdXJpdHlfZmlsZV9yZWNlaXZlKGYpO1xuJiM0MztcdGlmIChlcnJvcilcbiYjNDM7XHRcdHJldHVybiBub3RydW5jID8gcHV0X3VzZXIoZXJyb3IsIHVmZCkgOiBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0RkRfUFJFUEFSRShmZGYsIGZsYWdzLCBnZXRfZmlsZShmKSk7XG4mIzQzO1x0aWYgKGZkZi5lcnIpXG4mIzQzO1x0XHRyZXR1cm4gZmRmLmVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyb3IgPSBwdXRfdXNlcihmZF9wcmVwYXJlX2ZkKGZkZiksIHVmZCk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcbiYjNDM7XHRfX3JlY2VpdmVfc29jayhmZF9wcmVwYXJlX2ZpbGUoZmRmKSk7XG4mIzQzO1x0cmV0dXJuIGZkX3B1Ymxpc2goZmRmKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBzY21fZGV0YWNoX2ZkcyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20sIGJvb2wgbm90cnVuYylcbiB7XG4gXHRzdHJ1Y3QgY21zZ2hkciBfX3VzZXIgKmNtID1cbiBcdFx0KF9fZm9yY2Ugc3RydWN0IGNtc2doZHIgX191c2VyICopbXNnLVx1MDAzZW1zZ19jb250cm9sX3VzZXI7XG5AQCAtMzY1LDEyICYjNDM7Mzg5LDEyIEBAIHZvaWQgc2NtX2RldGFjaF9mZHMoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2NtKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRpZiAobXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX0NNU0dfQ09NUEFUKSB7XG4tXHRcdHNjbV9kZXRhY2hfZmRzX2NvbXBhdChtc2csIHNjbSk7XG4mIzQzO1x0XHRzY21fZGV0YWNoX2Zkc19jb21wYXQobXNnLCBzY20sIG5vdHJ1bmMpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBmZG1heDsgaSYjNDM7JiM0MzspIHtcbi1cdFx0ZXJyID0gc2NtX3JlY3Zfb25lX2ZkKHNjbS1cdTAwM2VmcC1cdTAwM2VmcFtpXSwgY21zZ19kYXRhICYjNDM7IGksIG9fZmxhZ3MpO1xuJiM0MztcdFx0ZXJyID0gc2NtX3JlY3Zfb25lX2ZkKHNjbS1cdTAwM2VmcC1cdTAwM2VmcFtpXSwgY21zZ19kYXRhICYjNDM7IGksIG9fZmxhZ3MsIG5vdHJ1bmMpO1xuIFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRcdGJyZWFrO1xuIFx0fVxuQEAgLTUyMyw5ICYjNDM7NTQ3LDYgQEAgc3RhdGljIGJvb2wgX19zY21fcmVjdl9jb21tb24oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4gXG4gXHRzY21fcGFzc2VjKHNrLCBtc2csIHNjbSk7XG4gXG4tXHRpZiAoc2NtLVx1MDAzZWZwKVxuLVx0XHRzY21fZGV0YWNoX2Zkcyhtc2csIHNjbSk7XG4tXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG5AQCAtNTQ1LDYgJiM0Mzs1NjYsMTMgQEAgdm9pZCBzY21fcmVjdl91bml4KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbiBcdGlmICghX19zY21fcmVjdl9jb21tb24oc29jay1cdTAwM2VzaywgbXNnLCBzY20sIGZsYWdzKSlcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdGlmIChzY20tXHUwMDNlZnApIHtcbiYjNDM7XHRcdHN0cnVjdCB1bml4X3NvY2sgKnU7XG4mIzQzO1xuJiM0MztcdFx0dSA9IHVuaXhfc2soc29jay1cdTAwM2Vzayk7XG4mIzQzO1x0XHRzY21fZGV0YWNoX2Zkcyhtc2csIHNjbSwgUkVBRF9PTkNFKHUtXHUwMDNlc2NtX3JpZ2h0c19ub3RydW5jKSk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX3NjbV9waWRmZClcbiBcdFx0c2NtX3BpZGZkX3JlY3YobXNnLCBzY20pO1xuIFxuZGlmZiAtLWdpdCBhL25ldC91bml4L2FmX3VuaXguYyBiL25ldC91bml4L2FmX3VuaXguY1xuaW5kZXggMTBlZDk0MjFlNDNhYS4uMDNjZTIzYTRlYmVlMSAxMDA2NDRcbi0tLSBhL25ldC91bml4L2FmX3VuaXguY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3VuaXgvYWZfdW5peC5jXG5AQCAtOTIyLDYgJiM0Mzs5MjIsNyBAQCBzdGF0aWMgYm9vbCB1bml4X2N1c3RvbV9zb2Nrb3B0KGludCBvcHRuYW1lKVxuIHtcbiBcdHN3aXRjaCAob3B0bmFtZSkge1xuIFx0Y2FzZSBTT19JTlE6XG4mIzQzO1x0Y2FzZSBTT19SSUdIVFNfTk9UUlVOQzpcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gZmFsc2U7XG5AQCAtOTUwLDEzICYjNDM7OTUxLDIxIEBAIHN0YXRpYyBpbnQgdW5peF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gXHRzd2l0Y2ggKG9wdG5hbWUpIHtcbiBcdGNhc2UgU09fSU5ROlxuIFx0XHRpZiAoc2stXHUwMDNlc2tfdHlwZSAhPSBTT0NLX1NUUkVBTSlcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9QUk9UT09QVDtcbiBcbiBcdFx0aWYgKHZhbCBcdTAwM2UgMSB8fCB2YWwgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRcdFdSSVRFX09OQ0UodS1cdTAwM2VyZWN2bXNnX2lucSwgdmFsKTtcbiBcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGNhc2UgU09fUklHSFRTX05PVFJVTkM6XG4mIzQzO1x0XHRpZiAodmFsIFx1MDAzZSAxIHx8IHZhbCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdFx0V1JJVEVfT05DRSh1LVx1MDAzZXNjbV9yaWdodHNfbm90cnVuYywgdmFsKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU5PUFJPVE9PUFQ7XG4gXHR9XG5AQCAtMTAwNiw2ICYjNDM7MTAxNSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHVuaXhfZGdyYW1fb3BzID0ge1xuICNlbmRpZlxuIFx0Lmxpc3RlbiA9XHRzb2NrX25vX2xpc3RlbixcbiBcdC5zaHV0ZG93biA9XHR1bml4X3NodXRkb3duLFxuJiM0MztcdC5zZXRzb2Nrb3B0ID1cdHVuaXhfc2V0c29ja29wdCxcbiBcdC5zZW5kbXNnID1cdHVuaXhfZGdyYW1fc2VuZG1zZyxcbiBcdC5yZWFkX3NrYiA9XHR1bml4X3JlYWRfc2tiLFxuIFx0LnJlY3Ztc2cgPVx0dW5peF9kZ3JhbV9yZWN2bXNnLFxuQEAgLTEwMzAsNiAmIzQzOzEwNDAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB1bml4X3NlcXBhY2tldF9vcHMgPSB7XG4gI2VuZGlmXG4gXHQubGlzdGVuID1cdHVuaXhfbGlzdGVuLFxuIFx0LnNodXRkb3duID1cdHVuaXhfc2h1dGRvd24sXG4mIzQzO1x0LnNldHNvY2tvcHQgPVx0dW5peF9zZXRzb2Nrb3B0LFxuIFx0LnNlbmRtc2cgPVx0dW5peF9zZXFwYWNrZXRfc2VuZG1zZyxcbiBcdC5yZWN2bXNnID1cdHVuaXhfc2VxcGFja2V0X3JlY3Ztc2csXG4gXHQubW1hcCA9XHRcdHNvY2tfbm9fbW1hcCxcbkBAIC0xMTQzLDkgJiM0MzsxMTU0LDEwIEBAIHN0YXRpYyBpbnQgdW5peF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG4gXHRpZiAocHJvdG9jb2wgXHUwMDI2XHUwMDI2IHByb3RvY29sICE9IFBGX1VOSVgpXG4gXHRcdHJldHVybiAtRVBST1RPTk9TVVBQT1JUO1xuIFxuJiM0MztcdHNldF9iaXQoU09DS19DVVNUT01fU09DS09QVCwgXHUwMDI2c29jay1cdTAwM2VmbGFncyk7XG4mIzQzO1xuIFx0c3dpdGNoIChzb2NrLVx1MDAzZXR5cGUpIHtcbiBcdGNhc2UgU09DS19TVFJFQU06XG4tXHRcdHNldF9iaXQoU09DS19DVVNUT01fU09DS09QVCwgXHUwMDI2c29jay1cdTAwM2VmbGFncyk7XG4gXHRcdHNvY2stXHUwMDNlb3BzID0gXHUwMDI2dW5peF9zdHJlYW1fb3BzO1xuIFx0XHRicmVhaztcbiBcdFx0LypcbkBAIC0xNzQzLDkgJiM0MzsxNzU1LDEwIEBAIHN0YXRpYyBpbnQgdW5peF9zdHJlYW1fY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkXG4gXHRpbml0X3BlZXJjcmVkKG5ld3NrLCBcdTAwMjZwZWVyY3JlZCk7XG4gXG4gXHRuZXd1ID0gdW5peF9zayhuZXdzayk7XG4mIzQzO1x0b3RoZXJ1ID0gdW5peF9zayhvdGhlcik7XG4gXHRuZXd1LVx1MDAzZWxpc3RlbmVyID0gb3RoZXI7XG4mIzQzO1x0bmV3dS1cdTAwM2VzY21fcmlnaHRzX25vdHJ1bmMgPSBvdGhlcnUtXHUwMDNlc2NtX3JpZ2h0c19ub3RydW5jO1xuIFx0UkNVX0lOSVRfUE9JTlRFUihuZXdzay1cdTAwM2Vza193cSwgXHUwMDI2bmV3dS1cdTAwM2VwZWVyX3dxKTtcbi1cdG90aGVydSA9IHVuaXhfc2sob3RoZXIpO1xuIFxuIFx0LyogY29weSBhZGRyZXNzIGluZm9ybWF0aW9uIGZyb20gbGlzdGVuaW5nIHRvIG5ldyBzb2NrXG4gXHQgKlxuQEAgLTE4NjUsOCAmIzQzOzE4NzgsNyBAQCBzdGF0aWMgaW50IHVuaXhfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXG4gXHRza2JfZnJlZV9kYXRhZ3JhbShzaywgc2tiKTtcbiBcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcdTAwMjZ1bml4X3NrKHNrKS1cdTAwM2VwZWVyX3dhaXQpO1xuIFxuLVx0aWYgKHRzay1cdTAwM2Vza190eXBlID09IFNPQ0tfU1RSRUFNKVxuLVx0XHRzZXRfYml0KFNPQ0tfQ1VTVE9NX1NPQ0tPUFQsIFx1MDAyNm5ld3NvY2stXHUwMDNlZmxhZ3MpO1xuJiM0MztcdHNldF9iaXQoU09DS19DVVNUT01fU09DS09QVCwgXHUwMDI2bmV3c29jay1cdTAwM2VmbGFncyk7XG4gXG4gXHQvKiBhdHRhY2ggYWNjZXB0ZWQgc29jayB0byBzb2NrZXQgKi9cbiBcdHVuaXhfc3RhdGVfbG9jayh0c2spO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4Ly5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC8uZ2l0aWdub3JlXG5pbmRleCA5NzMxNzY2NDQxMDM2Li45NTRmMDk1OGRkMDM0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvLmdpdGlnbm9yZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvLmdpdGlnbm9yZVxuQEAgLTMsNiAmIzQzOzMsOCBAQCBtc2dfb29iXG4gc2NtX2lucVxuIHNjbV9waWRmZFxuIHNjbV9yaWdodHNcbiYjNDM7c2NtX3JpZ2h0c19kZW5pYWxfbHNtXG4mIzQzO3NjbV9yaWdodHNfZGVuaWFsX2xzbS5icGYub1xuIHNvX3BlZWtfb2ZmXG4gdW5peF9jb25uZWN0XG4gdW5peF9jb25ucmVzZXRcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L01ha2VmaWxlXG5pbmRleCA1N2QxNTk4MDNhM2FiLi5hNjZmMTBmYjBjMjMxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L01ha2VmaWxlXG5AQCAtMTEsMTAgJiM0MzsxMSwxOCBAQCBURVNUX0dFTl9QUk9HUyA6PSBcXFxuIFx0c2NtX2lucSBcXFxuIFx0c2NtX3BpZGZkIFxcXG4gXHRzY21fcmlnaHRzIFxcXG4mIzQzO1x0c2NtX3JpZ2h0c19kZW5pYWxfbHNtIFxcXG4gXHRzb19wZWVrX29mZiBcXFxuIFx0dW5peF9jb25uZWN0IFxcXG4gXHR1bml4X2Nvbm5yZXNldCBcXFxuIFx0dW5peF9saXN0ZW4gXFxcbiAjIGVuZCBvZiBURVNUX0dFTl9QUk9HU1xuIFxuJiM0MztURVNUX0dFTl9GSUxFUyA6PSBzY21fcmlnaHRzX2RlbmlhbF9sc20uYnBmLm9cbiYjNDM7XG4gaW5jbHVkZSAuLi8uLi9saWIubWtcbiYjNDM7aW5jbHVkZSAuLi9icGYubWtcbiYjNDM7XG4mIzQzOyQoT1VUUFVUKS9zY21fcmlnaHRzX2RlbmlhbF9sc206ICQoQlBGT0JKKVxuJiM0MzskKE9VVFBVVCkvc2NtX3JpZ2h0c19kZW5pYWxfbHNtOiBDRkxBR1MgJiM0Mzs9IC1JJChTQ1JBVENIX0RJUikvaW5jbHVkZVxuJiM0MzskKE9VVFBVVCkvc2NtX3JpZ2h0c19kZW5pYWxfbHNtOiBMRExJQlMgJiM0Mzs9IC1sZWxmIC1selxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L2NvbmZpZ1xuaW5kZXggNDFkYmIwM2M3NDdlYi4uNDY4ZjdhMGJiNjRlNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvY29uZmlnXG5AQCAtMiwzICYjNDM7MiwxMCBAQCBDT05GSUdfQUZfVU5JWF9PT0I9eVxuIENPTkZJR19VTklYPXlcbiBDT05GSUdfVU5JWF9ESUFHPW1cbiBDT05GSUdfVVNFUl9OUz15XG4mIzQzO0NPTkZJR19CUEY9eVxuJiM0MztDT05GSUdfQlBGX1NZU0NBTEw9eVxuJiM0MztDT05GSUdfQlBGX0VWRU5UUz15XG4mIzQzO0NPTkZJR19CUEZfSklUPXlcbiYjNDM7Q09ORklHX1NFQ1VSSVRZPXlcbiYjNDM7Q09ORklHX0JQRl9MU009eVxuJiM0MztDT05GSUdfREVCVUdfSU5GT19CVEY9eVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHNfZGVuaWFsX2xzbS5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHNfZGVuaWFsX2xzbS5icGYuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjRmMjQxNDQ2NWJmZDNcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHNfZGVuaWFsX2xzbS5icGYuY1xuQEAgLTAsMCAmIzQzOzEsMzYgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZXJybm8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuJiM0MztcbiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjNDM7XG4mIzQzO3N0cnVjdCBpbm9kZSB7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpX2lubztcbiYjNDM7fSBfX2F0dHJpYnV0ZV9fKChwcmVzZXJ2ZV9hY2Nlc3NfaW5kZXgpKTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBmaWxlIHtcbiYjNDM7XHRzdHJ1Y3QgaW5vZGUgKmZfaW5vZGU7XG4mIzQzO30gX19hdHRyaWJ1dGVfXygocHJlc2VydmVfYWNjZXNzX2luZGV4KSk7XG4mIzQzO1xuJiM0MztzdHJ1Y3Qge1xuJiM0MztcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfSEFTSCk7XG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCAxNik7XG4mIzQzO1x0X190eXBlKGtleSwgX191NjQpO1x0LyogaW5vZGUgbnVtYmVyICovXG4mIzQzO1x0X190eXBlKHZhbHVlLCBfX3UzMik7XHQvKiB0Z2lkIG9mIHRoZSByZWNlaXZlciBiZWluZyB0ZXN0ZWQgKi9cbiYjNDM7fSBkZW5pZWRfaW5vZGVzIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7bHNtL2ZpbGVfcmVjZWl2ZVwmIzM0OylcbiYjNDM7aW50IEJQRl9QUk9HKHNjbV9yaWdodHNfZGVueSwgc3RydWN0IGZpbGUgKmZpbGUpXG4mIzQzO3tcbiYjNDM7XHRfX3UzMiB0Z2lkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgXHUwMDNlXHUwMDNlIDMyO1xuJiM0MztcdF9fdTY0IGlubyA9IGZpbGUtXHUwMDNlZl9pbm9kZS1cdTAwM2VpX2lubztcbiYjNDM7XHRfX3UzMiAqb3duZXI7XG4mIzQzO1xuJiM0MztcdG93bmVyID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZkZW5pZWRfaW5vZGVzLCBcdTAwMjZpbm8pO1xuJiM0MztcdGlmIChvd25lciBcdTAwMjZcdTAwMjYgKm93bmVyID09IHRnaWQpXG4mIzQzO1x0XHRyZXR1cm4gLUVQRVJNO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHNfZGVuaWFsX2xzbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvc2NtX3JpZ2h0c19kZW5pYWxfbHNtLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi45NDFiN2RlY2Y3OTgwXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzX2RlbmlhbF9sc20uY1xuQEAgLTAsMCAmIzQzOzEsMjg1IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNkZWZpbmUgX0dOVV9TT1VSQ0VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3NvY2tldC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9zdGF0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3R5cGVzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvbGliYnBmLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdF9oYXJuZXNzLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNpZm5kZWYgU09fUklHSFRTX05PVFJVTkNcbiYjNDM7I2RlZmluZSBTT19SSUdIVFNfTk9UUlVOQyA4NVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTlJfRklMRVMgMlxuJiM0MztcbiYjNDM7LyogUGVyLWZpbGUgY29udGVudCwgc28gYSByZWNlaXZlZCBmZCBjYW4gYmUgbWF0Y2hlZCB0byB0aGUgZmlsZSBzZW50ICovXG4mIzQzOyNkZWZpbmUgU0VDUkVUKG4pIFwmIzM0O3NlY3JldCAlZFwmIzM0OywgKG4pXG4mIzQzO1xuJiM0MzsvKiBJbmRpY2VzIGludG8gdGhlIHNvY2tldHBhaXIgKi9cbiYjNDM7I2RlZmluZSBTS19TRU5ERVIgMFxuJiM0MzsjZGVmaW5lIFNLX1JFQ0VJVkVSIDFcbiYjNDM7XG4mIzQzO0ZJWFRVUkUoc2NtX3JpZ2h0c19kZW5pYWxfYnBmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9vYmplY3QgKm9iajtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XG4mIzQzO1x0aW50IG1hcF9mZDtcbiYjNDM7XHRpbnQgc2tbMl07XG4mIzQzO1x0aW50IGZpbGVzW05SX0ZJTEVTXTtcbiYjNDM7XHRfX3U2NCBpbm9zW05SX0ZJTEVTXTtcbiYjNDM7XHRjaGFyIHBhdGhzW05SX0ZJTEVTXVs2NF07XG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlQoc2NtX3JpZ2h0c19kZW5pYWxfYnBmKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHNvY2tfdHlwZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoc2NtX3JpZ2h0c19kZW5pYWxfYnBmLCBzdHJlYW0pXG4mIzQzO3tcbiYjNDM7XHQuc29ja190eXBlID0gU09DS19TVFJFQU0sXG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKHNjbV9yaWdodHNfZGVuaWFsX2JwZiwgZGdyYW0pXG4mIzQzO3tcbiYjNDM7XHQuc29ja190eXBlID0gU09DS19ER1JBTSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoc2NtX3JpZ2h0c19kZW5pYWxfYnBmLCBzZXFwYWNrZXQpXG4mIzQzO3tcbiYjNDM7XHQuc29ja190eXBlID0gU09DS19TRVFQQUNLRVQsXG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1NFVFVQKHNjbV9yaWdodHNfZGVuaWFsX2JwZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZztcbiYjNDM7XHRjaGFyIGxzbXNbMjU2XSA9IHt9O1xuJiM0MztcdGludCBpLCBmZDtcbiYjNDM7XG4mIzQzO1x0aWYgKGdldGV1aWQoKSAhPSAwKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O3JlcXVpcmVzIHJvb3RcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW4oXCYjMzQ7L3N5cy9rZXJuZWwvc2VjdXJpdHkvbHNtXCYjMzQ7LCBPX1JET05MWSk7XG4mIzQzO1x0QVNTRVJUX0dFKGZkLCAwKTtcbiYjNDM7XHRBU1NFUlRfTFQoMCwgcmVhZChmZCwgbHNtcywgc2l6ZW9mKGxzbXMpIC0gMSkpO1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzdHJzdHIobHNtcywgXCYjMzQ7YnBmXCYjMzQ7KSlcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtCUEYgTFNNIG5vdCBhY3RpdmUgKGJvb3Qgd2l0aCBsc209Li4uLGJwZilcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRzZWxmLVx1MDAzZW9iaiA9IGJwZl9vYmplY3RfX29wZW5fZmlsZShcJiMzNDtzY21fcmlnaHRzX2RlbmlhbF9sc20uYnBmLm9cJiMzNDssIE5VTEwpO1xuJiM0MztcdEFTU0VSVF9ORShOVUxMLCBzZWxmLVx1MDAzZW9iaik7XG4mIzQzO1x0QVNTRVJUX0VRKDAsIGJwZl9vYmplY3RfX2xvYWQoc2VsZi1cdTAwM2VvYmopKTtcbiYjNDM7XG4mIzQzO1x0cHJvZyA9IGJwZl9vYmplY3RfX2ZpbmRfcHJvZ3JhbV9ieV9uYW1lKHNlbGYtXHUwMDNlb2JqLCBcJiMzNDtzY21fcmlnaHRzX2RlbnlcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9ORShOVUxMLCBwcm9nKTtcbiYjNDM7XG4mIzQzO1x0c2VsZi1cdTAwM2VsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9sc20ocHJvZyk7XG4mIzQzO1x0QVNTRVJUX05FKE5VTEwsIHNlbGYtXHUwMDNlbGluayk7XG4mIzQzO1xuJiM0MztcdHNlbGYtXHUwMDNlbWFwX2ZkID0gYnBmX29iamVjdF9fZmluZF9tYXBfZmRfYnlfbmFtZShzZWxmLVx1MDAzZW9iaixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIFwmIzM0O2RlbmllZF9pbm9kZXNcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9HRShzZWxmLVx1MDAzZW1hcF9mZCwgMCk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBzb2NrZXRwYWlyKEFGX1VOSVgsIHZhcmlhbnQtXHUwMDNlc29ja190eXBlLCAwLCBzZWxmLVx1MDAzZXNrKSk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX0ZJTEVTOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHN0YXQgc3Q7XG4mIzQzO1xuJiM0MztcdFx0c25wcmludGYoc2VsZi1cdTAwM2VwYXRoc1tpXSwgc2l6ZW9mKHNlbGYtXHUwMDNlcGF0aHNbaV0pLFxuJiM0MztcdFx0XHQgXCYjMzQ7L3RtcC9zY21fcmlnaHRzX2RlbmlhbF9icGYuJWQuWFhYWFhYXCYjMzQ7LCBpKTtcbiYjNDM7XHRcdHNlbGYtXHUwMDNlZmlsZXNbaV0gPSBta3N0ZW1wKHNlbGYtXHUwMDNlcGF0aHNbaV0pO1xuJiM0MztcdFx0QVNTRVJUX0dFKHNlbGYtXHUwMDNlZmlsZXNbaV0sIDApO1xuJiM0MztcbiYjNDM7XHRcdEFTU0VSVF9MVCgwLCBkcHJpbnRmKHNlbGYtXHUwMDNlZmlsZXNbaV0sIFNFQ1JFVChpKSkpO1xuJiM0MztcbiYjNDM7XHRcdEFTU0VSVF9FUSgwLCBmc3RhdChzZWxmLVx1MDAzZWZpbGVzW2ldLCBcdTAwMjZzdCkpO1xuJiM0MztcdFx0c2VsZi1cdTAwM2Vpbm9zW2ldID0gc3Quc3RfaW5vO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7RklYVFVSRV9URUFSRE9XTihzY21fcmlnaHRzX2RlbmlhbF9icGYpXG4mIzQzO3tcbiYjNDM7XHRicGZfbGlua19fZGVzdHJveShzZWxmLVx1MDAzZWxpbmspO1xuJiM0MztcdGJwZl9vYmplY3RfX2Nsb3NlKHNlbGYtXHUwMDNlb2JqKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIE5SX0ZJTEVTOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHNlbGYtXHUwMDNlZmlsZXNbaV0gXHUwMDNlPSAwKSB7XG4mIzQzO1x0XHRcdGNsb3NlKHNlbGYtXHUwMDNlZmlsZXNbaV0pO1xuJiM0MztcdFx0XHR1bmxpbmsoc2VsZi1cdTAwM2VwYXRoc1tpXSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRjbG9zZShzZWxmLVx1MDAzZXNrW1NLX1NFTkRFUl0pO1xuJiM0MztcdGNsb3NlKHNlbGYtXHUwMDNlc2tbU0tfUkVDRUlWRVJdKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBkZW55X2lub2RlKGludCBtYXBfZmQsIF9fdTY0IGlubylcbiYjNDM7e1xuJiM0MztcdF9fdTMyIHRnaWQgPSBnZXRwaWQoKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGJwZl9tYXBfdXBkYXRlX2VsZW0obWFwX2ZkLCBcdTAwMjZpbm8sIFx1MDAyNnRnaWQsIEJQRl9BTlkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHNldF9ub3RydW5jKGludCBzaylcbiYjNDM7e1xuJiM0MztcdGludCBvbmUgPSAxO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2V0c29ja29wdChzaywgU09MX1NPQ0tFVCwgU09fUklHSFRTX05PVFJVTkMsXG4mIzQzO1x0XHRcdCAgXHUwMDI2b25lLCBzaXplb2Yob25lKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgc2VuZF9mZHMoaW50IHNrLCBpbnQgKmZkcywgaW50IG4pXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGN0cmxbQ01TR19TUEFDRShOUl9GSUxFUyAqIHNpemVvZihpbnQpKV0gPSB7fTtcbiYjNDM7XHRjaGFyIGRhdGEgPSAmIzM5O3gmIzM5OztcbiYjNDM7XHRzdHJ1Y3QgaW92ZWMgaW92ID0ge1xuJiM0MztcdFx0Lmlvdl9iYXNlID0gXHUwMDI2ZGF0YSxcbiYjNDM7XHRcdC5pb3ZfbGVuID0gc2l6ZW9mKGRhdGEpLFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IG1zZ2hkciBtc2cgPSB7XG4mIzQzO1x0XHQubXNnX2lvdiA9IFx1MDAyNmlvdixcbiYjNDM7XHRcdC5tc2dfaW92bGVuID0gMSxcbiYjNDM7XHRcdC5tc2dfY29udHJvbCA9IGN0cmwsXG4mIzQzO1x0XHQubXNnX2NvbnRyb2xsZW4gPSBDTVNHX1NQQUNFKG4gKiBzaXplb2YoaW50KSksXG4mIzQzO1x0fTtcbiYjNDM7XHRzdHJ1Y3QgY21zZ2hkciAqY21zZyA9IENNU0dfRklSU1RIRFIoXHUwMDI2bXNnKTtcbiYjNDM7XG4mIzQzO1x0Y21zZy1cdTAwM2VjbXNnX2xldmVsID0gU09MX1NPQ0tFVDtcbiYjNDM7XHRjbXNnLVx1MDAzZWNtc2dfdHlwZSA9IFNDTV9SSUdIVFM7XG4mIzQzO1x0Y21zZy1cdTAwM2VjbXNnX2xlbiA9IENNU0dfTEVOKG4gKiBzaXplb2YoaW50KSk7XG4mIzQzO1x0bWVtY3B5KENNU0dfREFUQShjbXNnKSwgZmRzLCBuICogc2l6ZW9mKGludCkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2VuZG1zZyhzaywgXHUwMDI2bXNnLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByZWN2X2ZkX3Nsb3RzKGludCBzaywgaW50ICpzbG90cywgaW50ICptc2dfZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRpbnQgbnJfc2xvdHM7XG4mIzQzO1x0Y2hhciBjdHJsW0NNU0dfU1BBQ0UoTlJfRklMRVMgKiBzaXplb2YoaW50KSldO1xuJiM0MztcdGNoYXIgZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgaW92ZWMgaW92ID0ge1xuJiM0MztcdFx0Lmlvdl9iYXNlID0gXHUwMDI2ZGF0YSxcbiYjNDM7XHRcdC5pb3ZfbGVuID0gc2l6ZW9mKGRhdGEpLFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IG1zZ2hkciBtc2cgPSB7XG4mIzQzO1x0XHQubXNnX2lvdiA9IFx1MDAyNmlvdixcbiYjNDM7XHRcdC5tc2dfaW92bGVuID0gMSxcbiYjNDM7XHRcdC5tc2dfY29udHJvbCA9IGN0cmwsXG4mIzQzO1x0XHQubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY3RybCksXG4mIzQzO1x0fTtcbiYjNDM7XHRzdHJ1Y3QgY21zZ2hkciAqY21zZztcbiYjNDM7XG4mIzQzO1x0aWYgKHJlY3Ztc2coc2ssIFx1MDAyNm1zZywgMCkgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdCptc2dfZmxhZ3MgPSBtc2cubXNnX2ZsYWdzO1xuJiM0MztcbiYjNDM7XHRjbXNnID0gQ01TR19GSVJTVEhEUihcdTAwMjZtc2cpO1xuJiM0MztcdGlmICghY21zZylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRucl9zbG90cyA9IChjbXNnLVx1MDAzZWNtc2dfbGVuIC0gQ01TR19MRU4oMCkpIC8gc2l6ZW9mKGludCk7XG4mIzQzO1x0bWVtY3B5KHNsb3RzLCBDTVNHX0RBVEEoY21zZyksIG5yX3Nsb3RzICogc2l6ZW9mKGludCkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbnJfc2xvdHM7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFByb3ZlIGEgcmVjZWl2ZWQgZmQgd29ya3MgYnkgcmVhZGluZyBiYWNrIHRoZSBmaWxlJiMzOTtzIGNvbnRlbnQuICovXG4mIzQzO3N0YXRpYyBpbnQgY2hlY2tfc2VjcmV0KGludCBmZCwgaW50IGlkeClcbiYjNDM7e1xuJiM0MztcdGNoYXIgd2FudFszMl0sIGdvdFszMl0gPSB7fTtcbiYjNDM7XG4mIzQzO1x0c25wcmludGYod2FudCwgc2l6ZW9mKHdhbnQpLCBTRUNSRVQoaWR4KSk7XG4mIzQzO1x0aWYgKHByZWFkKGZkLCBnb3QsIHNpemVvZihnb3QpIC0gMSwgMCkgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdHJldHVybiBzdHJjbXAod2FudCwgZ290KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKHNjbV9yaWdodHNfZGVuaWFsX2JwZiwgYWxsX2FsbG93ZWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgc2xvdHNbTlJfRklMRVNdLCBucl9zbG90cywgZmxhZ3MsIGk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBzZXRfbm90cnVuYyhzZWxmLVx1MDAzZXNrW1NLX1JFQ0VJVkVSXSkpO1xuJiM0MztcdEFTU0VSVF9ORSgtMSwgc2VuZF9mZHMoc2VsZi1cdTAwM2Vza1tTS19TRU5ERVJdLCBzZWxmLVx1MDAzZWZpbGVzLCBOUl9GSUxFUykpO1xuJiM0MztcdG5yX3Nsb3RzID0gcmVjdl9mZF9zbG90cyhzZWxmLVx1MDAzZXNrW1NLX1JFQ0VJVkVSXSwgc2xvdHMsIFx1MDAyNmZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKE5SX0ZJTEVTLCBucl9zbG90cyk7XG4mIzQzO1x0RVhQRUNUX0VRKDAsIGZsYWdzIFx1MDAyNiBNU0dfQ1RSVU5DKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfRklMRVM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRBU1NFUlRfR0Uoc2xvdHNbaV0sIDApO1xuJiM0MztcdFx0RVhQRUNUX0VRKDAsIGNoZWNrX3NlY3JldChzbG90c1tpXSwgaSkpO1xuJiM0MztcdFx0Y2xvc2Uoc2xvdHNbaV0pO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKHNjbV9yaWdodHNfZGVuaWFsX2JwZiwgZmlyc3RfZGVuaWVkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHNsb3RzW05SX0ZJTEVTXSwgbnJfc2xvdHMsIGZsYWdzO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoMCwgZGVueV9pbm9kZShzZWxmLVx1MDAzZW1hcF9mZCwgc2VsZi1cdTAwM2Vpbm9zWzBdKSk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBzZXRfbm90cnVuYyhzZWxmLVx1MDAzZXNrW1NLX1JFQ0VJVkVSXSkpO1xuJiM0MztcdEFTU0VSVF9ORSgtMSwgc2VuZF9mZHMoc2VsZi1cdTAwM2Vza1tTS19TRU5ERVJdLCBzZWxmLVx1MDAzZWZpbGVzLCBOUl9GSUxFUykpO1xuJiM0MztcdG5yX3Nsb3RzID0gcmVjdl9mZF9zbG90cyhzZWxmLVx1MDAzZXNrW1NLX1JFQ0VJVkVSXSwgc2xvdHMsIFx1MDAyNmZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKE5SX0ZJTEVTLCBucl9zbG90cyk7XG4mIzQzO1x0RVhQRUNUX0VRKDAsIGZsYWdzIFx1MDAyNiBNU0dfQ1RSVU5DKTtcbiYjNDM7XHRFWFBFQ1RfRVEoLUVQRVJNLCBzbG90c1swXSk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9HRShzbG90c1sxXSwgMCk7XG4mIzQzO1x0RVhQRUNUX0VRKDAsIGNoZWNrX3NlY3JldChzbG90c1sxXSwgMSkpO1xuJiM0MztcdGNsb3NlKHNsb3RzWzFdKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKHNjbV9yaWdodHNfZGVuaWFsX2JwZiwgYWxsX2RlbmllZClcbiYjNDM7e1xuJiM0MztcdGludCBzbG90c1tOUl9GSUxFU10sIG5yX3Nsb3RzLCBmbGFncywgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfRklMRVM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0QVNTRVJUX0VRKDAsIGRlbnlfaW5vZGUoc2VsZi1cdTAwM2VtYXBfZmQsIHNlbGYtXHUwMDNlaW5vc1tpXSkpO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoMCwgc2V0X25vdHJ1bmMoc2VsZi1cdTAwM2Vza1tTS19SRUNFSVZFUl0pKTtcbiYjNDM7XHRBU1NFUlRfTkUoLTEsIHNlbmRfZmRzKHNlbGYtXHUwMDNlc2tbU0tfU0VOREVSXSwgc2VsZi1cdTAwM2VmaWxlcywgTlJfRklMRVMpKTtcbiYjNDM7XHRucl9zbG90cyA9IHJlY3ZfZmRfc2xvdHMoc2VsZi1cdTAwM2Vza1tTS19SRUNFSVZFUl0sIHNsb3RzLCBcdTAwMjZmbGFncyk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUShOUl9GSUxFUywgbnJfc2xvdHMpO1xuJiM0MztcdEVYUEVDVF9FUSgwLCBmbGFncyBcdTAwMjYgTVNHX0NUUlVOQyk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX0ZJTEVTOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdEVYUEVDVF9FUSgtRVBFUk0sIHNsb3RzW2ldKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKHNjbV9yaWdodHNfZGVuaWFsX2JwZiwgZGVuaWVkX3dpdGhvdXRfbm90cnVuYylcbiYjNDM7e1xuJiM0MztcdGludCBzbG90c1tOUl9GSUxFU10sIG5yX3Nsb3RzLCBmbGFncztcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBCYXNlbGluZSBiZWhhdmlvdXIgd2l0aG91dCBTT19SSUdIVFNfTk9UUlVOQzogdGhlIGZkIGFycmF5IGlzXG4mIzQzO1x0ICogdHJ1bmNhdGVkIGF0IHRoZSBmaXJzdCBkZW5pZWQgZmQgYW5kIE1TR19DVFJVTkMgaXMgc2V0LlxuJiM0MztcdCAqL1xuJiM0MztcdEFTU0VSVF9FUSgwLCBkZW55X2lub2RlKHNlbGYtXHUwMDNlbWFwX2ZkLCBzZWxmLVx1MDAzZWlub3NbMV0pKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX05FKC0xLCBzZW5kX2ZkcyhzZWxmLVx1MDAzZXNrW1NLX1NFTkRFUl0sIHNlbGYtXHUwMDNlZmlsZXMsIE5SX0ZJTEVTKSk7XG4mIzQzO1x0bnJfc2xvdHMgPSByZWN2X2ZkX3Nsb3RzKHNlbGYtXHUwMDNlc2tbU0tfUkVDRUlWRVJdLCBzbG90cywgXHUwMDI2ZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoMSwgbnJfc2xvdHMpO1xuJiM0MztcdEVYUEVDVF9ORSgwLCBmbGFncyBcdTAwMjYgTVNHX0NUUlVOQyk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9HRShzbG90c1swXSwgMCk7XG4mIzQzO1x0RVhQRUNUX0VRKDAsIGNoZWNrX3NlY3JldChzbG90c1swXSwgMCkpO1xuJiM0MztcdGNsb3NlKHNsb3RzWzBdKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9IQVJORVNTX01BSU5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAyMDowOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VU5JWCYjMzQ7LAogICAgJiMzNDtDT01QQVQmIzM0OywKICAgICYjMzQ7U0VDVVJJVFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1bml4X3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7c2NtX3JlY3Zfb25lX2ZkJiMzNDssCiAgICAmIzM0O3NjbV9kZXRhY2hfZmRzJiMzNDssCiAgICAmIzM0O3NjbV9kZXRhY2hfZmRzX2NvbXBhdCYjMzQ7LAogICAgJiMzNDtzY21fcmVjdl91bml4JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc29ja2V0IG9wdGlvbiBTT19SSUdIVFNfTk9UUlVOQyBmb3IgQUZfVU5JWCBzb2NrZXRzLiBUaGlzIG9wdGlvbiBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgU0NNX1JJR0hUUyB3aGVuIGEgZmlsZSBkZXNjcmlwdG9yIHJlY2VpdmUgaXMgZGVuaWVkIGJ5IGEgc2VjdXJpdHkgbW9kdWxlIChMU00pLiBJbnN0ZWFkIG9mIHRydW5jYXRpbmcgdGhlIGZpbGUgZGVzY3JpcHRvciBhcnJheSBhbmQgc2V0dGluZyBNU0dfQ1RSVU5DLCBpdCBwbGFjZXMgdGhlIGVycm9yIGNvZGUgaW4gdGhlIHVzZXImIzM5O3MgZmlsZSBkZXNjcmlwdG9yIGFycmF5LiBUaGlzIGludm9sdmVzIGNoYW5nZXMgdG8gY29yZSBBRl9VTklYIHNvY2tldCBvcHRpb24gcGFyc2luZyAodW5peF9zZXRzb2Nrb3B0KSwgc29ja2V0IGNvbm5lY3Rpb24gc3RhdGUgcHJvcGFnYXRpb24sIGFuZCB0aGUgU0NNIG1lc3NhZ2UgcmVjZWl2aW5nIGxvZ2ljIChzY21fcmVjdl9vbmVfZmQsIHNjbV9kZXRhY2hfZmRzLCBzY21fZGV0YWNoX2Zkc19jb21wYXQsIHNjbV9yZWN2X3VuaXgpLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgZXJyb3IgaGFuZGxpbmcgYW5kIGFycmF5IG1hbmlwdWxhdGlvbiBsb2dpYyBkb2VzIG5vdCBpbnRyb2R1Y2UgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgb3IgbGVha3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlNWNkYjRhOTM2ZTFhN2Q2OGY3MzYxZmY3NzVkOTYxNDE2NDc3YTM1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMiAyMDowOToyMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaAppbmRleCA1ZWY1N2Y4OGRmNmIzLi45NDZhNWZhZDI2OTEyIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oCkBAIC0xNTUsNiAmIzQzOzE1NSw4IEBACiAjZGVmaW5lIFNPX0lOUQkJCTg0CiAjZGVmaW5lIFNDTV9JTlEJCQlTT19JTlEKIAomIzQzOyNkZWZpbmUgU09fUklHSFRTX05PVFJVTkMgICAgICA4NQomIzQzOwogI2lmICFkZWZpbmVkKF9fS0VSTkVMX18pCiAKICNpZiBfX0JJVFNfUEVSX0xPTkcgPT0gNjQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmgKaW5kZXggNzJmYjFiMDA2ZGE5My4uZjE2NDFkZGUxMzVmYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmgKQEAgLTE2Niw2ICYjNDM7MTY2LDggQEAKICNkZWZpbmUgU09fSU5RCQkJODQKICNkZWZpbmUgU0NNX0lOUQkJCVNPX0lOUQogCiYjNDM7I2RlZmluZSBTT19SSUdIVFNfTk9UUlVOQyAgICAgIDg1CiYjNDM7CiAjaWYgIWRlZmluZWQoX19LRVJORUxfXykKIAogI2lmIF9fQklUU19QRVJfTE9ORyA9PSA2NApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmgKaW5kZXggYzE2ZWMzNmRmZWU2Yi4uZjNhMzgxNWM3ZGMyOSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oCkBAIC0xNDcsNiAmIzQzOzE0Nyw4IEBACiAjZGVmaW5lIFNPX0lOUQkJCTB4NDA1MgogI2RlZmluZSBTQ01fSU5RCQkJU09fSU5RCiAKJiM0MzsjZGVmaW5lIFNPX1JJR0hUU19OT1RSVU5DCTB4NDA1MwomIzQzOwogI2lmICFkZWZpbmVkKF9fS0VSTkVMX18pCiAKICNpZiBfX0JJVFNfUEVSX0xPTkcgPT0gNjQKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaAppbmRleCA3MWJlZmExMDllMWNmLi43OTA3ZjNiMWYwZWUwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zcGFyYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oCkBAIC0xNDgsNiAmIzQzOzE0OCw4IEBACiAjZGVmaW5lIFNPX0lOUSAgICAgICAgICAgICAgICAgICAweDAwNWQKICNkZWZpbmUgU0NNX0lOUSAgICAgICAgICAgICAgICAgIFNPX0lOUQogCiYjNDM7I2RlZmluZSBTT19SSUdIVFNfTk9UUlVOQyAgICAgICAgMHgwMDVlCiYjNDM7CiAjaWYgIWRlZmluZWQoX19LRVJORUxfXykKIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hZl91bml4LmggYi9pbmNsdWRlL25ldC9hZl91bml4LmgKaW5kZXggMzRmNTNkZGU2NWNlYS4uYmIxYjNkZWUwMmU4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYWZfdW5peC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2FmX3VuaXguaApAQCAtNDksNiAmIzQzOzQ5LDcgQEAgc3RydWN0IHVuaXhfc29jayB7CiAJc3RydWN0IHNjbV9zdGF0CQlzY21fc3RhdDsKIAlpbnQJCQlpbnFfbGVuOwogCWJvb2wJCQlyZWN2bXNnX2lucTsKJiM0MzsJYm9vbAkJCXNjbV9yaWdodHNfbm90cnVuYzsKICNpZiBJU19FTkFCTEVEKENPTkZJR19BRl9VTklYX09PQikKIAlzdHJ1Y3Qgc2tfYnVmZgkJKm9vYl9za2I7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjbS5oIGIvaW5jbHVkZS9uZXQvc2NtLmgKaW5kZXggYzUyNTE5NjY5MzQ5Zi4uODZhZTZiYzEwOWVjNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2NtLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvc2NtLmgKQEAgLTUwLDggJiM0Mzs1MCw4IEBAIHN0cnVjdCBzY21fY29va2llIHsKICNlbmRpZgogfTsKIAotdm9pZCBzY21fZGV0YWNoX2ZkcyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20pOwotdm9pZCBzY21fZGV0YWNoX2Zkc19jb21wYXQoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2NtKTsKJiM0Mzt2b2lkIHNjbV9kZXRhY2hfZmRzKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNjbV9jb29raWUgKnNjbSwgYm9vbCBub3RydW5jKTsKJiM0Mzt2b2lkIHNjbV9kZXRhY2hfZmRzX2NvbXBhdChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20sIGJvb2wgbm90cnVuYyk7CiBpbnQgX19zY21fc2VuZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20pOwogdm9pZCBfX3NjbV9kZXN0cm95KHN0cnVjdCBzY21fY29va2llICpzY20pOwogc3RydWN0IHNjbV9mcF9saXN0ICpzY21fZnBfZHVwKHN0cnVjdCBzY21fZnBfbGlzdCAqZnBsKTsKQEAgLTEwNywxMyAmIzQzOzEwNyw4IEBAIHZvaWQgc2NtX3JlY3Yoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAogdm9pZCBzY21fcmVjdl91bml4KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywKIAkJICAgc3RydWN0IHNjbV9jb29raWUgKnNjbSwgaW50IGZsYWdzKTsKIAotc3RhdGljIGlubGluZSBpbnQgc2NtX3JlY3Zfb25lX2ZkKHN0cnVjdCBmaWxlICpmLCBpbnQgX191c2VyICp1ZmQsCi0JCQkJICB1bnNpZ25lZCBpbnQgZmxhZ3MpCi17Ci0JaWYgKCF1ZmQpCi0JCXJldHVybiAtRUZBVUxUOwotCXJldHVybiByZWNlaXZlX2ZkKGYsIHVmZCwgZmxhZ3MpOwotfQomIzQzO2ludCBzY21fcmVjdl9vbmVfZmQoc3RydWN0IGZpbGUgKmYsIGludCBfX3VzZXIgKnVmZCwgdW5zaWduZWQgaW50IGZsYWdzLAomIzQzOwkJICAgIGJvb2wgbm90cnVuYyk7CiAKICNlbmRpZiAvKiBfX0xJTlVYX05FVF9TQ01fSCAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvc29ja2V0LmggYi9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvc29ja2V0LmgKaW5kZXggNTNiNWE4YzAwMmIxZS4uODRlYTdiOTI5MzZlMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NvY2tldC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaApAQCAtMTUwLDYgJiM0MzsxNTAsOCBAQAogI2RlZmluZSBTT19JTlEJCQk4NAogI2RlZmluZSBTQ01fSU5RCQkJU09fSU5RCiAKJiM0MzsjZGVmaW5lIFNPX1JJR0hUU19OT1RSVU5DCTg1CiYjNDM7CiAjaWYgIWRlZmluZWQoX19LRVJORUxfXykKIAogI2lmIF9fQklUU19QRVJfTE9ORyA9PSA2NCB8fCAoZGVmaW5lZChfX3g4Nl82NF9fKSAmYW1wOyZhbXA7IGRlZmluZWQoX19JTFAzMl9fKSkKZGlmZiAtLWdpdCBhL25ldC9jb21wYXQuYyBiL25ldC9jb21wYXQuYwppbmRleCBkNjhjZjljM2FhZDVmLi42YmRmNGEyYzkwNzdkIDEwMDY0NAotLS0gYS9uZXQvY29tcGF0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvbXBhdC5jCkBAIC0yODYsNyAmIzQzOzI4Niw3IEBAIHN0YXRpYyBpbnQgc2NtX21heF9mZHNfY29tcGF0KHN0cnVjdCBtc2doZHIgKm1zZykKIAlyZXR1cm4gKG1zZy0mZ3Q7bXNnX2NvbnRyb2xsZW4gLSBzaXplb2Yoc3RydWN0IGNvbXBhdF9jbXNnaGRyKSkgLyBzaXplb2YoaW50KTsKIH0KIAotdm9pZCBzY21fZGV0YWNoX2Zkc19jb21wYXQoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2NtKQomIzQzO3ZvaWQgc2NtX2RldGFjaF9mZHNfY29tcGF0KHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNjbV9jb29raWUgKnNjbSwgYm9vbCBub3RydW5jKQogewogCXN0cnVjdCBjb21wYXRfY21zZ2hkciBfX3VzZXIgKmNtID0KIAkJKHN0cnVjdCBjb21wYXRfY21zZ2hkciBfX3VzZXIgKiltc2ctJmd0O21zZ19jb250cm9sX3VzZXI7CkBAIC0yOTYsNyAmIzQzOzI5Niw3IEBAIHZvaWQgc2NtX2RldGFjaF9mZHNfY29tcGF0KHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNjbV9jb29raWUgKnNjbSkKIAlpbnQgZXJyID0gMCwgaTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBmZG1heDsgaSYjNDM7JiM0MzspIHsKLQkJZXJyID0gc2NtX3JlY3Zfb25lX2ZkKHNjbS0mZ3Q7ZnAtJmd0O2ZwW2ldLCBjbXNnX2RhdGEgJiM0MzsgaSwgb19mbGFncyk7CiYjNDM7CQllcnIgPSBzY21fcmVjdl9vbmVfZmQoc2NtLSZndDtmcC0mZ3Q7ZnBbaV0sIGNtc2dfZGF0YSAmIzQzOyBpLCBvX2ZsYWdzLCBub3RydW5jKTsKIAkJaWYgKGVyciAmbHQ7IDApCiAJCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9uZXQvY29yZS9zY20uYyBiL25ldC9jb3JlL3NjbS5jCmluZGV4IGVlYzEzZjUwZWNhZjYuLmYwZDQ0ZWNkYjExZmMgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NjbS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NjbS5jCkBAIC0zNTEsNyAmIzQzOzM1MSwzMSBAQCBzdGF0aWMgaW50IHNjbV9tYXhfZmRzKHN0cnVjdCBtc2doZHIgKm1zZykKIAlyZXR1cm4gKG1zZy0mZ3Q7bXNnX2NvbnRyb2xsZW4gLSBzaXplb2Yoc3RydWN0IGNtc2doZHIpKSAvIHNpemVvZihpbnQpOwogfQogCi12b2lkIHNjbV9kZXRhY2hfZmRzKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNjbV9jb29raWUgKnNjbSkKJiM0MztpbnQgc2NtX3JlY3Zfb25lX2ZkKHN0cnVjdCBmaWxlICpmLCBpbnQgX191c2VyICp1ZmQsIHVuc2lnbmVkIGludCBmbGFncywKJiM0MzsJCSAgICBib29sIG5vdHJ1bmMpCiYjNDM7ewomIzQzOwlpbnQgZXJyb3I7CiYjNDM7CiYjNDM7CWlmICghdWZkKQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CiYjNDM7CWVycm9yID0gc2VjdXJpdHlfZmlsZV9yZWNlaXZlKGYpOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlyZXR1cm4gbm90cnVuYyA/IHB1dF91c2VyKGVycm9yLCB1ZmQpIDogZXJyb3I7CiYjNDM7CiYjNDM7CUZEX1BSRVBBUkUoZmRmLCBmbGFncywgZ2V0X2ZpbGUoZikpOwomIzQzOwlpZiAoZmRmLmVycikKJiM0MzsJCXJldHVybiBmZGYuZXJyOwomIzQzOwomIzQzOwllcnJvciA9IHB1dF91c2VyKGZkX3ByZXBhcmVfZmQoZmRmKSwgdWZkKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJcmV0dXJuIGVycm9yOwomIzQzOwomIzQzOwlfX3JlY2VpdmVfc29jayhmZF9wcmVwYXJlX2ZpbGUoZmRmKSk7CiYjNDM7CXJldHVybiBmZF9wdWJsaXNoKGZkZik7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgc2NtX2RldGFjaF9mZHMoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2NtLCBib29sIG5vdHJ1bmMpCiB7CiAJc3RydWN0IGNtc2doZHIgX191c2VyICpjbSA9CiAJCShfX2ZvcmNlIHN0cnVjdCBjbXNnaGRyIF9fdXNlciAqKW1zZy0mZ3Q7bXNnX2NvbnRyb2xfdXNlcjsKQEAgLTM2NSwxMiAmIzQzOzM4OSwxMiBAQCB2b2lkIHNjbV9kZXRhY2hfZmRzKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNjbV9jb29raWUgKnNjbSkKIAkJcmV0dXJuOwogCiAJaWYgKG1zZy0mZ3Q7bXNnX2ZsYWdzICZhbXA7IE1TR19DTVNHX0NPTVBBVCkgewotCQlzY21fZGV0YWNoX2Zkc19jb21wYXQobXNnLCBzY20pOwomIzQzOwkJc2NtX2RldGFjaF9mZHNfY29tcGF0KG1zZywgc2NtLCBub3RydW5jKTsKIAkJcmV0dXJuOwogCX0KIAogCWZvciAoaSA9IDA7IGkgJmx0OyBmZG1heDsgaSYjNDM7JiM0MzspIHsKLQkJZXJyID0gc2NtX3JlY3Zfb25lX2ZkKHNjbS0mZ3Q7ZnAtJmd0O2ZwW2ldLCBjbXNnX2RhdGEgJiM0MzsgaSwgb19mbGFncyk7CiYjNDM7CQllcnIgPSBzY21fcmVjdl9vbmVfZmQoc2NtLSZndDtmcC0mZ3Q7ZnBbaV0sIGNtc2dfZGF0YSAmIzQzOyBpLCBvX2ZsYWdzLCBub3RydW5jKTsKIAkJaWYgKGVyciAmbHQ7IDApCiAJCQlicmVhazsKIAl9CkBAIC01MjMsOSAmIzQzOzU0Nyw2IEBAIHN0YXRpYyBib29sIF9fc2NtX3JlY3ZfY29tbW9uKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLAogCiAJc2NtX3Bhc3NlYyhzaywgbXNnLCBzY20pOwogCi0JaWYgKHNjbS0mZ3Q7ZnApCi0JCXNjbV9kZXRhY2hfZmRzKG1zZywgc2NtKTsKLQogCXJldHVybiB0cnVlOwogfQogCkBAIC01NDUsNiAmIzQzOzU2NiwxMyBAQCB2b2lkIHNjbV9yZWN2X3VuaXgoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAogCWlmICghX19zY21fcmVjdl9jb21tb24oc29jay0mZ3Q7c2ssIG1zZywgc2NtLCBmbGFncykpCiAJCXJldHVybjsKIAomIzQzOwlpZiAoc2NtLSZndDtmcCkgewomIzQzOwkJc3RydWN0IHVuaXhfc29jayAqdTsKJiM0MzsKJiM0MzsJCXUgPSB1bml4X3NrKHNvY2stJmd0O3NrKTsKJiM0MzsJCXNjbV9kZXRhY2hfZmRzKG1zZywgc2NtLCBSRUFEX09OQ0UodS0mZ3Q7c2NtX3JpZ2h0c19ub3RydW5jKSk7CiYjNDM7CX0KJiM0MzsKIAlpZiAoc29jay0mZ3Q7c2stJmd0O3NrX3NjbV9waWRmZCkKIAkJc2NtX3BpZGZkX3JlY3YobXNnLCBzY20pOwogCmRpZmYgLS1naXQgYS9uZXQvdW5peC9hZl91bml4LmMgYi9uZXQvdW5peC9hZl91bml4LmMKaW5kZXggMTBlZDk0MjFlNDNhYS4uMDNjZTIzYTRlYmVlMSAxMDA2NDQKLS0tIGEvbmV0L3VuaXgvYWZfdW5peC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC91bml4L2FmX3VuaXguYwpAQCAtOTIyLDYgJiM0Mzs5MjIsNyBAQCBzdGF0aWMgYm9vbCB1bml4X2N1c3RvbV9zb2Nrb3B0KGludCBvcHRuYW1lKQogewogCXN3aXRjaCAob3B0bmFtZSkgewogCWNhc2UgU09fSU5ROgomIzQzOwljYXNlIFNPX1JJR0hUU19OT1RSVU5DOgogCQlyZXR1cm4gdHJ1ZTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gZmFsc2U7CkBAIC05NTAsMTMgJiM0Mzs5NTEsMjEgQEAgc3RhdGljIGludCB1bml4X3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAlzd2l0Y2ggKG9wdG5hbWUpIHsKIAljYXNlIFNPX0lOUToKIAkJaWYgKHNrLSZndDtza190eXBlICE9IFNPQ0tfU1RSRUFNKQotCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJcmV0dXJuIC1FTk9QUk9UT09QVDsKIAogCQlpZiAodmFsICZndDsgMSB8fCB2YWwgJmx0OyAwKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJV1JJVEVfT05DRSh1LSZndDtyZWN2bXNnX2lucSwgdmFsKTsKIAkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgU09fUklHSFRTX05PVFJVTkM6CiYjNDM7CQlpZiAodmFsICZndDsgMSB8fCB2YWwgJmx0OyAwKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJV1JJVEVfT05DRSh1LSZndDtzY21fcmlnaHRzX25vdHJ1bmMsIHZhbCk7CiYjNDM7CQlicmVhazsKJiM0MzsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT1BST1RPT1BUOwogCX0KQEAgLTEwMDYsNiAmIzQzOzEwMTUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB1bml4X2RncmFtX29wcyA9IHsKICNlbmRpZgogCS5saXN0ZW4gPQlzb2NrX25vX2xpc3RlbiwKIAkuc2h1dGRvd24gPQl1bml4X3NodXRkb3duLAomIzQzOwkuc2V0c29ja29wdCA9CXVuaXhfc2V0c29ja29wdCwKIAkuc2VuZG1zZyA9CXVuaXhfZGdyYW1fc2VuZG1zZywKIAkucmVhZF9za2IgPQl1bml4X3JlYWRfc2tiLAogCS5yZWN2bXNnID0JdW5peF9kZ3JhbV9yZWN2bXNnLApAQCAtMTAzMCw2ICYjNDM7MTA0MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHVuaXhfc2VxcGFja2V0X29wcyA9IHsKICNlbmRpZgogCS5saXN0ZW4gPQl1bml4X2xpc3RlbiwKIAkuc2h1dGRvd24gPQl1bml4X3NodXRkb3duLAomIzQzOwkuc2V0c29ja29wdCA9CXVuaXhfc2V0c29ja29wdCwKIAkuc2VuZG1zZyA9CXVuaXhfc2VxcGFja2V0X3NlbmRtc2csCiAJLnJlY3Ztc2cgPQl1bml4X3NlcXBhY2tldF9yZWN2bXNnLAogCS5tbWFwID0JCXNvY2tfbm9fbW1hcCwKQEAgLTExNDMsOSAmIzQzOzExNTQsMTAgQEAgc3RhdGljIGludCB1bml4X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCwKIAlpZiAocHJvdG9jb2wgJmFtcDsmYW1wOyBwcm90b2NvbCAhPSBQRl9VTklYKQogCQlyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDsKIAomIzQzOwlzZXRfYml0KFNPQ0tfQ1VTVE9NX1NPQ0tPUFQsICZhbXA7c29jay0mZ3Q7ZmxhZ3MpOwomIzQzOwogCXN3aXRjaCAoc29jay0mZ3Q7dHlwZSkgewogCWNhc2UgU09DS19TVFJFQU06Ci0JCXNldF9iaXQoU09DS19DVVNUT01fU09DS09QVCwgJmFtcDtzb2NrLSZndDtmbGFncyk7CiAJCXNvY2stJmd0O29wcyA9ICZhbXA7dW5peF9zdHJlYW1fb3BzOwogCQlicmVhazsKIAkJLyoKQEAgLTE3NDMsOSAmIzQzOzE3NTUsMTAgQEAgc3RhdGljIGludCB1bml4X3N0cmVhbV9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWQKIAlpbml0X3BlZXJjcmVkKG5ld3NrLCAmYW1wO3BlZXJjcmVkKTsKIAogCW5ld3UgPSB1bml4X3NrKG5ld3NrKTsKJiM0MzsJb3RoZXJ1ID0gdW5peF9zayhvdGhlcik7CiAJbmV3dS0mZ3Q7bGlzdGVuZXIgPSBvdGhlcjsKJiM0MzsJbmV3dS0mZ3Q7c2NtX3JpZ2h0c19ub3RydW5jID0gb3RoZXJ1LSZndDtzY21fcmlnaHRzX25vdHJ1bmM7CiAJUkNVX0lOSVRfUE9JTlRFUihuZXdzay0mZ3Q7c2tfd3EsICZhbXA7bmV3dS0mZ3Q7cGVlcl93cSk7Ci0Jb3RoZXJ1ID0gdW5peF9zayhvdGhlcik7CiAKIAkvKiBjb3B5IGFkZHJlc3MgaW5mb3JtYXRpb24gZnJvbSBsaXN0ZW5pbmcgdG8gbmV3IHNvY2sKIAkgKgpAQCAtMTg2NSw4ICYjNDM7MTg3OCw3IEBAIHN0YXRpYyBpbnQgdW5peF9hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jaywKIAlza2JfZnJlZV9kYXRhZ3JhbShzaywgc2tiKTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJmFtcDt1bml4X3NrKHNrKS0mZ3Q7cGVlcl93YWl0KTsKIAotCWlmICh0c2stJmd0O3NrX3R5cGUgPT0gU09DS19TVFJFQU0pCi0JCXNldF9iaXQoU09DS19DVVNUT01fU09DS09QVCwgJmFtcDtuZXdzb2NrLSZndDtmbGFncyk7CiYjNDM7CXNldF9iaXQoU09DS19DVVNUT01fU09DS09QVCwgJmFtcDtuZXdzb2NrLSZndDtmbGFncyk7CiAKIAkvKiBhdHRhY2ggYWNjZXB0ZWQgc29jayB0byBzb2NrZXQgKi8KIAl1bml4X3N0YXRlX2xvY2sodHNrKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4Ly5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC8uZ2l0aWdub3JlCmluZGV4IDk3MzE3NjY0NDEwMzYuLjk1NGYwOTU4ZGQwMzQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4Ly5naXRpZ25vcmUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvLmdpdGlnbm9yZQpAQCAtMyw2ICYjNDM7Myw4IEBAIG1zZ19vb2IKIHNjbV9pbnEKIHNjbV9waWRmZAogc2NtX3JpZ2h0cwomIzQzO3NjbV9yaWdodHNfZGVuaWFsX2xzbQomIzQzO3NjbV9yaWdodHNfZGVuaWFsX2xzbS5icGYubwogc29fcGVla19vZmYKIHVuaXhfY29ubmVjdAogdW5peF9jb25ucmVzZXQKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvTWFrZWZpbGUKaW5kZXggNTdkMTU5ODAzYTNhYi4uYTY2ZjEwZmIwYzIzMSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvTWFrZWZpbGUKQEAgLTExLDEwICYjNDM7MTEsMTggQEAgVEVTVF9HRU5fUFJPR1MgOj0gXAogCXNjbV9pbnEgXAogCXNjbV9waWRmZCBcCiAJc2NtX3JpZ2h0cyBcCiYjNDM7CXNjbV9yaWdodHNfZGVuaWFsX2xzbSBcCiAJc29fcGVla19vZmYgXAogCXVuaXhfY29ubmVjdCBcCiAJdW5peF9jb25ucmVzZXQgXAogCXVuaXhfbGlzdGVuIFwKICMgZW5kIG9mIFRFU1RfR0VOX1BST0dTCiAKJiM0MztURVNUX0dFTl9GSUxFUyA6PSBzY21fcmlnaHRzX2RlbmlhbF9sc20uYnBmLm8KJiM0MzsKIGluY2x1ZGUgLi4vLi4vbGliLm1rCiYjNDM7aW5jbHVkZSAuLi9icGYubWsKJiM0MzsKJiM0MzskKE9VVFBVVCkvc2NtX3JpZ2h0c19kZW5pYWxfbHNtOiAkKEJQRk9CSikKJiM0MzskKE9VVFBVVCkvc2NtX3JpZ2h0c19kZW5pYWxfbHNtOiBDRkxBR1MgJiM0Mzs9IC1JJChTQ1JBVENIX0RJUikvaW5jbHVkZQomIzQzOyQoT1VUUFVUKS9zY21fcmlnaHRzX2RlbmlhbF9sc206IExETElCUyAmIzQzOz0gLWxlbGYgLWx6CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9jb25maWcKaW5kZXggNDFkYmIwM2M3NDdlYi4uNDY4ZjdhMGJiNjRlNiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L2NvbmZpZwpAQCAtMiwzICYjNDM7MiwxMCBAQCBDT05GSUdfQUZfVU5JWF9PT0I9eQogQ09ORklHX1VOSVg9eQogQ09ORklHX1VOSVhfRElBRz1tCiBDT05GSUdfVVNFUl9OUz15CiYjNDM7Q09ORklHX0JQRj15CiYjNDM7Q09ORklHX0JQRl9TWVNDQUxMPXkKJiM0MztDT05GSUdfQlBGX0VWRU5UUz15CiYjNDM7Q09ORklHX0JQRl9KSVQ9eQomIzQzO0NPTkZJR19TRUNVUklUWT15CiYjNDM7Q09ORklHX0JQRl9MU009eQomIzQzO0NPTkZJR19ERUJVR19JTkZPX0JURj15CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzX2RlbmlhbF9sc20uYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzX2RlbmlhbF9sc20uYnBmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNGYyNDE0NDY1YmZkMwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHNfZGVuaWFsX2xzbS5icGYuYwpAQCAtMCwwICYjNDM7MSwzNiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JwZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9lcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl90cmFjaW5nLmgmZ3Q7CiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwomIzQzOwomIzQzO3N0cnVjdCBpbm9kZSB7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaV9pbm87CiYjNDM7fSBfX2F0dHJpYnV0ZV9fKChwcmVzZXJ2ZV9hY2Nlc3NfaW5kZXgpKTsKJiM0MzsKJiM0MztzdHJ1Y3QgZmlsZSB7CiYjNDM7CXN0cnVjdCBpbm9kZSAqZl9pbm9kZTsKJiM0Mzt9IF9fYXR0cmlidXRlX18oKHByZXNlcnZlX2FjY2Vzc19pbmRleCkpOwomIzQzOwomIzQzO3N0cnVjdCB7CiYjNDM7CV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfSEFTSCk7CiYjNDM7CV9fdWludChtYXhfZW50cmllcywgMTYpOwomIzQzOwlfX3R5cGUoa2V5LCBfX3U2NCk7CS8qIGlub2RlIG51bWJlciAqLwomIzQzOwlfX3R5cGUodmFsdWUsIF9fdTMyKTsJLyogdGdpZCBvZiB0aGUgcmVjZWl2ZXIgYmVpbmcgdGVzdGVkICovCiYjNDM7fSBkZW5pZWRfaW5vZGVzIFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwomIzQzO1NFQygmIzM0O2xzbS9maWxlX3JlY2VpdmUmIzM0OykKJiM0MztpbnQgQlBGX1BST0coc2NtX3JpZ2h0c19kZW55LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CV9fdTMyIHRnaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSAmZ3Q7Jmd0OyAzMjsKJiM0MzsJX191NjQgaW5vID0gZmlsZS0mZ3Q7Zl9pbm9kZS0mZ3Q7aV9pbm87CiYjNDM7CV9fdTMyICpvd25lcjsKJiM0MzsKJiM0MzsJb3duZXIgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7ZGVuaWVkX2lub2RlcywgJmFtcDtpbm8pOwomIzQzOwlpZiAob3duZXIgJmFtcDsmYW1wOyAqb3duZXIgPT0gdGdpZCkKJiM0MzsJCXJldHVybiAtRVBFUk07CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHNfZGVuaWFsX2xzbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvc2NtX3JpZ2h0c19kZW5pYWxfbHNtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uOTQxYjdkZWNmNzk4MAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHNfZGVuaWFsX2xzbS5jCkBAIC0wLDAgJiM0MzsxLDI4NSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2RlZmluZSBfR05VX1NPVVJDRQomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtmY250bC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvc29ja2V0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9zdGF0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy90eXBlcy5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9saWJicGYuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdF9oYXJuZXNzLmgmIzM0OwomIzQzOwomIzQzOyNpZm5kZWYgU09fUklHSFRTX05PVFJVTkMKJiM0MzsjZGVmaW5lIFNPX1JJR0hUU19OT1RSVU5DIDg1CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2RlZmluZSBOUl9GSUxFUyAyCiYjNDM7CiYjNDM7LyogUGVyLWZpbGUgY29udGVudCwgc28gYSByZWNlaXZlZCBmZCBjYW4gYmUgbWF0Y2hlZCB0byB0aGUgZmlsZSBzZW50ICovCiYjNDM7I2RlZmluZSBTRUNSRVQobikgJiMzNDtzZWNyZXQgJWQmIzM0OywgKG4pCiYjNDM7CiYjNDM7LyogSW5kaWNlcyBpbnRvIHRoZSBzb2NrZXRwYWlyICovCiYjNDM7I2RlZmluZSBTS19TRU5ERVIgMAomIzQzOyNkZWZpbmUgU0tfUkVDRUlWRVIgMQomIzQzOwomIzQzO0ZJWFRVUkUoc2NtX3JpZ2h0c19kZW5pYWxfYnBmKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9vYmplY3QgKm9iajsKJiM0MzsJc3RydWN0IGJwZl9saW5rICpsaW5rOwomIzQzOwlpbnQgbWFwX2ZkOwomIzQzOwlpbnQgc2tbMl07CiYjNDM7CWludCBmaWxlc1tOUl9GSUxFU107CiYjNDM7CV9fdTY0IGlub3NbTlJfRklMRVNdOwomIzQzOwljaGFyIHBhdGhzW05SX0ZJTEVTXVs2NF07CiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlQoc2NtX3JpZ2h0c19kZW5pYWxfYnBmKQomIzQzO3sKJiM0MzsJaW50IHNvY2tfdHlwZTsKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoc2NtX3JpZ2h0c19kZW5pYWxfYnBmLCBzdHJlYW0pCiYjNDM7ewomIzQzOwkuc29ja190eXBlID0gU09DS19TVFJFQU0sCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKHNjbV9yaWdodHNfZGVuaWFsX2JwZiwgZGdyYW0pCiYjNDM7ewomIzQzOwkuc29ja190eXBlID0gU09DS19ER1JBTSwKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoc2NtX3JpZ2h0c19kZW5pYWxfYnBmLCBzZXFwYWNrZXQpCiYjNDM7ewomIzQzOwkuc29ja190eXBlID0gU09DS19TRVFQQUNLRVQsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1NFVFVQKHNjbV9yaWdodHNfZGVuaWFsX2JwZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZzsKJiM0MzsJY2hhciBsc21zWzI1Nl0gPSB7fTsKJiM0MzsJaW50IGksIGZkOwomIzQzOwomIzQzOwlpZiAoZ2V0ZXVpZCgpICE9IDApCiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDtyZXF1aXJlcyByb290JiMzNDspOwomIzQzOwomIzQzOwlmZCA9IG9wZW4oJiMzNDsvc3lzL2tlcm5lbC9zZWN1cml0eS9sc20mIzM0OywgT19SRE9OTFkpOwomIzQzOwlBU1NFUlRfR0UoZmQsIDApOwomIzQzOwlBU1NFUlRfTFQoMCwgcmVhZChmZCwgbHNtcywgc2l6ZW9mKGxzbXMpIC0gMSkpOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CiYjNDM7CWlmICghc3Ryc3RyKGxzbXMsICYjMzQ7YnBmJiMzNDspKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7QlBGIExTTSBub3QgYWN0aXZlIChib290IHdpdGggbHNtPS4uLixicGYpJiMzNDspOwomIzQzOwomIzQzOwlzZWxmLSZndDtvYmogPSBicGZfb2JqZWN0X19vcGVuX2ZpbGUoJiMzNDtzY21fcmlnaHRzX2RlbmlhbF9sc20uYnBmLm8mIzM0OywgTlVMTCk7CiYjNDM7CUFTU0VSVF9ORShOVUxMLCBzZWxmLSZndDtvYmopOwomIzQzOwlBU1NFUlRfRVEoMCwgYnBmX29iamVjdF9fbG9hZChzZWxmLSZndDtvYmopKTsKJiM0MzsKJiM0MzsJcHJvZyA9IGJwZl9vYmplY3RfX2ZpbmRfcHJvZ3JhbV9ieV9uYW1lKHNlbGYtJmd0O29iaiwgJiMzNDtzY21fcmlnaHRzX2RlbnkmIzM0Oyk7CiYjNDM7CUFTU0VSVF9ORShOVUxMLCBwcm9nKTsKJiM0MzsKJiM0MzsJc2VsZi0mZ3Q7bGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfbHNtKHByb2cpOwomIzQzOwlBU1NFUlRfTkUoTlVMTCwgc2VsZi0mZ3Q7bGluayk7CiYjNDM7CiYjNDM7CXNlbGYtJmd0O21hcF9mZCA9IGJwZl9vYmplY3RfX2ZpbmRfbWFwX2ZkX2J5X25hbWUoc2VsZi0mZ3Q7b2JqLAomIzQzOwkJCQkJCSAgICAgICAmIzM0O2RlbmllZF9pbm9kZXMmIzM0Oyk7CiYjNDM7CUFTU0VSVF9HRShzZWxmLSZndDttYXBfZmQsIDApOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoMCwgc29ja2V0cGFpcihBRl9VTklYLCB2YXJpYW50LSZndDtzb2NrX3R5cGUsIDAsIHNlbGYtJmd0O3NrKSk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBOUl9GSUxFUzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBzdGF0IHN0OwomIzQzOwomIzQzOwkJc25wcmludGYoc2VsZi0mZ3Q7cGF0aHNbaV0sIHNpemVvZihzZWxmLSZndDtwYXRoc1tpXSksCiYjNDM7CQkJICYjMzQ7L3RtcC9zY21fcmlnaHRzX2RlbmlhbF9icGYuJWQuWFhYWFhYJiMzNDssIGkpOwomIzQzOwkJc2VsZi0mZ3Q7ZmlsZXNbaV0gPSBta3N0ZW1wKHNlbGYtJmd0O3BhdGhzW2ldKTsKJiM0MzsJCUFTU0VSVF9HRShzZWxmLSZndDtmaWxlc1tpXSwgMCk7CiYjNDM7CiYjNDM7CQlBU1NFUlRfTFQoMCwgZHByaW50ZihzZWxmLSZndDtmaWxlc1tpXSwgU0VDUkVUKGkpKSk7CiYjNDM7CiYjNDM7CQlBU1NFUlRfRVEoMCwgZnN0YXQoc2VsZi0mZ3Q7ZmlsZXNbaV0sICZhbXA7c3QpKTsKJiM0MzsJCXNlbGYtJmd0O2lub3NbaV0gPSBzdC5zdF9pbm87CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7RklYVFVSRV9URUFSRE9XTihzY21fcmlnaHRzX2RlbmlhbF9icGYpCiYjNDM7ewomIzQzOwlicGZfbGlua19fZGVzdHJveShzZWxmLSZndDtsaW5rKTsKJiM0MzsJYnBmX29iamVjdF9fY2xvc2Uoc2VsZi0mZ3Q7b2JqKTsKJiM0MzsKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBOUl9GSUxFUzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChzZWxmLSZndDtmaWxlc1tpXSAmZ3Q7PSAwKSB7CiYjNDM7CQkJY2xvc2Uoc2VsZi0mZ3Q7ZmlsZXNbaV0pOwomIzQzOwkJCXVubGluayhzZWxmLSZndDtwYXRoc1tpXSk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJY2xvc2Uoc2VsZi0mZ3Q7c2tbU0tfU0VOREVSXSk7CiYjNDM7CWNsb3NlKHNlbGYtJmd0O3NrW1NLX1JFQ0VJVkVSXSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZGVueV9pbm9kZShpbnQgbWFwX2ZkLCBfX3U2NCBpbm8pCiYjNDM7ewomIzQzOwlfX3UzMiB0Z2lkID0gZ2V0cGlkKCk7CiYjNDM7CiYjNDM7CXJldHVybiBicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcF9mZCwgJmFtcDtpbm8sICZhbXA7dGdpZCwgQlBGX0FOWSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgc2V0X25vdHJ1bmMoaW50IHNrKQomIzQzO3sKJiM0MzsJaW50IG9uZSA9IDE7CiYjNDM7CiYjNDM7CXJldHVybiBzZXRzb2Nrb3B0KHNrLCBTT0xfU09DS0VULCBTT19SSUdIVFNfTk9UUlVOQywKJiM0MzsJCQkgICZhbXA7b25lLCBzaXplb2Yob25lKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgc2VuZF9mZHMoaW50IHNrLCBpbnQgKmZkcywgaW50IG4pCiYjNDM7ewomIzQzOwljaGFyIGN0cmxbQ01TR19TUEFDRShOUl9GSUxFUyAqIHNpemVvZihpbnQpKV0gPSB7fTsKJiM0MzsJY2hhciBkYXRhID0gJiMzOTt4JiMzOTs7CiYjNDM7CXN0cnVjdCBpb3ZlYyBpb3YgPSB7CiYjNDM7CQkuaW92X2Jhc2UgPSAmYW1wO2RhdGEsCiYjNDM7CQkuaW92X2xlbiA9IHNpemVvZihkYXRhKSwKJiM0MzsJfTsKJiM0MzsJc3RydWN0IG1zZ2hkciBtc2cgPSB7CiYjNDM7CQkubXNnX2lvdiA9ICZhbXA7aW92LAomIzQzOwkJLm1zZ19pb3ZsZW4gPSAxLAomIzQzOwkJLm1zZ19jb250cm9sID0gY3RybCwKJiM0MzsJCS5tc2dfY29udHJvbGxlbiA9IENNU0dfU1BBQ0UobiAqIHNpemVvZihpbnQpKSwKJiM0MzsJfTsKJiM0MzsJc3RydWN0IGNtc2doZHIgKmNtc2cgPSBDTVNHX0ZJUlNUSERSKCZhbXA7bXNnKTsKJiM0MzsKJiM0MzsJY21zZy0mZ3Q7Y21zZ19sZXZlbCA9IFNPTF9TT0NLRVQ7CiYjNDM7CWNtc2ctJmd0O2Ntc2dfdHlwZSA9IFNDTV9SSUdIVFM7CiYjNDM7CWNtc2ctJmd0O2Ntc2dfbGVuID0gQ01TR19MRU4obiAqIHNpemVvZihpbnQpKTsKJiM0MzsJbWVtY3B5KENNU0dfREFUQShjbXNnKSwgZmRzLCBuICogc2l6ZW9mKGludCkpOwomIzQzOwomIzQzOwlyZXR1cm4gc2VuZG1zZyhzaywgJmFtcDttc2csIDApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJlY3ZfZmRfc2xvdHMoaW50IHNrLCBpbnQgKnNsb3RzLCBpbnQgKm1zZ19mbGFncykKJiM0Mzt7CiYjNDM7CWludCBucl9zbG90czsKJiM0MzsJY2hhciBjdHJsW0NNU0dfU1BBQ0UoTlJfRklMRVMgKiBzaXplb2YoaW50KSldOwomIzQzOwljaGFyIGRhdGE7CiYjNDM7CXN0cnVjdCBpb3ZlYyBpb3YgPSB7CiYjNDM7CQkuaW92X2Jhc2UgPSAmYW1wO2RhdGEsCiYjNDM7CQkuaW92X2xlbiA9IHNpemVvZihkYXRhKSwKJiM0MzsJfTsKJiM0MzsJc3RydWN0IG1zZ2hkciBtc2cgPSB7CiYjNDM7CQkubXNnX2lvdiA9ICZhbXA7aW92LAomIzQzOwkJLm1zZ19pb3ZsZW4gPSAxLAomIzQzOwkJLm1zZ19jb250cm9sID0gY3RybCwKJiM0MzsJCS5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjdHJsKSwKJiM0MzsJfTsKJiM0MzsJc3RydWN0IGNtc2doZHIgKmNtc2c7CiYjNDM7CiYjNDM7CWlmIChyZWN2bXNnKHNrLCAmYW1wO21zZywgMCkgJmx0OyAwKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwkqbXNnX2ZsYWdzID0gbXNnLm1zZ19mbGFnczsKJiM0MzsKJiM0MzsJY21zZyA9IENNU0dfRklSU1RIRFIoJmFtcDttc2cpOwomIzQzOwlpZiAoIWNtc2cpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJbnJfc2xvdHMgPSAoY21zZy0mZ3Q7Y21zZ19sZW4gLSBDTVNHX0xFTigwKSkgLyBzaXplb2YoaW50KTsKJiM0MzsJbWVtY3B5KHNsb3RzLCBDTVNHX0RBVEEoY21zZyksIG5yX3Nsb3RzICogc2l6ZW9mKGludCkpOwomIzQzOwomIzQzOwlyZXR1cm4gbnJfc2xvdHM7CiYjNDM7fQomIzQzOwomIzQzOy8qIFByb3ZlIGEgcmVjZWl2ZWQgZmQgd29ya3MgYnkgcmVhZGluZyBiYWNrIHRoZSBmaWxlJiMzOTtzIGNvbnRlbnQuICovCiYjNDM7c3RhdGljIGludCBjaGVja19zZWNyZXQoaW50IGZkLCBpbnQgaWR4KQomIzQzO3sKJiM0MzsJY2hhciB3YW50WzMyXSwgZ290WzMyXSA9IHt9OwomIzQzOwomIzQzOwlzbnByaW50Zih3YW50LCBzaXplb2Yod2FudCksIFNFQ1JFVChpZHgpKTsKJiM0MzsJaWYgKHByZWFkKGZkLCBnb3QsIHNpemVvZihnb3QpIC0gMSwgMCkgJmx0OyAwKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlyZXR1cm4gc3RyY21wKHdhbnQsIGdvdCk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihzY21fcmlnaHRzX2RlbmlhbF9icGYsIGFsbF9hbGxvd2VkKQomIzQzO3sKJiM0MzsJaW50IHNsb3RzW05SX0ZJTEVTXSwgbnJfc2xvdHMsIGZsYWdzLCBpOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoMCwgc2V0X25vdHJ1bmMoc2VsZi0mZ3Q7c2tbU0tfUkVDRUlWRVJdKSk7CiYjNDM7CUFTU0VSVF9ORSgtMSwgc2VuZF9mZHMoc2VsZi0mZ3Q7c2tbU0tfU0VOREVSXSwgc2VsZi0mZ3Q7ZmlsZXMsIE5SX0ZJTEVTKSk7CiYjNDM7CW5yX3Nsb3RzID0gcmVjdl9mZF9zbG90cyhzZWxmLSZndDtza1tTS19SRUNFSVZFUl0sIHNsb3RzLCAmYW1wO2ZsYWdzKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKE5SX0ZJTEVTLCBucl9zbG90cyk7CiYjNDM7CUVYUEVDVF9FUSgwLCBmbGFncyAmYW1wOyBNU0dfQ1RSVU5DKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE5SX0ZJTEVTOyBpJiM0MzsmIzQzOykgewomIzQzOwkJQVNTRVJUX0dFKHNsb3RzW2ldLCAwKTsKJiM0MzsJCUVYUEVDVF9FUSgwLCBjaGVja19zZWNyZXQoc2xvdHNbaV0sIGkpKTsKJiM0MzsJCWNsb3NlKHNsb3RzW2ldKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztURVNUX0Yoc2NtX3JpZ2h0c19kZW5pYWxfYnBmLCBmaXJzdF9kZW5pZWQpCiYjNDM7ewomIzQzOwlpbnQgc2xvdHNbTlJfRklMRVNdLCBucl9zbG90cywgZmxhZ3M7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSgwLCBkZW55X2lub2RlKHNlbGYtJmd0O21hcF9mZCwgc2VsZi0mZ3Q7aW5vc1swXSkpOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoMCwgc2V0X25vdHJ1bmMoc2VsZi0mZ3Q7c2tbU0tfUkVDRUlWRVJdKSk7CiYjNDM7CUFTU0VSVF9ORSgtMSwgc2VuZF9mZHMoc2VsZi0mZ3Q7c2tbU0tfU0VOREVSXSwgc2VsZi0mZ3Q7ZmlsZXMsIE5SX0ZJTEVTKSk7CiYjNDM7CW5yX3Nsb3RzID0gcmVjdl9mZF9zbG90cyhzZWxmLSZndDtza1tTS19SRUNFSVZFUl0sIHNsb3RzLCAmYW1wO2ZsYWdzKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKE5SX0ZJTEVTLCBucl9zbG90cyk7CiYjNDM7CUVYUEVDVF9FUSgwLCBmbGFncyAmYW1wOyBNU0dfQ1RSVU5DKTsKJiM0MzsJRVhQRUNUX0VRKC1FUEVSTSwgc2xvdHNbMF0pOwomIzQzOwomIzQzOwlBU1NFUlRfR0Uoc2xvdHNbMV0sIDApOwomIzQzOwlFWFBFQ1RfRVEoMCwgY2hlY2tfc2VjcmV0KHNsb3RzWzFdLCAxKSk7CiYjNDM7CWNsb3NlKHNsb3RzWzFdKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKHNjbV9yaWdodHNfZGVuaWFsX2JwZiwgYWxsX2RlbmllZCkKJiM0Mzt7CiYjNDM7CWludCBzbG90c1tOUl9GSUxFU10sIG5yX3Nsb3RzLCBmbGFncywgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE5SX0ZJTEVTOyBpJiM0MzsmIzQzOykKJiM0MzsJCUFTU0VSVF9FUSgwLCBkZW55X2lub2RlKHNlbGYtJmd0O21hcF9mZCwgc2VsZi0mZ3Q7aW5vc1tpXSkpOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoMCwgc2V0X25vdHJ1bmMoc2VsZi0mZ3Q7c2tbU0tfUkVDRUlWRVJdKSk7CiYjNDM7CUFTU0VSVF9ORSgtMSwgc2VuZF9mZHMoc2VsZi0mZ3Q7c2tbU0tfU0VOREVSXSwgc2VsZi0mZ3Q7ZmlsZXMsIE5SX0ZJTEVTKSk7CiYjNDM7CW5yX3Nsb3RzID0gcmVjdl9mZF9zbG90cyhzZWxmLSZndDtza1tTS19SRUNFSVZFUl0sIHNsb3RzLCAmYW1wO2ZsYWdzKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKE5SX0ZJTEVTLCBucl9zbG90cyk7CiYjNDM7CUVYUEVDVF9FUSgwLCBmbGFncyAmYW1wOyBNU0dfQ1RSVU5DKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE5SX0ZJTEVTOyBpJiM0MzsmIzQzOykKJiM0MzsJCUVYUEVDVF9FUSgtRVBFUk0sIHNsb3RzW2ldKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKHNjbV9yaWdodHNfZGVuaWFsX2JwZiwgZGVuaWVkX3dpdGhvdXRfbm90cnVuYykKJiM0Mzt7CiYjNDM7CWludCBzbG90c1tOUl9GSUxFU10sIG5yX3Nsb3RzLCBmbGFnczsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQmFzZWxpbmUgYmVoYXZpb3VyIHdpdGhvdXQgU09fUklHSFRTX05PVFJVTkM6IHRoZSBmZCBhcnJheSBpcwomIzQzOwkgKiB0cnVuY2F0ZWQgYXQgdGhlIGZpcnN0IGRlbmllZCBmZCBhbmQgTVNHX0NUUlVOQyBpcyBzZXQuCiYjNDM7CSAqLwomIzQzOwlBU1NFUlRfRVEoMCwgZGVueV9pbm9kZShzZWxmLSZndDttYXBfZmQsIHNlbGYtJmd0O2lub3NbMV0pKTsKJiM0MzsKJiM0MzsJQVNTRVJUX05FKC0xLCBzZW5kX2ZkcyhzZWxmLSZndDtza1tTS19TRU5ERVJdLCBzZWxmLSZndDtmaWxlcywgTlJfRklMRVMpKTsKJiM0MzsJbnJfc2xvdHMgPSByZWN2X2ZkX3Nsb3RzKHNlbGYtJmd0O3NrW1NLX1JFQ0VJVkVSXSwgc2xvdHMsICZhbXA7ZmxhZ3MpOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoMSwgbnJfc2xvdHMpOwomIzQzOwlFWFBFQ1RfTkUoMCwgZmxhZ3MgJmFtcDsgTVNHX0NUUlVOQyk7CiYjNDM7CiYjNDM7CUFTU0VSVF9HRShzbG90c1swXSwgMCk7CiYjNDM7CUVYUEVDVF9FUSgwLCBjaGVja19zZWNyZXQoc2xvdHNbMF0sIDApKTsKJiM0MzsJY2xvc2Uoc2xvdHNbMF0pOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0hBUk5FU1NfTUFJTgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAyMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDMzMwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDc3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldyBTT19SSUdIVFNfTk9UUlVOQyBTb2NrZXQgT3B0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGludHJvZHVjaW5nIGBTT19SSUdIVFNfTk9UUlVOQ2AgZm9yIEFGX1VOSVggc29ja2V0cy4gVGhlIGNvcmUgaWRlYSBpcyB0aGF0IHdoZW4gYSBzZWN1cml0eSBtb2R1bGUgbGlrZSBhbiBMU00gZGVuaWVzIHRoZSByZWNlaXB0IG9mIGEgZmlsZSBkZXNjcmlwdG9yIHZpYSBgU0NNX1JJR0hUU2AsIGluc3RlYWQgb2YgdHJ1bmNhdGluZyB0aGUgRkQgYXJyYXkgYW5kIHNldHRpbmcgYE1TR19DVFJVTkNgLCB3ZSBub3cgaGF2ZSB0aGUgb3B0aW9uIHRvICpub3QqIHRydW5jYXRlLiBJbnN0ZWFkLCB0aGUgZXJyb3IgY29kZSAobGlrZSBgLUVQRVJNYCkgZ2V0cyBwbGFjZWQgZGlyZWN0bHkgaW50byB0aGUgdXNlciYjMzk7cyBGRCBhcnJheSwgZXNzZW50aWFsbHkgc2lnbmFsaW5nIHRoZSBkZW5pYWwgbW9yZSBleHBsaWNpdGx5LiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZSB0byB0aGUgc3RhbmRhcmQgYmVoYXZpb3IsIGFsdGhvdWdoIHRhcmdldGVkLgoKTGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGRpZmYgdG8gc2VlIHRoZSBzcGVjaWZpY3MuIFdlJiMzOTt2ZSBnb3Q6CgoqICAgVGhlIG9idmlvdXMgaGVhZGVyIGZpbGUgdXBkYXRlcyBpbiBgYXJjaC8qL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmhgIGFuZCBgaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NvY2tldC5oYCB0byBkZWZpbmUgdGhlIG5ldyBgU09fUklHSFRTX05PVFJVTkNgIG9wdGlvbiAodmFsdWUgODUpLgoqICAgSW4gYGluY2x1ZGUvbmV0L2FmX3VuaXguaGAsIGEgbmV3IGBib29sIHNjbV9yaWdodHNfbm90cnVuYztgIG1lbWJlciBoYXMgYmVlbiBhZGRlZCB0byB0aGUgYHVuaXhfc29ja2Agc3RydWN0dXJlLgoqICAgVGhlIGBpbmNsdWRlL25ldC9zY20uaGAgbW9kaWZpY2F0aW9ucyBhcmUgaW50ZXJlc3RpbmcuIFRoZSBgc2NtX2RldGFjaF9mZHNgLCBgc2NtX2RldGFjaF9mZHNfY29tcGF0YCwgYW5kIGBzY21fcmVjdl9vbmVfZmRgIGZ1bmN0aW9ucyBub3cgYWNjZXB0IGEgYGJvb2wgbm90cnVuY2AgYXJndW1lbnQsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB0aGUgbmV3IHNvY2tldCBvcHRpb24gY29udHJvbHMuCiogICBgbmV0L2NvbXBhdC5jYCBoYXMgYmVlbiB1cGRhdGVkIHRvIGNvcnJlY3RseSBwYXNzIHRoZSBgbm90cnVuY2AgYXJndW1lbnQgdG8gYHNjbV9yZWN2X29uZV9mZGAuCiogICBUaGUgY3J1Y2lhbCBjaGFuZ2UgaXMgaW4gYG5ldC9jb3JlL3NjbS5jYCwgd2hlcmUgYHNjbV9yZWN2X29uZV9mZGAgbm93IGhhbmRsZXMgdGhlIGVycm9yIHJldHVybiBjb3JyZWN0bHkgaWYgYG5vdHJ1bmNgIGlzIHRydWUsIGJ5IHB1dHRpbmcgdGhlIGVycm9yIGludG8gdGhlIHVzZXImIzM5O3MgRkQgYXJyYXkuCiogICBGaW5hbGx5LCBgbmV0L3VuaXgvYWZfdW5peC5jYCBpbnRlZ3JhdGVzIGBTT19SSUdIVFNfTk9UUlVOQ2AgaW50byBgdW5peF9jdXN0b21fc29ja29wdGAgYW5kIGB1bml4X3NldHNvY2tvcHRgLCBhbmQgYWxzbyBwcm9wYWdhdGVzIHRoZSBgc2NtX3JpZ2h0c19ub3RydW5jYCBmbGFnIGR1cmluZyBgdW5peF9zdHJlYW1fY29ubmVjdGAsIHdoaWNoIG1ha2VzIHNlbnNlLgoqICAgQW5kLCBnb29kLCB0aGVyZSYjMzk7cyBhIHNlbGZ0ZXN0IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzX2RlbmlhbF9sc20uY2AuIFRoaXMgaXMgZXNzZW50aWFsIHRvIHNob3cgY29ycmVjdCBiZWhhdmlvci4KClRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBBRl9VTklYIGxvZ2ljLCBzbyBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgYSBzb2xpZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIHN5bWJvbHMgYXJlIGNsZWFybHk6CgoqICAgYHVuaXhfc2V0c29ja29wdGAg4oCTIGJlY2F1c2UgaXTigJlzIHdoZXJlIHRoZSBzb2NrZXQgb3B0aW9uIGlzIHNldC4KKiAgIGBzY21fcmVjdl9vbmVfZmRgIOKAkyB0aGlzIGlzIHRoZSBjb3JlIG9mIHRoZSBuZXcgbG9naWMsIGhvdyB0aGUgZXJyb3IgaXMgaGFuZGxlZC4KKiAgIGBzY21fZGV0YWNoX2Zkc2AgYW5kIGBzY21fZGV0YWNoX2Zkc19jb21wYXRgIOKAkyBib3RoIGFyZSBjb3JlIHRvIEZEIGhhbmRsaW5nIGFuZCB0aGUgbG9naWMgZmxvdy4KKiAgIGB1bml4X3N0cmVhbV9jb25uZWN0YCAtIHRoZSBwYXRoIG1pZ2h0IGJlIHZhbHVhYmxlLgoKSSYjMzk7bGwgZG91YmxlLWNoZWNrIGBuZXQvY29yZS9zY20uY2AgZm9yIGBzY21fcmVjdl9vbmVfZmRgIGFuZCBgc2NtX2RldGFjaF9mZHNgLCBhbmQgYG5ldC91bml4L2FmX3VuaXguY2AgZm9yIGB1bml4X3NldHNvY2tvcHRgIGZvciBtb3JlIGRldGFpbC4KCkkgbmVlZCB0byBjb25maXJtIHRoZSByZXF1aXJlZCBgQ09ORklHX2Agb3B0aW9uczogYENPTkZJR19VTklYYCAob2J2aW91cyksIGBDT05GSUdfU0VDVVJJVFlgIChmb3IgdGhlIExTTSwgYWx0aG91Z2ggdGhlIGZlYXR1cmUgaXRzZWxmIGRvZXNuJiMzOTt0IGluaGVyZW50bHkgZGVwZW5kIG9uIGl0LCBidXQgdGhlIGRlbmlhbCBtYWtlcyB0aGUgbW9zdCBzZW5zZSksIGFuZCBgQ09ORklHX0NPTVBBVGAgKGZvciB0aGUgY29tcGF0IGZ1bmN0aW9uKS4KClRoZW4gSSYjMzk7bGwgcnVuIHNvbWUgdG9vbGluZyB0byB0ZXN0IHRoaXMgb3V0IHRob3JvdWdobHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMjA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2NtX3JlY3Zfb25lX2ZkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3NjbS5oPTEwNz12b2lkIHNjbV9yZWN2X3VuaXgoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbmluY2x1ZGUvbmV0L3NjbS5oLTEwOS1cbmluY2x1ZGUvbmV0L3NjbS5oOjExMDppbnQgc2NtX3JlY3Zfb25lX2ZkKHN0cnVjdCBmaWxlICpmLCBpbnQgX191c2VyICp1ZmQsIHVuc2lnbmVkIGludCBmbGFncyxcbmluY2x1ZGUvbmV0L3NjbS5oLTExMS1cdFx0ICAgIGJvb2wgbm90cnVuYyk7XG4tLVxubmV0L2NvbXBhdC5jPTI4OT12b2lkIHNjbV9kZXRhY2hfZmRzX2NvbXBhdChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20sIGJvb2wgbm90cnVuYylcbi0tXG5uZXQvY29tcGF0LmMtMjk4LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZmRtYXg7IGkmIzQzOyYjNDM7KSB7XG5uZXQvY29tcGF0LmM6Mjk5Olx0XHRlcnIgPSBzY21fcmVjdl9vbmVfZmQoc2NtLVx1MDAzZWZwLVx1MDAzZWZwW2ldLCBjbXNnX2RhdGEgJiM0MzsgaSwgb19mbGFncywgbm90cnVuYyk7XG5uZXQvY29tcGF0LmMtMzAwLVx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9jb3JlL3NjbS5jPTM0Nz1zdGF0aWMgaW50IHNjbV9tYXhfZmRzKHN0cnVjdCBtc2doZHIgKm1zZylcbi0tXG5uZXQvY29yZS9zY20uYy0zNTMtXG5uZXQvY29yZS9zY20uYzozNTQ6aW50IHNjbV9yZWN2X29uZV9mZChzdHJ1Y3QgZmlsZSAqZiwgaW50IF9fdXNlciAqdWZkLCB1bnNpZ25lZCBpbnQgZmxhZ3MsXG5uZXQvY29yZS9zY20uYy0zNTUtXHRcdCAgICBib29sIG5vdHJ1bmMpXG4tLVxubmV0L2NvcmUvc2NtLmM9Mzc4PXZvaWQgc2NtX2RldGFjaF9mZHMoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2NtLCBib29sIG5vdHJ1bmMpXG4tLVxubmV0L2NvcmUvc2NtLmMtMzk2LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZmRtYXg7IGkmIzQzOyYjNDM7KSB7XG5uZXQvY29yZS9zY20uYzozOTc6XHRcdGVyciA9IHNjbV9yZWN2X29uZV9mZChzY20tXHUwMDNlZnAtXHUwMDNlZnBbaV0sIGNtc2dfZGF0YSAmIzQzOyBpLCBvX2ZsYWdzLCBub3RydW5jKTtcbm5ldC9jb3JlL3NjbS5jLTM5OC1cdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAyMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ0MAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDQxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoJiMzOTtzIFNjb3BlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYSBmZXcga2V5IGFyZWFzOiBgc2NtX3JlY3Zfb25lX2ZkYCwgYHNjbV9kZXRhY2hfZmRzYCwgYHNjbV9kZXRhY2hfZmRzX2NvbXBhdGAsIGB1bml4X3NldHNvY2tvcHRgLCBhbmQgYHNjbV9yZWN2X3VuaXhgLiBUaGVzZSBhcmUgYWxsIHByZXR0eSBmb2N1c2VkIGVudHJ5IHBvaW50cywgd2hpY2ggaXMgZ29vZC4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFzcGVjdHMgdG8ga2VlcCBpbiBtaW5kLgoKVGhlIGJpZyBvbmUgaXMgYENPTkZJR19VTklYYCwgb2J2aW91c2x5LCBhcyB0aGlzIHNlZW1zIGNlbnRyYWwgdG8gdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4gYENPTkZJR19DT01QQVRgIGlzIGxpbmtlZCB0byBgc2NtX2RldGFjaF9mZHNfY29tcGF0YCwgd2hpY2ggaXMgYXMgZXhwZWN0ZWQuIEFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM/IExvb2tpbmcgYXQgdGhlIHNlbGZ0ZXN0IGludHJvZHVjZXMgYSByYW5nZSBvZiBgQ09ORklHX0JQRmAgb3B0aW9ucywgYWxvbmcgd2l0aCBgQ09ORklHX1NFQ1VSSVRZYCBhbmQgYENPTkZJR19ERUJVR19JTkZPX0JURmAuCgpIb3dldmVyLCBmb2N1c2luZyBvbiB0aGUgY29yZSBmZWF0dXJlIEkmIzM5O20gYXNzZXNzaW5nIChgU09fUklHSFRTX05PVFJVTkNgKSwgdGhlIGNvZGUgaXRzZWxmIGluIGBuZXQvdW5peC9hZl91bml4LmNgIGFuZCBgbmV0L2NvcmUvc2NtLmNgIG9ubHkgc3RyaWN0bHkgcmVsaWVzIG9uIGBDT05GSUdfVU5JWGAgZm9yIGNvbXBpbGF0aW9uLiBJdCYjMzk7cyBub3QgaW5oZXJlbnRseSBkZXBlbmRlbnQgb24gQlBGIG9yIExTTSBmb3IgdGhlIGNvZGUgdG8gYmUgY29tcGlsZWQgYW5kIHJlYWNoYWJsZS4KCkJ1dCwgbm93IHRoYXQgSSYjMzk7bSBjb25zaWRlcmluZyBlcnJvciBwYXRocywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgc2NtX3JlY3Zfb25lX2ZkYDoKCmBgYGMKCWVycm9yID0gc2VjdXJpdHlfZmlsZV9yZWNlaXZlKGYpOwoJaWYgKGVycm9yKQoJCXJldHVybiBub3RydW5jID8gcHV0X3VzZXIoZXJyb3IsIHVmZCkgOiBlcnJvcjsKYGBgCgpUbyAqdHJpZ2dlciogdGhlIGVycm9yIHBhdGggaGVyZSwgYHNlY3VyaXR5X2ZpbGVfcmVjZWl2ZWAgbmVlZHMgdG8gcmV0dXJuIGFuIGVycm9yLiBUaGF0IGNvdWxkIGJlIGR1ZSB0byBhbiBMU00gZGVueWluZyBhY2Nlc3Mgb3Igc29tZSBvdGhlciBmYWlsdXJlIHdpdGhpbiB0aGUgYHNlY3VyaXR5X2ZpbGVfcmVjZWl2ZWAgZnVuY3Rpb24uIFNvLCB3aGlsZSBgQ09ORklHX1VOSVhgIGlzIHRoZSBlc3NlbnRpYWwgcmVxdWlyZW1lbnQsIGl0IHdvdWxkIGJlIGJlbmVmaWNpYWwgdG8gaGF2ZSBgQ09ORklHX1NFQ1VSSVRZYCBhbmQgcG9zc2libHkgYW4gTFNNIGVuYWJsZWQgZm9yIGEgY29tcHJlaGVuc2l2ZSB0ZXN0LCBidXQgZm9yIHRoZSBjb2RlIHRvIGJlIGNvbXBpbGVkIGBDT05GSUdfVU5JWGAgaXMgdGhlIG9ubHkgc3RyaWN0IHJlcXVpcmVtZW50LgoKTm93LCBsZXQgbWUgc2hpZnQgZ2VhcnMgYW5kIGNoZWNrIGBuZXQvdW5peC9hZl91bml4LmNgIGZvciBhbnkgc3BlY2lmaWNzIG9uIGB1bml4X3NldHNvY2tvcHRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VuaXhfc2V0c29ja29wdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdW5peC9hZl91bml4LmM9OTIxPXN0YXRpYyBib29sIHVuaXhfY3VzdG9tX3NvY2tvcHQoaW50IG9wdG5hbWUpXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jLTkzMS1cbm5ldC91bml4L2FmX3VuaXguYzo5MzI6c3RhdGljIGludCB1bml4X3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbm5ldC91bml4L2FmX3VuaXguYy05MzMtXHRcdFx0ICAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcbi0tXG5uZXQvdW5peC9hZl91bml4LmM9OTc2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHVuaXhfc3RyZWFtX29wcyA9IHtcbi0tXG5uZXQvdW5peC9hZl91bml4LmMtOTkxLVx0LnNodXRkb3duID1cdHVuaXhfc2h1dGRvd24sXG5uZXQvdW5peC9hZl91bml4LmM6OTkyOlx0LnNldHNvY2tvcHQgPVx0dW5peF9zZXRzb2Nrb3B0LFxubmV0L3VuaXgvYWZfdW5peC5jLTk5My1cdC5zZW5kbXNnID1cdHVuaXhfc3RyZWFtX3NlbmRtc2csXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jPTEwMDI9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgdW5peF9kZ3JhbV9vcHMgPSB7XG4tLVxubmV0L3VuaXgvYWZfdW5peC5jLTEwMTctXHQuc2h1dGRvd24gPVx0dW5peF9zaHV0ZG93bixcbm5ldC91bml4L2FmX3VuaXguYzoxMDE4Olx0LnNldHNvY2tvcHQgPVx0dW5peF9zZXRzb2Nrb3B0LFxubmV0L3VuaXgvYWZfdW5peC5jLTEwMTktXHQuc2VuZG1zZyA9XHR1bml4X2RncmFtX3NlbmRtc2csXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jPTEwMjc9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgdW5peF9zZXFwYWNrZXRfb3BzID0ge1xuLS1cbm5ldC91bml4L2FmX3VuaXguYy0xMDQyLVx0LnNodXRkb3duID1cdHVuaXhfc2h1dGRvd24sXG5uZXQvdW5peC9hZl91bml4LmM6MTA0MzpcdC5zZXRzb2Nrb3B0ID1cdHVuaXhfc2V0c29ja29wdCxcbm5ldC91bml4L2FmX3VuaXguYy0xMDQ0LVx0LnNlbmRtc2cgPVx0dW5peF9zZXFwYWNrZXRfc2VuZG1zZyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAyMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc5NAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDEyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBEZWVwIERpdmUgaW50byBTb2NrZXQgU2VjdXJpdHkqKgoKT2theSwgc28gSSYjMzk7bSByZWFsbHkgZGlnZ2luZyBpbnRvIHRoZSBzZWN1cml0eSBhc3BlY3RzIG9mIHNvY2tldCBjb21tdW5pY2F0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aCBVTklYIHNvY2tldHMuIEkgbmVlZCB0byBnZXQgYSByb2NrLXNvbGlkIHVuZGVyc3RhbmRpbmcgb2Ygd2hlcmUgdGhpbmdzIGNhbiBnbyB3cm9uZyBhbmQgd2hhdCBjaGVja3MgYXJlIGluIHBsYWNlLiBNeSBrZXkgZm9jdXMgYXJlYXMgcmlnaHQgbm93IGFyZTogYHVuaXhfc2V0c29ja29wdGAsIGBzY21fcmVjdl9vbmVfZmRgLCBgc2NtX2RldGFjaF9mZHNgLCBgc2NtX2RldGFjaF9mZHNfY29tcGF0YCwgYW5kIGBzY21fcmVjdl91bml4YC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgYXQgdGhlIGhlYXJ0IG9mIHRyYW5zZmVycmluZyBmaWxlIGRlc2NyaXB0b3JzIG92ZXIgVU5JWCBkb21haW4gc29ja2V0cywgYW5kIHRoZXJlZm9yZSByZXByZXNlbnQgdGhlIG1vc3QgbGlrZWx5IHNwb3RzIGZvciB2dWxuZXJhYmlsaXR5LgoKSSYjMzk7bSBhbHNvIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGNvbmZpZ3VyYXRpb25zIHRoYXQgZGljdGF0ZSBob3cgdGhlc2UgZnVuY3Rpb25zIGJlaGF2ZS4gSSBoYXZlIGBVTklYYCBhbmQgYENPTVBBVGAgZmxhZ3MgaW4gbWluZCBhcyB0aGVzZSBzZWVtIHRvIGJlIHRoZSBtb3N0IHJlbGV2YW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcsIGFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucyB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBJIG5lZWQgYSBjb21wbGV0ZSBwaWN0dXJlLgoKSSBrbm93IHRoZSBzZWxmdGVzdCBsZXZlcmFnZXMgQlBGIExTTSB0byBkZW55IGZpbGUgZGVzY3JpcHRvciByZWNlcHRpb24sIGFjdGluZyBhcyBhIGtpbmQgb2YgY2FuYXJ5LiBUaGF0IGdvdCBtZSB0aGlua2luZyBhYm91dCBvdGhlciBmYWlsdXJlIHBhdGhzIGZvciBgc2VjdXJpdHlfZmlsZV9yZWNlaXZlYC4gQ291bGQgdGhlcmUgYmUgb3RoZXIgd2F5cyB0aGlzIGNoZWNrIG1pZ2h0IGZhaWwsIHBlcmhhcHMgZHVlIHRvIGRpZmZlcmVudCBjb25maWd1cmF0aW9ucyBvciBjb25kaXRpb25zPyBJIG5lZWQgdG8ga25vdyBhbGwgdGhlIGFuZ2xlcyBoZXJlLiBJIHdpbGwgc2NydXRpbml6ZSBgc2VjdXJpdHlfZmlsZV9yZWNlaXZlYCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBzZWN1cml0eV9maWxlX3JlY2VpdmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zZWN1cml0eS5oPTQ5Mj1pbnQgc2VjdXJpdHlfZmlsZV9zZW5kX3NpZ2lvdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC00OTMtXHRcdFx0XHQgc3RydWN0IGZvd25fc3RydWN0ICpmb3duLCBpbnQgc2lnKTtcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDo0OTQ6aW50IHNlY3VyaXR5X2ZpbGVfcmVjZWl2ZShzdHJ1Y3QgZmlsZSAqZmlsZSk7XG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDk1LWludCBzZWN1cml0eV9maWxlX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpO1xuLS1cbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD0xMjE0PXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2ZpbGVfc2VuZF9zaWdpb3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssXG4tLVxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTEyMjAtXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg6MTIyMTpzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9maWxlX3JlY2VpdmUoc3RydWN0IGZpbGUgKmZpbGUpXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtMTIyMi17XG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYz0yNzA0PWludCBzZWN1cml0eV9maWxlX3NlbmRfc2lnaW90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLFxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjcxOC0gKi9cbnNlY3VyaXR5L3NlY3VyaXR5LmM6MjcxOTppbnQgc2VjdXJpdHlfZmlsZV9yZWNlaXZlKHN0cnVjdCBmaWxlICpmaWxlKVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNzIwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAyMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDUxOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gc2VjdXJpdHlfZmlsZV9yZWNlaXZlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXNzZWN0IGBzZWN1cml0eV9maWxlX3JlY2VpdmVgIGluIGBzZWN1cml0eS9zZWN1cml0eS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIGZpbGUgcmVjZXB0aW9uIGZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZS4gTXkgaW5pdGlhbCBxdWVzdGlvbnMgYXJlOiB3aGF0IGNoZWNrcyBhcmUgcGVyZm9ybWVkIG9uIHRoZSBpbmNvbWluZyBkYXRhPyBXaGF0IGFzc3VtcHRpb25zIGFyZSBiZWluZyBtYWRlIGFib3V0IHRoZSBzb3VyY2UsIHNpemUsIGFuZCBjb250ZW50PyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byBidWZmZXIgb3ZlcmZsb3dzLCBwYXRoIHRyYXZlcnNhbCwgb3IgY29kZSBpbmplY3Rpb24gdGhhdCBpbW1lZGlhdGVseSBqdW1wIG91dD8gSSB3YW50IHRvIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgc2VjdXJpdHkgcHJpbWl0aXZlcy4gSXMgdGhlcmUgYW4gaW50ZWdyYXRpb24gd2l0aCBhbnkgbWFuZGF0b3J5IGFjY2VzcyBjb250cm9sIG1lY2hhbmlzbXMgb3IgaXMgaXQgaGFuZGxpbmcgc2VjdXJpdHkgcG9saWN5IGl0c2VsZj8gTGV0JiMzOTtzIGNoZWNrIHRoZSBmdW5jdGlvbiYjMzk7cyBwYXJhbWV0ZXIgbGlzdCwgdHlwZSBkZWNsYXJhdGlvbnMgYW5kIHRoZSBkYXRhIGl0IGFjY2Vzc2VzLCBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IHNlZW1zIHVudXN1YWwgYW5kIHNob3VsZCBiZSBkb2N1bWVudGVkLiBGcm9tIHRoZXJlIEkmIzM5O2xsIHRyYWNlIHRocm91Z2ggdGhlIGNvcmUgbG9naWMsIGV4YW1pbmluZyBhbnkgY2FsbHMgdG8gb3RoZXIgc2VjdXJpdHktcmVsYXRlZCBmdW5jdGlvbnMgb3Igc3lzdGVtIGNhbGxzIGludm9sdmVkIGluIGZpbGUgaGFuZGxpbmcgKGUuZy4sIGBvcGVuYCwgYHJlYWRgLCBgd3JpdGVgLCBgY2htb2RgLCBgY2hvd25gLCBldGMuKSB0byBnZXQgYSBnb29kIHNlbnNlIG9mIGl0cyByb2xlIHdpdGhpbiB0aGUgd2lkZXIgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAyMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O3NlY3VyaXR5L3NlY3VyaXR5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzE5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI3MTk6XHRpbnQgc2VjdXJpdHlfZmlsZV9yZWNlaXZlKHN0cnVjdCBmaWxlICpmaWxlKVxuMjcyMDpcdHtcbjI3MjE6XHRcdHJldHVybiBjYWxsX2ludF9ob29rKGZpbGVfcmVjZWl2ZSwgZmlsZSk7XG4yNzIyOlx0fVxuMjcyMzpcdFxuMjcyNDpcdC8qKlxuMjcyNTpcdCAqIHNlY3VyaXR5X2ZpbGVfb3BlbigpIC0gU2F2ZSBvcGVuKCkgdGltZSBzdGF0ZSBmb3IgbGF0ZSB1c2UgYnkgdGhlIExTTVxuMjcyNjpcdCAqIEBmaWxlOlxuMjcyNzpcdCAqXG4yNzI4Olx0ICogU2F2ZSBvcGVuLXRpbWUgcGVybWlzc2lvbiBjaGVja2luZyBzdGF0ZSBmb3IgbGF0ZXIgdXNlIHVwb24gZmlsZV9wZXJtaXNzaW9uLFxuMjcyOTpcdCAqIGFuZCByZWNoZWNrIGFjY2VzcyBpZiBhbnl0aGluZyBoYXMgY2hhbmdlZCBzaW5jZSBpbm9kZV9wZXJtaXNzaW9uLlxuMjczMDpcdCAqXG4yNzMxOlx0ICogV2UgY2FuIGNoZWNrIGlmIGEgZmlsZSBpcyBvcGVuZWQgZm9yIGV4ZWN1dGlvbiAoZS5nLiBleGVjdmUoMikgY2FsbCksIGVpdGhlclxuMjczMjpcdCAqIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgKGUuZy4gRUxGJiMzOTtzIGxkLnNvKSBieSBjaGVja2luZyBmaWxlLVx1MDAzZWZfZmxhZ3MgXHUwMDI2XG4yNzMzOlx0ICogX19GTU9ERV9FWEVDIC5cbjI3MzQ6XHQgKlxuMjczNTpcdCAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbjI3MzY6XHQgKi9cbjI3Mzc6XHRpbnQgc2VjdXJpdHlfZmlsZV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKVxuMjczODpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMjA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxMzEKCQkJCQkJCW91dHB1dDogMjU4CgkJCQkJCQl0aG91Z2h0czogNDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBTT19SSUdIVFNfTk9UUlVOQ2AgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgaGFuZGxpbmcgZXJyb3JzIHdoZW4gcmVjZWl2aW5nIGZpbGUgZGVzY3JpcHRvcnMgb3ZlciBVTklYIHNvY2tldHMgd2l0aCB0aGUgYFNPX1JJR0hUU19OT1RSVU5DYCBvcHRpb24uIEl0IGJvaWxzIGRvd24gdG8gdGhpczogdGhlIGNvZGUgY2FsbHMgdGhlIExTTSAoTGludXggU2VjdXJpdHkgTW9kdWxlKSBob29rLiBJZiBubyBMU00gZGVuaWVzIHRoZSBmaWxlIGRlc2NyaXB0b3IgcmVjZWl2ZSwgaXQgcmV0dXJucyAwLiBCdXQgdG8gdHJ1bHkgdGVzdCB0aGUgZXJyb3IgcGF0aCB3aGVyZSBgZXJyb3IgIT0gMGAsIHdlIG5lZWQgYW4gTFNNIHRoYXQgKmNhbiogZGVueSBgZmlsZV9yZWNlaXZlYC4KCkFwcEFybW9yLCBTRUxpbnV4LCBTbWFjaywgVE9NT1lPLCBhbmQgQlBGIExTTSBhcmUgdGhlIHBvc3NpYmlsaXRpZXMuIFRoZSBzZWxmdGVzdCB1c2VzIEJQRiBMU00sIGFuZCB0aGF0IHNlZW1zIGxpa2UgYSBzZW5zaWJsZSBhcHByb2FjaC4gU28sIHRvIGVuc3VyZSB3ZSBjYW4gaGl0IHRoZSBlcnJvciBwYXRoLCBlc3BlY2lhbGx5IGlmIHN5emthbGxlciBpcyB0aHJvd2luZyBCUEYgcHJvZ3JhbXMgYXQgdGhlIGtlcm5lbCwgZW5hYmxpbmcgYFNFQ1VSSVRZYCBhbmQgYEJQRl9MU01gIGlzIGEgbXVzdC4KCk5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIGhvdyBzeXprYWxsZXIgb3BlcmF0ZXMuIEl0JiMzOTtzIG5vdCBzdHJhaWdodGZvcndhcmQgZm9yIGl0IHRvICpkZWxpYmVyYXRlbHkqIGdlbmVyYXRlIEJQRiBMU00gcHJvZ3JhbXMgdG8gZGVueSBzcGVjaWZpYyBob29rcyB3aXRob3V0IGRlc2NyaXB0aW9ucyBmb3IgdGhlIGhvb2tzLiBIb3dldmVyLCBpdCAqY291bGQqIHRyaWdnZXIgdGhlIGVycm9yIGJ5IGNoYW5jZSwgb3IgaWYgYW5vdGhlciBMU00sIGxpa2UgU0VMaW51eCBvciBBcHBBcm1vciwgaXMgYWN0aXZlIGFuZCBhbHJlYWR5IGRlbmllcyBmaWxlIGRlc2NyaXB0b3IgdHJhbnNmZXIgYWNyb3NzIGRvbWFpbnMuIFN0aWxsLCBhZGRpbmcgYFNFQ1VSSVRZYCBpcyBhIGdvb2QgcHJhY3RpY2UuCgpBdCBhbnkgcmF0ZSwgYFVOSVhgIGFuZCBgQ09NUEFUYCBhcmUgY3J1Y2lhbCBjb25maWdzIHRvIGVuYWJsZSwgZ2l2ZW4gdGhlIHRhcmdldCBjb2RlLiBBZGRpbmcgYFNFQ1VSSVRZYCBzZWVtcyBsaWtlIGEgdXNlZnVsIHByZWNhdXRpb24uCgpMZXQmIzM5O3MgcXVpY2tseSByZXZpZXcgdGhlIGNvcmUgZm9jdXMgc3ltYm9sczogYHVuaXhfc2V0c29ja29wdGAsIGBzY21fcmVjdl9vbmVfZmRgLCBgc2NtX2RldGFjaF9mZHNgLCBgc2NtX2RldGFjaF9mZHNfY29tcGF0YCwgYW5kIGBzY21fcmVjdl91bml4YC4gWWVwLCB0aG9zZSBhbGwgbG9vayByaWdodCBvbiBwb2ludC4gVGhleSBkaXJlY3RseSByZWxhdGUgdG8gdGhlIG5ldyBsb2dpYy4KCk5vdywgdG8gc29saWRpZnkgdGhlIHJlYXNvbmluZzogVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBTT19SSUdIVFNfTk9UUlVOQ2AgZm9yIEFGX1VOSVggc29ja2V0cy4gVGhpcyBvcHRpb24gbW9kaWZpZXMgdGhlIGBTQ01fUklHSFRTYCBiZWhhdmlvci4gV2hlbiB0aGUgZmlsZSBkZXNjcmlwdG9yIHJlY2VpdmUgaXMgZGVuaWVkIGJ5IGEgc2VjdXJpdHkgbW9kdWxlLCB0aGUgcGF0Y2ggbW9kaWZpZXMgYFNDTV9SSUdIVFNgLiBJbnN0ZWFkIG9mIHRydW5jYXRpbmcgdGhlIGZpbGUgZGVzY3JpcHRvciBhcnJheSBhbmQgc2V0dGluZyBgTVNHX0NUUlVOQ2AsIGl0IHBsYWNlcyB0aGUgZXJyb3IgY29kZSBpbiB0aGUgdXNlciYjMzk7cyBmaWxlIGRlc2NyaXB0b3IgYXJyYXkuIFRoaXMgaW52b2x2ZXMgY2hhbmdlcyB0byBjb3JlIEFGX1VOSVggc29ja2V0IG9wdGlvbiBwYXJzaW5nIChgdW5peF9zZXRzb2Nrb3B0YCksIHNvY2tldCBjb25uZWN0aW9uIHN0YXRlIHByb3BhZ2F0aW9uLCBhbmQgdGhlIFNDTSBtZXNzYWdlIHJlY2VpdmluZyBsb2dpYyAoYHNjbV9yZWN2X29uZV9mZGAsIGBzY21fZGV0YWNoX2Zkc2AsIGBzY21fZGV0YWNoX2Zkc19jb21wYXRgLCBgc2NtX3JlY3ZfdW5peGApLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBwYXRocyB0aGF0ICptdXN0KiBiZSBmdXp6ZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIG5ldyBlcnJvciBoYW5kbGluZyBhbmQgYXJyYXkgbWFuaXB1bGF0aW9uIGxvZ2ljIGRvZXNuJiMzOTt0IGludHJvZHVjZSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBvciBsZWFrcy4KClNvLCB0aGUga2V5IGNvbmZpZ3MgZm9yIGZ1enppbmc6IGBVTklYYCwgYENPTVBBVGAsIGFuZCBgU0VDVVJJVFlgLgoKVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVTklYJiMzNDssCiAgICAmIzM0O0NPTVBBVCYjMzQ7LAogICAgJiMzNDtTRUNVUklUWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VuaXhfc2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtzY21fcmVjdl9vbmVfZmQmIzM0OywKICAgICYjMzQ7c2NtX2RldGFjaF9mZHMmIzM0OywKICAgICYjMzQ7c2NtX2RldGFjaF9mZHNfY29tcGF0JiMzNDssCiAgICAmIzM0O3NjbV9yZWN2X3VuaXgmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzb2NrZXQgb3B0aW9uIFNPX1JJR0hUU19OT1RSVU5DIGZvciBBRl9VTklYIHNvY2tldHMuIFRoaXMgb3B0aW9uIG1vZGlmaWVzIHRoZSBiZWhhdmlvciBvZiBTQ01fUklHSFRTIHdoZW4gYSBmaWxlIGRlc2NyaXB0b3IgcmVjZWl2ZSBpcyBkZW5pZWQgYnkgYSBzZWN1cml0eSBtb2R1bGUgKExTTSkuIEluc3RlYWQgb2YgdHJ1bmNhdGluZyB0aGUgZmlsZSBkZXNjcmlwdG9yIGFycmF5IGFuZCBzZXR0aW5nIE1TR19DVFJVTkMsIGl0IHBsYWNlcyB0aGUgZXJyb3IgY29kZSBpbiB0aGUgdXNlciYjMzk7cyBmaWxlIGRlc2NyaXB0b3IgYXJyYXkuIFRoaXMgaW52b2x2ZXMgY2hhbmdlcyB0byBjb3JlIEFGX1VOSVggc29ja2V0IG9wdGlvbiBwYXJzaW5nICh1bml4X3NldHNvY2tvcHQpLCBzb2NrZXQgY29ubmVjdGlvbiBzdGF0ZSBwcm9wYWdhdGlvbiwgYW5kIHRoZSBTQ00gbWVzc2FnZSByZWNlaXZpbmcgbG9naWMgKHNjbV9yZWN2X29uZV9mZCwgc2NtX2RldGFjaF9mZHMsIHNjbV9kZXRhY2hfZmRzX2NvbXBhdCwgc2NtX3JlY3ZfdW5peCkuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBlcnJvciBoYW5kbGluZyBhbmQgYXJyYXkgbWFuaXB1bGF0aW9uIGxvZ2ljIGRvZXMgbm90IGludHJvZHVjZSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBvciBsZWFrcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VU5JWCYjMzQ7LAogICAgJiMzNDtDT01QQVQmIzM0OywKICAgICYjMzQ7U0VDVVJJVFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1bml4X3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7c2NtX3JlY3Zfb25lX2ZkJiMzNDssCiAgICAmIzM0O3NjbV9kZXRhY2hfZmRzJiMzNDssCiAgICAmIzM0O3NjbV9kZXRhY2hfZmRzX2NvbXBhdCYjMzQ7LAogICAgJiMzNDtzY21fcmVjdl91bml4JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc29ja2V0IG9wdGlvbiBTT19SSUdIVFNfTk9UUlVOQyBmb3IgQUZfVU5JWCBzb2NrZXRzLiBUaGlzIG9wdGlvbiBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgU0NNX1JJR0hUUyB3aGVuIGEgZmlsZSBkZXNjcmlwdG9yIHJlY2VpdmUgaXMgZGVuaWVkIGJ5IGEgc2VjdXJpdHkgbW9kdWxlIChMU00pLiBJbnN0ZWFkIG9mIHRydW5jYXRpbmcgdGhlIGZpbGUgZGVzY3JpcHRvciBhcnJheSBhbmQgc2V0dGluZyBNU0dfQ1RSVU5DLCBpdCBwbGFjZXMgdGhlIGVycm9yIGNvZGUgaW4gdGhlIHVzZXImIzM5O3MgZmlsZSBkZXNjcmlwdG9yIGFycmF5LiBUaGlzIGludm9sdmVzIGNoYW5nZXMgdG8gY29yZSBBRl9VTklYIHNvY2tldCBvcHRpb24gcGFyc2luZyAodW5peF9zZXRzb2Nrb3B0KSwgc29ja2V0IGNvbm5lY3Rpb24gc3RhdGUgcHJvcGFnYXRpb24sIGFuZCB0aGUgU0NNIG1lc3NhZ2UgcmVjZWl2aW5nIGxvZ2ljIChzY21fcmVjdl9vbmVfZmQsIHNjbV9kZXRhY2hfZmRzLCBzY21fZGV0YWNoX2Zkc19jb21wYXQsIHNjbV9yZWN2X3VuaXgpLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgZXJyb3IgaGFuZGxpbmcgYW5kIGFycmF5IG1hbmlwdWxhdGlvbiBsb2dpYyBkb2VzIG5vdCBpbnRyb2R1Y2UgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgb3IgbGVha3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMDowOToyNC4yNDA4Njk1MjhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjQzMzMyMzM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVTklYXCIsXG4gICAgXCJDT01QQVRcIixcbiAgICBcIlNFQ1VSSVRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidW5peF9zZXRzb2Nrb3B0XCIsXG4gICAgXCJzY21fcmVjdl9vbmVfZmRcIixcbiAgICBcInNjbV9kZXRhY2hfZmRzXCIsXG4gICAgXCJzY21fZGV0YWNoX2Zkc19jb21wYXRcIixcbiAgICBcInNjbV9yZWN2X3VuaXhcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHNvY2tldCBvcHRpb24gU09fUklHSFRTX05PVFJVTkMgZm9yIEFGX1VOSVggc29ja2V0cy4gVGhpcyBvcHRpb24gbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIFNDTV9SSUdIVFMgd2hlbiBhIGZpbGUgZGVzY3JpcHRvciByZWNlaXZlIGlzIGRlbmllZCBieSBhIHNlY3VyaXR5IG1vZHVsZSAoTFNNKS4gSW5zdGVhZCBvZiB0cnVuY2F0aW5nIHRoZSBmaWxlIGRlc2NyaXB0b3IgYXJyYXkgYW5kIHNldHRpbmcgTVNHX0NUUlVOQywgaXQgcGxhY2VzIHRoZSBlcnJvciBjb2RlIGluIHRoZSB1c2VyJ3MgZmlsZSBkZXNjcmlwdG9yIGFycmF5LiBUaGlzIGludm9sdmVzIGNoYW5nZXMgdG8gY29yZSBBRl9VTklYIHNvY2tldCBvcHRpb24gcGFyc2luZyAodW5peF9zZXRzb2Nrb3B0KSwgc29ja2V0IGNvbm5lY3Rpb24gc3RhdGUgcHJvcGFnYXRpb24sIGFuZCB0aGUgU0NNIG1lc3NhZ2UgcmVjZWl2aW5nIGxvZ2ljIChzY21fcmVjdl9vbmVfZmQsIHNjbV9kZXRhY2hfZmRzLCBzY21fZGV0YWNoX2Zkc19jb21wYXQsIHNjbV9yZWN2X3VuaXgpLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgZXJyb3IgaGFuZGxpbmcgYW5kIGFycmF5IG1hbmlwdWxhdGlvbiBsb2dpYyBkb2VzIG5vdCBpbnRyb2R1Y2UgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgb3IgbGVha3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDIwOjA5OjI0LjI0MDg3NTg2OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIyOTQyMTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTVjZGI0YTkzNmUxYTdkNjhmNzM2MWZmNzc1ZDk2MTQxNjQ3N2EzNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEF1ZyAyIDIwOjA5OjIyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaFxcbmluZGV4IDVlZjU3Zjg4ZGY2YjMuLjk0NmE1ZmFkMjY5MTIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oXFxuKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oXFxuQEAgLTE1NSw2ICsxNTUsOCBAQFxcbiAjZGVmaW5lIFNPX0lOUVxcdFxcdFxcdDg0XFxuICNkZWZpbmUgU0NNX0lOUVxcdFxcdFxcdFNPX0lOUVxcbiBcXG4rI2RlZmluZSBTT19SSUdIVFNfTk9UUlVOQyAgICAgIDg1XFxuK1xcbiAjaWYgIWRlZmluZWQoX19LRVJORUxfXylcXG4gXFxuICNpZiBfX0JJVFNfUEVSX0xPTkcgPT0gNjRcXG5kaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmggYi9hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaFxcbmluZGV4IDcyZmIxYjAwNmRhOTMuLmYxNjQxZGRlMTM1ZmMgMTAwNjQ0XFxuLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmhcXG4rKysgYi9hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaFxcbkBAIC0xNjYsNiArMTY2LDggQEBcXG4gI2RlZmluZSBTT19JTlFcXHRcXHRcXHQ4NFxcbiAjZGVmaW5lIFNDTV9JTlFcXHRcXHRcXHRTT19JTlFcXG4gXFxuKyNkZWZpbmUgU09fUklHSFRTX05PVFJVTkMgICAgICA4NVxcbitcXG4gI2lmICFkZWZpbmVkKF9fS0VSTkVMX18pXFxuIFxcbiAjaWYgX19CSVRTX1BFUl9MT05HID09IDY0XFxuZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oXFxuaW5kZXggYzE2ZWMzNmRmZWU2Yi4uZjNhMzgxNWM3ZGMyOSAxMDA2NDRcXG4tLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oXFxuKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaFxcbkBAIC0xNDcsNiArMTQ3LDggQEBcXG4gI2RlZmluZSBTT19JTlFcXHRcXHRcXHQweDQwNTJcXG4gI2RlZmluZSBTQ01fSU5RXFx0XFx0XFx0U09fSU5RXFxuIFxcbisjZGVmaW5lIFNPX1JJR0hUU19OT1RSVU5DXFx0MHg0MDUzXFxuK1xcbiAjaWYgIWRlZmluZWQoX19LRVJORUxfXylcXG4gXFxuICNpZiBfX0JJVFNfUEVSX0xPTkcgPT0gNjRcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oXFxuaW5kZXggNzFiZWZhMTA5ZTFjZi4uNzkwN2YzYjFmMGVlMCAxMDA2NDRcXG4tLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmhcXG4rKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmhcXG5AQCAtMTQ4LDYgKzE0OCw4IEBAXFxuICNkZWZpbmUgU09fSU5RICAgICAgICAgICAgICAgICAgIDB4MDA1ZFxcbiAjZGVmaW5lIFNDTV9JTlEgICAgICAgICAgICAgICAgICBTT19JTlFcXG4gXFxuKyNkZWZpbmUgU09fUklHSFRTX05PVFJVTkMgICAgICAgIDB4MDA1ZVxcbitcXG4gI2lmICFkZWZpbmVkKF9fS0VSTkVMX18pXFxuIFxcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYWZfdW5peC5oIGIvaW5jbHVkZS9uZXQvYWZfdW5peC5oXFxuaW5kZXggMzRmNTNkZGU2NWNlYS4uYmIxYjNkZWUwMmU4MiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9hZl91bml4LmhcXG4rKysgYi9pbmNsdWRlL25ldC9hZl91bml4LmhcXG5AQCAtNDksNiArNDksNyBAQCBzdHJ1Y3QgdW5peF9zb2NrIHtcXG4gXFx0c3RydWN0IHNjbV9zdGF0XFx0XFx0c2NtX3N0YXQ7XFxuIFxcdGludFxcdFxcdFxcdGlucV9sZW47XFxuIFxcdGJvb2xcXHRcXHRcXHRyZWN2bXNnX2lucTtcXG4rXFx0Ym9vbFxcdFxcdFxcdHNjbV9yaWdodHNfbm90cnVuYztcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0FGX1VOSVhfT09CKVxcbiBcXHRzdHJ1Y3Qgc2tfYnVmZlxcdFxcdCpvb2Jfc2tiO1xcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2NtLmggYi9pbmNsdWRlL25ldC9zY20uaFxcbmluZGV4IGM1MjUxOTY2OTM0OWYuLjg2YWU2YmMxMDllYzYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvc2NtLmhcXG4rKysgYi9pbmNsdWRlL25ldC9zY20uaFxcbkBAIC01MCw4ICs1MCw4IEBAIHN0cnVjdCBzY21fY29va2llIHtcXG4gI2VuZGlmXFxuIH07XFxuIFxcbi12b2lkIHNjbV9kZXRhY2hfZmRzKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNjbV9jb29raWUgKnNjbSk7XFxuLXZvaWQgc2NtX2RldGFjaF9mZHNfY29tcGF0KHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNjbV9jb29raWUgKnNjbSk7XFxuK3ZvaWQgc2NtX2RldGFjaF9mZHMoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2NtLCBib29sIG5vdHJ1bmMpO1xcbit2b2lkIHNjbV9kZXRhY2hfZmRzX2NvbXBhdChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20sIGJvb2wgbm90cnVuYyk7XFxuIGludCBfX3NjbV9zZW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNjbV9jb29raWUgKnNjbSk7XFxuIHZvaWQgX19zY21fZGVzdHJveShzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2NtKTtcXG4gc3RydWN0IHNjbV9mcF9saXN0ICpzY21fZnBfZHVwKHN0cnVjdCBzY21fZnBfbGlzdCAqZnBsKTtcXG5AQCAtMTA3LDEzICsxMDcsOCBAQCB2b2lkIHNjbV9yZWN2KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4gdm9pZCBzY21fcmVjdl91bml4KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4gXFx0XFx0ICAgc3RydWN0IHNjbV9jb29raWUgKnNjbSwgaW50IGZsYWdzKTtcXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IHNjbV9yZWN2X29uZV9mZChzdHJ1Y3QgZmlsZSAqZiwgaW50IF9fdXNlciAqdWZkLFxcbi1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBmbGFncylcXG4te1xcbi1cXHRpZiAoIXVmZClcXG4tXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuLVxcdHJldHVybiByZWNlaXZlX2ZkKGYsIHVmZCwgZmxhZ3MpO1xcbi19XFxuK2ludCBzY21fcmVjdl9vbmVfZmQoc3RydWN0IGZpbGUgKmYsIGludCBfX3VzZXIgKnVmZCwgdW5zaWduZWQgaW50IGZsYWdzLFxcbitcXHRcXHQgICAgYm9vbCBub3RydW5jKTtcXG4gXFxuICNlbmRpZiAvKiBfX0xJTlVYX05FVF9TQ01fSCAqL1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NvY2tldC5oIGIvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NvY2tldC5oXFxuaW5kZXggNTNiNWE4YzAwMmIxZS4uODRlYTdiOTI5MzZlMiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvc29ja2V0LmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvc29ja2V0LmhcXG5AQCAtMTUwLDYgKzE1MCw4IEBAXFxuICNkZWZpbmUgU09fSU5RXFx0XFx0XFx0ODRcXG4gI2RlZmluZSBTQ01fSU5RXFx0XFx0XFx0U09fSU5RXFxuIFxcbisjZGVmaW5lIFNPX1JJR0hUU19OT1RSVU5DXFx0ODVcXG4rXFxuICNpZiAhZGVmaW5lZChfX0tFUk5FTF9fKVxcbiBcXG4gI2lmIF9fQklUU19QRVJfTE9ORyA9PSA2NCB8fCAoZGVmaW5lZChfX3g4Nl82NF9fKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKF9fSUxQMzJfXykpXFxuZGlmZiAtLWdpdCBhL25ldC9jb21wYXQuYyBiL25ldC9jb21wYXQuY1xcbmluZGV4IGQ2OGNmOWMzYWFkNWYuLjZiZGY0YTJjOTA3N2QgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvbXBhdC5jXFxuKysrIGIvbmV0L2NvbXBhdC5jXFxuQEAgLTI4Niw3ICsyODYsNyBAQCBzdGF0aWMgaW50IHNjbV9tYXhfZmRzX2NvbXBhdChzdHJ1Y3QgbXNnaGRyICptc2cpXFxuIFxcdHJldHVybiAobXNnLVxcdTAwM2Vtc2dfY29udHJvbGxlbiAtIHNpemVvZihzdHJ1Y3QgY29tcGF0X2Ntc2doZHIpKSAvIHNpemVvZihpbnQpO1xcbiB9XFxuIFxcbi12b2lkIHNjbV9kZXRhY2hfZmRzX2NvbXBhdChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20pXFxuK3ZvaWQgc2NtX2RldGFjaF9mZHNfY29tcGF0KHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNjbV9jb29raWUgKnNjbSwgYm9vbCBub3RydW5jKVxcbiB7XFxuIFxcdHN0cnVjdCBjb21wYXRfY21zZ2hkciBfX3VzZXIgKmNtID1cXG4gXFx0XFx0KHN0cnVjdCBjb21wYXRfY21zZ2hkciBfX3VzZXIgKiltc2ctXFx1MDAzZW1zZ19jb250cm9sX3VzZXI7XFxuQEAgLTI5Niw3ICsyOTYsNyBAQCB2b2lkIHNjbV9kZXRhY2hfZmRzX2NvbXBhdChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20pXFxuIFxcdGludCBlcnIgPSAwLCBpO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGZkbWF4OyBpKyspIHtcXG4tXFx0XFx0ZXJyID0gc2NtX3JlY3Zfb25lX2ZkKHNjbS1cXHUwMDNlZnAtXFx1MDAzZWZwW2ldLCBjbXNnX2RhdGEgKyBpLCBvX2ZsYWdzKTtcXG4rXFx0XFx0ZXJyID0gc2NtX3JlY3Zfb25lX2ZkKHNjbS1cXHUwMDNlZnAtXFx1MDAzZWZwW2ldLCBjbXNnX2RhdGEgKyBpLCBvX2ZsYWdzLCBub3RydW5jKTtcXG4gXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NjbS5jIGIvbmV0L2NvcmUvc2NtLmNcXG5pbmRleCBlZWMxM2Y1MGVjYWY2Li5mMGQ0NGVjZGIxMWZjIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL3NjbS5jXFxuKysrIGIvbmV0L2NvcmUvc2NtLmNcXG5AQCAtMzUxLDcgKzM1MSwzMSBAQCBzdGF0aWMgaW50IHNjbV9tYXhfZmRzKHN0cnVjdCBtc2doZHIgKm1zZylcXG4gXFx0cmV0dXJuIChtc2ctXFx1MDAzZW1zZ19jb250cm9sbGVuIC0gc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKSkgLyBzaXplb2YoaW50KTtcXG4gfVxcbiBcXG4tdm9pZCBzY21fZGV0YWNoX2ZkcyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20pXFxuK2ludCBzY21fcmVjdl9vbmVfZmQoc3RydWN0IGZpbGUgKmYsIGludCBfX3VzZXIgKnVmZCwgdW5zaWduZWQgaW50IGZsYWdzLFxcbitcXHRcXHQgICAgYm9vbCBub3RydW5jKVxcbit7XFxuK1xcdGludCBlcnJvcjtcXG4rXFxuK1xcdGlmICghdWZkKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuK1xcdGVycm9yID0gc2VjdXJpdHlfZmlsZV9yZWNlaXZlKGYpO1xcbitcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdHJldHVybiBub3RydW5jID8gcHV0X3VzZXIoZXJyb3IsIHVmZCkgOiBlcnJvcjtcXG4rXFxuK1xcdEZEX1BSRVBBUkUoZmRmLCBmbGFncywgZ2V0X2ZpbGUoZikpO1xcbitcXHRpZiAoZmRmLmVycilcXG4rXFx0XFx0cmV0dXJuIGZkZi5lcnI7XFxuK1xcbitcXHRlcnJvciA9IHB1dF91c2VyKGZkX3ByZXBhcmVfZmQoZmRmKSwgdWZkKTtcXG4rXFx0aWYgKGVycm9yKVxcbitcXHRcXHRyZXR1cm4gZXJyb3I7XFxuK1xcbitcXHRfX3JlY2VpdmVfc29jayhmZF9wcmVwYXJlX2ZpbGUoZmRmKSk7XFxuK1xcdHJldHVybiBmZF9wdWJsaXNoKGZkZik7XFxuK31cXG4rXFxuK3ZvaWQgc2NtX2RldGFjaF9mZHMoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2NtLCBib29sIG5vdHJ1bmMpXFxuIHtcXG4gXFx0c3RydWN0IGNtc2doZHIgX191c2VyICpjbSA9XFxuIFxcdFxcdChfX2ZvcmNlIHN0cnVjdCBjbXNnaGRyIF9fdXNlciAqKW1zZy1cXHUwMDNlbXNnX2NvbnRyb2xfdXNlcjtcXG5AQCAtMzY1LDEyICszODksMTIgQEAgdm9pZCBzY21fZGV0YWNoX2ZkcyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20pXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGlmIChtc2ctXFx1MDAzZW1zZ19mbGFncyBcXHUwMDI2IE1TR19DTVNHX0NPTVBBVCkge1xcbi1cXHRcXHRzY21fZGV0YWNoX2Zkc19jb21wYXQobXNnLCBzY20pO1xcbitcXHRcXHRzY21fZGV0YWNoX2Zkc19jb21wYXQobXNnLCBzY20sIG5vdHJ1bmMpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBmZG1heDsgaSsrKSB7XFxuLVxcdFxcdGVyciA9IHNjbV9yZWN2X29uZV9mZChzY20tXFx1MDAzZWZwLVxcdTAwM2VmcFtpXSwgY21zZ19kYXRhICsgaSwgb19mbGFncyk7XFxuK1xcdFxcdGVyciA9IHNjbV9yZWN2X29uZV9mZChzY20tXFx1MDAzZWZwLVxcdTAwM2VmcFtpXSwgY21zZ19kYXRhICsgaSwgb19mbGFncywgbm90cnVuYyk7XFxuIFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0fVxcbkBAIC01MjMsOSArNTQ3LDYgQEAgc3RhdGljIGJvb2wgX19zY21fcmVjdl9jb21tb24oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxuIFxcbiBcXHRzY21fcGFzc2VjKHNrLCBtc2csIHNjbSk7XFxuIFxcbi1cXHRpZiAoc2NtLVxcdTAwM2VmcClcXG4tXFx0XFx0c2NtX2RldGFjaF9mZHMobXNnLCBzY20pO1xcbi1cXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuQEAgLTU0NSw2ICs1NjYsMTMgQEAgdm9pZCBzY21fcmVjdl91bml4KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4gXFx0aWYgKCFfX3NjbV9yZWN2X2NvbW1vbihzb2NrLVxcdTAwM2VzaywgbXNnLCBzY20sIGZsYWdzKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0aWYgKHNjbS1cXHUwMDNlZnApIHtcXG4rXFx0XFx0c3RydWN0IHVuaXhfc29jayAqdTtcXG4rXFxuK1xcdFxcdHUgPSB1bml4X3NrKHNvY2stXFx1MDAzZXNrKTtcXG4rXFx0XFx0c2NtX2RldGFjaF9mZHMobXNnLCBzY20sIFJFQURfT05DRSh1LVxcdTAwM2VzY21fcmlnaHRzX25vdHJ1bmMpKTtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKHNvY2stXFx1MDAzZXNrLVxcdTAwM2Vza19zY21fcGlkZmQpXFxuIFxcdFxcdHNjbV9waWRmZF9yZWN2KG1zZywgc2NtKTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC91bml4L2FmX3VuaXguYyBiL25ldC91bml4L2FmX3VuaXguY1xcbmluZGV4IDEwZWQ5NDIxZTQzYWEuLjAzY2UyM2E0ZWJlZTEgMTAwNjQ0XFxuLS0tIGEvbmV0L3VuaXgvYWZfdW5peC5jXFxuKysrIGIvbmV0L3VuaXgvYWZfdW5peC5jXFxuQEAgLTkyMiw2ICs5MjIsNyBAQCBzdGF0aWMgYm9vbCB1bml4X2N1c3RvbV9zb2Nrb3B0KGludCBvcHRuYW1lKVxcbiB7XFxuIFxcdHN3aXRjaCAob3B0bmFtZSkge1xcbiBcXHRjYXNlIFNPX0lOUTpcXG4rXFx0Y2FzZSBTT19SSUdIVFNfTk9UUlVOQzpcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG5AQCAtOTUwLDEzICs5NTEsMjEgQEAgc3RhdGljIGludCB1bml4X3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4gXFx0c3dpdGNoIChvcHRuYW1lKSB7XFxuIFxcdGNhc2UgU09fSU5ROlxcbiBcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3R5cGUgIT0gU09DS19TVFJFQU0pXFxuLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVOT1BST1RPT1BUO1xcbiBcXG4gXFx0XFx0aWYgKHZhbCBcXHUwMDNlIDEgfHwgdmFsIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHRcXHRXUklURV9PTkNFKHUtXFx1MDAzZXJlY3Ztc2dfaW5xLCB2YWwpO1xcbiBcXHRcXHRicmVhaztcXG4rXFxuK1xcdGNhc2UgU09fUklHSFRTX05PVFJVTkM6XFxuK1xcdFxcdGlmICh2YWwgXFx1MDAzZSAxIHx8IHZhbCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0V1JJVEVfT05DRSh1LVxcdTAwM2VzY21fcmlnaHRzX25vdHJ1bmMsIHZhbCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0dXJuIC1FTk9QUk9UT09QVDtcXG4gXFx0fVxcbkBAIC0xMDA2LDYgKzEwMTUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB1bml4X2RncmFtX29wcyA9IHtcXG4gI2VuZGlmXFxuIFxcdC5saXN0ZW4gPVxcdHNvY2tfbm9fbGlzdGVuLFxcbiBcXHQuc2h1dGRvd24gPVxcdHVuaXhfc2h1dGRvd24sXFxuK1xcdC5zZXRzb2Nrb3B0ID1cXHR1bml4X3NldHNvY2tvcHQsXFxuIFxcdC5zZW5kbXNnID1cXHR1bml4X2RncmFtX3NlbmRtc2csXFxuIFxcdC5yZWFkX3NrYiA9XFx0dW5peF9yZWFkX3NrYixcXG4gXFx0LnJlY3Ztc2cgPVxcdHVuaXhfZGdyYW1fcmVjdm1zZyxcXG5AQCAtMTAzMCw2ICsxMDQwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgdW5peF9zZXFwYWNrZXRfb3BzID0ge1xcbiAjZW5kaWZcXG4gXFx0Lmxpc3RlbiA9XFx0dW5peF9saXN0ZW4sXFxuIFxcdC5zaHV0ZG93biA9XFx0dW5peF9zaHV0ZG93bixcXG4rXFx0LnNldHNvY2tvcHQgPVxcdHVuaXhfc2V0c29ja29wdCxcXG4gXFx0LnNlbmRtc2cgPVxcdHVuaXhfc2VxcGFja2V0X3NlbmRtc2csXFxuIFxcdC5yZWN2bXNnID1cXHR1bml4X3NlcXBhY2tldF9yZWN2bXNnLFxcbiBcXHQubW1hcCA9XFx0XFx0c29ja19ub19tbWFwLFxcbkBAIC0xMTQzLDkgKzExNTQsMTAgQEAgc3RhdGljIGludCB1bml4X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcXG4gXFx0aWYgKHByb3RvY29sIFxcdTAwMjZcXHUwMDI2IHByb3RvY29sICE9IFBGX1VOSVgpXFxuIFxcdFxcdHJldHVybiAtRVBST1RPTk9TVVBQT1JUO1xcbiBcXG4rXFx0c2V0X2JpdChTT0NLX0NVU1RPTV9TT0NLT1BULCBcXHUwMDI2c29jay1cXHUwMDNlZmxhZ3MpO1xcbitcXG4gXFx0c3dpdGNoIChzb2NrLVxcdTAwM2V0eXBlKSB7XFxuIFxcdGNhc2UgU09DS19TVFJFQU06XFxuLVxcdFxcdHNldF9iaXQoU09DS19DVVNUT01fU09DS09QVCwgXFx1MDAyNnNvY2stXFx1MDAzZWZsYWdzKTtcXG4gXFx0XFx0c29jay1cXHUwMDNlb3BzID0gXFx1MDAyNnVuaXhfc3RyZWFtX29wcztcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdFxcdC8qXFxuQEAgLTE3NDMsOSArMTc1NSwxMCBAQCBzdGF0aWMgaW50IHVuaXhfc3RyZWFtX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZFxcbiBcXHRpbml0X3BlZXJjcmVkKG5ld3NrLCBcXHUwMDI2cGVlcmNyZWQpO1xcbiBcXG4gXFx0bmV3dSA9IHVuaXhfc2sobmV3c2spO1xcbitcXHRvdGhlcnUgPSB1bml4X3NrKG90aGVyKTtcXG4gXFx0bmV3dS1cXHUwMDNlbGlzdGVuZXIgPSBvdGhlcjtcXG4rXFx0bmV3dS1cXHUwMDNlc2NtX3JpZ2h0c19ub3RydW5jID0gb3RoZXJ1LVxcdTAwM2VzY21fcmlnaHRzX25vdHJ1bmM7XFxuIFxcdFJDVV9JTklUX1BPSU5URVIobmV3c2stXFx1MDAzZXNrX3dxLCBcXHUwMDI2bmV3dS1cXHUwMDNlcGVlcl93cSk7XFxuLVxcdG90aGVydSA9IHVuaXhfc2sob3RoZXIpO1xcbiBcXG4gXFx0LyogY29weSBhZGRyZXNzIGluZm9ybWF0aW9uIGZyb20gbGlzdGVuaW5nIHRvIG5ldyBzb2NrXFxuIFxcdCAqXFxuQEAgLTE4NjUsOCArMTg3OCw3IEBAIHN0YXRpYyBpbnQgdW5peF9hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jayxcXG4gXFx0c2tiX2ZyZWVfZGF0YWdyYW0oc2ssIHNrYik7XFxuIFxcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcXHUwMDI2dW5peF9zayhzayktXFx1MDAzZXBlZXJfd2FpdCk7XFxuIFxcbi1cXHRpZiAodHNrLVxcdTAwM2Vza190eXBlID09IFNPQ0tfU1RSRUFNKVxcbi1cXHRcXHRzZXRfYml0KFNPQ0tfQ1VTVE9NX1NPQ0tPUFQsIFxcdTAwMjZuZXdzb2NrLVxcdTAwM2VmbGFncyk7XFxuK1xcdHNldF9iaXQoU09DS19DVVNUT01fU09DS09QVCwgXFx1MDAyNm5ld3NvY2stXFx1MDAzZWZsYWdzKTtcXG4gXFxuIFxcdC8qIGF0dGFjaCBhY2NlcHRlZCBzb2NrIHRvIHNvY2tldCAqL1xcbiBcXHR1bml4X3N0YXRlX2xvY2sodHNrKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4Ly5naXRpZ25vcmVcXG5pbmRleCA5NzMxNzY2NDQxMDM2Li45NTRmMDk1OGRkMDM0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4Ly5naXRpZ25vcmVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC8uZ2l0aWdub3JlXFxuQEAgLTMsNiArMyw4IEBAIG1zZ19vb2JcXG4gc2NtX2lucVxcbiBzY21fcGlkZmRcXG4gc2NtX3JpZ2h0c1xcbitzY21fcmlnaHRzX2RlbmlhbF9sc21cXG4rc2NtX3JpZ2h0c19kZW5pYWxfbHNtLmJwZi5vXFxuIHNvX3BlZWtfb2ZmXFxuIHVuaXhfY29ubmVjdFxcbiB1bml4X2Nvbm5yZXNldFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L01ha2VmaWxlXFxuaW5kZXggNTdkMTU5ODAzYTNhYi4uYTY2ZjEwZmIwYzIzMSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L01ha2VmaWxlXFxuQEAgLTExLDEwICsxMSwxOCBAQCBURVNUX0dFTl9QUk9HUyA6PSBcXFxcXFxuIFxcdHNjbV9pbnEgXFxcXFxcbiBcXHRzY21fcGlkZmQgXFxcXFxcbiBcXHRzY21fcmlnaHRzIFxcXFxcXG4rXFx0c2NtX3JpZ2h0c19kZW5pYWxfbHNtIFxcXFxcXG4gXFx0c29fcGVla19vZmYgXFxcXFxcbiBcXHR1bml4X2Nvbm5lY3QgXFxcXFxcbiBcXHR1bml4X2Nvbm5yZXNldCBcXFxcXFxuIFxcdHVuaXhfbGlzdGVuIFxcXFxcXG4gIyBlbmQgb2YgVEVTVF9HRU5fUFJPR1NcXG4gXFxuK1RFU1RfR0VOX0ZJTEVTIDo9IHNjbV9yaWdodHNfZGVuaWFsX2xzbS5icGYub1xcbitcXG4gaW5jbHVkZSAuLi8uLi9saWIubWtcXG4raW5jbHVkZSAuLi9icGYubWtcXG4rXFxuKyQoT1VUUFVUKS9zY21fcmlnaHRzX2RlbmlhbF9sc206ICQoQlBGT0JKKVxcbiskKE9VVFBVVCkvc2NtX3JpZ2h0c19kZW5pYWxfbHNtOiBDRkxBR1MgKz0gLUkkKFNDUkFUQ0hfRElSKS9pbmNsdWRlXFxuKyQoT1VUUFVUKS9zY21fcmlnaHRzX2RlbmlhbF9sc206IExETElCUyArPSAtbGVsZiAtbHpcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvY29uZmlnXFxuaW5kZXggNDFkYmIwM2M3NDdlYi4uNDY4ZjdhMGJiNjRlNiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9jb25maWdcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9jb25maWdcXG5AQCAtMiwzICsyLDEwIEBAIENPTkZJR19BRl9VTklYX09PQj15XFxuIENPTkZJR19VTklYPXlcXG4gQ09ORklHX1VOSVhfRElBRz1tXFxuIENPTkZJR19VU0VSX05TPXlcXG4rQ09ORklHX0JQRj15XFxuK0NPTkZJR19CUEZfU1lTQ0FMTD15XFxuK0NPTkZJR19CUEZfRVZFTlRTPXlcXG4rQ09ORklHX0JQRl9KSVQ9eVxcbitDT05GSUdfU0VDVVJJVFk9eVxcbitDT05GSUdfQlBGX0xTTT15XFxuK0NPTkZJR19ERUJVR19JTkZPX0JURj15XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHNfZGVuaWFsX2xzbS5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHNfZGVuaWFsX2xzbS5icGYuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNGYyNDE0NDY1YmZkM1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzX2RlbmlhbF9sc20uYnBmLmNcXG5AQCAtMCwwICsxLDM2IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXFx1MDAzZVxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuK1xcbitzdHJ1Y3QgaW5vZGUge1xcbitcXHR1bnNpZ25lZCBsb25nIGlfaW5vO1xcbit9IF9fYXR0cmlidXRlX18oKHByZXNlcnZlX2FjY2Vzc19pbmRleCkpO1xcbitcXG4rc3RydWN0IGZpbGUge1xcbitcXHRzdHJ1Y3QgaW5vZGUgKmZfaW5vZGU7XFxuK30gX19hdHRyaWJ1dGVfXygocHJlc2VydmVfYWNjZXNzX2luZGV4KSk7XFxuK1xcbitzdHJ1Y3Qge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0hBU0gpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDE2KTtcXG4rXFx0X190eXBlKGtleSwgX191NjQpO1xcdC8qIGlub2RlIG51bWJlciAqL1xcbitcXHRfX3R5cGUodmFsdWUsIF9fdTMyKTtcXHQvKiB0Z2lkIG9mIHRoZSByZWNlaXZlciBiZWluZyB0ZXN0ZWQgKi9cXG4rfSBkZW5pZWRfaW5vZGVzIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuK1NFQyhcXFwibHNtL2ZpbGVfcmVjZWl2ZVxcXCIpXFxuK2ludCBCUEZfUFJPRyhzY21fcmlnaHRzX2RlbnksIHN0cnVjdCBmaWxlICpmaWxlKVxcbit7XFxuK1xcdF9fdTMyIHRnaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSBcXHUwMDNlXFx1MDAzZSAzMjtcXG4rXFx0X191NjQgaW5vID0gZmlsZS1cXHUwMDNlZl9pbm9kZS1cXHUwMDNlaV9pbm87XFxuK1xcdF9fdTMyICpvd25lcjtcXG4rXFxuK1xcdG93bmVyID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2ZGVuaWVkX2lub2RlcywgXFx1MDAyNmlubyk7XFxuK1xcdGlmIChvd25lciBcXHUwMDI2XFx1MDAyNiAqb3duZXIgPT0gdGdpZClcXG4rXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHNfZGVuaWFsX2xzbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvc2NtX3JpZ2h0c19kZW5pYWxfbHNtLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjk0MWI3ZGVjZjc5ODBcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvc2NtX3JpZ2h0c19kZW5pYWxfbHNtLmNcXG5AQCAtMCwwICsxLDI4NSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisjZGVmaW5lIF9HTlVfU09VUkNFXFxuKyNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZmNudGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRsaWIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvc29ja2V0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvc3RhdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3R5cGVzLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2xpYmJwZi5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImtzZWxmdGVzdF9oYXJuZXNzLmhcXFwiXFxuK1xcbisjaWZuZGVmIFNPX1JJR0hUU19OT1RSVU5DXFxuKyNkZWZpbmUgU09fUklHSFRTX05PVFJVTkMgODVcXG4rI2VuZGlmXFxuK1xcbisjZGVmaW5lIE5SX0ZJTEVTIDJcXG4rXFxuKy8qIFBlci1maWxlIGNvbnRlbnQsIHNvIGEgcmVjZWl2ZWQgZmQgY2FuIGJlIG1hdGNoZWQgdG8gdGhlIGZpbGUgc2VudCAqL1xcbisjZGVmaW5lIFNFQ1JFVChuKSBcXFwic2VjcmV0ICVkXFxcIiwgKG4pXFxuK1xcbisvKiBJbmRpY2VzIGludG8gdGhlIHNvY2tldHBhaXIgKi9cXG4rI2RlZmluZSBTS19TRU5ERVIgMFxcbisjZGVmaW5lIFNLX1JFQ0VJVkVSIDFcXG4rXFxuK0ZJWFRVUkUoc2NtX3JpZ2h0c19kZW5pYWxfYnBmKVxcbit7XFxuK1xcdHN0cnVjdCBicGZfb2JqZWN0ICpvYmo7XFxuK1xcdHN0cnVjdCBicGZfbGluayAqbGluaztcXG4rXFx0aW50IG1hcF9mZDtcXG4rXFx0aW50IHNrWzJdO1xcbitcXHRpbnQgZmlsZXNbTlJfRklMRVNdO1xcbitcXHRfX3U2NCBpbm9zW05SX0ZJTEVTXTtcXG4rXFx0Y2hhciBwYXRoc1tOUl9GSUxFU11bNjRdO1xcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UKHNjbV9yaWdodHNfZGVuaWFsX2JwZilcXG4re1xcbitcXHRpbnQgc29ja190eXBlO1xcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChzY21fcmlnaHRzX2RlbmlhbF9icGYsIHN0cmVhbSlcXG4re1xcbitcXHQuc29ja190eXBlID0gU09DS19TVFJFQU0sXFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlRfQUREKHNjbV9yaWdodHNfZGVuaWFsX2JwZiwgZGdyYW0pXFxuK3tcXG4rXFx0LnNvY2tfdHlwZSA9IFNPQ0tfREdSQU0sXFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlRfQUREKHNjbV9yaWdodHNfZGVuaWFsX2JwZiwgc2VxcGFja2V0KVxcbit7XFxuK1xcdC5zb2NrX3R5cGUgPSBTT0NLX1NFUVBBQ0tFVCxcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfU0VUVVAoc2NtX3JpZ2h0c19kZW5pYWxfYnBmKVxcbit7XFxuK1xcdHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZztcXG4rXFx0Y2hhciBsc21zWzI1Nl0gPSB7fTtcXG4rXFx0aW50IGksIGZkO1xcbitcXG4rXFx0aWYgKGdldGV1aWQoKSAhPSAwKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcInJlcXVpcmVzIHJvb3RcXFwiKTtcXG4rXFxuK1xcdGZkID0gb3BlbihcXFwiL3N5cy9rZXJuZWwvc2VjdXJpdHkvbHNtXFxcIiwgT19SRE9OTFkpO1xcbitcXHRBU1NFUlRfR0UoZmQsIDApO1xcbitcXHRBU1NFUlRfTFQoMCwgcmVhZChmZCwgbHNtcywgc2l6ZW9mKGxzbXMpIC0gMSkpO1xcbitcXHRjbG9zZShmZCk7XFxuK1xcbitcXHRpZiAoIXN0cnN0cihsc21zLCBcXFwiYnBmXFxcIikpXFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwiQlBGIExTTSBub3QgYWN0aXZlIChib290IHdpdGggbHNtPS4uLixicGYpXFxcIik7XFxuK1xcbitcXHRzZWxmLVxcdTAwM2VvYmogPSBicGZfb2JqZWN0X19vcGVuX2ZpbGUoXFxcInNjbV9yaWdodHNfZGVuaWFsX2xzbS5icGYub1xcXCIsIE5VTEwpO1xcbitcXHRBU1NFUlRfTkUoTlVMTCwgc2VsZi1cXHUwMDNlb2JqKTtcXG4rXFx0QVNTRVJUX0VRKDAsIGJwZl9vYmplY3RfX2xvYWQoc2VsZi1cXHUwMDNlb2JqKSk7XFxuK1xcbitcXHRwcm9nID0gYnBmX29iamVjdF9fZmluZF9wcm9ncmFtX2J5X25hbWUoc2VsZi1cXHUwMDNlb2JqLCBcXFwic2NtX3JpZ2h0c19kZW55XFxcIik7XFxuK1xcdEFTU0VSVF9ORShOVUxMLCBwcm9nKTtcXG4rXFxuK1xcdHNlbGYtXFx1MDAzZWxpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoX2xzbShwcm9nKTtcXG4rXFx0QVNTRVJUX05FKE5VTEwsIHNlbGYtXFx1MDAzZWxpbmspO1xcbitcXG4rXFx0c2VsZi1cXHUwMDNlbWFwX2ZkID0gYnBmX29iamVjdF9fZmluZF9tYXBfZmRfYnlfbmFtZShzZWxmLVxcdTAwM2VvYmosXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFwiZGVuaWVkX2lub2Rlc1xcXCIpO1xcbitcXHRBU1NFUlRfR0Uoc2VsZi1cXHUwMDNlbWFwX2ZkLCAwKTtcXG4rXFxuK1xcdEFTU0VSVF9FUSgwLCBzb2NrZXRwYWlyKEFGX1VOSVgsIHZhcmlhbnQtXFx1MDAzZXNvY2tfdHlwZSwgMCwgc2VsZi1cXHUwMDNlc2spKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOUl9GSUxFUzsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBzdGF0IHN0O1xcbitcXG4rXFx0XFx0c25wcmludGYoc2VsZi1cXHUwMDNlcGF0aHNbaV0sIHNpemVvZihzZWxmLVxcdTAwM2VwYXRoc1tpXSksXFxuK1xcdFxcdFxcdCBcXFwiL3RtcC9zY21fcmlnaHRzX2RlbmlhbF9icGYuJWQuWFhYWFhYXFxcIiwgaSk7XFxuK1xcdFxcdHNlbGYtXFx1MDAzZWZpbGVzW2ldID0gbWtzdGVtcChzZWxmLVxcdTAwM2VwYXRoc1tpXSk7XFxuK1xcdFxcdEFTU0VSVF9HRShzZWxmLVxcdTAwM2VmaWxlc1tpXSwgMCk7XFxuK1xcbitcXHRcXHRBU1NFUlRfTFQoMCwgZHByaW50ZihzZWxmLVxcdTAwM2VmaWxlc1tpXSwgU0VDUkVUKGkpKSk7XFxuK1xcbitcXHRcXHRBU1NFUlRfRVEoMCwgZnN0YXQoc2VsZi1cXHUwMDNlZmlsZXNbaV0sIFxcdTAwMjZzdCkpO1xcbitcXHRcXHRzZWxmLVxcdTAwM2Vpbm9zW2ldID0gc3Quc3RfaW5vO1xcbitcXHR9XFxuK31cXG4rXFxuK0ZJWFRVUkVfVEVBUkRPV04oc2NtX3JpZ2h0c19kZW5pYWxfYnBmKVxcbit7XFxuK1xcdGJwZl9saW5rX19kZXN0cm95KHNlbGYtXFx1MDAzZWxpbmspO1xcbitcXHRicGZfb2JqZWN0X19jbG9zZShzZWxmLVxcdTAwM2VvYmopO1xcbitcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBOUl9GSUxFUzsgaSsrKSB7XFxuK1xcdFxcdGlmIChzZWxmLVxcdTAwM2VmaWxlc1tpXSBcXHUwMDNlPSAwKSB7XFxuK1xcdFxcdFxcdGNsb3NlKHNlbGYtXFx1MDAzZWZpbGVzW2ldKTtcXG4rXFx0XFx0XFx0dW5saW5rKHNlbGYtXFx1MDAzZXBhdGhzW2ldKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRjbG9zZShzZWxmLVxcdTAwM2Vza1tTS19TRU5ERVJdKTtcXG4rXFx0Y2xvc2Uoc2VsZi1cXHUwMDNlc2tbU0tfUkVDRUlWRVJdKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBkZW55X2lub2RlKGludCBtYXBfZmQsIF9fdTY0IGlubylcXG4re1xcbitcXHRfX3UzMiB0Z2lkID0gZ2V0cGlkKCk7XFxuK1xcbitcXHRyZXR1cm4gYnBmX21hcF91cGRhdGVfZWxlbShtYXBfZmQsIFxcdTAwMjZpbm8sIFxcdTAwMjZ0Z2lkLCBCUEZfQU5ZKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBzZXRfbm90cnVuYyhpbnQgc2spXFxuK3tcXG4rXFx0aW50IG9uZSA9IDE7XFxuK1xcbitcXHRyZXR1cm4gc2V0c29ja29wdChzaywgU09MX1NPQ0tFVCwgU09fUklHSFRTX05PVFJVTkMsXFxuK1xcdFxcdFxcdCAgXFx1MDAyNm9uZSwgc2l6ZW9mKG9uZSkpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHNlbmRfZmRzKGludCBzaywgaW50ICpmZHMsIGludCBuKVxcbit7XFxuK1xcdGNoYXIgY3RybFtDTVNHX1NQQUNFKE5SX0ZJTEVTICogc2l6ZW9mKGludCkpXSA9IHt9O1xcbitcXHRjaGFyIGRhdGEgPSAneCc7XFxuK1xcdHN0cnVjdCBpb3ZlYyBpb3YgPSB7XFxuK1xcdFxcdC5pb3ZfYmFzZSA9IFxcdTAwMjZkYXRhLFxcbitcXHRcXHQuaW92X2xlbiA9IHNpemVvZihkYXRhKSxcXG4rXFx0fTtcXG4rXFx0c3RydWN0IG1zZ2hkciBtc2cgPSB7XFxuK1xcdFxcdC5tc2dfaW92ID0gXFx1MDAyNmlvdixcXG4rXFx0XFx0Lm1zZ19pb3ZsZW4gPSAxLFxcbitcXHRcXHQubXNnX2NvbnRyb2wgPSBjdHJsLFxcbitcXHRcXHQubXNnX2NvbnRyb2xsZW4gPSBDTVNHX1NQQUNFKG4gKiBzaXplb2YoaW50KSksXFxuK1xcdH07XFxuK1xcdHN0cnVjdCBjbXNnaGRyICpjbXNnID0gQ01TR19GSVJTVEhEUihcXHUwMDI2bXNnKTtcXG4rXFxuK1xcdGNtc2ctXFx1MDAzZWNtc2dfbGV2ZWwgPSBTT0xfU09DS0VUO1xcbitcXHRjbXNnLVxcdTAwM2VjbXNnX3R5cGUgPSBTQ01fUklHSFRTO1xcbitcXHRjbXNnLVxcdTAwM2VjbXNnX2xlbiA9IENNU0dfTEVOKG4gKiBzaXplb2YoaW50KSk7XFxuK1xcdG1lbWNweShDTVNHX0RBVEEoY21zZyksIGZkcywgbiAqIHNpemVvZihpbnQpKTtcXG4rXFxuK1xcdHJldHVybiBzZW5kbXNnKHNrLCBcXHUwMDI2bXNnLCAwKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCByZWN2X2ZkX3Nsb3RzKGludCBzaywgaW50ICpzbG90cywgaW50ICptc2dfZmxhZ3MpXFxuK3tcXG4rXFx0aW50IG5yX3Nsb3RzO1xcbitcXHRjaGFyIGN0cmxbQ01TR19TUEFDRShOUl9GSUxFUyAqIHNpemVvZihpbnQpKV07XFxuK1xcdGNoYXIgZGF0YTtcXG4rXFx0c3RydWN0IGlvdmVjIGlvdiA9IHtcXG4rXFx0XFx0Lmlvdl9iYXNlID0gXFx1MDAyNmRhdGEsXFxuK1xcdFxcdC5pb3ZfbGVuID0gc2l6ZW9mKGRhdGEpLFxcbitcXHR9O1xcbitcXHRzdHJ1Y3QgbXNnaGRyIG1zZyA9IHtcXG4rXFx0XFx0Lm1zZ19pb3YgPSBcXHUwMDI2aW92LFxcbitcXHRcXHQubXNnX2lvdmxlbiA9IDEsXFxuK1xcdFxcdC5tc2dfY29udHJvbCA9IGN0cmwsXFxuK1xcdFxcdC5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjdHJsKSxcXG4rXFx0fTtcXG4rXFx0c3RydWN0IGNtc2doZHIgKmNtc2c7XFxuK1xcbitcXHRpZiAocmVjdm1zZyhzaywgXFx1MDAyNm1zZywgMCkgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHQqbXNnX2ZsYWdzID0gbXNnLm1zZ19mbGFncztcXG4rXFxuK1xcdGNtc2cgPSBDTVNHX0ZJUlNUSERSKFxcdTAwMjZtc2cpO1xcbitcXHRpZiAoIWNtc2cpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0bnJfc2xvdHMgPSAoY21zZy1cXHUwMDNlY21zZ19sZW4gLSBDTVNHX0xFTigwKSkgLyBzaXplb2YoaW50KTtcXG4rXFx0bWVtY3B5KHNsb3RzLCBDTVNHX0RBVEEoY21zZyksIG5yX3Nsb3RzICogc2l6ZW9mKGludCkpO1xcbitcXG4rXFx0cmV0dXJuIG5yX3Nsb3RzO1xcbit9XFxuK1xcbisvKiBQcm92ZSBhIHJlY2VpdmVkIGZkIHdvcmtzIGJ5IHJlYWRpbmcgYmFjayB0aGUgZmlsZSdzIGNvbnRlbnQuICovXFxuK3N0YXRpYyBpbnQgY2hlY2tfc2VjcmV0KGludCBmZCwgaW50IGlkeClcXG4re1xcbitcXHRjaGFyIHdhbnRbMzJdLCBnb3RbMzJdID0ge307XFxuK1xcbitcXHRzbnByaW50Zih3YW50LCBzaXplb2Yod2FudCksIFNFQ1JFVChpZHgpKTtcXG4rXFx0aWYgKHByZWFkKGZkLCBnb3QsIHNpemVvZihnb3QpIC0gMSwgMCkgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRyZXR1cm4gc3RyY21wKHdhbnQsIGdvdCk7XFxuK31cXG4rXFxuK1RFU1RfRihzY21fcmlnaHRzX2RlbmlhbF9icGYsIGFsbF9hbGxvd2VkKVxcbit7XFxuK1xcdGludCBzbG90c1tOUl9GSUxFU10sIG5yX3Nsb3RzLCBmbGFncywgaTtcXG4rXFxuK1xcdEFTU0VSVF9FUSgwLCBzZXRfbm90cnVuYyhzZWxmLVxcdTAwM2Vza1tTS19SRUNFSVZFUl0pKTtcXG4rXFx0QVNTRVJUX05FKC0xLCBzZW5kX2ZkcyhzZWxmLVxcdTAwM2Vza1tTS19TRU5ERVJdLCBzZWxmLVxcdTAwM2VmaWxlcywgTlJfRklMRVMpKTtcXG4rXFx0bnJfc2xvdHMgPSByZWN2X2ZkX3Nsb3RzKHNlbGYtXFx1MDAzZXNrW1NLX1JFQ0VJVkVSXSwgc2xvdHMsIFxcdTAwMjZmbGFncyk7XFxuK1xcbitcXHRBU1NFUlRfRVEoTlJfRklMRVMsIG5yX3Nsb3RzKTtcXG4rXFx0RVhQRUNUX0VRKDAsIGZsYWdzIFxcdTAwMjYgTVNHX0NUUlVOQyk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTlJfRklMRVM7IGkrKykge1xcbitcXHRcXHRBU1NFUlRfR0Uoc2xvdHNbaV0sIDApO1xcbitcXHRcXHRFWFBFQ1RfRVEoMCwgY2hlY2tfc2VjcmV0KHNsb3RzW2ldLCBpKSk7XFxuK1xcdFxcdGNsb3NlKHNsb3RzW2ldKTtcXG4rXFx0fVxcbit9XFxuK1xcbitURVNUX0Yoc2NtX3JpZ2h0c19kZW5pYWxfYnBmLCBmaXJzdF9kZW5pZWQpXFxuK3tcXG4rXFx0aW50IHNsb3RzW05SX0ZJTEVTXSwgbnJfc2xvdHMsIGZsYWdzO1xcbitcXG4rXFx0QVNTRVJUX0VRKDAsIGRlbnlfaW5vZGUoc2VsZi1cXHUwMDNlbWFwX2ZkLCBzZWxmLVxcdTAwM2Vpbm9zWzBdKSk7XFxuK1xcbitcXHRBU1NFUlRfRVEoMCwgc2V0X25vdHJ1bmMoc2VsZi1cXHUwMDNlc2tbU0tfUkVDRUlWRVJdKSk7XFxuK1xcdEFTU0VSVF9ORSgtMSwgc2VuZF9mZHMoc2VsZi1cXHUwMDNlc2tbU0tfU0VOREVSXSwgc2VsZi1cXHUwMDNlZmlsZXMsIE5SX0ZJTEVTKSk7XFxuK1xcdG5yX3Nsb3RzID0gcmVjdl9mZF9zbG90cyhzZWxmLVxcdTAwM2Vza1tTS19SRUNFSVZFUl0sIHNsb3RzLCBcXHUwMDI2ZmxhZ3MpO1xcbitcXG4rXFx0QVNTRVJUX0VRKE5SX0ZJTEVTLCBucl9zbG90cyk7XFxuK1xcdEVYUEVDVF9FUSgwLCBmbGFncyBcXHUwMDI2IE1TR19DVFJVTkMpO1xcbitcXHRFWFBFQ1RfRVEoLUVQRVJNLCBzbG90c1swXSk7XFxuK1xcbitcXHRBU1NFUlRfR0Uoc2xvdHNbMV0sIDApO1xcbitcXHRFWFBFQ1RfRVEoMCwgY2hlY2tfc2VjcmV0KHNsb3RzWzFdLCAxKSk7XFxuK1xcdGNsb3NlKHNsb3RzWzFdKTtcXG4rfVxcbitcXG4rVEVTVF9GKHNjbV9yaWdodHNfZGVuaWFsX2JwZiwgYWxsX2RlbmllZClcXG4re1xcbitcXHRpbnQgc2xvdHNbTlJfRklMRVNdLCBucl9zbG90cywgZmxhZ3MsIGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTlJfRklMRVM7IGkrKylcXG4rXFx0XFx0QVNTRVJUX0VRKDAsIGRlbnlfaW5vZGUoc2VsZi1cXHUwMDNlbWFwX2ZkLCBzZWxmLVxcdTAwM2Vpbm9zW2ldKSk7XFxuK1xcbitcXHRBU1NFUlRfRVEoMCwgc2V0X25vdHJ1bmMoc2VsZi1cXHUwMDNlc2tbU0tfUkVDRUlWRVJdKSk7XFxuK1xcdEFTU0VSVF9ORSgtMSwgc2VuZF9mZHMoc2VsZi1cXHUwMDNlc2tbU0tfU0VOREVSXSwgc2VsZi1cXHUwMDNlZmlsZXMsIE5SX0ZJTEVTKSk7XFxuK1xcdG5yX3Nsb3RzID0gcmVjdl9mZF9zbG90cyhzZWxmLVxcdTAwM2Vza1tTS19SRUNFSVZFUl0sIHNsb3RzLCBcXHUwMDI2ZmxhZ3MpO1xcbitcXG4rXFx0QVNTRVJUX0VRKE5SX0ZJTEVTLCBucl9zbG90cyk7XFxuK1xcdEVYUEVDVF9FUSgwLCBmbGFncyBcXHUwMDI2IE1TR19DVFJVTkMpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX0ZJTEVTOyBpKyspXFxuK1xcdFxcdEVYUEVDVF9FUSgtRVBFUk0sIHNsb3RzW2ldKTtcXG4rfVxcbitcXG4rVEVTVF9GKHNjbV9yaWdodHNfZGVuaWFsX2JwZiwgZGVuaWVkX3dpdGhvdXRfbm90cnVuYylcXG4re1xcbitcXHRpbnQgc2xvdHNbTlJfRklMRVNdLCBucl9zbG90cywgZmxhZ3M7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBCYXNlbGluZSBiZWhhdmlvdXIgd2l0aG91dCBTT19SSUdIVFNfTk9UUlVOQzogdGhlIGZkIGFycmF5IGlzXFxuK1xcdCAqIHRydW5jYXRlZCBhdCB0aGUgZmlyc3QgZGVuaWVkIGZkIGFuZCBNU0dfQ1RSVU5DIGlzIHNldC5cXG4rXFx0ICovXFxuK1xcdEFTU0VSVF9FUSgwLCBkZW55X2lub2RlKHNlbGYtXFx1MDAzZW1hcF9mZCwgc2VsZi1cXHUwMDNlaW5vc1sxXSkpO1xcbitcXG4rXFx0QVNTRVJUX05FKC0xLCBzZW5kX2ZkcyhzZWxmLVxcdTAwM2Vza1tTS19TRU5ERVJdLCBzZWxmLVxcdTAwM2VmaWxlcywgTlJfRklMRVMpKTtcXG4rXFx0bnJfc2xvdHMgPSByZWN2X2ZkX3Nsb3RzKHNlbGYtXFx1MDAzZXNrW1NLX1JFQ0VJVkVSXSwgc2xvdHMsIFxcdTAwMjZmbGFncyk7XFxuK1xcbitcXHRBU1NFUlRfRVEoMSwgbnJfc2xvdHMpO1xcbitcXHRFWFBFQ1RfTkUoMCwgZmxhZ3MgXFx1MDAyNiBNU0dfQ1RSVU5DKTtcXG4rXFxuK1xcdEFTU0VSVF9HRShzbG90c1swXSwgMCk7XFxuK1xcdEVYUEVDVF9FUSgwLCBjaGVja19zZWNyZXQoc2xvdHNbMF0sIDApKTtcXG4rXFx0Y2xvc2Uoc2xvdHNbMF0pO1xcbit9XFxuK1xcbitURVNUX0hBUk5FU1NfTUFJTlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMDowOToyNS4wNjQ4MjY3NjhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4MTYwOTM1MzQ4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVTklYXCIsXG4gICAgXCJDT01QQVRcIixcbiAgICBcIlNFQ1VSSVRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidW5peF9zZXRzb2Nrb3B0XCIsXG4gICAgXCJzY21fcmVjdl9vbmVfZmRcIixcbiAgICBcInNjbV9kZXRhY2hfZmRzXCIsXG4gICAgXCJzY21fZGV0YWNoX2Zkc19jb21wYXRcIixcbiAgICBcInNjbV9yZWN2X3VuaXhcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHNvY2tldCBvcHRpb24gU09fUklHSFRTX05PVFJVTkMgZm9yIEFGX1VOSVggc29ja2V0cy4gVGhpcyBvcHRpb24gbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIFNDTV9SSUdIVFMgd2hlbiBhIGZpbGUgZGVzY3JpcHRvciByZWNlaXZlIGlzIGRlbmllZCBieSBhIHNlY3VyaXR5IG1vZHVsZSAoTFNNKS4gSW5zdGVhZCBvZiB0cnVuY2F0aW5nIHRoZSBmaWxlIGRlc2NyaXB0b3IgYXJyYXkgYW5kIHNldHRpbmcgTVNHX0NUUlVOQywgaXQgcGxhY2VzIHRoZSBlcnJvciBjb2RlIGluIHRoZSB1c2VyJ3MgZmlsZSBkZXNjcmlwdG9yIGFycmF5LiBUaGlzIGludm9sdmVzIGNoYW5nZXMgdG8gY29yZSBBRl9VTklYIHNvY2tldCBvcHRpb24gcGFyc2luZyAodW5peF9zZXRzb2Nrb3B0KSwgc29ja2V0IGNvbm5lY3Rpb24gc3RhdGUgcHJvcGFnYXRpb24sIGFuZCB0aGUgU0NNIG1lc3NhZ2UgcmVjZWl2aW5nIGxvZ2ljIChzY21fcmVjdl9vbmVfZmQsIHNjbV9kZXRhY2hfZmRzLCBzY21fZGV0YWNoX2Zkc19jb21wYXQsIHNjbV9yZWN2X3VuaXgpLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgZXJyb3IgaGFuZGxpbmcgYW5kIGFycmF5IG1hbmlwdWxhdGlvbiBsb2dpYyBkb2VzIG5vdCBpbnRyb2R1Y2UgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgb3IgbGVha3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGU1Y2RiNGE5MzZlMWE3ZDY4ZjczNjFmZjc3NWQ5NjE0MTY0NzdhMzVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyIDIwOjA5OjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oXG5pbmRleCA1ZWY1N2Y4OGRmNmIzLi45NDZhNWZhZDI2OTEyIDEwMDY0NFxuLS0tIGEvYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oXG4rKysgYi9hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmhcbkBAIC0xNTUsNiArMTU1LDggQEBcbiAjZGVmaW5lIFNPX0lOUVx0XHRcdDg0XG4gI2RlZmluZSBTQ01fSU5RXHRcdFx0U09fSU5RXG4gXG4rI2RlZmluZSBTT19SSUdIVFNfTk9UUlVOQyAgICAgIDg1XG4rXG4gI2lmICFkZWZpbmVkKF9fS0VSTkVMX18pXG4gXG4gI2lmIF9fQklUU19QRVJfTE9ORyA9PSA2NFxuZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmhcbmluZGV4IDcyZmIxYjAwNmRhOTMuLmYxNjQxZGRlMTM1ZmMgMTAwNjQ0XG4tLS0gYS9hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaFxuKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmhcbkBAIC0xNjYsNiArMTY2LDggQEBcbiAjZGVmaW5lIFNPX0lOUVx0XHRcdDg0XG4gI2RlZmluZSBTQ01fSU5RXHRcdFx0U09fSU5RXG4gXG4rI2RlZmluZSBTT19SSUdIVFNfTk9UUlVOQyAgICAgIDg1XG4rXG4gI2lmICFkZWZpbmVkKF9fS0VSTkVMX18pXG4gXG4gI2lmIF9fQklUU19QRVJfTE9ORyA9PSA2NFxuZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oXG5pbmRleCBjMTZlYzM2ZGZlZTZiLi5mM2EzODE1YzdkYzI5IDEwMDY0NFxuLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaFxuKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaFxuQEAgLTE0Nyw2ICsxNDcsOCBAQFxuICNkZWZpbmUgU09fSU5RXHRcdFx0MHg0MDUyXG4gI2RlZmluZSBTQ01fSU5RXHRcdFx0U09fSU5RXG4gXG4rI2RlZmluZSBTT19SSUdIVFNfTk9UUlVOQ1x0MHg0MDUzXG4rXG4gI2lmICFkZWZpbmVkKF9fS0VSTkVMX18pXG4gXG4gI2lmIF9fQklUU19QRVJfTE9ORyA9PSA2NFxuZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaFxuaW5kZXggNzFiZWZhMTA5ZTFjZi4uNzkwN2YzYjFmMGVlMCAxMDA2NDRcbi0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaFxuKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oXG5AQCAtMTQ4LDYgKzE0OCw4IEBAXG4gI2RlZmluZSBTT19JTlEgICAgICAgICAgICAgICAgICAgMHgwMDVkXG4gI2RlZmluZSBTQ01fSU5RICAgICAgICAgICAgICAgICAgU09fSU5RXG4gXG4rI2RlZmluZSBTT19SSUdIVFNfTk9UUlVOQyAgICAgICAgMHgwMDVlXG4rXG4gI2lmICFkZWZpbmVkKF9fS0VSTkVMX18pXG4gXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYWZfdW5peC5oIGIvaW5jbHVkZS9uZXQvYWZfdW5peC5oXG5pbmRleCAzNGY1M2RkZTY1Y2VhLi5iYjFiM2RlZTAyZTgyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvYWZfdW5peC5oXG4rKysgYi9pbmNsdWRlL25ldC9hZl91bml4LmhcbkBAIC00OSw2ICs0OSw3IEBAIHN0cnVjdCB1bml4X3NvY2sge1xuIFx0c3RydWN0IHNjbV9zdGF0XHRcdHNjbV9zdGF0O1xuIFx0aW50XHRcdFx0aW5xX2xlbjtcbiBcdGJvb2xcdFx0XHRyZWN2bXNnX2lucTtcbitcdGJvb2xcdFx0XHRzY21fcmlnaHRzX25vdHJ1bmM7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0FGX1VOSVhfT09CKVxuIFx0c3RydWN0IHNrX2J1ZmZcdFx0Km9vYl9za2I7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2NtLmggYi9pbmNsdWRlL25ldC9zY20uaFxuaW5kZXggYzUyNTE5NjY5MzQ5Zi4uODZhZTZiYzEwOWVjNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3NjbS5oXG4rKysgYi9pbmNsdWRlL25ldC9zY20uaFxuQEAgLTUwLDggKzUwLDggQEAgc3RydWN0IHNjbV9jb29raWUge1xuICNlbmRpZlxuIH07XG4gXG4tdm9pZCBzY21fZGV0YWNoX2ZkcyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20pO1xuLXZvaWQgc2NtX2RldGFjaF9mZHNfY29tcGF0KHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNjbV9jb29raWUgKnNjbSk7XG4rdm9pZCBzY21fZGV0YWNoX2ZkcyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20sIGJvb2wgbm90cnVuYyk7XG4rdm9pZCBzY21fZGV0YWNoX2Zkc19jb21wYXQoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2NtLCBib29sIG5vdHJ1bmMpO1xuIGludCBfX3NjbV9zZW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNjbV9jb29raWUgKnNjbSk7XG4gdm9pZCBfX3NjbV9kZXN0cm95KHN0cnVjdCBzY21fY29va2llICpzY20pO1xuIHN0cnVjdCBzY21fZnBfbGlzdCAqc2NtX2ZwX2R1cChzdHJ1Y3Qgc2NtX2ZwX2xpc3QgKmZwbCk7XG5AQCAtMTA3LDEzICsxMDcsOCBAQCB2b2lkIHNjbV9yZWN2KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbiB2b2lkIHNjbV9yZWN2X3VuaXgoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuIFx0XHQgICBzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2NtLCBpbnQgZmxhZ3MpO1xuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNjbV9yZWN2X29uZV9mZChzdHJ1Y3QgZmlsZSAqZiwgaW50IF9fdXNlciAqdWZkLFxuLVx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4te1xuLVx0aWYgKCF1ZmQpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuLVx0cmV0dXJuIHJlY2VpdmVfZmQoZiwgdWZkLCBmbGFncyk7XG4tfVxuK2ludCBzY21fcmVjdl9vbmVfZmQoc3RydWN0IGZpbGUgKmYsIGludCBfX3VzZXIgKnVmZCwgdW5zaWduZWQgaW50IGZsYWdzLFxuK1x0XHQgICAgYm9vbCBub3RydW5jKTtcbiBcbiAjZW5kaWYgLyogX19MSU5VWF9ORVRfU0NNX0ggKi9cbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvc29ja2V0LmggYi9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvc29ja2V0LmhcbmluZGV4IDUzYjVhOGMwMDJiMWUuLjg0ZWE3YjkyOTM2ZTIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvc29ja2V0LmhcbisrKyBiL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaFxuQEAgLTE1MCw2ICsxNTAsOCBAQFxuICNkZWZpbmUgU09fSU5RXHRcdFx0ODRcbiAjZGVmaW5lIFNDTV9JTlFcdFx0XHRTT19JTlFcbiBcbisjZGVmaW5lIFNPX1JJR0hUU19OT1RSVU5DXHQ4NVxuK1xuICNpZiAhZGVmaW5lZChfX0tFUk5FTF9fKVxuIFxuICNpZiBfX0JJVFNfUEVSX0xPTkcgPT0gNjQgfHwgKGRlZmluZWQoX194ODZfNjRfXykgXHUwMDI2XHUwMDI2IGRlZmluZWQoX19JTFAzMl9fKSlcbmRpZmYgLS1naXQgYS9uZXQvY29tcGF0LmMgYi9uZXQvY29tcGF0LmNcbmluZGV4IGQ2OGNmOWMzYWFkNWYuLjZiZGY0YTJjOTA3N2QgMTAwNjQ0XG4tLS0gYS9uZXQvY29tcGF0LmNcbisrKyBiL25ldC9jb21wYXQuY1xuQEAgLTI4Niw3ICsyODYsNyBAQCBzdGF0aWMgaW50IHNjbV9tYXhfZmRzX2NvbXBhdChzdHJ1Y3QgbXNnaGRyICptc2cpXG4gXHRyZXR1cm4gKG1zZy1cdTAwM2Vtc2dfY29udHJvbGxlbiAtIHNpemVvZihzdHJ1Y3QgY29tcGF0X2Ntc2doZHIpKSAvIHNpemVvZihpbnQpO1xuIH1cbiBcbi12b2lkIHNjbV9kZXRhY2hfZmRzX2NvbXBhdChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20pXG4rdm9pZCBzY21fZGV0YWNoX2Zkc19jb21wYXQoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2NtLCBib29sIG5vdHJ1bmMpXG4ge1xuIFx0c3RydWN0IGNvbXBhdF9jbXNnaGRyIF9fdXNlciAqY20gPVxuIFx0XHQoc3RydWN0IGNvbXBhdF9jbXNnaGRyIF9fdXNlciAqKW1zZy1cdTAwM2Vtc2dfY29udHJvbF91c2VyO1xuQEAgLTI5Niw3ICsyOTYsNyBAQCB2b2lkIHNjbV9kZXRhY2hfZmRzX2NvbXBhdChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20pXG4gXHRpbnQgZXJyID0gMCwgaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGZkbWF4OyBpKyspIHtcbi1cdFx0ZXJyID0gc2NtX3JlY3Zfb25lX2ZkKHNjbS1cdTAwM2VmcC1cdTAwM2VmcFtpXSwgY21zZ19kYXRhICsgaSwgb19mbGFncyk7XG4rXHRcdGVyciA9IHNjbV9yZWN2X29uZV9mZChzY20tXHUwMDNlZnAtXHUwMDNlZnBbaV0sIGNtc2dfZGF0YSArIGksIG9fZmxhZ3MsIG5vdHJ1bmMpO1xuIFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRcdGJyZWFrO1xuIFx0fVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NjbS5jIGIvbmV0L2NvcmUvc2NtLmNcbmluZGV4IGVlYzEzZjUwZWNhZjYuLmYwZDQ0ZWNkYjExZmMgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9zY20uY1xuKysrIGIvbmV0L2NvcmUvc2NtLmNcbkBAIC0zNTEsNyArMzUxLDMxIEBAIHN0YXRpYyBpbnQgc2NtX21heF9mZHMoc3RydWN0IG1zZ2hkciAqbXNnKVxuIFx0cmV0dXJuIChtc2ctXHUwMDNlbXNnX2NvbnRyb2xsZW4gLSBzaXplb2Yoc3RydWN0IGNtc2doZHIpKSAvIHNpemVvZihpbnQpO1xuIH1cbiBcbi12b2lkIHNjbV9kZXRhY2hfZmRzKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNjbV9jb29raWUgKnNjbSlcbitpbnQgc2NtX3JlY3Zfb25lX2ZkKHN0cnVjdCBmaWxlICpmLCBpbnQgX191c2VyICp1ZmQsIHVuc2lnbmVkIGludCBmbGFncyxcbitcdFx0ICAgIGJvb2wgbm90cnVuYylcbit7XG4rXHRpbnQgZXJyb3I7XG4rXG4rXHRpZiAoIXVmZClcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXG4rXHRlcnJvciA9IHNlY3VyaXR5X2ZpbGVfcmVjZWl2ZShmKTtcbitcdGlmIChlcnJvcilcbitcdFx0cmV0dXJuIG5vdHJ1bmMgPyBwdXRfdXNlcihlcnJvciwgdWZkKSA6IGVycm9yO1xuK1xuK1x0RkRfUFJFUEFSRShmZGYsIGZsYWdzLCBnZXRfZmlsZShmKSk7XG4rXHRpZiAoZmRmLmVycilcbitcdFx0cmV0dXJuIGZkZi5lcnI7XG4rXG4rXHRlcnJvciA9IHB1dF91c2VyKGZkX3ByZXBhcmVfZmQoZmRmKSwgdWZkKTtcbitcdGlmIChlcnJvcilcbitcdFx0cmV0dXJuIGVycm9yO1xuK1xuK1x0X19yZWNlaXZlX3NvY2soZmRfcHJlcGFyZV9maWxlKGZkZikpO1xuK1x0cmV0dXJuIGZkX3B1Ymxpc2goZmRmKTtcbit9XG4rXG4rdm9pZCBzY21fZGV0YWNoX2ZkcyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20sIGJvb2wgbm90cnVuYylcbiB7XG4gXHRzdHJ1Y3QgY21zZ2hkciBfX3VzZXIgKmNtID1cbiBcdFx0KF9fZm9yY2Ugc3RydWN0IGNtc2doZHIgX191c2VyICopbXNnLVx1MDAzZW1zZ19jb250cm9sX3VzZXI7XG5AQCAtMzY1LDEyICszODksMTIgQEAgdm9pZCBzY21fZGV0YWNoX2ZkcyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20pXG4gXHRcdHJldHVybjtcbiBcbiBcdGlmIChtc2ctXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNiBNU0dfQ01TR19DT01QQVQpIHtcbi1cdFx0c2NtX2RldGFjaF9mZHNfY29tcGF0KG1zZywgc2NtKTtcbitcdFx0c2NtX2RldGFjaF9mZHNfY29tcGF0KG1zZywgc2NtLCBub3RydW5jKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZmRtYXg7IGkrKykge1xuLVx0XHRlcnIgPSBzY21fcmVjdl9vbmVfZmQoc2NtLVx1MDAzZWZwLVx1MDAzZWZwW2ldLCBjbXNnX2RhdGEgKyBpLCBvX2ZsYWdzKTtcbitcdFx0ZXJyID0gc2NtX3JlY3Zfb25lX2ZkKHNjbS1cdTAwM2VmcC1cdTAwM2VmcFtpXSwgY21zZ19kYXRhICsgaSwgb19mbGFncywgbm90cnVuYyk7XG4gXHRcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG5AQCAtNTIzLDkgKzU0Nyw2IEBAIHN0YXRpYyBib29sIF9fc2NtX3JlY3ZfY29tbW9uKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuIFxuIFx0c2NtX3Bhc3NlYyhzaywgbXNnLCBzY20pO1xuIFxuLVx0aWYgKHNjbS1cdTAwM2VmcClcbi1cdFx0c2NtX2RldGFjaF9mZHMobXNnLCBzY20pO1xuLVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuQEAgLTU0NSw2ICs1NjYsMTMgQEAgdm9pZCBzY21fcmVjdl91bml4KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbiBcdGlmICghX19zY21fcmVjdl9jb21tb24oc29jay1cdTAwM2VzaywgbXNnLCBzY20sIGZsYWdzKSlcbiBcdFx0cmV0dXJuO1xuIFxuK1x0aWYgKHNjbS1cdTAwM2VmcCkge1xuK1x0XHRzdHJ1Y3QgdW5peF9zb2NrICp1O1xuK1xuK1x0XHR1ID0gdW5peF9zayhzb2NrLVx1MDAzZXNrKTtcbitcdFx0c2NtX2RldGFjaF9mZHMobXNnLCBzY20sIFJFQURfT05DRSh1LVx1MDAzZXNjbV9yaWdodHNfbm90cnVuYykpO1xuK1x0fVxuK1xuIFx0aWYgKHNvY2stXHUwMDNlc2stXHUwMDNlc2tfc2NtX3BpZGZkKVxuIFx0XHRzY21fcGlkZmRfcmVjdihtc2csIHNjbSk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3VuaXgvYWZfdW5peC5jIGIvbmV0L3VuaXgvYWZfdW5peC5jXG5pbmRleCAxMGVkOTQyMWU0M2FhLi4wM2NlMjNhNGViZWUxIDEwMDY0NFxuLS0tIGEvbmV0L3VuaXgvYWZfdW5peC5jXG4rKysgYi9uZXQvdW5peC9hZl91bml4LmNcbkBAIC05MjIsNiArOTIyLDcgQEAgc3RhdGljIGJvb2wgdW5peF9jdXN0b21fc29ja29wdChpbnQgb3B0bmFtZSlcbiB7XG4gXHRzd2l0Y2ggKG9wdG5hbWUpIHtcbiBcdGNhc2UgU09fSU5ROlxuK1x0Y2FzZSBTT19SSUdIVFNfTk9UUlVOQzpcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gZmFsc2U7XG5AQCAtOTUwLDEzICs5NTEsMjEgQEAgc3RhdGljIGludCB1bml4X3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcdHN3aXRjaCAob3B0bmFtZSkge1xuIFx0Y2FzZSBTT19JTlE6XG4gXHRcdGlmIChzay1cdTAwM2Vza190eXBlICE9IFNPQ0tfU1RSRUFNKVxuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdHJldHVybiAtRU5PUFJPVE9PUFQ7XG4gXG4gXHRcdGlmICh2YWwgXHUwMDNlIDEgfHwgdmFsIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0XHRXUklURV9PTkNFKHUtXHUwMDNlcmVjdm1zZ19pbnEsIHZhbCk7XG4gXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSBTT19SSUdIVFNfTk9UUlVOQzpcbitcdFx0aWYgKHZhbCBcdTAwM2UgMSB8fCB2YWwgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdFdSSVRFX09OQ0UodS1cdTAwM2VzY21fcmlnaHRzX25vdHJ1bmMsIHZhbCk7XG4rXHRcdGJyZWFrO1xuK1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FTk9QUk9UT09QVDtcbiBcdH1cbkBAIC0xMDA2LDYgKzEwMTUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB1bml4X2RncmFtX29wcyA9IHtcbiAjZW5kaWZcbiBcdC5saXN0ZW4gPVx0c29ja19ub19saXN0ZW4sXG4gXHQuc2h1dGRvd24gPVx0dW5peF9zaHV0ZG93bixcbitcdC5zZXRzb2Nrb3B0ID1cdHVuaXhfc2V0c29ja29wdCxcbiBcdC5zZW5kbXNnID1cdHVuaXhfZGdyYW1fc2VuZG1zZyxcbiBcdC5yZWFkX3NrYiA9XHR1bml4X3JlYWRfc2tiLFxuIFx0LnJlY3Ztc2cgPVx0dW5peF9kZ3JhbV9yZWN2bXNnLFxuQEAgLTEwMzAsNiArMTA0MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHVuaXhfc2VxcGFja2V0X29wcyA9IHtcbiAjZW5kaWZcbiBcdC5saXN0ZW4gPVx0dW5peF9saXN0ZW4sXG4gXHQuc2h1dGRvd24gPVx0dW5peF9zaHV0ZG93bixcbitcdC5zZXRzb2Nrb3B0ID1cdHVuaXhfc2V0c29ja29wdCxcbiBcdC5zZW5kbXNnID1cdHVuaXhfc2VxcGFja2V0X3NlbmRtc2csXG4gXHQucmVjdm1zZyA9XHR1bml4X3NlcXBhY2tldF9yZWN2bXNnLFxuIFx0Lm1tYXAgPVx0XHRzb2NrX25vX21tYXAsXG5AQCAtMTE0Myw5ICsxMTU0LDEwIEBAIHN0YXRpYyBpbnQgdW5peF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG4gXHRpZiAocHJvdG9jb2wgXHUwMDI2XHUwMDI2IHByb3RvY29sICE9IFBGX1VOSVgpXG4gXHRcdHJldHVybiAtRVBST1RPTk9TVVBQT1JUO1xuIFxuK1x0c2V0X2JpdChTT0NLX0NVU1RPTV9TT0NLT1BULCBcdTAwMjZzb2NrLVx1MDAzZWZsYWdzKTtcbitcbiBcdHN3aXRjaCAoc29jay1cdTAwM2V0eXBlKSB7XG4gXHRjYXNlIFNPQ0tfU1RSRUFNOlxuLVx0XHRzZXRfYml0KFNPQ0tfQ1VTVE9NX1NPQ0tPUFQsIFx1MDAyNnNvY2stXHUwMDNlZmxhZ3MpO1xuIFx0XHRzb2NrLVx1MDAzZW9wcyA9IFx1MDAyNnVuaXhfc3RyZWFtX29wcztcbiBcdFx0YnJlYWs7XG4gXHRcdC8qXG5AQCAtMTc0Myw5ICsxNzU1LDEwIEBAIHN0YXRpYyBpbnQgdW5peF9zdHJlYW1fY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkXG4gXHRpbml0X3BlZXJjcmVkKG5ld3NrLCBcdTAwMjZwZWVyY3JlZCk7XG4gXG4gXHRuZXd1ID0gdW5peF9zayhuZXdzayk7XG4rXHRvdGhlcnUgPSB1bml4X3NrKG90aGVyKTtcbiBcdG5ld3UtXHUwMDNlbGlzdGVuZXIgPSBvdGhlcjtcbitcdG5ld3UtXHUwMDNlc2NtX3JpZ2h0c19ub3RydW5jID0gb3RoZXJ1LVx1MDAzZXNjbV9yaWdodHNfbm90cnVuYztcbiBcdFJDVV9JTklUX1BPSU5URVIobmV3c2stXHUwMDNlc2tfd3EsIFx1MDAyNm5ld3UtXHUwMDNlcGVlcl93cSk7XG4tXHRvdGhlcnUgPSB1bml4X3NrKG90aGVyKTtcbiBcbiBcdC8qIGNvcHkgYWRkcmVzcyBpbmZvcm1hdGlvbiBmcm9tIGxpc3RlbmluZyB0byBuZXcgc29ja1xuIFx0ICpcbkBAIC0xODY1LDggKzE4NzgsNyBAQCBzdGF0aWMgaW50IHVuaXhfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXG4gXHRza2JfZnJlZV9kYXRhZ3JhbShzaywgc2tiKTtcbiBcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcdTAwMjZ1bml4X3NrKHNrKS1cdTAwM2VwZWVyX3dhaXQpO1xuIFxuLVx0aWYgKHRzay1cdTAwM2Vza190eXBlID09IFNPQ0tfU1RSRUFNKVxuLVx0XHRzZXRfYml0KFNPQ0tfQ1VTVE9NX1NPQ0tPUFQsIFx1MDAyNm5ld3NvY2stXHUwMDNlZmxhZ3MpO1xuK1x0c2V0X2JpdChTT0NLX0NVU1RPTV9TT0NLT1BULCBcdTAwMjZuZXdzb2NrLVx1MDAzZWZsYWdzKTtcbiBcbiBcdC8qIGF0dGFjaCBhY2NlcHRlZCBzb2NrIHRvIHNvY2tldCAqL1xuIFx0dW5peF9zdGF0ZV9sb2NrKHRzayk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4Ly5naXRpZ25vcmVcbmluZGV4IDk3MzE3NjY0NDEwMzYuLjk1NGYwOTU4ZGQwMzQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC8uZ2l0aWdub3JlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC8uZ2l0aWdub3JlXG5AQCAtMyw2ICszLDggQEAgbXNnX29vYlxuIHNjbV9pbnFcbiBzY21fcGlkZmRcbiBzY21fcmlnaHRzXG4rc2NtX3JpZ2h0c19kZW5pYWxfbHNtXG4rc2NtX3JpZ2h0c19kZW5pYWxfbHNtLmJwZi5vXG4gc29fcGVla19vZmZcbiB1bml4X2Nvbm5lY3RcbiB1bml4X2Nvbm5yZXNldFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvTWFrZWZpbGVcbmluZGV4IDU3ZDE1OTgwM2EzYWIuLmE2NmYxMGZiMGMyMzEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvTWFrZWZpbGVcbkBAIC0xMSwxMCArMTEsMTggQEAgVEVTVF9HRU5fUFJPR1MgOj0gXFxcbiBcdHNjbV9pbnEgXFxcbiBcdHNjbV9waWRmZCBcXFxuIFx0c2NtX3JpZ2h0cyBcXFxuK1x0c2NtX3JpZ2h0c19kZW5pYWxfbHNtIFxcXG4gXHRzb19wZWVrX29mZiBcXFxuIFx0dW5peF9jb25uZWN0IFxcXG4gXHR1bml4X2Nvbm5yZXNldCBcXFxuIFx0dW5peF9saXN0ZW4gXFxcbiAjIGVuZCBvZiBURVNUX0dFTl9QUk9HU1xuIFxuK1RFU1RfR0VOX0ZJTEVTIDo9IHNjbV9yaWdodHNfZGVuaWFsX2xzbS5icGYub1xuK1xuIGluY2x1ZGUgLi4vLi4vbGliLm1rXG4raW5jbHVkZSAuLi9icGYubWtcbitcbiskKE9VVFBVVCkvc2NtX3JpZ2h0c19kZW5pYWxfbHNtOiAkKEJQRk9CSilcbiskKE9VVFBVVCkvc2NtX3JpZ2h0c19kZW5pYWxfbHNtOiBDRkxBR1MgKz0gLUkkKFNDUkFUQ0hfRElSKS9pbmNsdWRlXG4rJChPVVRQVVQpL3NjbV9yaWdodHNfZGVuaWFsX2xzbTogTERMSUJTICs9IC1sZWxmIC1selxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L2NvbmZpZ1xuaW5kZXggNDFkYmIwM2M3NDdlYi4uNDY4ZjdhMGJiNjRlNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L2NvbmZpZ1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvY29uZmlnXG5AQCAtMiwzICsyLDEwIEBAIENPTkZJR19BRl9VTklYX09PQj15XG4gQ09ORklHX1VOSVg9eVxuIENPTkZJR19VTklYX0RJQUc9bVxuIENPTkZJR19VU0VSX05TPXlcbitDT05GSUdfQlBGPXlcbitDT05GSUdfQlBGX1NZU0NBTEw9eVxuK0NPTkZJR19CUEZfRVZFTlRTPXlcbitDT05GSUdfQlBGX0pJVD15XG4rQ09ORklHX1NFQ1VSSVRZPXlcbitDT05GSUdfQlBGX0xTTT15XG4rQ09ORklHX0RFQlVHX0lORk9fQlRGPXlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzX2RlbmlhbF9sc20uYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzX2RlbmlhbF9sc20uYnBmLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi40ZjI0MTQ0NjViZmQzXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzX2RlbmlhbF9sc20uYnBmLmNcbkBAIC0wLDAgKzEsMzYgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4rXG4rc3RydWN0IGlub2RlIHtcbitcdHVuc2lnbmVkIGxvbmcgaV9pbm87XG4rfSBfX2F0dHJpYnV0ZV9fKChwcmVzZXJ2ZV9hY2Nlc3NfaW5kZXgpKTtcbitcbitzdHJ1Y3QgZmlsZSB7XG4rXHRzdHJ1Y3QgaW5vZGUgKmZfaW5vZGU7XG4rfSBfX2F0dHJpYnV0ZV9fKChwcmVzZXJ2ZV9hY2Nlc3NfaW5kZXgpKTtcbitcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9IQVNIKTtcbitcdF9fdWludChtYXhfZW50cmllcywgMTYpO1xuK1x0X190eXBlKGtleSwgX191NjQpO1x0LyogaW5vZGUgbnVtYmVyICovXG4rXHRfX3R5cGUodmFsdWUsIF9fdTMyKTtcdC8qIHRnaWQgb2YgdGhlIHJlY2VpdmVyIGJlaW5nIHRlc3RlZCAqL1xuK30gZGVuaWVkX2lub2RlcyBTRUMoXCIubWFwc1wiKTtcbitcbitTRUMoXCJsc20vZmlsZV9yZWNlaXZlXCIpXG4raW50IEJQRl9QUk9HKHNjbV9yaWdodHNfZGVueSwgc3RydWN0IGZpbGUgKmZpbGUpXG4re1xuK1x0X191MzIgdGdpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFx1MDAzZVx1MDAzZSAzMjtcbitcdF9fdTY0IGlubyA9IGZpbGUtXHUwMDNlZl9pbm9kZS1cdTAwM2VpX2lubztcbitcdF9fdTMyICpvd25lcjtcbitcbitcdG93bmVyID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZkZW5pZWRfaW5vZGVzLCBcdTAwMjZpbm8pO1xuK1x0aWYgKG93bmVyIFx1MDAyNlx1MDAyNiAqb3duZXIgPT0gdGdpZClcbitcdFx0cmV0dXJuIC1FUEVSTTtcbitcbitcdHJldHVybiAwO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzX2RlbmlhbF9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHNfZGVuaWFsX2xzbS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOTQxYjdkZWNmNzk4MFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvc2NtX3JpZ2h0c19kZW5pYWxfbHNtLmNcbkBAIC0wLDAgKzEsMjg1IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjZGVmaW5lIF9HTlVfU09VUkNFXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3NvY2tldC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy90eXBlcy5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2xpYmJwZi5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJrc2VsZnRlc3RfaGFybmVzcy5oXCJcbitcbisjaWZuZGVmIFNPX1JJR0hUU19OT1RSVU5DXG4rI2RlZmluZSBTT19SSUdIVFNfTk9UUlVOQyA4NVxuKyNlbmRpZlxuK1xuKyNkZWZpbmUgTlJfRklMRVMgMlxuK1xuKy8qIFBlci1maWxlIGNvbnRlbnQsIHNvIGEgcmVjZWl2ZWQgZmQgY2FuIGJlIG1hdGNoZWQgdG8gdGhlIGZpbGUgc2VudCAqL1xuKyNkZWZpbmUgU0VDUkVUKG4pIFwic2VjcmV0ICVkXCIsIChuKVxuK1xuKy8qIEluZGljZXMgaW50byB0aGUgc29ja2V0cGFpciAqL1xuKyNkZWZpbmUgU0tfU0VOREVSIDBcbisjZGVmaW5lIFNLX1JFQ0VJVkVSIDFcbitcbitGSVhUVVJFKHNjbV9yaWdodHNfZGVuaWFsX2JwZilcbit7XG4rXHRzdHJ1Y3QgYnBmX29iamVjdCAqb2JqO1xuK1x0c3RydWN0IGJwZl9saW5rICpsaW5rO1xuK1x0aW50IG1hcF9mZDtcbitcdGludCBza1syXTtcbitcdGludCBmaWxlc1tOUl9GSUxFU107XG4rXHRfX3U2NCBpbm9zW05SX0ZJTEVTXTtcbitcdGNoYXIgcGF0aHNbTlJfRklMRVNdWzY0XTtcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVChzY21fcmlnaHRzX2RlbmlhbF9icGYpXG4re1xuK1x0aW50IHNvY2tfdHlwZTtcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoc2NtX3JpZ2h0c19kZW5pYWxfYnBmLCBzdHJlYW0pXG4re1xuK1x0LnNvY2tfdHlwZSA9IFNPQ0tfU1RSRUFNLFxuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERChzY21fcmlnaHRzX2RlbmlhbF9icGYsIGRncmFtKVxuK3tcbitcdC5zb2NrX3R5cGUgPSBTT0NLX0RHUkFNLFxuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERChzY21fcmlnaHRzX2RlbmlhbF9icGYsIHNlcXBhY2tldClcbit7XG4rXHQuc29ja190eXBlID0gU09DS19TRVFQQUNLRVQsXG4rfTtcbitcbitGSVhUVVJFX1NFVFVQKHNjbV9yaWdodHNfZGVuaWFsX2JwZilcbit7XG4rXHRzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2c7XG4rXHRjaGFyIGxzbXNbMjU2XSA9IHt9O1xuK1x0aW50IGksIGZkO1xuK1xuK1x0aWYgKGdldGV1aWQoKSAhPSAwKVxuK1x0XHRTS0lQKHJldHVybiwgXCJyZXF1aXJlcyByb290XCIpO1xuK1xuK1x0ZmQgPSBvcGVuKFwiL3N5cy9rZXJuZWwvc2VjdXJpdHkvbHNtXCIsIE9fUkRPTkxZKTtcbitcdEFTU0VSVF9HRShmZCwgMCk7XG4rXHRBU1NFUlRfTFQoMCwgcmVhZChmZCwgbHNtcywgc2l6ZW9mKGxzbXMpIC0gMSkpO1xuK1x0Y2xvc2UoZmQpO1xuK1xuK1x0aWYgKCFzdHJzdHIobHNtcywgXCJicGZcIikpXG4rXHRcdFNLSVAocmV0dXJuLCBcIkJQRiBMU00gbm90IGFjdGl2ZSAoYm9vdCB3aXRoIGxzbT0uLi4sYnBmKVwiKTtcbitcbitcdHNlbGYtXHUwMDNlb2JqID0gYnBmX29iamVjdF9fb3Blbl9maWxlKFwic2NtX3JpZ2h0c19kZW5pYWxfbHNtLmJwZi5vXCIsIE5VTEwpO1xuK1x0QVNTRVJUX05FKE5VTEwsIHNlbGYtXHUwMDNlb2JqKTtcbitcdEFTU0VSVF9FUSgwLCBicGZfb2JqZWN0X19sb2FkKHNlbGYtXHUwMDNlb2JqKSk7XG4rXG4rXHRwcm9nID0gYnBmX29iamVjdF9fZmluZF9wcm9ncmFtX2J5X25hbWUoc2VsZi1cdTAwM2VvYmosIFwic2NtX3JpZ2h0c19kZW55XCIpO1xuK1x0QVNTRVJUX05FKE5VTEwsIHByb2cpO1xuK1xuK1x0c2VsZi1cdTAwM2VsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9sc20ocHJvZyk7XG4rXHRBU1NFUlRfTkUoTlVMTCwgc2VsZi1cdTAwM2VsaW5rKTtcbitcbitcdHNlbGYtXHUwMDNlbWFwX2ZkID0gYnBmX29iamVjdF9fZmluZF9tYXBfZmRfYnlfbmFtZShzZWxmLVx1MDAzZW9iaixcbitcdFx0XHRcdFx0XHQgICAgICAgXCJkZW5pZWRfaW5vZGVzXCIpO1xuK1x0QVNTRVJUX0dFKHNlbGYtXHUwMDNlbWFwX2ZkLCAwKTtcbitcbitcdEFTU0VSVF9FUSgwLCBzb2NrZXRwYWlyKEFGX1VOSVgsIHZhcmlhbnQtXHUwMDNlc29ja190eXBlLCAwLCBzZWxmLVx1MDAzZXNrKSk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9GSUxFUzsgaSsrKSB7XG4rXHRcdHN0cnVjdCBzdGF0IHN0O1xuK1xuK1x0XHRzbnByaW50ZihzZWxmLVx1MDAzZXBhdGhzW2ldLCBzaXplb2Yoc2VsZi1cdTAwM2VwYXRoc1tpXSksXG4rXHRcdFx0IFwiL3RtcC9zY21fcmlnaHRzX2RlbmlhbF9icGYuJWQuWFhYWFhYXCIsIGkpO1xuK1x0XHRzZWxmLVx1MDAzZWZpbGVzW2ldID0gbWtzdGVtcChzZWxmLVx1MDAzZXBhdGhzW2ldKTtcbitcdFx0QVNTRVJUX0dFKHNlbGYtXHUwMDNlZmlsZXNbaV0sIDApO1xuK1xuK1x0XHRBU1NFUlRfTFQoMCwgZHByaW50ZihzZWxmLVx1MDAzZWZpbGVzW2ldLCBTRUNSRVQoaSkpKTtcbitcbitcdFx0QVNTRVJUX0VRKDAsIGZzdGF0KHNlbGYtXHUwMDNlZmlsZXNbaV0sIFx1MDAyNnN0KSk7XG4rXHRcdHNlbGYtXHUwMDNlaW5vc1tpXSA9IHN0LnN0X2lubztcbitcdH1cbit9XG4rXG4rRklYVFVSRV9URUFSRE9XTihzY21fcmlnaHRzX2RlbmlhbF9icGYpXG4re1xuK1x0YnBmX2xpbmtfX2Rlc3Ryb3koc2VsZi1cdTAwM2VsaW5rKTtcbitcdGJwZl9vYmplY3RfX2Nsb3NlKHNlbGYtXHUwMDNlb2JqKTtcbitcbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBOUl9GSUxFUzsgaSsrKSB7XG4rXHRcdGlmIChzZWxmLVx1MDAzZWZpbGVzW2ldIFx1MDAzZT0gMCkge1xuK1x0XHRcdGNsb3NlKHNlbGYtXHUwMDNlZmlsZXNbaV0pO1xuK1x0XHRcdHVubGluayhzZWxmLVx1MDAzZXBhdGhzW2ldKTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0Y2xvc2Uoc2VsZi1cdTAwM2Vza1tTS19TRU5ERVJdKTtcbitcdGNsb3NlKHNlbGYtXHUwMDNlc2tbU0tfUkVDRUlWRVJdKTtcbit9XG4rXG4rc3RhdGljIGludCBkZW55X2lub2RlKGludCBtYXBfZmQsIF9fdTY0IGlubylcbit7XG4rXHRfX3UzMiB0Z2lkID0gZ2V0cGlkKCk7XG4rXG4rXHRyZXR1cm4gYnBmX21hcF91cGRhdGVfZWxlbShtYXBfZmQsIFx1MDAyNmlubywgXHUwMDI2dGdpZCwgQlBGX0FOWSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgc2V0X25vdHJ1bmMoaW50IHNrKVxuK3tcbitcdGludCBvbmUgPSAxO1xuK1xuK1x0cmV0dXJuIHNldHNvY2tvcHQoc2ssIFNPTF9TT0NLRVQsIFNPX1JJR0hUU19OT1RSVU5DLFxuK1x0XHRcdCAgXHUwMDI2b25lLCBzaXplb2Yob25lKSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgc2VuZF9mZHMoaW50IHNrLCBpbnQgKmZkcywgaW50IG4pXG4re1xuK1x0Y2hhciBjdHJsW0NNU0dfU1BBQ0UoTlJfRklMRVMgKiBzaXplb2YoaW50KSldID0ge307XG4rXHRjaGFyIGRhdGEgPSAneCc7XG4rXHRzdHJ1Y3QgaW92ZWMgaW92ID0ge1xuK1x0XHQuaW92X2Jhc2UgPSBcdTAwMjZkYXRhLFxuK1x0XHQuaW92X2xlbiA9IHNpemVvZihkYXRhKSxcbitcdH07XG4rXHRzdHJ1Y3QgbXNnaGRyIG1zZyA9IHtcbitcdFx0Lm1zZ19pb3YgPSBcdTAwMjZpb3YsXG4rXHRcdC5tc2dfaW92bGVuID0gMSxcbitcdFx0Lm1zZ19jb250cm9sID0gY3RybCxcbitcdFx0Lm1zZ19jb250cm9sbGVuID0gQ01TR19TUEFDRShuICogc2l6ZW9mKGludCkpLFxuK1x0fTtcbitcdHN0cnVjdCBjbXNnaGRyICpjbXNnID0gQ01TR19GSVJTVEhEUihcdTAwMjZtc2cpO1xuK1xuK1x0Y21zZy1cdTAwM2VjbXNnX2xldmVsID0gU09MX1NPQ0tFVDtcbitcdGNtc2ctXHUwMDNlY21zZ190eXBlID0gU0NNX1JJR0hUUztcbitcdGNtc2ctXHUwMDNlY21zZ19sZW4gPSBDTVNHX0xFTihuICogc2l6ZW9mKGludCkpO1xuK1x0bWVtY3B5KENNU0dfREFUQShjbXNnKSwgZmRzLCBuICogc2l6ZW9mKGludCkpO1xuK1xuK1x0cmV0dXJuIHNlbmRtc2coc2ssIFx1MDAyNm1zZywgMCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmVjdl9mZF9zbG90cyhpbnQgc2ssIGludCAqc2xvdHMsIGludCAqbXNnX2ZsYWdzKVxuK3tcbitcdGludCBucl9zbG90cztcbitcdGNoYXIgY3RybFtDTVNHX1NQQUNFKE5SX0ZJTEVTICogc2l6ZW9mKGludCkpXTtcbitcdGNoYXIgZGF0YTtcbitcdHN0cnVjdCBpb3ZlYyBpb3YgPSB7XG4rXHRcdC5pb3ZfYmFzZSA9IFx1MDAyNmRhdGEsXG4rXHRcdC5pb3ZfbGVuID0gc2l6ZW9mKGRhdGEpLFxuK1x0fTtcbitcdHN0cnVjdCBtc2doZHIgbXNnID0ge1xuK1x0XHQubXNnX2lvdiA9IFx1MDAyNmlvdixcbitcdFx0Lm1zZ19pb3ZsZW4gPSAxLFxuK1x0XHQubXNnX2NvbnRyb2wgPSBjdHJsLFxuK1x0XHQubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY3RybCksXG4rXHR9O1xuK1x0c3RydWN0IGNtc2doZHIgKmNtc2c7XG4rXG4rXHRpZiAocmVjdm1zZyhzaywgXHUwMDI2bXNnLCAwKSBcdTAwM2MgMClcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0Km1zZ19mbGFncyA9IG1zZy5tc2dfZmxhZ3M7XG4rXG4rXHRjbXNnID0gQ01TR19GSVJTVEhEUihcdTAwMjZtc2cpO1xuK1x0aWYgKCFjbXNnKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdG5yX3Nsb3RzID0gKGNtc2ctXHUwMDNlY21zZ19sZW4gLSBDTVNHX0xFTigwKSkgLyBzaXplb2YoaW50KTtcbitcdG1lbWNweShzbG90cywgQ01TR19EQVRBKGNtc2cpLCBucl9zbG90cyAqIHNpemVvZihpbnQpKTtcbitcbitcdHJldHVybiBucl9zbG90cztcbit9XG4rXG4rLyogUHJvdmUgYSByZWNlaXZlZCBmZCB3b3JrcyBieSByZWFkaW5nIGJhY2sgdGhlIGZpbGUncyBjb250ZW50LiAqL1xuK3N0YXRpYyBpbnQgY2hlY2tfc2VjcmV0KGludCBmZCwgaW50IGlkeClcbit7XG4rXHRjaGFyIHdhbnRbMzJdLCBnb3RbMzJdID0ge307XG4rXG4rXHRzbnByaW50Zih3YW50LCBzaXplb2Yod2FudCksIFNFQ1JFVChpZHgpKTtcbitcdGlmIChwcmVhZChmZCwgZ290LCBzaXplb2YoZ290KSAtIDEsIDApIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRyZXR1cm4gc3RyY21wKHdhbnQsIGdvdCk7XG4rfVxuK1xuK1RFU1RfRihzY21fcmlnaHRzX2RlbmlhbF9icGYsIGFsbF9hbGxvd2VkKVxuK3tcbitcdGludCBzbG90c1tOUl9GSUxFU10sIG5yX3Nsb3RzLCBmbGFncywgaTtcbitcbitcdEFTU0VSVF9FUSgwLCBzZXRfbm90cnVuYyhzZWxmLVx1MDAzZXNrW1NLX1JFQ0VJVkVSXSkpO1xuK1x0QVNTRVJUX05FKC0xLCBzZW5kX2ZkcyhzZWxmLVx1MDAzZXNrW1NLX1NFTkRFUl0sIHNlbGYtXHUwMDNlZmlsZXMsIE5SX0ZJTEVTKSk7XG4rXHRucl9zbG90cyA9IHJlY3ZfZmRfc2xvdHMoc2VsZi1cdTAwM2Vza1tTS19SRUNFSVZFUl0sIHNsb3RzLCBcdTAwMjZmbGFncyk7XG4rXG4rXHRBU1NFUlRfRVEoTlJfRklMRVMsIG5yX3Nsb3RzKTtcbitcdEVYUEVDVF9FUSgwLCBmbGFncyBcdTAwMjYgTVNHX0NUUlVOQyk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9GSUxFUzsgaSsrKSB7XG4rXHRcdEFTU0VSVF9HRShzbG90c1tpXSwgMCk7XG4rXHRcdEVYUEVDVF9FUSgwLCBjaGVja19zZWNyZXQoc2xvdHNbaV0sIGkpKTtcbitcdFx0Y2xvc2Uoc2xvdHNbaV0pO1xuK1x0fVxuK31cbitcbitURVNUX0Yoc2NtX3JpZ2h0c19kZW5pYWxfYnBmLCBmaXJzdF9kZW5pZWQpXG4re1xuK1x0aW50IHNsb3RzW05SX0ZJTEVTXSwgbnJfc2xvdHMsIGZsYWdzO1xuK1xuK1x0QVNTRVJUX0VRKDAsIGRlbnlfaW5vZGUoc2VsZi1cdTAwM2VtYXBfZmQsIHNlbGYtXHUwMDNlaW5vc1swXSkpO1xuK1xuK1x0QVNTRVJUX0VRKDAsIHNldF9ub3RydW5jKHNlbGYtXHUwMDNlc2tbU0tfUkVDRUlWRVJdKSk7XG4rXHRBU1NFUlRfTkUoLTEsIHNlbmRfZmRzKHNlbGYtXHUwMDNlc2tbU0tfU0VOREVSXSwgc2VsZi1cdTAwM2VmaWxlcywgTlJfRklMRVMpKTtcbitcdG5yX3Nsb3RzID0gcmVjdl9mZF9zbG90cyhzZWxmLVx1MDAzZXNrW1NLX1JFQ0VJVkVSXSwgc2xvdHMsIFx1MDAyNmZsYWdzKTtcbitcbitcdEFTU0VSVF9FUShOUl9GSUxFUywgbnJfc2xvdHMpO1xuK1x0RVhQRUNUX0VRKDAsIGZsYWdzIFx1MDAyNiBNU0dfQ1RSVU5DKTtcbitcdEVYUEVDVF9FUSgtRVBFUk0sIHNsb3RzWzBdKTtcbitcbitcdEFTU0VSVF9HRShzbG90c1sxXSwgMCk7XG4rXHRFWFBFQ1RfRVEoMCwgY2hlY2tfc2VjcmV0KHNsb3RzWzFdLCAxKSk7XG4rXHRjbG9zZShzbG90c1sxXSk7XG4rfVxuK1xuK1RFU1RfRihzY21fcmlnaHRzX2RlbmlhbF9icGYsIGFsbF9kZW5pZWQpXG4re1xuK1x0aW50IHNsb3RzW05SX0ZJTEVTXSwgbnJfc2xvdHMsIGZsYWdzLCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfRklMRVM7IGkrKylcbitcdFx0QVNTRVJUX0VRKDAsIGRlbnlfaW5vZGUoc2VsZi1cdTAwM2VtYXBfZmQsIHNlbGYtXHUwMDNlaW5vc1tpXSkpO1xuK1xuK1x0QVNTRVJUX0VRKDAsIHNldF9ub3RydW5jKHNlbGYtXHUwMDNlc2tbU0tfUkVDRUlWRVJdKSk7XG4rXHRBU1NFUlRfTkUoLTEsIHNlbmRfZmRzKHNlbGYtXHUwMDNlc2tbU0tfU0VOREVSXSwgc2VsZi1cdTAwM2VmaWxlcywgTlJfRklMRVMpKTtcbitcdG5yX3Nsb3RzID0gcmVjdl9mZF9zbG90cyhzZWxmLVx1MDAzZXNrW1NLX1JFQ0VJVkVSXSwgc2xvdHMsIFx1MDAyNmZsYWdzKTtcbitcbitcdEFTU0VSVF9FUShOUl9GSUxFUywgbnJfc2xvdHMpO1xuK1x0RVhQRUNUX0VRKDAsIGZsYWdzIFx1MDAyNiBNU0dfQ1RSVU5DKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX0ZJTEVTOyBpKyspXG4rXHRcdEVYUEVDVF9FUSgtRVBFUk0sIHNsb3RzW2ldKTtcbit9XG4rXG4rVEVTVF9GKHNjbV9yaWdodHNfZGVuaWFsX2JwZiwgZGVuaWVkX3dpdGhvdXRfbm90cnVuYylcbit7XG4rXHRpbnQgc2xvdHNbTlJfRklMRVNdLCBucl9zbG90cywgZmxhZ3M7XG4rXG4rXHQvKlxuK1x0ICogQmFzZWxpbmUgYmVoYXZpb3VyIHdpdGhvdXQgU09fUklHSFRTX05PVFJVTkM6IHRoZSBmZCBhcnJheSBpc1xuK1x0ICogdHJ1bmNhdGVkIGF0IHRoZSBmaXJzdCBkZW5pZWQgZmQgYW5kIE1TR19DVFJVTkMgaXMgc2V0LlxuK1x0ICovXG4rXHRBU1NFUlRfRVEoMCwgZGVueV9pbm9kZShzZWxmLVx1MDAzZW1hcF9mZCwgc2VsZi1cdTAwM2Vpbm9zWzFdKSk7XG4rXG4rXHRBU1NFUlRfTkUoLTEsIHNlbmRfZmRzKHNlbGYtXHUwMDNlc2tbU0tfU0VOREVSXSwgc2VsZi1cdTAwM2VmaWxlcywgTlJfRklMRVMpKTtcbitcdG5yX3Nsb3RzID0gcmVjdl9mZF9zbG90cyhzZWxmLVx1MDAzZXNrW1NLX1JFQ0VJVkVSXSwgc2xvdHMsIFx1MDAyNmZsYWdzKTtcbitcbitcdEFTU0VSVF9FUSgxLCBucl9zbG90cyk7XG4rXHRFWFBFQ1RfTkUoMCwgZmxhZ3MgXHUwMDI2IE1TR19DVFJVTkMpO1xuK1xuK1x0QVNTRVJUX0dFKHNsb3RzWzBdLCAwKTtcbitcdEVYUEVDVF9FUSgwLCBjaGVja19zZWNyZXQoc2xvdHNbMF0sIDApKTtcbitcdGNsb3NlKHNsb3RzWzBdKTtcbit9XG4rXG4rVEVTVF9IQVJORVNTX01BSU5cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDIwOjA5OjI1LjA2NDgyOTU4OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNTI5NDU3OTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV3IFNPX1JJR0hUU19OT1RSVU5DIFNvY2tldCBPcHRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGludHJvZHVjaW5nIGBTT19SSUdIVFNfTk9UUlVOQ2AgZm9yIEFGX1VOSVggc29ja2V0cy4gVGhlIGNvcmUgaWRlYSBpcyB0aGF0IHdoZW4gYSBzZWN1cml0eSBtb2R1bGUgbGlrZSBhbiBMU00gZGVuaWVzIHRoZSByZWNlaXB0IG9mIGEgZmlsZSBkZXNjcmlwdG9yIHZpYSBgU0NNX1JJR0hUU2AsIGluc3RlYWQgb2YgdHJ1bmNhdGluZyB0aGUgRkQgYXJyYXkgYW5kIHNldHRpbmcgYE1TR19DVFJVTkNgLCB3ZSBub3cgaGF2ZSB0aGUgb3B0aW9uIHRvICpub3QqIHRydW5jYXRlLiBJbnN0ZWFkLCB0aGUgZXJyb3IgY29kZSAobGlrZSBgLUVQRVJNYCkgZ2V0cyBwbGFjZWQgZGlyZWN0bHkgaW50byB0aGUgdXNlcidzIEZEIGFycmF5LCBlc3NlbnRpYWxseSBzaWduYWxpbmcgdGhlIGRlbmlhbCBtb3JlIGV4cGxpY2l0bHkuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlIHRvIHRoZSBzdGFuZGFyZCBiZWhhdmlvciwgYWx0aG91Z2ggdGFyZ2V0ZWQuXG5cbkxldCdzIGJyZWFrIGRvd24gdGhlIGRpZmYgdG8gc2VlIHRoZSBzcGVjaWZpY3MuIFdlJ3ZlIGdvdDpcblxuKiAgIFRoZSBvYnZpb3VzIGhlYWRlciBmaWxlIHVwZGF0ZXMgaW4gYGFyY2gvKi9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oYCBhbmQgYGluY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaGAgdG8gZGVmaW5lIHRoZSBuZXcgYFNPX1JJR0hUU19OT1RSVU5DYCBvcHRpb24gKHZhbHVlIDg1KS5cbiogICBJbiBgaW5jbHVkZS9uZXQvYWZfdW5peC5oYCwgYSBuZXcgYGJvb2wgc2NtX3JpZ2h0c19ub3RydW5jO2AgbWVtYmVyIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBgdW5peF9zb2NrYCBzdHJ1Y3R1cmUuXG4qICAgVGhlIGBpbmNsdWRlL25ldC9zY20uaGAgbW9kaWZpY2F0aW9ucyBhcmUgaW50ZXJlc3RpbmcuIFRoZSBgc2NtX2RldGFjaF9mZHNgLCBgc2NtX2RldGFjaF9mZHNfY29tcGF0YCwgYW5kIGBzY21fcmVjdl9vbmVfZmRgIGZ1bmN0aW9ucyBub3cgYWNjZXB0IGEgYGJvb2wgbm90cnVuY2AgYXJndW1lbnQsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB0aGUgbmV3IHNvY2tldCBvcHRpb24gY29udHJvbHMuXG4qICAgYG5ldC9jb21wYXQuY2AgaGFzIGJlZW4gdXBkYXRlZCB0byBjb3JyZWN0bHkgcGFzcyB0aGUgYG5vdHJ1bmNgIGFyZ3VtZW50IHRvIGBzY21fcmVjdl9vbmVfZmRgLlxuKiAgIFRoZSBjcnVjaWFsIGNoYW5nZSBpcyBpbiBgbmV0L2NvcmUvc2NtLmNgLCB3aGVyZSBgc2NtX3JlY3Zfb25lX2ZkYCBub3cgaGFuZGxlcyB0aGUgZXJyb3IgcmV0dXJuIGNvcnJlY3RseSBpZiBgbm90cnVuY2AgaXMgdHJ1ZSwgYnkgcHV0dGluZyB0aGUgZXJyb3IgaW50byB0aGUgdXNlcidzIEZEIGFycmF5LlxuKiAgIEZpbmFsbHksIGBuZXQvdW5peC9hZl91bml4LmNgIGludGVncmF0ZXMgYFNPX1JJR0hUU19OT1RSVU5DYCBpbnRvIGB1bml4X2N1c3RvbV9zb2Nrb3B0YCBhbmQgYHVuaXhfc2V0c29ja29wdGAsIGFuZCBhbHNvIHByb3BhZ2F0ZXMgdGhlIGBzY21fcmlnaHRzX25vdHJ1bmNgIGZsYWcgZHVyaW5nIGB1bml4X3N0cmVhbV9jb25uZWN0YCwgd2hpY2ggbWFrZXMgc2Vuc2UuXG4qICAgQW5kLCBnb29kLCB0aGVyZSdzIGEgc2VsZnRlc3QgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHNfZGVuaWFsX2xzbS5jYC4gVGhpcyBpcyBlc3NlbnRpYWwgdG8gc2hvdyBjb3JyZWN0IGJlaGF2aW9yLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbmV0d29ya2luZyBhbmQgQUZfVU5JWCBsb2dpYywgc28gaXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgYSBzb2xpZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cbk15IHByaW1hcnkgZm9jdXMgc3ltYm9scyBhcmUgY2xlYXJseTpcblxuKiAgIGB1bml4X3NldHNvY2tvcHRgIOKAkyBiZWNhdXNlIGl04oCZcyB3aGVyZSB0aGUgc29ja2V0IG9wdGlvbiBpcyBzZXQuXG4qICAgYHNjbV9yZWN2X29uZV9mZGAg4oCTIHRoaXMgaXMgdGhlIGNvcmUgb2YgdGhlIG5ldyBsb2dpYywgaG93IHRoZSBlcnJvciBpcyBoYW5kbGVkLlxuKiAgIGBzY21fZGV0YWNoX2Zkc2AgYW5kIGBzY21fZGV0YWNoX2Zkc19jb21wYXRgIOKAkyBib3RoIGFyZSBjb3JlIHRvIEZEIGhhbmRsaW5nIGFuZCB0aGUgbG9naWMgZmxvdy5cbiogICBgdW5peF9zdHJlYW1fY29ubmVjdGAgLSB0aGUgcGF0aCBtaWdodCBiZSB2YWx1YWJsZS5cblxuSSdsbCBkb3VibGUtY2hlY2sgYG5ldC9jb3JlL3NjbS5jYCBmb3IgYHNjbV9yZWN2X29uZV9mZGAgYW5kIGBzY21fZGV0YWNoX2Zkc2AsIGFuZCBgbmV0L3VuaXgvYWZfdW5peC5jYCBmb3IgYHVuaXhfc2V0c29ja29wdGAgZm9yIG1vcmUgZGV0YWlsLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgcmVxdWlyZWQgYENPTkZJR19gIG9wdGlvbnM6IGBDT05GSUdfVU5JWGAgKG9idmlvdXMpLCBgQ09ORklHX1NFQ1VSSVRZYCAoZm9yIHRoZSBMU00sIGFsdGhvdWdoIHRoZSBmZWF0dXJlIGl0c2VsZiBkb2Vzbid0IGluaGVyZW50bHkgZGVwZW5kIG9uIGl0LCBidXQgdGhlIGRlbmlhbCBtYWtlcyB0aGUgbW9zdCBzZW5zZSksIGFuZCBgQ09ORklHX0NPTVBBVGAgKGZvciB0aGUgY29tcGF0IGZ1bmN0aW9uKS5cblxuVGhlbiBJJ2xsIHJ1biBzb21lIHRvb2xpbmcgdG8gdGVzdCB0aGlzIG91dCB0aG9yb3VnaGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDMzMywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDIwOjA5OjM3LjU5NDI5MTAyNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTIxNTg4NTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNjbV9yZWN2X29uZV9mZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9zY20uaD0xMDc9dm9pZCBzY21fcmVjdl91bml4KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbmluY2x1ZGUvbmV0L3NjbS5oLTEwOS1cXG5pbmNsdWRlL25ldC9zY20uaDoxMTA6aW50IHNjbV9yZWN2X29uZV9mZChzdHJ1Y3QgZmlsZSAqZiwgaW50IF9fdXNlciAqdWZkLCB1bnNpZ25lZCBpbnQgZmxhZ3MsXFxuaW5jbHVkZS9uZXQvc2NtLmgtMTExLVxcdFxcdCAgICBib29sIG5vdHJ1bmMpO1xcbi0tXFxubmV0L2NvbXBhdC5jPTI4OT12b2lkIHNjbV9kZXRhY2hfZmRzX2NvbXBhdChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20sIGJvb2wgbm90cnVuYylcXG4tLVxcbm5ldC9jb21wYXQuYy0yOTgtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGZkbWF4OyBpKyspIHtcXG5uZXQvY29tcGF0LmM6Mjk5OlxcdFxcdGVyciA9IHNjbV9yZWN2X29uZV9mZChzY20tXFx1MDAzZWZwLVxcdTAwM2VmcFtpXSwgY21zZ19kYXRhICsgaSwgb19mbGFncywgbm90cnVuYyk7XFxubmV0L2NvbXBhdC5jLTMwMC1cXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9jb3JlL3NjbS5jPTM0Nz1zdGF0aWMgaW50IHNjbV9tYXhfZmRzKHN0cnVjdCBtc2doZHIgKm1zZylcXG4tLVxcbm5ldC9jb3JlL3NjbS5jLTM1My1cXG5uZXQvY29yZS9zY20uYzozNTQ6aW50IHNjbV9yZWN2X29uZV9mZChzdHJ1Y3QgZmlsZSAqZiwgaW50IF9fdXNlciAqdWZkLCB1bnNpZ25lZCBpbnQgZmxhZ3MsXFxubmV0L2NvcmUvc2NtLmMtMzU1LVxcdFxcdCAgICBib29sIG5vdHJ1bmMpXFxuLS1cXG5uZXQvY29yZS9zY20uYz0zNzg9dm9pZCBzY21fZGV0YWNoX2ZkcyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20sIGJvb2wgbm90cnVuYylcXG4tLVxcbm5ldC9jb3JlL3NjbS5jLTM5Ni1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZmRtYXg7IGkrKykge1xcbm5ldC9jb3JlL3NjbS5jOjM5NzpcXHRcXHRlcnIgPSBzY21fcmVjdl9vbmVfZmQoc2NtLVxcdTAwM2VmcC1cXHUwMDNlZnBbaV0sIGNtc2dfZGF0YSArIGksIG9fZmxhZ3MsIG5vdHJ1bmMpO1xcbm5ldC9jb3JlL3NjbS5jLTM5OC1cXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjA6MDk6NDMuNzE1ODg2NTU0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU1MTcxMDY5MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCdzIFNjb3BlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBhIGZldyBrZXkgYXJlYXM6IGBzY21fcmVjdl9vbmVfZmRgLCBgc2NtX2RldGFjaF9mZHNgLCBgc2NtX2RldGFjaF9mZHNfY29tcGF0YCwgYHVuaXhfc2V0c29ja29wdGAsIGFuZCBgc2NtX3JlY3ZfdW5peGAuIFRoZXNlIGFyZSBhbGwgcHJldHR5IGZvY3VzZWQgZW50cnkgcG9pbnRzLCB3aGljaCBpcyBnb29kLiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhc3BlY3RzIHRvIGtlZXAgaW4gbWluZC5cblxuVGhlIGJpZyBvbmUgaXMgYENPTkZJR19VTklYYCwgb2J2aW91c2x5LCBhcyB0aGlzIHNlZW1zIGNlbnRyYWwgdG8gdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4gYENPTkZJR19DT01QQVRgIGlzIGxpbmtlZCB0byBgc2NtX2RldGFjaF9mZHNfY29tcGF0YCwgd2hpY2ggaXMgYXMgZXhwZWN0ZWQuIEFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM/IExvb2tpbmcgYXQgdGhlIHNlbGZ0ZXN0IGludHJvZHVjZXMgYSByYW5nZSBvZiBgQ09ORklHX0JQRmAgb3B0aW9ucywgYWxvbmcgd2l0aCBgQ09ORklHX1NFQ1VSSVRZYCBhbmQgYENPTkZJR19ERUJVR19JTkZPX0JURmAuXG5cbkhvd2V2ZXIsIGZvY3VzaW5nIG9uIHRoZSBjb3JlIGZlYXR1cmUgSSdtIGFzc2Vzc2luZyAoYFNPX1JJR0hUU19OT1RSVU5DYCksIHRoZSBjb2RlIGl0c2VsZiBpbiBgbmV0L3VuaXgvYWZfdW5peC5jYCBhbmQgYG5ldC9jb3JlL3NjbS5jYCBvbmx5IHN0cmljdGx5IHJlbGllcyBvbiBgQ09ORklHX1VOSVhgIGZvciBjb21waWxhdGlvbi4gSXQncyBub3QgaW5oZXJlbnRseSBkZXBlbmRlbnQgb24gQlBGIG9yIExTTSBmb3IgdGhlIGNvZGUgdG8gYmUgY29tcGlsZWQgYW5kIHJlYWNoYWJsZS5cblxuQnV0LCBub3cgdGhhdCBJJ20gY29uc2lkZXJpbmcgZXJyb3IgcGF0aHMsIHNwZWNpZmljYWxseSB3aXRoaW4gYHNjbV9yZWN2X29uZV9mZGA6XG5cbmBgYGNcblx0ZXJyb3IgPSBzZWN1cml0eV9maWxlX3JlY2VpdmUoZik7XG5cdGlmIChlcnJvcilcblx0XHRyZXR1cm4gbm90cnVuYyA/IHB1dF91c2VyKGVycm9yLCB1ZmQpIDogZXJyb3I7XG5gYGBcblxuVG8gKnRyaWdnZXIqIHRoZSBlcnJvciBwYXRoIGhlcmUsIGBzZWN1cml0eV9maWxlX3JlY2VpdmVgIG5lZWRzIHRvIHJldHVybiBhbiBlcnJvci4gVGhhdCBjb3VsZCBiZSBkdWUgdG8gYW4gTFNNIGRlbnlpbmcgYWNjZXNzIG9yIHNvbWUgb3RoZXIgZmFpbHVyZSB3aXRoaW4gdGhlIGBzZWN1cml0eV9maWxlX3JlY2VpdmVgIGZ1bmN0aW9uLiBTbywgd2hpbGUgYENPTkZJR19VTklYYCBpcyB0aGUgZXNzZW50aWFsIHJlcXVpcmVtZW50LCBpdCB3b3VsZCBiZSBiZW5lZmljaWFsIHRvIGhhdmUgYENPTkZJR19TRUNVUklUWWAgYW5kIHBvc3NpYmx5IGFuIExTTSBlbmFibGVkIGZvciBhIGNvbXByZWhlbnNpdmUgdGVzdCwgYnV0IGZvciB0aGUgY29kZSB0byBiZSBjb21waWxlZCBgQ09ORklHX1VOSVhgIGlzIHRoZSBvbmx5IHN0cmljdCByZXF1aXJlbWVudC5cblxuTm93LCBsZXQgbWUgc2hpZnQgZ2VhcnMgYW5kIGNoZWNrIGBuZXQvdW5peC9hZl91bml4LmNgIGZvciBhbnkgc3BlY2lmaWNzIG9uIGB1bml4X3NldHNvY2tvcHRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ0MCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMDoxMDowOS4yMzI5OTYwNjNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIwMzk0NDk0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1bml4X3NldHNvY2tvcHRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3VuaXgvYWZfdW5peC5jPTkyMT1zdGF0aWMgYm9vbCB1bml4X2N1c3RvbV9zb2Nrb3B0KGludCBvcHRuYW1lKVxcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jLTkzMS1cXG5uZXQvdW5peC9hZl91bml4LmM6OTMyOnN0YXRpYyBpbnQgdW5peF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxubmV0L3VuaXgvYWZfdW5peC5jLTkzMy1cXHRcXHRcXHQgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jPTk3Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB1bml4X3N0cmVhbV9vcHMgPSB7XFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmMtOTkxLVxcdC5zaHV0ZG93biA9XFx0dW5peF9zaHV0ZG93bixcXG5uZXQvdW5peC9hZl91bml4LmM6OTkyOlxcdC5zZXRzb2Nrb3B0ID1cXHR1bml4X3NldHNvY2tvcHQsXFxubmV0L3VuaXgvYWZfdW5peC5jLTk5My1cXHQuc2VuZG1zZyA9XFx0dW5peF9zdHJlYW1fc2VuZG1zZyxcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYz0xMDAyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHVuaXhfZGdyYW1fb3BzID0ge1xcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jLTEwMTctXFx0LnNodXRkb3duID1cXHR1bml4X3NodXRkb3duLFxcbm5ldC91bml4L2FmX3VuaXguYzoxMDE4OlxcdC5zZXRzb2Nrb3B0ID1cXHR1bml4X3NldHNvY2tvcHQsXFxubmV0L3VuaXgvYWZfdW5peC5jLTEwMTktXFx0LnNlbmRtc2cgPVxcdHVuaXhfZGdyYW1fc2VuZG1zZyxcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYz0xMDI3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHVuaXhfc2VxcGFja2V0X29wcyA9IHtcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYy0xMDQyLVxcdC5zaHV0ZG93biA9XFx0dW5peF9zaHV0ZG93bixcXG5uZXQvdW5peC9hZl91bml4LmM6MTA0MzpcXHQuc2V0c29ja29wdCA9XFx0dW5peF9zZXRzb2Nrb3B0LFxcbm5ldC91bml4L2FmX3VuaXguYy0xMDQ0LVxcdC5zZW5kbXNnID1cXHR1bml4X3NlcXBhY2tldF9zZW5kbXNnLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMDoxMDoxNC40MzY5NDg4MDZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTIxNDgxMDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IERlZXAgRGl2ZSBpbnRvIFNvY2tldCBTZWN1cml0eSoqXG5cbk9rYXksIHNvIEknbSByZWFsbHkgZGlnZ2luZyBpbnRvIHRoZSBzZWN1cml0eSBhc3BlY3RzIG9mIHNvY2tldCBjb21tdW5pY2F0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aCBVTklYIHNvY2tldHMuIEkgbmVlZCB0byBnZXQgYSByb2NrLXNvbGlkIHVuZGVyc3RhbmRpbmcgb2Ygd2hlcmUgdGhpbmdzIGNhbiBnbyB3cm9uZyBhbmQgd2hhdCBjaGVja3MgYXJlIGluIHBsYWNlLiBNeSBrZXkgZm9jdXMgYXJlYXMgcmlnaHQgbm93IGFyZTogYHVuaXhfc2V0c29ja29wdGAsIGBzY21fcmVjdl9vbmVfZmRgLCBgc2NtX2RldGFjaF9mZHNgLCBgc2NtX2RldGFjaF9mZHNfY29tcGF0YCwgYW5kIGBzY21fcmVjdl91bml4YC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgYXQgdGhlIGhlYXJ0IG9mIHRyYW5zZmVycmluZyBmaWxlIGRlc2NyaXB0b3JzIG92ZXIgVU5JWCBkb21haW4gc29ja2V0cywgYW5kIHRoZXJlZm9yZSByZXByZXNlbnQgdGhlIG1vc3QgbGlrZWx5IHNwb3RzIGZvciB2dWxuZXJhYmlsaXR5LlxuXG5JJ20gYWxzbyBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBjb25maWd1cmF0aW9ucyB0aGF0IGRpY3RhdGUgaG93IHRoZXNlIGZ1bmN0aW9ucyBiZWhhdmUuIEkgaGF2ZSBgVU5JWGAgYW5kIGBDT01QQVRgIGZsYWdzIGluIG1pbmQgYXMgdGhlc2Ugc2VlbSB0byBiZSB0aGUgbW9zdCByZWxldmFudC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcsIGFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucyB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBJIG5lZWQgYSBjb21wbGV0ZSBwaWN0dXJlLlxuXG5JIGtub3cgdGhlIHNlbGZ0ZXN0IGxldmVyYWdlcyBCUEYgTFNNIHRvIGRlbnkgZmlsZSBkZXNjcmlwdG9yIHJlY2VwdGlvbiwgYWN0aW5nIGFzIGEga2luZCBvZiBjYW5hcnkuIFRoYXQgZ290IG1lIHRoaW5raW5nIGFib3V0IG90aGVyIGZhaWx1cmUgcGF0aHMgZm9yIGBzZWN1cml0eV9maWxlX3JlY2VpdmVgLiBDb3VsZCB0aGVyZSBiZSBvdGhlciB3YXlzIHRoaXMgY2hlY2sgbWlnaHQgZmFpbCwgcGVyaGFwcyBkdWUgdG8gZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zIG9yIGNvbmRpdGlvbnM/IEkgbmVlZCB0byBrbm93IGFsbCB0aGUgYW5nbGVzIGhlcmUuIEkgd2lsbCBzY3J1dGluaXplIGBzZWN1cml0eV9maWxlX3JlY2VpdmVgIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzk0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDIwOjEwOjIyLjM1ODQzMzcxNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjIzMjgxNzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBzZWN1cml0eV9maWxlX3JlY2VpdmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zZWN1cml0eS5oPTQ5Mj1pbnQgc2VjdXJpdHlfZmlsZV9zZW5kX3NpZ2lvdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayxcXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDkzLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgZm93bl9zdHJ1Y3QgKmZvd24sIGludCBzaWcpO1xcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDo0OTQ6aW50IHNlY3VyaXR5X2ZpbGVfcmVjZWl2ZShzdHJ1Y3QgZmlsZSAqZmlsZSk7XFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTQ5NS1pbnQgc2VjdXJpdHlfZmlsZV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD0xMjE0PXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2ZpbGVfc2VuZF9zaWdpb3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtMTIyMC1cXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg6MTIyMTpzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9maWxlX3JlY2VpdmUoc3RydWN0IGZpbGUgKmZpbGUpXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTEyMjIte1xcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYz0yNzA0PWludCBzZWN1cml0eV9maWxlX3NlbmRfc2lnaW90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLFxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNzE4LSAqL1xcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MjcxOTppbnQgc2VjdXJpdHlfZmlsZV9yZWNlaXZlKHN0cnVjdCBmaWxlICpmaWxlKVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjcyMC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDIwOjEwOjI4LjU4MTcyNTEwNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxOTAzNzk2MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gc2VjdXJpdHlfZmlsZV9yZWNlaXZlKipcblxuQWxyaWdodCwgbGV0J3MgZGlzc2VjdCBgc2VjdXJpdHlfZmlsZV9yZWNlaXZlYCBpbiBgc2VjdXJpdHkvc2VjdXJpdHkuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBmaWxlIHJlY2VwdGlvbiBmcm9tIGEgc2VjdXJpdHkgcGVyc3BlY3RpdmUuIE15IGluaXRpYWwgcXVlc3Rpb25zIGFyZTogd2hhdCBjaGVja3MgYXJlIHBlcmZvcm1lZCBvbiB0aGUgaW5jb21pbmcgZGF0YT8gV2hhdCBhc3N1bXB0aW9ucyBhcmUgYmVpbmcgbWFkZSBhYm91dCB0aGUgc291cmNlLCBzaXplLCBhbmQgY29udGVudD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gYnVmZmVyIG92ZXJmbG93cywgcGF0aCB0cmF2ZXJzYWwsIG9yIGNvZGUgaW5qZWN0aW9uIHRoYXQgaW1tZWRpYXRlbHkganVtcCBvdXQ/IEkgd2FudCB0byBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHNlY3VyaXR5IHByaW1pdGl2ZXMuIElzIHRoZXJlIGFuIGludGVncmF0aW9uIHdpdGggYW55IG1hbmRhdG9yeSBhY2Nlc3MgY29udHJvbCBtZWNoYW5pc21zIG9yIGlzIGl0IGhhbmRsaW5nIHNlY3VyaXR5IHBvbGljeSBpdHNlbGY/IExldCdzIGNoZWNrIHRoZSBmdW5jdGlvbidzIHBhcmFtZXRlciBsaXN0LCB0eXBlIGRlY2xhcmF0aW9ucyBhbmQgdGhlIGRhdGEgaXQgYWNjZXNzZXMsIGxvb2tpbmcgZm9yIGFueXRoaW5nIHRoYXQgc2VlbXMgdW51c3VhbCBhbmQgc2hvdWxkIGJlIGRvY3VtZW50ZWQuIEZyb20gdGhlcmUgSSdsbCB0cmFjZSB0aHJvdWdoIHRoZSBjb3JlIGxvZ2ljLCBleGFtaW5pbmcgYW55IGNhbGxzIHRvIG90aGVyIHNlY3VyaXR5LXJlbGF0ZWQgZnVuY3Rpb25zIG9yIHN5c3RlbSBjYWxscyBpbnZvbHZlZCBpbiBmaWxlIGhhbmRsaW5nIChlLmcuLCBgb3BlbmAsIGByZWFkYCwgYHdyaXRlYCwgYGNobW9kYCwgYGNob3duYCwgZXRjLikgdG8gZ2V0IGEgZ29vZCBzZW5zZSBvZiBpdHMgcm9sZSB3aXRoaW4gdGhlIHdpZGVyIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1MTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMDoxMDozNS43NzIxMDg1NjlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc2OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInNlY3VyaXR5L3NlY3VyaXR5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjcxOSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjcxOTpcXHRpbnQgc2VjdXJpdHlfZmlsZV9yZWNlaXZlKHN0cnVjdCBmaWxlICpmaWxlKVxcbjI3MjA6XFx0e1xcbjI3MjE6XFx0XFx0cmV0dXJuIGNhbGxfaW50X2hvb2soZmlsZV9yZWNlaXZlLCBmaWxlKTtcXG4yNzIyOlxcdH1cXG4yNzIzOlxcdFxcbjI3MjQ6XFx0LyoqXFxuMjcyNTpcXHQgKiBzZWN1cml0eV9maWxlX29wZW4oKSAtIFNhdmUgb3BlbigpIHRpbWUgc3RhdGUgZm9yIGxhdGUgdXNlIGJ5IHRoZSBMU01cXG4yNzI2OlxcdCAqIEBmaWxlOlxcbjI3Mjc6XFx0ICpcXG4yNzI4OlxcdCAqIFNhdmUgb3Blbi10aW1lIHBlcm1pc3Npb24gY2hlY2tpbmcgc3RhdGUgZm9yIGxhdGVyIHVzZSB1cG9uIGZpbGVfcGVybWlzc2lvbixcXG4yNzI5OlxcdCAqIGFuZCByZWNoZWNrIGFjY2VzcyBpZiBhbnl0aGluZyBoYXMgY2hhbmdlZCBzaW5jZSBpbm9kZV9wZXJtaXNzaW9uLlxcbjI3MzA6XFx0ICpcXG4yNzMxOlxcdCAqIFdlIGNhbiBjaGVjayBpZiBhIGZpbGUgaXMgb3BlbmVkIGZvciBleGVjdXRpb24gKGUuZy4gZXhlY3ZlKDIpIGNhbGwpLCBlaXRoZXJcXG4yNzMyOlxcdCAqIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgKGUuZy4gRUxGJ3MgbGQuc28pIGJ5IGNoZWNraW5nIGZpbGUtXFx1MDAzZWZfZmxhZ3MgXFx1MDAyNlxcbjI3MzM6XFx0ICogX19GTU9ERV9FWEVDIC5cXG4yNzM0OlxcdCAqXFxuMjczNTpcXHQgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXFxuMjczNjpcXHQgKi9cXG4yNzM3OlxcdGludCBzZWN1cml0eV9maWxlX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpXFxuMjczODpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDIwOjEwOjM1Ljc3MjM5MDE4OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDY2MzQ0ODYzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgU09fUklHSFRTX05PVFJVTkNgIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgaGFuZGxpbmcgZXJyb3JzIHdoZW4gcmVjZWl2aW5nIGZpbGUgZGVzY3JpcHRvcnMgb3ZlciBVTklYIHNvY2tldHMgd2l0aCB0aGUgYFNPX1JJR0hUU19OT1RSVU5DYCBvcHRpb24uIEl0IGJvaWxzIGRvd24gdG8gdGhpczogdGhlIGNvZGUgY2FsbHMgdGhlIExTTSAoTGludXggU2VjdXJpdHkgTW9kdWxlKSBob29rLiBJZiBubyBMU00gZGVuaWVzIHRoZSBmaWxlIGRlc2NyaXB0b3IgcmVjZWl2ZSwgaXQgcmV0dXJucyAwLiBCdXQgdG8gdHJ1bHkgdGVzdCB0aGUgZXJyb3IgcGF0aCB3aGVyZSBgZXJyb3IgIT0gMGAsIHdlIG5lZWQgYW4gTFNNIHRoYXQgKmNhbiogZGVueSBgZmlsZV9yZWNlaXZlYC5cblxuQXBwQXJtb3IsIFNFTGludXgsIFNtYWNrLCBUT01PWU8sIGFuZCBCUEYgTFNNIGFyZSB0aGUgcG9zc2liaWxpdGllcy4gVGhlIHNlbGZ0ZXN0IHVzZXMgQlBGIExTTSwgYW5kIHRoYXQgc2VlbXMgbGlrZSBhIHNlbnNpYmxlIGFwcHJvYWNoLiBTbywgdG8gZW5zdXJlIHdlIGNhbiBoaXQgdGhlIGVycm9yIHBhdGgsIGVzcGVjaWFsbHkgaWYgc3l6a2FsbGVyIGlzIHRocm93aW5nIEJQRiBwcm9ncmFtcyBhdCB0aGUga2VybmVsLCBlbmFibGluZyBgU0VDVVJJVFlgIGFuZCBgQlBGX0xTTWAgaXMgYSBtdXN0LlxuXG5Ob3csIEkgbmVlZCB0byBjb25zaWRlciBob3cgc3l6a2FsbGVyIG9wZXJhdGVzLiBJdCdzIG5vdCBzdHJhaWdodGZvcndhcmQgZm9yIGl0IHRvICpkZWxpYmVyYXRlbHkqIGdlbmVyYXRlIEJQRiBMU00gcHJvZ3JhbXMgdG8gZGVueSBzcGVjaWZpYyBob29rcyB3aXRob3V0IGRlc2NyaXB0aW9ucyBmb3IgdGhlIGhvb2tzLiBIb3dldmVyLCBpdCAqY291bGQqIHRyaWdnZXIgdGhlIGVycm9yIGJ5IGNoYW5jZSwgb3IgaWYgYW5vdGhlciBMU00sIGxpa2UgU0VMaW51eCBvciBBcHBBcm1vciwgaXMgYWN0aXZlIGFuZCBhbHJlYWR5IGRlbmllcyBmaWxlIGRlc2NyaXB0b3IgdHJhbnNmZXIgYWNyb3NzIGRvbWFpbnMuIFN0aWxsLCBhZGRpbmcgYFNFQ1VSSVRZYCBpcyBhIGdvb2QgcHJhY3RpY2UuXG5cbkF0IGFueSByYXRlLCBgVU5JWGAgYW5kIGBDT01QQVRgIGFyZSBjcnVjaWFsIGNvbmZpZ3MgdG8gZW5hYmxlLCBnaXZlbiB0aGUgdGFyZ2V0IGNvZGUuIEFkZGluZyBgU0VDVVJJVFlgIHNlZW1zIGxpa2UgYSB1c2VmdWwgcHJlY2F1dGlvbi5cblxuTGV0J3MgcXVpY2tseSByZXZpZXcgdGhlIGNvcmUgZm9jdXMgc3ltYm9sczogYHVuaXhfc2V0c29ja29wdGAsIGBzY21fcmVjdl9vbmVfZmRgLCBgc2NtX2RldGFjaF9mZHNgLCBgc2NtX2RldGFjaF9mZHNfY29tcGF0YCwgYW5kIGBzY21fcmVjdl91bml4YC4gWWVwLCB0aG9zZSBhbGwgbG9vayByaWdodCBvbiBwb2ludC4gVGhleSBkaXJlY3RseSByZWxhdGUgdG8gdGhlIG5ldyBsb2dpYy5cblxuTm93LCB0byBzb2xpZGlmeSB0aGUgcmVhc29uaW5nOiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYFNPX1JJR0hUU19OT1RSVU5DYCBmb3IgQUZfVU5JWCBzb2NrZXRzLiBUaGlzIG9wdGlvbiBtb2RpZmllcyB0aGUgYFNDTV9SSUdIVFNgIGJlaGF2aW9yLiBXaGVuIHRoZSBmaWxlIGRlc2NyaXB0b3IgcmVjZWl2ZSBpcyBkZW5pZWQgYnkgYSBzZWN1cml0eSBtb2R1bGUsIHRoZSBwYXRjaCBtb2RpZmllcyBgU0NNX1JJR0hUU2AuIEluc3RlYWQgb2YgdHJ1bmNhdGluZyB0aGUgZmlsZSBkZXNjcmlwdG9yIGFycmF5IGFuZCBzZXR0aW5nIGBNU0dfQ1RSVU5DYCwgaXQgcGxhY2VzIHRoZSBlcnJvciBjb2RlIGluIHRoZSB1c2VyJ3MgZmlsZSBkZXNjcmlwdG9yIGFycmF5LiBUaGlzIGludm9sdmVzIGNoYW5nZXMgdG8gY29yZSBBRl9VTklYIHNvY2tldCBvcHRpb24gcGFyc2luZyAoYHVuaXhfc2V0c29ja29wdGApLCBzb2NrZXQgY29ubmVjdGlvbiBzdGF0ZSBwcm9wYWdhdGlvbiwgYW5kIHRoZSBTQ00gbWVzc2FnZSByZWNlaXZpbmcgbG9naWMgKGBzY21fcmVjdl9vbmVfZmRgLCBgc2NtX2RldGFjaF9mZHNgLCBgc2NtX2RldGFjaF9mZHNfY29tcGF0YCwgYHNjbV9yZWN2X3VuaXhgKS4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgcGF0aHMgdGhhdCAqbXVzdCogYmUgZnV6emVkIHRvIHZlcmlmeSB0aGF0IHRoZSBuZXcgZXJyb3IgaGFuZGxpbmcgYW5kIGFycmF5IG1hbmlwdWxhdGlvbiBsb2dpYyBkb2Vzbid0IGludHJvZHVjZSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBvciBsZWFrcy5cblxuU28sIHRoZSBrZXkgY29uZmlncyBmb3IgZnV6emluZzogYFVOSVhgLCBgQ09NUEFUYCwgYW5kIGBTRUNVUklUWWAuXG5cblRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTEzMSwiT3V0cHV0VG9rZW5zIjoyNTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMDoxMDo0Ni40MzU4NDIwNzFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzgzMzI3MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVOSVhcIixcbiAgICBcIkNPTVBBVFwiLFxuICAgIFwiU0VDVVJJVFlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1bml4X3NldHNvY2tvcHRcIixcbiAgICBcInNjbV9yZWN2X29uZV9mZFwiLFxuICAgIFwic2NtX2RldGFjaF9mZHNcIixcbiAgICBcInNjbV9kZXRhY2hfZmRzX2NvbXBhdFwiLFxuICAgIFwic2NtX3JlY3ZfdW5peFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc29ja2V0IG9wdGlvbiBTT19SSUdIVFNfTk9UUlVOQyBmb3IgQUZfVU5JWCBzb2NrZXRzLiBUaGlzIG9wdGlvbiBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgU0NNX1JJR0hUUyB3aGVuIGEgZmlsZSBkZXNjcmlwdG9yIHJlY2VpdmUgaXMgZGVuaWVkIGJ5IGEgc2VjdXJpdHkgbW9kdWxlIChMU00pLiBJbnN0ZWFkIG9mIHRydW5jYXRpbmcgdGhlIGZpbGUgZGVzY3JpcHRvciBhcnJheSBhbmQgc2V0dGluZyBNU0dfQ1RSVU5DLCBpdCBwbGFjZXMgdGhlIGVycm9yIGNvZGUgaW4gdGhlIHVzZXIncyBmaWxlIGRlc2NyaXB0b3IgYXJyYXkuIFRoaXMgaW52b2x2ZXMgY2hhbmdlcyB0byBjb3JlIEFGX1VOSVggc29ja2V0IG9wdGlvbiBwYXJzaW5nICh1bml4X3NldHNvY2tvcHQpLCBzb2NrZXQgY29ubmVjdGlvbiBzdGF0ZSBwcm9wYWdhdGlvbiwgYW5kIHRoZSBTQ00gbWVzc2FnZSByZWNlaXZpbmcgbG9naWMgKHNjbV9yZWN2X29uZV9mZCwgc2NtX2RldGFjaF9mZHMsIHNjbV9kZXRhY2hfZmRzX2NvbXBhdCwgc2NtX3JlY3ZfdW5peCkuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBlcnJvciBoYW5kbGluZyBhbmQgYXJyYXkgbWFuaXB1bGF0aW9uIGxvZ2ljIGRvZXMgbm90IGludHJvZHVjZSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBvciBsZWFrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVTklYXCIsXG4gICAgXCJDT01QQVRcIixcbiAgICBcIlNFQ1VSSVRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidW5peF9zZXRzb2Nrb3B0XCIsXG4gICAgXCJzY21fcmVjdl9vbmVfZmRcIixcbiAgICBcInNjbV9kZXRhY2hfZmRzXCIsXG4gICAgXCJzY21fZGV0YWNoX2Zkc19jb21wYXRcIixcbiAgICBcInNjbV9yZWN2X3VuaXhcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHNvY2tldCBvcHRpb24gU09fUklHSFRTX05PVFJVTkMgZm9yIEFGX1VOSVggc29ja2V0cy4gVGhpcyBvcHRpb24gbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIFNDTV9SSUdIVFMgd2hlbiBhIGZpbGUgZGVzY3JpcHRvciByZWNlaXZlIGlzIGRlbmllZCBieSBhIHNlY3VyaXR5IG1vZHVsZSAoTFNNKS4gSW5zdGVhZCBvZiB0cnVuY2F0aW5nIHRoZSBmaWxlIGRlc2NyaXB0b3IgYXJyYXkgYW5kIHNldHRpbmcgTVNHX0NUUlVOQywgaXQgcGxhY2VzIHRoZSBlcnJvciBjb2RlIGluIHRoZSB1c2VyJ3MgZmlsZSBkZXNjcmlwdG9yIGFycmF5LiBUaGlzIGludm9sdmVzIGNoYW5nZXMgdG8gY29yZSBBRl9VTklYIHNvY2tldCBvcHRpb24gcGFyc2luZyAodW5peF9zZXRzb2Nrb3B0KSwgc29ja2V0IGNvbm5lY3Rpb24gc3RhdGUgcHJvcGFnYXRpb24sIGFuZCB0aGUgU0NNIG1lc3NhZ2UgcmVjZWl2aW5nIGxvZ2ljIChzY21fcmVjdl9vbmVfZmQsIHNjbV9kZXRhY2hfZmRzLCBzY21fZGV0YWNoX2Zkc19jb21wYXQsIHNjbV9yZWN2X3VuaXgpLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgZXJyb3IgaGFuZGxpbmcgYW5kIGFycmF5IG1hbmlwdWxhdGlvbiBsb2dpYyBkb2VzIG5vdCBpbnRyb2R1Y2UgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgb3IgbGVha3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrpd6v[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-02 20:07:13 +0000 UTC FinishedAt: 2026-08-02 20:10:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "69963a0678a347d57c4ac8b16939dba216eb95ce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "UNIX", "COMPAT", "SECURITY" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "69963a0678a347d57c4ac8b16939dba216eb95ce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "UNIX", "COMPAT", "SECURITY" ], "series_id": "184eb337-c6a6-4924-95bb-d6b4d70a2b41" }, "track": "KASAN", "fuzz": { "focus": [ "fs", "net" ], "focus_symbols": [ "unix_setsockopt", "scm_recv_one_fd", "scm_detach_fds", "scm_detach_fds_compat", "scm_recv_unix" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIwOjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VOSVgmIzM0OywKICAgICYjMzQ7Q09NUEFUJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dW5peF9zZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O3NjbV9yZWN2X29uZV9mZCYjMzQ7LAogICAgJiMzNDtzY21fZGV0YWNoX2ZkcyYjMzQ7LAogICAgJiMzNDtzY21fZGV0YWNoX2Zkc19jb21wYXQmIzM0OywKICAgICYjMzQ7c2NtX3JlY3ZfdW5peCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHNvY2tldCBvcHRpb24gU09fUklHSFRTX05PVFJVTkMgZm9yIEFGX1VOSVggc29ja2V0cy4gVGhpcyBvcHRpb24gbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIFNDTV9SSUdIVFMgd2hlbiBhIGZpbGUgZGVzY3JpcHRvciByZWNlaXZlIGlzIGRlbmllZCBieSBhIHNlY3VyaXR5IG1vZHVsZSAoTFNNKS4gSW5zdGVhZCBvZiB0cnVuY2F0aW5nIHRoZSBmaWxlIGRlc2NyaXB0b3IgYXJyYXkgYW5kIHNldHRpbmcgTVNHX0NUUlVOQywgaXQgcGxhY2VzIHRoZSBlcnJvciBjb2RlIGluIHRoZSB1c2VyJiMzOTtzIGZpbGUgZGVzY3JpcHRvciBhcnJheS4gVGhpcyBpbnZvbHZlcyBjaGFuZ2VzIHRvIGNvcmUgQUZfVU5JWCBzb2NrZXQgb3B0aW9uIHBhcnNpbmcgKHVuaXhfc2V0c29ja29wdCksIHNvY2tldCBjb25uZWN0aW9uIHN0YXRlIHByb3BhZ2F0aW9uLCBhbmQgdGhlIFNDTSBtZXNzYWdlIHJlY2VpdmluZyBsb2dpYyAoc2NtX3JlY3Zfb25lX2ZkLCBzY21fZGV0YWNoX2Zkcywgc2NtX2RldGFjaF9mZHNfY29tcGF0LCBzY21fcmVjdl91bml4KS4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGVycm9yIGhhbmRsaW5nIGFuZCBhcnJheSBtYW5pcHVsYXRpb24gbG9naWMgZG9lcyBub3QgaW50cm9kdWNlIG1lbW9yeSBzYWZldHkgaXNzdWVzIG9yIGxlYWtzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIwOjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTVjZGI0YTkzNmUxYTdkNjhmNzM2MWZmNzc1ZDk2MTQxNjQ3N2EzNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIgMjA6MDk6MjIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oXG5pbmRleCA1ZWY1N2Y4OGRmNmIzLi45NDZhNWZhZDI2OTEyIDEwMDY0NFxuLS0tIGEvYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmhcbkBAIC0xNTUsNiAmIzQzOzE1NSw4IEBAXG4gI2RlZmluZSBTT19JTlFcdFx0XHQ4NFxuICNkZWZpbmUgU0NNX0lOUVx0XHRcdFNPX0lOUVxuIFxuJiM0MzsjZGVmaW5lIFNPX1JJR0hUU19OT1RSVU5DICAgICAgODVcbiYjNDM7XG4gI2lmICFkZWZpbmVkKF9fS0VSTkVMX18pXG4gXG4gI2lmIF9fQklUU19QRVJfTE9ORyA9PSA2NFxuZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmhcbmluZGV4IDcyZmIxYjAwNmRhOTMuLmYxNjQxZGRlMTM1ZmMgMTAwNjQ0XG4tLS0gYS9hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmhcbkBAIC0xNjYsNiAmIzQzOzE2Niw4IEBAXG4gI2RlZmluZSBTT19JTlFcdFx0XHQ4NFxuICNkZWZpbmUgU0NNX0lOUVx0XHRcdFNPX0lOUVxuIFxuJiM0MzsjZGVmaW5lIFNPX1JJR0hUU19OT1RSVU5DICAgICAgODVcbiYjNDM7XG4gI2lmICFkZWZpbmVkKF9fS0VSTkVMX18pXG4gXG4gI2lmIF9fQklUU19QRVJfTE9ORyA9PSA2NFxuZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oXG5pbmRleCBjMTZlYzM2ZGZlZTZiLi5mM2EzODE1YzdkYzI5IDEwMDY0NFxuLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaFxuQEAgLTE0Nyw2ICYjNDM7MTQ3LDggQEBcbiAjZGVmaW5lIFNPX0lOUVx0XHRcdDB4NDA1MlxuICNkZWZpbmUgU0NNX0lOUVx0XHRcdFNPX0lOUVxuIFxuJiM0MzsjZGVmaW5lIFNPX1JJR0hUU19OT1RSVU5DXHQweDQwNTNcbiYjNDM7XG4gI2lmICFkZWZpbmVkKF9fS0VSTkVMX18pXG4gXG4gI2lmIF9fQklUU19QRVJfTE9ORyA9PSA2NFxuZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaFxuaW5kZXggNzFiZWZhMTA5ZTFjZi4uNzkwN2YzYjFmMGVlMCAxMDA2NDRcbi0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zcGFyYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oXG5AQCAtMTQ4LDYgJiM0MzsxNDgsOCBAQFxuICNkZWZpbmUgU09fSU5RICAgICAgICAgICAgICAgICAgIDB4MDA1ZFxuICNkZWZpbmUgU0NNX0lOUSAgICAgICAgICAgICAgICAgIFNPX0lOUVxuIFxuJiM0MzsjZGVmaW5lIFNPX1JJR0hUU19OT1RSVU5DICAgICAgICAweDAwNWVcbiYjNDM7XG4gI2lmICFkZWZpbmVkKF9fS0VSTkVMX18pXG4gXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYWZfdW5peC5oIGIvaW5jbHVkZS9uZXQvYWZfdW5peC5oXG5pbmRleCAzNGY1M2RkZTY1Y2VhLi5iYjFiM2RlZTAyZTgyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvYWZfdW5peC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9hZl91bml4LmhcbkBAIC00OSw2ICYjNDM7NDksNyBAQCBzdHJ1Y3QgdW5peF9zb2NrIHtcbiBcdHN0cnVjdCBzY21fc3RhdFx0XHRzY21fc3RhdDtcbiBcdGludFx0XHRcdGlucV9sZW47XG4gXHRib29sXHRcdFx0cmVjdm1zZ19pbnE7XG4mIzQzO1x0Ym9vbFx0XHRcdHNjbV9yaWdodHNfbm90cnVuYztcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfQUZfVU5JWF9PT0IpXG4gXHRzdHJ1Y3Qgc2tfYnVmZlx0XHQqb29iX3NrYjtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY20uaCBiL2luY2x1ZGUvbmV0L3NjbS5oXG5pbmRleCBjNTI1MTk2NjkzNDlmLi44NmFlNmJjMTA5ZWM2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvc2NtLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3NjbS5oXG5AQCAtNTAsOCAmIzQzOzUwLDggQEAgc3RydWN0IHNjbV9jb29raWUge1xuICNlbmRpZlxuIH07XG4gXG4tdm9pZCBzY21fZGV0YWNoX2ZkcyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20pO1xuLXZvaWQgc2NtX2RldGFjaF9mZHNfY29tcGF0KHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNjbV9jb29raWUgKnNjbSk7XG4mIzQzO3ZvaWQgc2NtX2RldGFjaF9mZHMoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2NtLCBib29sIG5vdHJ1bmMpO1xuJiM0Mzt2b2lkIHNjbV9kZXRhY2hfZmRzX2NvbXBhdChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20sIGJvb2wgbm90cnVuYyk7XG4gaW50IF9fc2NtX3NlbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2NtKTtcbiB2b2lkIF9fc2NtX2Rlc3Ryb3koc3RydWN0IHNjbV9jb29raWUgKnNjbSk7XG4gc3RydWN0IHNjbV9mcF9saXN0ICpzY21fZnBfZHVwKHN0cnVjdCBzY21fZnBfbGlzdCAqZnBsKTtcbkBAIC0xMDcsMTMgJiM0MzsxMDcsOCBAQCB2b2lkIHNjbV9yZWN2KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbiB2b2lkIHNjbV9yZWN2X3VuaXgoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuIFx0XHQgICBzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2NtLCBpbnQgZmxhZ3MpO1xuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNjbV9yZWN2X29uZV9mZChzdHJ1Y3QgZmlsZSAqZiwgaW50IF9fdXNlciAqdWZkLFxuLVx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4te1xuLVx0aWYgKCF1ZmQpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuLVx0cmV0dXJuIHJlY2VpdmVfZmQoZiwgdWZkLCBmbGFncyk7XG4tfVxuJiM0MztpbnQgc2NtX3JlY3Zfb25lX2ZkKHN0cnVjdCBmaWxlICpmLCBpbnQgX191c2VyICp1ZmQsIHVuc2lnbmVkIGludCBmbGFncyxcbiYjNDM7XHRcdCAgICBib29sIG5vdHJ1bmMpO1xuIFxuICNlbmRpZiAvKiBfX0xJTlVYX05FVF9TQ01fSCAqL1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaCBiL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaFxuaW5kZXggNTNiNWE4YzAwMmIxZS4uODRlYTdiOTI5MzZlMiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NvY2tldC5oXG5AQCAtMTUwLDYgJiM0MzsxNTAsOCBAQFxuICNkZWZpbmUgU09fSU5RXHRcdFx0ODRcbiAjZGVmaW5lIFNDTV9JTlFcdFx0XHRTT19JTlFcbiBcbiYjNDM7I2RlZmluZSBTT19SSUdIVFNfTk9UUlVOQ1x0ODVcbiYjNDM7XG4gI2lmICFkZWZpbmVkKF9fS0VSTkVMX18pXG4gXG4gI2lmIF9fQklUU19QRVJfTE9ORyA9PSA2NCB8fCAoZGVmaW5lZChfX3g4Nl82NF9fKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChfX0lMUDMyX18pKVxuZGlmZiAtLWdpdCBhL25ldC9jb21wYXQuYyBiL25ldC9jb21wYXQuY1xuaW5kZXggZDY4Y2Y5YzNhYWQ1Zi4uNmJkZjRhMmM5MDc3ZCAxMDA2NDRcbi0tLSBhL25ldC9jb21wYXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvbXBhdC5jXG5AQCAtMjg2LDcgJiM0MzsyODYsNyBAQCBzdGF0aWMgaW50IHNjbV9tYXhfZmRzX2NvbXBhdChzdHJ1Y3QgbXNnaGRyICptc2cpXG4gXHRyZXR1cm4gKG1zZy1cdTAwM2Vtc2dfY29udHJvbGxlbiAtIHNpemVvZihzdHJ1Y3QgY29tcGF0X2Ntc2doZHIpKSAvIHNpemVvZihpbnQpO1xuIH1cbiBcbi12b2lkIHNjbV9kZXRhY2hfZmRzX2NvbXBhdChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20pXG4mIzQzO3ZvaWQgc2NtX2RldGFjaF9mZHNfY29tcGF0KHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNjbV9jb29raWUgKnNjbSwgYm9vbCBub3RydW5jKVxuIHtcbiBcdHN0cnVjdCBjb21wYXRfY21zZ2hkciBfX3VzZXIgKmNtID1cbiBcdFx0KHN0cnVjdCBjb21wYXRfY21zZ2hkciBfX3VzZXIgKiltc2ctXHUwMDNlbXNnX2NvbnRyb2xfdXNlcjtcbkBAIC0yOTYsNyAmIzQzOzI5Niw3IEBAIHZvaWQgc2NtX2RldGFjaF9mZHNfY29tcGF0KHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNjbV9jb29raWUgKnNjbSlcbiBcdGludCBlcnIgPSAwLCBpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZmRtYXg7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGVyciA9IHNjbV9yZWN2X29uZV9mZChzY20tXHUwMDNlZnAtXHUwMDNlZnBbaV0sIGNtc2dfZGF0YSAmIzQzOyBpLCBvX2ZsYWdzKTtcbiYjNDM7XHRcdGVyciA9IHNjbV9yZWN2X29uZV9mZChzY20tXHUwMDNlZnAtXHUwMDNlZnBbaV0sIGNtc2dfZGF0YSAmIzQzOyBpLCBvX2ZsYWdzLCBub3RydW5jKTtcbiBcdFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0XHRicmVhaztcbiBcdH1cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9zY20uYyBiL25ldC9jb3JlL3NjbS5jXG5pbmRleCBlZWMxM2Y1MGVjYWY2Li5mMGQ0NGVjZGIxMWZjIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc2NtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NjbS5jXG5AQCAtMzUxLDcgJiM0MzszNTEsMzEgQEAgc3RhdGljIGludCBzY21fbWF4X2ZkcyhzdHJ1Y3QgbXNnaGRyICptc2cpXG4gXHRyZXR1cm4gKG1zZy1cdTAwM2Vtc2dfY29udHJvbGxlbiAtIHNpemVvZihzdHJ1Y3QgY21zZ2hkcikpIC8gc2l6ZW9mKGludCk7XG4gfVxuIFxuLXZvaWQgc2NtX2RldGFjaF9mZHMoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2NtKVxuJiM0MztpbnQgc2NtX3JlY3Zfb25lX2ZkKHN0cnVjdCBmaWxlICpmLCBpbnQgX191c2VyICp1ZmQsIHVuc2lnbmVkIGludCBmbGFncyxcbiYjNDM7XHRcdCAgICBib29sIG5vdHJ1bmMpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyb3I7XG4mIzQzO1xuJiM0MztcdGlmICghdWZkKVxuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1xuJiM0MztcdGVycm9yID0gc2VjdXJpdHlfZmlsZV9yZWNlaXZlKGYpO1xuJiM0MztcdGlmIChlcnJvcilcbiYjNDM7XHRcdHJldHVybiBub3RydW5jID8gcHV0X3VzZXIoZXJyb3IsIHVmZCkgOiBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0RkRfUFJFUEFSRShmZGYsIGZsYWdzLCBnZXRfZmlsZShmKSk7XG4mIzQzO1x0aWYgKGZkZi5lcnIpXG4mIzQzO1x0XHRyZXR1cm4gZmRmLmVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyb3IgPSBwdXRfdXNlcihmZF9wcmVwYXJlX2ZkKGZkZiksIHVmZCk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcbiYjNDM7XHRfX3JlY2VpdmVfc29jayhmZF9wcmVwYXJlX2ZpbGUoZmRmKSk7XG4mIzQzO1x0cmV0dXJuIGZkX3B1Ymxpc2goZmRmKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBzY21fZGV0YWNoX2ZkcyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20sIGJvb2wgbm90cnVuYylcbiB7XG4gXHRzdHJ1Y3QgY21zZ2hkciBfX3VzZXIgKmNtID1cbiBcdFx0KF9fZm9yY2Ugc3RydWN0IGNtc2doZHIgX191c2VyICopbXNnLVx1MDAzZW1zZ19jb250cm9sX3VzZXI7XG5AQCAtMzY1LDEyICYjNDM7Mzg5LDEyIEBAIHZvaWQgc2NtX2RldGFjaF9mZHMoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2NtKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRpZiAobXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX0NNU0dfQ09NUEFUKSB7XG4tXHRcdHNjbV9kZXRhY2hfZmRzX2NvbXBhdChtc2csIHNjbSk7XG4mIzQzO1x0XHRzY21fZGV0YWNoX2Zkc19jb21wYXQobXNnLCBzY20sIG5vdHJ1bmMpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBmZG1heDsgaSYjNDM7JiM0MzspIHtcbi1cdFx0ZXJyID0gc2NtX3JlY3Zfb25lX2ZkKHNjbS1cdTAwM2VmcC1cdTAwM2VmcFtpXSwgY21zZ19kYXRhICYjNDM7IGksIG9fZmxhZ3MpO1xuJiM0MztcdFx0ZXJyID0gc2NtX3JlY3Zfb25lX2ZkKHNjbS1cdTAwM2VmcC1cdTAwM2VmcFtpXSwgY21zZ19kYXRhICYjNDM7IGksIG9fZmxhZ3MsIG5vdHJ1bmMpO1xuIFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRcdGJyZWFrO1xuIFx0fVxuQEAgLTUyMyw5ICYjNDM7NTQ3LDYgQEAgc3RhdGljIGJvb2wgX19zY21fcmVjdl9jb21tb24oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4gXG4gXHRzY21fcGFzc2VjKHNrLCBtc2csIHNjbSk7XG4gXG4tXHRpZiAoc2NtLVx1MDAzZWZwKVxuLVx0XHRzY21fZGV0YWNoX2Zkcyhtc2csIHNjbSk7XG4tXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG5AQCAtNTQ1LDYgJiM0Mzs1NjYsMTMgQEAgdm9pZCBzY21fcmVjdl91bml4KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbiBcdGlmICghX19zY21fcmVjdl9jb21tb24oc29jay1cdTAwM2VzaywgbXNnLCBzY20sIGZsYWdzKSlcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdGlmIChzY20tXHUwMDNlZnApIHtcbiYjNDM7XHRcdHN0cnVjdCB1bml4X3NvY2sgKnU7XG4mIzQzO1xuJiM0MztcdFx0dSA9IHVuaXhfc2soc29jay1cdTAwM2Vzayk7XG4mIzQzO1x0XHRzY21fZGV0YWNoX2Zkcyhtc2csIHNjbSwgUkVBRF9PTkNFKHUtXHUwMDNlc2NtX3JpZ2h0c19ub3RydW5jKSk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX3NjbV9waWRmZClcbiBcdFx0c2NtX3BpZGZkX3JlY3YobXNnLCBzY20pO1xuIFxuZGlmZiAtLWdpdCBhL25ldC91bml4L2FmX3VuaXguYyBiL25ldC91bml4L2FmX3VuaXguY1xuaW5kZXggMTBlZDk0MjFlNDNhYS4uMDNjZTIzYTRlYmVlMSAxMDA2NDRcbi0tLSBhL25ldC91bml4L2FmX3VuaXguY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3VuaXgvYWZfdW5peC5jXG5AQCAtOTIyLDYgJiM0Mzs5MjIsNyBAQCBzdGF0aWMgYm9vbCB1bml4X2N1c3RvbV9zb2Nrb3B0KGludCBvcHRuYW1lKVxuIHtcbiBcdHN3aXRjaCAob3B0bmFtZSkge1xuIFx0Y2FzZSBTT19JTlE6XG4mIzQzO1x0Y2FzZSBTT19SSUdIVFNfTk9UUlVOQzpcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gZmFsc2U7XG5AQCAtOTUwLDEzICYjNDM7OTUxLDIxIEBAIHN0YXRpYyBpbnQgdW5peF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gXHRzd2l0Y2ggKG9wdG5hbWUpIHtcbiBcdGNhc2UgU09fSU5ROlxuIFx0XHRpZiAoc2stXHUwMDNlc2tfdHlwZSAhPSBTT0NLX1NUUkVBTSlcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9QUk9UT09QVDtcbiBcbiBcdFx0aWYgKHZhbCBcdTAwM2UgMSB8fCB2YWwgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRcdFdSSVRFX09OQ0UodS1cdTAwM2VyZWN2bXNnX2lucSwgdmFsKTtcbiBcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGNhc2UgU09fUklHSFRTX05PVFJVTkM6XG4mIzQzO1x0XHRpZiAodmFsIFx1MDAzZSAxIHx8IHZhbCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdFx0V1JJVEVfT05DRSh1LVx1MDAzZXNjbV9yaWdodHNfbm90cnVuYywgdmFsKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU5PUFJPVE9PUFQ7XG4gXHR9XG5AQCAtMTAwNiw2ICYjNDM7MTAxNSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHVuaXhfZGdyYW1fb3BzID0ge1xuICNlbmRpZlxuIFx0Lmxpc3RlbiA9XHRzb2NrX25vX2xpc3RlbixcbiBcdC5zaHV0ZG93biA9XHR1bml4X3NodXRkb3duLFxuJiM0MztcdC5zZXRzb2Nrb3B0ID1cdHVuaXhfc2V0c29ja29wdCxcbiBcdC5zZW5kbXNnID1cdHVuaXhfZGdyYW1fc2VuZG1zZyxcbiBcdC5yZWFkX3NrYiA9XHR1bml4X3JlYWRfc2tiLFxuIFx0LnJlY3Ztc2cgPVx0dW5peF9kZ3JhbV9yZWN2bXNnLFxuQEAgLTEwMzAsNiAmIzQzOzEwNDAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB1bml4X3NlcXBhY2tldF9vcHMgPSB7XG4gI2VuZGlmXG4gXHQubGlzdGVuID1cdHVuaXhfbGlzdGVuLFxuIFx0LnNodXRkb3duID1cdHVuaXhfc2h1dGRvd24sXG4mIzQzO1x0LnNldHNvY2tvcHQgPVx0dW5peF9zZXRzb2Nrb3B0LFxuIFx0LnNlbmRtc2cgPVx0dW5peF9zZXFwYWNrZXRfc2VuZG1zZyxcbiBcdC5yZWN2bXNnID1cdHVuaXhfc2VxcGFja2V0X3JlY3Ztc2csXG4gXHQubW1hcCA9XHRcdHNvY2tfbm9fbW1hcCxcbkBAIC0xMTQzLDkgJiM0MzsxMTU0LDEwIEBAIHN0YXRpYyBpbnQgdW5peF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG4gXHRpZiAocHJvdG9jb2wgXHUwMDI2XHUwMDI2IHByb3RvY29sICE9IFBGX1VOSVgpXG4gXHRcdHJldHVybiAtRVBST1RPTk9TVVBQT1JUO1xuIFxuJiM0MztcdHNldF9iaXQoU09DS19DVVNUT01fU09DS09QVCwgXHUwMDI2c29jay1cdTAwM2VmbGFncyk7XG4mIzQzO1xuIFx0c3dpdGNoIChzb2NrLVx1MDAzZXR5cGUpIHtcbiBcdGNhc2UgU09DS19TVFJFQU06XG4tXHRcdHNldF9iaXQoU09DS19DVVNUT01fU09DS09QVCwgXHUwMDI2c29jay1cdTAwM2VmbGFncyk7XG4gXHRcdHNvY2stXHUwMDNlb3BzID0gXHUwMDI2dW5peF9zdHJlYW1fb3BzO1xuIFx0XHRicmVhaztcbiBcdFx0LypcbkBAIC0xNzQzLDkgJiM0MzsxNzU1LDEwIEBAIHN0YXRpYyBpbnQgdW5peF9zdHJlYW1fY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkXG4gXHRpbml0X3BlZXJjcmVkKG5ld3NrLCBcdTAwMjZwZWVyY3JlZCk7XG4gXG4gXHRuZXd1ID0gdW5peF9zayhuZXdzayk7XG4mIzQzO1x0b3RoZXJ1ID0gdW5peF9zayhvdGhlcik7XG4gXHRuZXd1LVx1MDAzZWxpc3RlbmVyID0gb3RoZXI7XG4mIzQzO1x0bmV3dS1cdTAwM2VzY21fcmlnaHRzX25vdHJ1bmMgPSBvdGhlcnUtXHUwMDNlc2NtX3JpZ2h0c19ub3RydW5jO1xuIFx0UkNVX0lOSVRfUE9JTlRFUihuZXdzay1cdTAwM2Vza193cSwgXHUwMDI2bmV3dS1cdTAwM2VwZWVyX3dxKTtcbi1cdG90aGVydSA9IHVuaXhfc2sob3RoZXIpO1xuIFxuIFx0LyogY29weSBhZGRyZXNzIGluZm9ybWF0aW9uIGZyb20gbGlzdGVuaW5nIHRvIG5ldyBzb2NrXG4gXHQgKlxuQEAgLTE4NjUsOCAmIzQzOzE4NzgsNyBAQCBzdGF0aWMgaW50IHVuaXhfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXG4gXHRza2JfZnJlZV9kYXRhZ3JhbShzaywgc2tiKTtcbiBcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcdTAwMjZ1bml4X3NrKHNrKS1cdTAwM2VwZWVyX3dhaXQpO1xuIFxuLVx0aWYgKHRzay1cdTAwM2Vza190eXBlID09IFNPQ0tfU1RSRUFNKVxuLVx0XHRzZXRfYml0KFNPQ0tfQ1VTVE9NX1NPQ0tPUFQsIFx1MDAyNm5ld3NvY2stXHUwMDNlZmxhZ3MpO1xuJiM0MztcdHNldF9iaXQoU09DS19DVVNUT01fU09DS09QVCwgXHUwMDI2bmV3c29jay1cdTAwM2VmbGFncyk7XG4gXG4gXHQvKiBhdHRhY2ggYWNjZXB0ZWQgc29jayB0byBzb2NrZXQgKi9cbiBcdHVuaXhfc3RhdGVfbG9jayh0c2spO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4Ly5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC8uZ2l0aWdub3JlXG5pbmRleCA5NzMxNzY2NDQxMDM2Li45NTRmMDk1OGRkMDM0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvLmdpdGlnbm9yZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvLmdpdGlnbm9yZVxuQEAgLTMsNiAmIzQzOzMsOCBAQCBtc2dfb29iXG4gc2NtX2lucVxuIHNjbV9waWRmZFxuIHNjbV9yaWdodHNcbiYjNDM7c2NtX3JpZ2h0c19kZW5pYWxfbHNtXG4mIzQzO3NjbV9yaWdodHNfZGVuaWFsX2xzbS5icGYub1xuIHNvX3BlZWtfb2ZmXG4gdW5peF9jb25uZWN0XG4gdW5peF9jb25ucmVzZXRcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L01ha2VmaWxlXG5pbmRleCA1N2QxNTk4MDNhM2FiLi5hNjZmMTBmYjBjMjMxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L01ha2VmaWxlXG5AQCAtMTEsMTAgJiM0MzsxMSwxOCBAQCBURVNUX0dFTl9QUk9HUyA6PSBcXFxuIFx0c2NtX2lucSBcXFxuIFx0c2NtX3BpZGZkIFxcXG4gXHRzY21fcmlnaHRzIFxcXG4mIzQzO1x0c2NtX3JpZ2h0c19kZW5pYWxfbHNtIFxcXG4gXHRzb19wZWVrX29mZiBcXFxuIFx0dW5peF9jb25uZWN0IFxcXG4gXHR1bml4X2Nvbm5yZXNldCBcXFxuIFx0dW5peF9saXN0ZW4gXFxcbiAjIGVuZCBvZiBURVNUX0dFTl9QUk9HU1xuIFxuJiM0MztURVNUX0dFTl9GSUxFUyA6PSBzY21fcmlnaHRzX2RlbmlhbF9sc20uYnBmLm9cbiYjNDM7XG4gaW5jbHVkZSAuLi8uLi9saWIubWtcbiYjNDM7aW5jbHVkZSAuLi9icGYubWtcbiYjNDM7XG4mIzQzOyQoT1VUUFVUKS9zY21fcmlnaHRzX2RlbmlhbF9sc206ICQoQlBGT0JKKVxuJiM0MzskKE9VVFBVVCkvc2NtX3JpZ2h0c19kZW5pYWxfbHNtOiBDRkxBR1MgJiM0Mzs9IC1JJChTQ1JBVENIX0RJUikvaW5jbHVkZVxuJiM0MzskKE9VVFBVVCkvc2NtX3JpZ2h0c19kZW5pYWxfbHNtOiBMRExJQlMgJiM0Mzs9IC1sZWxmIC1selxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L2NvbmZpZ1xuaW5kZXggNDFkYmIwM2M3NDdlYi4uNDY4ZjdhMGJiNjRlNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvY29uZmlnXG5AQCAtMiwzICYjNDM7MiwxMCBAQCBDT05GSUdfQUZfVU5JWF9PT0I9eVxuIENPTkZJR19VTklYPXlcbiBDT05GSUdfVU5JWF9ESUFHPW1cbiBDT05GSUdfVVNFUl9OUz15XG4mIzQzO0NPTkZJR19CUEY9eVxuJiM0MztDT05GSUdfQlBGX1NZU0NBTEw9eVxuJiM0MztDT05GSUdfQlBGX0VWRU5UUz15XG4mIzQzO0NPTkZJR19CUEZfSklUPXlcbiYjNDM7Q09ORklHX1NFQ1VSSVRZPXlcbiYjNDM7Q09ORklHX0JQRl9MU009eVxuJiM0MztDT05GSUdfREVCVUdfSU5GT19CVEY9eVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHNfZGVuaWFsX2xzbS5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHNfZGVuaWFsX2xzbS5icGYuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjRmMjQxNDQ2NWJmZDNcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHNfZGVuaWFsX2xzbS5icGYuY1xuQEAgLTAsMCAmIzQzOzEsMzYgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZXJybm8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuJiM0MztcbiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjNDM7XG4mIzQzO3N0cnVjdCBpbm9kZSB7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpX2lubztcbiYjNDM7fSBfX2F0dHJpYnV0ZV9fKChwcmVzZXJ2ZV9hY2Nlc3NfaW5kZXgpKTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBmaWxlIHtcbiYjNDM7XHRzdHJ1Y3QgaW5vZGUgKmZfaW5vZGU7XG4mIzQzO30gX19hdHRyaWJ1dGVfXygocHJlc2VydmVfYWNjZXNzX2luZGV4KSk7XG4mIzQzO1xuJiM0MztzdHJ1Y3Qge1xuJiM0MztcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfSEFTSCk7XG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCAxNik7XG4mIzQzO1x0X190eXBlKGtleSwgX191NjQpO1x0LyogaW5vZGUgbnVtYmVyICovXG4mIzQzO1x0X190eXBlKHZhbHVlLCBfX3UzMik7XHQvKiB0Z2lkIG9mIHRoZSByZWNlaXZlciBiZWluZyB0ZXN0ZWQgKi9cbiYjNDM7fSBkZW5pZWRfaW5vZGVzIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7bHNtL2ZpbGVfcmVjZWl2ZVwmIzM0OylcbiYjNDM7aW50IEJQRl9QUk9HKHNjbV9yaWdodHNfZGVueSwgc3RydWN0IGZpbGUgKmZpbGUpXG4mIzQzO3tcbiYjNDM7XHRfX3UzMiB0Z2lkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgXHUwMDNlXHUwMDNlIDMyO1xuJiM0MztcdF9fdTY0IGlubyA9IGZpbGUtXHUwMDNlZl9pbm9kZS1cdTAwM2VpX2lubztcbiYjNDM7XHRfX3UzMiAqb3duZXI7XG4mIzQzO1xuJiM0MztcdG93bmVyID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZkZW5pZWRfaW5vZGVzLCBcdTAwMjZpbm8pO1xuJiM0MztcdGlmIChvd25lciBcdTAwMjZcdTAwMjYgKm93bmVyID09IHRnaWQpXG4mIzQzO1x0XHRyZXR1cm4gLUVQRVJNO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHNfZGVuaWFsX2xzbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvc2NtX3JpZ2h0c19kZW5pYWxfbHNtLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi45NDFiN2RlY2Y3OTgwXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzX2RlbmlhbF9sc20uY1xuQEAgLTAsMCAmIzQzOzEsMjg1IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNkZWZpbmUgX0dOVV9TT1VSQ0VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3NvY2tldC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9zdGF0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3R5cGVzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvbGliYnBmLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdF9oYXJuZXNzLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNpZm5kZWYgU09fUklHSFRTX05PVFJVTkNcbiYjNDM7I2RlZmluZSBTT19SSUdIVFNfTk9UUlVOQyA4NVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTlJfRklMRVMgMlxuJiM0MztcbiYjNDM7LyogUGVyLWZpbGUgY29udGVudCwgc28gYSByZWNlaXZlZCBmZCBjYW4gYmUgbWF0Y2hlZCB0byB0aGUgZmlsZSBzZW50ICovXG4mIzQzOyNkZWZpbmUgU0VDUkVUKG4pIFwmIzM0O3NlY3JldCAlZFwmIzM0OywgKG4pXG4mIzQzO1xuJiM0MzsvKiBJbmRpY2VzIGludG8gdGhlIHNvY2tldHBhaXIgKi9cbiYjNDM7I2RlZmluZSBTS19TRU5ERVIgMFxuJiM0MzsjZGVmaW5lIFNLX1JFQ0VJVkVSIDFcbiYjNDM7XG4mIzQzO0ZJWFRVUkUoc2NtX3JpZ2h0c19kZW5pYWxfYnBmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9vYmplY3QgKm9iajtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XG4mIzQzO1x0aW50IG1hcF9mZDtcbiYjNDM7XHRpbnQgc2tbMl07XG4mIzQzO1x0aW50IGZpbGVzW05SX0ZJTEVTXTtcbiYjNDM7XHRfX3U2NCBpbm9zW05SX0ZJTEVTXTtcbiYjNDM7XHRjaGFyIHBhdGhzW05SX0ZJTEVTXVs2NF07XG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlQoc2NtX3JpZ2h0c19kZW5pYWxfYnBmKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHNvY2tfdHlwZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoc2NtX3JpZ2h0c19kZW5pYWxfYnBmLCBzdHJlYW0pXG4mIzQzO3tcbiYjNDM7XHQuc29ja190eXBlID0gU09DS19TVFJFQU0sXG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKHNjbV9yaWdodHNfZGVuaWFsX2JwZiwgZGdyYW0pXG4mIzQzO3tcbiYjNDM7XHQuc29ja190eXBlID0gU09DS19ER1JBTSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoc2NtX3JpZ2h0c19kZW5pYWxfYnBmLCBzZXFwYWNrZXQpXG4mIzQzO3tcbiYjNDM7XHQuc29ja190eXBlID0gU09DS19TRVFQQUNLRVQsXG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1NFVFVQKHNjbV9yaWdodHNfZGVuaWFsX2JwZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZztcbiYjNDM7XHRjaGFyIGxzbXNbMjU2XSA9IHt9O1xuJiM0MztcdGludCBpLCBmZDtcbiYjNDM7XG4mIzQzO1x0aWYgKGdldGV1aWQoKSAhPSAwKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O3JlcXVpcmVzIHJvb3RcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW4oXCYjMzQ7L3N5cy9rZXJuZWwvc2VjdXJpdHkvbHNtXCYjMzQ7LCBPX1JET05MWSk7XG4mIzQzO1x0QVNTRVJUX0dFKGZkLCAwKTtcbiYjNDM7XHRBU1NFUlRfTFQoMCwgcmVhZChmZCwgbHNtcywgc2l6ZW9mKGxzbXMpIC0gMSkpO1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzdHJzdHIobHNtcywgXCYjMzQ7YnBmXCYjMzQ7KSlcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtCUEYgTFNNIG5vdCBhY3RpdmUgKGJvb3Qgd2l0aCBsc209Li4uLGJwZilcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRzZWxmLVx1MDAzZW9iaiA9IGJwZl9vYmplY3RfX29wZW5fZmlsZShcJiMzNDtzY21fcmlnaHRzX2RlbmlhbF9sc20uYnBmLm9cJiMzNDssIE5VTEwpO1xuJiM0MztcdEFTU0VSVF9ORShOVUxMLCBzZWxmLVx1MDAzZW9iaik7XG4mIzQzO1x0QVNTRVJUX0VRKDAsIGJwZl9vYmplY3RfX2xvYWQoc2VsZi1cdTAwM2VvYmopKTtcbiYjNDM7XG4mIzQzO1x0cHJvZyA9IGJwZl9vYmplY3RfX2ZpbmRfcHJvZ3JhbV9ieV9uYW1lKHNlbGYtXHUwMDNlb2JqLCBcJiMzNDtzY21fcmlnaHRzX2RlbnlcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9ORShOVUxMLCBwcm9nKTtcbiYjNDM7XG4mIzQzO1x0c2VsZi1cdTAwM2VsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9sc20ocHJvZyk7XG4mIzQzO1x0QVNTRVJUX05FKE5VTEwsIHNlbGYtXHUwMDNlbGluayk7XG4mIzQzO1xuJiM0MztcdHNlbGYtXHUwMDNlbWFwX2ZkID0gYnBmX29iamVjdF9fZmluZF9tYXBfZmRfYnlfbmFtZShzZWxmLVx1MDAzZW9iaixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIFwmIzM0O2RlbmllZF9pbm9kZXNcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9HRShzZWxmLVx1MDAzZW1hcF9mZCwgMCk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBzb2NrZXRwYWlyKEFGX1VOSVgsIHZhcmlhbnQtXHUwMDNlc29ja190eXBlLCAwLCBzZWxmLVx1MDAzZXNrKSk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX0ZJTEVTOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHN0YXQgc3Q7XG4mIzQzO1xuJiM0MztcdFx0c25wcmludGYoc2VsZi1cdTAwM2VwYXRoc1tpXSwgc2l6ZW9mKHNlbGYtXHUwMDNlcGF0aHNbaV0pLFxuJiM0MztcdFx0XHQgXCYjMzQ7L3RtcC9zY21fcmlnaHRzX2RlbmlhbF9icGYuJWQuWFhYWFhYXCYjMzQ7LCBpKTtcbiYjNDM7XHRcdHNlbGYtXHUwMDNlZmlsZXNbaV0gPSBta3N0ZW1wKHNlbGYtXHUwMDNlcGF0aHNbaV0pO1xuJiM0MztcdFx0QVNTRVJUX0dFKHNlbGYtXHUwMDNlZmlsZXNbaV0sIDApO1xuJiM0MztcbiYjNDM7XHRcdEFTU0VSVF9MVCgwLCBkcHJpbnRmKHNlbGYtXHUwMDNlZmlsZXNbaV0sIFNFQ1JFVChpKSkpO1xuJiM0MztcbiYjNDM7XHRcdEFTU0VSVF9FUSgwLCBmc3RhdChzZWxmLVx1MDAzZWZpbGVzW2ldLCBcdTAwMjZzdCkpO1xuJiM0MztcdFx0c2VsZi1cdTAwM2Vpbm9zW2ldID0gc3Quc3RfaW5vO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7RklYVFVSRV9URUFSRE9XTihzY21fcmlnaHRzX2RlbmlhbF9icGYpXG4mIzQzO3tcbiYjNDM7XHRicGZfbGlua19fZGVzdHJveShzZWxmLVx1MDAzZWxpbmspO1xuJiM0MztcdGJwZl9vYmplY3RfX2Nsb3NlKHNlbGYtXHUwMDNlb2JqKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIE5SX0ZJTEVTOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHNlbGYtXHUwMDNlZmlsZXNbaV0gXHUwMDNlPSAwKSB7XG4mIzQzO1x0XHRcdGNsb3NlKHNlbGYtXHUwMDNlZmlsZXNbaV0pO1xuJiM0MztcdFx0XHR1bmxpbmsoc2VsZi1cdTAwM2VwYXRoc1tpXSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRjbG9zZShzZWxmLVx1MDAzZXNrW1NLX1NFTkRFUl0pO1xuJiM0MztcdGNsb3NlKHNlbGYtXHUwMDNlc2tbU0tfUkVDRUlWRVJdKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBkZW55X2lub2RlKGludCBtYXBfZmQsIF9fdTY0IGlubylcbiYjNDM7e1xuJiM0MztcdF9fdTMyIHRnaWQgPSBnZXRwaWQoKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGJwZl9tYXBfdXBkYXRlX2VsZW0obWFwX2ZkLCBcdTAwMjZpbm8sIFx1MDAyNnRnaWQsIEJQRl9BTlkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHNldF9ub3RydW5jKGludCBzaylcbiYjNDM7e1xuJiM0MztcdGludCBvbmUgPSAxO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2V0c29ja29wdChzaywgU09MX1NPQ0tFVCwgU09fUklHSFRTX05PVFJVTkMsXG4mIzQzO1x0XHRcdCAgXHUwMDI2b25lLCBzaXplb2Yob25lKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgc2VuZF9mZHMoaW50IHNrLCBpbnQgKmZkcywgaW50IG4pXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGN0cmxbQ01TR19TUEFDRShOUl9GSUxFUyAqIHNpemVvZihpbnQpKV0gPSB7fTtcbiYjNDM7XHRjaGFyIGRhdGEgPSAmIzM5O3gmIzM5OztcbiYjNDM7XHRzdHJ1Y3QgaW92ZWMgaW92ID0ge1xuJiM0MztcdFx0Lmlvdl9iYXNlID0gXHUwMDI2ZGF0YSxcbiYjNDM7XHRcdC5pb3ZfbGVuID0gc2l6ZW9mKGRhdGEpLFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IG1zZ2hkciBtc2cgPSB7XG4mIzQzO1x0XHQubXNnX2lvdiA9IFx1MDAyNmlvdixcbiYjNDM7XHRcdC5tc2dfaW92bGVuID0gMSxcbiYjNDM7XHRcdC5tc2dfY29udHJvbCA9IGN0cmwsXG4mIzQzO1x0XHQubXNnX2NvbnRyb2xsZW4gPSBDTVNHX1NQQUNFKG4gKiBzaXplb2YoaW50KSksXG4mIzQzO1x0fTtcbiYjNDM7XHRzdHJ1Y3QgY21zZ2hkciAqY21zZyA9IENNU0dfRklSU1RIRFIoXHUwMDI2bXNnKTtcbiYjNDM7XG4mIzQzO1x0Y21zZy1cdTAwM2VjbXNnX2xldmVsID0gU09MX1NPQ0tFVDtcbiYjNDM7XHRjbXNnLVx1MDAzZWNtc2dfdHlwZSA9IFNDTV9SSUdIVFM7XG4mIzQzO1x0Y21zZy1cdTAwM2VjbXNnX2xlbiA9IENNU0dfTEVOKG4gKiBzaXplb2YoaW50KSk7XG4mIzQzO1x0bWVtY3B5KENNU0dfREFUQShjbXNnKSwgZmRzLCBuICogc2l6ZW9mKGludCkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2VuZG1zZyhzaywgXHUwMDI2bXNnLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByZWN2X2ZkX3Nsb3RzKGludCBzaywgaW50ICpzbG90cywgaW50ICptc2dfZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRpbnQgbnJfc2xvdHM7XG4mIzQzO1x0Y2hhciBjdHJsW0NNU0dfU1BBQ0UoTlJfRklMRVMgKiBzaXplb2YoaW50KSldO1xuJiM0MztcdGNoYXIgZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgaW92ZWMgaW92ID0ge1xuJiM0MztcdFx0Lmlvdl9iYXNlID0gXHUwMDI2ZGF0YSxcbiYjNDM7XHRcdC5pb3ZfbGVuID0gc2l6ZW9mKGRhdGEpLFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IG1zZ2hkciBtc2cgPSB7XG4mIzQzO1x0XHQubXNnX2lvdiA9IFx1MDAyNmlvdixcbiYjNDM7XHRcdC5tc2dfaW92bGVuID0gMSxcbiYjNDM7XHRcdC5tc2dfY29udHJvbCA9IGN0cmwsXG4mIzQzO1x0XHQubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY3RybCksXG4mIzQzO1x0fTtcbiYjNDM7XHRzdHJ1Y3QgY21zZ2hkciAqY21zZztcbiYjNDM7XG4mIzQzO1x0aWYgKHJlY3Ztc2coc2ssIFx1MDAyNm1zZywgMCkgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdCptc2dfZmxhZ3MgPSBtc2cubXNnX2ZsYWdzO1xuJiM0MztcbiYjNDM7XHRjbXNnID0gQ01TR19GSVJTVEhEUihcdTAwMjZtc2cpO1xuJiM0MztcdGlmICghY21zZylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRucl9zbG90cyA9IChjbXNnLVx1MDAzZWNtc2dfbGVuIC0gQ01TR19MRU4oMCkpIC8gc2l6ZW9mKGludCk7XG4mIzQzO1x0bWVtY3B5KHNsb3RzLCBDTVNHX0RBVEEoY21zZyksIG5yX3Nsb3RzICogc2l6ZW9mKGludCkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbnJfc2xvdHM7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFByb3ZlIGEgcmVjZWl2ZWQgZmQgd29ya3MgYnkgcmVhZGluZyBiYWNrIHRoZSBmaWxlJiMzOTtzIGNvbnRlbnQuICovXG4mIzQzO3N0YXRpYyBpbnQgY2hlY2tfc2VjcmV0KGludCBmZCwgaW50IGlkeClcbiYjNDM7e1xuJiM0MztcdGNoYXIgd2FudFszMl0sIGdvdFszMl0gPSB7fTtcbiYjNDM7XG4mIzQzO1x0c25wcmludGYod2FudCwgc2l6ZW9mKHdhbnQpLCBTRUNSRVQoaWR4KSk7XG4mIzQzO1x0aWYgKHByZWFkKGZkLCBnb3QsIHNpemVvZihnb3QpIC0gMSwgMCkgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdHJldHVybiBzdHJjbXAod2FudCwgZ290KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKHNjbV9yaWdodHNfZGVuaWFsX2JwZiwgYWxsX2FsbG93ZWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgc2xvdHNbTlJfRklMRVNdLCBucl9zbG90cywgZmxhZ3MsIGk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBzZXRfbm90cnVuYyhzZWxmLVx1MDAzZXNrW1NLX1JFQ0VJVkVSXSkpO1xuJiM0MztcdEFTU0VSVF9ORSgtMSwgc2VuZF9mZHMoc2VsZi1cdTAwM2Vza1tTS19TRU5ERVJdLCBzZWxmLVx1MDAzZWZpbGVzLCBOUl9GSUxFUykpO1xuJiM0MztcdG5yX3Nsb3RzID0gcmVjdl9mZF9zbG90cyhzZWxmLVx1MDAzZXNrW1NLX1JFQ0VJVkVSXSwgc2xvdHMsIFx1MDAyNmZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKE5SX0ZJTEVTLCBucl9zbG90cyk7XG4mIzQzO1x0RVhQRUNUX0VRKDAsIGZsYWdzIFx1MDAyNiBNU0dfQ1RSVU5DKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfRklMRVM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRBU1NFUlRfR0Uoc2xvdHNbaV0sIDApO1xuJiM0MztcdFx0RVhQRUNUX0VRKDAsIGNoZWNrX3NlY3JldChzbG90c1tpXSwgaSkpO1xuJiM0MztcdFx0Y2xvc2Uoc2xvdHNbaV0pO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKHNjbV9yaWdodHNfZGVuaWFsX2JwZiwgZmlyc3RfZGVuaWVkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHNsb3RzW05SX0ZJTEVTXSwgbnJfc2xvdHMsIGZsYWdzO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoMCwgZGVueV9pbm9kZShzZWxmLVx1MDAzZW1hcF9mZCwgc2VsZi1cdTAwM2Vpbm9zWzBdKSk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBzZXRfbm90cnVuYyhzZWxmLVx1MDAzZXNrW1NLX1JFQ0VJVkVSXSkpO1xuJiM0MztcdEFTU0VSVF9ORSgtMSwgc2VuZF9mZHMoc2VsZi1cdTAwM2Vza1tTS19TRU5ERVJdLCBzZWxmLVx1MDAzZWZpbGVzLCBOUl9GSUxFUykpO1xuJiM0MztcdG5yX3Nsb3RzID0gcmVjdl9mZF9zbG90cyhzZWxmLVx1MDAzZXNrW1NLX1JFQ0VJVkVSXSwgc2xvdHMsIFx1MDAyNmZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKE5SX0ZJTEVTLCBucl9zbG90cyk7XG4mIzQzO1x0RVhQRUNUX0VRKDAsIGZsYWdzIFx1MDAyNiBNU0dfQ1RSVU5DKTtcbiYjNDM7XHRFWFBFQ1RfRVEoLUVQRVJNLCBzbG90c1swXSk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9HRShzbG90c1sxXSwgMCk7XG4mIzQzO1x0RVhQRUNUX0VRKDAsIGNoZWNrX3NlY3JldChzbG90c1sxXSwgMSkpO1xuJiM0MztcdGNsb3NlKHNsb3RzWzFdKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKHNjbV9yaWdodHNfZGVuaWFsX2JwZiwgYWxsX2RlbmllZClcbiYjNDM7e1xuJiM0MztcdGludCBzbG90c1tOUl9GSUxFU10sIG5yX3Nsb3RzLCBmbGFncywgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfRklMRVM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0QVNTRVJUX0VRKDAsIGRlbnlfaW5vZGUoc2VsZi1cdTAwM2VtYXBfZmQsIHNlbGYtXHUwMDNlaW5vc1tpXSkpO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoMCwgc2V0X25vdHJ1bmMoc2VsZi1cdTAwM2Vza1tTS19SRUNFSVZFUl0pKTtcbiYjNDM7XHRBU1NFUlRfTkUoLTEsIHNlbmRfZmRzKHNlbGYtXHUwMDNlc2tbU0tfU0VOREVSXSwgc2VsZi1cdTAwM2VmaWxlcywgTlJfRklMRVMpKTtcbiYjNDM7XHRucl9zbG90cyA9IHJlY3ZfZmRfc2xvdHMoc2VsZi1cdTAwM2Vza1tTS19SRUNFSVZFUl0sIHNsb3RzLCBcdTAwMjZmbGFncyk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUShOUl9GSUxFUywgbnJfc2xvdHMpO1xuJiM0MztcdEVYUEVDVF9FUSgwLCBmbGFncyBcdTAwMjYgTVNHX0NUUlVOQyk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX0ZJTEVTOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdEVYUEVDVF9FUSgtRVBFUk0sIHNsb3RzW2ldKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKHNjbV9yaWdodHNfZGVuaWFsX2JwZiwgZGVuaWVkX3dpdGhvdXRfbm90cnVuYylcbiYjNDM7e1xuJiM0MztcdGludCBzbG90c1tOUl9GSUxFU10sIG5yX3Nsb3RzLCBmbGFncztcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBCYXNlbGluZSBiZWhhdmlvdXIgd2l0aG91dCBTT19SSUdIVFNfTk9UUlVOQzogdGhlIGZkIGFycmF5IGlzXG4mIzQzO1x0ICogdHJ1bmNhdGVkIGF0IHRoZSBmaXJzdCBkZW5pZWQgZmQgYW5kIE1TR19DVFJVTkMgaXMgc2V0LlxuJiM0MztcdCAqL1xuJiM0MztcdEFTU0VSVF9FUSgwLCBkZW55X2lub2RlKHNlbGYtXHUwMDNlbWFwX2ZkLCBzZWxmLVx1MDAzZWlub3NbMV0pKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX05FKC0xLCBzZW5kX2ZkcyhzZWxmLVx1MDAzZXNrW1NLX1NFTkRFUl0sIHNlbGYtXHUwMDNlZmlsZXMsIE5SX0ZJTEVTKSk7XG4mIzQzO1x0bnJfc2xvdHMgPSByZWN2X2ZkX3Nsb3RzKHNlbGYtXHUwMDNlc2tbU0tfUkVDRUlWRVJdLCBzbG90cywgXHUwMDI2ZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoMSwgbnJfc2xvdHMpO1xuJiM0MztcdEVYUEVDVF9ORSgwLCBmbGFncyBcdTAwMjYgTVNHX0NUUlVOQyk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9HRShzbG90c1swXSwgMCk7XG4mIzQzO1x0RVhQRUNUX0VRKDAsIGNoZWNrX3NlY3JldChzbG90c1swXSwgMCkpO1xuJiM0MztcdGNsb3NlKHNsb3RzWzBdKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9IQVJORVNTX01BSU5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAyMDowOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VU5JWCYjMzQ7LAogICAgJiMzNDtDT01QQVQmIzM0OywKICAgICYjMzQ7U0VDVVJJVFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1bml4X3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7c2NtX3JlY3Zfb25lX2ZkJiMzNDssCiAgICAmIzM0O3NjbV9kZXRhY2hfZmRzJiMzNDssCiAgICAmIzM0O3NjbV9kZXRhY2hfZmRzX2NvbXBhdCYjMzQ7LAogICAgJiMzNDtzY21fcmVjdl91bml4JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc29ja2V0IG9wdGlvbiBTT19SSUdIVFNfTk9UUlVOQyBmb3IgQUZfVU5JWCBzb2NrZXRzLiBUaGlzIG9wdGlvbiBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgU0NNX1JJR0hUUyB3aGVuIGEgZmlsZSBkZXNjcmlwdG9yIHJlY2VpdmUgaXMgZGVuaWVkIGJ5IGEgc2VjdXJpdHkgbW9kdWxlIChMU00pLiBJbnN0ZWFkIG9mIHRydW5jYXRpbmcgdGhlIGZpbGUgZGVzY3JpcHRvciBhcnJheSBhbmQgc2V0dGluZyBNU0dfQ1RSVU5DLCBpdCBwbGFjZXMgdGhlIGVycm9yIGNvZGUgaW4gdGhlIHVzZXImIzM5O3MgZmlsZSBkZXNjcmlwdG9yIGFycmF5LiBUaGlzIGludm9sdmVzIGNoYW5nZXMgdG8gY29yZSBBRl9VTklYIHNvY2tldCBvcHRpb24gcGFyc2luZyAodW5peF9zZXRzb2Nrb3B0KSwgc29ja2V0IGNvbm5lY3Rpb24gc3RhdGUgcHJvcGFnYXRpb24sIGFuZCB0aGUgU0NNIG1lc3NhZ2UgcmVjZWl2aW5nIGxvZ2ljIChzY21fcmVjdl9vbmVfZmQsIHNjbV9kZXRhY2hfZmRzLCBzY21fZGV0YWNoX2Zkc19jb21wYXQsIHNjbV9yZWN2X3VuaXgpLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgZXJyb3IgaGFuZGxpbmcgYW5kIGFycmF5IG1hbmlwdWxhdGlvbiBsb2dpYyBkb2VzIG5vdCBpbnRyb2R1Y2UgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgb3IgbGVha3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlNWNkYjRhOTM2ZTFhN2Q2OGY3MzYxZmY3NzVkOTYxNDE2NDc3YTM1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMiAyMDowOToyMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaAppbmRleCA1ZWY1N2Y4OGRmNmIzLi45NDZhNWZhZDI2OTEyIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oCkBAIC0xNTUsNiAmIzQzOzE1NSw4IEBACiAjZGVmaW5lIFNPX0lOUQkJCTg0CiAjZGVmaW5lIFNDTV9JTlEJCQlTT19JTlEKIAomIzQzOyNkZWZpbmUgU09fUklHSFRTX05PVFJVTkMgICAgICA4NQomIzQzOwogI2lmICFkZWZpbmVkKF9fS0VSTkVMX18pCiAKICNpZiBfX0JJVFNfUEVSX0xPTkcgPT0gNjQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmgKaW5kZXggNzJmYjFiMDA2ZGE5My4uZjE2NDFkZGUxMzVmYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmgKQEAgLTE2Niw2ICYjNDM7MTY2LDggQEAKICNkZWZpbmUgU09fSU5RCQkJODQKICNkZWZpbmUgU0NNX0lOUQkJCVNPX0lOUQogCiYjNDM7I2RlZmluZSBTT19SSUdIVFNfTk9UUlVOQyAgICAgIDg1CiYjNDM7CiAjaWYgIWRlZmluZWQoX19LRVJORUxfXykKIAogI2lmIF9fQklUU19QRVJfTE9ORyA9PSA2NApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmgKaW5kZXggYzE2ZWMzNmRmZWU2Yi4uZjNhMzgxNWM3ZGMyOSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oCkBAIC0xNDcsNiAmIzQzOzE0Nyw4IEBACiAjZGVmaW5lIFNPX0lOUQkJCTB4NDA1MgogI2RlZmluZSBTQ01fSU5RCQkJU09fSU5RCiAKJiM0MzsjZGVmaW5lIFNPX1JJR0hUU19OT1RSVU5DCTB4NDA1MwomIzQzOwogI2lmICFkZWZpbmVkKF9fS0VSTkVMX18pCiAKICNpZiBfX0JJVFNfUEVSX0xPTkcgPT0gNjQKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaAppbmRleCA3MWJlZmExMDllMWNmLi43OTA3ZjNiMWYwZWUwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zcGFyYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oCkBAIC0xNDgsNiAmIzQzOzE0OCw4IEBACiAjZGVmaW5lIFNPX0lOUSAgICAgICAgICAgICAgICAgICAweDAwNWQKICNkZWZpbmUgU0NNX0lOUSAgICAgICAgICAgICAgICAgIFNPX0lOUQogCiYjNDM7I2RlZmluZSBTT19SSUdIVFNfTk9UUlVOQyAgICAgICAgMHgwMDVlCiYjNDM7CiAjaWYgIWRlZmluZWQoX19LRVJORUxfXykKIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hZl91bml4LmggYi9pbmNsdWRlL25ldC9hZl91bml4LmgKaW5kZXggMzRmNTNkZGU2NWNlYS4uYmIxYjNkZWUwMmU4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYWZfdW5peC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2FmX3VuaXguaApAQCAtNDksNiAmIzQzOzQ5LDcgQEAgc3RydWN0IHVuaXhfc29jayB7CiAJc3RydWN0IHNjbV9zdGF0CQlzY21fc3RhdDsKIAlpbnQJCQlpbnFfbGVuOwogCWJvb2wJCQlyZWN2bXNnX2lucTsKJiM0MzsJYm9vbAkJCXNjbV9yaWdodHNfbm90cnVuYzsKICNpZiBJU19FTkFCTEVEKENPTkZJR19BRl9VTklYX09PQikKIAlzdHJ1Y3Qgc2tfYnVmZgkJKm9vYl9za2I7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjbS5oIGIvaW5jbHVkZS9uZXQvc2NtLmgKaW5kZXggYzUyNTE5NjY5MzQ5Zi4uODZhZTZiYzEwOWVjNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2NtLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvc2NtLmgKQEAgLTUwLDggJiM0Mzs1MCw4IEBAIHN0cnVjdCBzY21fY29va2llIHsKICNlbmRpZgogfTsKIAotdm9pZCBzY21fZGV0YWNoX2ZkcyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20pOwotdm9pZCBzY21fZGV0YWNoX2Zkc19jb21wYXQoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2NtKTsKJiM0Mzt2b2lkIHNjbV9kZXRhY2hfZmRzKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNjbV9jb29raWUgKnNjbSwgYm9vbCBub3RydW5jKTsKJiM0Mzt2b2lkIHNjbV9kZXRhY2hfZmRzX2NvbXBhdChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20sIGJvb2wgbm90cnVuYyk7CiBpbnQgX19zY21fc2VuZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20pOwogdm9pZCBfX3NjbV9kZXN0cm95KHN0cnVjdCBzY21fY29va2llICpzY20pOwogc3RydWN0IHNjbV9mcF9saXN0ICpzY21fZnBfZHVwKHN0cnVjdCBzY21fZnBfbGlzdCAqZnBsKTsKQEAgLTEwNywxMyAmIzQzOzEwNyw4IEBAIHZvaWQgc2NtX3JlY3Yoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAogdm9pZCBzY21fcmVjdl91bml4KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywKIAkJICAgc3RydWN0IHNjbV9jb29raWUgKnNjbSwgaW50IGZsYWdzKTsKIAotc3RhdGljIGlubGluZSBpbnQgc2NtX3JlY3Zfb25lX2ZkKHN0cnVjdCBmaWxlICpmLCBpbnQgX191c2VyICp1ZmQsCi0JCQkJICB1bnNpZ25lZCBpbnQgZmxhZ3MpCi17Ci0JaWYgKCF1ZmQpCi0JCXJldHVybiAtRUZBVUxUOwotCXJldHVybiByZWNlaXZlX2ZkKGYsIHVmZCwgZmxhZ3MpOwotfQomIzQzO2ludCBzY21fcmVjdl9vbmVfZmQoc3RydWN0IGZpbGUgKmYsIGludCBfX3VzZXIgKnVmZCwgdW5zaWduZWQgaW50IGZsYWdzLAomIzQzOwkJICAgIGJvb2wgbm90cnVuYyk7CiAKICNlbmRpZiAvKiBfX0xJTlVYX05FVF9TQ01fSCAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvc29ja2V0LmggYi9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvc29ja2V0LmgKaW5kZXggNTNiNWE4YzAwMmIxZS4uODRlYTdiOTI5MzZlMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NvY2tldC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaApAQCAtMTUwLDYgJiM0MzsxNTAsOCBAQAogI2RlZmluZSBTT19JTlEJCQk4NAogI2RlZmluZSBTQ01fSU5RCQkJU09fSU5RCiAKJiM0MzsjZGVmaW5lIFNPX1JJR0hUU19OT1RSVU5DCTg1CiYjNDM7CiAjaWYgIWRlZmluZWQoX19LRVJORUxfXykKIAogI2lmIF9fQklUU19QRVJfTE9ORyA9PSA2NCB8fCAoZGVmaW5lZChfX3g4Nl82NF9fKSAmYW1wOyZhbXA7IGRlZmluZWQoX19JTFAzMl9fKSkKZGlmZiAtLWdpdCBhL25ldC9jb21wYXQuYyBiL25ldC9jb21wYXQuYwppbmRleCBkNjhjZjljM2FhZDVmLi42YmRmNGEyYzkwNzdkIDEwMDY0NAotLS0gYS9uZXQvY29tcGF0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvbXBhdC5jCkBAIC0yODYsNyAmIzQzOzI4Niw3IEBAIHN0YXRpYyBpbnQgc2NtX21heF9mZHNfY29tcGF0KHN0cnVjdCBtc2doZHIgKm1zZykKIAlyZXR1cm4gKG1zZy0mZ3Q7bXNnX2NvbnRyb2xsZW4gLSBzaXplb2Yoc3RydWN0IGNvbXBhdF9jbXNnaGRyKSkgLyBzaXplb2YoaW50KTsKIH0KIAotdm9pZCBzY21fZGV0YWNoX2Zkc19jb21wYXQoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2NtKQomIzQzO3ZvaWQgc2NtX2RldGFjaF9mZHNfY29tcGF0KHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNjbV9jb29raWUgKnNjbSwgYm9vbCBub3RydW5jKQogewogCXN0cnVjdCBjb21wYXRfY21zZ2hkciBfX3VzZXIgKmNtID0KIAkJKHN0cnVjdCBjb21wYXRfY21zZ2hkciBfX3VzZXIgKiltc2ctJmd0O21zZ19jb250cm9sX3VzZXI7CkBAIC0yOTYsNyAmIzQzOzI5Niw3IEBAIHZvaWQgc2NtX2RldGFjaF9mZHNfY29tcGF0KHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNjbV9jb29raWUgKnNjbSkKIAlpbnQgZXJyID0gMCwgaTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBmZG1heDsgaSYjNDM7JiM0MzspIHsKLQkJZXJyID0gc2NtX3JlY3Zfb25lX2ZkKHNjbS0mZ3Q7ZnAtJmd0O2ZwW2ldLCBjbXNnX2RhdGEgJiM0MzsgaSwgb19mbGFncyk7CiYjNDM7CQllcnIgPSBzY21fcmVjdl9vbmVfZmQoc2NtLSZndDtmcC0mZ3Q7ZnBbaV0sIGNtc2dfZGF0YSAmIzQzOyBpLCBvX2ZsYWdzLCBub3RydW5jKTsKIAkJaWYgKGVyciAmbHQ7IDApCiAJCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9uZXQvY29yZS9zY20uYyBiL25ldC9jb3JlL3NjbS5jCmluZGV4IGVlYzEzZjUwZWNhZjYuLmYwZDQ0ZWNkYjExZmMgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NjbS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NjbS5jCkBAIC0zNTEsNyAmIzQzOzM1MSwzMSBAQCBzdGF0aWMgaW50IHNjbV9tYXhfZmRzKHN0cnVjdCBtc2doZHIgKm1zZykKIAlyZXR1cm4gKG1zZy0mZ3Q7bXNnX2NvbnRyb2xsZW4gLSBzaXplb2Yoc3RydWN0IGNtc2doZHIpKSAvIHNpemVvZihpbnQpOwogfQogCi12b2lkIHNjbV9kZXRhY2hfZmRzKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNjbV9jb29raWUgKnNjbSkKJiM0MztpbnQgc2NtX3JlY3Zfb25lX2ZkKHN0cnVjdCBmaWxlICpmLCBpbnQgX191c2VyICp1ZmQsIHVuc2lnbmVkIGludCBmbGFncywKJiM0MzsJCSAgICBib29sIG5vdHJ1bmMpCiYjNDM7ewomIzQzOwlpbnQgZXJyb3I7CiYjNDM7CiYjNDM7CWlmICghdWZkKQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CiYjNDM7CWVycm9yID0gc2VjdXJpdHlfZmlsZV9yZWNlaXZlKGYpOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlyZXR1cm4gbm90cnVuYyA/IHB1dF91c2VyKGVycm9yLCB1ZmQpIDogZXJyb3I7CiYjNDM7CiYjNDM7CUZEX1BSRVBBUkUoZmRmLCBmbGFncywgZ2V0X2ZpbGUoZikpOwomIzQzOwlpZiAoZmRmLmVycikKJiM0MzsJCXJldHVybiBmZGYuZXJyOwomIzQzOwomIzQzOwllcnJvciA9IHB1dF91c2VyKGZkX3ByZXBhcmVfZmQoZmRmKSwgdWZkKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJcmV0dXJuIGVycm9yOwomIzQzOwomIzQzOwlfX3JlY2VpdmVfc29jayhmZF9wcmVwYXJlX2ZpbGUoZmRmKSk7CiYjNDM7CXJldHVybiBmZF9wdWJsaXNoKGZkZik7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgc2NtX2RldGFjaF9mZHMoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2NtLCBib29sIG5vdHJ1bmMpCiB7CiAJc3RydWN0IGNtc2doZHIgX191c2VyICpjbSA9CiAJCShfX2ZvcmNlIHN0cnVjdCBjbXNnaGRyIF9fdXNlciAqKW1zZy0mZ3Q7bXNnX2NvbnRyb2xfdXNlcjsKQEAgLTM2NSwxMiAmIzQzOzM4OSwxMiBAQCB2b2lkIHNjbV9kZXRhY2hfZmRzKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNjbV9jb29raWUgKnNjbSkKIAkJcmV0dXJuOwogCiAJaWYgKG1zZy0mZ3Q7bXNnX2ZsYWdzICZhbXA7IE1TR19DTVNHX0NPTVBBVCkgewotCQlzY21fZGV0YWNoX2Zkc19jb21wYXQobXNnLCBzY20pOwomIzQzOwkJc2NtX2RldGFjaF9mZHNfY29tcGF0KG1zZywgc2NtLCBub3RydW5jKTsKIAkJcmV0dXJuOwogCX0KIAogCWZvciAoaSA9IDA7IGkgJmx0OyBmZG1heDsgaSYjNDM7JiM0MzspIHsKLQkJZXJyID0gc2NtX3JlY3Zfb25lX2ZkKHNjbS0mZ3Q7ZnAtJmd0O2ZwW2ldLCBjbXNnX2RhdGEgJiM0MzsgaSwgb19mbGFncyk7CiYjNDM7CQllcnIgPSBzY21fcmVjdl9vbmVfZmQoc2NtLSZndDtmcC0mZ3Q7ZnBbaV0sIGNtc2dfZGF0YSAmIzQzOyBpLCBvX2ZsYWdzLCBub3RydW5jKTsKIAkJaWYgKGVyciAmbHQ7IDApCiAJCQlicmVhazsKIAl9CkBAIC01MjMsOSAmIzQzOzU0Nyw2IEBAIHN0YXRpYyBib29sIF9fc2NtX3JlY3ZfY29tbW9uKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLAogCiAJc2NtX3Bhc3NlYyhzaywgbXNnLCBzY20pOwogCi0JaWYgKHNjbS0mZ3Q7ZnApCi0JCXNjbV9kZXRhY2hfZmRzKG1zZywgc2NtKTsKLQogCXJldHVybiB0cnVlOwogfQogCkBAIC01NDUsNiAmIzQzOzU2NiwxMyBAQCB2b2lkIHNjbV9yZWN2X3VuaXgoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAogCWlmICghX19zY21fcmVjdl9jb21tb24oc29jay0mZ3Q7c2ssIG1zZywgc2NtLCBmbGFncykpCiAJCXJldHVybjsKIAomIzQzOwlpZiAoc2NtLSZndDtmcCkgewomIzQzOwkJc3RydWN0IHVuaXhfc29jayAqdTsKJiM0MzsKJiM0MzsJCXUgPSB1bml4X3NrKHNvY2stJmd0O3NrKTsKJiM0MzsJCXNjbV9kZXRhY2hfZmRzKG1zZywgc2NtLCBSRUFEX09OQ0UodS0mZ3Q7c2NtX3JpZ2h0c19ub3RydW5jKSk7CiYjNDM7CX0KJiM0MzsKIAlpZiAoc29jay0mZ3Q7c2stJmd0O3NrX3NjbV9waWRmZCkKIAkJc2NtX3BpZGZkX3JlY3YobXNnLCBzY20pOwogCmRpZmYgLS1naXQgYS9uZXQvdW5peC9hZl91bml4LmMgYi9uZXQvdW5peC9hZl91bml4LmMKaW5kZXggMTBlZDk0MjFlNDNhYS4uMDNjZTIzYTRlYmVlMSAxMDA2NDQKLS0tIGEvbmV0L3VuaXgvYWZfdW5peC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC91bml4L2FmX3VuaXguYwpAQCAtOTIyLDYgJiM0Mzs5MjIsNyBAQCBzdGF0aWMgYm9vbCB1bml4X2N1c3RvbV9zb2Nrb3B0KGludCBvcHRuYW1lKQogewogCXN3aXRjaCAob3B0bmFtZSkgewogCWNhc2UgU09fSU5ROgomIzQzOwljYXNlIFNPX1JJR0hUU19OT1RSVU5DOgogCQlyZXR1cm4gdHJ1ZTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gZmFsc2U7CkBAIC05NTAsMTMgJiM0Mzs5NTEsMjEgQEAgc3RhdGljIGludCB1bml4X3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAlzd2l0Y2ggKG9wdG5hbWUpIHsKIAljYXNlIFNPX0lOUToKIAkJaWYgKHNrLSZndDtza190eXBlICE9IFNPQ0tfU1RSRUFNKQotCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJcmV0dXJuIC1FTk9QUk9UT09QVDsKIAogCQlpZiAodmFsICZndDsgMSB8fCB2YWwgJmx0OyAwKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJV1JJVEVfT05DRSh1LSZndDtyZWN2bXNnX2lucSwgdmFsKTsKIAkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgU09fUklHSFRTX05PVFJVTkM6CiYjNDM7CQlpZiAodmFsICZndDsgMSB8fCB2YWwgJmx0OyAwKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJV1JJVEVfT05DRSh1LSZndDtzY21fcmlnaHRzX25vdHJ1bmMsIHZhbCk7CiYjNDM7CQlicmVhazsKJiM0MzsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT1BST1RPT1BUOwogCX0KQEAgLTEwMDYsNiAmIzQzOzEwMTUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB1bml4X2RncmFtX29wcyA9IHsKICNlbmRpZgogCS5saXN0ZW4gPQlzb2NrX25vX2xpc3RlbiwKIAkuc2h1dGRvd24gPQl1bml4X3NodXRkb3duLAomIzQzOwkuc2V0c29ja29wdCA9CXVuaXhfc2V0c29ja29wdCwKIAkuc2VuZG1zZyA9CXVuaXhfZGdyYW1fc2VuZG1zZywKIAkucmVhZF9za2IgPQl1bml4X3JlYWRfc2tiLAogCS5yZWN2bXNnID0JdW5peF9kZ3JhbV9yZWN2bXNnLApAQCAtMTAzMCw2ICYjNDM7MTA0MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHVuaXhfc2VxcGFja2V0X29wcyA9IHsKICNlbmRpZgogCS5saXN0ZW4gPQl1bml4X2xpc3RlbiwKIAkuc2h1dGRvd24gPQl1bml4X3NodXRkb3duLAomIzQzOwkuc2V0c29ja29wdCA9CXVuaXhfc2V0c29ja29wdCwKIAkuc2VuZG1zZyA9CXVuaXhfc2VxcGFja2V0X3NlbmRtc2csCiAJLnJlY3Ztc2cgPQl1bml4X3NlcXBhY2tldF9yZWN2bXNnLAogCS5tbWFwID0JCXNvY2tfbm9fbW1hcCwKQEAgLTExNDMsOSAmIzQzOzExNTQsMTAgQEAgc3RhdGljIGludCB1bml4X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCwKIAlpZiAocHJvdG9jb2wgJmFtcDsmYW1wOyBwcm90b2NvbCAhPSBQRl9VTklYKQogCQlyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDsKIAomIzQzOwlzZXRfYml0KFNPQ0tfQ1VTVE9NX1NPQ0tPUFQsICZhbXA7c29jay0mZ3Q7ZmxhZ3MpOwomIzQzOwogCXN3aXRjaCAoc29jay0mZ3Q7dHlwZSkgewogCWNhc2UgU09DS19TVFJFQU06Ci0JCXNldF9iaXQoU09DS19DVVNUT01fU09DS09QVCwgJmFtcDtzb2NrLSZndDtmbGFncyk7CiAJCXNvY2stJmd0O29wcyA9ICZhbXA7dW5peF9zdHJlYW1fb3BzOwogCQlicmVhazsKIAkJLyoKQEAgLTE3NDMsOSAmIzQzOzE3NTUsMTAgQEAgc3RhdGljIGludCB1bml4X3N0cmVhbV9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWQKIAlpbml0X3BlZXJjcmVkKG5ld3NrLCAmYW1wO3BlZXJjcmVkKTsKIAogCW5ld3UgPSB1bml4X3NrKG5ld3NrKTsKJiM0MzsJb3RoZXJ1ID0gdW5peF9zayhvdGhlcik7CiAJbmV3dS0mZ3Q7bGlzdGVuZXIgPSBvdGhlcjsKJiM0MzsJbmV3dS0mZ3Q7c2NtX3JpZ2h0c19ub3RydW5jID0gb3RoZXJ1LSZndDtzY21fcmlnaHRzX25vdHJ1bmM7CiAJUkNVX0lOSVRfUE9JTlRFUihuZXdzay0mZ3Q7c2tfd3EsICZhbXA7bmV3dS0mZ3Q7cGVlcl93cSk7Ci0Jb3RoZXJ1ID0gdW5peF9zayhvdGhlcik7CiAKIAkvKiBjb3B5IGFkZHJlc3MgaW5mb3JtYXRpb24gZnJvbSBsaXN0ZW5pbmcgdG8gbmV3IHNvY2sKIAkgKgpAQCAtMTg2NSw4ICYjNDM7MTg3OCw3IEBAIHN0YXRpYyBpbnQgdW5peF9hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jaywKIAlza2JfZnJlZV9kYXRhZ3JhbShzaywgc2tiKTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJmFtcDt1bml4X3NrKHNrKS0mZ3Q7cGVlcl93YWl0KTsKIAotCWlmICh0c2stJmd0O3NrX3R5cGUgPT0gU09DS19TVFJFQU0pCi0JCXNldF9iaXQoU09DS19DVVNUT01fU09DS09QVCwgJmFtcDtuZXdzb2NrLSZndDtmbGFncyk7CiYjNDM7CXNldF9iaXQoU09DS19DVVNUT01fU09DS09QVCwgJmFtcDtuZXdzb2NrLSZndDtmbGFncyk7CiAKIAkvKiBhdHRhY2ggYWNjZXB0ZWQgc29jayB0byBzb2NrZXQgKi8KIAl1bml4X3N0YXRlX2xvY2sodHNrKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4Ly5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC8uZ2l0aWdub3JlCmluZGV4IDk3MzE3NjY0NDEwMzYuLjk1NGYwOTU4ZGQwMzQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4Ly5naXRpZ25vcmUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvLmdpdGlnbm9yZQpAQCAtMyw2ICYjNDM7Myw4IEBAIG1zZ19vb2IKIHNjbV9pbnEKIHNjbV9waWRmZAogc2NtX3JpZ2h0cwomIzQzO3NjbV9yaWdodHNfZGVuaWFsX2xzbQomIzQzO3NjbV9yaWdodHNfZGVuaWFsX2xzbS5icGYubwogc29fcGVla19vZmYKIHVuaXhfY29ubmVjdAogdW5peF9jb25ucmVzZXQKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvTWFrZWZpbGUKaW5kZXggNTdkMTU5ODAzYTNhYi4uYTY2ZjEwZmIwYzIzMSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvTWFrZWZpbGUKQEAgLTExLDEwICYjNDM7MTEsMTggQEAgVEVTVF9HRU5fUFJPR1MgOj0gXAogCXNjbV9pbnEgXAogCXNjbV9waWRmZCBcCiAJc2NtX3JpZ2h0cyBcCiYjNDM7CXNjbV9yaWdodHNfZGVuaWFsX2xzbSBcCiAJc29fcGVla19vZmYgXAogCXVuaXhfY29ubmVjdCBcCiAJdW5peF9jb25ucmVzZXQgXAogCXVuaXhfbGlzdGVuIFwKICMgZW5kIG9mIFRFU1RfR0VOX1BST0dTCiAKJiM0MztURVNUX0dFTl9GSUxFUyA6PSBzY21fcmlnaHRzX2RlbmlhbF9sc20uYnBmLm8KJiM0MzsKIGluY2x1ZGUgLi4vLi4vbGliLm1rCiYjNDM7aW5jbHVkZSAuLi9icGYubWsKJiM0MzsKJiM0MzskKE9VVFBVVCkvc2NtX3JpZ2h0c19kZW5pYWxfbHNtOiAkKEJQRk9CSikKJiM0MzskKE9VVFBVVCkvc2NtX3JpZ2h0c19kZW5pYWxfbHNtOiBDRkxBR1MgJiM0Mzs9IC1JJChTQ1JBVENIX0RJUikvaW5jbHVkZQomIzQzOyQoT1VUUFVUKS9zY21fcmlnaHRzX2RlbmlhbF9sc206IExETElCUyAmIzQzOz0gLWxlbGYgLWx6CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9jb25maWcKaW5kZXggNDFkYmIwM2M3NDdlYi4uNDY4ZjdhMGJiNjRlNiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L2NvbmZpZwpAQCAtMiwzICYjNDM7MiwxMCBAQCBDT05GSUdfQUZfVU5JWF9PT0I9eQogQ09ORklHX1VOSVg9eQogQ09ORklHX1VOSVhfRElBRz1tCiBDT05GSUdfVVNFUl9OUz15CiYjNDM7Q09ORklHX0JQRj15CiYjNDM7Q09ORklHX0JQRl9TWVNDQUxMPXkKJiM0MztDT05GSUdfQlBGX0VWRU5UUz15CiYjNDM7Q09ORklHX0JQRl9KSVQ9eQomIzQzO0NPTkZJR19TRUNVUklUWT15CiYjNDM7Q09ORklHX0JQRl9MU009eQomIzQzO0NPTkZJR19ERUJVR19JTkZPX0JURj15CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzX2RlbmlhbF9sc20uYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzX2RlbmlhbF9sc20uYnBmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNGYyNDE0NDY1YmZkMwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHNfZGVuaWFsX2xzbS5icGYuYwpAQCAtMCwwICYjNDM7MSwzNiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JwZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9lcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl90cmFjaW5nLmgmZ3Q7CiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwomIzQzOwomIzQzO3N0cnVjdCBpbm9kZSB7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaV9pbm87CiYjNDM7fSBfX2F0dHJpYnV0ZV9fKChwcmVzZXJ2ZV9hY2Nlc3NfaW5kZXgpKTsKJiM0MzsKJiM0MztzdHJ1Y3QgZmlsZSB7CiYjNDM7CXN0cnVjdCBpbm9kZSAqZl9pbm9kZTsKJiM0Mzt9IF9fYXR0cmlidXRlX18oKHByZXNlcnZlX2FjY2Vzc19pbmRleCkpOwomIzQzOwomIzQzO3N0cnVjdCB7CiYjNDM7CV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfSEFTSCk7CiYjNDM7CV9fdWludChtYXhfZW50cmllcywgMTYpOwomIzQzOwlfX3R5cGUoa2V5LCBfX3U2NCk7CS8qIGlub2RlIG51bWJlciAqLwomIzQzOwlfX3R5cGUodmFsdWUsIF9fdTMyKTsJLyogdGdpZCBvZiB0aGUgcmVjZWl2ZXIgYmVpbmcgdGVzdGVkICovCiYjNDM7fSBkZW5pZWRfaW5vZGVzIFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwomIzQzO1NFQygmIzM0O2xzbS9maWxlX3JlY2VpdmUmIzM0OykKJiM0MztpbnQgQlBGX1BST0coc2NtX3JpZ2h0c19kZW55LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CV9fdTMyIHRnaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSAmZ3Q7Jmd0OyAzMjsKJiM0MzsJX191NjQgaW5vID0gZmlsZS0mZ3Q7Zl9pbm9kZS0mZ3Q7aV9pbm87CiYjNDM7CV9fdTMyICpvd25lcjsKJiM0MzsKJiM0MzsJb3duZXIgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7ZGVuaWVkX2lub2RlcywgJmFtcDtpbm8pOwomIzQzOwlpZiAob3duZXIgJmFtcDsmYW1wOyAqb3duZXIgPT0gdGdpZCkKJiM0MzsJCXJldHVybiAtRVBFUk07CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHNfZGVuaWFsX2xzbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvc2NtX3JpZ2h0c19kZW5pYWxfbHNtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uOTQxYjdkZWNmNzk4MAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHNfZGVuaWFsX2xzbS5jCkBAIC0wLDAgJiM0MzsxLDI4NSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2RlZmluZSBfR05VX1NPVVJDRQomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtmY250bC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvc29ja2V0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9zdGF0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy90eXBlcy5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9saWJicGYuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdF9oYXJuZXNzLmgmIzM0OwomIzQzOwomIzQzOyNpZm5kZWYgU09fUklHSFRTX05PVFJVTkMKJiM0MzsjZGVmaW5lIFNPX1JJR0hUU19OT1RSVU5DIDg1CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2RlZmluZSBOUl9GSUxFUyAyCiYjNDM7CiYjNDM7LyogUGVyLWZpbGUgY29udGVudCwgc28gYSByZWNlaXZlZCBmZCBjYW4gYmUgbWF0Y2hlZCB0byB0aGUgZmlsZSBzZW50ICovCiYjNDM7I2RlZmluZSBTRUNSRVQobikgJiMzNDtzZWNyZXQgJWQmIzM0OywgKG4pCiYjNDM7CiYjNDM7LyogSW5kaWNlcyBpbnRvIHRoZSBzb2NrZXRwYWlyICovCiYjNDM7I2RlZmluZSBTS19TRU5ERVIgMAomIzQzOyNkZWZpbmUgU0tfUkVDRUlWRVIgMQomIzQzOwomIzQzO0ZJWFRVUkUoc2NtX3JpZ2h0c19kZW5pYWxfYnBmKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9vYmplY3QgKm9iajsKJiM0MzsJc3RydWN0IGJwZl9saW5rICpsaW5rOwomIzQzOwlpbnQgbWFwX2ZkOwomIzQzOwlpbnQgc2tbMl07CiYjNDM7CWludCBmaWxlc1tOUl9GSUxFU107CiYjNDM7CV9fdTY0IGlub3NbTlJfRklMRVNdOwomIzQzOwljaGFyIHBhdGhzW05SX0ZJTEVTXVs2NF07CiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlQoc2NtX3JpZ2h0c19kZW5pYWxfYnBmKQomIzQzO3sKJiM0MzsJaW50IHNvY2tfdHlwZTsKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoc2NtX3JpZ2h0c19kZW5pYWxfYnBmLCBzdHJlYW0pCiYjNDM7ewomIzQzOwkuc29ja190eXBlID0gU09DS19TVFJFQU0sCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKHNjbV9yaWdodHNfZGVuaWFsX2JwZiwgZGdyYW0pCiYjNDM7ewomIzQzOwkuc29ja190eXBlID0gU09DS19ER1JBTSwKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoc2NtX3JpZ2h0c19kZW5pYWxfYnBmLCBzZXFwYWNrZXQpCiYjNDM7ewomIzQzOwkuc29ja190eXBlID0gU09DS19TRVFQQUNLRVQsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1NFVFVQKHNjbV9yaWdodHNfZGVuaWFsX2JwZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZzsKJiM0MzsJY2hhciBsc21zWzI1Nl0gPSB7fTsKJiM0MzsJaW50IGksIGZkOwomIzQzOwomIzQzOwlpZiAoZ2V0ZXVpZCgpICE9IDApCiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDtyZXF1aXJlcyByb290JiMzNDspOwomIzQzOwomIzQzOwlmZCA9IG9wZW4oJiMzNDsvc3lzL2tlcm5lbC9zZWN1cml0eS9sc20mIzM0OywgT19SRE9OTFkpOwomIzQzOwlBU1NFUlRfR0UoZmQsIDApOwomIzQzOwlBU1NFUlRfTFQoMCwgcmVhZChmZCwgbHNtcywgc2l6ZW9mKGxzbXMpIC0gMSkpOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CiYjNDM7CWlmICghc3Ryc3RyKGxzbXMsICYjMzQ7YnBmJiMzNDspKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7QlBGIExTTSBub3QgYWN0aXZlIChib290IHdpdGggbHNtPS4uLixicGYpJiMzNDspOwomIzQzOwomIzQzOwlzZWxmLSZndDtvYmogPSBicGZfb2JqZWN0X19vcGVuX2ZpbGUoJiMzNDtzY21fcmlnaHRzX2RlbmlhbF9sc20uYnBmLm8mIzM0OywgTlVMTCk7CiYjNDM7CUFTU0VSVF9ORShOVUxMLCBzZWxmLSZndDtvYmopOwomIzQzOwlBU1NFUlRfRVEoMCwgYnBmX29iamVjdF9fbG9hZChzZWxmLSZndDtvYmopKTsKJiM0MzsKJiM0MzsJcHJvZyA9IGJwZl9vYmplY3RfX2ZpbmRfcHJvZ3JhbV9ieV9uYW1lKHNlbGYtJmd0O29iaiwgJiMzNDtzY21fcmlnaHRzX2RlbnkmIzM0Oyk7CiYjNDM7CUFTU0VSVF9ORShOVUxMLCBwcm9nKTsKJiM0MzsKJiM0MzsJc2VsZi0mZ3Q7bGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfbHNtKHByb2cpOwomIzQzOwlBU1NFUlRfTkUoTlVMTCwgc2VsZi0mZ3Q7bGluayk7CiYjNDM7CiYjNDM7CXNlbGYtJmd0O21hcF9mZCA9IGJwZl9vYmplY3RfX2ZpbmRfbWFwX2ZkX2J5X25hbWUoc2VsZi0mZ3Q7b2JqLAomIzQzOwkJCQkJCSAgICAgICAmIzM0O2RlbmllZF9pbm9kZXMmIzM0Oyk7CiYjNDM7CUFTU0VSVF9HRShzZWxmLSZndDttYXBfZmQsIDApOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoMCwgc29ja2V0cGFpcihBRl9VTklYLCB2YXJpYW50LSZndDtzb2NrX3R5cGUsIDAsIHNlbGYtJmd0O3NrKSk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBOUl9GSUxFUzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBzdGF0IHN0OwomIzQzOwomIzQzOwkJc25wcmludGYoc2VsZi0mZ3Q7cGF0aHNbaV0sIHNpemVvZihzZWxmLSZndDtwYXRoc1tpXSksCiYjNDM7CQkJICYjMzQ7L3RtcC9zY21fcmlnaHRzX2RlbmlhbF9icGYuJWQuWFhYWFhYJiMzNDssIGkpOwomIzQzOwkJc2VsZi0mZ3Q7ZmlsZXNbaV0gPSBta3N0ZW1wKHNlbGYtJmd0O3BhdGhzW2ldKTsKJiM0MzsJCUFTU0VSVF9HRShzZWxmLSZndDtmaWxlc1tpXSwgMCk7CiYjNDM7CiYjNDM7CQlBU1NFUlRfTFQoMCwgZHByaW50ZihzZWxmLSZndDtmaWxlc1tpXSwgU0VDUkVUKGkpKSk7CiYjNDM7CiYjNDM7CQlBU1NFUlRfRVEoMCwgZnN0YXQoc2VsZi0mZ3Q7ZmlsZXNbaV0sICZhbXA7c3QpKTsKJiM0MzsJCXNlbGYtJmd0O2lub3NbaV0gPSBzdC5zdF9pbm87CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7RklYVFVSRV9URUFSRE9XTihzY21fcmlnaHRzX2RlbmlhbF9icGYpCiYjNDM7ewomIzQzOwlicGZfbGlua19fZGVzdHJveShzZWxmLSZndDtsaW5rKTsKJiM0MzsJYnBmX29iamVjdF9fY2xvc2Uoc2VsZi0mZ3Q7b2JqKTsKJiM0MzsKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBOUl9GSUxFUzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChzZWxmLSZndDtmaWxlc1tpXSAmZ3Q7PSAwKSB7CiYjNDM7CQkJY2xvc2Uoc2VsZi0mZ3Q7ZmlsZXNbaV0pOwomIzQzOwkJCXVubGluayhzZWxmLSZndDtwYXRoc1tpXSk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJY2xvc2Uoc2VsZi0mZ3Q7c2tbU0tfU0VOREVSXSk7CiYjNDM7CWNsb3NlKHNlbGYtJmd0O3NrW1NLX1JFQ0VJVkVSXSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZGVueV9pbm9kZShpbnQgbWFwX2ZkLCBfX3U2NCBpbm8pCiYjNDM7ewomIzQzOwlfX3UzMiB0Z2lkID0gZ2V0cGlkKCk7CiYjNDM7CiYjNDM7CXJldHVybiBicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcF9mZCwgJmFtcDtpbm8sICZhbXA7dGdpZCwgQlBGX0FOWSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgc2V0X25vdHJ1bmMoaW50IHNrKQomIzQzO3sKJiM0MzsJaW50IG9uZSA9IDE7CiYjNDM7CiYjNDM7CXJldHVybiBzZXRzb2Nrb3B0KHNrLCBTT0xfU09DS0VULCBTT19SSUdIVFNfTk9UUlVOQywKJiM0MzsJCQkgICZhbXA7b25lLCBzaXplb2Yob25lKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgc2VuZF9mZHMoaW50IHNrLCBpbnQgKmZkcywgaW50IG4pCiYjNDM7ewomIzQzOwljaGFyIGN0cmxbQ01TR19TUEFDRShOUl9GSUxFUyAqIHNpemVvZihpbnQpKV0gPSB7fTsKJiM0MzsJY2hhciBkYXRhID0gJiMzOTt4JiMzOTs7CiYjNDM7CXN0cnVjdCBpb3ZlYyBpb3YgPSB7CiYjNDM7CQkuaW92X2Jhc2UgPSAmYW1wO2RhdGEsCiYjNDM7CQkuaW92X2xlbiA9IHNpemVvZihkYXRhKSwKJiM0MzsJfTsKJiM0MzsJc3RydWN0IG1zZ2hkciBtc2cgPSB7CiYjNDM7CQkubXNnX2lvdiA9ICZhbXA7aW92LAomIzQzOwkJLm1zZ19pb3ZsZW4gPSAxLAomIzQzOwkJLm1zZ19jb250cm9sID0gY3RybCwKJiM0MzsJCS5tc2dfY29udHJvbGxlbiA9IENNU0dfU1BBQ0UobiAqIHNpemVvZihpbnQpKSwKJiM0MzsJfTsKJiM0MzsJc3RydWN0IGNtc2doZHIgKmNtc2cgPSBDTVNHX0ZJUlNUSERSKCZhbXA7bXNnKTsKJiM0MzsKJiM0MzsJY21zZy0mZ3Q7Y21zZ19sZXZlbCA9IFNPTF9TT0NLRVQ7CiYjNDM7CWNtc2ctJmd0O2Ntc2dfdHlwZSA9IFNDTV9SSUdIVFM7CiYjNDM7CWNtc2ctJmd0O2Ntc2dfbGVuID0gQ01TR19MRU4obiAqIHNpemVvZihpbnQpKTsKJiM0MzsJbWVtY3B5KENNU0dfREFUQShjbXNnKSwgZmRzLCBuICogc2l6ZW9mKGludCkpOwomIzQzOwomIzQzOwlyZXR1cm4gc2VuZG1zZyhzaywgJmFtcDttc2csIDApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJlY3ZfZmRfc2xvdHMoaW50IHNrLCBpbnQgKnNsb3RzLCBpbnQgKm1zZ19mbGFncykKJiM0Mzt7CiYjNDM7CWludCBucl9zbG90czsKJiM0MzsJY2hhciBjdHJsW0NNU0dfU1BBQ0UoTlJfRklMRVMgKiBzaXplb2YoaW50KSldOwomIzQzOwljaGFyIGRhdGE7CiYjNDM7CXN0cnVjdCBpb3ZlYyBpb3YgPSB7CiYjNDM7CQkuaW92X2Jhc2UgPSAmYW1wO2RhdGEsCiYjNDM7CQkuaW92X2xlbiA9IHNpemVvZihkYXRhKSwKJiM0MzsJfTsKJiM0MzsJc3RydWN0IG1zZ2hkciBtc2cgPSB7CiYjNDM7CQkubXNnX2lvdiA9ICZhbXA7aW92LAomIzQzOwkJLm1zZ19pb3ZsZW4gPSAxLAomIzQzOwkJLm1zZ19jb250cm9sID0gY3RybCwKJiM0MzsJCS5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjdHJsKSwKJiM0MzsJfTsKJiM0MzsJc3RydWN0IGNtc2doZHIgKmNtc2c7CiYjNDM7CiYjNDM7CWlmIChyZWN2bXNnKHNrLCAmYW1wO21zZywgMCkgJmx0OyAwKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwkqbXNnX2ZsYWdzID0gbXNnLm1zZ19mbGFnczsKJiM0MzsKJiM0MzsJY21zZyA9IENNU0dfRklSU1RIRFIoJmFtcDttc2cpOwomIzQzOwlpZiAoIWNtc2cpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJbnJfc2xvdHMgPSAoY21zZy0mZ3Q7Y21zZ19sZW4gLSBDTVNHX0xFTigwKSkgLyBzaXplb2YoaW50KTsKJiM0MzsJbWVtY3B5KHNsb3RzLCBDTVNHX0RBVEEoY21zZyksIG5yX3Nsb3RzICogc2l6ZW9mKGludCkpOwomIzQzOwomIzQzOwlyZXR1cm4gbnJfc2xvdHM7CiYjNDM7fQomIzQzOwomIzQzOy8qIFByb3ZlIGEgcmVjZWl2ZWQgZmQgd29ya3MgYnkgcmVhZGluZyBiYWNrIHRoZSBmaWxlJiMzOTtzIGNvbnRlbnQuICovCiYjNDM7c3RhdGljIGludCBjaGVja19zZWNyZXQoaW50IGZkLCBpbnQgaWR4KQomIzQzO3sKJiM0MzsJY2hhciB3YW50WzMyXSwgZ290WzMyXSA9IHt9OwomIzQzOwomIzQzOwlzbnByaW50Zih3YW50LCBzaXplb2Yod2FudCksIFNFQ1JFVChpZHgpKTsKJiM0MzsJaWYgKHByZWFkKGZkLCBnb3QsIHNpemVvZihnb3QpIC0gMSwgMCkgJmx0OyAwKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlyZXR1cm4gc3RyY21wKHdhbnQsIGdvdCk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihzY21fcmlnaHRzX2RlbmlhbF9icGYsIGFsbF9hbGxvd2VkKQomIzQzO3sKJiM0MzsJaW50IHNsb3RzW05SX0ZJTEVTXSwgbnJfc2xvdHMsIGZsYWdzLCBpOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoMCwgc2V0X25vdHJ1bmMoc2VsZi0mZ3Q7c2tbU0tfUkVDRUlWRVJdKSk7CiYjNDM7CUFTU0VSVF9ORSgtMSwgc2VuZF9mZHMoc2VsZi0mZ3Q7c2tbU0tfU0VOREVSXSwgc2VsZi0mZ3Q7ZmlsZXMsIE5SX0ZJTEVTKSk7CiYjNDM7CW5yX3Nsb3RzID0gcmVjdl9mZF9zbG90cyhzZWxmLSZndDtza1tTS19SRUNFSVZFUl0sIHNsb3RzLCAmYW1wO2ZsYWdzKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKE5SX0ZJTEVTLCBucl9zbG90cyk7CiYjNDM7CUVYUEVDVF9FUSgwLCBmbGFncyAmYW1wOyBNU0dfQ1RSVU5DKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE5SX0ZJTEVTOyBpJiM0MzsmIzQzOykgewomIzQzOwkJQVNTRVJUX0dFKHNsb3RzW2ldLCAwKTsKJiM0MzsJCUVYUEVDVF9FUSgwLCBjaGVja19zZWNyZXQoc2xvdHNbaV0sIGkpKTsKJiM0MzsJCWNsb3NlKHNsb3RzW2ldKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztURVNUX0Yoc2NtX3JpZ2h0c19kZW5pYWxfYnBmLCBmaXJzdF9kZW5pZWQpCiYjNDM7ewomIzQzOwlpbnQgc2xvdHNbTlJfRklMRVNdLCBucl9zbG90cywgZmxhZ3M7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSgwLCBkZW55X2lub2RlKHNlbGYtJmd0O21hcF9mZCwgc2VsZi0mZ3Q7aW5vc1swXSkpOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoMCwgc2V0X25vdHJ1bmMoc2VsZi0mZ3Q7c2tbU0tfUkVDRUlWRVJdKSk7CiYjNDM7CUFTU0VSVF9ORSgtMSwgc2VuZF9mZHMoc2VsZi0mZ3Q7c2tbU0tfU0VOREVSXSwgc2VsZi0mZ3Q7ZmlsZXMsIE5SX0ZJTEVTKSk7CiYjNDM7CW5yX3Nsb3RzID0gcmVjdl9mZF9zbG90cyhzZWxmLSZndDtza1tTS19SRUNFSVZFUl0sIHNsb3RzLCAmYW1wO2ZsYWdzKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKE5SX0ZJTEVTLCBucl9zbG90cyk7CiYjNDM7CUVYUEVDVF9FUSgwLCBmbGFncyAmYW1wOyBNU0dfQ1RSVU5DKTsKJiM0MzsJRVhQRUNUX0VRKC1FUEVSTSwgc2xvdHNbMF0pOwomIzQzOwomIzQzOwlBU1NFUlRfR0Uoc2xvdHNbMV0sIDApOwomIzQzOwlFWFBFQ1RfRVEoMCwgY2hlY2tfc2VjcmV0KHNsb3RzWzFdLCAxKSk7CiYjNDM7CWNsb3NlKHNsb3RzWzFdKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKHNjbV9yaWdodHNfZGVuaWFsX2JwZiwgYWxsX2RlbmllZCkKJiM0Mzt7CiYjNDM7CWludCBzbG90c1tOUl9GSUxFU10sIG5yX3Nsb3RzLCBmbGFncywgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE5SX0ZJTEVTOyBpJiM0MzsmIzQzOykKJiM0MzsJCUFTU0VSVF9FUSgwLCBkZW55X2lub2RlKHNlbGYtJmd0O21hcF9mZCwgc2VsZi0mZ3Q7aW5vc1tpXSkpOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoMCwgc2V0X25vdHJ1bmMoc2VsZi0mZ3Q7c2tbU0tfUkVDRUlWRVJdKSk7CiYjNDM7CUFTU0VSVF9ORSgtMSwgc2VuZF9mZHMoc2VsZi0mZ3Q7c2tbU0tfU0VOREVSXSwgc2VsZi0mZ3Q7ZmlsZXMsIE5SX0ZJTEVTKSk7CiYjNDM7CW5yX3Nsb3RzID0gcmVjdl9mZF9zbG90cyhzZWxmLSZndDtza1tTS19SRUNFSVZFUl0sIHNsb3RzLCAmYW1wO2ZsYWdzKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKE5SX0ZJTEVTLCBucl9zbG90cyk7CiYjNDM7CUVYUEVDVF9FUSgwLCBmbGFncyAmYW1wOyBNU0dfQ1RSVU5DKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE5SX0ZJTEVTOyBpJiM0MzsmIzQzOykKJiM0MzsJCUVYUEVDVF9FUSgtRVBFUk0sIHNsb3RzW2ldKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKHNjbV9yaWdodHNfZGVuaWFsX2JwZiwgZGVuaWVkX3dpdGhvdXRfbm90cnVuYykKJiM0Mzt7CiYjNDM7CWludCBzbG90c1tOUl9GSUxFU10sIG5yX3Nsb3RzLCBmbGFnczsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQmFzZWxpbmUgYmVoYXZpb3VyIHdpdGhvdXQgU09fUklHSFRTX05PVFJVTkM6IHRoZSBmZCBhcnJheSBpcwomIzQzOwkgKiB0cnVuY2F0ZWQgYXQgdGhlIGZpcnN0IGRlbmllZCBmZCBhbmQgTVNHX0NUUlVOQyBpcyBzZXQuCiYjNDM7CSAqLwomIzQzOwlBU1NFUlRfRVEoMCwgZGVueV9pbm9kZShzZWxmLSZndDttYXBfZmQsIHNlbGYtJmd0O2lub3NbMV0pKTsKJiM0MzsKJiM0MzsJQVNTRVJUX05FKC0xLCBzZW5kX2ZkcyhzZWxmLSZndDtza1tTS19TRU5ERVJdLCBzZWxmLSZndDtmaWxlcywgTlJfRklMRVMpKTsKJiM0MzsJbnJfc2xvdHMgPSByZWN2X2ZkX3Nsb3RzKHNlbGYtJmd0O3NrW1NLX1JFQ0VJVkVSXSwgc2xvdHMsICZhbXA7ZmxhZ3MpOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoMSwgbnJfc2xvdHMpOwomIzQzOwlFWFBFQ1RfTkUoMCwgZmxhZ3MgJmFtcDsgTVNHX0NUUlVOQyk7CiYjNDM7CiYjNDM7CUFTU0VSVF9HRShzbG90c1swXSwgMCk7CiYjNDM7CUVYUEVDVF9FUSgwLCBjaGVja19zZWNyZXQoc2xvdHNbMF0sIDApKTsKJiM0MzsJY2xvc2Uoc2xvdHNbMF0pOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0hBUk5FU1NfTUFJTgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAyMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDMzMwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDc3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldyBTT19SSUdIVFNfTk9UUlVOQyBTb2NrZXQgT3B0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGludHJvZHVjaW5nIGBTT19SSUdIVFNfTk9UUlVOQ2AgZm9yIEFGX1VOSVggc29ja2V0cy4gVGhlIGNvcmUgaWRlYSBpcyB0aGF0IHdoZW4gYSBzZWN1cml0eSBtb2R1bGUgbGlrZSBhbiBMU00gZGVuaWVzIHRoZSByZWNlaXB0IG9mIGEgZmlsZSBkZXNjcmlwdG9yIHZpYSBgU0NNX1JJR0hUU2AsIGluc3RlYWQgb2YgdHJ1bmNhdGluZyB0aGUgRkQgYXJyYXkgYW5kIHNldHRpbmcgYE1TR19DVFJVTkNgLCB3ZSBub3cgaGF2ZSB0aGUgb3B0aW9uIHRvICpub3QqIHRydW5jYXRlLiBJbnN0ZWFkLCB0aGUgZXJyb3IgY29kZSAobGlrZSBgLUVQRVJNYCkgZ2V0cyBwbGFjZWQgZGlyZWN0bHkgaW50byB0aGUgdXNlciYjMzk7cyBGRCBhcnJheSwgZXNzZW50aWFsbHkgc2lnbmFsaW5nIHRoZSBkZW5pYWwgbW9yZSBleHBsaWNpdGx5LiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZSB0byB0aGUgc3RhbmRhcmQgYmVoYXZpb3IsIGFsdGhvdWdoIHRhcmdldGVkLgoKTGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGRpZmYgdG8gc2VlIHRoZSBzcGVjaWZpY3MuIFdlJiMzOTt2ZSBnb3Q6CgoqICAgVGhlIG9idmlvdXMgaGVhZGVyIGZpbGUgdXBkYXRlcyBpbiBgYXJjaC8qL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmhgIGFuZCBgaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NvY2tldC5oYCB0byBkZWZpbmUgdGhlIG5ldyBgU09fUklHSFRTX05PVFJVTkNgIG9wdGlvbiAodmFsdWUgODUpLgoqICAgSW4gYGluY2x1ZGUvbmV0L2FmX3VuaXguaGAsIGEgbmV3IGBib29sIHNjbV9yaWdodHNfbm90cnVuYztgIG1lbWJlciBoYXMgYmVlbiBhZGRlZCB0byB0aGUgYHVuaXhfc29ja2Agc3RydWN0dXJlLgoqICAgVGhlIGBpbmNsdWRlL25ldC9zY20uaGAgbW9kaWZpY2F0aW9ucyBhcmUgaW50ZXJlc3RpbmcuIFRoZSBgc2NtX2RldGFjaF9mZHNgLCBgc2NtX2RldGFjaF9mZHNfY29tcGF0YCwgYW5kIGBzY21fcmVjdl9vbmVfZmRgIGZ1bmN0aW9ucyBub3cgYWNjZXB0IGEgYGJvb2wgbm90cnVuY2AgYXJndW1lbnQsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB0aGUgbmV3IHNvY2tldCBvcHRpb24gY29udHJvbHMuCiogICBgbmV0L2NvbXBhdC5jYCBoYXMgYmVlbiB1cGRhdGVkIHRvIGNvcnJlY3RseSBwYXNzIHRoZSBgbm90cnVuY2AgYXJndW1lbnQgdG8gYHNjbV9yZWN2X29uZV9mZGAuCiogICBUaGUgY3J1Y2lhbCBjaGFuZ2UgaXMgaW4gYG5ldC9jb3JlL3NjbS5jYCwgd2hlcmUgYHNjbV9yZWN2X29uZV9mZGAgbm93IGhhbmRsZXMgdGhlIGVycm9yIHJldHVybiBjb3JyZWN0bHkgaWYgYG5vdHJ1bmNgIGlzIHRydWUsIGJ5IHB1dHRpbmcgdGhlIGVycm9yIGludG8gdGhlIHVzZXImIzM5O3MgRkQgYXJyYXkuCiogICBGaW5hbGx5LCBgbmV0L3VuaXgvYWZfdW5peC5jYCBpbnRlZ3JhdGVzIGBTT19SSUdIVFNfTk9UUlVOQ2AgaW50byBgdW5peF9jdXN0b21fc29ja29wdGAgYW5kIGB1bml4X3NldHNvY2tvcHRgLCBhbmQgYWxzbyBwcm9wYWdhdGVzIHRoZSBgc2NtX3JpZ2h0c19ub3RydW5jYCBmbGFnIGR1cmluZyBgdW5peF9zdHJlYW1fY29ubmVjdGAsIHdoaWNoIG1ha2VzIHNlbnNlLgoqICAgQW5kLCBnb29kLCB0aGVyZSYjMzk7cyBhIHNlbGZ0ZXN0IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzX2RlbmlhbF9sc20uY2AuIFRoaXMgaXMgZXNzZW50aWFsIHRvIHNob3cgY29ycmVjdCBiZWhhdmlvci4KClRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBBRl9VTklYIGxvZ2ljLCBzbyBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgYSBzb2xpZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIHN5bWJvbHMgYXJlIGNsZWFybHk6CgoqICAgYHVuaXhfc2V0c29ja29wdGAg4oCTIGJlY2F1c2UgaXTigJlzIHdoZXJlIHRoZSBzb2NrZXQgb3B0aW9uIGlzIHNldC4KKiAgIGBzY21fcmVjdl9vbmVfZmRgIOKAkyB0aGlzIGlzIHRoZSBjb3JlIG9mIHRoZSBuZXcgbG9naWMsIGhvdyB0aGUgZXJyb3IgaXMgaGFuZGxlZC4KKiAgIGBzY21fZGV0YWNoX2Zkc2AgYW5kIGBzY21fZGV0YWNoX2Zkc19jb21wYXRgIOKAkyBib3RoIGFyZSBjb3JlIHRvIEZEIGhhbmRsaW5nIGFuZCB0aGUgbG9naWMgZmxvdy4KKiAgIGB1bml4X3N0cmVhbV9jb25uZWN0YCAtIHRoZSBwYXRoIG1pZ2h0IGJlIHZhbHVhYmxlLgoKSSYjMzk7bGwgZG91YmxlLWNoZWNrIGBuZXQvY29yZS9zY20uY2AgZm9yIGBzY21fcmVjdl9vbmVfZmRgIGFuZCBgc2NtX2RldGFjaF9mZHNgLCBhbmQgYG5ldC91bml4L2FmX3VuaXguY2AgZm9yIGB1bml4X3NldHNvY2tvcHRgIGZvciBtb3JlIGRldGFpbC4KCkkgbmVlZCB0byBjb25maXJtIHRoZSByZXF1aXJlZCBgQ09ORklHX2Agb3B0aW9uczogYENPTkZJR19VTklYYCAob2J2aW91cyksIGBDT05GSUdfU0VDVVJJVFlgIChmb3IgdGhlIExTTSwgYWx0aG91Z2ggdGhlIGZlYXR1cmUgaXRzZWxmIGRvZXNuJiMzOTt0IGluaGVyZW50bHkgZGVwZW5kIG9uIGl0LCBidXQgdGhlIGRlbmlhbCBtYWtlcyB0aGUgbW9zdCBzZW5zZSksIGFuZCBgQ09ORklHX0NPTVBBVGAgKGZvciB0aGUgY29tcGF0IGZ1bmN0aW9uKS4KClRoZW4gSSYjMzk7bGwgcnVuIHNvbWUgdG9vbGluZyB0byB0ZXN0IHRoaXMgb3V0IHRob3JvdWdobHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMjA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2NtX3JlY3Zfb25lX2ZkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3NjbS5oPTEwNz12b2lkIHNjbV9yZWN2X3VuaXgoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbmluY2x1ZGUvbmV0L3NjbS5oLTEwOS1cbmluY2x1ZGUvbmV0L3NjbS5oOjExMDppbnQgc2NtX3JlY3Zfb25lX2ZkKHN0cnVjdCBmaWxlICpmLCBpbnQgX191c2VyICp1ZmQsIHVuc2lnbmVkIGludCBmbGFncyxcbmluY2x1ZGUvbmV0L3NjbS5oLTExMS1cdFx0ICAgIGJvb2wgbm90cnVuYyk7XG4tLVxubmV0L2NvbXBhdC5jPTI4OT12b2lkIHNjbV9kZXRhY2hfZmRzX2NvbXBhdChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20sIGJvb2wgbm90cnVuYylcbi0tXG5uZXQvY29tcGF0LmMtMjk4LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZmRtYXg7IGkmIzQzOyYjNDM7KSB7XG5uZXQvY29tcGF0LmM6Mjk5Olx0XHRlcnIgPSBzY21fcmVjdl9vbmVfZmQoc2NtLVx1MDAzZWZwLVx1MDAzZWZwW2ldLCBjbXNnX2RhdGEgJiM0MzsgaSwgb19mbGFncywgbm90cnVuYyk7XG5uZXQvY29tcGF0LmMtMzAwLVx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9jb3JlL3NjbS5jPTM0Nz1zdGF0aWMgaW50IHNjbV9tYXhfZmRzKHN0cnVjdCBtc2doZHIgKm1zZylcbi0tXG5uZXQvY29yZS9zY20uYy0zNTMtXG5uZXQvY29yZS9zY20uYzozNTQ6aW50IHNjbV9yZWN2X29uZV9mZChzdHJ1Y3QgZmlsZSAqZiwgaW50IF9fdXNlciAqdWZkLCB1bnNpZ25lZCBpbnQgZmxhZ3MsXG5uZXQvY29yZS9zY20uYy0zNTUtXHRcdCAgICBib29sIG5vdHJ1bmMpXG4tLVxubmV0L2NvcmUvc2NtLmM9Mzc4PXZvaWQgc2NtX2RldGFjaF9mZHMoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2NtLCBib29sIG5vdHJ1bmMpXG4tLVxubmV0L2NvcmUvc2NtLmMtMzk2LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZmRtYXg7IGkmIzQzOyYjNDM7KSB7XG5uZXQvY29yZS9zY20uYzozOTc6XHRcdGVyciA9IHNjbV9yZWN2X29uZV9mZChzY20tXHUwMDNlZnAtXHUwMDNlZnBbaV0sIGNtc2dfZGF0YSAmIzQzOyBpLCBvX2ZsYWdzLCBub3RydW5jKTtcbm5ldC9jb3JlL3NjbS5jLTM5OC1cdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAyMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ0MAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDQxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoJiMzOTtzIFNjb3BlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYSBmZXcga2V5IGFyZWFzOiBgc2NtX3JlY3Zfb25lX2ZkYCwgYHNjbV9kZXRhY2hfZmRzYCwgYHNjbV9kZXRhY2hfZmRzX2NvbXBhdGAsIGB1bml4X3NldHNvY2tvcHRgLCBhbmQgYHNjbV9yZWN2X3VuaXhgLiBUaGVzZSBhcmUgYWxsIHByZXR0eSBmb2N1c2VkIGVudHJ5IHBvaW50cywgd2hpY2ggaXMgZ29vZC4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFzcGVjdHMgdG8ga2VlcCBpbiBtaW5kLgoKVGhlIGJpZyBvbmUgaXMgYENPTkZJR19VTklYYCwgb2J2aW91c2x5LCBhcyB0aGlzIHNlZW1zIGNlbnRyYWwgdG8gdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4gYENPTkZJR19DT01QQVRgIGlzIGxpbmtlZCB0byBgc2NtX2RldGFjaF9mZHNfY29tcGF0YCwgd2hpY2ggaXMgYXMgZXhwZWN0ZWQuIEFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM/IExvb2tpbmcgYXQgdGhlIHNlbGZ0ZXN0IGludHJvZHVjZXMgYSByYW5nZSBvZiBgQ09ORklHX0JQRmAgb3B0aW9ucywgYWxvbmcgd2l0aCBgQ09ORklHX1NFQ1VSSVRZYCBhbmQgYENPTkZJR19ERUJVR19JTkZPX0JURmAuCgpIb3dldmVyLCBmb2N1c2luZyBvbiB0aGUgY29yZSBmZWF0dXJlIEkmIzM5O20gYXNzZXNzaW5nIChgU09fUklHSFRTX05PVFJVTkNgKSwgdGhlIGNvZGUgaXRzZWxmIGluIGBuZXQvdW5peC9hZl91bml4LmNgIGFuZCBgbmV0L2NvcmUvc2NtLmNgIG9ubHkgc3RyaWN0bHkgcmVsaWVzIG9uIGBDT05GSUdfVU5JWGAgZm9yIGNvbXBpbGF0aW9uLiBJdCYjMzk7cyBub3QgaW5oZXJlbnRseSBkZXBlbmRlbnQgb24gQlBGIG9yIExTTSBmb3IgdGhlIGNvZGUgdG8gYmUgY29tcGlsZWQgYW5kIHJlYWNoYWJsZS4KCkJ1dCwgbm93IHRoYXQgSSYjMzk7bSBjb25zaWRlcmluZyBlcnJvciBwYXRocywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgc2NtX3JlY3Zfb25lX2ZkYDoKCmBgYGMKCWVycm9yID0gc2VjdXJpdHlfZmlsZV9yZWNlaXZlKGYpOwoJaWYgKGVycm9yKQoJCXJldHVybiBub3RydW5jID8gcHV0X3VzZXIoZXJyb3IsIHVmZCkgOiBlcnJvcjsKYGBgCgpUbyAqdHJpZ2dlciogdGhlIGVycm9yIHBhdGggaGVyZSwgYHNlY3VyaXR5X2ZpbGVfcmVjZWl2ZWAgbmVlZHMgdG8gcmV0dXJuIGFuIGVycm9yLiBUaGF0IGNvdWxkIGJlIGR1ZSB0byBhbiBMU00gZGVueWluZyBhY2Nlc3Mgb3Igc29tZSBvdGhlciBmYWlsdXJlIHdpdGhpbiB0aGUgYHNlY3VyaXR5X2ZpbGVfcmVjZWl2ZWAgZnVuY3Rpb24uIFNvLCB3aGlsZSBgQ09ORklHX1VOSVhgIGlzIHRoZSBlc3NlbnRpYWwgcmVxdWlyZW1lbnQsIGl0IHdvdWxkIGJlIGJlbmVmaWNpYWwgdG8gaGF2ZSBgQ09ORklHX1NFQ1VSSVRZYCBhbmQgcG9zc2libHkgYW4gTFNNIGVuYWJsZWQgZm9yIGEgY29tcHJlaGVuc2l2ZSB0ZXN0LCBidXQgZm9yIHRoZSBjb2RlIHRvIGJlIGNvbXBpbGVkIGBDT05GSUdfVU5JWGAgaXMgdGhlIG9ubHkgc3RyaWN0IHJlcXVpcmVtZW50LgoKTm93LCBsZXQgbWUgc2hpZnQgZ2VhcnMgYW5kIGNoZWNrIGBuZXQvdW5peC9hZl91bml4LmNgIGZvciBhbnkgc3BlY2lmaWNzIG9uIGB1bml4X3NldHNvY2tvcHRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VuaXhfc2V0c29ja29wdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdW5peC9hZl91bml4LmM9OTIxPXN0YXRpYyBib29sIHVuaXhfY3VzdG9tX3NvY2tvcHQoaW50IG9wdG5hbWUpXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jLTkzMS1cbm5ldC91bml4L2FmX3VuaXguYzo5MzI6c3RhdGljIGludCB1bml4X3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbm5ldC91bml4L2FmX3VuaXguYy05MzMtXHRcdFx0ICAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcbi0tXG5uZXQvdW5peC9hZl91bml4LmM9OTc2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHVuaXhfc3RyZWFtX29wcyA9IHtcbi0tXG5uZXQvdW5peC9hZl91bml4LmMtOTkxLVx0LnNodXRkb3duID1cdHVuaXhfc2h1dGRvd24sXG5uZXQvdW5peC9hZl91bml4LmM6OTkyOlx0LnNldHNvY2tvcHQgPVx0dW5peF9zZXRzb2Nrb3B0LFxubmV0L3VuaXgvYWZfdW5peC5jLTk5My1cdC5zZW5kbXNnID1cdHVuaXhfc3RyZWFtX3NlbmRtc2csXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jPTEwMDI9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgdW5peF9kZ3JhbV9vcHMgPSB7XG4tLVxubmV0L3VuaXgvYWZfdW5peC5jLTEwMTctXHQuc2h1dGRvd24gPVx0dW5peF9zaHV0ZG93bixcbm5ldC91bml4L2FmX3VuaXguYzoxMDE4Olx0LnNldHNvY2tvcHQgPVx0dW5peF9zZXRzb2Nrb3B0LFxubmV0L3VuaXgvYWZfdW5peC5jLTEwMTktXHQuc2VuZG1zZyA9XHR1bml4X2RncmFtX3NlbmRtc2csXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jPTEwMjc9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgdW5peF9zZXFwYWNrZXRfb3BzID0ge1xuLS1cbm5ldC91bml4L2FmX3VuaXguYy0xMDQyLVx0LnNodXRkb3duID1cdHVuaXhfc2h1dGRvd24sXG5uZXQvdW5peC9hZl91bml4LmM6MTA0MzpcdC5zZXRzb2Nrb3B0ID1cdHVuaXhfc2V0c29ja29wdCxcbm5ldC91bml4L2FmX3VuaXguYy0xMDQ0LVx0LnNlbmRtc2cgPVx0dW5peF9zZXFwYWNrZXRfc2VuZG1zZyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAyMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc5NAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDEyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBEZWVwIERpdmUgaW50byBTb2NrZXQgU2VjdXJpdHkqKgoKT2theSwgc28gSSYjMzk7bSByZWFsbHkgZGlnZ2luZyBpbnRvIHRoZSBzZWN1cml0eSBhc3BlY3RzIG9mIHNvY2tldCBjb21tdW5pY2F0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aCBVTklYIHNvY2tldHMuIEkgbmVlZCB0byBnZXQgYSByb2NrLXNvbGlkIHVuZGVyc3RhbmRpbmcgb2Ygd2hlcmUgdGhpbmdzIGNhbiBnbyB3cm9uZyBhbmQgd2hhdCBjaGVja3MgYXJlIGluIHBsYWNlLiBNeSBrZXkgZm9jdXMgYXJlYXMgcmlnaHQgbm93IGFyZTogYHVuaXhfc2V0c29ja29wdGAsIGBzY21fcmVjdl9vbmVfZmRgLCBgc2NtX2RldGFjaF9mZHNgLCBgc2NtX2RldGFjaF9mZHNfY29tcGF0YCwgYW5kIGBzY21fcmVjdl91bml4YC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgYXQgdGhlIGhlYXJ0IG9mIHRyYW5zZmVycmluZyBmaWxlIGRlc2NyaXB0b3JzIG92ZXIgVU5JWCBkb21haW4gc29ja2V0cywgYW5kIHRoZXJlZm9yZSByZXByZXNlbnQgdGhlIG1vc3QgbGlrZWx5IHNwb3RzIGZvciB2dWxuZXJhYmlsaXR5LgoKSSYjMzk7bSBhbHNvIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGNvbmZpZ3VyYXRpb25zIHRoYXQgZGljdGF0ZSBob3cgdGhlc2UgZnVuY3Rpb25zIGJlaGF2ZS4gSSBoYXZlIGBVTklYYCBhbmQgYENPTVBBVGAgZmxhZ3MgaW4gbWluZCBhcyB0aGVzZSBzZWVtIHRvIGJlIHRoZSBtb3N0IHJlbGV2YW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcsIGFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucyB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBJIG5lZWQgYSBjb21wbGV0ZSBwaWN0dXJlLgoKSSBrbm93IHRoZSBzZWxmdGVzdCBsZXZlcmFnZXMgQlBGIExTTSB0byBkZW55IGZpbGUgZGVzY3JpcHRvciByZWNlcHRpb24sIGFjdGluZyBhcyBhIGtpbmQgb2YgY2FuYXJ5LiBUaGF0IGdvdCBtZSB0aGlua2luZyBhYm91dCBvdGhlciBmYWlsdXJlIHBhdGhzIGZvciBgc2VjdXJpdHlfZmlsZV9yZWNlaXZlYC4gQ291bGQgdGhlcmUgYmUgb3RoZXIgd2F5cyB0aGlzIGNoZWNrIG1pZ2h0IGZhaWwsIHBlcmhhcHMgZHVlIHRvIGRpZmZlcmVudCBjb25maWd1cmF0aW9ucyBvciBjb25kaXRpb25zPyBJIG5lZWQgdG8ga25vdyBhbGwgdGhlIGFuZ2xlcyBoZXJlLiBJIHdpbGwgc2NydXRpbml6ZSBgc2VjdXJpdHlfZmlsZV9yZWNlaXZlYCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBzZWN1cml0eV9maWxlX3JlY2VpdmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zZWN1cml0eS5oPTQ5Mj1pbnQgc2VjdXJpdHlfZmlsZV9zZW5kX3NpZ2lvdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC00OTMtXHRcdFx0XHQgc3RydWN0IGZvd25fc3RydWN0ICpmb3duLCBpbnQgc2lnKTtcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDo0OTQ6aW50IHNlY3VyaXR5X2ZpbGVfcmVjZWl2ZShzdHJ1Y3QgZmlsZSAqZmlsZSk7XG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDk1LWludCBzZWN1cml0eV9maWxlX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpO1xuLS1cbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD0xMjE0PXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2ZpbGVfc2VuZF9zaWdpb3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssXG4tLVxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTEyMjAtXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg6MTIyMTpzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9maWxlX3JlY2VpdmUoc3RydWN0IGZpbGUgKmZpbGUpXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtMTIyMi17XG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYz0yNzA0PWludCBzZWN1cml0eV9maWxlX3NlbmRfc2lnaW90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLFxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjcxOC0gKi9cbnNlY3VyaXR5L3NlY3VyaXR5LmM6MjcxOTppbnQgc2VjdXJpdHlfZmlsZV9yZWNlaXZlKHN0cnVjdCBmaWxlICpmaWxlKVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNzIwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAyMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDUxOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gc2VjdXJpdHlfZmlsZV9yZWNlaXZlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXNzZWN0IGBzZWN1cml0eV9maWxlX3JlY2VpdmVgIGluIGBzZWN1cml0eS9zZWN1cml0eS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIGZpbGUgcmVjZXB0aW9uIGZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZS4gTXkgaW5pdGlhbCBxdWVzdGlvbnMgYXJlOiB3aGF0IGNoZWNrcyBhcmUgcGVyZm9ybWVkIG9uIHRoZSBpbmNvbWluZyBkYXRhPyBXaGF0IGFzc3VtcHRpb25zIGFyZSBiZWluZyBtYWRlIGFib3V0IHRoZSBzb3VyY2UsIHNpemUsIGFuZCBjb250ZW50PyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byBidWZmZXIgb3ZlcmZsb3dzLCBwYXRoIHRyYXZlcnNhbCwgb3IgY29kZSBpbmplY3Rpb24gdGhhdCBpbW1lZGlhdGVseSBqdW1wIG91dD8gSSB3YW50IHRvIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgc2VjdXJpdHkgcHJpbWl0aXZlcy4gSXMgdGhlcmUgYW4gaW50ZWdyYXRpb24gd2l0aCBhbnkgbWFuZGF0b3J5IGFjY2VzcyBjb250cm9sIG1lY2hhbmlzbXMgb3IgaXMgaXQgaGFuZGxpbmcgc2VjdXJpdHkgcG9saWN5IGl0c2VsZj8gTGV0JiMzOTtzIGNoZWNrIHRoZSBmdW5jdGlvbiYjMzk7cyBwYXJhbWV0ZXIgbGlzdCwgdHlwZSBkZWNsYXJhdGlvbnMgYW5kIHRoZSBkYXRhIGl0IGFjY2Vzc2VzLCBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IHNlZW1zIHVudXN1YWwgYW5kIHNob3VsZCBiZSBkb2N1bWVudGVkLiBGcm9tIHRoZXJlIEkmIzM5O2xsIHRyYWNlIHRocm91Z2ggdGhlIGNvcmUgbG9naWMsIGV4YW1pbmluZyBhbnkgY2FsbHMgdG8gb3RoZXIgc2VjdXJpdHktcmVsYXRlZCBmdW5jdGlvbnMgb3Igc3lzdGVtIGNhbGxzIGludm9sdmVkIGluIGZpbGUgaGFuZGxpbmcgKGUuZy4sIGBvcGVuYCwgYHJlYWRgLCBgd3JpdGVgLCBgY2htb2RgLCBgY2hvd25gLCBldGMuKSB0byBnZXQgYSBnb29kIHNlbnNlIG9mIGl0cyByb2xlIHdpdGhpbiB0aGUgd2lkZXIgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAyMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O3NlY3VyaXR5L3NlY3VyaXR5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzE5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI3MTk6XHRpbnQgc2VjdXJpdHlfZmlsZV9yZWNlaXZlKHN0cnVjdCBmaWxlICpmaWxlKVxuMjcyMDpcdHtcbjI3MjE6XHRcdHJldHVybiBjYWxsX2ludF9ob29rKGZpbGVfcmVjZWl2ZSwgZmlsZSk7XG4yNzIyOlx0fVxuMjcyMzpcdFxuMjcyNDpcdC8qKlxuMjcyNTpcdCAqIHNlY3VyaXR5X2ZpbGVfb3BlbigpIC0gU2F2ZSBvcGVuKCkgdGltZSBzdGF0ZSBmb3IgbGF0ZSB1c2UgYnkgdGhlIExTTVxuMjcyNjpcdCAqIEBmaWxlOlxuMjcyNzpcdCAqXG4yNzI4Olx0ICogU2F2ZSBvcGVuLXRpbWUgcGVybWlzc2lvbiBjaGVja2luZyBzdGF0ZSBmb3IgbGF0ZXIgdXNlIHVwb24gZmlsZV9wZXJtaXNzaW9uLFxuMjcyOTpcdCAqIGFuZCByZWNoZWNrIGFjY2VzcyBpZiBhbnl0aGluZyBoYXMgY2hhbmdlZCBzaW5jZSBpbm9kZV9wZXJtaXNzaW9uLlxuMjczMDpcdCAqXG4yNzMxOlx0ICogV2UgY2FuIGNoZWNrIGlmIGEgZmlsZSBpcyBvcGVuZWQgZm9yIGV4ZWN1dGlvbiAoZS5nLiBleGVjdmUoMikgY2FsbCksIGVpdGhlclxuMjczMjpcdCAqIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgKGUuZy4gRUxGJiMzOTtzIGxkLnNvKSBieSBjaGVja2luZyBmaWxlLVx1MDAzZWZfZmxhZ3MgXHUwMDI2XG4yNzMzOlx0ICogX19GTU9ERV9FWEVDIC5cbjI3MzQ6XHQgKlxuMjczNTpcdCAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbjI3MzY6XHQgKi9cbjI3Mzc6XHRpbnQgc2VjdXJpdHlfZmlsZV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKVxuMjczODpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMjA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxMzEKCQkJCQkJCW91dHB1dDogMjU4CgkJCQkJCQl0aG91Z2h0czogNDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBTT19SSUdIVFNfTk9UUlVOQ2AgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgaGFuZGxpbmcgZXJyb3JzIHdoZW4gcmVjZWl2aW5nIGZpbGUgZGVzY3JpcHRvcnMgb3ZlciBVTklYIHNvY2tldHMgd2l0aCB0aGUgYFNPX1JJR0hUU19OT1RSVU5DYCBvcHRpb24uIEl0IGJvaWxzIGRvd24gdG8gdGhpczogdGhlIGNvZGUgY2FsbHMgdGhlIExTTSAoTGludXggU2VjdXJpdHkgTW9kdWxlKSBob29rLiBJZiBubyBMU00gZGVuaWVzIHRoZSBmaWxlIGRlc2NyaXB0b3IgcmVjZWl2ZSwgaXQgcmV0dXJucyAwLiBCdXQgdG8gdHJ1bHkgdGVzdCB0aGUgZXJyb3IgcGF0aCB3aGVyZSBgZXJyb3IgIT0gMGAsIHdlIG5lZWQgYW4gTFNNIHRoYXQgKmNhbiogZGVueSBgZmlsZV9yZWNlaXZlYC4KCkFwcEFybW9yLCBTRUxpbnV4LCBTbWFjaywgVE9NT1lPLCBhbmQgQlBGIExTTSBhcmUgdGhlIHBvc3NpYmlsaXRpZXMuIFRoZSBzZWxmdGVzdCB1c2VzIEJQRiBMU00sIGFuZCB0aGF0IHNlZW1zIGxpa2UgYSBzZW5zaWJsZSBhcHByb2FjaC4gU28sIHRvIGVuc3VyZSB3ZSBjYW4gaGl0IHRoZSBlcnJvciBwYXRoLCBlc3BlY2lhbGx5IGlmIHN5emthbGxlciBpcyB0aHJvd2luZyBCUEYgcHJvZ3JhbXMgYXQgdGhlIGtlcm5lbCwgZW5hYmxpbmcgYFNFQ1VSSVRZYCBhbmQgYEJQRl9MU01gIGlzIGEgbXVzdC4KCk5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIGhvdyBzeXprYWxsZXIgb3BlcmF0ZXMuIEl0JiMzOTtzIG5vdCBzdHJhaWdodGZvcndhcmQgZm9yIGl0IHRvICpkZWxpYmVyYXRlbHkqIGdlbmVyYXRlIEJQRiBMU00gcHJvZ3JhbXMgdG8gZGVueSBzcGVjaWZpYyBob29rcyB3aXRob3V0IGRlc2NyaXB0aW9ucyBmb3IgdGhlIGhvb2tzLiBIb3dldmVyLCBpdCAqY291bGQqIHRyaWdnZXIgdGhlIGVycm9yIGJ5IGNoYW5jZSwgb3IgaWYgYW5vdGhlciBMU00sIGxpa2UgU0VMaW51eCBvciBBcHBBcm1vciwgaXMgYWN0aXZlIGFuZCBhbHJlYWR5IGRlbmllcyBmaWxlIGRlc2NyaXB0b3IgdHJhbnNmZXIgYWNyb3NzIGRvbWFpbnMuIFN0aWxsLCBhZGRpbmcgYFNFQ1VSSVRZYCBpcyBhIGdvb2QgcHJhY3RpY2UuCgpBdCBhbnkgcmF0ZSwgYFVOSVhgIGFuZCBgQ09NUEFUYCBhcmUgY3J1Y2lhbCBjb25maWdzIHRvIGVuYWJsZSwgZ2l2ZW4gdGhlIHRhcmdldCBjb2RlLiBBZGRpbmcgYFNFQ1VSSVRZYCBzZWVtcyBsaWtlIGEgdXNlZnVsIHByZWNhdXRpb24uCgpMZXQmIzM5O3MgcXVpY2tseSByZXZpZXcgdGhlIGNvcmUgZm9jdXMgc3ltYm9sczogYHVuaXhfc2V0c29ja29wdGAsIGBzY21fcmVjdl9vbmVfZmRgLCBgc2NtX2RldGFjaF9mZHNgLCBgc2NtX2RldGFjaF9mZHNfY29tcGF0YCwgYW5kIGBzY21fcmVjdl91bml4YC4gWWVwLCB0aG9zZSBhbGwgbG9vayByaWdodCBvbiBwb2ludC4gVGhleSBkaXJlY3RseSByZWxhdGUgdG8gdGhlIG5ldyBsb2dpYy4KCk5vdywgdG8gc29saWRpZnkgdGhlIHJlYXNvbmluZzogVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBTT19SSUdIVFNfTk9UUlVOQ2AgZm9yIEFGX1VOSVggc29ja2V0cy4gVGhpcyBvcHRpb24gbW9kaWZpZXMgdGhlIGBTQ01fUklHSFRTYCBiZWhhdmlvci4gV2hlbiB0aGUgZmlsZSBkZXNjcmlwdG9yIHJlY2VpdmUgaXMgZGVuaWVkIGJ5IGEgc2VjdXJpdHkgbW9kdWxlLCB0aGUgcGF0Y2ggbW9kaWZpZXMgYFNDTV9SSUdIVFNgLiBJbnN0ZWFkIG9mIHRydW5jYXRpbmcgdGhlIGZpbGUgZGVzY3JpcHRvciBhcnJheSBhbmQgc2V0dGluZyBgTVNHX0NUUlVOQ2AsIGl0IHBsYWNlcyB0aGUgZXJyb3IgY29kZSBpbiB0aGUgdXNlciYjMzk7cyBmaWxlIGRlc2NyaXB0b3IgYXJyYXkuIFRoaXMgaW52b2x2ZXMgY2hhbmdlcyB0byBjb3JlIEFGX1VOSVggc29ja2V0IG9wdGlvbiBwYXJzaW5nIChgdW5peF9zZXRzb2Nrb3B0YCksIHNvY2tldCBjb25uZWN0aW9uIHN0YXRlIHByb3BhZ2F0aW9uLCBhbmQgdGhlIFNDTSBtZXNzYWdlIHJlY2VpdmluZyBsb2dpYyAoYHNjbV9yZWN2X29uZV9mZGAsIGBzY21fZGV0YWNoX2Zkc2AsIGBzY21fZGV0YWNoX2Zkc19jb21wYXRgLCBgc2NtX3JlY3ZfdW5peGApLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBwYXRocyB0aGF0ICptdXN0KiBiZSBmdXp6ZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIG5ldyBlcnJvciBoYW5kbGluZyBhbmQgYXJyYXkgbWFuaXB1bGF0aW9uIGxvZ2ljIGRvZXNuJiMzOTt0IGludHJvZHVjZSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBvciBsZWFrcy4KClNvLCB0aGUga2V5IGNvbmZpZ3MgZm9yIGZ1enppbmc6IGBVTklYYCwgYENPTVBBVGAsIGFuZCBgU0VDVVJJVFlgLgoKVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVTklYJiMzNDssCiAgICAmIzM0O0NPTVBBVCYjMzQ7LAogICAgJiMzNDtTRUNVUklUWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VuaXhfc2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtzY21fcmVjdl9vbmVfZmQmIzM0OywKICAgICYjMzQ7c2NtX2RldGFjaF9mZHMmIzM0OywKICAgICYjMzQ7c2NtX2RldGFjaF9mZHNfY29tcGF0JiMzNDssCiAgICAmIzM0O3NjbV9yZWN2X3VuaXgmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzb2NrZXQgb3B0aW9uIFNPX1JJR0hUU19OT1RSVU5DIGZvciBBRl9VTklYIHNvY2tldHMuIFRoaXMgb3B0aW9uIG1vZGlmaWVzIHRoZSBiZWhhdmlvciBvZiBTQ01fUklHSFRTIHdoZW4gYSBmaWxlIGRlc2NyaXB0b3IgcmVjZWl2ZSBpcyBkZW5pZWQgYnkgYSBzZWN1cml0eSBtb2R1bGUgKExTTSkuIEluc3RlYWQgb2YgdHJ1bmNhdGluZyB0aGUgZmlsZSBkZXNjcmlwdG9yIGFycmF5IGFuZCBzZXR0aW5nIE1TR19DVFJVTkMsIGl0IHBsYWNlcyB0aGUgZXJyb3IgY29kZSBpbiB0aGUgdXNlciYjMzk7cyBmaWxlIGRlc2NyaXB0b3IgYXJyYXkuIFRoaXMgaW52b2x2ZXMgY2hhbmdlcyB0byBjb3JlIEFGX1VOSVggc29ja2V0IG9wdGlvbiBwYXJzaW5nICh1bml4X3NldHNvY2tvcHQpLCBzb2NrZXQgY29ubmVjdGlvbiBzdGF0ZSBwcm9wYWdhdGlvbiwgYW5kIHRoZSBTQ00gbWVzc2FnZSByZWNlaXZpbmcgbG9naWMgKHNjbV9yZWN2X29uZV9mZCwgc2NtX2RldGFjaF9mZHMsIHNjbV9kZXRhY2hfZmRzX2NvbXBhdCwgc2NtX3JlY3ZfdW5peCkuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBlcnJvciBoYW5kbGluZyBhbmQgYXJyYXkgbWFuaXB1bGF0aW9uIGxvZ2ljIGRvZXMgbm90IGludHJvZHVjZSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBvciBsZWFrcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VU5JWCYjMzQ7LAogICAgJiMzNDtDT01QQVQmIzM0OywKICAgICYjMzQ7U0VDVVJJVFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1bml4X3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7c2NtX3JlY3Zfb25lX2ZkJiMzNDssCiAgICAmIzM0O3NjbV9kZXRhY2hfZmRzJiMzNDssCiAgICAmIzM0O3NjbV9kZXRhY2hfZmRzX2NvbXBhdCYjMzQ7LAogICAgJiMzNDtzY21fcmVjdl91bml4JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc29ja2V0IG9wdGlvbiBTT19SSUdIVFNfTk9UUlVOQyBmb3IgQUZfVU5JWCBzb2NrZXRzLiBUaGlzIG9wdGlvbiBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgU0NNX1JJR0hUUyB3aGVuIGEgZmlsZSBkZXNjcmlwdG9yIHJlY2VpdmUgaXMgZGVuaWVkIGJ5IGEgc2VjdXJpdHkgbW9kdWxlIChMU00pLiBJbnN0ZWFkIG9mIHRydW5jYXRpbmcgdGhlIGZpbGUgZGVzY3JpcHRvciBhcnJheSBhbmQgc2V0dGluZyBNU0dfQ1RSVU5DLCBpdCBwbGFjZXMgdGhlIGVycm9yIGNvZGUgaW4gdGhlIHVzZXImIzM5O3MgZmlsZSBkZXNjcmlwdG9yIGFycmF5LiBUaGlzIGludm9sdmVzIGNoYW5nZXMgdG8gY29yZSBBRl9VTklYIHNvY2tldCBvcHRpb24gcGFyc2luZyAodW5peF9zZXRzb2Nrb3B0KSwgc29ja2V0IGNvbm5lY3Rpb24gc3RhdGUgcHJvcGFnYXRpb24sIGFuZCB0aGUgU0NNIG1lc3NhZ2UgcmVjZWl2aW5nIGxvZ2ljIChzY21fcmVjdl9vbmVfZmQsIHNjbV9kZXRhY2hfZmRzLCBzY21fZGV0YWNoX2Zkc19jb21wYXQsIHNjbV9yZWN2X3VuaXgpLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgZXJyb3IgaGFuZGxpbmcgYW5kIGFycmF5IG1hbmlwdWxhdGlvbiBsb2dpYyBkb2VzIG5vdCBpbnRyb2R1Y2UgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgb3IgbGVha3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMDowOToyNC4yNDA4Njk1MjhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjQzMzMyMzM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVTklYXCIsXG4gICAgXCJDT01QQVRcIixcbiAgICBcIlNFQ1VSSVRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidW5peF9zZXRzb2Nrb3B0XCIsXG4gICAgXCJzY21fcmVjdl9vbmVfZmRcIixcbiAgICBcInNjbV9kZXRhY2hfZmRzXCIsXG4gICAgXCJzY21fZGV0YWNoX2Zkc19jb21wYXRcIixcbiAgICBcInNjbV9yZWN2X3VuaXhcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHNvY2tldCBvcHRpb24gU09fUklHSFRTX05PVFJVTkMgZm9yIEFGX1VOSVggc29ja2V0cy4gVGhpcyBvcHRpb24gbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIFNDTV9SSUdIVFMgd2hlbiBhIGZpbGUgZGVzY3JpcHRvciByZWNlaXZlIGlzIGRlbmllZCBieSBhIHNlY3VyaXR5IG1vZHVsZSAoTFNNKS4gSW5zdGVhZCBvZiB0cnVuY2F0aW5nIHRoZSBmaWxlIGRlc2NyaXB0b3IgYXJyYXkgYW5kIHNldHRpbmcgTVNHX0NUUlVOQywgaXQgcGxhY2VzIHRoZSBlcnJvciBjb2RlIGluIHRoZSB1c2VyJ3MgZmlsZSBkZXNjcmlwdG9yIGFycmF5LiBUaGlzIGludm9sdmVzIGNoYW5nZXMgdG8gY29yZSBBRl9VTklYIHNvY2tldCBvcHRpb24gcGFyc2luZyAodW5peF9zZXRzb2Nrb3B0KSwgc29ja2V0IGNvbm5lY3Rpb24gc3RhdGUgcHJvcGFnYXRpb24sIGFuZCB0aGUgU0NNIG1lc3NhZ2UgcmVjZWl2aW5nIGxvZ2ljIChzY21fcmVjdl9vbmVfZmQsIHNjbV9kZXRhY2hfZmRzLCBzY21fZGV0YWNoX2Zkc19jb21wYXQsIHNjbV9yZWN2X3VuaXgpLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgZXJyb3IgaGFuZGxpbmcgYW5kIGFycmF5IG1hbmlwdWxhdGlvbiBsb2dpYyBkb2VzIG5vdCBpbnRyb2R1Y2UgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgb3IgbGVha3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDIwOjA5OjI0LjI0MDg3NTg2OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIyOTQyMTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTVjZGI0YTkzNmUxYTdkNjhmNzM2MWZmNzc1ZDk2MTQxNjQ3N2EzNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEF1ZyAyIDIwOjA5OjIyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaFxcbmluZGV4IDVlZjU3Zjg4ZGY2YjMuLjk0NmE1ZmFkMjY5MTIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oXFxuKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oXFxuQEAgLTE1NSw2ICsxNTUsOCBAQFxcbiAjZGVmaW5lIFNPX0lOUVxcdFxcdFxcdDg0XFxuICNkZWZpbmUgU0NNX0lOUVxcdFxcdFxcdFNPX0lOUVxcbiBcXG4rI2RlZmluZSBTT19SSUdIVFNfTk9UUlVOQyAgICAgIDg1XFxuK1xcbiAjaWYgIWRlZmluZWQoX19LRVJORUxfXylcXG4gXFxuICNpZiBfX0JJVFNfUEVSX0xPTkcgPT0gNjRcXG5kaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmggYi9hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaFxcbmluZGV4IDcyZmIxYjAwNmRhOTMuLmYxNjQxZGRlMTM1ZmMgMTAwNjQ0XFxuLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmhcXG4rKysgYi9hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaFxcbkBAIC0xNjYsNiArMTY2LDggQEBcXG4gI2RlZmluZSBTT19JTlFcXHRcXHRcXHQ4NFxcbiAjZGVmaW5lIFNDTV9JTlFcXHRcXHRcXHRTT19JTlFcXG4gXFxuKyNkZWZpbmUgU09fUklHSFRTX05PVFJVTkMgICAgICA4NVxcbitcXG4gI2lmICFkZWZpbmVkKF9fS0VSTkVMX18pXFxuIFxcbiAjaWYgX19CSVRTX1BFUl9MT05HID09IDY0XFxuZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oXFxuaW5kZXggYzE2ZWMzNmRmZWU2Yi4uZjNhMzgxNWM3ZGMyOSAxMDA2NDRcXG4tLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oXFxuKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaFxcbkBAIC0xNDcsNiArMTQ3LDggQEBcXG4gI2RlZmluZSBTT19JTlFcXHRcXHRcXHQweDQwNTJcXG4gI2RlZmluZSBTQ01fSU5RXFx0XFx0XFx0U09fSU5RXFxuIFxcbisjZGVmaW5lIFNPX1JJR0hUU19OT1RSVU5DXFx0MHg0MDUzXFxuK1xcbiAjaWYgIWRlZmluZWQoX19LRVJORUxfXylcXG4gXFxuICNpZiBfX0JJVFNfUEVSX0xPTkcgPT0gNjRcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oXFxuaW5kZXggNzFiZWZhMTA5ZTFjZi4uNzkwN2YzYjFmMGVlMCAxMDA2NDRcXG4tLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmhcXG4rKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmhcXG5AQCAtMTQ4LDYgKzE0OCw4IEBAXFxuICNkZWZpbmUgU09fSU5RICAgICAgICAgICAgICAgICAgIDB4MDA1ZFxcbiAjZGVmaW5lIFNDTV9JTlEgICAgICAgICAgICAgICAgICBTT19JTlFcXG4gXFxuKyNkZWZpbmUgU09fUklHSFRTX05PVFJVTkMgICAgICAgIDB4MDA1ZVxcbitcXG4gI2lmICFkZWZpbmVkKF9fS0VSTkVMX18pXFxuIFxcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYWZfdW5peC5oIGIvaW5jbHVkZS9uZXQvYWZfdW5peC5oXFxuaW5kZXggMzRmNTNkZGU2NWNlYS4uYmIxYjNkZWUwMmU4MiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9hZl91bml4LmhcXG4rKysgYi9pbmNsdWRlL25ldC9hZl91bml4LmhcXG5AQCAtNDksNiArNDksNyBAQCBzdHJ1Y3QgdW5peF9zb2NrIHtcXG4gXFx0c3RydWN0IHNjbV9zdGF0XFx0XFx0c2NtX3N0YXQ7XFxuIFxcdGludFxcdFxcdFxcdGlucV9sZW47XFxuIFxcdGJvb2xcXHRcXHRcXHRyZWN2bXNnX2lucTtcXG4rXFx0Ym9vbFxcdFxcdFxcdHNjbV9yaWdodHNfbm90cnVuYztcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0FGX1VOSVhfT09CKVxcbiBcXHRzdHJ1Y3Qgc2tfYnVmZlxcdFxcdCpvb2Jfc2tiO1xcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2NtLmggYi9pbmNsdWRlL25ldC9zY20uaFxcbmluZGV4IGM1MjUxOTY2OTM0OWYuLjg2YWU2YmMxMDllYzYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvc2NtLmhcXG4rKysgYi9pbmNsdWRlL25ldC9zY20uaFxcbkBAIC01MCw4ICs1MCw4IEBAIHN0cnVjdCBzY21fY29va2llIHtcXG4gI2VuZGlmXFxuIH07XFxuIFxcbi12b2lkIHNjbV9kZXRhY2hfZmRzKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNjbV9jb29raWUgKnNjbSk7XFxuLXZvaWQgc2NtX2RldGFjaF9mZHNfY29tcGF0KHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNjbV9jb29raWUgKnNjbSk7XFxuK3ZvaWQgc2NtX2RldGFjaF9mZHMoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2NtLCBib29sIG5vdHJ1bmMpO1xcbit2b2lkIHNjbV9kZXRhY2hfZmRzX2NvbXBhdChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20sIGJvb2wgbm90cnVuYyk7XFxuIGludCBfX3NjbV9zZW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNjbV9jb29raWUgKnNjbSk7XFxuIHZvaWQgX19zY21fZGVzdHJveShzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2NtKTtcXG4gc3RydWN0IHNjbV9mcF9saXN0ICpzY21fZnBfZHVwKHN0cnVjdCBzY21fZnBfbGlzdCAqZnBsKTtcXG5AQCAtMTA3LDEzICsxMDcsOCBAQCB2b2lkIHNjbV9yZWN2KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4gdm9pZCBzY21fcmVjdl91bml4KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4gXFx0XFx0ICAgc3RydWN0IHNjbV9jb29raWUgKnNjbSwgaW50IGZsYWdzKTtcXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IHNjbV9yZWN2X29uZV9mZChzdHJ1Y3QgZmlsZSAqZiwgaW50IF9fdXNlciAqdWZkLFxcbi1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBmbGFncylcXG4te1xcbi1cXHRpZiAoIXVmZClcXG4tXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuLVxcdHJldHVybiByZWNlaXZlX2ZkKGYsIHVmZCwgZmxhZ3MpO1xcbi19XFxuK2ludCBzY21fcmVjdl9vbmVfZmQoc3RydWN0IGZpbGUgKmYsIGludCBfX3VzZXIgKnVmZCwgdW5zaWduZWQgaW50IGZsYWdzLFxcbitcXHRcXHQgICAgYm9vbCBub3RydW5jKTtcXG4gXFxuICNlbmRpZiAvKiBfX0xJTlVYX05FVF9TQ01fSCAqL1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NvY2tldC5oIGIvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NvY2tldC5oXFxuaW5kZXggNTNiNWE4YzAwMmIxZS4uODRlYTdiOTI5MzZlMiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvc29ja2V0LmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvc29ja2V0LmhcXG5AQCAtMTUwLDYgKzE1MCw4IEBAXFxuICNkZWZpbmUgU09fSU5RXFx0XFx0XFx0ODRcXG4gI2RlZmluZSBTQ01fSU5RXFx0XFx0XFx0U09fSU5RXFxuIFxcbisjZGVmaW5lIFNPX1JJR0hUU19OT1RSVU5DXFx0ODVcXG4rXFxuICNpZiAhZGVmaW5lZChfX0tFUk5FTF9fKVxcbiBcXG4gI2lmIF9fQklUU19QRVJfTE9ORyA9PSA2NCB8fCAoZGVmaW5lZChfX3g4Nl82NF9fKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKF9fSUxQMzJfXykpXFxuZGlmZiAtLWdpdCBhL25ldC9jb21wYXQuYyBiL25ldC9jb21wYXQuY1xcbmluZGV4IGQ2OGNmOWMzYWFkNWYuLjZiZGY0YTJjOTA3N2QgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvbXBhdC5jXFxuKysrIGIvbmV0L2NvbXBhdC5jXFxuQEAgLTI4Niw3ICsyODYsNyBAQCBzdGF0aWMgaW50IHNjbV9tYXhfZmRzX2NvbXBhdChzdHJ1Y3QgbXNnaGRyICptc2cpXFxuIFxcdHJldHVybiAobXNnLVxcdTAwM2Vtc2dfY29udHJvbGxlbiAtIHNpemVvZihzdHJ1Y3QgY29tcGF0X2Ntc2doZHIpKSAvIHNpemVvZihpbnQpO1xcbiB9XFxuIFxcbi12b2lkIHNjbV9kZXRhY2hfZmRzX2NvbXBhdChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20pXFxuK3ZvaWQgc2NtX2RldGFjaF9mZHNfY29tcGF0KHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNjbV9jb29raWUgKnNjbSwgYm9vbCBub3RydW5jKVxcbiB7XFxuIFxcdHN0cnVjdCBjb21wYXRfY21zZ2hkciBfX3VzZXIgKmNtID1cXG4gXFx0XFx0KHN0cnVjdCBjb21wYXRfY21zZ2hkciBfX3VzZXIgKiltc2ctXFx1MDAzZW1zZ19jb250cm9sX3VzZXI7XFxuQEAgLTI5Niw3ICsyOTYsNyBAQCB2b2lkIHNjbV9kZXRhY2hfZmRzX2NvbXBhdChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20pXFxuIFxcdGludCBlcnIgPSAwLCBpO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGZkbWF4OyBpKyspIHtcXG4tXFx0XFx0ZXJyID0gc2NtX3JlY3Zfb25lX2ZkKHNjbS1cXHUwMDNlZnAtXFx1MDAzZWZwW2ldLCBjbXNnX2RhdGEgKyBpLCBvX2ZsYWdzKTtcXG4rXFx0XFx0ZXJyID0gc2NtX3JlY3Zfb25lX2ZkKHNjbS1cXHUwMDNlZnAtXFx1MDAzZWZwW2ldLCBjbXNnX2RhdGEgKyBpLCBvX2ZsYWdzLCBub3RydW5jKTtcXG4gXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NjbS5jIGIvbmV0L2NvcmUvc2NtLmNcXG5pbmRleCBlZWMxM2Y1MGVjYWY2Li5mMGQ0NGVjZGIxMWZjIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL3NjbS5jXFxuKysrIGIvbmV0L2NvcmUvc2NtLmNcXG5AQCAtMzUxLDcgKzM1MSwzMSBAQCBzdGF0aWMgaW50IHNjbV9tYXhfZmRzKHN0cnVjdCBtc2doZHIgKm1zZylcXG4gXFx0cmV0dXJuIChtc2ctXFx1MDAzZW1zZ19jb250cm9sbGVuIC0gc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKSkgLyBzaXplb2YoaW50KTtcXG4gfVxcbiBcXG4tdm9pZCBzY21fZGV0YWNoX2ZkcyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20pXFxuK2ludCBzY21fcmVjdl9vbmVfZmQoc3RydWN0IGZpbGUgKmYsIGludCBfX3VzZXIgKnVmZCwgdW5zaWduZWQgaW50IGZsYWdzLFxcbitcXHRcXHQgICAgYm9vbCBub3RydW5jKVxcbit7XFxuK1xcdGludCBlcnJvcjtcXG4rXFxuK1xcdGlmICghdWZkKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuK1xcdGVycm9yID0gc2VjdXJpdHlfZmlsZV9yZWNlaXZlKGYpO1xcbitcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdHJldHVybiBub3RydW5jID8gcHV0X3VzZXIoZXJyb3IsIHVmZCkgOiBlcnJvcjtcXG4rXFxuK1xcdEZEX1BSRVBBUkUoZmRmLCBmbGFncywgZ2V0X2ZpbGUoZikpO1xcbitcXHRpZiAoZmRmLmVycilcXG4rXFx0XFx0cmV0dXJuIGZkZi5lcnI7XFxuK1xcbitcXHRlcnJvciA9IHB1dF91c2VyKGZkX3ByZXBhcmVfZmQoZmRmKSwgdWZkKTtcXG4rXFx0aWYgKGVycm9yKVxcbitcXHRcXHRyZXR1cm4gZXJyb3I7XFxuK1xcbitcXHRfX3JlY2VpdmVfc29jayhmZF9wcmVwYXJlX2ZpbGUoZmRmKSk7XFxuK1xcdHJldHVybiBmZF9wdWJsaXNoKGZkZik7XFxuK31cXG4rXFxuK3ZvaWQgc2NtX2RldGFjaF9mZHMoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2NtLCBib29sIG5vdHJ1bmMpXFxuIHtcXG4gXFx0c3RydWN0IGNtc2doZHIgX191c2VyICpjbSA9XFxuIFxcdFxcdChfX2ZvcmNlIHN0cnVjdCBjbXNnaGRyIF9fdXNlciAqKW1zZy1cXHUwMDNlbXNnX2NvbnRyb2xfdXNlcjtcXG5AQCAtMzY1LDEyICszODksMTIgQEAgdm9pZCBzY21fZGV0YWNoX2ZkcyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20pXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGlmIChtc2ctXFx1MDAzZW1zZ19mbGFncyBcXHUwMDI2IE1TR19DTVNHX0NPTVBBVCkge1xcbi1cXHRcXHRzY21fZGV0YWNoX2Zkc19jb21wYXQobXNnLCBzY20pO1xcbitcXHRcXHRzY21fZGV0YWNoX2Zkc19jb21wYXQobXNnLCBzY20sIG5vdHJ1bmMpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBmZG1heDsgaSsrKSB7XFxuLVxcdFxcdGVyciA9IHNjbV9yZWN2X29uZV9mZChzY20tXFx1MDAzZWZwLVxcdTAwM2VmcFtpXSwgY21zZ19kYXRhICsgaSwgb19mbGFncyk7XFxuK1xcdFxcdGVyciA9IHNjbV9yZWN2X29uZV9mZChzY20tXFx1MDAzZWZwLVxcdTAwM2VmcFtpXSwgY21zZ19kYXRhICsgaSwgb19mbGFncywgbm90cnVuYyk7XFxuIFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0fVxcbkBAIC01MjMsOSArNTQ3LDYgQEAgc3RhdGljIGJvb2wgX19zY21fcmVjdl9jb21tb24oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxuIFxcbiBcXHRzY21fcGFzc2VjKHNrLCBtc2csIHNjbSk7XFxuIFxcbi1cXHRpZiAoc2NtLVxcdTAwM2VmcClcXG4tXFx0XFx0c2NtX2RldGFjaF9mZHMobXNnLCBzY20pO1xcbi1cXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuQEAgLTU0NSw2ICs1NjYsMTMgQEAgdm9pZCBzY21fcmVjdl91bml4KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4gXFx0aWYgKCFfX3NjbV9yZWN2X2NvbW1vbihzb2NrLVxcdTAwM2VzaywgbXNnLCBzY20sIGZsYWdzKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0aWYgKHNjbS1cXHUwMDNlZnApIHtcXG4rXFx0XFx0c3RydWN0IHVuaXhfc29jayAqdTtcXG4rXFxuK1xcdFxcdHUgPSB1bml4X3NrKHNvY2stXFx1MDAzZXNrKTtcXG4rXFx0XFx0c2NtX2RldGFjaF9mZHMobXNnLCBzY20sIFJFQURfT05DRSh1LVxcdTAwM2VzY21fcmlnaHRzX25vdHJ1bmMpKTtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKHNvY2stXFx1MDAzZXNrLVxcdTAwM2Vza19zY21fcGlkZmQpXFxuIFxcdFxcdHNjbV9waWRmZF9yZWN2KG1zZywgc2NtKTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC91bml4L2FmX3VuaXguYyBiL25ldC91bml4L2FmX3VuaXguY1xcbmluZGV4IDEwZWQ5NDIxZTQzYWEuLjAzY2UyM2E0ZWJlZTEgMTAwNjQ0XFxuLS0tIGEvbmV0L3VuaXgvYWZfdW5peC5jXFxuKysrIGIvbmV0L3VuaXgvYWZfdW5peC5jXFxuQEAgLTkyMiw2ICs5MjIsNyBAQCBzdGF0aWMgYm9vbCB1bml4X2N1c3RvbV9zb2Nrb3B0KGludCBvcHRuYW1lKVxcbiB7XFxuIFxcdHN3aXRjaCAob3B0bmFtZSkge1xcbiBcXHRjYXNlIFNPX0lOUTpcXG4rXFx0Y2FzZSBTT19SSUdIVFNfTk9UUlVOQzpcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG5AQCAtOTUwLDEzICs5NTEsMjEgQEAgc3RhdGljIGludCB1bml4X3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4gXFx0c3dpdGNoIChvcHRuYW1lKSB7XFxuIFxcdGNhc2UgU09fSU5ROlxcbiBcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3R5cGUgIT0gU09DS19TVFJFQU0pXFxuLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVOT1BST1RPT1BUO1xcbiBcXG4gXFx0XFx0aWYgKHZhbCBcXHUwMDNlIDEgfHwgdmFsIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHRcXHRXUklURV9PTkNFKHUtXFx1MDAzZXJlY3Ztc2dfaW5xLCB2YWwpO1xcbiBcXHRcXHRicmVhaztcXG4rXFxuK1xcdGNhc2UgU09fUklHSFRTX05PVFJVTkM6XFxuK1xcdFxcdGlmICh2YWwgXFx1MDAzZSAxIHx8IHZhbCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0V1JJVEVfT05DRSh1LVxcdTAwM2VzY21fcmlnaHRzX25vdHJ1bmMsIHZhbCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0dXJuIC1FTk9QUk9UT09QVDtcXG4gXFx0fVxcbkBAIC0xMDA2LDYgKzEwMTUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB1bml4X2RncmFtX29wcyA9IHtcXG4gI2VuZGlmXFxuIFxcdC5saXN0ZW4gPVxcdHNvY2tfbm9fbGlzdGVuLFxcbiBcXHQuc2h1dGRvd24gPVxcdHVuaXhfc2h1dGRvd24sXFxuK1xcdC5zZXRzb2Nrb3B0ID1cXHR1bml4X3NldHNvY2tvcHQsXFxuIFxcdC5zZW5kbXNnID1cXHR1bml4X2RncmFtX3NlbmRtc2csXFxuIFxcdC5yZWFkX3NrYiA9XFx0dW5peF9yZWFkX3NrYixcXG4gXFx0LnJlY3Ztc2cgPVxcdHVuaXhfZGdyYW1fcmVjdm1zZyxcXG5AQCAtMTAzMCw2ICsxMDQwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgdW5peF9zZXFwYWNrZXRfb3BzID0ge1xcbiAjZW5kaWZcXG4gXFx0Lmxpc3RlbiA9XFx0dW5peF9saXN0ZW4sXFxuIFxcdC5zaHV0ZG93biA9XFx0dW5peF9zaHV0ZG93bixcXG4rXFx0LnNldHNvY2tvcHQgPVxcdHVuaXhfc2V0c29ja29wdCxcXG4gXFx0LnNlbmRtc2cgPVxcdHVuaXhfc2VxcGFja2V0X3NlbmRtc2csXFxuIFxcdC5yZWN2bXNnID1cXHR1bml4X3NlcXBhY2tldF9yZWN2bXNnLFxcbiBcXHQubW1hcCA9XFx0XFx0c29ja19ub19tbWFwLFxcbkBAIC0xMTQzLDkgKzExNTQsMTAgQEAgc3RhdGljIGludCB1bml4X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcXG4gXFx0aWYgKHByb3RvY29sIFxcdTAwMjZcXHUwMDI2IHByb3RvY29sICE9IFBGX1VOSVgpXFxuIFxcdFxcdHJldHVybiAtRVBST1RPTk9TVVBQT1JUO1xcbiBcXG4rXFx0c2V0X2JpdChTT0NLX0NVU1RPTV9TT0NLT1BULCBcXHUwMDI2c29jay1cXHUwMDNlZmxhZ3MpO1xcbitcXG4gXFx0c3dpdGNoIChzb2NrLVxcdTAwM2V0eXBlKSB7XFxuIFxcdGNhc2UgU09DS19TVFJFQU06XFxuLVxcdFxcdHNldF9iaXQoU09DS19DVVNUT01fU09DS09QVCwgXFx1MDAyNnNvY2stXFx1MDAzZWZsYWdzKTtcXG4gXFx0XFx0c29jay1cXHUwMDNlb3BzID0gXFx1MDAyNnVuaXhfc3RyZWFtX29wcztcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdFxcdC8qXFxuQEAgLTE3NDMsOSArMTc1NSwxMCBAQCBzdGF0aWMgaW50IHVuaXhfc3RyZWFtX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZFxcbiBcXHRpbml0X3BlZXJjcmVkKG5ld3NrLCBcXHUwMDI2cGVlcmNyZWQpO1xcbiBcXG4gXFx0bmV3dSA9IHVuaXhfc2sobmV3c2spO1xcbitcXHRvdGhlcnUgPSB1bml4X3NrKG90aGVyKTtcXG4gXFx0bmV3dS1cXHUwMDNlbGlzdGVuZXIgPSBvdGhlcjtcXG4rXFx0bmV3dS1cXHUwMDNlc2NtX3JpZ2h0c19ub3RydW5jID0gb3RoZXJ1LVxcdTAwM2VzY21fcmlnaHRzX25vdHJ1bmM7XFxuIFxcdFJDVV9JTklUX1BPSU5URVIobmV3c2stXFx1MDAzZXNrX3dxLCBcXHUwMDI2bmV3dS1cXHUwMDNlcGVlcl93cSk7XFxuLVxcdG90aGVydSA9IHVuaXhfc2sob3RoZXIpO1xcbiBcXG4gXFx0LyogY29weSBhZGRyZXNzIGluZm9ybWF0aW9uIGZyb20gbGlzdGVuaW5nIHRvIG5ldyBzb2NrXFxuIFxcdCAqXFxuQEAgLTE4NjUsOCArMTg3OCw3IEBAIHN0YXRpYyBpbnQgdW5peF9hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jayxcXG4gXFx0c2tiX2ZyZWVfZGF0YWdyYW0oc2ssIHNrYik7XFxuIFxcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcXHUwMDI2dW5peF9zayhzayktXFx1MDAzZXBlZXJfd2FpdCk7XFxuIFxcbi1cXHRpZiAodHNrLVxcdTAwM2Vza190eXBlID09IFNPQ0tfU1RSRUFNKVxcbi1cXHRcXHRzZXRfYml0KFNPQ0tfQ1VTVE9NX1NPQ0tPUFQsIFxcdTAwMjZuZXdzb2NrLVxcdTAwM2VmbGFncyk7XFxuK1xcdHNldF9iaXQoU09DS19DVVNUT01fU09DS09QVCwgXFx1MDAyNm5ld3NvY2stXFx1MDAzZWZsYWdzKTtcXG4gXFxuIFxcdC8qIGF0dGFjaCBhY2NlcHRlZCBzb2NrIHRvIHNvY2tldCAqL1xcbiBcXHR1bml4X3N0YXRlX2xvY2sodHNrKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4Ly5naXRpZ25vcmVcXG5pbmRleCA5NzMxNzY2NDQxMDM2Li45NTRmMDk1OGRkMDM0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4Ly5naXRpZ25vcmVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC8uZ2l0aWdub3JlXFxuQEAgLTMsNiArMyw4IEBAIG1zZ19vb2JcXG4gc2NtX2lucVxcbiBzY21fcGlkZmRcXG4gc2NtX3JpZ2h0c1xcbitzY21fcmlnaHRzX2RlbmlhbF9sc21cXG4rc2NtX3JpZ2h0c19kZW5pYWxfbHNtLmJwZi5vXFxuIHNvX3BlZWtfb2ZmXFxuIHVuaXhfY29ubmVjdFxcbiB1bml4X2Nvbm5yZXNldFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L01ha2VmaWxlXFxuaW5kZXggNTdkMTU5ODAzYTNhYi4uYTY2ZjEwZmIwYzIzMSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L01ha2VmaWxlXFxuQEAgLTExLDEwICsxMSwxOCBAQCBURVNUX0dFTl9QUk9HUyA6PSBcXFxcXFxuIFxcdHNjbV9pbnEgXFxcXFxcbiBcXHRzY21fcGlkZmQgXFxcXFxcbiBcXHRzY21fcmlnaHRzIFxcXFxcXG4rXFx0c2NtX3JpZ2h0c19kZW5pYWxfbHNtIFxcXFxcXG4gXFx0c29fcGVla19vZmYgXFxcXFxcbiBcXHR1bml4X2Nvbm5lY3QgXFxcXFxcbiBcXHR1bml4X2Nvbm5yZXNldCBcXFxcXFxuIFxcdHVuaXhfbGlzdGVuIFxcXFxcXG4gIyBlbmQgb2YgVEVTVF9HRU5fUFJPR1NcXG4gXFxuK1RFU1RfR0VOX0ZJTEVTIDo9IHNjbV9yaWdodHNfZGVuaWFsX2xzbS5icGYub1xcbitcXG4gaW5jbHVkZSAuLi8uLi9saWIubWtcXG4raW5jbHVkZSAuLi9icGYubWtcXG4rXFxuKyQoT1VUUFVUKS9zY21fcmlnaHRzX2RlbmlhbF9sc206ICQoQlBGT0JKKVxcbiskKE9VVFBVVCkvc2NtX3JpZ2h0c19kZW5pYWxfbHNtOiBDRkxBR1MgKz0gLUkkKFNDUkFUQ0hfRElSKS9pbmNsdWRlXFxuKyQoT1VUUFVUKS9zY21fcmlnaHRzX2RlbmlhbF9sc206IExETElCUyArPSAtbGVsZiAtbHpcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvY29uZmlnXFxuaW5kZXggNDFkYmIwM2M3NDdlYi4uNDY4ZjdhMGJiNjRlNiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9jb25maWdcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9jb25maWdcXG5AQCAtMiwzICsyLDEwIEBAIENPTkZJR19BRl9VTklYX09PQj15XFxuIENPTkZJR19VTklYPXlcXG4gQ09ORklHX1VOSVhfRElBRz1tXFxuIENPTkZJR19VU0VSX05TPXlcXG4rQ09ORklHX0JQRj15XFxuK0NPTkZJR19CUEZfU1lTQ0FMTD15XFxuK0NPTkZJR19CUEZfRVZFTlRTPXlcXG4rQ09ORklHX0JQRl9KSVQ9eVxcbitDT05GSUdfU0VDVVJJVFk9eVxcbitDT05GSUdfQlBGX0xTTT15XFxuK0NPTkZJR19ERUJVR19JTkZPX0JURj15XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHNfZGVuaWFsX2xzbS5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHNfZGVuaWFsX2xzbS5icGYuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNGYyNDE0NDY1YmZkM1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzX2RlbmlhbF9sc20uYnBmLmNcXG5AQCAtMCwwICsxLDM2IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXFx1MDAzZVxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuK1xcbitzdHJ1Y3QgaW5vZGUge1xcbitcXHR1bnNpZ25lZCBsb25nIGlfaW5vO1xcbit9IF9fYXR0cmlidXRlX18oKHByZXNlcnZlX2FjY2Vzc19pbmRleCkpO1xcbitcXG4rc3RydWN0IGZpbGUge1xcbitcXHRzdHJ1Y3QgaW5vZGUgKmZfaW5vZGU7XFxuK30gX19hdHRyaWJ1dGVfXygocHJlc2VydmVfYWNjZXNzX2luZGV4KSk7XFxuK1xcbitzdHJ1Y3Qge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0hBU0gpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDE2KTtcXG4rXFx0X190eXBlKGtleSwgX191NjQpO1xcdC8qIGlub2RlIG51bWJlciAqL1xcbitcXHRfX3R5cGUodmFsdWUsIF9fdTMyKTtcXHQvKiB0Z2lkIG9mIHRoZSByZWNlaXZlciBiZWluZyB0ZXN0ZWQgKi9cXG4rfSBkZW5pZWRfaW5vZGVzIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuK1NFQyhcXFwibHNtL2ZpbGVfcmVjZWl2ZVxcXCIpXFxuK2ludCBCUEZfUFJPRyhzY21fcmlnaHRzX2RlbnksIHN0cnVjdCBmaWxlICpmaWxlKVxcbit7XFxuK1xcdF9fdTMyIHRnaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSBcXHUwMDNlXFx1MDAzZSAzMjtcXG4rXFx0X191NjQgaW5vID0gZmlsZS1cXHUwMDNlZl9pbm9kZS1cXHUwMDNlaV9pbm87XFxuK1xcdF9fdTMyICpvd25lcjtcXG4rXFxuK1xcdG93bmVyID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2ZGVuaWVkX2lub2RlcywgXFx1MDAyNmlubyk7XFxuK1xcdGlmIChvd25lciBcXHUwMDI2XFx1MDAyNiAqb3duZXIgPT0gdGdpZClcXG4rXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHNfZGVuaWFsX2xzbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvc2NtX3JpZ2h0c19kZW5pYWxfbHNtLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjk0MWI3ZGVjZjc5ODBcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvc2NtX3JpZ2h0c19kZW5pYWxfbHNtLmNcXG5AQCAtMCwwICsxLDI4NSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisjZGVmaW5lIF9HTlVfU09VUkNFXFxuKyNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZmNudGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRsaWIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvc29ja2V0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvc3RhdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3R5cGVzLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2xpYmJwZi5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImtzZWxmdGVzdF9oYXJuZXNzLmhcXFwiXFxuK1xcbisjaWZuZGVmIFNPX1JJR0hUU19OT1RSVU5DXFxuKyNkZWZpbmUgU09fUklHSFRTX05PVFJVTkMgODVcXG4rI2VuZGlmXFxuK1xcbisjZGVmaW5lIE5SX0ZJTEVTIDJcXG4rXFxuKy8qIFBlci1maWxlIGNvbnRlbnQsIHNvIGEgcmVjZWl2ZWQgZmQgY2FuIGJlIG1hdGNoZWQgdG8gdGhlIGZpbGUgc2VudCAqL1xcbisjZGVmaW5lIFNFQ1JFVChuKSBcXFwic2VjcmV0ICVkXFxcIiwgKG4pXFxuK1xcbisvKiBJbmRpY2VzIGludG8gdGhlIHNvY2tldHBhaXIgKi9cXG4rI2RlZmluZSBTS19TRU5ERVIgMFxcbisjZGVmaW5lIFNLX1JFQ0VJVkVSIDFcXG4rXFxuK0ZJWFRVUkUoc2NtX3JpZ2h0c19kZW5pYWxfYnBmKVxcbit7XFxuK1xcdHN0cnVjdCBicGZfb2JqZWN0ICpvYmo7XFxuK1xcdHN0cnVjdCBicGZfbGluayAqbGluaztcXG4rXFx0aW50IG1hcF9mZDtcXG4rXFx0aW50IHNrWzJdO1xcbitcXHRpbnQgZmlsZXNbTlJfRklMRVNdO1xcbitcXHRfX3U2NCBpbm9zW05SX0ZJTEVTXTtcXG4rXFx0Y2hhciBwYXRoc1tOUl9GSUxFU11bNjRdO1xcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UKHNjbV9yaWdodHNfZGVuaWFsX2JwZilcXG4re1xcbitcXHRpbnQgc29ja190eXBlO1xcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChzY21fcmlnaHRzX2RlbmlhbF9icGYsIHN0cmVhbSlcXG4re1xcbitcXHQuc29ja190eXBlID0gU09DS19TVFJFQU0sXFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlRfQUREKHNjbV9yaWdodHNfZGVuaWFsX2JwZiwgZGdyYW0pXFxuK3tcXG4rXFx0LnNvY2tfdHlwZSA9IFNPQ0tfREdSQU0sXFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlRfQUREKHNjbV9yaWdodHNfZGVuaWFsX2JwZiwgc2VxcGFja2V0KVxcbit7XFxuK1xcdC5zb2NrX3R5cGUgPSBTT0NLX1NFUVBBQ0tFVCxcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfU0VUVVAoc2NtX3JpZ2h0c19kZW5pYWxfYnBmKVxcbit7XFxuK1xcdHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZztcXG4rXFx0Y2hhciBsc21zWzI1Nl0gPSB7fTtcXG4rXFx0aW50IGksIGZkO1xcbitcXG4rXFx0aWYgKGdldGV1aWQoKSAhPSAwKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcInJlcXVpcmVzIHJvb3RcXFwiKTtcXG4rXFxuK1xcdGZkID0gb3BlbihcXFwiL3N5cy9rZXJuZWwvc2VjdXJpdHkvbHNtXFxcIiwgT19SRE9OTFkpO1xcbitcXHRBU1NFUlRfR0UoZmQsIDApO1xcbitcXHRBU1NFUlRfTFQoMCwgcmVhZChmZCwgbHNtcywgc2l6ZW9mKGxzbXMpIC0gMSkpO1xcbitcXHRjbG9zZShmZCk7XFxuK1xcbitcXHRpZiAoIXN0cnN0cihsc21zLCBcXFwiYnBmXFxcIikpXFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwiQlBGIExTTSBub3QgYWN0aXZlIChib290IHdpdGggbHNtPS4uLixicGYpXFxcIik7XFxuK1xcbitcXHRzZWxmLVxcdTAwM2VvYmogPSBicGZfb2JqZWN0X19vcGVuX2ZpbGUoXFxcInNjbV9yaWdodHNfZGVuaWFsX2xzbS5icGYub1xcXCIsIE5VTEwpO1xcbitcXHRBU1NFUlRfTkUoTlVMTCwgc2VsZi1cXHUwMDNlb2JqKTtcXG4rXFx0QVNTRVJUX0VRKDAsIGJwZl9vYmplY3RfX2xvYWQoc2VsZi1cXHUwMDNlb2JqKSk7XFxuK1xcbitcXHRwcm9nID0gYnBmX29iamVjdF9fZmluZF9wcm9ncmFtX2J5X25hbWUoc2VsZi1cXHUwMDNlb2JqLCBcXFwic2NtX3JpZ2h0c19kZW55XFxcIik7XFxuK1xcdEFTU0VSVF9ORShOVUxMLCBwcm9nKTtcXG4rXFxuK1xcdHNlbGYtXFx1MDAzZWxpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoX2xzbShwcm9nKTtcXG4rXFx0QVNTRVJUX05FKE5VTEwsIHNlbGYtXFx1MDAzZWxpbmspO1xcbitcXG4rXFx0c2VsZi1cXHUwMDNlbWFwX2ZkID0gYnBmX29iamVjdF9fZmluZF9tYXBfZmRfYnlfbmFtZShzZWxmLVxcdTAwM2VvYmosXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFwiZGVuaWVkX2lub2Rlc1xcXCIpO1xcbitcXHRBU1NFUlRfR0Uoc2VsZi1cXHUwMDNlbWFwX2ZkLCAwKTtcXG4rXFxuK1xcdEFTU0VSVF9FUSgwLCBzb2NrZXRwYWlyKEFGX1VOSVgsIHZhcmlhbnQtXFx1MDAzZXNvY2tfdHlwZSwgMCwgc2VsZi1cXHUwMDNlc2spKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOUl9GSUxFUzsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBzdGF0IHN0O1xcbitcXG4rXFx0XFx0c25wcmludGYoc2VsZi1cXHUwMDNlcGF0aHNbaV0sIHNpemVvZihzZWxmLVxcdTAwM2VwYXRoc1tpXSksXFxuK1xcdFxcdFxcdCBcXFwiL3RtcC9zY21fcmlnaHRzX2RlbmlhbF9icGYuJWQuWFhYWFhYXFxcIiwgaSk7XFxuK1xcdFxcdHNlbGYtXFx1MDAzZWZpbGVzW2ldID0gbWtzdGVtcChzZWxmLVxcdTAwM2VwYXRoc1tpXSk7XFxuK1xcdFxcdEFTU0VSVF9HRShzZWxmLVxcdTAwM2VmaWxlc1tpXSwgMCk7XFxuK1xcbitcXHRcXHRBU1NFUlRfTFQoMCwgZHByaW50ZihzZWxmLVxcdTAwM2VmaWxlc1tpXSwgU0VDUkVUKGkpKSk7XFxuK1xcbitcXHRcXHRBU1NFUlRfRVEoMCwgZnN0YXQoc2VsZi1cXHUwMDNlZmlsZXNbaV0sIFxcdTAwMjZzdCkpO1xcbitcXHRcXHRzZWxmLVxcdTAwM2Vpbm9zW2ldID0gc3Quc3RfaW5vO1xcbitcXHR9XFxuK31cXG4rXFxuK0ZJWFRVUkVfVEVBUkRPV04oc2NtX3JpZ2h0c19kZW5pYWxfYnBmKVxcbit7XFxuK1xcdGJwZl9saW5rX19kZXN0cm95KHNlbGYtXFx1MDAzZWxpbmspO1xcbitcXHRicGZfb2JqZWN0X19jbG9zZShzZWxmLVxcdTAwM2VvYmopO1xcbitcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBOUl9GSUxFUzsgaSsrKSB7XFxuK1xcdFxcdGlmIChzZWxmLVxcdTAwM2VmaWxlc1tpXSBcXHUwMDNlPSAwKSB7XFxuK1xcdFxcdFxcdGNsb3NlKHNlbGYtXFx1MDAzZWZpbGVzW2ldKTtcXG4rXFx0XFx0XFx0dW5saW5rKHNlbGYtXFx1MDAzZXBhdGhzW2ldKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRjbG9zZShzZWxmLVxcdTAwM2Vza1tTS19TRU5ERVJdKTtcXG4rXFx0Y2xvc2Uoc2VsZi1cXHUwMDNlc2tbU0tfUkVDRUlWRVJdKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBkZW55X2lub2RlKGludCBtYXBfZmQsIF9fdTY0IGlubylcXG4re1xcbitcXHRfX3UzMiB0Z2lkID0gZ2V0cGlkKCk7XFxuK1xcbitcXHRyZXR1cm4gYnBmX21hcF91cGRhdGVfZWxlbShtYXBfZmQsIFxcdTAwMjZpbm8sIFxcdTAwMjZ0Z2lkLCBCUEZfQU5ZKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBzZXRfbm90cnVuYyhpbnQgc2spXFxuK3tcXG4rXFx0aW50IG9uZSA9IDE7XFxuK1xcbitcXHRyZXR1cm4gc2V0c29ja29wdChzaywgU09MX1NPQ0tFVCwgU09fUklHSFRTX05PVFJVTkMsXFxuK1xcdFxcdFxcdCAgXFx1MDAyNm9uZSwgc2l6ZW9mKG9uZSkpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHNlbmRfZmRzKGludCBzaywgaW50ICpmZHMsIGludCBuKVxcbit7XFxuK1xcdGNoYXIgY3RybFtDTVNHX1NQQUNFKE5SX0ZJTEVTICogc2l6ZW9mKGludCkpXSA9IHt9O1xcbitcXHRjaGFyIGRhdGEgPSAneCc7XFxuK1xcdHN0cnVjdCBpb3ZlYyBpb3YgPSB7XFxuK1xcdFxcdC5pb3ZfYmFzZSA9IFxcdTAwMjZkYXRhLFxcbitcXHRcXHQuaW92X2xlbiA9IHNpemVvZihkYXRhKSxcXG4rXFx0fTtcXG4rXFx0c3RydWN0IG1zZ2hkciBtc2cgPSB7XFxuK1xcdFxcdC5tc2dfaW92ID0gXFx1MDAyNmlvdixcXG4rXFx0XFx0Lm1zZ19pb3ZsZW4gPSAxLFxcbitcXHRcXHQubXNnX2NvbnRyb2wgPSBjdHJsLFxcbitcXHRcXHQubXNnX2NvbnRyb2xsZW4gPSBDTVNHX1NQQUNFKG4gKiBzaXplb2YoaW50KSksXFxuK1xcdH07XFxuK1xcdHN0cnVjdCBjbXNnaGRyICpjbXNnID0gQ01TR19GSVJTVEhEUihcXHUwMDI2bXNnKTtcXG4rXFxuK1xcdGNtc2ctXFx1MDAzZWNtc2dfbGV2ZWwgPSBTT0xfU09DS0VUO1xcbitcXHRjbXNnLVxcdTAwM2VjbXNnX3R5cGUgPSBTQ01fUklHSFRTO1xcbitcXHRjbXNnLVxcdTAwM2VjbXNnX2xlbiA9IENNU0dfTEVOKG4gKiBzaXplb2YoaW50KSk7XFxuK1xcdG1lbWNweShDTVNHX0RBVEEoY21zZyksIGZkcywgbiAqIHNpemVvZihpbnQpKTtcXG4rXFxuK1xcdHJldHVybiBzZW5kbXNnKHNrLCBcXHUwMDI2bXNnLCAwKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCByZWN2X2ZkX3Nsb3RzKGludCBzaywgaW50ICpzbG90cywgaW50ICptc2dfZmxhZ3MpXFxuK3tcXG4rXFx0aW50IG5yX3Nsb3RzO1xcbitcXHRjaGFyIGN0cmxbQ01TR19TUEFDRShOUl9GSUxFUyAqIHNpemVvZihpbnQpKV07XFxuK1xcdGNoYXIgZGF0YTtcXG4rXFx0c3RydWN0IGlvdmVjIGlvdiA9IHtcXG4rXFx0XFx0Lmlvdl9iYXNlID0gXFx1MDAyNmRhdGEsXFxuK1xcdFxcdC5pb3ZfbGVuID0gc2l6ZW9mKGRhdGEpLFxcbitcXHR9O1xcbitcXHRzdHJ1Y3QgbXNnaGRyIG1zZyA9IHtcXG4rXFx0XFx0Lm1zZ19pb3YgPSBcXHUwMDI2aW92LFxcbitcXHRcXHQubXNnX2lvdmxlbiA9IDEsXFxuK1xcdFxcdC5tc2dfY29udHJvbCA9IGN0cmwsXFxuK1xcdFxcdC5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjdHJsKSxcXG4rXFx0fTtcXG4rXFx0c3RydWN0IGNtc2doZHIgKmNtc2c7XFxuK1xcbitcXHRpZiAocmVjdm1zZyhzaywgXFx1MDAyNm1zZywgMCkgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHQqbXNnX2ZsYWdzID0gbXNnLm1zZ19mbGFncztcXG4rXFxuK1xcdGNtc2cgPSBDTVNHX0ZJUlNUSERSKFxcdTAwMjZtc2cpO1xcbitcXHRpZiAoIWNtc2cpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0bnJfc2xvdHMgPSAoY21zZy1cXHUwMDNlY21zZ19sZW4gLSBDTVNHX0xFTigwKSkgLyBzaXplb2YoaW50KTtcXG4rXFx0bWVtY3B5KHNsb3RzLCBDTVNHX0RBVEEoY21zZyksIG5yX3Nsb3RzICogc2l6ZW9mKGludCkpO1xcbitcXG4rXFx0cmV0dXJuIG5yX3Nsb3RzO1xcbit9XFxuK1xcbisvKiBQcm92ZSBhIHJlY2VpdmVkIGZkIHdvcmtzIGJ5IHJlYWRpbmcgYmFjayB0aGUgZmlsZSdzIGNvbnRlbnQuICovXFxuK3N0YXRpYyBpbnQgY2hlY2tfc2VjcmV0KGludCBmZCwgaW50IGlkeClcXG4re1xcbitcXHRjaGFyIHdhbnRbMzJdLCBnb3RbMzJdID0ge307XFxuK1xcbitcXHRzbnByaW50Zih3YW50LCBzaXplb2Yod2FudCksIFNFQ1JFVChpZHgpKTtcXG4rXFx0aWYgKHByZWFkKGZkLCBnb3QsIHNpemVvZihnb3QpIC0gMSwgMCkgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRyZXR1cm4gc3RyY21wKHdhbnQsIGdvdCk7XFxuK31cXG4rXFxuK1RFU1RfRihzY21fcmlnaHRzX2RlbmlhbF9icGYsIGFsbF9hbGxvd2VkKVxcbit7XFxuK1xcdGludCBzbG90c1tOUl9GSUxFU10sIG5yX3Nsb3RzLCBmbGFncywgaTtcXG4rXFxuK1xcdEFTU0VSVF9FUSgwLCBzZXRfbm90cnVuYyhzZWxmLVxcdTAwM2Vza1tTS19SRUNFSVZFUl0pKTtcXG4rXFx0QVNTRVJUX05FKC0xLCBzZW5kX2ZkcyhzZWxmLVxcdTAwM2Vza1tTS19TRU5ERVJdLCBzZWxmLVxcdTAwM2VmaWxlcywgTlJfRklMRVMpKTtcXG4rXFx0bnJfc2xvdHMgPSByZWN2X2ZkX3Nsb3RzKHNlbGYtXFx1MDAzZXNrW1NLX1JFQ0VJVkVSXSwgc2xvdHMsIFxcdTAwMjZmbGFncyk7XFxuK1xcbitcXHRBU1NFUlRfRVEoTlJfRklMRVMsIG5yX3Nsb3RzKTtcXG4rXFx0RVhQRUNUX0VRKDAsIGZsYWdzIFxcdTAwMjYgTVNHX0NUUlVOQyk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTlJfRklMRVM7IGkrKykge1xcbitcXHRcXHRBU1NFUlRfR0Uoc2xvdHNbaV0sIDApO1xcbitcXHRcXHRFWFBFQ1RfRVEoMCwgY2hlY2tfc2VjcmV0KHNsb3RzW2ldLCBpKSk7XFxuK1xcdFxcdGNsb3NlKHNsb3RzW2ldKTtcXG4rXFx0fVxcbit9XFxuK1xcbitURVNUX0Yoc2NtX3JpZ2h0c19kZW5pYWxfYnBmLCBmaXJzdF9kZW5pZWQpXFxuK3tcXG4rXFx0aW50IHNsb3RzW05SX0ZJTEVTXSwgbnJfc2xvdHMsIGZsYWdzO1xcbitcXG4rXFx0QVNTRVJUX0VRKDAsIGRlbnlfaW5vZGUoc2VsZi1cXHUwMDNlbWFwX2ZkLCBzZWxmLVxcdTAwM2Vpbm9zWzBdKSk7XFxuK1xcbitcXHRBU1NFUlRfRVEoMCwgc2V0X25vdHJ1bmMoc2VsZi1cXHUwMDNlc2tbU0tfUkVDRUlWRVJdKSk7XFxuK1xcdEFTU0VSVF9ORSgtMSwgc2VuZF9mZHMoc2VsZi1cXHUwMDNlc2tbU0tfU0VOREVSXSwgc2VsZi1cXHUwMDNlZmlsZXMsIE5SX0ZJTEVTKSk7XFxuK1xcdG5yX3Nsb3RzID0gcmVjdl9mZF9zbG90cyhzZWxmLVxcdTAwM2Vza1tTS19SRUNFSVZFUl0sIHNsb3RzLCBcXHUwMDI2ZmxhZ3MpO1xcbitcXG4rXFx0QVNTRVJUX0VRKE5SX0ZJTEVTLCBucl9zbG90cyk7XFxuK1xcdEVYUEVDVF9FUSgwLCBmbGFncyBcXHUwMDI2IE1TR19DVFJVTkMpO1xcbitcXHRFWFBFQ1RfRVEoLUVQRVJNLCBzbG90c1swXSk7XFxuK1xcbitcXHRBU1NFUlRfR0Uoc2xvdHNbMV0sIDApO1xcbitcXHRFWFBFQ1RfRVEoMCwgY2hlY2tfc2VjcmV0KHNsb3RzWzFdLCAxKSk7XFxuK1xcdGNsb3NlKHNsb3RzWzFdKTtcXG4rfVxcbitcXG4rVEVTVF9GKHNjbV9yaWdodHNfZGVuaWFsX2JwZiwgYWxsX2RlbmllZClcXG4re1xcbitcXHRpbnQgc2xvdHNbTlJfRklMRVNdLCBucl9zbG90cywgZmxhZ3MsIGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTlJfRklMRVM7IGkrKylcXG4rXFx0XFx0QVNTRVJUX0VRKDAsIGRlbnlfaW5vZGUoc2VsZi1cXHUwMDNlbWFwX2ZkLCBzZWxmLVxcdTAwM2Vpbm9zW2ldKSk7XFxuK1xcbitcXHRBU1NFUlRfRVEoMCwgc2V0X25vdHJ1bmMoc2VsZi1cXHUwMDNlc2tbU0tfUkVDRUlWRVJdKSk7XFxuK1xcdEFTU0VSVF9ORSgtMSwgc2VuZF9mZHMoc2VsZi1cXHUwMDNlc2tbU0tfU0VOREVSXSwgc2VsZi1cXHUwMDNlZmlsZXMsIE5SX0ZJTEVTKSk7XFxuK1xcdG5yX3Nsb3RzID0gcmVjdl9mZF9zbG90cyhzZWxmLVxcdTAwM2Vza1tTS19SRUNFSVZFUl0sIHNsb3RzLCBcXHUwMDI2ZmxhZ3MpO1xcbitcXG4rXFx0QVNTRVJUX0VRKE5SX0ZJTEVTLCBucl9zbG90cyk7XFxuK1xcdEVYUEVDVF9FUSgwLCBmbGFncyBcXHUwMDI2IE1TR19DVFJVTkMpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX0ZJTEVTOyBpKyspXFxuK1xcdFxcdEVYUEVDVF9FUSgtRVBFUk0sIHNsb3RzW2ldKTtcXG4rfVxcbitcXG4rVEVTVF9GKHNjbV9yaWdodHNfZGVuaWFsX2JwZiwgZGVuaWVkX3dpdGhvdXRfbm90cnVuYylcXG4re1xcbitcXHRpbnQgc2xvdHNbTlJfRklMRVNdLCBucl9zbG90cywgZmxhZ3M7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBCYXNlbGluZSBiZWhhdmlvdXIgd2l0aG91dCBTT19SSUdIVFNfTk9UUlVOQzogdGhlIGZkIGFycmF5IGlzXFxuK1xcdCAqIHRydW5jYXRlZCBhdCB0aGUgZmlyc3QgZGVuaWVkIGZkIGFuZCBNU0dfQ1RSVU5DIGlzIHNldC5cXG4rXFx0ICovXFxuK1xcdEFTU0VSVF9FUSgwLCBkZW55X2lub2RlKHNlbGYtXFx1MDAzZW1hcF9mZCwgc2VsZi1cXHUwMDNlaW5vc1sxXSkpO1xcbitcXG4rXFx0QVNTRVJUX05FKC0xLCBzZW5kX2ZkcyhzZWxmLVxcdTAwM2Vza1tTS19TRU5ERVJdLCBzZWxmLVxcdTAwM2VmaWxlcywgTlJfRklMRVMpKTtcXG4rXFx0bnJfc2xvdHMgPSByZWN2X2ZkX3Nsb3RzKHNlbGYtXFx1MDAzZXNrW1NLX1JFQ0VJVkVSXSwgc2xvdHMsIFxcdTAwMjZmbGFncyk7XFxuK1xcbitcXHRBU1NFUlRfRVEoMSwgbnJfc2xvdHMpO1xcbitcXHRFWFBFQ1RfTkUoMCwgZmxhZ3MgXFx1MDAyNiBNU0dfQ1RSVU5DKTtcXG4rXFxuK1xcdEFTU0VSVF9HRShzbG90c1swXSwgMCk7XFxuK1xcdEVYUEVDVF9FUSgwLCBjaGVja19zZWNyZXQoc2xvdHNbMF0sIDApKTtcXG4rXFx0Y2xvc2Uoc2xvdHNbMF0pO1xcbit9XFxuK1xcbitURVNUX0hBUk5FU1NfTUFJTlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMDowOToyNS4wNjQ4MjY3NjhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4MTYwOTM1MzQ4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVTklYXCIsXG4gICAgXCJDT01QQVRcIixcbiAgICBcIlNFQ1VSSVRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidW5peF9zZXRzb2Nrb3B0XCIsXG4gICAgXCJzY21fcmVjdl9vbmVfZmRcIixcbiAgICBcInNjbV9kZXRhY2hfZmRzXCIsXG4gICAgXCJzY21fZGV0YWNoX2Zkc19jb21wYXRcIixcbiAgICBcInNjbV9yZWN2X3VuaXhcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHNvY2tldCBvcHRpb24gU09fUklHSFRTX05PVFJVTkMgZm9yIEFGX1VOSVggc29ja2V0cy4gVGhpcyBvcHRpb24gbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIFNDTV9SSUdIVFMgd2hlbiBhIGZpbGUgZGVzY3JpcHRvciByZWNlaXZlIGlzIGRlbmllZCBieSBhIHNlY3VyaXR5IG1vZHVsZSAoTFNNKS4gSW5zdGVhZCBvZiB0cnVuY2F0aW5nIHRoZSBmaWxlIGRlc2NyaXB0b3IgYXJyYXkgYW5kIHNldHRpbmcgTVNHX0NUUlVOQywgaXQgcGxhY2VzIHRoZSBlcnJvciBjb2RlIGluIHRoZSB1c2VyJ3MgZmlsZSBkZXNjcmlwdG9yIGFycmF5LiBUaGlzIGludm9sdmVzIGNoYW5nZXMgdG8gY29yZSBBRl9VTklYIHNvY2tldCBvcHRpb24gcGFyc2luZyAodW5peF9zZXRzb2Nrb3B0KSwgc29ja2V0IGNvbm5lY3Rpb24gc3RhdGUgcHJvcGFnYXRpb24sIGFuZCB0aGUgU0NNIG1lc3NhZ2UgcmVjZWl2aW5nIGxvZ2ljIChzY21fcmVjdl9vbmVfZmQsIHNjbV9kZXRhY2hfZmRzLCBzY21fZGV0YWNoX2Zkc19jb21wYXQsIHNjbV9yZWN2X3VuaXgpLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgZXJyb3IgaGFuZGxpbmcgYW5kIGFycmF5IG1hbmlwdWxhdGlvbiBsb2dpYyBkb2VzIG5vdCBpbnRyb2R1Y2UgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgb3IgbGVha3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGU1Y2RiNGE5MzZlMWE3ZDY4ZjczNjFmZjc3NWQ5NjE0MTY0NzdhMzVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyIDIwOjA5OjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oXG5pbmRleCA1ZWY1N2Y4OGRmNmIzLi45NDZhNWZhZDI2OTEyIDEwMDY0NFxuLS0tIGEvYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oXG4rKysgYi9hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmhcbkBAIC0xNTUsNiArMTU1LDggQEBcbiAjZGVmaW5lIFNPX0lOUVx0XHRcdDg0XG4gI2RlZmluZSBTQ01fSU5RXHRcdFx0U09fSU5RXG4gXG4rI2RlZmluZSBTT19SSUdIVFNfTk9UUlVOQyAgICAgIDg1XG4rXG4gI2lmICFkZWZpbmVkKF9fS0VSTkVMX18pXG4gXG4gI2lmIF9fQklUU19QRVJfTE9ORyA9PSA2NFxuZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmhcbmluZGV4IDcyZmIxYjAwNmRhOTMuLmYxNjQxZGRlMTM1ZmMgMTAwNjQ0XG4tLS0gYS9hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaFxuKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmhcbkBAIC0xNjYsNiArMTY2LDggQEBcbiAjZGVmaW5lIFNPX0lOUVx0XHRcdDg0XG4gI2RlZmluZSBTQ01fSU5RXHRcdFx0U09fSU5RXG4gXG4rI2RlZmluZSBTT19SSUdIVFNfTk9UUlVOQyAgICAgIDg1XG4rXG4gI2lmICFkZWZpbmVkKF9fS0VSTkVMX18pXG4gXG4gI2lmIF9fQklUU19QRVJfTE9ORyA9PSA2NFxuZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oXG5pbmRleCBjMTZlYzM2ZGZlZTZiLi5mM2EzODE1YzdkYzI5IDEwMDY0NFxuLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaFxuKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaFxuQEAgLTE0Nyw2ICsxNDcsOCBAQFxuICNkZWZpbmUgU09fSU5RXHRcdFx0MHg0MDUyXG4gI2RlZmluZSBTQ01fSU5RXHRcdFx0U09fSU5RXG4gXG4rI2RlZmluZSBTT19SSUdIVFNfTk9UUlVOQ1x0MHg0MDUzXG4rXG4gI2lmICFkZWZpbmVkKF9fS0VSTkVMX18pXG4gXG4gI2lmIF9fQklUU19QRVJfTE9ORyA9PSA2NFxuZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaFxuaW5kZXggNzFiZWZhMTA5ZTFjZi4uNzkwN2YzYjFmMGVlMCAxMDA2NDRcbi0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaFxuKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oXG5AQCAtMTQ4LDYgKzE0OCw4IEBAXG4gI2RlZmluZSBTT19JTlEgICAgICAgICAgICAgICAgICAgMHgwMDVkXG4gI2RlZmluZSBTQ01fSU5RICAgICAgICAgICAgICAgICAgU09fSU5RXG4gXG4rI2RlZmluZSBTT19SSUdIVFNfTk9UUlVOQyAgICAgICAgMHgwMDVlXG4rXG4gI2lmICFkZWZpbmVkKF9fS0VSTkVMX18pXG4gXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYWZfdW5peC5oIGIvaW5jbHVkZS9uZXQvYWZfdW5peC5oXG5pbmRleCAzNGY1M2RkZTY1Y2VhLi5iYjFiM2RlZTAyZTgyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvYWZfdW5peC5oXG4rKysgYi9pbmNsdWRlL25ldC9hZl91bml4LmhcbkBAIC00OSw2ICs0OSw3IEBAIHN0cnVjdCB1bml4X3NvY2sge1xuIFx0c3RydWN0IHNjbV9zdGF0XHRcdHNjbV9zdGF0O1xuIFx0aW50XHRcdFx0aW5xX2xlbjtcbiBcdGJvb2xcdFx0XHRyZWN2bXNnX2lucTtcbitcdGJvb2xcdFx0XHRzY21fcmlnaHRzX25vdHJ1bmM7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0FGX1VOSVhfT09CKVxuIFx0c3RydWN0IHNrX2J1ZmZcdFx0Km9vYl9za2I7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2NtLmggYi9pbmNsdWRlL25ldC9zY20uaFxuaW5kZXggYzUyNTE5NjY5MzQ5Zi4uODZhZTZiYzEwOWVjNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3NjbS5oXG4rKysgYi9pbmNsdWRlL25ldC9zY20uaFxuQEAgLTUwLDggKzUwLDggQEAgc3RydWN0IHNjbV9jb29raWUge1xuICNlbmRpZlxuIH07XG4gXG4tdm9pZCBzY21fZGV0YWNoX2ZkcyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20pO1xuLXZvaWQgc2NtX2RldGFjaF9mZHNfY29tcGF0KHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNjbV9jb29raWUgKnNjbSk7XG4rdm9pZCBzY21fZGV0YWNoX2ZkcyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20sIGJvb2wgbm90cnVuYyk7XG4rdm9pZCBzY21fZGV0YWNoX2Zkc19jb21wYXQoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2NtLCBib29sIG5vdHJ1bmMpO1xuIGludCBfX3NjbV9zZW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNjbV9jb29raWUgKnNjbSk7XG4gdm9pZCBfX3NjbV9kZXN0cm95KHN0cnVjdCBzY21fY29va2llICpzY20pO1xuIHN0cnVjdCBzY21fZnBfbGlzdCAqc2NtX2ZwX2R1cChzdHJ1Y3Qgc2NtX2ZwX2xpc3QgKmZwbCk7XG5AQCAtMTA3LDEzICsxMDcsOCBAQCB2b2lkIHNjbV9yZWN2KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbiB2b2lkIHNjbV9yZWN2X3VuaXgoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuIFx0XHQgICBzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2NtLCBpbnQgZmxhZ3MpO1xuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNjbV9yZWN2X29uZV9mZChzdHJ1Y3QgZmlsZSAqZiwgaW50IF9fdXNlciAqdWZkLFxuLVx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4te1xuLVx0aWYgKCF1ZmQpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuLVx0cmV0dXJuIHJlY2VpdmVfZmQoZiwgdWZkLCBmbGFncyk7XG4tfVxuK2ludCBzY21fcmVjdl9vbmVfZmQoc3RydWN0IGZpbGUgKmYsIGludCBfX3VzZXIgKnVmZCwgdW5zaWduZWQgaW50IGZsYWdzLFxuK1x0XHQgICAgYm9vbCBub3RydW5jKTtcbiBcbiAjZW5kaWYgLyogX19MSU5VWF9ORVRfU0NNX0ggKi9cbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvc29ja2V0LmggYi9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvc29ja2V0LmhcbmluZGV4IDUzYjVhOGMwMDJiMWUuLjg0ZWE3YjkyOTM2ZTIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvc29ja2V0LmhcbisrKyBiL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaFxuQEAgLTE1MCw2ICsxNTAsOCBAQFxuICNkZWZpbmUgU09fSU5RXHRcdFx0ODRcbiAjZGVmaW5lIFNDTV9JTlFcdFx0XHRTT19JTlFcbiBcbisjZGVmaW5lIFNPX1JJR0hUU19OT1RSVU5DXHQ4NVxuK1xuICNpZiAhZGVmaW5lZChfX0tFUk5FTF9fKVxuIFxuICNpZiBfX0JJVFNfUEVSX0xPTkcgPT0gNjQgfHwgKGRlZmluZWQoX194ODZfNjRfXykgXHUwMDI2XHUwMDI2IGRlZmluZWQoX19JTFAzMl9fKSlcbmRpZmYgLS1naXQgYS9uZXQvY29tcGF0LmMgYi9uZXQvY29tcGF0LmNcbmluZGV4IGQ2OGNmOWMzYWFkNWYuLjZiZGY0YTJjOTA3N2QgMTAwNjQ0XG4tLS0gYS9uZXQvY29tcGF0LmNcbisrKyBiL25ldC9jb21wYXQuY1xuQEAgLTI4Niw3ICsyODYsNyBAQCBzdGF0aWMgaW50IHNjbV9tYXhfZmRzX2NvbXBhdChzdHJ1Y3QgbXNnaGRyICptc2cpXG4gXHRyZXR1cm4gKG1zZy1cdTAwM2Vtc2dfY29udHJvbGxlbiAtIHNpemVvZihzdHJ1Y3QgY29tcGF0X2Ntc2doZHIpKSAvIHNpemVvZihpbnQpO1xuIH1cbiBcbi12b2lkIHNjbV9kZXRhY2hfZmRzX2NvbXBhdChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20pXG4rdm9pZCBzY21fZGV0YWNoX2Zkc19jb21wYXQoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2NtLCBib29sIG5vdHJ1bmMpXG4ge1xuIFx0c3RydWN0IGNvbXBhdF9jbXNnaGRyIF9fdXNlciAqY20gPVxuIFx0XHQoc3RydWN0IGNvbXBhdF9jbXNnaGRyIF9fdXNlciAqKW1zZy1cdTAwM2Vtc2dfY29udHJvbF91c2VyO1xuQEAgLTI5Niw3ICsyOTYsNyBAQCB2b2lkIHNjbV9kZXRhY2hfZmRzX2NvbXBhdChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20pXG4gXHRpbnQgZXJyID0gMCwgaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGZkbWF4OyBpKyspIHtcbi1cdFx0ZXJyID0gc2NtX3JlY3Zfb25lX2ZkKHNjbS1cdTAwM2VmcC1cdTAwM2VmcFtpXSwgY21zZ19kYXRhICsgaSwgb19mbGFncyk7XG4rXHRcdGVyciA9IHNjbV9yZWN2X29uZV9mZChzY20tXHUwMDNlZnAtXHUwMDNlZnBbaV0sIGNtc2dfZGF0YSArIGksIG9fZmxhZ3MsIG5vdHJ1bmMpO1xuIFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRcdGJyZWFrO1xuIFx0fVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NjbS5jIGIvbmV0L2NvcmUvc2NtLmNcbmluZGV4IGVlYzEzZjUwZWNhZjYuLmYwZDQ0ZWNkYjExZmMgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9zY20uY1xuKysrIGIvbmV0L2NvcmUvc2NtLmNcbkBAIC0zNTEsNyArMzUxLDMxIEBAIHN0YXRpYyBpbnQgc2NtX21heF9mZHMoc3RydWN0IG1zZ2hkciAqbXNnKVxuIFx0cmV0dXJuIChtc2ctXHUwMDNlbXNnX2NvbnRyb2xsZW4gLSBzaXplb2Yoc3RydWN0IGNtc2doZHIpKSAvIHNpemVvZihpbnQpO1xuIH1cbiBcbi12b2lkIHNjbV9kZXRhY2hfZmRzKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNjbV9jb29raWUgKnNjbSlcbitpbnQgc2NtX3JlY3Zfb25lX2ZkKHN0cnVjdCBmaWxlICpmLCBpbnQgX191c2VyICp1ZmQsIHVuc2lnbmVkIGludCBmbGFncyxcbitcdFx0ICAgIGJvb2wgbm90cnVuYylcbit7XG4rXHRpbnQgZXJyb3I7XG4rXG4rXHRpZiAoIXVmZClcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXG4rXHRlcnJvciA9IHNlY3VyaXR5X2ZpbGVfcmVjZWl2ZShmKTtcbitcdGlmIChlcnJvcilcbitcdFx0cmV0dXJuIG5vdHJ1bmMgPyBwdXRfdXNlcihlcnJvciwgdWZkKSA6IGVycm9yO1xuK1xuK1x0RkRfUFJFUEFSRShmZGYsIGZsYWdzLCBnZXRfZmlsZShmKSk7XG4rXHRpZiAoZmRmLmVycilcbitcdFx0cmV0dXJuIGZkZi5lcnI7XG4rXG4rXHRlcnJvciA9IHB1dF91c2VyKGZkX3ByZXBhcmVfZmQoZmRmKSwgdWZkKTtcbitcdGlmIChlcnJvcilcbitcdFx0cmV0dXJuIGVycm9yO1xuK1xuK1x0X19yZWNlaXZlX3NvY2soZmRfcHJlcGFyZV9maWxlKGZkZikpO1xuK1x0cmV0dXJuIGZkX3B1Ymxpc2goZmRmKTtcbit9XG4rXG4rdm9pZCBzY21fZGV0YWNoX2ZkcyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20sIGJvb2wgbm90cnVuYylcbiB7XG4gXHRzdHJ1Y3QgY21zZ2hkciBfX3VzZXIgKmNtID1cbiBcdFx0KF9fZm9yY2Ugc3RydWN0IGNtc2doZHIgX191c2VyICopbXNnLVx1MDAzZW1zZ19jb250cm9sX3VzZXI7XG5AQCAtMzY1LDEyICszODksMTIgQEAgdm9pZCBzY21fZGV0YWNoX2ZkcyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20pXG4gXHRcdHJldHVybjtcbiBcbiBcdGlmIChtc2ctXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNiBNU0dfQ01TR19DT01QQVQpIHtcbi1cdFx0c2NtX2RldGFjaF9mZHNfY29tcGF0KG1zZywgc2NtKTtcbitcdFx0c2NtX2RldGFjaF9mZHNfY29tcGF0KG1zZywgc2NtLCBub3RydW5jKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZmRtYXg7IGkrKykge1xuLVx0XHRlcnIgPSBzY21fcmVjdl9vbmVfZmQoc2NtLVx1MDAzZWZwLVx1MDAzZWZwW2ldLCBjbXNnX2RhdGEgKyBpLCBvX2ZsYWdzKTtcbitcdFx0ZXJyID0gc2NtX3JlY3Zfb25lX2ZkKHNjbS1cdTAwM2VmcC1cdTAwM2VmcFtpXSwgY21zZ19kYXRhICsgaSwgb19mbGFncywgbm90cnVuYyk7XG4gXHRcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG5AQCAtNTIzLDkgKzU0Nyw2IEBAIHN0YXRpYyBib29sIF9fc2NtX3JlY3ZfY29tbW9uKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuIFxuIFx0c2NtX3Bhc3NlYyhzaywgbXNnLCBzY20pO1xuIFxuLVx0aWYgKHNjbS1cdTAwM2VmcClcbi1cdFx0c2NtX2RldGFjaF9mZHMobXNnLCBzY20pO1xuLVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuQEAgLTU0NSw2ICs1NjYsMTMgQEAgdm9pZCBzY21fcmVjdl91bml4KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbiBcdGlmICghX19zY21fcmVjdl9jb21tb24oc29jay1cdTAwM2VzaywgbXNnLCBzY20sIGZsYWdzKSlcbiBcdFx0cmV0dXJuO1xuIFxuK1x0aWYgKHNjbS1cdTAwM2VmcCkge1xuK1x0XHRzdHJ1Y3QgdW5peF9zb2NrICp1O1xuK1xuK1x0XHR1ID0gdW5peF9zayhzb2NrLVx1MDAzZXNrKTtcbitcdFx0c2NtX2RldGFjaF9mZHMobXNnLCBzY20sIFJFQURfT05DRSh1LVx1MDAzZXNjbV9yaWdodHNfbm90cnVuYykpO1xuK1x0fVxuK1xuIFx0aWYgKHNvY2stXHUwMDNlc2stXHUwMDNlc2tfc2NtX3BpZGZkKVxuIFx0XHRzY21fcGlkZmRfcmVjdihtc2csIHNjbSk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3VuaXgvYWZfdW5peC5jIGIvbmV0L3VuaXgvYWZfdW5peC5jXG5pbmRleCAxMGVkOTQyMWU0M2FhLi4wM2NlMjNhNGViZWUxIDEwMDY0NFxuLS0tIGEvbmV0L3VuaXgvYWZfdW5peC5jXG4rKysgYi9uZXQvdW5peC9hZl91bml4LmNcbkBAIC05MjIsNiArOTIyLDcgQEAgc3RhdGljIGJvb2wgdW5peF9jdXN0b21fc29ja29wdChpbnQgb3B0bmFtZSlcbiB7XG4gXHRzd2l0Y2ggKG9wdG5hbWUpIHtcbiBcdGNhc2UgU09fSU5ROlxuK1x0Y2FzZSBTT19SSUdIVFNfTk9UUlVOQzpcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gZmFsc2U7XG5AQCAtOTUwLDEzICs5NTEsMjEgQEAgc3RhdGljIGludCB1bml4X3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcdHN3aXRjaCAob3B0bmFtZSkge1xuIFx0Y2FzZSBTT19JTlE6XG4gXHRcdGlmIChzay1cdTAwM2Vza190eXBlICE9IFNPQ0tfU1RSRUFNKVxuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdHJldHVybiAtRU5PUFJPVE9PUFQ7XG4gXG4gXHRcdGlmICh2YWwgXHUwMDNlIDEgfHwgdmFsIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0XHRXUklURV9PTkNFKHUtXHUwMDNlcmVjdm1zZ19pbnEsIHZhbCk7XG4gXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSBTT19SSUdIVFNfTk9UUlVOQzpcbitcdFx0aWYgKHZhbCBcdTAwM2UgMSB8fCB2YWwgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdFdSSVRFX09OQ0UodS1cdTAwM2VzY21fcmlnaHRzX25vdHJ1bmMsIHZhbCk7XG4rXHRcdGJyZWFrO1xuK1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FTk9QUk9UT09QVDtcbiBcdH1cbkBAIC0xMDA2LDYgKzEwMTUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB1bml4X2RncmFtX29wcyA9IHtcbiAjZW5kaWZcbiBcdC5saXN0ZW4gPVx0c29ja19ub19saXN0ZW4sXG4gXHQuc2h1dGRvd24gPVx0dW5peF9zaHV0ZG93bixcbitcdC5zZXRzb2Nrb3B0ID1cdHVuaXhfc2V0c29ja29wdCxcbiBcdC5zZW5kbXNnID1cdHVuaXhfZGdyYW1fc2VuZG1zZyxcbiBcdC5yZWFkX3NrYiA9XHR1bml4X3JlYWRfc2tiLFxuIFx0LnJlY3Ztc2cgPVx0dW5peF9kZ3JhbV9yZWN2bXNnLFxuQEAgLTEwMzAsNiArMTA0MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHVuaXhfc2VxcGFja2V0X29wcyA9IHtcbiAjZW5kaWZcbiBcdC5saXN0ZW4gPVx0dW5peF9saXN0ZW4sXG4gXHQuc2h1dGRvd24gPVx0dW5peF9zaHV0ZG93bixcbitcdC5zZXRzb2Nrb3B0ID1cdHVuaXhfc2V0c29ja29wdCxcbiBcdC5zZW5kbXNnID1cdHVuaXhfc2VxcGFja2V0X3NlbmRtc2csXG4gXHQucmVjdm1zZyA9XHR1bml4X3NlcXBhY2tldF9yZWN2bXNnLFxuIFx0Lm1tYXAgPVx0XHRzb2NrX25vX21tYXAsXG5AQCAtMTE0Myw5ICsxMTU0LDEwIEBAIHN0YXRpYyBpbnQgdW5peF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG4gXHRpZiAocHJvdG9jb2wgXHUwMDI2XHUwMDI2IHByb3RvY29sICE9IFBGX1VOSVgpXG4gXHRcdHJldHVybiAtRVBST1RPTk9TVVBQT1JUO1xuIFxuK1x0c2V0X2JpdChTT0NLX0NVU1RPTV9TT0NLT1BULCBcdTAwMjZzb2NrLVx1MDAzZWZsYWdzKTtcbitcbiBcdHN3aXRjaCAoc29jay1cdTAwM2V0eXBlKSB7XG4gXHRjYXNlIFNPQ0tfU1RSRUFNOlxuLVx0XHRzZXRfYml0KFNPQ0tfQ1VTVE9NX1NPQ0tPUFQsIFx1MDAyNnNvY2stXHUwMDNlZmxhZ3MpO1xuIFx0XHRzb2NrLVx1MDAzZW9wcyA9IFx1MDAyNnVuaXhfc3RyZWFtX29wcztcbiBcdFx0YnJlYWs7XG4gXHRcdC8qXG5AQCAtMTc0Myw5ICsxNzU1LDEwIEBAIHN0YXRpYyBpbnQgdW5peF9zdHJlYW1fY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkXG4gXHRpbml0X3BlZXJjcmVkKG5ld3NrLCBcdTAwMjZwZWVyY3JlZCk7XG4gXG4gXHRuZXd1ID0gdW5peF9zayhuZXdzayk7XG4rXHRvdGhlcnUgPSB1bml4X3NrKG90aGVyKTtcbiBcdG5ld3UtXHUwMDNlbGlzdGVuZXIgPSBvdGhlcjtcbitcdG5ld3UtXHUwMDNlc2NtX3JpZ2h0c19ub3RydW5jID0gb3RoZXJ1LVx1MDAzZXNjbV9yaWdodHNfbm90cnVuYztcbiBcdFJDVV9JTklUX1BPSU5URVIobmV3c2stXHUwMDNlc2tfd3EsIFx1MDAyNm5ld3UtXHUwMDNlcGVlcl93cSk7XG4tXHRvdGhlcnUgPSB1bml4X3NrKG90aGVyKTtcbiBcbiBcdC8qIGNvcHkgYWRkcmVzcyBpbmZvcm1hdGlvbiBmcm9tIGxpc3RlbmluZyB0byBuZXcgc29ja1xuIFx0ICpcbkBAIC0xODY1LDggKzE4NzgsNyBAQCBzdGF0aWMgaW50IHVuaXhfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXG4gXHRza2JfZnJlZV9kYXRhZ3JhbShzaywgc2tiKTtcbiBcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcdTAwMjZ1bml4X3NrKHNrKS1cdTAwM2VwZWVyX3dhaXQpO1xuIFxuLVx0aWYgKHRzay1cdTAwM2Vza190eXBlID09IFNPQ0tfU1RSRUFNKVxuLVx0XHRzZXRfYml0KFNPQ0tfQ1VTVE9NX1NPQ0tPUFQsIFx1MDAyNm5ld3NvY2stXHUwMDNlZmxhZ3MpO1xuK1x0c2V0X2JpdChTT0NLX0NVU1RPTV9TT0NLT1BULCBcdTAwMjZuZXdzb2NrLVx1MDAzZWZsYWdzKTtcbiBcbiBcdC8qIGF0dGFjaCBhY2NlcHRlZCBzb2NrIHRvIHNvY2tldCAqL1xuIFx0dW5peF9zdGF0ZV9sb2NrKHRzayk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4Ly5naXRpZ25vcmVcbmluZGV4IDk3MzE3NjY0NDEwMzYuLjk1NGYwOTU4ZGQwMzQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC8uZ2l0aWdub3JlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC8uZ2l0aWdub3JlXG5AQCAtMyw2ICszLDggQEAgbXNnX29vYlxuIHNjbV9pbnFcbiBzY21fcGlkZmRcbiBzY21fcmlnaHRzXG4rc2NtX3JpZ2h0c19kZW5pYWxfbHNtXG4rc2NtX3JpZ2h0c19kZW5pYWxfbHNtLmJwZi5vXG4gc29fcGVla19vZmZcbiB1bml4X2Nvbm5lY3RcbiB1bml4X2Nvbm5yZXNldFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvTWFrZWZpbGVcbmluZGV4IDU3ZDE1OTgwM2EzYWIuLmE2NmYxMGZiMGMyMzEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvTWFrZWZpbGVcbkBAIC0xMSwxMCArMTEsMTggQEAgVEVTVF9HRU5fUFJPR1MgOj0gXFxcbiBcdHNjbV9pbnEgXFxcbiBcdHNjbV9waWRmZCBcXFxuIFx0c2NtX3JpZ2h0cyBcXFxuK1x0c2NtX3JpZ2h0c19kZW5pYWxfbHNtIFxcXG4gXHRzb19wZWVrX29mZiBcXFxuIFx0dW5peF9jb25uZWN0IFxcXG4gXHR1bml4X2Nvbm5yZXNldCBcXFxuIFx0dW5peF9saXN0ZW4gXFxcbiAjIGVuZCBvZiBURVNUX0dFTl9QUk9HU1xuIFxuK1RFU1RfR0VOX0ZJTEVTIDo9IHNjbV9yaWdodHNfZGVuaWFsX2xzbS5icGYub1xuK1xuIGluY2x1ZGUgLi4vLi4vbGliLm1rXG4raW5jbHVkZSAuLi9icGYubWtcbitcbiskKE9VVFBVVCkvc2NtX3JpZ2h0c19kZW5pYWxfbHNtOiAkKEJQRk9CSilcbiskKE9VVFBVVCkvc2NtX3JpZ2h0c19kZW5pYWxfbHNtOiBDRkxBR1MgKz0gLUkkKFNDUkFUQ0hfRElSKS9pbmNsdWRlXG4rJChPVVRQVVQpL3NjbV9yaWdodHNfZGVuaWFsX2xzbTogTERMSUJTICs9IC1sZWxmIC1selxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L2NvbmZpZ1xuaW5kZXggNDFkYmIwM2M3NDdlYi4uNDY4ZjdhMGJiNjRlNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L2NvbmZpZ1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvY29uZmlnXG5AQCAtMiwzICsyLDEwIEBAIENPTkZJR19BRl9VTklYX09PQj15XG4gQ09ORklHX1VOSVg9eVxuIENPTkZJR19VTklYX0RJQUc9bVxuIENPTkZJR19VU0VSX05TPXlcbitDT05GSUdfQlBGPXlcbitDT05GSUdfQlBGX1NZU0NBTEw9eVxuK0NPTkZJR19CUEZfRVZFTlRTPXlcbitDT05GSUdfQlBGX0pJVD15XG4rQ09ORklHX1NFQ1VSSVRZPXlcbitDT05GSUdfQlBGX0xTTT15XG4rQ09ORklHX0RFQlVHX0lORk9fQlRGPXlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzX2RlbmlhbF9sc20uYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzX2RlbmlhbF9sc20uYnBmLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi40ZjI0MTQ0NjViZmQzXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzX2RlbmlhbF9sc20uYnBmLmNcbkBAIC0wLDAgKzEsMzYgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4rXG4rc3RydWN0IGlub2RlIHtcbitcdHVuc2lnbmVkIGxvbmcgaV9pbm87XG4rfSBfX2F0dHJpYnV0ZV9fKChwcmVzZXJ2ZV9hY2Nlc3NfaW5kZXgpKTtcbitcbitzdHJ1Y3QgZmlsZSB7XG4rXHRzdHJ1Y3QgaW5vZGUgKmZfaW5vZGU7XG4rfSBfX2F0dHJpYnV0ZV9fKChwcmVzZXJ2ZV9hY2Nlc3NfaW5kZXgpKTtcbitcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9IQVNIKTtcbitcdF9fdWludChtYXhfZW50cmllcywgMTYpO1xuK1x0X190eXBlKGtleSwgX191NjQpO1x0LyogaW5vZGUgbnVtYmVyICovXG4rXHRfX3R5cGUodmFsdWUsIF9fdTMyKTtcdC8qIHRnaWQgb2YgdGhlIHJlY2VpdmVyIGJlaW5nIHRlc3RlZCAqL1xuK30gZGVuaWVkX2lub2RlcyBTRUMoXCIubWFwc1wiKTtcbitcbitTRUMoXCJsc20vZmlsZV9yZWNlaXZlXCIpXG4raW50IEJQRl9QUk9HKHNjbV9yaWdodHNfZGVueSwgc3RydWN0IGZpbGUgKmZpbGUpXG4re1xuK1x0X191MzIgdGdpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFx1MDAzZVx1MDAzZSAzMjtcbitcdF9fdTY0IGlubyA9IGZpbGUtXHUwMDNlZl9pbm9kZS1cdTAwM2VpX2lubztcbitcdF9fdTMyICpvd25lcjtcbitcbitcdG93bmVyID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZkZW5pZWRfaW5vZGVzLCBcdTAwMjZpbm8pO1xuK1x0aWYgKG93bmVyIFx1MDAyNlx1MDAyNiAqb3duZXIgPT0gdGdpZClcbitcdFx0cmV0dXJuIC1FUEVSTTtcbitcbitcdHJldHVybiAwO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzX2RlbmlhbF9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHNfZGVuaWFsX2xzbS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOTQxYjdkZWNmNzk4MFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvc2NtX3JpZ2h0c19kZW5pYWxfbHNtLmNcbkBAIC0wLDAgKzEsMjg1IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjZGVmaW5lIF9HTlVfU09VUkNFXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3NvY2tldC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy90eXBlcy5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2xpYmJwZi5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJrc2VsZnRlc3RfaGFybmVzcy5oXCJcbitcbisjaWZuZGVmIFNPX1JJR0hUU19OT1RSVU5DXG4rI2RlZmluZSBTT19SSUdIVFNfTk9UUlVOQyA4NVxuKyNlbmRpZlxuK1xuKyNkZWZpbmUgTlJfRklMRVMgMlxuK1xuKy8qIFBlci1maWxlIGNvbnRlbnQsIHNvIGEgcmVjZWl2ZWQgZmQgY2FuIGJlIG1hdGNoZWQgdG8gdGhlIGZpbGUgc2VudCAqL1xuKyNkZWZpbmUgU0VDUkVUKG4pIFwic2VjcmV0ICVkXCIsIChuKVxuK1xuKy8qIEluZGljZXMgaW50byB0aGUgc29ja2V0cGFpciAqL1xuKyNkZWZpbmUgU0tfU0VOREVSIDBcbisjZGVmaW5lIFNLX1JFQ0VJVkVSIDFcbitcbitGSVhUVVJFKHNjbV9yaWdodHNfZGVuaWFsX2JwZilcbit7XG4rXHRzdHJ1Y3QgYnBmX29iamVjdCAqb2JqO1xuK1x0c3RydWN0IGJwZl9saW5rICpsaW5rO1xuK1x0aW50IG1hcF9mZDtcbitcdGludCBza1syXTtcbitcdGludCBmaWxlc1tOUl9GSUxFU107XG4rXHRfX3U2NCBpbm9zW05SX0ZJTEVTXTtcbitcdGNoYXIgcGF0aHNbTlJfRklMRVNdWzY0XTtcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVChzY21fcmlnaHRzX2RlbmlhbF9icGYpXG4re1xuK1x0aW50IHNvY2tfdHlwZTtcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoc2NtX3JpZ2h0c19kZW5pYWxfYnBmLCBzdHJlYW0pXG4re1xuK1x0LnNvY2tfdHlwZSA9IFNPQ0tfU1RSRUFNLFxuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERChzY21fcmlnaHRzX2RlbmlhbF9icGYsIGRncmFtKVxuK3tcbitcdC5zb2NrX3R5cGUgPSBTT0NLX0RHUkFNLFxuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERChzY21fcmlnaHRzX2RlbmlhbF9icGYsIHNlcXBhY2tldClcbit7XG4rXHQuc29ja190eXBlID0gU09DS19TRVFQQUNLRVQsXG4rfTtcbitcbitGSVhUVVJFX1NFVFVQKHNjbV9yaWdodHNfZGVuaWFsX2JwZilcbit7XG4rXHRzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2c7XG4rXHRjaGFyIGxzbXNbMjU2XSA9IHt9O1xuK1x0aW50IGksIGZkO1xuK1xuK1x0aWYgKGdldGV1aWQoKSAhPSAwKVxuK1x0XHRTS0lQKHJldHVybiwgXCJyZXF1aXJlcyByb290XCIpO1xuK1xuK1x0ZmQgPSBvcGVuKFwiL3N5cy9rZXJuZWwvc2VjdXJpdHkvbHNtXCIsIE9fUkRPTkxZKTtcbitcdEFTU0VSVF9HRShmZCwgMCk7XG4rXHRBU1NFUlRfTFQoMCwgcmVhZChmZCwgbHNtcywgc2l6ZW9mKGxzbXMpIC0gMSkpO1xuK1x0Y2xvc2UoZmQpO1xuK1xuK1x0aWYgKCFzdHJzdHIobHNtcywgXCJicGZcIikpXG4rXHRcdFNLSVAocmV0dXJuLCBcIkJQRiBMU00gbm90IGFjdGl2ZSAoYm9vdCB3aXRoIGxzbT0uLi4sYnBmKVwiKTtcbitcbitcdHNlbGYtXHUwMDNlb2JqID0gYnBmX29iamVjdF9fb3Blbl9maWxlKFwic2NtX3JpZ2h0c19kZW5pYWxfbHNtLmJwZi5vXCIsIE5VTEwpO1xuK1x0QVNTRVJUX05FKE5VTEwsIHNlbGYtXHUwMDNlb2JqKTtcbitcdEFTU0VSVF9FUSgwLCBicGZfb2JqZWN0X19sb2FkKHNlbGYtXHUwMDNlb2JqKSk7XG4rXG4rXHRwcm9nID0gYnBmX29iamVjdF9fZmluZF9wcm9ncmFtX2J5X25hbWUoc2VsZi1cdTAwM2VvYmosIFwic2NtX3JpZ2h0c19kZW55XCIpO1xuK1x0QVNTRVJUX05FKE5VTEwsIHByb2cpO1xuK1xuK1x0c2VsZi1cdTAwM2VsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9sc20ocHJvZyk7XG4rXHRBU1NFUlRfTkUoTlVMTCwgc2VsZi1cdTAwM2VsaW5rKTtcbitcbitcdHNlbGYtXHUwMDNlbWFwX2ZkID0gYnBmX29iamVjdF9fZmluZF9tYXBfZmRfYnlfbmFtZShzZWxmLVx1MDAzZW9iaixcbitcdFx0XHRcdFx0XHQgICAgICAgXCJkZW5pZWRfaW5vZGVzXCIpO1xuK1x0QVNTRVJUX0dFKHNlbGYtXHUwMDNlbWFwX2ZkLCAwKTtcbitcbitcdEFTU0VSVF9FUSgwLCBzb2NrZXRwYWlyKEFGX1VOSVgsIHZhcmlhbnQtXHUwMDNlc29ja190eXBlLCAwLCBzZWxmLVx1MDAzZXNrKSk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9GSUxFUzsgaSsrKSB7XG4rXHRcdHN0cnVjdCBzdGF0IHN0O1xuK1xuK1x0XHRzbnByaW50ZihzZWxmLVx1MDAzZXBhdGhzW2ldLCBzaXplb2Yoc2VsZi1cdTAwM2VwYXRoc1tpXSksXG4rXHRcdFx0IFwiL3RtcC9zY21fcmlnaHRzX2RlbmlhbF9icGYuJWQuWFhYWFhYXCIsIGkpO1xuK1x0XHRzZWxmLVx1MDAzZWZpbGVzW2ldID0gbWtzdGVtcChzZWxmLVx1MDAzZXBhdGhzW2ldKTtcbitcdFx0QVNTRVJUX0dFKHNlbGYtXHUwMDNlZmlsZXNbaV0sIDApO1xuK1xuK1x0XHRBU1NFUlRfTFQoMCwgZHByaW50ZihzZWxmLVx1MDAzZWZpbGVzW2ldLCBTRUNSRVQoaSkpKTtcbitcbitcdFx0QVNTRVJUX0VRKDAsIGZzdGF0KHNlbGYtXHUwMDNlZmlsZXNbaV0sIFx1MDAyNnN0KSk7XG4rXHRcdHNlbGYtXHUwMDNlaW5vc1tpXSA9IHN0LnN0X2lubztcbitcdH1cbit9XG4rXG4rRklYVFVSRV9URUFSRE9XTihzY21fcmlnaHRzX2RlbmlhbF9icGYpXG4re1xuK1x0YnBmX2xpbmtfX2Rlc3Ryb3koc2VsZi1cdTAwM2VsaW5rKTtcbitcdGJwZl9vYmplY3RfX2Nsb3NlKHNlbGYtXHUwMDNlb2JqKTtcbitcbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBOUl9GSUxFUzsgaSsrKSB7XG4rXHRcdGlmIChzZWxmLVx1MDAzZWZpbGVzW2ldIFx1MDAzZT0gMCkge1xuK1x0XHRcdGNsb3NlKHNlbGYtXHUwMDNlZmlsZXNbaV0pO1xuK1x0XHRcdHVubGluayhzZWxmLVx1MDAzZXBhdGhzW2ldKTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0Y2xvc2Uoc2VsZi1cdTAwM2Vza1tTS19TRU5ERVJdKTtcbitcdGNsb3NlKHNlbGYtXHUwMDNlc2tbU0tfUkVDRUlWRVJdKTtcbit9XG4rXG4rc3RhdGljIGludCBkZW55X2lub2RlKGludCBtYXBfZmQsIF9fdTY0IGlubylcbit7XG4rXHRfX3UzMiB0Z2lkID0gZ2V0cGlkKCk7XG4rXG4rXHRyZXR1cm4gYnBmX21hcF91cGRhdGVfZWxlbShtYXBfZmQsIFx1MDAyNmlubywgXHUwMDI2dGdpZCwgQlBGX0FOWSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgc2V0X25vdHJ1bmMoaW50IHNrKVxuK3tcbitcdGludCBvbmUgPSAxO1xuK1xuK1x0cmV0dXJuIHNldHNvY2tvcHQoc2ssIFNPTF9TT0NLRVQsIFNPX1JJR0hUU19OT1RSVU5DLFxuK1x0XHRcdCAgXHUwMDI2b25lLCBzaXplb2Yob25lKSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgc2VuZF9mZHMoaW50IHNrLCBpbnQgKmZkcywgaW50IG4pXG4re1xuK1x0Y2hhciBjdHJsW0NNU0dfU1BBQ0UoTlJfRklMRVMgKiBzaXplb2YoaW50KSldID0ge307XG4rXHRjaGFyIGRhdGEgPSAneCc7XG4rXHRzdHJ1Y3QgaW92ZWMgaW92ID0ge1xuK1x0XHQuaW92X2Jhc2UgPSBcdTAwMjZkYXRhLFxuK1x0XHQuaW92X2xlbiA9IHNpemVvZihkYXRhKSxcbitcdH07XG4rXHRzdHJ1Y3QgbXNnaGRyIG1zZyA9IHtcbitcdFx0Lm1zZ19pb3YgPSBcdTAwMjZpb3YsXG4rXHRcdC5tc2dfaW92bGVuID0gMSxcbitcdFx0Lm1zZ19jb250cm9sID0gY3RybCxcbitcdFx0Lm1zZ19jb250cm9sbGVuID0gQ01TR19TUEFDRShuICogc2l6ZW9mKGludCkpLFxuK1x0fTtcbitcdHN0cnVjdCBjbXNnaGRyICpjbXNnID0gQ01TR19GSVJTVEhEUihcdTAwMjZtc2cpO1xuK1xuK1x0Y21zZy1cdTAwM2VjbXNnX2xldmVsID0gU09MX1NPQ0tFVDtcbitcdGNtc2ctXHUwMDNlY21zZ190eXBlID0gU0NNX1JJR0hUUztcbitcdGNtc2ctXHUwMDNlY21zZ19sZW4gPSBDTVNHX0xFTihuICogc2l6ZW9mKGludCkpO1xuK1x0bWVtY3B5KENNU0dfREFUQShjbXNnKSwgZmRzLCBuICogc2l6ZW9mKGludCkpO1xuK1xuK1x0cmV0dXJuIHNlbmRtc2coc2ssIFx1MDAyNm1zZywgMCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmVjdl9mZF9zbG90cyhpbnQgc2ssIGludCAqc2xvdHMsIGludCAqbXNnX2ZsYWdzKVxuK3tcbitcdGludCBucl9zbG90cztcbitcdGNoYXIgY3RybFtDTVNHX1NQQUNFKE5SX0ZJTEVTICogc2l6ZW9mKGludCkpXTtcbitcdGNoYXIgZGF0YTtcbitcdHN0cnVjdCBpb3ZlYyBpb3YgPSB7XG4rXHRcdC5pb3ZfYmFzZSA9IFx1MDAyNmRhdGEsXG4rXHRcdC5pb3ZfbGVuID0gc2l6ZW9mKGRhdGEpLFxuK1x0fTtcbitcdHN0cnVjdCBtc2doZHIgbXNnID0ge1xuK1x0XHQubXNnX2lvdiA9IFx1MDAyNmlvdixcbitcdFx0Lm1zZ19pb3ZsZW4gPSAxLFxuK1x0XHQubXNnX2NvbnRyb2wgPSBjdHJsLFxuK1x0XHQubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY3RybCksXG4rXHR9O1xuK1x0c3RydWN0IGNtc2doZHIgKmNtc2c7XG4rXG4rXHRpZiAocmVjdm1zZyhzaywgXHUwMDI2bXNnLCAwKSBcdTAwM2MgMClcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0Km1zZ19mbGFncyA9IG1zZy5tc2dfZmxhZ3M7XG4rXG4rXHRjbXNnID0gQ01TR19GSVJTVEhEUihcdTAwMjZtc2cpO1xuK1x0aWYgKCFjbXNnKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdG5yX3Nsb3RzID0gKGNtc2ctXHUwMDNlY21zZ19sZW4gLSBDTVNHX0xFTigwKSkgLyBzaXplb2YoaW50KTtcbitcdG1lbWNweShzbG90cywgQ01TR19EQVRBKGNtc2cpLCBucl9zbG90cyAqIHNpemVvZihpbnQpKTtcbitcbitcdHJldHVybiBucl9zbG90cztcbit9XG4rXG4rLyogUHJvdmUgYSByZWNlaXZlZCBmZCB3b3JrcyBieSByZWFkaW5nIGJhY2sgdGhlIGZpbGUncyBjb250ZW50LiAqL1xuK3N0YXRpYyBpbnQgY2hlY2tfc2VjcmV0KGludCBmZCwgaW50IGlkeClcbit7XG4rXHRjaGFyIHdhbnRbMzJdLCBnb3RbMzJdID0ge307XG4rXG4rXHRzbnByaW50Zih3YW50LCBzaXplb2Yod2FudCksIFNFQ1JFVChpZHgpKTtcbitcdGlmIChwcmVhZChmZCwgZ290LCBzaXplb2YoZ290KSAtIDEsIDApIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRyZXR1cm4gc3RyY21wKHdhbnQsIGdvdCk7XG4rfVxuK1xuK1RFU1RfRihzY21fcmlnaHRzX2RlbmlhbF9icGYsIGFsbF9hbGxvd2VkKVxuK3tcbitcdGludCBzbG90c1tOUl9GSUxFU10sIG5yX3Nsb3RzLCBmbGFncywgaTtcbitcbitcdEFTU0VSVF9FUSgwLCBzZXRfbm90cnVuYyhzZWxmLVx1MDAzZXNrW1NLX1JFQ0VJVkVSXSkpO1xuK1x0QVNTRVJUX05FKC0xLCBzZW5kX2ZkcyhzZWxmLVx1MDAzZXNrW1NLX1NFTkRFUl0sIHNlbGYtXHUwMDNlZmlsZXMsIE5SX0ZJTEVTKSk7XG4rXHRucl9zbG90cyA9IHJlY3ZfZmRfc2xvdHMoc2VsZi1cdTAwM2Vza1tTS19SRUNFSVZFUl0sIHNsb3RzLCBcdTAwMjZmbGFncyk7XG4rXG4rXHRBU1NFUlRfRVEoTlJfRklMRVMsIG5yX3Nsb3RzKTtcbitcdEVYUEVDVF9FUSgwLCBmbGFncyBcdTAwMjYgTVNHX0NUUlVOQyk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9GSUxFUzsgaSsrKSB7XG4rXHRcdEFTU0VSVF9HRShzbG90c1tpXSwgMCk7XG4rXHRcdEVYUEVDVF9FUSgwLCBjaGVja19zZWNyZXQoc2xvdHNbaV0sIGkpKTtcbitcdFx0Y2xvc2Uoc2xvdHNbaV0pO1xuK1x0fVxuK31cbitcbitURVNUX0Yoc2NtX3JpZ2h0c19kZW5pYWxfYnBmLCBmaXJzdF9kZW5pZWQpXG4re1xuK1x0aW50IHNsb3RzW05SX0ZJTEVTXSwgbnJfc2xvdHMsIGZsYWdzO1xuK1xuK1x0QVNTRVJUX0VRKDAsIGRlbnlfaW5vZGUoc2VsZi1cdTAwM2VtYXBfZmQsIHNlbGYtXHUwMDNlaW5vc1swXSkpO1xuK1xuK1x0QVNTRVJUX0VRKDAsIHNldF9ub3RydW5jKHNlbGYtXHUwMDNlc2tbU0tfUkVDRUlWRVJdKSk7XG4rXHRBU1NFUlRfTkUoLTEsIHNlbmRfZmRzKHNlbGYtXHUwMDNlc2tbU0tfU0VOREVSXSwgc2VsZi1cdTAwM2VmaWxlcywgTlJfRklMRVMpKTtcbitcdG5yX3Nsb3RzID0gcmVjdl9mZF9zbG90cyhzZWxmLVx1MDAzZXNrW1NLX1JFQ0VJVkVSXSwgc2xvdHMsIFx1MDAyNmZsYWdzKTtcbitcbitcdEFTU0VSVF9FUShOUl9GSUxFUywgbnJfc2xvdHMpO1xuK1x0RVhQRUNUX0VRKDAsIGZsYWdzIFx1MDAyNiBNU0dfQ1RSVU5DKTtcbitcdEVYUEVDVF9FUSgtRVBFUk0sIHNsb3RzWzBdKTtcbitcbitcdEFTU0VSVF9HRShzbG90c1sxXSwgMCk7XG4rXHRFWFBFQ1RfRVEoMCwgY2hlY2tfc2VjcmV0KHNsb3RzWzFdLCAxKSk7XG4rXHRjbG9zZShzbG90c1sxXSk7XG4rfVxuK1xuK1RFU1RfRihzY21fcmlnaHRzX2RlbmlhbF9icGYsIGFsbF9kZW5pZWQpXG4re1xuK1x0aW50IHNsb3RzW05SX0ZJTEVTXSwgbnJfc2xvdHMsIGZsYWdzLCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfRklMRVM7IGkrKylcbitcdFx0QVNTRVJUX0VRKDAsIGRlbnlfaW5vZGUoc2VsZi1cdTAwM2VtYXBfZmQsIHNlbGYtXHUwMDNlaW5vc1tpXSkpO1xuK1xuK1x0QVNTRVJUX0VRKDAsIHNldF9ub3RydW5jKHNlbGYtXHUwMDNlc2tbU0tfUkVDRUlWRVJdKSk7XG4rXHRBU1NFUlRfTkUoLTEsIHNlbmRfZmRzKHNlbGYtXHUwMDNlc2tbU0tfU0VOREVSXSwgc2VsZi1cdTAwM2VmaWxlcywgTlJfRklMRVMpKTtcbitcdG5yX3Nsb3RzID0gcmVjdl9mZF9zbG90cyhzZWxmLVx1MDAzZXNrW1NLX1JFQ0VJVkVSXSwgc2xvdHMsIFx1MDAyNmZsYWdzKTtcbitcbitcdEFTU0VSVF9FUShOUl9GSUxFUywgbnJfc2xvdHMpO1xuK1x0RVhQRUNUX0VRKDAsIGZsYWdzIFx1MDAyNiBNU0dfQ1RSVU5DKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX0ZJTEVTOyBpKyspXG4rXHRcdEVYUEVDVF9FUSgtRVBFUk0sIHNsb3RzW2ldKTtcbit9XG4rXG4rVEVTVF9GKHNjbV9yaWdodHNfZGVuaWFsX2JwZiwgZGVuaWVkX3dpdGhvdXRfbm90cnVuYylcbit7XG4rXHRpbnQgc2xvdHNbTlJfRklMRVNdLCBucl9zbG90cywgZmxhZ3M7XG4rXG4rXHQvKlxuK1x0ICogQmFzZWxpbmUgYmVoYXZpb3VyIHdpdGhvdXQgU09fUklHSFRTX05PVFJVTkM6IHRoZSBmZCBhcnJheSBpc1xuK1x0ICogdHJ1bmNhdGVkIGF0IHRoZSBmaXJzdCBkZW5pZWQgZmQgYW5kIE1TR19DVFJVTkMgaXMgc2V0LlxuK1x0ICovXG4rXHRBU1NFUlRfRVEoMCwgZGVueV9pbm9kZShzZWxmLVx1MDAzZW1hcF9mZCwgc2VsZi1cdTAwM2Vpbm9zWzFdKSk7XG4rXG4rXHRBU1NFUlRfTkUoLTEsIHNlbmRfZmRzKHNlbGYtXHUwMDNlc2tbU0tfU0VOREVSXSwgc2VsZi1cdTAwM2VmaWxlcywgTlJfRklMRVMpKTtcbitcdG5yX3Nsb3RzID0gcmVjdl9mZF9zbG90cyhzZWxmLVx1MDAzZXNrW1NLX1JFQ0VJVkVSXSwgc2xvdHMsIFx1MDAyNmZsYWdzKTtcbitcbitcdEFTU0VSVF9FUSgxLCBucl9zbG90cyk7XG4rXHRFWFBFQ1RfTkUoMCwgZmxhZ3MgXHUwMDI2IE1TR19DVFJVTkMpO1xuK1xuK1x0QVNTRVJUX0dFKHNsb3RzWzBdLCAwKTtcbitcdEVYUEVDVF9FUSgwLCBjaGVja19zZWNyZXQoc2xvdHNbMF0sIDApKTtcbitcdGNsb3NlKHNsb3RzWzBdKTtcbit9XG4rXG4rVEVTVF9IQVJORVNTX01BSU5cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDIwOjA5OjI1LjA2NDgyOTU4OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNTI5NDU3OTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV3IFNPX1JJR0hUU19OT1RSVU5DIFNvY2tldCBPcHRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGludHJvZHVjaW5nIGBTT19SSUdIVFNfTk9UUlVOQ2AgZm9yIEFGX1VOSVggc29ja2V0cy4gVGhlIGNvcmUgaWRlYSBpcyB0aGF0IHdoZW4gYSBzZWN1cml0eSBtb2R1bGUgbGlrZSBhbiBMU00gZGVuaWVzIHRoZSByZWNlaXB0IG9mIGEgZmlsZSBkZXNjcmlwdG9yIHZpYSBgU0NNX1JJR0hUU2AsIGluc3RlYWQgb2YgdHJ1bmNhdGluZyB0aGUgRkQgYXJyYXkgYW5kIHNldHRpbmcgYE1TR19DVFJVTkNgLCB3ZSBub3cgaGF2ZSB0aGUgb3B0aW9uIHRvICpub3QqIHRydW5jYXRlLiBJbnN0ZWFkLCB0aGUgZXJyb3IgY29kZSAobGlrZSBgLUVQRVJNYCkgZ2V0cyBwbGFjZWQgZGlyZWN0bHkgaW50byB0aGUgdXNlcidzIEZEIGFycmF5LCBlc3NlbnRpYWxseSBzaWduYWxpbmcgdGhlIGRlbmlhbCBtb3JlIGV4cGxpY2l0bHkuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlIHRvIHRoZSBzdGFuZGFyZCBiZWhhdmlvciwgYWx0aG91Z2ggdGFyZ2V0ZWQuXG5cbkxldCdzIGJyZWFrIGRvd24gdGhlIGRpZmYgdG8gc2VlIHRoZSBzcGVjaWZpY3MuIFdlJ3ZlIGdvdDpcblxuKiAgIFRoZSBvYnZpb3VzIGhlYWRlciBmaWxlIHVwZGF0ZXMgaW4gYGFyY2gvKi9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oYCBhbmQgYGluY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaGAgdG8gZGVmaW5lIHRoZSBuZXcgYFNPX1JJR0hUU19OT1RSVU5DYCBvcHRpb24gKHZhbHVlIDg1KS5cbiogICBJbiBgaW5jbHVkZS9uZXQvYWZfdW5peC5oYCwgYSBuZXcgYGJvb2wgc2NtX3JpZ2h0c19ub3RydW5jO2AgbWVtYmVyIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBgdW5peF9zb2NrYCBzdHJ1Y3R1cmUuXG4qICAgVGhlIGBpbmNsdWRlL25ldC9zY20uaGAgbW9kaWZpY2F0aW9ucyBhcmUgaW50ZXJlc3RpbmcuIFRoZSBgc2NtX2RldGFjaF9mZHNgLCBgc2NtX2RldGFjaF9mZHNfY29tcGF0YCwgYW5kIGBzY21fcmVjdl9vbmVfZmRgIGZ1bmN0aW9ucyBub3cgYWNjZXB0IGEgYGJvb2wgbm90cnVuY2AgYXJndW1lbnQsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB0aGUgbmV3IHNvY2tldCBvcHRpb24gY29udHJvbHMuXG4qICAgYG5ldC9jb21wYXQuY2AgaGFzIGJlZW4gdXBkYXRlZCB0byBjb3JyZWN0bHkgcGFzcyB0aGUgYG5vdHJ1bmNgIGFyZ3VtZW50IHRvIGBzY21fcmVjdl9vbmVfZmRgLlxuKiAgIFRoZSBjcnVjaWFsIGNoYW5nZSBpcyBpbiBgbmV0L2NvcmUvc2NtLmNgLCB3aGVyZSBgc2NtX3JlY3Zfb25lX2ZkYCBub3cgaGFuZGxlcyB0aGUgZXJyb3IgcmV0dXJuIGNvcnJlY3RseSBpZiBgbm90cnVuY2AgaXMgdHJ1ZSwgYnkgcHV0dGluZyB0aGUgZXJyb3IgaW50byB0aGUgdXNlcidzIEZEIGFycmF5LlxuKiAgIEZpbmFsbHksIGBuZXQvdW5peC9hZl91bml4LmNgIGludGVncmF0ZXMgYFNPX1JJR0hUU19OT1RSVU5DYCBpbnRvIGB1bml4X2N1c3RvbV9zb2Nrb3B0YCBhbmQgYHVuaXhfc2V0c29ja29wdGAsIGFuZCBhbHNvIHByb3BhZ2F0ZXMgdGhlIGBzY21fcmlnaHRzX25vdHJ1bmNgIGZsYWcgZHVyaW5nIGB1bml4X3N0cmVhbV9jb25uZWN0YCwgd2hpY2ggbWFrZXMgc2Vuc2UuXG4qICAgQW5kLCBnb29kLCB0aGVyZSdzIGEgc2VsZnRlc3QgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHNfZGVuaWFsX2xzbS5jYC4gVGhpcyBpcyBlc3NlbnRpYWwgdG8gc2hvdyBjb3JyZWN0IGJlaGF2aW9yLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbmV0d29ya2luZyBhbmQgQUZfVU5JWCBsb2dpYywgc28gaXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgYSBzb2xpZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cbk15IHByaW1hcnkgZm9jdXMgc3ltYm9scyBhcmUgY2xlYXJseTpcblxuKiAgIGB1bml4X3NldHNvY2tvcHRgIOKAkyBiZWNhdXNlIGl04oCZcyB3aGVyZSB0aGUgc29ja2V0IG9wdGlvbiBpcyBzZXQuXG4qICAgYHNjbV9yZWN2X29uZV9mZGAg4oCTIHRoaXMgaXMgdGhlIGNvcmUgb2YgdGhlIG5ldyBsb2dpYywgaG93IHRoZSBlcnJvciBpcyBoYW5kbGVkLlxuKiAgIGBzY21fZGV0YWNoX2Zkc2AgYW5kIGBzY21fZGV0YWNoX2Zkc19jb21wYXRgIOKAkyBib3RoIGFyZSBjb3JlIHRvIEZEIGhhbmRsaW5nIGFuZCB0aGUgbG9naWMgZmxvdy5cbiogICBgdW5peF9zdHJlYW1fY29ubmVjdGAgLSB0aGUgcGF0aCBtaWdodCBiZSB2YWx1YWJsZS5cblxuSSdsbCBkb3VibGUtY2hlY2sgYG5ldC9jb3JlL3NjbS5jYCBmb3IgYHNjbV9yZWN2X29uZV9mZGAgYW5kIGBzY21fZGV0YWNoX2Zkc2AsIGFuZCBgbmV0L3VuaXgvYWZfdW5peC5jYCBmb3IgYHVuaXhfc2V0c29ja29wdGAgZm9yIG1vcmUgZGV0YWlsLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgcmVxdWlyZWQgYENPTkZJR19gIG9wdGlvbnM6IGBDT05GSUdfVU5JWGAgKG9idmlvdXMpLCBgQ09ORklHX1NFQ1VSSVRZYCAoZm9yIHRoZSBMU00sIGFsdGhvdWdoIHRoZSBmZWF0dXJlIGl0c2VsZiBkb2Vzbid0IGluaGVyZW50bHkgZGVwZW5kIG9uIGl0LCBidXQgdGhlIGRlbmlhbCBtYWtlcyB0aGUgbW9zdCBzZW5zZSksIGFuZCBgQ09ORklHX0NPTVBBVGAgKGZvciB0aGUgY29tcGF0IGZ1bmN0aW9uKS5cblxuVGhlbiBJJ2xsIHJ1biBzb21lIHRvb2xpbmcgdG8gdGVzdCB0aGlzIG91dCB0aG9yb3VnaGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDMzMywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDIwOjA5OjM3LjU5NDI5MTAyNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTIxNTg4NTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNjbV9yZWN2X29uZV9mZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9zY20uaD0xMDc9dm9pZCBzY21fcmVjdl91bml4KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbmluY2x1ZGUvbmV0L3NjbS5oLTEwOS1cXG5pbmNsdWRlL25ldC9zY20uaDoxMTA6aW50IHNjbV9yZWN2X29uZV9mZChzdHJ1Y3QgZmlsZSAqZiwgaW50IF9fdXNlciAqdWZkLCB1bnNpZ25lZCBpbnQgZmxhZ3MsXFxuaW5jbHVkZS9uZXQvc2NtLmgtMTExLVxcdFxcdCAgICBib29sIG5vdHJ1bmMpO1xcbi0tXFxubmV0L2NvbXBhdC5jPTI4OT12b2lkIHNjbV9kZXRhY2hfZmRzX2NvbXBhdChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20sIGJvb2wgbm90cnVuYylcXG4tLVxcbm5ldC9jb21wYXQuYy0yOTgtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGZkbWF4OyBpKyspIHtcXG5uZXQvY29tcGF0LmM6Mjk5OlxcdFxcdGVyciA9IHNjbV9yZWN2X29uZV9mZChzY20tXFx1MDAzZWZwLVxcdTAwM2VmcFtpXSwgY21zZ19kYXRhICsgaSwgb19mbGFncywgbm90cnVuYyk7XFxubmV0L2NvbXBhdC5jLTMwMC1cXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9jb3JlL3NjbS5jPTM0Nz1zdGF0aWMgaW50IHNjbV9tYXhfZmRzKHN0cnVjdCBtc2doZHIgKm1zZylcXG4tLVxcbm5ldC9jb3JlL3NjbS5jLTM1My1cXG5uZXQvY29yZS9zY20uYzozNTQ6aW50IHNjbV9yZWN2X29uZV9mZChzdHJ1Y3QgZmlsZSAqZiwgaW50IF9fdXNlciAqdWZkLCB1bnNpZ25lZCBpbnQgZmxhZ3MsXFxubmV0L2NvcmUvc2NtLmMtMzU1LVxcdFxcdCAgICBib29sIG5vdHJ1bmMpXFxuLS1cXG5uZXQvY29yZS9zY20uYz0zNzg9dm9pZCBzY21fZGV0YWNoX2ZkcyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20sIGJvb2wgbm90cnVuYylcXG4tLVxcbm5ldC9jb3JlL3NjbS5jLTM5Ni1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZmRtYXg7IGkrKykge1xcbm5ldC9jb3JlL3NjbS5jOjM5NzpcXHRcXHRlcnIgPSBzY21fcmVjdl9vbmVfZmQoc2NtLVxcdTAwM2VmcC1cXHUwMDNlZnBbaV0sIGNtc2dfZGF0YSArIGksIG9fZmxhZ3MsIG5vdHJ1bmMpO1xcbm5ldC9jb3JlL3NjbS5jLTM5OC1cXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjA6MDk6NDMuNzE1ODg2NTU0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU1MTcxMDY5MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCdzIFNjb3BlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBhIGZldyBrZXkgYXJlYXM6IGBzY21fcmVjdl9vbmVfZmRgLCBgc2NtX2RldGFjaF9mZHNgLCBgc2NtX2RldGFjaF9mZHNfY29tcGF0YCwgYHVuaXhfc2V0c29ja29wdGAsIGFuZCBgc2NtX3JlY3ZfdW5peGAuIFRoZXNlIGFyZSBhbGwgcHJldHR5IGZvY3VzZWQgZW50cnkgcG9pbnRzLCB3aGljaCBpcyBnb29kLiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhc3BlY3RzIHRvIGtlZXAgaW4gbWluZC5cblxuVGhlIGJpZyBvbmUgaXMgYENPTkZJR19VTklYYCwgb2J2aW91c2x5LCBhcyB0aGlzIHNlZW1zIGNlbnRyYWwgdG8gdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4gYENPTkZJR19DT01QQVRgIGlzIGxpbmtlZCB0byBgc2NtX2RldGFjaF9mZHNfY29tcGF0YCwgd2hpY2ggaXMgYXMgZXhwZWN0ZWQuIEFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM/IExvb2tpbmcgYXQgdGhlIHNlbGZ0ZXN0IGludHJvZHVjZXMgYSByYW5nZSBvZiBgQ09ORklHX0JQRmAgb3B0aW9ucywgYWxvbmcgd2l0aCBgQ09ORklHX1NFQ1VSSVRZYCBhbmQgYENPTkZJR19ERUJVR19JTkZPX0JURmAuXG5cbkhvd2V2ZXIsIGZvY3VzaW5nIG9uIHRoZSBjb3JlIGZlYXR1cmUgSSdtIGFzc2Vzc2luZyAoYFNPX1JJR0hUU19OT1RSVU5DYCksIHRoZSBjb2RlIGl0c2VsZiBpbiBgbmV0L3VuaXgvYWZfdW5peC5jYCBhbmQgYG5ldC9jb3JlL3NjbS5jYCBvbmx5IHN0cmljdGx5IHJlbGllcyBvbiBgQ09ORklHX1VOSVhgIGZvciBjb21waWxhdGlvbi4gSXQncyBub3QgaW5oZXJlbnRseSBkZXBlbmRlbnQgb24gQlBGIG9yIExTTSBmb3IgdGhlIGNvZGUgdG8gYmUgY29tcGlsZWQgYW5kIHJlYWNoYWJsZS5cblxuQnV0LCBub3cgdGhhdCBJJ20gY29uc2lkZXJpbmcgZXJyb3IgcGF0aHMsIHNwZWNpZmljYWxseSB3aXRoaW4gYHNjbV9yZWN2X29uZV9mZGA6XG5cbmBgYGNcblx0ZXJyb3IgPSBzZWN1cml0eV9maWxlX3JlY2VpdmUoZik7XG5cdGlmIChlcnJvcilcblx0XHRyZXR1cm4gbm90cnVuYyA/IHB1dF91c2VyKGVycm9yLCB1ZmQpIDogZXJyb3I7XG5gYGBcblxuVG8gKnRyaWdnZXIqIHRoZSBlcnJvciBwYXRoIGhlcmUsIGBzZWN1cml0eV9maWxlX3JlY2VpdmVgIG5lZWRzIHRvIHJldHVybiBhbiBlcnJvci4gVGhhdCBjb3VsZCBiZSBkdWUgdG8gYW4gTFNNIGRlbnlpbmcgYWNjZXNzIG9yIHNvbWUgb3RoZXIgZmFpbHVyZSB3aXRoaW4gdGhlIGBzZWN1cml0eV9maWxlX3JlY2VpdmVgIGZ1bmN0aW9uLiBTbywgd2hpbGUgYENPTkZJR19VTklYYCBpcyB0aGUgZXNzZW50aWFsIHJlcXVpcmVtZW50LCBpdCB3b3VsZCBiZSBiZW5lZmljaWFsIHRvIGhhdmUgYENPTkZJR19TRUNVUklUWWAgYW5kIHBvc3NpYmx5IGFuIExTTSBlbmFibGVkIGZvciBhIGNvbXByZWhlbnNpdmUgdGVzdCwgYnV0IGZvciB0aGUgY29kZSB0byBiZSBjb21waWxlZCBgQ09ORklHX1VOSVhgIGlzIHRoZSBvbmx5IHN0cmljdCByZXF1aXJlbWVudC5cblxuTm93LCBsZXQgbWUgc2hpZnQgZ2VhcnMgYW5kIGNoZWNrIGBuZXQvdW5peC9hZl91bml4LmNgIGZvciBhbnkgc3BlY2lmaWNzIG9uIGB1bml4X3NldHNvY2tvcHRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ0MCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMDoxMDowOS4yMzI5OTYwNjNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIwMzk0NDk0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1bml4X3NldHNvY2tvcHRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3VuaXgvYWZfdW5peC5jPTkyMT1zdGF0aWMgYm9vbCB1bml4X2N1c3RvbV9zb2Nrb3B0KGludCBvcHRuYW1lKVxcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jLTkzMS1cXG5uZXQvdW5peC9hZl91bml4LmM6OTMyOnN0YXRpYyBpbnQgdW5peF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxubmV0L3VuaXgvYWZfdW5peC5jLTkzMy1cXHRcXHRcXHQgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jPTk3Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB1bml4X3N0cmVhbV9vcHMgPSB7XFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmMtOTkxLVxcdC5zaHV0ZG93biA9XFx0dW5peF9zaHV0ZG93bixcXG5uZXQvdW5peC9hZl91bml4LmM6OTkyOlxcdC5zZXRzb2Nrb3B0ID1cXHR1bml4X3NldHNvY2tvcHQsXFxubmV0L3VuaXgvYWZfdW5peC5jLTk5My1cXHQuc2VuZG1zZyA9XFx0dW5peF9zdHJlYW1fc2VuZG1zZyxcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYz0xMDAyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHVuaXhfZGdyYW1fb3BzID0ge1xcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jLTEwMTctXFx0LnNodXRkb3duID1cXHR1bml4X3NodXRkb3duLFxcbm5ldC91bml4L2FmX3VuaXguYzoxMDE4OlxcdC5zZXRzb2Nrb3B0ID1cXHR1bml4X3NldHNvY2tvcHQsXFxubmV0L3VuaXgvYWZfdW5peC5jLTEwMTktXFx0LnNlbmRtc2cgPVxcdHVuaXhfZGdyYW1fc2VuZG1zZyxcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYz0xMDI3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHVuaXhfc2VxcGFja2V0X29wcyA9IHtcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYy0xMDQyLVxcdC5zaHV0ZG93biA9XFx0dW5peF9zaHV0ZG93bixcXG5uZXQvdW5peC9hZl91bml4LmM6MTA0MzpcXHQuc2V0c29ja29wdCA9XFx0dW5peF9zZXRzb2Nrb3B0LFxcbm5ldC91bml4L2FmX3VuaXguYy0xMDQ0LVxcdC5zZW5kbXNnID1cXHR1bml4X3NlcXBhY2tldF9zZW5kbXNnLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMDoxMDoxNC40MzY5NDg4MDZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTIxNDgxMDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IERlZXAgRGl2ZSBpbnRvIFNvY2tldCBTZWN1cml0eSoqXG5cbk9rYXksIHNvIEknbSByZWFsbHkgZGlnZ2luZyBpbnRvIHRoZSBzZWN1cml0eSBhc3BlY3RzIG9mIHNvY2tldCBjb21tdW5pY2F0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aCBVTklYIHNvY2tldHMuIEkgbmVlZCB0byBnZXQgYSByb2NrLXNvbGlkIHVuZGVyc3RhbmRpbmcgb2Ygd2hlcmUgdGhpbmdzIGNhbiBnbyB3cm9uZyBhbmQgd2hhdCBjaGVja3MgYXJlIGluIHBsYWNlLiBNeSBrZXkgZm9jdXMgYXJlYXMgcmlnaHQgbm93IGFyZTogYHVuaXhfc2V0c29ja29wdGAsIGBzY21fcmVjdl9vbmVfZmRgLCBgc2NtX2RldGFjaF9mZHNgLCBgc2NtX2RldGFjaF9mZHNfY29tcGF0YCwgYW5kIGBzY21fcmVjdl91bml4YC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgYXQgdGhlIGhlYXJ0IG9mIHRyYW5zZmVycmluZyBmaWxlIGRlc2NyaXB0b3JzIG92ZXIgVU5JWCBkb21haW4gc29ja2V0cywgYW5kIHRoZXJlZm9yZSByZXByZXNlbnQgdGhlIG1vc3QgbGlrZWx5IHNwb3RzIGZvciB2dWxuZXJhYmlsaXR5LlxuXG5JJ20gYWxzbyBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBjb25maWd1cmF0aW9ucyB0aGF0IGRpY3RhdGUgaG93IHRoZXNlIGZ1bmN0aW9ucyBiZWhhdmUuIEkgaGF2ZSBgVU5JWGAgYW5kIGBDT01QQVRgIGZsYWdzIGluIG1pbmQgYXMgdGhlc2Ugc2VlbSB0byBiZSB0aGUgbW9zdCByZWxldmFudC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcsIGFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucyB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBJIG5lZWQgYSBjb21wbGV0ZSBwaWN0dXJlLlxuXG5JIGtub3cgdGhlIHNlbGZ0ZXN0IGxldmVyYWdlcyBCUEYgTFNNIHRvIGRlbnkgZmlsZSBkZXNjcmlwdG9yIHJlY2VwdGlvbiwgYWN0aW5nIGFzIGEga2luZCBvZiBjYW5hcnkuIFRoYXQgZ290IG1lIHRoaW5raW5nIGFib3V0IG90aGVyIGZhaWx1cmUgcGF0aHMgZm9yIGBzZWN1cml0eV9maWxlX3JlY2VpdmVgLiBDb3VsZCB0aGVyZSBiZSBvdGhlciB3YXlzIHRoaXMgY2hlY2sgbWlnaHQgZmFpbCwgcGVyaGFwcyBkdWUgdG8gZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zIG9yIGNvbmRpdGlvbnM/IEkgbmVlZCB0byBrbm93IGFsbCB0aGUgYW5nbGVzIGhlcmUuIEkgd2lsbCBzY3J1dGluaXplIGBzZWN1cml0eV9maWxlX3JlY2VpdmVgIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzk0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDIwOjEwOjIyLjM1ODQzMzcxNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjIzMjgxNzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBzZWN1cml0eV9maWxlX3JlY2VpdmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zZWN1cml0eS5oPTQ5Mj1pbnQgc2VjdXJpdHlfZmlsZV9zZW5kX3NpZ2lvdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayxcXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDkzLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgZm93bl9zdHJ1Y3QgKmZvd24sIGludCBzaWcpO1xcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDo0OTQ6aW50IHNlY3VyaXR5X2ZpbGVfcmVjZWl2ZShzdHJ1Y3QgZmlsZSAqZmlsZSk7XFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTQ5NS1pbnQgc2VjdXJpdHlfZmlsZV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD0xMjE0PXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2ZpbGVfc2VuZF9zaWdpb3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtMTIyMC1cXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg6MTIyMTpzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9maWxlX3JlY2VpdmUoc3RydWN0IGZpbGUgKmZpbGUpXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTEyMjIte1xcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYz0yNzA0PWludCBzZWN1cml0eV9maWxlX3NlbmRfc2lnaW90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLFxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNzE4LSAqL1xcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MjcxOTppbnQgc2VjdXJpdHlfZmlsZV9yZWNlaXZlKHN0cnVjdCBmaWxlICpmaWxlKVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjcyMC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDIwOjEwOjI4LjU4MTcyNTEwNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxOTAzNzk2MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gc2VjdXJpdHlfZmlsZV9yZWNlaXZlKipcblxuQWxyaWdodCwgbGV0J3MgZGlzc2VjdCBgc2VjdXJpdHlfZmlsZV9yZWNlaXZlYCBpbiBgc2VjdXJpdHkvc2VjdXJpdHkuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBmaWxlIHJlY2VwdGlvbiBmcm9tIGEgc2VjdXJpdHkgcGVyc3BlY3RpdmUuIE15IGluaXRpYWwgcXVlc3Rpb25zIGFyZTogd2hhdCBjaGVja3MgYXJlIHBlcmZvcm1lZCBvbiB0aGUgaW5jb21pbmcgZGF0YT8gV2hhdCBhc3N1bXB0aW9ucyBhcmUgYmVpbmcgbWFkZSBhYm91dCB0aGUgc291cmNlLCBzaXplLCBhbmQgY29udGVudD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gYnVmZmVyIG92ZXJmbG93cywgcGF0aCB0cmF2ZXJzYWwsIG9yIGNvZGUgaW5qZWN0aW9uIHRoYXQgaW1tZWRpYXRlbHkganVtcCBvdXQ/IEkgd2FudCB0byBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHNlY3VyaXR5IHByaW1pdGl2ZXMuIElzIHRoZXJlIGFuIGludGVncmF0aW9uIHdpdGggYW55IG1hbmRhdG9yeSBhY2Nlc3MgY29udHJvbCBtZWNoYW5pc21zIG9yIGlzIGl0IGhhbmRsaW5nIHNlY3VyaXR5IHBvbGljeSBpdHNlbGY/IExldCdzIGNoZWNrIHRoZSBmdW5jdGlvbidzIHBhcmFtZXRlciBsaXN0LCB0eXBlIGRlY2xhcmF0aW9ucyBhbmQgdGhlIGRhdGEgaXQgYWNjZXNzZXMsIGxvb2tpbmcgZm9yIGFueXRoaW5nIHRoYXQgc2VlbXMgdW51c3VhbCBhbmQgc2hvdWxkIGJlIGRvY3VtZW50ZWQuIEZyb20gdGhlcmUgSSdsbCB0cmFjZSB0aHJvdWdoIHRoZSBjb3JlIGxvZ2ljLCBleGFtaW5pbmcgYW55IGNhbGxzIHRvIG90aGVyIHNlY3VyaXR5LXJlbGF0ZWQgZnVuY3Rpb25zIG9yIHN5c3RlbSBjYWxscyBpbnZvbHZlZCBpbiBmaWxlIGhhbmRsaW5nIChlLmcuLCBgb3BlbmAsIGByZWFkYCwgYHdyaXRlYCwgYGNobW9kYCwgYGNob3duYCwgZXRjLikgdG8gZ2V0IGEgZ29vZCBzZW5zZSBvZiBpdHMgcm9sZSB3aXRoaW4gdGhlIHdpZGVyIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1MTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMDoxMDozNS43NzIxMDg1NjlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc2OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInNlY3VyaXR5L3NlY3VyaXR5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjcxOSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjcxOTpcXHRpbnQgc2VjdXJpdHlfZmlsZV9yZWNlaXZlKHN0cnVjdCBmaWxlICpmaWxlKVxcbjI3MjA6XFx0e1xcbjI3MjE6XFx0XFx0cmV0dXJuIGNhbGxfaW50X2hvb2soZmlsZV9yZWNlaXZlLCBmaWxlKTtcXG4yNzIyOlxcdH1cXG4yNzIzOlxcdFxcbjI3MjQ6XFx0LyoqXFxuMjcyNTpcXHQgKiBzZWN1cml0eV9maWxlX29wZW4oKSAtIFNhdmUgb3BlbigpIHRpbWUgc3RhdGUgZm9yIGxhdGUgdXNlIGJ5IHRoZSBMU01cXG4yNzI2OlxcdCAqIEBmaWxlOlxcbjI3Mjc6XFx0ICpcXG4yNzI4OlxcdCAqIFNhdmUgb3Blbi10aW1lIHBlcm1pc3Npb24gY2hlY2tpbmcgc3RhdGUgZm9yIGxhdGVyIHVzZSB1cG9uIGZpbGVfcGVybWlzc2lvbixcXG4yNzI5OlxcdCAqIGFuZCByZWNoZWNrIGFjY2VzcyBpZiBhbnl0aGluZyBoYXMgY2hhbmdlZCBzaW5jZSBpbm9kZV9wZXJtaXNzaW9uLlxcbjI3MzA6XFx0ICpcXG4yNzMxOlxcdCAqIFdlIGNhbiBjaGVjayBpZiBhIGZpbGUgaXMgb3BlbmVkIGZvciBleGVjdXRpb24gKGUuZy4gZXhlY3ZlKDIpIGNhbGwpLCBlaXRoZXJcXG4yNzMyOlxcdCAqIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgKGUuZy4gRUxGJ3MgbGQuc28pIGJ5IGNoZWNraW5nIGZpbGUtXFx1MDAzZWZfZmxhZ3MgXFx1MDAyNlxcbjI3MzM6XFx0ICogX19GTU9ERV9FWEVDIC5cXG4yNzM0OlxcdCAqXFxuMjczNTpcXHQgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXFxuMjczNjpcXHQgKi9cXG4yNzM3OlxcdGludCBzZWN1cml0eV9maWxlX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpXFxuMjczODpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDIwOjEwOjM1Ljc3MjM5MDE4OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDY2MzQ0ODYzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgU09fUklHSFRTX05PVFJVTkNgIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgaGFuZGxpbmcgZXJyb3JzIHdoZW4gcmVjZWl2aW5nIGZpbGUgZGVzY3JpcHRvcnMgb3ZlciBVTklYIHNvY2tldHMgd2l0aCB0aGUgYFNPX1JJR0hUU19OT1RSVU5DYCBvcHRpb24uIEl0IGJvaWxzIGRvd24gdG8gdGhpczogdGhlIGNvZGUgY2FsbHMgdGhlIExTTSAoTGludXggU2VjdXJpdHkgTW9kdWxlKSBob29rLiBJZiBubyBMU00gZGVuaWVzIHRoZSBmaWxlIGRlc2NyaXB0b3IgcmVjZWl2ZSwgaXQgcmV0dXJucyAwLiBCdXQgdG8gdHJ1bHkgdGVzdCB0aGUgZXJyb3IgcGF0aCB3aGVyZSBgZXJyb3IgIT0gMGAsIHdlIG5lZWQgYW4gTFNNIHRoYXQgKmNhbiogZGVueSBgZmlsZV9yZWNlaXZlYC5cblxuQXBwQXJtb3IsIFNFTGludXgsIFNtYWNrLCBUT01PWU8sIGFuZCBCUEYgTFNNIGFyZSB0aGUgcG9zc2liaWxpdGllcy4gVGhlIHNlbGZ0ZXN0IHVzZXMgQlBGIExTTSwgYW5kIHRoYXQgc2VlbXMgbGlrZSBhIHNlbnNpYmxlIGFwcHJvYWNoLiBTbywgdG8gZW5zdXJlIHdlIGNhbiBoaXQgdGhlIGVycm9yIHBhdGgsIGVzcGVjaWFsbHkgaWYgc3l6a2FsbGVyIGlzIHRocm93aW5nIEJQRiBwcm9ncmFtcyBhdCB0aGUga2VybmVsLCBlbmFibGluZyBgU0VDVVJJVFlgIGFuZCBgQlBGX0xTTWAgaXMgYSBtdXN0LlxuXG5Ob3csIEkgbmVlZCB0byBjb25zaWRlciBob3cgc3l6a2FsbGVyIG9wZXJhdGVzLiBJdCdzIG5vdCBzdHJhaWdodGZvcndhcmQgZm9yIGl0IHRvICpkZWxpYmVyYXRlbHkqIGdlbmVyYXRlIEJQRiBMU00gcHJvZ3JhbXMgdG8gZGVueSBzcGVjaWZpYyBob29rcyB3aXRob3V0IGRlc2NyaXB0aW9ucyBmb3IgdGhlIGhvb2tzLiBIb3dldmVyLCBpdCAqY291bGQqIHRyaWdnZXIgdGhlIGVycm9yIGJ5IGNoYW5jZSwgb3IgaWYgYW5vdGhlciBMU00sIGxpa2UgU0VMaW51eCBvciBBcHBBcm1vciwgaXMgYWN0aXZlIGFuZCBhbHJlYWR5IGRlbmllcyBmaWxlIGRlc2NyaXB0b3IgdHJhbnNmZXIgYWNyb3NzIGRvbWFpbnMuIFN0aWxsLCBhZGRpbmcgYFNFQ1VSSVRZYCBpcyBhIGdvb2QgcHJhY3RpY2UuXG5cbkF0IGFueSByYXRlLCBgVU5JWGAgYW5kIGBDT01QQVRgIGFyZSBjcnVjaWFsIGNvbmZpZ3MgdG8gZW5hYmxlLCBnaXZlbiB0aGUgdGFyZ2V0IGNvZGUuIEFkZGluZyBgU0VDVVJJVFlgIHNlZW1zIGxpa2UgYSB1c2VmdWwgcHJlY2F1dGlvbi5cblxuTGV0J3MgcXVpY2tseSByZXZpZXcgdGhlIGNvcmUgZm9jdXMgc3ltYm9sczogYHVuaXhfc2V0c29ja29wdGAsIGBzY21fcmVjdl9vbmVfZmRgLCBgc2NtX2RldGFjaF9mZHNgLCBgc2NtX2RldGFjaF9mZHNfY29tcGF0YCwgYW5kIGBzY21fcmVjdl91bml4YC4gWWVwLCB0aG9zZSBhbGwgbG9vayByaWdodCBvbiBwb2ludC4gVGhleSBkaXJlY3RseSByZWxhdGUgdG8gdGhlIG5ldyBsb2dpYy5cblxuTm93LCB0byBzb2xpZGlmeSB0aGUgcmVhc29uaW5nOiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYFNPX1JJR0hUU19OT1RSVU5DYCBmb3IgQUZfVU5JWCBzb2NrZXRzLiBUaGlzIG9wdGlvbiBtb2RpZmllcyB0aGUgYFNDTV9SSUdIVFNgIGJlaGF2aW9yLiBXaGVuIHRoZSBmaWxlIGRlc2NyaXB0b3IgcmVjZWl2ZSBpcyBkZW5pZWQgYnkgYSBzZWN1cml0eSBtb2R1bGUsIHRoZSBwYXRjaCBtb2RpZmllcyBgU0NNX1JJR0hUU2AuIEluc3RlYWQgb2YgdHJ1bmNhdGluZyB0aGUgZmlsZSBkZXNjcmlwdG9yIGFycmF5IGFuZCBzZXR0aW5nIGBNU0dfQ1RSVU5DYCwgaXQgcGxhY2VzIHRoZSBlcnJvciBjb2RlIGluIHRoZSB1c2VyJ3MgZmlsZSBkZXNjcmlwdG9yIGFycmF5LiBUaGlzIGludm9sdmVzIGNoYW5nZXMgdG8gY29yZSBBRl9VTklYIHNvY2tldCBvcHRpb24gcGFyc2luZyAoYHVuaXhfc2V0c29ja29wdGApLCBzb2NrZXQgY29ubmVjdGlvbiBzdGF0ZSBwcm9wYWdhdGlvbiwgYW5kIHRoZSBTQ00gbWVzc2FnZSByZWNlaXZpbmcgbG9naWMgKGBzY21fcmVjdl9vbmVfZmRgLCBgc2NtX2RldGFjaF9mZHNgLCBgc2NtX2RldGFjaF9mZHNfY29tcGF0YCwgYHNjbV9yZWN2X3VuaXhgKS4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgcGF0aHMgdGhhdCAqbXVzdCogYmUgZnV6emVkIHRvIHZlcmlmeSB0aGF0IHRoZSBuZXcgZXJyb3IgaGFuZGxpbmcgYW5kIGFycmF5IG1hbmlwdWxhdGlvbiBsb2dpYyBkb2Vzbid0IGludHJvZHVjZSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBvciBsZWFrcy5cblxuU28sIHRoZSBrZXkgY29uZmlncyBmb3IgZnV6emluZzogYFVOSVhgLCBgQ09NUEFUYCwgYW5kIGBTRUNVUklUWWAuXG5cblRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTEzMSwiT3V0cHV0VG9rZW5zIjoyNTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMDoxMDo0Ni40MzU4NDIwNzFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzgzMzI3MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVOSVhcIixcbiAgICBcIkNPTVBBVFwiLFxuICAgIFwiU0VDVVJJVFlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1bml4X3NldHNvY2tvcHRcIixcbiAgICBcInNjbV9yZWN2X29uZV9mZFwiLFxuICAgIFwic2NtX2RldGFjaF9mZHNcIixcbiAgICBcInNjbV9kZXRhY2hfZmRzX2NvbXBhdFwiLFxuICAgIFwic2NtX3JlY3ZfdW5peFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc29ja2V0IG9wdGlvbiBTT19SSUdIVFNfTk9UUlVOQyBmb3IgQUZfVU5JWCBzb2NrZXRzLiBUaGlzIG9wdGlvbiBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgU0NNX1JJR0hUUyB3aGVuIGEgZmlsZSBkZXNjcmlwdG9yIHJlY2VpdmUgaXMgZGVuaWVkIGJ5IGEgc2VjdXJpdHkgbW9kdWxlIChMU00pLiBJbnN0ZWFkIG9mIHRydW5jYXRpbmcgdGhlIGZpbGUgZGVzY3JpcHRvciBhcnJheSBhbmQgc2V0dGluZyBNU0dfQ1RSVU5DLCBpdCBwbGFjZXMgdGhlIGVycm9yIGNvZGUgaW4gdGhlIHVzZXIncyBmaWxlIGRlc2NyaXB0b3IgYXJyYXkuIFRoaXMgaW52b2x2ZXMgY2hhbmdlcyB0byBjb3JlIEFGX1VOSVggc29ja2V0IG9wdGlvbiBwYXJzaW5nICh1bml4X3NldHNvY2tvcHQpLCBzb2NrZXQgY29ubmVjdGlvbiBzdGF0ZSBwcm9wYWdhdGlvbiwgYW5kIHRoZSBTQ00gbWVzc2FnZSByZWNlaXZpbmcgbG9naWMgKHNjbV9yZWN2X29uZV9mZCwgc2NtX2RldGFjaF9mZHMsIHNjbV9kZXRhY2hfZmRzX2NvbXBhdCwgc2NtX3JlY3ZfdW5peCkuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBlcnJvciBoYW5kbGluZyBhbmQgYXJyYXkgbWFuaXB1bGF0aW9uIGxvZ2ljIGRvZXMgbm90IGludHJvZHVjZSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBvciBsZWFrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVTklYXCIsXG4gICAgXCJDT01QQVRcIixcbiAgICBcIlNFQ1VSSVRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidW5peF9zZXRzb2Nrb3B0XCIsXG4gICAgXCJzY21fcmVjdl9vbmVfZmRcIixcbiAgICBcInNjbV9kZXRhY2hfZmRzXCIsXG4gICAgXCJzY21fZGV0YWNoX2Zkc19jb21wYXRcIixcbiAgICBcInNjbV9yZWN2X3VuaXhcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHNvY2tldCBvcHRpb24gU09fUklHSFRTX05PVFJVTkMgZm9yIEFGX1VOSVggc29ja2V0cy4gVGhpcyBvcHRpb24gbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIFNDTV9SSUdIVFMgd2hlbiBhIGZpbGUgZGVzY3JpcHRvciByZWNlaXZlIGlzIGRlbmllZCBieSBhIHNlY3VyaXR5IG1vZHVsZSAoTFNNKS4gSW5zdGVhZCBvZiB0cnVuY2F0aW5nIHRoZSBmaWxlIGRlc2NyaXB0b3IgYXJyYXkgYW5kIHNldHRpbmcgTVNHX0NUUlVOQywgaXQgcGxhY2VzIHRoZSBlcnJvciBjb2RlIGluIHRoZSB1c2VyJ3MgZmlsZSBkZXNjcmlwdG9yIGFycmF5LiBUaGlzIGludm9sdmVzIGNoYW5nZXMgdG8gY29yZSBBRl9VTklYIHNvY2tldCBvcHRpb24gcGFyc2luZyAodW5peF9zZXRzb2Nrb3B0KSwgc29ja2V0IGNvbm5lY3Rpb24gc3RhdGUgcHJvcGFnYXRpb24sIGFuZCB0aGUgU0NNIG1lc3NhZ2UgcmVjZWl2aW5nIGxvZ2ljIChzY21fcmVjdl9vbmVfZmQsIHNjbV9kZXRhY2hfZmRzLCBzY21fZGV0YWNoX2Zkc19jb21wYXQsIHNjbV9yZWN2X3VuaXgpLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgZXJyb3IgaGFuZGxpbmcgYW5kIGFycmF5IG1hbmlwdWxhdGlvbiBsb2dpYyBkb2VzIG5vdCBpbnRyb2R1Y2UgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgb3IgbGVha3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrpd6v[1] Phase: Succeeded StartedAt: 2026-08-02 20:10:59 +0000 UTC FinishedAt: 2026-08-02 20:10:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrpd6v[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-02 20:10:59 +0000 UTC FinishedAt: 2026-08-02 20:10:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrpd6v[2] Phase: Succeeded StartedAt: 2026-08-02 20:10:59 +0000 UTC FinishedAt: 2026-08-03 00:17:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrpd6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["unix_setsockopt","scm_recv_one_fd","scm_detach_fds","scm_detach_fds_compat","scm_recv_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"184eb337-c6a6-4924-95bb-d6b4d70a2b41","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-02 20:10:59 +0000 UTC FinishedAt: 2026-08-03 00:17:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["unix_setsockopt","scm_recv_one_fd","scm_detach_fds","scm_detach_fds_compat","scm_recv_unix"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"184eb337-c6a6-4924-95bb-d6b4d70a2b41","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowrpd6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["unix_setsockopt","scm_recv_one_fd","scm_detach_fds","scm_detach_fds_compat","scm_recv_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"184eb337-c6a6-4924-95bb-d6b4d70a2b41","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-02 20:10:59 +0000 UTC FinishedAt: 2026-08-02 20:11:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrpd6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["unix_setsockopt","scm_recv_one_fd","scm_detach_fds","scm_detach_fds_compat","scm_recv_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"184eb337-c6a6-4924-95bb-d6b4d70a2b41","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-02 20:10:59 +0000 UTC FinishedAt: 2026-08-02 20:11:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrpd6v/series-workflowrpd6v-convert-artifact-3378420813/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrpd6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["unix_setsockopt","scm_recv_one_fd","scm_detach_fds","scm_detach_fds_compat","scm_recv_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"184eb337-c6a6-4924-95bb-d6b4d70a2b41","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-02 20:11:40 +0000 UTC FinishedAt: 2026-08-02 20:42:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrpd6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["unix_setsockopt","scm_recv_one_fd","scm_detach_fds","scm_detach_fds_compat","scm_recv_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"184eb337-c6a6-4924-95bb-d6b4d70a2b41","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-02 20:11:40 +0000 UTC FinishedAt: 2026-08-02 20:42:41 +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:*acf273d2-98a3-4ee7-982a-9b1373e23cba,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-workflowrpd6v/series-workflowrpd6v-convert-artifact-3378420813/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": "fa987d48-ef59-4021-9a95-0404e830d22e", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrpd6v/series-workflowrpd6v-build-action-1263721667/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrpd6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["unix_setsockopt","scm_recv_one_fd","scm_detach_fds","scm_detach_fds_compat","scm_recv_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"184eb337-c6a6-4924-95bb-d6b4d70a2b41","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-02 20:11:40 +0000 UTC FinishedAt: 2026-08-02 20:42:30 +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:*acf273d2-98a3-4ee7-982a-9b1373e23cba,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-workflowrpd6v/series-workflowrpd6v-convert-artifact-3378420813/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": "fa987d48-ef59-4021-9a95-0404e830d22e", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrpd6v/series-workflowrpd6v-build-action-1263721667/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrpd6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["unix_setsockopt","scm_recv_one_fd","scm_detach_fds","scm_detach_fds_compat","scm_recv_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"184eb337-c6a6-4924-95bb-d6b4d70a2b41","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-02 20:42:41 +0000 UTC FinishedAt: 2026-08-02 20:42:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrpd6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["unix_setsockopt","scm_recv_one_fd","scm_detach_fds","scm_detach_fds_compat","scm_recv_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"184eb337-c6a6-4924-95bb-d6b4d70a2b41","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-02 20:42:41 +0000 UTC FinishedAt: 2026-08-02 20:42:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrpd6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["unix_setsockopt","scm_recv_one_fd","scm_detach_fds","scm_detach_fds_compat","scm_recv_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"184eb337-c6a6-4924-95bb-d6b4d70a2b41","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-02 20:42:41 +0000 UTC FinishedAt: 2026-08-02 20:42:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrpd6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["unix_setsockopt","scm_recv_one_fd","scm_detach_fds","scm_detach_fds_compat","scm_recv_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"184eb337-c6a6-4924-95bb-d6b4d70a2b41","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-02 20:42:41 +0000 UTC FinishedAt: 2026-08-02 20:42:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"184eb337-c6a6-4924-95bb-d6b4d70a2b41","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrpd6v/series-workflowrpd6v-convert-artifact-1974866344/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrpd6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["unix_setsockopt","scm_recv_one_fd","scm_detach_fds","scm_detach_fds_compat","scm_recv_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"184eb337-c6a6-4924-95bb-d6b4d70a2b41","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-02 20:42:52 +0000 UTC FinishedAt: 2026-08-02 20:44:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrpd6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["unix_setsockopt","scm_recv_one_fd","scm_detach_fds","scm_detach_fds_compat","scm_recv_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"184eb337-c6a6-4924-95bb-d6b4d70a2b41","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-02 20:42:52 +0000 UTC FinishedAt: 2026-08-02 20:44:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fa987d48-ef59-4021-9a95-0404e830d22e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrpd6v/series-workflowrpd6v-build-action-1263721667/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrpd6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["unix_setsockopt","scm_recv_one_fd","scm_detach_fds","scm_detach_fds_compat","scm_recv_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"184eb337-c6a6-4924-95bb-d6b4d70a2b41","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-02 20:44:51 +0000 UTC FinishedAt: 2026-08-02 20:44:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrpd6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["unix_setsockopt","scm_recv_one_fd","scm_detach_fds","scm_detach_fds_compat","scm_recv_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"184eb337-c6a6-4924-95bb-d6b4d70a2b41","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-02 20:44:51 +0000 UTC FinishedAt: 2026-08-02 20:44:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrpd6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["unix_setsockopt","scm_recv_one_fd","scm_detach_fds","scm_detach_fds_compat","scm_recv_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"184eb337-c6a6-4924-95bb-d6b4d70a2b41","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-02 20:44:51 +0000 UTC FinishedAt: 2026-08-02 21:11:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrpd6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["unix_setsockopt","scm_recv_one_fd","scm_detach_fds","scm_detach_fds_compat","scm_recv_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"184eb337-c6a6-4924-95bb-d6b4d70a2b41","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-02 20:44:51 +0000 UTC FinishedAt: 2026-08-02 21:11:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*acf273d2-98a3-4ee7-982a-9b1373e23cba,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-workflowrpd6v/series-workflowrpd6v-convert-artifact-1974866344/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": "5b05a183-e074-4014-9a5a-18a242f54bb4", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrpd6v/series-workflowrpd6v-build-action-620695380/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrpd6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["unix_setsockopt","scm_recv_one_fd","scm_detach_fds","scm_detach_fds_compat","scm_recv_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"184eb337-c6a6-4924-95bb-d6b4d70a2b41","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-02 20:44:51 +0000 UTC FinishedAt: 2026-08-02 21:10:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*acf273d2-98a3-4ee7-982a-9b1373e23cba,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-workflowrpd6v/series-workflowrpd6v-convert-artifact-1974866344/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": "5b05a183-e074-4014-9a5a-18a242f54bb4", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrpd6v/series-workflowrpd6v-build-action-620695380/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrpd6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["unix_setsockopt","scm_recv_one_fd","scm_detach_fds","scm_detach_fds_compat","scm_recv_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"184eb337-c6a6-4924-95bb-d6b4d70a2b41","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-02 21:11:07 +0000 UTC FinishedAt: 2026-08-02 21:11:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrpd6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["unix_setsockopt","scm_recv_one_fd","scm_detach_fds","scm_detach_fds_compat","scm_recv_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"184eb337-c6a6-4924-95bb-d6b4d70a2b41","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-02 21:11:07 +0000 UTC FinishedAt: 2026-08-02 21:11:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrpd6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["unix_setsockopt","scm_recv_one_fd","scm_detach_fds","scm_detach_fds_compat","scm_recv_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"184eb337-c6a6-4924-95bb-d6b4d70a2b41","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-02 21:11:07 +0000 UTC FinishedAt: 2026-08-02 21:13:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrpd6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["unix_setsockopt","scm_recv_one_fd","scm_detach_fds","scm_detach_fds_compat","scm_recv_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"184eb337-c6a6-4924-95bb-d6b4d70a2b41","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-02 21:11:07 +0000 UTC FinishedAt: 2026-08-02 21:12:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5b05a183-e074-4014-9a5a-18a242f54bb4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrpd6v/series-workflowrpd6v-build-action-620695380/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrpd6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["unix_setsockopt","scm_recv_one_fd","scm_detach_fds","scm_detach_fds_compat","scm_recv_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"184eb337-c6a6-4924-95bb-d6b4d70a2b41","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-02 21:13:08 +0000 UTC FinishedAt: 2026-08-03 00:17:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrpd6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["unix_setsockopt","scm_recv_one_fd","scm_detach_fds","scm_detach_fds_compat","scm_recv_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"184eb337-c6a6-4924-95bb-d6b4d70a2b41","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-02 21:13:08 +0000 UTC FinishedAt: 2026-08-03 00:17:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["unix_setsockopt","scm_recv_one_fd","scm_detach_fds","scm_detach_fds_compat","scm_recv_unix"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*fa987d48-ef59-4021-9a95-0404e830d22e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5b05a183-e074-4014-9a5a-18a242f54bb4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrpd6v/series-workflowrpd6v-build-action-1263721667/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrpd6v/series-workflowrpd6v-build-action-620695380/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrpd6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["unix_setsockopt","scm_recv_one_fd","scm_detach_fds","scm_detach_fds_compat","scm_recv_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"184eb337-c6a6-4924-95bb-d6b4d70a2b41","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-02 21:13:08 +0000 UTC FinishedAt: 2026-08-02 21:13:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrpd6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["unix_setsockopt","scm_recv_one_fd","scm_detach_fds","scm_detach_fds_compat","scm_recv_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"184eb337-c6a6-4924-95bb-d6b4d70a2b41","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-02 21:13:08 +0000 UTC FinishedAt: 2026-08-02 21:13:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["unix_setsockopt","scm_recv_one_fd","scm_detach_fds","scm_detach_fds_compat","scm_recv_unix"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrpd6v/series-workflowrpd6v-convert-artifact-3138860769/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrpd6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["unix_setsockopt","scm_recv_one_fd","scm_detach_fds","scm_detach_fds_compat","scm_recv_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"184eb337-c6a6-4924-95bb-d6b4d70a2b41","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-02 21:13:08 +0000 UTC FinishedAt: 2026-08-02 21:13:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrpd6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["unix_setsockopt","scm_recv_one_fd","scm_detach_fds","scm_detach_fds_compat","scm_recv_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"184eb337-c6a6-4924-95bb-d6b4d70a2b41","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-02 21:13:08 +0000 UTC FinishedAt: 2026-08-02 21:13:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrpd6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["unix_setsockopt","scm_recv_one_fd","scm_detach_fds","scm_detach_fds_compat","scm_recv_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"184eb337-c6a6-4924-95bb-d6b4d70a2b41","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-02 21:13:08 +0000 UTC FinishedAt: 2026-08-02 21:13:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrpd6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["unix_setsockopt","scm_recv_one_fd","scm_detach_fds","scm_detach_fds_compat","scm_recv_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"184eb337-c6a6-4924-95bb-d6b4d70a2b41","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-02 21:13:30 +0000 UTC FinishedAt: 2026-08-03 00:17:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrpd6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["unix_setsockopt","scm_recv_one_fd","scm_detach_fds","scm_detach_fds_compat","scm_recv_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","COMPAT","SECURITY"],"series_id":"184eb337-c6a6-4924-95bb-d6b4d70a2b41","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-02 21:13:30 +0000 UTC FinishedAt: 2026-08-03 00:16:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fa987d48-ef59-4021-9a95-0404e830d22e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5b05a183-e074-4014-9a5a-18a242f54bb4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrpd6v/series-workflowrpd6v-build-action-1263721667/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrpd6v/series-workflowrpd6v-build-action-620695380/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrpd6v/series-workflowrpd6v-convert-artifact-3138860769/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}