Name: series-workflow88cbn Phase: Succeeded StartedAt: 2026-08-04 02:49:11 +0000 UTC FinishedAt: 2026-08-04 06:55:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88cbn[0] Phase: Succeeded StartedAt: 2026-08-04 02:49:11 +0000 UTC FinishedAt: 2026-08-04 03:13:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88cbn[0].run-triage Phase: Succeeded StartedAt: 2026-08-04 02:49:11 +0000 UTC FinishedAt: 2026-08-04 03:13: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": "6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "RPS" ], "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": "6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "RPS" ], "series_id": "93c4712b-9161-4ac5-b236-63af73f8abbe" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rps_llc_check", "rps_feat_llc_affinity_sysctl" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAzOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JQUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Jwc19sbGNfY2hlY2smIzM0OywKICAgICYjMzQ7cnBzX2ZlYXRfbGxjX2FmZmluaXR5X3N5c2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN5c2N0bCBgbmV0LmNvcmUucnBzX2ZlYXRfbGxjX2FmZmluaXR5YCBhbmQgYSBuZXcgZnVuY3Rpb24gYHJwc19sbGNfY2hlY2tgIHRvIG9wdGltaXplIFJQUyAoUmVjZWl2ZSBQYWNrZXQgU3RlZXJpbmcpIGZsb3cgdGFibGUgdXBkYXRlcyBiYXNlZCBvbiBMTEMgKExhc3QgTGV2ZWwgQ2FjaGUpIGFmZmluaXR5LiBUaGlzIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSBzeXNjdGwgY29uZmlndXJhdGlvbiBhbmQgbm9ybWFsIG5ldHdvcmsgdHJhZmZpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMzoxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDk0ZDA3ZmI3Mjc3MzMxNjE0MzhmMDg5NjA1NjMzNjk2ZTA4NmMzMDNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDAzOjEyOjA2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3Jwcy5oIGIvaW5jbHVkZS9uZXQvcnBzLmhcbmluZGV4IGUzM2M2YTJmYThiYmMuLjZkYWNmMDg4OGE2YzIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9ycHMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvcnBzLmhcbkBAIC0xMiw2ICYjNDM7MTIsNyBAQFxuIFxuIGV4dGVybiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBycHNfbmVlZGVkO1xuIGV4dGVybiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSByZnNfbmVlZGVkO1xuJiM0MztleHRlcm4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcnBzX2ZlYXRfbGxjX2FmZmluaXR5O1xuIFxuIC8qXG4gICogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgYW4gUlBTIG1hcCB3aGljaCBjYW4gYmUgb2YgdmFyaWFibGUgbGVuZ3RoLiAgVGhlXG5AQCAtNTUsMTEgJiM0Mzs1NiwxNCBAQCBzdHJ1Y3QgcnBzX3NvY2tfZmxvd190YWJsZSB7XG4gXG4gI2RlZmluZSBSUFNfTk9fQ1BVIDB4ZmZmZlxuIFxuJiM0Mztib29sIHJwc19sbGNfY2hlY2sodTMyIG9sZF92YWwsIHUzMiBuZXdfdmFsKTtcbiYjNDM7XG4gc3RhdGljIGlubGluZSB2b2lkIHJwc19yZWNvcmRfc29ja19mbG93KHJwc190YWdfcHRyIHRhZ19wdHIsIHUzMiBoYXNoKVxuIHtcbiBcdHVuc2lnbmVkIGludCBpbmRleCA9IGhhc2ggXHUwMDI2IHJwc190YWdfdG9fbWFzayh0YWdfcHRyKTtcbiBcdHUzMiB2YWwgPSBoYXNoIFx1MDAyNiB+bmV0X2hvdGRhdGEucnBzX2NwdV9tYXNrO1xuIFx0c3RydWN0IHJwc19zb2NrX2Zsb3dfdGFibGUgKnRhYmxlO1xuJiM0MztcdHUzMiBvbGRfdmFsO1xuIFxuIFx0LyogV2Ugb25seSBnaXZlIGEgaGludCwgcHJlZW1wdGlvbiBjYW4gY2hhbmdlIENQVSB1bmRlciB1cyAqL1xuIFx0dmFsIHw9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7XG5AQCAtNjgsNyAmIzQzOzcyLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHJwc19yZWNvcmRfc29ja19mbG93KHJwc190YWdfcHRyIHRhZ19wdHIsIHUzMiBoYXNoKVxuIFx0LyogVGhlIGZvbGxvd2luZyBXUklURV9PTkNFKCkgaXMgcGFpcmVkIHdpdGggdGhlIFJFQURfT05DRSgpXG4gXHQgKiBoZXJlLCBhbmQgYW5vdGhlciBvbmUgaW4gZ2V0X3Jwc19jcHUoKS5cbiBcdCAqL1xuLVx0aWYgKFJFQURfT05DRSh0YWJsZVtpbmRleF0uZW50KSAhPSB2YWwpXG4mIzQzO1x0b2xkX3ZhbCA9IFJFQURfT05DRSh0YWJsZVtpbmRleF0uZW50KTtcbiYjNDM7XHRpZiAob2xkX3ZhbCAhPSB2YWwgXHUwMDI2XHUwMDI2IHJwc19sbGNfY2hlY2sob2xkX3ZhbCwgdmFsKSlcbiBcdFx0V1JJVEVfT05DRSh0YWJsZVtpbmRleF0uZW50LCB2YWwpO1xuIH1cbiBcbkBAIC0xMzYsMjUgJiM0MzsxNDEsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcmZzX2lzX25lZWRlZCh2b2lkKVxuICNlbmRpZlxuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKVxuLXtcbi0jaWZkZWYgQ09ORklHX1JQU1xuLVx0aWYgKCFyZnNfaXNfbmVlZGVkKCkpXG4tXHRcdHJldHVybjtcbi1cbi1cdF9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKGhhc2gpO1xuLSNlbmRpZlxuLX1cbi1cbi1zdGF0aWMgaW5saW5lIHZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuLXtcbi0jaWZkZWYgQ09ORklHX1JQU1xuLVx0aWYgKCFyZnNfaXNfbmVlZGVkKCkpXG4tXHRcdHJldHVybjtcbi1cbi1cdF9zb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XG4tI2VuZGlmXG4tfVxuJiM0Mzt2b2lkIHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goX191MzIgaGFzaCk7XG4mIzQzO3ZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKTtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgc29ja19ycHNfZGVsZXRlX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuIHtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCAyNmFjOGViOWIyNTlkLi41M2JhZDNjODAxZGM0IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtNDk5Nyw2ICYjNDM7NDk5Nyw4IEBAIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJwc19uZWVkZWQgX19yZWFkX21vc3RseTtcbiBFWFBPUlRfU1lNQk9MKHJwc19uZWVkZWQpO1xuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJmc19uZWVkZWQgX19yZWFkX21vc3RseTtcbiBFWFBPUlRfU1lNQk9MKHJmc19uZWVkZWQpO1xuJiM0MztzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBycHNfZmVhdF9sbGNfYWZmaW5pdHkgX19yZWFkX21vc3RseTtcbiYjNDM7RVhQT1JUX1NZTUJPTChycHNfZmVhdF9sbGNfYWZmaW5pdHkpO1xuIFxuIHN0YXRpYyB1MzIgcmZzX3Nsb3QodTMyIGhhc2gsIHJwc190YWdfcHRyIHRhZ19wdHIpXG4ge1xuQEAgLTUyMDgsNiAmIzQzOzUyMTAsNTUgQEAgc3RhdGljIGludCBnZXRfcnBzX2NwdShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0cmV0dXJuIGNwdTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBycHNfbGxjX2NoZWNrIC0gZGV0ZXJtaW5lIGlmIFJQUyBmbG93IHRhYmxlIHNob3VsZCBiZSB1cGRhdGVkLlxuJiM0MzsgKiBAb2xkX3ZhbDogcHJldmlvdXMgZmxvdyByZWNvcmQgdmFsdWUuXG4mIzQzOyAqIEBuZXdfdmFsOiB0YXJnZXQgZmxvdyByZWNvcmQgdmFsdWUuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdHJ1ZSBpZiB0aGUgcmVjb3JkIG5lZWRzIGFuIHVwZGF0ZSwgZmFsc2Ugb3RoZXJ3aXNlLlxuJiM0MzsgKi9cbiYjNDM7Ym9vbCBycHNfbGxjX2NoZWNrKHUzMiBvbGRfdmFsLCB1MzIgbmV3X3ZhbClcbiYjNDM7e1xuJiM0MztcdHUzMiBvbGRfY3B1ID0gb2xkX3ZhbCBcdTAwMjYgfm5ldF9ob3RkYXRhLnJwc19jcHVfbWFzaztcbiYjNDM7XHR1MzIgbmV3X2NwdSA9IG5ld192YWwgXHUwMDI2IH5uZXRfaG90ZGF0YS5ycHNfY3B1X21hc2s7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUlBTIExMQyBBZmZpbml0eSBGZWF0dXJlOlxuJiM0MztcdCAqIFJlZHVjZSBSRlMvQVJGUyBmbG93IHVwZGF0ZXMgYnkgY2hlY2tpbmcgTExDIGFmZmluaXR5LlxuJiM0MztcdCAqXG4mIzQzO1x0ICogRnJlcXVlbnQgZmxvdyB0YWJsZSB1cGRhdGVzIGNhbiB0cmlnZ2VyIGNvbnN0YW50IGhhcmR3YXJlIHN0ZWVyaW5nXG4mIzQzO1x0ICogcmVjb25maWd1cmF0aW9ucyAoZS5nLiwgbmRvX3J4X2Zsb3dfc3RlZXIpLCBsZWFkaW5nIHRvIHNpZ25pZmljYW50XG4mIzQzO1x0ICogY29udGVudGlvbiBvbiBkcml2ZXIgaW50ZXJuYWwgbG9ja3MgKGxpa2UgbWx4NSYjMzk7cyBhcmZzX2xvY2spLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogVGhpcyBzdHJhdGVneSBvbmx5IHVwZGF0ZXMgdGhlIGZsb3cgcmVjb3JkIGlmIGl0IG1pZ3JhdGVzIGFjcm9zcyBMTENcbiYjNDM7XHQgKiBib3VuZGFyaWVzLiBUaGlzIG1pbmltaXplcyBleHBlbnNpdmUgaGFyZHdhcmUgdXBkYXRlcyB3aGlsZSBwcmVzZXJ2aW5nXG4mIzQzO1x0ICogY2FjaGUgbG9jYWxpdHkgZm9yIHRoZSBhcHBsaWNhdGlvbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZycHNfZmVhdF9sbGNfYWZmaW5pdHkpKSB7XG4mIzQzO1x0XHQvKiBGb3JjZSB1cGRhdGUgaWYgdGhlIHJlY29yZGVkIENQVSBpcyBpbnZhbGlkIG9yIGhhcyBnb25lIG9mZmxpbmUgKi9cbiYjNDM7XHRcdGlmIChvbGRfY3B1IFx1MDAzZT0gbnJfY3B1X2lkcyB8fCAhY3B1X2FjdGl2ZShvbGRfY3B1KSlcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEZvcmNlIGFuIHVwZGF0ZSBpZiB0aGUgY3VycmVudCB0YXNrIGlzIG5vIGxvbmdlciBwZXJtaXR0ZWRcbiYjNDM7XHRcdCAqIHRvIHJ1biBvbiB0aGUgb2xkX2NwdS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKCFjcHVtYXNrX3Rlc3RfY3B1KG9sZF9jcHUsIGN1cnJlbnQtXHUwMDNlY3B1c19wdHIpKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogSWYgQ1BVcyBkbyBub3Qgc2hhcmUgYSBjYWNoZSwgYWxsb3cgdGhlIHVwZGF0ZSB0byBwcmV2ZW50XG4mIzQzO1x0XHQgKiBleHBlbnNpdmUgcmVtb3RlIG1lbW9yeSBhY2Nlc3NlcyBhbmQgY2FjaGUgbWlzc2VzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoIWNwdXNfc2hhcmVfY2FjaGUob2xkX2NwdSwgbmV3X2NwdSkpXG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuICNpZmRlZiBDT05GSUdfUkZTX0FDQ0VMXG4gXG4gLyoqXG5AQCAtNTI2Myw2ICYjNDM7NTMxNCwyOCBAQCBzdGF0aWMgdm9pZCBycHNfdHJpZ2dlcl9zb2Z0aXJxKHZvaWQgKmRhdGEpXG4gXG4gI2VuZGlmIC8qIENPTkZJR19SUFMgKi9cbiBcbiYjNDM7dm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKF9fdTMyIGhhc2gpXG4mIzQzO3tcbiYjNDM7I2lmZGVmIENPTkZJR19SUFNcbiYjNDM7XHRpZiAoIXJmc19pc19uZWVkZWQoKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0X3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goaGFzaCk7XG4mIzQzOyNlbmRpZlxuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0woc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaCk7XG4mIzQzO1xuJiM0Mzt2b2lkIHNvY2tfcnBzX3JlY29yZF9mbG93KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbiYjNDM7e1xuJiM0MzsjaWZkZWYgQ09ORklHX1JQU1xuJiM0MztcdGlmICghcmZzX2lzX25lZWRlZCgpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRfc29ja19ycHNfcmVjb3JkX2Zsb3coc2spO1xuJiM0MzsjZW5kaWZcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHNvY2tfcnBzX3JlY29yZF9mbG93KTtcbiYjNDM7XG4gLyogQ2FsbGVkIGZyb20gaGFyZGlycSAoSVBJKSBjb250ZXh0ICovXG4gc3RhdGljIHZvaWQgdHJpZ2dlcl9yeF9zb2Z0aXJxKHZvaWQgKmRhdGEpXG4ge1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jIGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmNcbmluZGV4IGI1MDg2MThiZmMxMjMuLmI2ZDRlYmNiYjZhNjggMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmNcbkBAIC0yMTAsNiAmIzQzOzIxMCwzMyBAQCBzdGF0aWMgaW50IHJwc19zb2NrX2Zsb3dfc3lzY3RsKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4gXHRrdmZyZWVfcmN1X21pZ2h0c2xlZXAodG9mcmVlKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBycHNfZmVhdF9sbGNfYWZmaW5pdHlfc3lzY3RsKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4mIzQzO1x0XHRcdFx0XHR2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxuJiM0Mzt7XG4mIzQzO1x0dTggY3Vycl9zdGF0ZTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdG1wID0ge1xuJiM0MztcdFx0LmRhdGEgPSBcdTAwMjZjdXJyX3N0YXRlLFxuJiM0MztcdFx0Lm1heGxlbiA9IHNpemVvZihjdXJyX3N0YXRlKSxcbiYjNDM7XHRcdC5tb2RlID0gdGFibGUtXHUwMDNlbW9kZSxcbiYjNDM7XHRcdC5leHRyYTEgPSB0YWJsZS1cdTAwM2VleHRyYTEsXG4mIzQzO1x0XHQuZXh0cmEyID0gdGFibGUtXHUwMDNlZXh0cmEyXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0Y3Vycl9zdGF0ZSA9IHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2cnBzX2ZlYXRfbGxjX2FmZmluaXR5KSA/IDEgOiAwO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwcm9jX2RvdTh2ZWNfbWlubWF4KFx1MDAyNnRtcCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XG4mIzQzO1x0aWYgKHdyaXRlIFx1MDAyNlx1MDAyNiByZXQgPT0gMCkge1xuJiM0MztcdFx0aWYgKGN1cnJfc3RhdGUgXHUwMDI2XHUwMDI2ICFzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnJwc19mZWF0X2xsY19hZmZpbml0eSkpXG4mIzQzO1x0XHRcdHN0YXRpY19icmFuY2hfZW5hYmxlKFx1MDAyNnJwc19mZWF0X2xsY19hZmZpbml0eSk7XG4mIzQzO1x0XHRlbHNlIGlmICghY3Vycl9zdGF0ZSBcdTAwMjZcdTAwMjYgc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZycHNfZmVhdF9sbGNfYWZmaW5pdHkpKVxuJiM0MztcdFx0XHRzdGF0aWNfYnJhbmNoX2Rpc2FibGUoXHUwMDI2cnBzX2ZlYXRfbGxjX2FmZmluaXR5KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gI2VuZGlmIC8qIENPTkZJR19SUFMgKi9cbiBcbiAjaWZkZWYgQ09ORklHX05FVF9GTE9XX0xJTUlUXG5AQCAtNTU0LDYgJiM0Mzs1ODEsMTQgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmV0X2NvcmVfdGFibGVbXSA9IHtcbiBcdFx0Lm1vZGVcdFx0PSAwNjQ0LFxuIFx0XHQucHJvY19oYW5kbGVyXHQ9IHJwc19zb2NrX2Zsb3dfc3lzY3RsXG4gXHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdC5wcm9jbmFtZSAgID0gXCYjMzQ7cnBzX2ZlYXRfbGxjX2FmZmluaXR5XCYjMzQ7LFxuJiM0MztcdFx0Lm1heGxlbiAgICAgPSBzaXplb2YodTgpLFxuJiM0MztcdFx0Lm1vZGUgICAgICAgPSAwNjQ0LFxuJiM0MztcdFx0LnByb2NfaGFuZGxlciAgID0gcnBzX2ZlYXRfbGxjX2FmZmluaXR5X3N5c2N0bCxcbiYjNDM7XHRcdC5leHRyYTEgICAgID0gU1lTQ1RMX1pFUk8sXG4mIzQzO1x0XHQuZXh0cmEyICAgICA9IFNZU0NUTF9PTkVcbiYjNDM7XHR9LFxuICNlbmRpZlxuICNpZmRlZiBDT05GSUdfTkVUX0ZMT1dfTElNSVRcbiBcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMzoxMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UlBTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnBzX2xsY19jaGVjayYjMzQ7LAogICAgJiMzNDtycHNfZmVhdF9sbGNfYWZmaW5pdHlfc3lzY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3lzY3RsIGBuZXQuY29yZS5ycHNfZmVhdF9sbGNfYWZmaW5pdHlgIGFuZCBhIG5ldyBmdW5jdGlvbiBgcnBzX2xsY19jaGVja2AgdG8gb3B0aW1pemUgUlBTIChSZWNlaXZlIFBhY2tldCBTdGVlcmluZykgZmxvdyB0YWJsZSB1cGRhdGVzIGJhc2VkIG9uIExMQyAoTGFzdCBMZXZlbCBDYWNoZSkgYWZmaW5pdHkuIFRoaXMgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgdmlhIHN5c2N0bCBjb25maWd1cmF0aW9uIGFuZCBub3JtYWwgbmV0d29yayB0cmFmZmljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTRkMDdmYjcyNzczMzE2MTQzOGYwODk2MDU2MzM2OTZlMDg2YzMwMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDQgMDM6MTI6MDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ycHMuaCBiL2luY2x1ZGUvbmV0L3Jwcy5oCmluZGV4IGUzM2M2YTJmYThiYmMuLjZkYWNmMDg4OGE2YzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3Jwcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3Jwcy5oCkBAIC0xMiw2ICYjNDM7MTIsNyBAQAogCiBleHRlcm4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcnBzX25lZWRlZDsKIGV4dGVybiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSByZnNfbmVlZGVkOwomIzQzO2V4dGVybiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBycHNfZmVhdF9sbGNfYWZmaW5pdHk7CiAKIC8qCiAgKiBUaGlzIHN0cnVjdHVyZSBob2xkcyBhbiBSUFMgbWFwIHdoaWNoIGNhbiBiZSBvZiB2YXJpYWJsZSBsZW5ndGguICBUaGUKQEAgLTU1LDExICYjNDM7NTYsMTQgQEAgc3RydWN0IHJwc19zb2NrX2Zsb3dfdGFibGUgewogCiAjZGVmaW5lIFJQU19OT19DUFUgMHhmZmZmCiAKJiM0Mztib29sIHJwc19sbGNfY2hlY2sodTMyIG9sZF92YWwsIHUzMiBuZXdfdmFsKTsKJiM0MzsKIHN0YXRpYyBpbmxpbmUgdm9pZCBycHNfcmVjb3JkX3NvY2tfZmxvdyhycHNfdGFnX3B0ciB0YWdfcHRyLCB1MzIgaGFzaCkKIHsKIAl1bnNpZ25lZCBpbnQgaW5kZXggPSBoYXNoICZhbXA7IHJwc190YWdfdG9fbWFzayh0YWdfcHRyKTsKIAl1MzIgdmFsID0gaGFzaCAmYW1wOyB+bmV0X2hvdGRhdGEucnBzX2NwdV9tYXNrOwogCXN0cnVjdCBycHNfc29ja19mbG93X3RhYmxlICp0YWJsZTsKJiM0MzsJdTMyIG9sZF92YWw7CiAKIAkvKiBXZSBvbmx5IGdpdmUgYSBoaW50LCBwcmVlbXB0aW9uIGNhbiBjaGFuZ2UgQ1BVIHVuZGVyIHVzICovCiAJdmFsIHw9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CkBAIC02OCw3ICYjNDM7NzIsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcnBzX3JlY29yZF9zb2NrX2Zsb3cocnBzX3RhZ19wdHIgdGFnX3B0ciwgdTMyIGhhc2gpCiAJLyogVGhlIGZvbGxvd2luZyBXUklURV9PTkNFKCkgaXMgcGFpcmVkIHdpdGggdGhlIFJFQURfT05DRSgpCiAJICogaGVyZSwgYW5kIGFub3RoZXIgb25lIGluIGdldF9ycHNfY3B1KCkuCiAJICovCi0JaWYgKFJFQURfT05DRSh0YWJsZVtpbmRleF0uZW50KSAhPSB2YWwpCiYjNDM7CW9sZF92YWwgPSBSRUFEX09OQ0UodGFibGVbaW5kZXhdLmVudCk7CiYjNDM7CWlmIChvbGRfdmFsICE9IHZhbCAmYW1wOyZhbXA7IHJwc19sbGNfY2hlY2sob2xkX3ZhbCwgdmFsKSkKIAkJV1JJVEVfT05DRSh0YWJsZVtpbmRleF0uZW50LCB2YWwpOwogfQogCkBAIC0xMzYsMjUgJiM0MzsxNDEsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcmZzX2lzX25lZWRlZCh2b2lkKQogI2VuZGlmCiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKF9fdTMyIGhhc2gpCi17Ci0jaWZkZWYgQ09ORklHX1JQUwotCWlmICghcmZzX2lzX25lZWRlZCgpKQotCQlyZXR1cm47Ci0KLQlfc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChoYXNoKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKQotewotI2lmZGVmIENPTkZJR19SUFMKLQlpZiAoIXJmc19pc19uZWVkZWQoKSkKLQkJcmV0dXJuOwotCi0JX3NvY2tfcnBzX3JlY29yZF9mbG93KHNrKTsKLSNlbmRpZgotfQomIzQzO3ZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKTsKJiM0Mzt2b2lkIHNvY2tfcnBzX3JlY29yZF9mbG93KGNvbnN0IHN0cnVjdCBzb2NrICpzayk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzb2NrX3Jwc19kZWxldGVfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spCiB7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IDI2YWM4ZWI5YjI1OWQuLjUzYmFkM2M4MDFkYzQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jCkBAIC00OTk3LDYgJiM0Mzs0OTk3LDggQEAgc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcnBzX25lZWRlZCBfX3JlYWRfbW9zdGx5OwogRVhQT1JUX1NZTUJPTChycHNfbmVlZGVkKTsKIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJmc19uZWVkZWQgX19yZWFkX21vc3RseTsKIEVYUE9SVF9TWU1CT0wocmZzX25lZWRlZCk7CiYjNDM7c3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcnBzX2ZlYXRfbGxjX2FmZmluaXR5IF9fcmVhZF9tb3N0bHk7CiYjNDM7RVhQT1JUX1NZTUJPTChycHNfZmVhdF9sbGNfYWZmaW5pdHkpOwogCiBzdGF0aWMgdTMyIHJmc19zbG90KHUzMiBoYXNoLCBycHNfdGFnX3B0ciB0YWdfcHRyKQogewpAQCAtNTIwOCw2ICYjNDM7NTIxMCw1NSBAQCBzdGF0aWMgaW50IGdldF9ycHNfY3B1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsCiAJcmV0dXJuIGNwdTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHJwc19sbGNfY2hlY2sgLSBkZXRlcm1pbmUgaWYgUlBTIGZsb3cgdGFibGUgc2hvdWxkIGJlIHVwZGF0ZWQuCiYjNDM7ICogQG9sZF92YWw6IHByZXZpb3VzIGZsb3cgcmVjb3JkIHZhbHVlLgomIzQzOyAqIEBuZXdfdmFsOiB0YXJnZXQgZmxvdyByZWNvcmQgdmFsdWUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgdGhlIHJlY29yZCBuZWVkcyBhbiB1cGRhdGUsIGZhbHNlIG90aGVyd2lzZS4KJiM0MzsgKi8KJiM0Mztib29sIHJwc19sbGNfY2hlY2sodTMyIG9sZF92YWwsIHUzMiBuZXdfdmFsKQomIzQzO3sKJiM0MzsJdTMyIG9sZF9jcHUgPSBvbGRfdmFsICZhbXA7IH5uZXRfaG90ZGF0YS5ycHNfY3B1X21hc2s7CiYjNDM7CXUzMiBuZXdfY3B1ID0gbmV3X3ZhbCAmYW1wOyB+bmV0X2hvdGRhdGEucnBzX2NwdV9tYXNrOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSUFMgTExDIEFmZmluaXR5IEZlYXR1cmU6CiYjNDM7CSAqIFJlZHVjZSBSRlMvQVJGUyBmbG93IHVwZGF0ZXMgYnkgY2hlY2tpbmcgTExDIGFmZmluaXR5LgomIzQzOwkgKgomIzQzOwkgKiBGcmVxdWVudCBmbG93IHRhYmxlIHVwZGF0ZXMgY2FuIHRyaWdnZXIgY29uc3RhbnQgaGFyZHdhcmUgc3RlZXJpbmcKJiM0MzsJICogcmVjb25maWd1cmF0aW9ucyAoZS5nLiwgbmRvX3J4X2Zsb3dfc3RlZXIpLCBsZWFkaW5nIHRvIHNpZ25pZmljYW50CiYjNDM7CSAqIGNvbnRlbnRpb24gb24gZHJpdmVyIGludGVybmFsIGxvY2tzIChsaWtlIG1seDUmIzM5O3MgYXJmc19sb2NrKS4KJiM0MzsJICoKJiM0MzsJICogVGhpcyBzdHJhdGVneSBvbmx5IHVwZGF0ZXMgdGhlIGZsb3cgcmVjb3JkIGlmIGl0IG1pZ3JhdGVzIGFjcm9zcyBMTEMKJiM0MzsJICogYm91bmRhcmllcy4gVGhpcyBtaW5pbWl6ZXMgZXhwZW5zaXZlIGhhcmR3YXJlIHVwZGF0ZXMgd2hpbGUgcHJlc2VydmluZwomIzQzOwkgKiBjYWNoZSBsb2NhbGl0eSBmb3IgdGhlIGFwcGxpY2F0aW9uLgomIzQzOwkgKi8KJiM0MzsJaWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoJmFtcDtycHNfZmVhdF9sbGNfYWZmaW5pdHkpKSB7CiYjNDM7CQkvKiBGb3JjZSB1cGRhdGUgaWYgdGhlIHJlY29yZGVkIENQVSBpcyBpbnZhbGlkIG9yIGhhcyBnb25lIG9mZmxpbmUgKi8KJiM0MzsJCWlmIChvbGRfY3B1ICZndDs9IG5yX2NwdV9pZHMgfHwgIWNwdV9hY3RpdmUob2xkX2NwdSkpCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogRm9yY2UgYW4gdXBkYXRlIGlmIHRoZSBjdXJyZW50IHRhc2sgaXMgbm8gbG9uZ2VyIHBlcm1pdHRlZAomIzQzOwkJICogdG8gcnVuIG9uIHRoZSBvbGRfY3B1LgomIzQzOwkJICovCiYjNDM7CQlpZiAoIWNwdW1hc2tfdGVzdF9jcHUob2xkX2NwdSwgY3VycmVudC0mZ3Q7Y3B1c19wdHIpKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIElmIENQVXMgZG8gbm90IHNoYXJlIGEgY2FjaGUsIGFsbG93IHRoZSB1cGRhdGUgdG8gcHJldmVudAomIzQzOwkJICogZXhwZW5zaXZlIHJlbW90ZSBtZW1vcnkgYWNjZXNzZXMgYW5kIGNhY2hlIG1pc3Nlcy4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCFjcHVzX3NoYXJlX2NhY2hlKG9sZF9jcHUsIG5ld19jcHUpKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKICNpZmRlZiBDT05GSUdfUkZTX0FDQ0VMCiAKIC8qKgpAQCAtNTI2Myw2ICYjNDM7NTMxNCwyOCBAQCBzdGF0aWMgdm9pZCBycHNfdHJpZ2dlcl9zb2Z0aXJxKHZvaWQgKmRhdGEpCiAKICNlbmRpZiAvKiBDT05GSUdfUlBTICovCiAKJiM0Mzt2b2lkIHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goX191MzIgaGFzaCkKJiM0Mzt7CiYjNDM7I2lmZGVmIENPTkZJR19SUFMKJiM0MzsJaWYgKCFyZnNfaXNfbmVlZGVkKCkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CV9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKGhhc2gpOwomIzQzOyNlbmRpZgomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2gpOwomIzQzOwomIzQzO3ZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsjaWZkZWYgQ09ORklHX1JQUwomIzQzOwlpZiAoIXJmc19pc19uZWVkZWQoKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJX3NvY2tfcnBzX3JlY29yZF9mbG93KHNrKTsKJiM0MzsjZW5kaWYKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTChzb2NrX3Jwc19yZWNvcmRfZmxvdyk7CiYjNDM7CiAvKiBDYWxsZWQgZnJvbSBoYXJkaXJxIChJUEkpIGNvbnRleHQgKi8KIHN0YXRpYyB2b2lkIHRyaWdnZXJfcnhfc29mdGlycSh2b2lkICpkYXRhKQogewpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMgYi9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYwppbmRleCBiNTA4NjE4YmZjMTIzLi5iNmQ0ZWJjYmI2YTY4IDEwMDY0NAotLS0gYS9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYwpAQCAtMjEwLDYgJiM0MzsyMTAsMzMgQEAgc3RhdGljIGludCBycHNfc29ja19mbG93X3N5c2N0bChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLAogCWt2ZnJlZV9yY3VfbWlnaHRzbGVlcCh0b2ZyZWUpOwogCXJldHVybiByZXQ7CiB9CiYjNDM7CiYjNDM7c3RhdGljIGludCBycHNfZmVhdF9sbGNfYWZmaW5pdHlfc3lzY3RsKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsCiYjNDM7CQkJCQl2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKQomIzQzO3sKJiM0MzsJdTggY3Vycl9zdGF0ZTsKJiM0MzsJaW50IHJldDsKJiM0MzsJY29uc3Qgc3RydWN0IGN0bF90YWJsZSB0bXAgPSB7CiYjNDM7CQkuZGF0YSA9ICZhbXA7Y3Vycl9zdGF0ZSwKJiM0MzsJCS5tYXhsZW4gPSBzaXplb2YoY3Vycl9zdGF0ZSksCiYjNDM7CQkubW9kZSA9IHRhYmxlLSZndDttb2RlLAomIzQzOwkJLmV4dHJhMSA9IHRhYmxlLSZndDtleHRyYTEsCiYjNDM7CQkuZXh0cmEyID0gdGFibGUtJmd0O2V4dHJhMgomIzQzOwl9OwomIzQzOwomIzQzOwljdXJyX3N0YXRlID0gc3RhdGljX2JyYW5jaF91bmxpa2VseSgmYW1wO3Jwc19mZWF0X2xsY19hZmZpbml0eSkgPyAxIDogMDsKJiM0MzsKJiM0MzsJcmV0ID0gcHJvY19kb3U4dmVjX21pbm1heCgmYW1wO3RtcCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7CiYjNDM7CWlmICh3cml0ZSAmYW1wOyZhbXA7IHJldCA9PSAwKSB7CiYjNDM7CQlpZiAoY3Vycl9zdGF0ZSAmYW1wOyZhbXA7ICFzdGF0aWNfYnJhbmNoX3VubGlrZWx5KCZhbXA7cnBzX2ZlYXRfbGxjX2FmZmluaXR5KSkKJiM0MzsJCQlzdGF0aWNfYnJhbmNoX2VuYWJsZSgmYW1wO3Jwc19mZWF0X2xsY19hZmZpbml0eSk7CiYjNDM7CQllbHNlIGlmICghY3Vycl9zdGF0ZSAmYW1wOyZhbXA7IHN0YXRpY19icmFuY2hfdW5saWtlbHkoJmFtcDtycHNfZmVhdF9sbGNfYWZmaW5pdHkpKQomIzQzOwkJCXN0YXRpY19icmFuY2hfZGlzYWJsZSgmYW1wO3Jwc19mZWF0X2xsY19hZmZpbml0eSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiAjZW5kaWYgLyogQ09ORklHX1JQUyAqLwogCiAjaWZkZWYgQ09ORklHX05FVF9GTE9XX0xJTUlUCkBAIC01NTQsNiAmIzQzOzU4MSwxNCBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBuZXRfY29yZV90YWJsZVtdID0gewogCQkubW9kZQkJPSAwNjQ0LAogCQkucHJvY19oYW5kbGVyCT0gcnBzX3NvY2tfZmxvd19zeXNjdGwKIAl9LAomIzQzOwl7CiYjNDM7CQkucHJvY25hbWUgICA9ICYjMzQ7cnBzX2ZlYXRfbGxjX2FmZmluaXR5JiMzNDssCiYjNDM7CQkubWF4bGVuICAgICA9IHNpemVvZih1OCksCiYjNDM7CQkubW9kZSAgICAgICA9IDA2NDQsCiYjNDM7CQkucHJvY19oYW5kbGVyICAgPSBycHNfZmVhdF9sbGNfYWZmaW5pdHlfc3lzY3RsLAomIzQzOwkJLmV4dHJhMSAgICAgPSBTWVNDVExfWkVSTywKJiM0MzsJCS5leHRyYTIgICAgID0gU1lTQ1RMX09ORQomIzQzOwl9LAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX05FVF9GTE9XX0xJTUlUCiAJewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzA4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUlBTIExMQyBBZmZpbml0eSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIGludHJvZHVjaW5nIGEgbmV3IHN5c2N0bCwgYG5ldC5jb3JlLnJwc19mZWF0X2xsY19hZmZpbml0eWAsIGFuZCBhIG5ldyBmZWF0dXJlIGZvciBSUFMsIHdoaWNoIGlzIGludHJpZ3VpbmcuIEkgc2VlIHRoZSBjaGFuZ2VzIGFyZSB0b3VjaGluZyBzb21lIGtleSBuZXR3b3JraW5nIGZpbGVzOiBgaW5jbHVkZS9uZXQvcnBzLmhgLCBgbmV0L2NvcmUvZGV2LmNgLCBhbmQgYG5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jYC4gVGhpcyBMTEMgYWZmaW5pdHkgdGhpbmcgaXMgYWJvdXQgY2hlY2tpbmcgaWYgYW4gUlBTIGZsb3cgdGFibGUgdXBkYXRlIGlzIG5lY2Vzc2FyeSwgYmFzZWQgb24gdGhhdCBjYWNoZSBsZXZlbCBhZmZpbml0eSwgc28gcG90ZW50aWFsbHkgaW1wcm92aW5nIHBlcmZvcm1hbmNlIGJ5IGtlZXBpbmcgZmxvd3Mgb24gdGhlIHNhbWUgY29yZS4KClRoZSBwYXRjaCBhZGRzIGEgbmV3IGZ1bmN0aW9uLCBgcnBzX2xsY19jaGVja2AsIGluIGBuZXQvY29yZS9kZXYuY2AsIHdoaWNoIHNlZW1zIHRvIGJlIHRoZSBjb3JlIG9mIHRoaXMgbmV3IGZlYXR1cmUuIEl0JiMzOTtzIHVzaW5nIGBzdGF0aWNfYnJhbmNoX3VubGlrZWx5KCZhbXA7cnBzX2ZlYXRfbGxjX2FmZmluaXR5KWAsIHNvIHRoaXMgYHJwc19mZWF0X2xsY19hZmZpbml0eV9zeXNjdGxgIGhhbmRsZXIgbXVzdCBiZSBob3cgd2UgZW5hYmxlIG9yIGRpc2FibGUgdGhpcyBjb25kaXRpb25hbCBiZWhhdmlvci4gSW50ZXJlc3RpbmcuIEFuZCBmcm9tIHdoYXQgSSBzZWUsIGBycHNfbGxjX2NoZWNrYCBnZXRzIGNhbGxlZCBmcm9tIGBycHNfcmVjb3JkX3NvY2tfZmxvd2AgaW4gYGluY2x1ZGUvbmV0L3Jwcy5oYCwgd2hpY2ggaXMgYSBrZXkgcGFydCBvZiBob3cgcGFja2V0cyBhcmUgcm91dGVkIHRvIGNvcmVzLiBUaGlzIHdob2xlIHRoaW5nIHRyaWNrbGVzIGRvd24gdGhyb3VnaCBhIGZldyBmdW5jdGlvbnM6IGBfc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaGAsIGBfc29ja19ycHNfcmVjb3JkX2Zsb3dgLCBhbmQgdGhlbiB0aGUgdW4taW5saW5lZCB2ZXJzaW9ucyBpbiBgbmV0L2NvcmUvZGV2LmNgLgoKUmlnaHQsIHRpbWUgdG8gZXZhbHVhdGUgaWYgdGhpcyBpcyByaXBlIGZvciBmdXp6aW5nLiBHaXZlbiB0aGUgbW9kaWZpY2F0aW9uIHRvIGNvcmUgbmV0d29ya2luZyBsb2dpYyDigJMgUlBTLCBzcGVjaWZpY2FsbHkg4oCTIGFuZCB0aGUgYWRkaXRpb24gb2YgdGhhdCBuZXcgc3lzY3RsLCBteSBndXQgZmVlbGluZyBpcyB0aGF0IGl0JiMzOTtzIHdvcnRoIGEgc2hvdC4gVGhlIG5ldyBgcnBzX2xsY19jaGVja2AgZnVuY3Rpb24gaXMgZGVmaW5pdGVseSByZWFjaGFibGUgaWYgUlBTL1JGUyBpcyBlbmFibGVkLCBhbmQgdGhlIGBycHNfZmVhdF9sbGNfYWZmaW5pdHlfc3lzY3RsYCBoYW5kbGVyIGlzIGFsc28gZXhwb3NlZC4gVGhhdOKAmXMgZW5vdWdoIHRvIHBlYWsgbXkgaW50ZXJlc3QuCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGNoZWNrIHRoZSBgI2lmZGVmIENPTkZJR19SUFNgIGd1YXJkcywgc28gSSYjMzk7bGwgcG9rZSBhcm91bmQgYG5ldC9jb3JlL2Rldi5jYCBhbmQgYG5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jYCB0byBjb25maXJtIHdoYXQmIzM5O3MgbmVlZGVkLiBUaW1lIHRvIGRpZyBpbiBhbmQgZmluZCB0aG9zZSBpbml0aWFsIGNvbmZpZyByZXF1aXJlbWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDM6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1JQUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz0yMzE9c3RhdGljIGlubGluZSB2b2lkIGJhY2tsb2dfbG9ja19pcnFfc2F2ZShzdHJ1Y3Qgc29mdG5ldF9kYXRhICpzZCxcbi0tXG5uZXQvY29yZS9kZXYuYy0yMzctXHRcdGxvY2FsX2lycV9zYXZlKCpmbGFncyk7XG5uZXQvY29yZS9kZXYuYzoyMzg6XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19SUFMpIHx8IHVzZV9iYWNrbG9nX3RocmVhZHMoKSlcbm5ldC9jb3JlL2Rldi5jLTIzOS1cdFx0XHRzcGluX2xvY2soXHUwMDI2c2QtXHUwMDNlaW5wdXRfcGt0X3F1ZXVlLmxvY2spO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTI0Mz1zdGF0aWMgaW5saW5lIHZvaWQgYmFja2xvZ19sb2NrX2lycV9kaXNhYmxlKHN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkKVxubmV0L2NvcmUvZGV2LmMtMjQ0LXtcbm5ldC9jb3JlL2Rldi5jOjI0NTpcdGlmIChJU19FTkFCTEVEKENPTkZJR19SUFMpIHx8IHVzZV9iYWNrbG9nX3RocmVhZHMoKSlcbm5ldC9jb3JlL2Rldi5jLTI0Ni1cdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZzZC1cdTAwM2VpbnB1dF9wa3RfcXVldWUubG9jayk7XG4tLVxubmV0L2NvcmUvZGV2LmM9MjUxPXN0YXRpYyBpbmxpbmUgdm9pZCBiYWNrbG9nX3VubG9ja19pcnFfcmVzdG9yZShzdHJ1Y3Qgc29mdG5ldF9kYXRhICpzZCxcbi0tXG5uZXQvY29yZS9kZXYuYy0yNTYtXHR9IGVsc2Uge1xubmV0L2NvcmUvZGV2LmM6MjU3Olx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUlBTKSB8fCB1c2VfYmFja2xvZ190aHJlYWRzKCkpXG5uZXQvY29yZS9kZXYuYy0yNTgtXHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2c2QtXHUwMDNlaW5wdXRfcGt0X3F1ZXVlLmxvY2spO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTI2Mz1zdGF0aWMgaW5saW5lIHZvaWQgYmFja2xvZ191bmxvY2tfaXJxX2VuYWJsZShzdHJ1Y3Qgc29mdG5ldF9kYXRhICpzZClcbm5ldC9jb3JlL2Rldi5jLTI2NC17XG5uZXQvY29yZS9kZXYuYzoyNjU6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUlBTKSB8fCB1c2VfYmFja2xvZ190aHJlYWRzKCkpXG5uZXQvY29yZS9kZXYuYy0yNjYtXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZzZC1cdTAwM2VpbnB1dF9wa3RfcXVldWUubG9jayk7XG4tLVxubmV0L2NvcmUvZGV2LmM9NDk1OD1zdGF0aWMgaW5saW5lIHZvaWQgX19fX25hcGlfc2NoZWR1bGUoc3RydWN0IHNvZnRuZXRfZGF0YSAqc2QsXG4tLVxubmV0L2NvcmUvZGV2LmMtNDk5My1cbm5ldC9jb3JlL2Rldi5jOjQ5OTQ6I2lmZGVmIENPTkZJR19SUFNcbm5ldC9jb3JlL2Rldi5jLTQ5OTUtXG4tLVxubmV0L2NvcmUvZGV2LmM9NTMwNj1zdGF0aWMgdm9pZCBycHNfdHJpZ2dlcl9zb2Z0aXJxKHZvaWQgKmRhdGEpXG4tLVxubmV0L2NvcmUvZGV2LmMtNTMxNC1cbm5ldC9jb3JlL2Rldi5jOjUzMTU6I2VuZGlmIC8qIENPTkZJR19SUFMgKi9cbm5ldC9jb3JlL2Rldi5jLTUzMTYtXG5uZXQvY29yZS9kZXYuYz01MzE3PXZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKVxubmV0L2NvcmUvZGV2LmMtNTMxOC17XG5uZXQvY29yZS9kZXYuYzo1MzE5OiNpZmRlZiBDT05GSUdfUlBTXG5uZXQvY29yZS9kZXYuYy01MzIwLVx0aWYgKCFyZnNfaXNfbmVlZGVkKCkpXG4tLVxubmV0L2NvcmUvZGV2LmM9NTMyOD12b2lkIHNvY2tfcnBzX3JlY29yZF9mbG93KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbm5ldC9jb3JlL2Rldi5jLTUzMjkte1xubmV0L2NvcmUvZGV2LmM6NTMzMDojaWZkZWYgQ09ORklHX1JQU1xubmV0L2NvcmUvZGV2LmMtNTMzMS1cdGlmICghcmZzX2lzX25lZWRlZCgpKVxuLS1cbm5ldC9jb3JlL2Rldi5jPTUzNTg9c3RhdGljIHZvaWQgbmFwaV9zY2hlZHVsZV9ycHMoc3RydWN0IHNvZnRuZXRfZGF0YSAqc2QpXG4tLVxubmV0L2NvcmUvZGV2LmMtNTM2MS1cbm5ldC9jb3JlL2Rldi5jOjUzNjI6I2lmZGVmIENPTkZJR19SUFNcbm5ldC9jb3JlL2Rldi5jLTUzNjMtXHRpZiAoc2QgIT0gbXlzZCkge1xuLS1cbm5ldC9jb3JlL2Rldi5jLTUzNzgtXHR9XG5uZXQvY29yZS9kZXYuYzo1Mzc5OiNlbmRpZiAvKiBDT05GSUdfUlBTICovXG5uZXQvY29yZS9kZXYuYy01MzgwLVx0X19uYXBpX3NjaGVkdWxlX2lycW9mZihcdTAwMjZteXNkLVx1MDAzZWJhY2tsb2cpO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTU3NjY9c3RhdGljIGludCBuZXRpZl9yeF9pbnRlcm5hbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTU3NzMtXG5uZXQvY29yZS9kZXYuYzo1Nzc0OiNpZmRlZiBDT05GSUdfUlBTXG5uZXQvY29yZS9kZXYuYy01Nzc1LVx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2cnBzX25lZWRlZCkpIHtcbi0tXG5uZXQvY29yZS9kZXYuYz02NDUzPXN0YXRpYyBpbnQgbmV0aWZfcmVjZWl2ZV9za2JfaW50ZXJuYWwoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9kZXYuYy02NDYyLVx0cmN1X3JlYWRfbG9jaygpO1xubmV0L2NvcmUvZGV2LmM6NjQ2MzojaWZkZWYgQ09ORklHX1JQU1xubmV0L2NvcmUvZGV2LmMtNjQ2NC1cdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnJwc19uZWVkZWQpKSB7XG4tLVxubmV0L2NvcmUvZGV2LmM9NjQ4MD12b2lkIG5ldGlmX3JlY2VpdmVfc2tiX2xpc3RfaW50ZXJuYWwoc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbi0tXG5uZXQvY29yZS9kZXYuYy02NDk0LVx0cmN1X3JlYWRfbG9jaygpO1xubmV0L2NvcmUvZGV2LmM6NjQ5NTojaWZkZWYgQ09ORklHX1JQU1xubmV0L2NvcmUvZGV2LmMtNjQ5Ni1cdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnJwc19uZWVkZWQpKSB7XG4tLVxubmV0L2NvcmUvZGV2LmM9NjYwMT1zdGF0aWMgYm9vbCBmbHVzaF9yZXF1aXJlZChpbnQgY3B1KVxubmV0L2NvcmUvZGV2LmMtNjYwMi17XG5uZXQvY29yZS9kZXYuYzo2NjAzOiNpZiBJU19FTkFCTEVEKENPTkZJR19SUFMpXG5uZXQvY29yZS9kZXYuYy02NjA0LVx0c3RydWN0IHNvZnRuZXRfZGF0YSAqc2QgPSBcdTAwMjZwZXJfY3B1KHNvZnRuZXRfZGF0YSwgY3B1KTtcbi0tXG5uZXQvY29yZS9kZXYuYz02Njc1PXN0YXRpYyB2b2lkIG5ldF9ycHNfc2VuZF9pcGkoc3RydWN0IHNvZnRuZXRfZGF0YSAqcmVtc2QpXG5uZXQvY29yZS9kZXYuYy02Njc2LXtcbm5ldC9jb3JlL2Rldi5jOjY2Nzc6I2lmZGVmIENPTkZJR19SUFNcbm5ldC9jb3JlL2Rldi5jLTY2NzgtXHR3aGlsZSAocmVtc2QpIHtcbi0tXG5uZXQvY29yZS9kZXYuYz02NjkyPXN0YXRpYyB2b2lkIG5ldF9ycHNfYWN0aW9uX2FuZF9pcnFfZW5hYmxlKHN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkKVxubmV0L2NvcmUvZGV2LmMtNjY5My17XG5uZXQvY29yZS9kZXYuYzo2Njk0OiNpZmRlZiBDT05GSUdfUlBTXG5uZXQvY29yZS9kZXYuYy02Njk1LVx0c3RydWN0IHNvZnRuZXRfZGF0YSAqcmVtc2QgPSBzZC1cdTAwM2VycHNfaXBpX2xpc3Q7XG4tLVxubmV0L2NvcmUvZGV2LmM9NjcwOT1zdGF0aWMgYm9vbCBzZF9oYXNfcnBzX2lwaV93YWl0aW5nKHN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkKVxubmV0L2NvcmUvZGV2LmMtNjcxMC17XG5uZXQvY29yZS9kZXYuYzo2NzExOiNpZmRlZiBDT05GSUdfUlBTXG5uZXQvY29yZS9kZXYuYy02NzEyLVx0cmV0dXJuICF1c2VfYmFja2xvZ190aHJlYWRzKCkgXHUwMDI2XHUwMDI2IHNkLVx1MDAzZXJwc19pcGlfbGlzdDtcbi0tXG5uZXQvY29yZS9kZXYuYz0xMjc4Mz1zdGF0aWMgaW50IGRldl9jcHVfZGVhZCh1bnNpZ25lZCBpbnQgb2xkY3B1KVxuLS1cbm5ldC9jb3JlL2Rldi5jLTEyODI5LVx0aWYgKCF1c2VfYmFja2xvZ190aHJlYWRzKCkpIHtcbm5ldC9jb3JlL2Rldi5jOjEyODMwOiNpZmRlZiBDT05GSUdfUlBTXG5uZXQvY29yZS9kZXYuYy0xMjgzMS1cdFx0cmVtc2QgPSBvbGRzZC1cdTAwM2VycHNfaXBpX2xpc3Q7XG4tLVxubmV0L2NvcmUvZGV2LmM9MTMzMDQ9c3RhdGljIGludCBfX2luaXQgbmV0X2Rldl9pbml0KHZvaWQpXG4tLVxubmV0L2NvcmUvZGV2LmMtMTMzNDEtXHRcdHNkLVx1MDAzZW91dHB1dF9xdWV1ZV90YWlscCA9IFx1MDAyNnNkLVx1MDAzZW91dHB1dF9xdWV1ZTtcbm5ldC9jb3JlL2Rldi5jOjEzMzQyOiNpZmRlZiBDT05GSUdfUlBTXG5uZXQvY29yZS9kZXYuYy0xMzM0My1cdFx0SU5JVF9DU0QoXHUwMDI2c2QtXHUwMDNlY3NkLCBycHNfdHJpZ2dlcl9zb2Z0aXJxLCBzZCk7XG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9OTUzPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzZnNfb3BzIHJ4X3F1ZXVlX3N5c2ZzX29wcyA9IHtcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy05NTctXG5uZXQvY29yZS9uZXQtc3lzZnMuYzo5NTg6I2lmZGVmIENPTkZJR19SUFNcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTk1OS1zdGF0aWMgc3NpemVfdCBzaG93X3Jwc19tYXAoc3RydWN0IG5ldGRldl9yeF9xdWV1ZSAqcXVldWUsIGNoYXIgKmJ1Zilcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0xMTMzPXN0YXRpYyBzdHJ1Y3QgcnhfcXVldWVfYXR0cmlidXRlIHJwc19kZXZfZmxvd190YWJsZV9jbnRfYXR0cmlidXRlIF9fcm9fYWZ0ZXJfaW5pdFxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTExMzUtXHRcdCBzaG93X3Jwc19kZXZfZmxvd190YWJsZV9jbnQsIHN0b3JlX3Jwc19kZXZfZmxvd190YWJsZV9jbnQpO1xubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTEzNjojZW5kaWYgLyogQ09ORklHX1JQUyAqL1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTEzNy1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTExMzg9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnJ4X3F1ZXVlX2RlZmF1bHRfYXR0cnNbXSBfX3JvX2FmdGVyX2luaXQgPSB7XG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMTM5OiNpZmRlZiBDT05GSUdfUlBTXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMTQwLVx0XHUwMDI2cnBzX2NwdXNfYXR0cmlidXRlLmF0dHIsXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTE0Nz1zdGF0aWMgdm9pZCByeF9xdWV1ZV9yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKVxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTExNDktXHRzdHJ1Y3QgbmV0ZGV2X3J4X3F1ZXVlICpxdWV1ZSA9IHRvX3J4X3F1ZXVlKGtvYmopO1xubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTE1MDojaWZkZWYgQ09ORklHX1JQU1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTE1MS1cdHJwc190YWdfcHRyIHRhZ19wdHI7XG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTE5Nj1zdGF0aWMgaW50IHJ4X3F1ZXVlX2RlZmF1bHRfbWFzayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTExOTgte1xubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTE5OTojaWYgSVNfRU5BQkxFRChDT05GSUdfUlBTKSBcdTAwMjZcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfU1lTQ1RMKVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTIwMC1cdHN0cnVjdCBjcHVtYXNrICpycHNfZGVmYXVsdF9tYXNrO1xuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTEyOTY9bmV0X3J4X3F1ZXVlX3VwZGF0ZV9rb2JqZWN0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgb2xkX251bSwgaW50IG5ld19udW0pXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTMwMS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jOjEzMDI6I2lmbmRlZiBDT05GSUdfUlBTXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMzAzLVx0aWYgKCFkZXYtXHUwMDNlc3lzZnNfcnhfcXVldWVfZ3JvdXApXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTMzMj1zdGF0aWMgaW50IG5ldF9yeF9xdWV1ZV9jaGFuZ2Vfb3duZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG51bSxcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMzM4LVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTMzOTojaWZuZGVmIENPTkZJR19SUFNcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzNDAtXHRpZiAoIWRldi1cdTAwM2VzeXNmc19yeF9xdWV1ZV9ncm91cClcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0yMDU3PXN0YXRpYyBpbnQgcnRubF9maWxsX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTIxMjUtXHRcdFx0IFJFQURfT05DRShkZXYtXHUwMDNlbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24pKSB8fFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjEyNjojaWZkZWYgQ09ORklHX1JQU1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjEyNy1cdCAgICBubGFfcHV0X3UzMihza2IsIElGTEFfTlVNX1JYX1FVRVVFUyxcbi0tXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYz01ND1FWFBPUlRfU1lNQk9MKHN5c2N0bF9kZXZjb25mX2luaGVyaXRfaW5pdF9uZXQpO1xubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtNTUtXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYzo1NjojaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0ZMT1dfTElNSVQpIHx8IElTX0VOQUJMRUQoQ09ORklHX1JQUylcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTU3LXN0YXRpYyBpbnQgZHVtcF9jcHVtYXNrKHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MsXG4tLVxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtOTgtXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYzo5OTojaWZkZWYgQ09ORklHX1JQU1xubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtMTAwLVxuLS1cbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jPTIxND1zdGF0aWMgaW50IHJwc19mZWF0X2xsY19hZmZpbml0eV9zeXNjdGwoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbi0tXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy0yMzktXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYzoyNDA6I2VuZGlmIC8qIENPTkZJR19SUFMgKi9cbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTI0MS1cbi0tXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYz00NTc9c3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmV0X2NvcmVfdGFibGVbXSA9IHtcbi0tXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy01NzYtXHR9LFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6NTc3OiNpZmRlZiBDT05GSUdfUlBTXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy01NzgtXHR7XG4tLVxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM9NzE2PXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5ldG5zX2NvcmVfdGFibGVbXSA9IHtcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jOjcxNzojaWYgSVNfRU5BQkxFRChDT05GSUdfUlBTKVxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtNzE4LVx0e1xuLS1cbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jPTg2MD1zdGF0aWMgX19uZXRfZXhpdCB2b2lkIHN5c2N0bF9jb3JlX25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy04NjYtXHRCVUdfT04odGJsID09IG5ldG5zX2NvcmVfdGFibGUpO1xubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6ODY3OiNpZiBJU19FTkFCTEVEKENPTkZJR19SUFMpXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy04NjgtXHRrZnJlZShuZXQtXHUwMDNlY29yZS5ycHNfZGVmYXVsdF9tYXNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzQ3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byB0aGUgQ09ORklHX1JQUyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRoZSBjb2RlIEkmIzM5O20gbG9va2luZyBhdCBoaW5nZXMgb24gYENPTkZJR19SUFNgLiBJbW1lZGlhdGVseSwgbXkgYnJhaW4gZmxhZ3MgaXQgYXMgYSBjb25maWd1cmF0aW9uIHZhcmlhYmxlLCBhbmQgYSBib29sZWFuIG9uZSBhdCB0aGF0LiBUaW1lIHRvIGNvbmZpcm0gdGhhdCBhc3N1bXB0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBrbm93IHdoYXQgYENPTkZJR19SUFNgICphY3R1YWxseSogY29udHJvbHMuIFRpbWUgdG8gZ28gY2hlY2sgaXRzIGRlZmluaXRpb24gaW4gdGhlIHJlbGV2YW50IGNvbmZpZyBmaWxlcyBvciBkb2N1bWVudGF0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAzOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBSUFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0yOTQ9Y29uZmlnIE1BWF9TS0JfRlJBR1Ncbi0tXG5uZXQvS2NvbmZpZy0zMDUtXG5uZXQvS2NvbmZpZzozMDY6Y29uZmlnIFJQU1xubmV0L0tjb25maWctMzA3LVx0Ym9vbCBcJiMzNDtSZWNlaXZlIHBhY2tldCBzdGVlcmluZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAzOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5OTcKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBgQ09ORklHX1JQU2AqKgoKT2theSwgc28gSSBzZWUgYENPTkZJR19SUFNgIGlzIGRlZmluZWQgd2l0aGluIGBuZXQvS2NvbmZpZ2AuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2hlcmUgdG8gc3RhcnQgZGlnZ2luZyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gTm93LCBteSBuZXh0IG1vdmUgaXMgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIG9yIGZlYXR1cmVzIGFyZSByZXF1aXJlZCBvciBhZmZlY3RlZCBieSBgQ09ORklHX1JQU2AuIEtub3dpbmcgaXRzIGRlcGVuZGVuY2llcyB3aWxsIGhlbHAgbWUgZnVsbHkgZ3Jhc3AgaXRzIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBpbXBhY3Qgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBJdCYjMzk7cyB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaW4gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZyBvcHRpb24gZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUlBTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0yOTQ9Y29uZmlnIE1BWF9TS0JfRlJBR1Ncbi0tXG5uZXQvS2NvbmZpZy0zMDUtXG5uZXQvS2NvbmZpZzozMDY6Y29uZmlnIFJQU1xubmV0L0tjb25maWctMzA3LVx0Ym9vbCBcJiMzNDtSZWNlaXZlIHBhY2tldCBzdGVlcmluZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAzOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyNDUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2UsIGlzIHRvIHplcm8gaW4gb24gdGhlIGBuZXQvS2NvbmZpZ2AgZmlsZS4gSXQmIzM5O3MgdGhlIGNlbnRyYWwgaHViIGZvciBuZXR3b3JrLXJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBbmQsIGdpdmVuIHRoYXQgSSBhbSBpbiB0aGUgd2VlZHMsIEkgbmVlZCB0byBnZXQgdG8gdGhlIHJlbGV2YW50IHNlY3Rpb24gcXVpY2tseS4gSSBhbSBwcmV0dHkgc3VyZSBsaW5lIDMwNiB3aWxsIGdldCBtZSB3aGVyZSBJIG5lZWQgdG8gYmUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiBzdG9yZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMDA6XHRcdCAgVGhpcyBoZWxwcyBCSUcgVENQIHdvcmtsb2FkcywgYnV0IG1pZ2h0IGV4cG9zZSBidWdzIGluIHNvbWVcbiAzMDE6XHRcdCAgbGVnYWN5IGRyaXZlcnMuXG4gMzAyOlx0XHQgIFRoaXMgYWxzbyBpbmNyZWFzZXMgbWVtb3J5IG92ZXJoZWFkIG9mIHNtYWxsIHBhY2tldHMsXG4gMzAzOlx0XHQgIGFuZCBpbiBkcml2ZXJzIHVzaW5nIGJ1aWxkX3NrYigpLlxuIDMwNDpcdFx0ICBJZiB1bnN1cmUsIHNheSAxNy5cbiAzMDU6XHRcbiAzMDY6XHRjb25maWcgUlBTXG4gMzA3Olx0XHRib29sIFwmIzM0O1JlY2VpdmUgcGFja2V0IHN0ZWVyaW5nXCYjMzQ7XG4gMzA4Olx0XHRkZXBlbmRzIG9uIFNNUCBcdTAwMjZcdTAwMjYgU1lTRlNcbiAzMDk6XHRcdGRlZmF1bHQgeVxuIDMxMDpcdFx0aGVscFxuIDMxMTpcdFx0ICBTb2Z0d2FyZSByZWNlaXZlIHNpZGUgcGFja2V0IHN0ZWVyaW5nIChSUFMpIGRpc3RyaWJ1dGVzIHRoZVxuIDMxMjpcdFx0ICBsb2FkIG9mIHJlY2VpdmVkIHBhY2tldCBwcm9jZXNzaW5nIGFjcm9zcyBtdWx0aXBsZSBDUFVzLlxuIDMxMzpcdFxuIDMxNDpcdGNvbmZpZyBSRlNfQUNDRUxcbiAzMTU6XHRcdGJvb2wgXCYjMzQ7SGFyZHdhcmUgYWNjZWxlcmF0aW9uIG9mIFJGU1wmIzM0O1xuIDMxNjpcdFx0ZGVwZW5kcyBvbiBSUFNcbiAzMTc6XHRcdHNlbGVjdCBDUFVfUk1BUFxuIDMxODpcdFx0ZGVmYXVsdCB5XG4gMzE5Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAzOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2ODYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSUFMgRmxvdyBDb250cm9sIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIGBDT05GSUdfUlBTYCBpcyBzZXQgdG8gJiMzOTt5JiMzOTsgYnkgZGVmYXVsdCwgYW5kIGl0IHJlbGllcyBvbiBib3RoIGBTTVBgIGFuZCBgU1lTRlNgLCB3aGljaCBtYWtlcyBpdCB2ZXJ5IGxpa2VseSB0byBiZSBlbmFibGVkIGluIGEgc3RhbmRhcmQgY29uZmlndXJhdGlvbi4gVGhpcyBwYXRjaCBzZWVtcyByZWxhdGVkLCBidXQgaXQgYWxzbyBtZW50aW9ucyBgQ09ORklHX1JGU19BQ0NFTGAuIFdhaXQsIHRoYXTigJlzIG5vdCBxdWl0ZSByaWdodC4gYHJwc19sbGNfY2hlY2tgIGlzbiYjMzk7dCBndWFyZGVkIGJ5IGBDT05GSUdfUkZTX0FDQ0VMYCDigJMgdGhhdCYjMzk7cyBhIGtleSBkZXRhaWwgdG8gbm90ZS4gTm93LCB0aGUgbW9yZSBpbXBvcnRhbnQgcGllY2VzLi4uIGBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoYCBhbmQgYHNvY2tfcnBzX3JlY29yZF9mbG93YCBoYXZlIGJlZW4gcHVsbGVkIG91dCBvZiB0aGUgaW5saW5lIGFuZCBtb3ZlZCBpbnRvIGBuZXQvY29yZS9kZXYuY2AuIENydWNpYWxseSwgdGhleSYjMzk7cmUgZXhwb3J0ZWQgc3ltYm9scyBub3cuCgpMZXQmIzM5O3MgdHJhY2UgdGhpcyBsb2dpYy4gVGhlIGBycHNfbGxjX2NoZWNrYCBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgZnJvbSBgcnBzX3JlY29yZF9zb2NrX2Zsb3dgLCB3aGljaCwgaW50ZXJlc3RpbmdseSwgcmVzaWRlcyBpbiBgaW5jbHVkZS9uZXQvcnBzLmhgLiBUaGF0IG1ha2VzIGBycHNfcmVjb3JkX3NvY2tfZmxvd2AgYW4gaW5saW5lIGZ1bmN0aW9uLiBBbmQsIHNpbmNlIGl04oCZcyBpbmxpbmUsIGxldCYjMzk7cyBzZWUgd2hlcmUgaXQgZ2V0cyBjYWxsZWQuIEZyb20gbXkgZ2xhbmNlIGF0IHRoZSBpbmNsdWRlIGZpbGVzLCBpdCBpcyBiZWluZyBjYWxsZWQgZnJvbSBgX3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2hgIGFuZCBgX3NvY2tfcnBzX3JlY29yZF9mbG93YCwgd2hpY2ggYXJlIGFsc28gZGVmaW5lZCBpbiBgaW5jbHVkZS9uZXQvcnBzLmhgLiBUaGF0IG1lYW5zIEkgc2hvdWxkIHJlYWxseSBkaWcgaW50byB0aGF0IGhlYWRlciBmaWxlIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAzOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Jwc19yZWNvcmRfc29ja19mbG93JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvcnBzLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvcnBzLmg9NTk9Ym9vbCBycHNfbGxjX2NoZWNrKHUzMiBvbGRfdmFsLCB1MzIgbmV3X3ZhbCk7XG5pbmNsdWRlL25ldC9ycHMuaC02MC1cbmluY2x1ZGUvbmV0L3Jwcy5oOjYxOnN0YXRpYyBpbmxpbmUgdm9pZCBycHNfcmVjb3JkX3NvY2tfZmxvdyhycHNfdGFnX3B0ciB0YWdfcHRyLCB1MzIgaGFzaClcbmluY2x1ZGUvbmV0L3Jwcy5oLTYyLXtcbi0tXG5pbmNsdWRlL25ldC9ycHMuaD04MD1zdGF0aWMgaW5saW5lIHZvaWQgX3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goX191MzIgaGFzaClcbi0tXG5pbmNsdWRlL25ldC9ycHMuaC04OC1cdGlmICh0YWdfcHRyKVxuaW5jbHVkZS9uZXQvcnBzLmg6ODk6XHRcdHJwc19yZWNvcmRfc29ja19mbG93KHRhZ19wdHIsIGhhc2gpO1xuaW5jbHVkZS9uZXQvcnBzLmgtOTAtXHRyY3VfcmVhZF91bmxvY2soKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDM6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NjUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gYF9zb2NrX3Jwc19yZWNvcmRfZmxvd2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhpcyBgX3NvY2tfcnBzX3JlY29yZF9mbG93YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgZXhhY3RseSBpdCYjMzk7cyBkb2luZy4gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgaXQmIzM5O3MgaW50ZXJhY3Rpbmcgd2l0aD8gSXMgaXQgdXBkYXRpbmcgYW55IHBlci1zb2NrZXQgc3RhdHM/IEkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBvdmVyYWxsIFJQUyAoUmVjZWl2ZSBQYWNrZXQgU3RlZXJpbmcpIGltcGxlbWVudGF0aW9uLiBJcyBpdCByZWNvcmRpbmcgZmxvd3MgZm9yIHRoZSBnaXZlbiBzb2NrZXQ/IElzIGl0IHNldHRpbmcgdXAgcm91dGVzIGJhc2VkIG9uIHRob3NlIGZsb3dzPyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIFNwZWNpZmljYWxseSwgaG93IGRvZXMgdGhpcyBmdW5jdGlvbiByZWxhdGUgdG8gdGhlIGRlY2lzaW9uIHByb2Nlc3MgYXJvdW5kIHdoaWNoIENQVSBhIHBhY2tldCBpcyBhc3NpZ25lZCB0bz8gSXMgaXQgYSBrZXkgY29tcG9uZW50IG9mIHRoZSBoYXNoaW5nIGFuZCByZWRpcmVjdGlvbiBsb2dpYywgb3IgaXMgaXQgbWVyZWx5IHJlY29yZGluZyB0cmFmZmljIGZvciBvdGhlciBwdXJwb3NlcyBsaWtlIG1vbml0b3Jpbmcgb3IgbG9hZCBiYWxhbmNpbmc/IExldCBtZSBydW4gdGhyb3VnaCB0aGUgY29kZSBpbiBteSBoZWFkIGFuZCB2ZXJpZnkgaG93IHRoZSBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgb3RoZXIgbW9kdWxlcyBpbiB0aGUga2VybmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfc29ja19ycHNfcmVjb3JkX2Zsb3cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9ycHMuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9ycHMuaD02MT1zdGF0aWMgaW5saW5lIHZvaWQgcnBzX3JlY29yZF9zb2NrX2Zsb3cocnBzX3RhZ19wdHIgdGFnX3B0ciwgdTMyIGhhc2gpXG4tLVxuaW5jbHVkZS9uZXQvcnBzLmgtNzktXG5pbmNsdWRlL25ldC9ycHMuaDo4MDpzdGF0aWMgaW5saW5lIHZvaWQgX3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goX191MzIgaGFzaClcbmluY2x1ZGUvbmV0L3Jwcy5oLTgxLXtcbi0tXG5pbmNsdWRlL25ldC9ycHMuaC05Mi1cbmluY2x1ZGUvbmV0L3Jwcy5oOjkzOnN0YXRpYyBpbmxpbmUgdm9pZCBfc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuaW5jbHVkZS9uZXQvcnBzLmgtOTQte1xuLS1cbmluY2x1ZGUvbmV0L3Jwcy5oLTEwOC1cdFx0ICovXG5pbmNsdWRlL25ldC9ycHMuaDoxMDk6XHRcdF9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKFJFQURfT05DRShzay1cdTAwM2Vza19yeGhhc2gpKTtcbmluY2x1ZGUvbmV0L3Jwcy5oLTExMC1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDM6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5NTgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGl0OgoKKipBbmFseXppbmcgTmV0d29yayBTdGFjayBGbG93IFJlY29yZGluZyoqCgpBbHJpZ2h0LCBzbyBJIHNlZSBgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaGAgYW5kIGBzb2NrX3Jwc19yZWNvcmRfZmxvd2AuIFRob3NlIGFyZSB0aGUgbWFpbiBlbnRyeSBwb2ludHMsIHRoZSBob29rcyBpbnRvIHRoZSBzeXN0ZW0uIFRoZXkmIzM5O3JlIGNsZWFybHkgaW50ZW5kZWQgdG8gcmVjb3JkIHNvbWV0aGluZyBhYm91dCBuZXR3b3JrIGZsb3dzLCBsaWtlbHkgZm9yIGxvYWQgYmFsYW5jaW5nIG9yIHRyYWZmaWMgc2hhcGluZywgYmFzZWQgb24gdGhlaXIgbmFtZXMuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMgKndoZXJlKiB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5ICp1c2VkKiB3aXRoaW4gdGhlIG5ldHdvcmsgc3RhY2suIFRoYXQmIzM5O3MgdGhlIGNyaXRpY2FsIGluZm9ybWF0aW9uLiBMZXQmIzM5O3MgdHJhY2UgYmFjayB0aGUgY2FsbHMgdG8gYHNvY2tfcnBzX3JlY29yZF9mbG93YC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzaXRlcyB3aWxsIHJldmVhbCB0aGUgY29udGV4dCBhbmQgcHVycG9zZSBvZiB0aGlzIGZsb3cgcmVjb3JkaW5nLiBJJiMzOTtsbCBuZWVkIHRvIHBpbnBvaW50IGFsbCB0aGUgcGxhY2VzIHdpdGhpbiB0aGUgY29kZSB3aGVyZSBgc29ja19ycHNfcmVjb3JkX2Zsb3dgIGlzIGludm9rZWQuIEtub3dpbmcgdGhlIGNhbGxpbmcgZnVuY3Rpb25zIGFuZCB0aGVpciByb2xlcyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDM6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c29ja19ycHNfcmVjb3JkX2Zsb3cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jPTUzMDY9c3RhdGljIHZvaWQgcnBzX3RyaWdnZXJfc29mdGlycSh2b2lkICpkYXRhKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTUzMTYtXG5uZXQvY29yZS9kZXYuYzo1MzE3OnZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKVxubmV0L2NvcmUvZGV2LmMtNTMxOC17XG4tLVxubmV0L2NvcmUvZGV2LmMtNTMyMi1cbm5ldC9jb3JlL2Rldi5jOjUzMjM6XHRfc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChoYXNoKTtcbm5ldC9jb3JlL2Rldi5jLTUzMjQtI2VuZGlmXG5uZXQvY29yZS9kZXYuYy01MzI1LX1cbm5ldC9jb3JlL2Rldi5jOjUzMjY6RVhQT1JUX1NZTUJPTChzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKTtcbm5ldC9jb3JlL2Rldi5jLTUzMjctXG5uZXQvY29yZS9kZXYuYzo1MzI4OnZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvZGV2LmMtNTMyOS17XG4tLVxubmV0L2NvcmUvZGV2LmMtNTMzMy1cbm5ldC9jb3JlL2Rldi5jOjUzMzQ6XHRfc29ja19ycHNfcmVjb3JkX2Zsb3coc2spO1xubmV0L2NvcmUvZGV2LmMtNTMzNS0jZW5kaWZcbm5ldC9jb3JlL2Rldi5jLTUzMzYtfVxubmV0L2NvcmUvZGV2LmM6NTMzNzpFWFBPUlRfU1lNQk9MKHNvY2tfcnBzX3JlY29yZF9mbG93KTtcbm5ldC9jb3JlL2Rldi5jLTUzMzgtXG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jPTc2MT12b2lkIF9faW5ldF9hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jaywgc3RydWN0IHNvY2sgKm5ld3NrKVxuLS1cbm5ldC9pcHY0L2FmX2luZXQuYy03NjctXG5uZXQvaXB2NC9hZl9pbmV0LmM6NzY4Olx0c29ja19ycHNfcmVjb3JkX2Zsb3cobmV3c2spO1xubmV0L2lwdjQvYWZfaW5ldC5jLTc2OS1cdFdBUk5fT04oISgoMSBcdTAwM2NcdTAwM2MgbmV3c2stXHUwMDNlc2tfc3RhdGUpIFx1MDAyNlxuLS1cbm5ldC9pcHY0L2FmX2luZXQuYz04NDQ9aW50IGluZXRfc2VuZF9wcmVwYXJlKHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L2FmX2luZXQuYy04NDUte1xubmV0L2lwdjQvYWZfaW5ldC5jOjg0NjpcdHNvY2tfcnBzX3JlY29yZF9mbG93KHNrKTtcbm5ldC9pcHY0L2FmX2luZXQuYy04NDctXG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jPTg4Nj1pbnQgaW5ldF9yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUsXG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jLTg5Mi1cdGlmIChsaWtlbHkoIShmbGFncyBcdTAwMjYgTVNHX0VSUlFVRVVFKSkpXG5uZXQvaXB2NC9hZl9pbmV0LmM6ODkzOlx0XHRzb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XG5uZXQvaXB2NC9hZl9pbmV0LmMtODk0LVxuLS1cbm5ldC9pcHY0L3RjcC5jPTgxMj1zc2l6ZV90IHRjcF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb2ZmX3QgKnBwb3MsXG4tLVxubmV0L2lwdjQvdGNwLmMtODI1LVxubmV0L2lwdjQvdGNwLmM6ODI2Olx0c29ja19ycHNfcmVjb3JkX2Zsb3coc2spO1xubmV0L2lwdjQvdGNwLmMtODI3LVx0Lypcbi0tXG5uZXQvaXB2NC90Y3AuYz0yMTk2PXN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3JlY2VpdmUoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTIyMjMtXG5uZXQvaXB2NC90Y3AuYzoyMjI0Olx0c29ja19ycHNfcmVjb3JkX2Zsb3coc2spO1xubmV0L2lwdjQvdGNwLmMtMjIyNS1cbi0tXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jPTY0Nj1pbnQgaW5ldDZfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplLFxuLS1cbm5ldC9pcHY2L2FmX2luZXQ2LmMtNjUyLVx0aWYgKGxpa2VseSghKGZsYWdzIFx1MDAyNiBNU0dfRVJSUVVFVUUpKSlcbm5ldC9pcHY2L2FmX2luZXQ2LmM6NjUzOlx0XHRzb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTY1NC1cbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0xODk4PXN0YXRpYyB2b2lkIG1wdGNwX3Jwc19yZWNvcmRfc3ViZmxvd3MoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xOTA3LVxubmV0L21wdGNwL3Byb3RvY29sLmM6MTkwODpcdFx0c29ja19ycHNfcmVjb3JkX2Zsb3coc3NrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE5MDktXHR9XG4tLVxubmV0L3NjdHAvc29ja2V0LmM9ODY5Nj1fX3BvbGxfdCBzY3RwX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHBvbGxfdGFibGUgKndhaXQpXG4tLVxubmV0L3NjdHAvc29ja2V0LmMtODcwMy1cbm5ldC9zY3RwL3NvY2tldC5jOjg3MDQ6XHRzb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XG5uZXQvc2N0cC9zb2NrZXQuYy04NzA1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ0NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWNoIGFuZCBDb25maWd1cmF0aW9uIG9mIGBzb2NrX3Jwc19yZWNvcmRfZmxvd2AgYW5kIExMQyBBZmZpbml0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBzb2NrX3Jwc19yZWNvcmRfZmxvd2AgZnVuY3Rpb24gYW5kIGl0JiMzOTtzIGxvb2tpbmcgcHJldHR5IHZlcnNhdGlsZS4gSXQmIzM5O3MgY2FsbGVkIGluIGEgZ29vZCByYW5nZSBvZiBjcml0aWNhbCBuZXR3b3JraW5nIHBhdGhzOiBgaW5ldF9yZWN2bXNnYCwgYGluZXRfc2VuZF9wcmVwYXJlYCwgdGhlIGFjY2VwdCByb3V0aW5lcywgc3BsaWNlIGFuZCB6ZXJvLWNvcHksIGFuZCBldmVuIGBtcHRjcF9ycHNfcmVjb3JkX3N1YmZsb3dzYCBhbmQgU0NUUC4gVGhhdCBzY3JlYW1zICYjMzQ7YWN0aXZlIGFuZCB1dGlsaXplZCYjMzQ7IHRvIG1lLgoKVGhlIGZlYXR1cmUgaXRzZWxmLCBMTEMgYWZmaW5pdHksIGlzIGdhdGVkIGJ5IHRoZSBgbmV0LmNvcmUucnBzX2ZlYXRfbGxjX2FmZmluaXR5YCBzeXNjdGwsIHdoaWNoIGlzIGltcG9ydGFudCB0byByZW1lbWJlci4gQWgsIHdhaXQsIHRoaXMgaXMgYSBzdGF0aWMga2V5ICptb2RpZmllZCogYnkgYSBzeXNjdGwuIFRoYXQmIzM5O3MgYSBrZXkgZGV0YWlsOyBpdCBnaXZlcyB1cyBydW50aW1lIGNvbnRyb2wuIE5vdywgd2hhdCBkZXBlbmRlbmNpZXMgZG8gd2UgaGF2ZSB0byB3b3JyeSBhYm91dD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgY29uZmlncy4KClllcCwgYENPTkZJR19SUFNgIGlzIGVzc2VudGlhbCwgYW5kIHRoYXQgZGVwZW5kcyBvbiBgU01QYCBhbmQgYFNZU0ZTYC4gR29vZCwgZ29vZC4gV2UgYWxzbyBuZWVkIGBDT05GSUdfU1lTQ1RMYCBmb3IgdGhlIHN5c2N0bCBpbnRlcmZhY2UsIG9mIGNvdXJzZS4gSSYjMzk7bGwgdGFrZSBhIHF1aWNrIGxvb2sgaW4gYG5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jYCDigJMgeWVwLCB0aGUgc3lzY3RsIGlzIHVuZGVyIGFuIGAjaWZkZWYgQ09ORklHX1JQU2AuIFNvLCB3ZSYjMzk7cmUgZ29vZCB0aGVyZS4KClRoZSBjb3JlIGxvZ2ljIHNlZW1zIHRvIGJlIHdpdGhpbiB0aGUgYHJwc19sbGNfY2hlY2tgIGZ1bmN0aW9uLiBJdCB0YWtlcyBib3RoIG9sZCBhbmQgbmV3IHZhbHVlcy4gSXQgZmlyc3QgY2hlY2tzIGBzdGF0aWNfYnJhbmNoX3VubGlrZWx5KCZhbXA7cnBzX2ZlYXRfbGxjX2FmZmluaXR5KWAuIElmIExMQyBhZmZpbml0eSBpcyBlbmFibGVkLCBpdCB0aGVuIGRvZXMgc29tZSBjaGVja3M6IG1ha2luZyBzdXJlIHRoZSBvbGQgQ1BVIElEIGlzIHZhbGlkLCBhbmQgdGhlIG9sZCBDUFUgaXMgbm90IGFjdGl2ZS4gRnVydGhlciwgaXQgbWFrZXMgc3VyZSB0aGUgb2xkIENQVSBpc24mIzM5O3QgaW4gdGhlIGN1cnJlbnQgQ1BVJiMzOTtzIENQVSBtYXNrIGFuZCBpdCB0aGVuIGNoZWNrcyBpZiB0aGUgb2xkIENQVSBhbmQgdGhlIG5ldyBDUFUgc2hhcmUgYSBjYWNoZS4KCkl0IGxvb2tzIGxpa2UgdGhlIGBycHNfbGxjX2NoZWNrYCBmdW5jdGlvbiBpcyB0aGUgbWFpbiBhZGRpdGlvbiBoZXJlLiBgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaGAgYW5kIGBzb2NrX3Jwc19yZWNvcmRfZmxvd2AgYXJlIG5vbi1pbmxpbmVkIGFuZCBleHBvcnRlZCwgd2hpY2ggaXMgZ29vZCBmb3IgdHJhY2luZyBhbmQgZHluYW1pYyBhbmFseXNpcy4gQW5kIG9mIGNvdXJzZSwgdGhlIHN5c2N0bCBoYW5kbGVyIGlzIGBycHNfZmVhdF9sbGNfYWZmaW5pdHlfc3lzY3RsYC4gSXQgc2VlbXMgdGhlIGZvY3VzIGlzIHRoZSBuZXcgZnVuY3Rpb24sIGBycHNfbGxjX2NoZWNrYCwgd2hpY2ggaGFzIHNvbWUgc3BlY2lmaWMgY29uZGl0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY29kZSBpbiBgbmV0L2NvcmUvZGV2LmNgIG1vcmUgY2xvc2VseSBmb3IgYW55IG90aGVyIG51YW5jZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAzOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Jwc19sbGNfY2hlY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz01MTEwPXN0YXRpYyBpbnQgZ2V0X3Jwc19jcHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9kZXYuYy01MjEzLS8qKlxubmV0L2NvcmUvZGV2LmM6NTIxNDogKiBycHNfbGxjX2NoZWNrIC0gZGV0ZXJtaW5lIGlmIFJQUyBmbG93IHRhYmxlIHNob3VsZCBiZSB1cGRhdGVkLlxubmV0L2NvcmUvZGV2LmMtNTIxNS0gKiBAb2xkX3ZhbDogcHJldmlvdXMgZmxvdyByZWNvcmQgdmFsdWUuXG4tLVxubmV0L2NvcmUvZGV2LmMtNTIxOS0gKi9cbm5ldC9jb3JlL2Rldi5jOjUyMjA6Ym9vbCBycHNfbGxjX2NoZWNrKHUzMiBvbGRfdmFsLCB1MzIgbmV3X3ZhbClcbm5ldC9jb3JlL2Rldi5jLTUyMjEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzY1NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJQUyBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBuZXcgUlBTIGltcGxlbWVudGF0aW9uLiBUaGUga2V5IGZ1bmN0aW9ucyBzZWVtIHRvIGJlIGBycHNfbGxjX2NoZWNrYCwgd2hpY2ggaXMgdGhlIGNvcmUgbG9naWMsIGFuZCBgcnBzX2ZlYXRfbGxjX2FmZmluaXR5X3N5c2N0bGAsIHdoaWNoIGhhbmRsZXMgdGhlIHN5c2N0bCBpbnRlcmZhY2UuIEkgYWxzbyBzZWUgdGhhdCBgc29ja19ycHNfcmVjb3JkX2Zsb3dgIGFuZCBgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaGAgYXJlIHVuLWlubGluZWQuCgpGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgYENPTkZJR19SUFNgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gQWgsIHllcywgaXQmIzM5O3MgYGRlZmF1bHQgeWAgaW4gYG5ldC9LY29uZmlnYCwgZ29vZC4gTm93LCB3aGVyZSBpcyB0aGUgc3lzY3RsIGRlZmluZWQ/IFJpZ2h0LCBpdCYjMzk7cyBpbiBgbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmNgLiAgSSBzaG91bGQgY2hlY2sgd2hldGhlciBgQ09ORklHX1NZU0NUTGAgaXMgYWxzbyBhIHJlcXVpcmVtZW50LiBZZXMsIGl0IGxvb2tzIGxpa2UgaXQgaXMuIEJ1dCwgZm9yIHRoZSBjb3JlIFJQUyBsb2dpYyBpdHNlbGYsIGBDT05GSUdfUlBTYCBzaG91bGQgYmUgc3VmZmljaWVudC4KCkhhbmcgb24uLi4gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNhbGxlcnMgb2YgYHJwc19sbGNfY2hlY2tgLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBycHNfcmVjb3JkX3NvY2tfZmxvd2AsIHdoaWNoIGlzIGRlZmluZWQgaW4gYGluY2x1ZGUvbmV0L3Jwcy5oYC4gVGhhdCBtYWtlcyBzZW5zZS4gYHJwc19yZWNvcmRfc29ja19mbG93YCBpcyBpbiB0dXJuIGNhbGxlZCBieSBgX3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2hgIGFuZCBgX3NvY2tfcnBzX3JlY29yZF9mbG93YCwgd2hpY2ggYXJlIHRoZW4gdXNlZCBieSBgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaGAgYW5kIGBzb2NrX3Jwc19yZWNvcmRfZmxvd2AuIFNvLCByZWFsbHksIHRoZSBtYWluIGZ1bmN0aW9uIHRvIGFuYWx5emUgaGVyZSBpcyBpbmRlZWQgYHJwc19sbGNfY2hlY2tgLCBhbG9uZyB3aXRoIHRoZSBgcnBzX2ZlYXRfbGxjX2FmZmluaXR5X3N5c2N0bGAgc3lzY3RsIGhhbmRsZXIuCgpMZXQmIzM5O3MgY2hlY2sgdGhlIHNpZ25hdHVyZSBvZiBgcnBzX2xsY19jaGVja2A6IGBib29sIHJwc19sbGNfY2hlY2sodTMyIG9sZF92YWwsIHUzMiBuZXdfdmFsKWAuIEFscmlnaHQuIE5vdywgaXMgaXQgZXhwb3J0ZWQ/IEhtbSwgbm8sIGl0IGlzbiYjMzk7dC4gQnV0LCB3YWl0Li4uIGBycHNfcmVjb3JkX3NvY2tfZmxvd2AgaXMgaW5saW5lLCBzbyBgcnBzX2xsY19jaGVja2AgbXVzdCBiZSBleHBvcnRlZCwgb3RoZXJ3aXNlIGl0IGNvdWxkbiYjMzk7dCBiZSB1c2VkIGJ5IG1vZHVsZXMgaWYgaXQgaXMgdXNlZCBpbnRlcm5hbGx5LiBPa2F5LCB0aW1lIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgZXhwb3J0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAzOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qcnBzX2xsY19jaGVjayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2MDkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSUFMgRmxvdyBSZWNvcmRpbmcgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYHJwc19yZWNvcmRfc29ja19mbG93YCBpcyBkZWZpbmVkIGlubGluZSB3aXRoaW4gYGluY2x1ZGUvbmV0L3Jwcy5oYCwgYW5kIGl0IGluIHR1cm4gY2FsbHMgYHJwc19sbGNfY2hlY2tgLiBTbywgaWYgYSBrZXJuZWwgbW9kdWxlIHdlcmUgdG8gaW5jbHVkZSB0aGF0IGhlYWRlciBhbmQgdXNlIGBycHNfcmVjb3JkX3NvY2tfZmxvd2AsIGl0ICp3b3VsZCogaGF2ZSB0byBhbHNvIGxpbmsgYWdhaW5zdCB0aGUgZGVmaW5pdGlvbiBvZiBgcnBzX2xsY19jaGVja2AuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcGVkIG91dC4KCkJ1dCBoYW5nIG9uLCB0aGVzZSBjaGFuZ2VzIGhhdmUgdW4taW5saW5lZCBgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaGAgYW5kIGBzb2NrX3Jwc19yZWNvcmRfZmxvd2AuIExldCBtZSByZS1leGFtaW5lIHRoZSBwYXRjaC4uLiBhaGEhIFRoZXkmIzM5O3JlIG5vdyAqbm90KiBpbmxpbmUhIFNvLCBtb2R1bGVzIHRoYXQgY2FsbCB0aGVzZSBmdW5jdGlvbnMgd2lsbCBiZSBjYWxsaW5nIHRoZSBub24taW5saW5lIHZlcnNpb25zIHRoYXQgYXJlIG5vdyBleHBvcnRlZCBhcyBzeW1ib2xzLiBUaGF0IG1ha2VzIHNlbnNlLiBUaGVzZSBmdW5jdGlvbnMgYXJlIG5vdyBleHBsaWNpdGx5IHBhcnQgb2YgdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhlIG1vZHVsZSBsaW5rZXIgd2lsbCByZXNvbHZlIHRoZW0gZHVyaW5nIGJ1aWxkIHRpbWUuCgpIb3dldmVyLCBgcnBzX3JlY29yZF9zb2NrX2Zsb3dgICpyZW1haW5zKiBpbmxpbmUgd2l0aGluIGBpbmNsdWRlL25ldC9ycHMuaGAuIFRoYXQmIzM5O3MgdGhlIGNyaXRpY2FsIHBvaW50IEkgbmVlZCB0byBjbGFyaWZ5LiBJcyBpdCBjYWxsZWQgZnJvbSBhbnkgb3RoZXIgbG9jYXRpb24gdGhhdCBtaWdodCBjYXVzZSBkZXBlbmRlbmN5IGlzc3Vlcz8gSSBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsIHNpdGVzIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGFjdHVhbGx5IGEgc2FmZSBjaGFuZ2UgdGhhdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2Ugc3VidGxlIGJyZWFrYWdlIGR1ZSB0byB0aGUgY2hhbmdlIGluIGlubGluaW5nLiBUaGlzIGlzIHNvbWV0aGluZyBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAzOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Jwc19yZWNvcmRfc29ja19mbG93JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3Jwcy5oPTU5PWJvb2wgcnBzX2xsY19jaGVjayh1MzIgb2xkX3ZhbCwgdTMyIG5ld192YWwpO1xuaW5jbHVkZS9uZXQvcnBzLmgtNjAtXG5pbmNsdWRlL25ldC9ycHMuaDo2MTpzdGF0aWMgaW5saW5lIHZvaWQgcnBzX3JlY29yZF9zb2NrX2Zsb3cocnBzX3RhZ19wdHIgdGFnX3B0ciwgdTMyIGhhc2gpXG5pbmNsdWRlL25ldC9ycHMuaC02Mi17XG4tLVxuaW5jbHVkZS9uZXQvcnBzLmg9ODA9c3RhdGljIGlubGluZSB2b2lkIF9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKF9fdTMyIGhhc2gpXG4tLVxuaW5jbHVkZS9uZXQvcnBzLmgtODgtXHRpZiAodGFnX3B0cilcbmluY2x1ZGUvbmV0L3Jwcy5oOjg5Olx0XHRycHNfcmVjb3JkX3NvY2tfZmxvdyh0YWdfcHRyLCBoYXNoKTtcbmluY2x1ZGUvbmV0L3Jwcy5oLTkwLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxubmV0L2NvcmUvZGV2LmM9NTExMD1zdGF0aWMgaW50IGdldF9ycHNfY3B1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvZGV2LmMtNTE1NC1cdFx0LyogRmlyc3QgY2hlY2sgaW50byBnbG9iYWwgZmxvdyB0YWJsZSBpZiB0aGVyZSBpcyBhIG1hdGNoLlxubmV0L2NvcmUvZGV2LmM6NTE1NTpcdFx0ICogVGhpcyBSRUFEX09OQ0UoKSBwYWlycyB3aXRoIFdSSVRFX09OQ0UoKSBmcm9tIHJwc19yZWNvcmRfc29ja19mbG93KCkuXG5uZXQvY29yZS9kZXYuYy01MTU2LVx0XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2MzcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJhY2luZyB0aGUgUlBTIEZsb3cgUmVjb3JkaW5nIEZ1bmN0aW9ucyoqCgpPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBycHNfcmVjb3JkX3NvY2tfZmxvd2Ag4oCTIEkgcmVtZW1iZXIgdGhhdCBmdW5jdGlvbiwgZGVhbGluZyB3aXRoIFJlY2VpdmUgUGFja2V0IFN0ZWVyaW5nLiBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIG9ubHkgY2FsbGVkIGZyb20gYF9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoYC4gQW5kIHRoYXQmIzM5O3MgYWN0dWFsbHkgaW5saW5lZCBkaXJlY3RseSBpbiBgaW5jbHVkZS9uZXQvcnBzLmhgLiBIdWgsIHRoYXQmIzM5O3MgaW50ZXJlc3Rpbmc7IGlubGluaW5nIGZvciBwZXJmb3JtYW5jZSwgSSYjMzk7ZCBndWVzcy4KCk5vdywgYF9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoYCwgd2hpY2ggSSBqdXN0IG1lbnRpb25lZCwgc2VlbXMgdG8gYmUgY2FsbGVkIGZyb20gYF9zb2NrX3Jwc19yZWNvcmRfZmxvd2AuIFRoYXQgb25lJiMzOTtzIGFsc28gaW5saW5lZCBpbiB0aGUgc2FtZSBoZWFkZXIgZmlsZS4gV2UmIzM5O3JlIGdldHRpbmcgZGVlcGVyIGludG8gdGhlIGNvcmUgbG9naWMuCgpGaW5hbGx5LCB0aGUgcmVhbCBlbnRyeSBwb2ludHMsIGBfc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaGAgYW5kIGBfc29ja19ycHNfcmVjb3JkX2Zsb3dgIGFyZSBjYWxsZWQgZnJvbSB0aGVpciBub24tdW5kZXJzY29yZWQgY291bnRlcnBhcnRzLCBgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaGAgYW5kIGBzb2NrX3Jwc19yZWNvcmRfZmxvd2AsIHdoaWNoIGFyZSBkZWZpbmVkIGluIGBuZXQvY29yZS9kZXYuY2AuIE1ha2VzIHNlbnNlLCB0aGUgZHJpdmVyIGxheWVyIGNhbGxpbmcgaW50byB0aGUgUlBTIGZyYW1ld29yay4KCkJ1dCB3YWl0LCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gQXJlIGBfc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaGAgYW5kIGBfc29ja19ycHNfcmVjb3JkX2Zsb3dgICpvbmx5KiBjYWxsZWQgZnJvbSB0aG9zZSBmdW5jdGlvbnM/IEkmIzM5O2QgYmV0dGVyIGNvbmZpcm0gdGhhdCB0aG9zZSBpbnRlcm5hbCBmdW5jdGlvbnMgYXJlIG5vdCBjYWxsZWQgZnJvbSBhbnl3aGVyZSBlbHNlLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBzbmVha3kgaW50ZXJhY3Rpb25zIEkmIzM5O20gbWlzc2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X3NvY2tfcnBzX3JlY29yZF9mbG93JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3Jwcy5oPTYxPXN0YXRpYyBpbmxpbmUgdm9pZCBycHNfcmVjb3JkX3NvY2tfZmxvdyhycHNfdGFnX3B0ciB0YWdfcHRyLCB1MzIgaGFzaClcbi0tXG5pbmNsdWRlL25ldC9ycHMuaC03OS1cbmluY2x1ZGUvbmV0L3Jwcy5oOjgwOnN0YXRpYyBpbmxpbmUgdm9pZCBfc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKVxuaW5jbHVkZS9uZXQvcnBzLmgtODEte1xuLS1cbmluY2x1ZGUvbmV0L3Jwcy5oLTkyLVxuaW5jbHVkZS9uZXQvcnBzLmg6OTM6c3RhdGljIGlubGluZSB2b2lkIF9zb2NrX3Jwc19yZWNvcmRfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG5pbmNsdWRlL25ldC9ycHMuaC05NC17XG4tLVxuaW5jbHVkZS9uZXQvcnBzLmgtMTA4LVx0XHQgKi9cbmluY2x1ZGUvbmV0L3Jwcy5oOjEwOTpcdFx0X3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3J4aGFzaCkpO1xuaW5jbHVkZS9uZXQvcnBzLmgtMTEwLVx0fVxuLS1cbm5ldC9jb3JlL2Rldi5jPTUzMTc9dm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKF9fdTMyIGhhc2gpXG4tLVxubmV0L2NvcmUvZGV2LmMtNTMyMi1cbm5ldC9jb3JlL2Rldi5jOjUzMjM6XHRfc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChoYXNoKTtcbm5ldC9jb3JlL2Rldi5jLTUzMjQtI2VuZGlmXG4tLVxubmV0L2NvcmUvZGV2LmM9NTMyOD12b2lkIHNvY2tfcnBzX3JlY29yZF9mbG93KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvY29yZS9kZXYuYy01MzMzLVxubmV0L2NvcmUvZGV2LmM6NTMzNDpcdF9zb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XG5uZXQvY29yZS9kZXYuYy01MzM1LSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjU2OQoJCQkJCQkJb3V0cHV0OiAxMjgKCQkJCQkJCXRob3VnaHRzOiAxMjU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJQUyBMTEMgQWZmaW5pdHkgQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSW5pdGlhbGx5LCBJIHdhcyBmb2N1c2luZyBvbiBob3cgYHJwc19sbGNfY2hlY2tgIGlzIGNhbGxlZCBhbmQgZGlzY292ZXJlZCBpdCYjMzk7cyBlZmZlY3RpdmVseSBvbmx5IGNhbGxlZCBmcm9tIGBuZXQvY29yZS9kZXYuY2AuIEhvd2V2ZXIsIGl0JiMzOTtzIG5vdCBleHBvcnRlZCwgYnV0IGl0JiMzOTtzIGNhbGxlZCBpbmxpbmUgZnJvbSBgcnBzX3JlY29yZF9zb2NrX2Zsb3dgIGluIGBpbmNsdWRlL25ldC9ycHMuaGAuIFRoYXQgbWVhbnMgYW55IG1vZHVsZSB0aGF0IGluY2x1ZGVzIGBycHMuaGAgKmNvdWxkKiBzZWUgaXQsIGJ1dCBubyBtb2R1bGUgKmFjdHVhbGx5KiBjYWxscyBpdCwgcHJldmVudGluZyBsaW5rZXIgZXJyb3JzLiAgQWgsIGJ1dCBgcnBzX2ZlYXRfbGxjX2FmZmluaXR5YCAqaXMqIGV4cG9ydGVkIQoKU28sIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGV4YW1pbmUgYXJlIGRlZmluaXRlbHkgYHJwc19sbGNfY2hlY2tgLCBgcnBzX2ZlYXRfbGxjX2FmZmluaXR5X3N5c2N0bGAsIGBzb2NrX3Jwc19yZWNvcmRfZmxvd2AsIGFuZCBgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaGAuIEFsdGhvdWdoIGBzb2NrX3Jwc19yZWNvcmRfZmxvd2AgYW5kIGBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoYCBhcmUganVzdCB3cmFwcGVycywgdGhlIGNvcmUgbG9naWMgcmVzaWRlcyBpbiBgcnBzX2xsY19jaGVja2AgYW5kIGBycHNfZmVhdF9sbGNfYWZmaW5pdHlfc3lzY3RsYC4gTm93LCBpcyBgcnBzX2xsY19jaGVja2AgZXZlbiAqcmVhY2hhYmxlKj8gWWVzLCBpdCYjMzk7cyByZWFjaGFibGUgaWYgYHJmc19pc19uZWVkZWQoKWAgaXMgdHJ1ZSwgd2hpY2ggY2hlY2tzIGBzdGF0aWNfYnJhbmNoX3VubGlrZWx5KCZhbXA7cmZzX25lZWRlZClgLiBgcmZzX25lZWRlZGAgYmVjb21lcyBlbmFibGVkIHdoZW4gYG5ldC5jb3JlLnJwc19zb2NrX2Zsb3dfZW50cmllc2AgaXMgc2V0IHRvIGEgdmFsdWUgZ3JlYXRlciB0aGFuIDAuICBUaGVyZWZvcmUsIHRvIGV4ZXJjaXNlIHRoaXMsIHdlIG5lZWQgYG5ldC5jb3JlLnJwc19zb2NrX2Zsb3dfZW50cmllcyAmZ3Q7IDBgIGFuZCwgdG8gdGVzdCB0aGUgbmV3IExMQyBhZmZpbml0eSBsb2dpYywgYG5ldC5jb3JlLnJwc19mZWF0X2xsY19hZmZpbml0eSA9IDFgLiAgQWxsIG9mIHRoaXMgaXMgYWNjZXNzaWJsZSB0aHJvdWdoIHN5c2N0bHMgYW5kLCBvZiBjb3Vyc2UsIHJlZ3VsYXIgbmV0d29yayB0cmFmZmljLgoKTGV0JiMzOTtzIHF1aWNrbHkgY29uZmlybSB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3MuIGBDT05GSUdfUlBTYCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQsIGFuZCBgQ09ORklHX1NZU0NUTGAgdG9vLiBTbywgbm8gc3BlY2lhbCBjb25maWdzIGFyZSBuZWVkZWQgYWx0aG91Z2ggYFJQU2AgaXMgYW4gb3B0aW9uIHRvIHNwZWNpZnkuIE5vIG90aGVyIHJlcXVpcmVkIGNvbmZpZ3MuIGBDT05GSUdfUkZTX0FDQ0VMYCBpcyBub3QgcmVxdWlyZWQsIGFsdGhvdWdoIGBDT05GSUdfU01QYCAqaXMqIHJlcXVpcmVkIGZvciBgQ09ORklHX1JQU2AuCgpMZXQmIzM5O3MgcmV2aXNpdCBgcnBzX2xsY19jaGVja2AgaW4gYG5ldC9jb3JlL2Rldi5jYC4gSXQgaGFzIGEgY29uZGl0aW9uYWwgYmFzZWQgb24gYHJwc19mZWF0X2xsY19hZmZpbml0eWAgYmVpbmcgZW5hYmxlZC4gVGhpcyBpcyBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwgYW5kIHJpcGUgZm9yIGZ1enppbmcuCgpNeSBmb2N1cyBzaG91bGQgYmUgb24gZnV6emluZyB0aGUgZm9sbG93aW5nIHN5bWJvbHM6IGBycHNfbGxjX2NoZWNrYCBhbmQgYHJwc19mZWF0X2xsY19hZmZpbml0eV9zeXNjdGxgLiAgSSBkaWQgY29uc2lkZXIgYHNvY2tfcnBzX3JlY29yZF9mbG93YCBhbmQgYHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2hgIGJ1dCB0aG9zZSBhcmUgaG90LXBhdGggZnVuY3Rpb25zLCBhbmQgdGhlIGluc3RydWN0aW9ucyBhZHZpc2UgYWdhaW5zdCBsaXN0aW5nIHRob3NlLiBTbyB0aGF0IGxlYXZlcyBgcnBzX2xsY19jaGVja2AgYW5kIGBycHNfZmVhdF9sbGNfYWZmaW5pdHlfc3lzY3RsYC4gIEhvd2V2ZXIsIGBycHNfbGxjX2NoZWNrYCAqaXMqIGNhbGxlZCBvbiBldmVyeSBmbG93IHJlY29yZCB1cGRhdGUsIGxpa2Ugb24gYHJlY3Ztc2dgLCBhbmQgYHNlbmRtc2dgIGNhbGxzLiAgSXQmIzM5O3MgdGhlIGNvcmUgbG9naWMgb2YgdGhlIHBhdGNoLCBzbyBJIG5lZWQgdG8gaW5jbHVkZSBpdCBmb3IgdGhlIGZ1enppbmcgYW5hbHlzaXMuICBDaGVja2luZywgaXQmIzM5O3Mgbm90IHN0YXRpYywgbWVhbmluZyBpdCBoYXMgaXRzIG93biBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcy4KClRoZXJlZm9yZSwgdGhlIGNvbmZpZyBpcyBzaW1wbHk6IGBSUFNgLgoKVGhlIHJlYXNvbmluZyBpcyB0aGF0IHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzeXNjdGwgKGBuZXQuY29yZS5ycHNfZmVhdF9sbGNfYWZmaW5pdHlgKSBhbmQgYSBuZXcgZnVuY3Rpb24gKGBycHNfbGxjX2NoZWNrYCkgdG8gb3B0aW1pemUgUlBTIGZsb3cgdGFibGUgdXBkYXRlcyBiYXNlZCBvbiBMTEMgYWZmaW5pdHkuIFRoaXMgY2xlYXJseSB0b3VjaGVzIGNvcmUgbmV0d29ya2luZyBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSBzeXNjdGwgY29uZmlndXJhdGlvbiBhbmQgcmVndWxhciBuZXR3b3JrIHRyYWZmaWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAzOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtSUFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtycHNfbGxjX2NoZWNrJiMzNDssCiAgICAmIzM0O3Jwc19mZWF0X2xsY19hZmZpbml0eV9zeXNjdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzeXNjdGwgYG5ldC5jb3JlLnJwc19mZWF0X2xsY19hZmZpbml0eWAgYW5kIGEgbmV3IGZ1bmN0aW9uIGBycHNfbGxjX2NoZWNrYCB0byBvcHRpbWl6ZSBSUFMgKFJlY2VpdmUgUGFja2V0IFN0ZWVyaW5nKSBmbG93IHRhYmxlIHVwZGF0ZXMgYmFzZWQgb24gTExDIChMYXN0IExldmVsIENhY2hlKSBhZmZpbml0eS4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgc3lzY3RsIGNvbmZpZ3VyYXRpb24gYW5kIG5vcm1hbCBuZXR3b3JrIHRyYWZmaWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JQUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Jwc19sbGNfY2hlY2smIzM0OywKICAgICYjMzQ7cnBzX2ZlYXRfbGxjX2FmZmluaXR5X3N5c2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN5c2N0bCBgbmV0LmNvcmUucnBzX2ZlYXRfbGxjX2FmZmluaXR5YCBhbmQgYSBuZXcgZnVuY3Rpb24gYHJwc19sbGNfY2hlY2tgIHRvIG9wdGltaXplIFJQUyAoUmVjZWl2ZSBQYWNrZXQgU3RlZXJpbmcpIGZsb3cgdGFibGUgdXBkYXRlcyBiYXNlZCBvbiBMTEMgKExhc3QgTGV2ZWwgQ2FjaGUpIGFmZmluaXR5LiBUaGlzIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSBzeXNjdGwgY29uZmlndXJhdGlvbiBhbmQgbm9ybWFsIG5ldHdvcmsgdHJhZmZpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAzOjEyOjA3LjQwMzY4ODgyMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NDE0MjQ5MjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlJQU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJwc19sbGNfY2hlY2tcIixcbiAgICBcInJwc19mZWF0X2xsY19hZmZpbml0eV9zeXNjdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN5c2N0bCBgbmV0LmNvcmUucnBzX2ZlYXRfbGxjX2FmZmluaXR5YCBhbmQgYSBuZXcgZnVuY3Rpb24gYHJwc19sbGNfY2hlY2tgIHRvIG9wdGltaXplIFJQUyAoUmVjZWl2ZSBQYWNrZXQgU3RlZXJpbmcpIGZsb3cgdGFibGUgdXBkYXRlcyBiYXNlZCBvbiBMTEMgKExhc3QgTGV2ZWwgQ2FjaGUpIGFmZmluaXR5LiBUaGlzIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSBzeXNjdGwgY29uZmlndXJhdGlvbiBhbmQgbm9ybWFsIG5ldHdvcmsgdHJhZmZpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDM6MTI6MDcuNDAzNjk0ODQyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDY2NzI2MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5NGQwN2ZiNzI3NzMzMTYxNDM4ZjA4OTYwNTYzMzY5NmUwODZjMzAzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDQgMDM6MTI6MDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcnBzLmggYi9pbmNsdWRlL25ldC9ycHMuaFxcbmluZGV4IGUzM2M2YTJmYThiYmMuLjZkYWNmMDg4OGE2YzIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvcnBzLmhcXG4rKysgYi9pbmNsdWRlL25ldC9ycHMuaFxcbkBAIC0xMiw2ICsxMiw3IEBAXFxuIFxcbiBleHRlcm4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcnBzX25lZWRlZDtcXG4gZXh0ZXJuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJmc19uZWVkZWQ7XFxuK2V4dGVybiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBycHNfZmVhdF9sbGNfYWZmaW5pdHk7XFxuIFxcbiAvKlxcbiAgKiBUaGlzIHN0cnVjdHVyZSBob2xkcyBhbiBSUFMgbWFwIHdoaWNoIGNhbiBiZSBvZiB2YXJpYWJsZSBsZW5ndGguICBUaGVcXG5AQCAtNTUsMTEgKzU2LDE0IEBAIHN0cnVjdCBycHNfc29ja19mbG93X3RhYmxlIHtcXG4gXFxuICNkZWZpbmUgUlBTX05PX0NQVSAweGZmZmZcXG4gXFxuK2Jvb2wgcnBzX2xsY19jaGVjayh1MzIgb2xkX3ZhbCwgdTMyIG5ld192YWwpO1xcbitcXG4gc3RhdGljIGlubGluZSB2b2lkIHJwc19yZWNvcmRfc29ja19mbG93KHJwc190YWdfcHRyIHRhZ19wdHIsIHUzMiBoYXNoKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGludCBpbmRleCA9IGhhc2ggXFx1MDAyNiBycHNfdGFnX3RvX21hc2sodGFnX3B0cik7XFxuIFxcdHUzMiB2YWwgPSBoYXNoIFxcdTAwMjYgfm5ldF9ob3RkYXRhLnJwc19jcHVfbWFzaztcXG4gXFx0c3RydWN0IHJwc19zb2NrX2Zsb3dfdGFibGUgKnRhYmxlO1xcbitcXHR1MzIgb2xkX3ZhbDtcXG4gXFxuIFxcdC8qIFdlIG9ubHkgZ2l2ZSBhIGhpbnQsIHByZWVtcHRpb24gY2FuIGNoYW5nZSBDUFUgdW5kZXIgdXMgKi9cXG4gXFx0dmFsIHw9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7XFxuQEAgLTY4LDcgKzcyLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHJwc19yZWNvcmRfc29ja19mbG93KHJwc190YWdfcHRyIHRhZ19wdHIsIHUzMiBoYXNoKVxcbiBcXHQvKiBUaGUgZm9sbG93aW5nIFdSSVRFX09OQ0UoKSBpcyBwYWlyZWQgd2l0aCB0aGUgUkVBRF9PTkNFKClcXG4gXFx0ICogaGVyZSwgYW5kIGFub3RoZXIgb25lIGluIGdldF9ycHNfY3B1KCkuXFxuIFxcdCAqL1xcbi1cXHRpZiAoUkVBRF9PTkNFKHRhYmxlW2luZGV4XS5lbnQpICE9IHZhbClcXG4rXFx0b2xkX3ZhbCA9IFJFQURfT05DRSh0YWJsZVtpbmRleF0uZW50KTtcXG4rXFx0aWYgKG9sZF92YWwgIT0gdmFsIFxcdTAwMjZcXHUwMDI2IHJwc19sbGNfY2hlY2sob2xkX3ZhbCwgdmFsKSlcXG4gXFx0XFx0V1JJVEVfT05DRSh0YWJsZVtpbmRleF0uZW50LCB2YWwpO1xcbiB9XFxuIFxcbkBAIC0xMzYsMjUgKzE0MSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCByZnNfaXNfbmVlZGVkKHZvaWQpXFxuICNlbmRpZlxcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKVxcbi17XFxuLSNpZmRlZiBDT05GSUdfUlBTXFxuLVxcdGlmICghcmZzX2lzX25lZWRlZCgpKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbi1cXHRfc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChoYXNoKTtcXG4tI2VuZGlmXFxuLX1cXG4tXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuLXtcXG4tI2lmZGVmIENPTkZJR19SUFNcXG4tXFx0aWYgKCFyZnNfaXNfbmVlZGVkKCkpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuLVxcdF9zb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XFxuLSNlbmRpZlxcbi19XFxuK3ZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKTtcXG4rdm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spO1xcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIHNvY2tfcnBzX2RlbGV0ZV9mbG93KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4ge1xcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXFxuaW5kZXggMjZhYzhlYjliMjU5ZC4uNTNiYWQzYzgwMWRjNCAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9kZXYuY1xcbisrKyBiL25ldC9jb3JlL2Rldi5jXFxuQEAgLTQ5OTcsNiArNDk5Nyw4IEBAIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJwc19uZWVkZWQgX19yZWFkX21vc3RseTtcXG4gRVhQT1JUX1NZTUJPTChycHNfbmVlZGVkKTtcXG4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcmZzX25lZWRlZCBfX3JlYWRfbW9zdGx5O1xcbiBFWFBPUlRfU1lNQk9MKHJmc19uZWVkZWQpO1xcbitzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBycHNfZmVhdF9sbGNfYWZmaW5pdHkgX19yZWFkX21vc3RseTtcXG4rRVhQT1JUX1NZTUJPTChycHNfZmVhdF9sbGNfYWZmaW5pdHkpO1xcbiBcXG4gc3RhdGljIHUzMiByZnNfc2xvdCh1MzIgaGFzaCwgcnBzX3RhZ19wdHIgdGFnX3B0cilcXG4ge1xcbkBAIC01MjA4LDYgKzUyMTAsNTUgQEAgc3RhdGljIGludCBnZXRfcnBzX2NwdShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRyZXR1cm4gY3B1O1xcbiB9XFxuIFxcbisvKipcXG4rICogcnBzX2xsY19jaGVjayAtIGRldGVybWluZSBpZiBSUFMgZmxvdyB0YWJsZSBzaG91bGQgYmUgdXBkYXRlZC5cXG4rICogQG9sZF92YWw6IHByZXZpb3VzIGZsb3cgcmVjb3JkIHZhbHVlLlxcbisgKiBAbmV3X3ZhbDogdGFyZ2V0IGZsb3cgcmVjb3JkIHZhbHVlLlxcbisgKlxcbisgKiBSZXR1cm46IHRydWUgaWYgdGhlIHJlY29yZCBuZWVkcyBhbiB1cGRhdGUsIGZhbHNlIG90aGVyd2lzZS5cXG4rICovXFxuK2Jvb2wgcnBzX2xsY19jaGVjayh1MzIgb2xkX3ZhbCwgdTMyIG5ld192YWwpXFxuK3tcXG4rXFx0dTMyIG9sZF9jcHUgPSBvbGRfdmFsIFxcdTAwMjYgfm5ldF9ob3RkYXRhLnJwc19jcHVfbWFzaztcXG4rXFx0dTMyIG5ld19jcHUgPSBuZXdfdmFsIFxcdTAwMjYgfm5ldF9ob3RkYXRhLnJwc19jcHVfbWFzaztcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFJQUyBMTEMgQWZmaW5pdHkgRmVhdHVyZTpcXG4rXFx0ICogUmVkdWNlIFJGUy9BUkZTIGZsb3cgdXBkYXRlcyBieSBjaGVja2luZyBMTEMgYWZmaW5pdHkuXFxuK1xcdCAqXFxuK1xcdCAqIEZyZXF1ZW50IGZsb3cgdGFibGUgdXBkYXRlcyBjYW4gdHJpZ2dlciBjb25zdGFudCBoYXJkd2FyZSBzdGVlcmluZ1xcbitcXHQgKiByZWNvbmZpZ3VyYXRpb25zIChlLmcuLCBuZG9fcnhfZmxvd19zdGVlciksIGxlYWRpbmcgdG8gc2lnbmlmaWNhbnRcXG4rXFx0ICogY29udGVudGlvbiBvbiBkcml2ZXIgaW50ZXJuYWwgbG9ja3MgKGxpa2UgbWx4NSdzIGFyZnNfbG9jaykuXFxuK1xcdCAqXFxuK1xcdCAqIFRoaXMgc3RyYXRlZ3kgb25seSB1cGRhdGVzIHRoZSBmbG93IHJlY29yZCBpZiBpdCBtaWdyYXRlcyBhY3Jvc3MgTExDXFxuK1xcdCAqIGJvdW5kYXJpZXMuIFRoaXMgbWluaW1pemVzIGV4cGVuc2l2ZSBoYXJkd2FyZSB1cGRhdGVzIHdoaWxlIHByZXNlcnZpbmdcXG4rXFx0ICogY2FjaGUgbG9jYWxpdHkgZm9yIHRoZSBhcHBsaWNhdGlvbi5cXG4rXFx0ICovXFxuK1xcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZycHNfZmVhdF9sbGNfYWZmaW5pdHkpKSB7XFxuK1xcdFxcdC8qIEZvcmNlIHVwZGF0ZSBpZiB0aGUgcmVjb3JkZWQgQ1BVIGlzIGludmFsaWQgb3IgaGFzIGdvbmUgb2ZmbGluZSAqL1xcbitcXHRcXHRpZiAob2xkX2NwdSBcXHUwMDNlPSBucl9jcHVfaWRzIHx8ICFjcHVfYWN0aXZlKG9sZF9jcHUpKVxcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEZvcmNlIGFuIHVwZGF0ZSBpZiB0aGUgY3VycmVudCB0YXNrIGlzIG5vIGxvbmdlciBwZXJtaXR0ZWRcXG4rXFx0XFx0ICogdG8gcnVuIG9uIHRoZSBvbGRfY3B1LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKCFjcHVtYXNrX3Rlc3RfY3B1KG9sZF9jcHUsIGN1cnJlbnQtXFx1MDAzZWNwdXNfcHRyKSlcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBJZiBDUFVzIGRvIG5vdCBzaGFyZSBhIGNhY2hlLCBhbGxvdyB0aGUgdXBkYXRlIHRvIHByZXZlbnRcXG4rXFx0XFx0ICogZXhwZW5zaXZlIHJlbW90ZSBtZW1vcnkgYWNjZXNzZXMgYW5kIGNhY2hlIG1pc3Nlcy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICghY3B1c19zaGFyZV9jYWNoZShvbGRfY3B1LCBuZXdfY3B1KSlcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbiAjaWZkZWYgQ09ORklHX1JGU19BQ0NFTFxcbiBcXG4gLyoqXFxuQEAgLTUyNjMsNiArNTMxNCwyOCBAQCBzdGF0aWMgdm9pZCBycHNfdHJpZ2dlcl9zb2Z0aXJxKHZvaWQgKmRhdGEpXFxuIFxcbiAjZW5kaWYgLyogQ09ORklHX1JQUyAqL1xcbiBcXG4rdm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKF9fdTMyIGhhc2gpXFxuK3tcXG4rI2lmZGVmIENPTkZJR19SUFNcXG4rXFx0aWYgKCFyZnNfaXNfbmVlZGVkKCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdF9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKGhhc2gpO1xcbisjZW5kaWZcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2gpO1xcbitcXG4rdm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuK3tcXG4rI2lmZGVmIENPTkZJR19SUFNcXG4rXFx0aWYgKCFyZnNfaXNfbmVlZGVkKCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdF9zb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XFxuKyNlbmRpZlxcbit9XFxuK0VYUE9SVF9TWU1CT0woc29ja19ycHNfcmVjb3JkX2Zsb3cpO1xcbitcXG4gLyogQ2FsbGVkIGZyb20gaGFyZGlycSAoSVBJKSBjb250ZXh0ICovXFxuIHN0YXRpYyB2b2lkIHRyaWdnZXJfcnhfc29mdGlycSh2b2lkICpkYXRhKVxcbiB7XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jIGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmNcXG5pbmRleCBiNTA4NjE4YmZjMTIzLi5iNmQ0ZWJjYmI2YTY4IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jXFxuKysrIGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmNcXG5AQCAtMjEwLDYgKzIxMCwzMyBAQCBzdGF0aWMgaW50IHJwc19zb2NrX2Zsb3dfc3lzY3RsKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXFxuIFxcdGt2ZnJlZV9yY3VfbWlnaHRzbGVlcCh0b2ZyZWUpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuK1xcbitzdGF0aWMgaW50IHJwc19mZWF0X2xsY19hZmZpbml0eV9zeXNjdGwoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0dm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcXG4re1xcbitcXHR1OCBjdXJyX3N0YXRlO1xcbitcXHRpbnQgcmV0O1xcbitcXHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHRtcCA9IHtcXG4rXFx0XFx0LmRhdGEgPSBcXHUwMDI2Y3Vycl9zdGF0ZSxcXG4rXFx0XFx0Lm1heGxlbiA9IHNpemVvZihjdXJyX3N0YXRlKSxcXG4rXFx0XFx0Lm1vZGUgPSB0YWJsZS1cXHUwMDNlbW9kZSxcXG4rXFx0XFx0LmV4dHJhMSA9IHRhYmxlLVxcdTAwM2VleHRyYTEsXFxuK1xcdFxcdC5leHRyYTIgPSB0YWJsZS1cXHUwMDNlZXh0cmEyXFxuK1xcdH07XFxuK1xcbitcXHRjdXJyX3N0YXRlID0gc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2cnBzX2ZlYXRfbGxjX2FmZmluaXR5KSA/IDEgOiAwO1xcbitcXG4rXFx0cmV0ID0gcHJvY19kb3U4dmVjX21pbm1heChcXHUwMDI2dG1wLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTtcXG4rXFx0aWYgKHdyaXRlIFxcdTAwMjZcXHUwMDI2IHJldCA9PSAwKSB7XFxuK1xcdFxcdGlmIChjdXJyX3N0YXRlIFxcdTAwMjZcXHUwMDI2ICFzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZycHNfZmVhdF9sbGNfYWZmaW5pdHkpKVxcbitcXHRcXHRcXHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcXHUwMDI2cnBzX2ZlYXRfbGxjX2FmZmluaXR5KTtcXG4rXFx0XFx0ZWxzZSBpZiAoIWN1cnJfc3RhdGUgXFx1MDAyNlxcdTAwMjYgc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2cnBzX2ZlYXRfbGxjX2FmZmluaXR5KSlcXG4rXFx0XFx0XFx0c3RhdGljX2JyYW5jaF9kaXNhYmxlKFxcdTAwMjZycHNfZmVhdF9sbGNfYWZmaW5pdHkpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiAjZW5kaWYgLyogQ09ORklHX1JQUyAqL1xcbiBcXG4gI2lmZGVmIENPTkZJR19ORVRfRkxPV19MSU1JVFxcbkBAIC01NTQsNiArNTgxLDE0IEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5ldF9jb3JlX3RhYmxlW10gPSB7XFxuIFxcdFxcdC5tb2RlXFx0XFx0PSAwNjQ0LFxcbiBcXHRcXHQucHJvY19oYW5kbGVyXFx0PSBycHNfc29ja19mbG93X3N5c2N0bFxcbiBcXHR9LFxcbitcXHR7XFxuK1xcdFxcdC5wcm9jbmFtZSAgID0gXFxcInJwc19mZWF0X2xsY19hZmZpbml0eVxcXCIsXFxuK1xcdFxcdC5tYXhsZW4gICAgID0gc2l6ZW9mKHU4KSxcXG4rXFx0XFx0Lm1vZGUgICAgICAgPSAwNjQ0LFxcbitcXHRcXHQucHJvY19oYW5kbGVyICAgPSBycHNfZmVhdF9sbGNfYWZmaW5pdHlfc3lzY3RsLFxcbitcXHRcXHQuZXh0cmExICAgICA9IFNZU0NUTF9aRVJPLFxcbitcXHRcXHQuZXh0cmEyICAgICA9IFNZU0NUTF9PTkVcXG4rXFx0fSxcXG4gI2VuZGlmXFxuICNpZmRlZiBDT05GSUdfTkVUX0ZMT1dfTElNSVRcXG4gXFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMzoxMjowNy44MTEwNjI1MzVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4OTAwNjg2NjM5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSUFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJycHNfbGxjX2NoZWNrXCIsXG4gICAgXCJycHNfZmVhdF9sbGNfYWZmaW5pdHlfc3lzY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzeXNjdGwgYG5ldC5jb3JlLnJwc19mZWF0X2xsY19hZmZpbml0eWAgYW5kIGEgbmV3IGZ1bmN0aW9uIGBycHNfbGxjX2NoZWNrYCB0byBvcHRpbWl6ZSBSUFMgKFJlY2VpdmUgUGFja2V0IFN0ZWVyaW5nKSBmbG93IHRhYmxlIHVwZGF0ZXMgYmFzZWQgb24gTExDIChMYXN0IExldmVsIENhY2hlKSBhZmZpbml0eS4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgc3lzY3RsIGNvbmZpZ3VyYXRpb24gYW5kIG5vcm1hbCBuZXR3b3JrIHRyYWZmaWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDk0ZDA3ZmI3Mjc3MzMxNjE0MzhmMDg5NjA1NjMzNjk2ZTA4NmMzMDNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDAzOjEyOjA2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcnBzLmggYi9pbmNsdWRlL25ldC9ycHMuaFxuaW5kZXggZTMzYzZhMmZhOGJiYy4uNmRhY2YwODg4YTZjMiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3Jwcy5oXG4rKysgYi9pbmNsdWRlL25ldC9ycHMuaFxuQEAgLTEyLDYgKzEyLDcgQEBcbiBcbiBleHRlcm4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcnBzX25lZWRlZDtcbiBleHRlcm4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcmZzX25lZWRlZDtcbitleHRlcm4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcnBzX2ZlYXRfbGxjX2FmZmluaXR5O1xuIFxuIC8qXG4gICogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgYW4gUlBTIG1hcCB3aGljaCBjYW4gYmUgb2YgdmFyaWFibGUgbGVuZ3RoLiAgVGhlXG5AQCAtNTUsMTEgKzU2LDE0IEBAIHN0cnVjdCBycHNfc29ja19mbG93X3RhYmxlIHtcbiBcbiAjZGVmaW5lIFJQU19OT19DUFUgMHhmZmZmXG4gXG4rYm9vbCBycHNfbGxjX2NoZWNrKHUzMiBvbGRfdmFsLCB1MzIgbmV3X3ZhbCk7XG4rXG4gc3RhdGljIGlubGluZSB2b2lkIHJwc19yZWNvcmRfc29ja19mbG93KHJwc190YWdfcHRyIHRhZ19wdHIsIHUzMiBoYXNoKVxuIHtcbiBcdHVuc2lnbmVkIGludCBpbmRleCA9IGhhc2ggXHUwMDI2IHJwc190YWdfdG9fbWFzayh0YWdfcHRyKTtcbiBcdHUzMiB2YWwgPSBoYXNoIFx1MDAyNiB+bmV0X2hvdGRhdGEucnBzX2NwdV9tYXNrO1xuIFx0c3RydWN0IHJwc19zb2NrX2Zsb3dfdGFibGUgKnRhYmxlO1xuK1x0dTMyIG9sZF92YWw7XG4gXG4gXHQvKiBXZSBvbmx5IGdpdmUgYSBoaW50LCBwcmVlbXB0aW9uIGNhbiBjaGFuZ2UgQ1BVIHVuZGVyIHVzICovXG4gXHR2YWwgfD0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTtcbkBAIC02OCw3ICs3Miw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBycHNfcmVjb3JkX3NvY2tfZmxvdyhycHNfdGFnX3B0ciB0YWdfcHRyLCB1MzIgaGFzaClcbiBcdC8qIFRoZSBmb2xsb3dpbmcgV1JJVEVfT05DRSgpIGlzIHBhaXJlZCB3aXRoIHRoZSBSRUFEX09OQ0UoKVxuIFx0ICogaGVyZSwgYW5kIGFub3RoZXIgb25lIGluIGdldF9ycHNfY3B1KCkuXG4gXHQgKi9cbi1cdGlmIChSRUFEX09OQ0UodGFibGVbaW5kZXhdLmVudCkgIT0gdmFsKVxuK1x0b2xkX3ZhbCA9IFJFQURfT05DRSh0YWJsZVtpbmRleF0uZW50KTtcbitcdGlmIChvbGRfdmFsICE9IHZhbCBcdTAwMjZcdTAwMjYgcnBzX2xsY19jaGVjayhvbGRfdmFsLCB2YWwpKVxuIFx0XHRXUklURV9PTkNFKHRhYmxlW2luZGV4XS5lbnQsIHZhbCk7XG4gfVxuIFxuQEAgLTEzNiwyNSArMTQxLDggQEAgc3RhdGljIGlubGluZSBib29sIHJmc19pc19uZWVkZWQodm9pZClcbiAjZW5kaWZcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goX191MzIgaGFzaClcbi17XG4tI2lmZGVmIENPTkZJR19SUFNcbi1cdGlmICghcmZzX2lzX25lZWRlZCgpKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRfc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChoYXNoKTtcbi0jZW5kaWZcbi19XG4tXG4tc3RhdGljIGlubGluZSB2b2lkIHNvY2tfcnBzX3JlY29yZF9mbG93KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbi17XG4tI2lmZGVmIENPTkZJR19SUFNcbi1cdGlmICghcmZzX2lzX25lZWRlZCgpKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRfc29ja19ycHNfcmVjb3JkX2Zsb3coc2spO1xuLSNlbmRpZlxuLX1cbit2b2lkIHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goX191MzIgaGFzaCk7XG4rdm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spO1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzb2NrX3Jwc19kZWxldGVfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4ge1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcbmluZGV4IDI2YWM4ZWI5YjI1OWQuLjUzYmFkM2M4MDFkYzQgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuKysrIGIvbmV0L2NvcmUvZGV2LmNcbkBAIC00OTk3LDYgKzQ5OTcsOCBAQCBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBycHNfbmVlZGVkIF9fcmVhZF9tb3N0bHk7XG4gRVhQT1JUX1NZTUJPTChycHNfbmVlZGVkKTtcbiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSByZnNfbmVlZGVkIF9fcmVhZF9tb3N0bHk7XG4gRVhQT1JUX1NZTUJPTChyZnNfbmVlZGVkKTtcbitzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBycHNfZmVhdF9sbGNfYWZmaW5pdHkgX19yZWFkX21vc3RseTtcbitFWFBPUlRfU1lNQk9MKHJwc19mZWF0X2xsY19hZmZpbml0eSk7XG4gXG4gc3RhdGljIHUzMiByZnNfc2xvdCh1MzIgaGFzaCwgcnBzX3RhZ19wdHIgdGFnX3B0cilcbiB7XG5AQCAtNTIwOCw2ICs1MjEwLDU1IEBAIHN0YXRpYyBpbnQgZ2V0X3Jwc19jcHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiBjcHU7XG4gfVxuIFxuKy8qKlxuKyAqIHJwc19sbGNfY2hlY2sgLSBkZXRlcm1pbmUgaWYgUlBTIGZsb3cgdGFibGUgc2hvdWxkIGJlIHVwZGF0ZWQuXG4rICogQG9sZF92YWw6IHByZXZpb3VzIGZsb3cgcmVjb3JkIHZhbHVlLlxuKyAqIEBuZXdfdmFsOiB0YXJnZXQgZmxvdyByZWNvcmQgdmFsdWUuXG4rICpcbisgKiBSZXR1cm46IHRydWUgaWYgdGhlIHJlY29yZCBuZWVkcyBhbiB1cGRhdGUsIGZhbHNlIG90aGVyd2lzZS5cbisgKi9cbitib29sIHJwc19sbGNfY2hlY2sodTMyIG9sZF92YWwsIHUzMiBuZXdfdmFsKVxuK3tcbitcdHUzMiBvbGRfY3B1ID0gb2xkX3ZhbCBcdTAwMjYgfm5ldF9ob3RkYXRhLnJwc19jcHVfbWFzaztcbitcdHUzMiBuZXdfY3B1ID0gbmV3X3ZhbCBcdTAwMjYgfm5ldF9ob3RkYXRhLnJwc19jcHVfbWFzaztcbitcbitcdC8qXG4rXHQgKiBSUFMgTExDIEFmZmluaXR5IEZlYXR1cmU6XG4rXHQgKiBSZWR1Y2UgUkZTL0FSRlMgZmxvdyB1cGRhdGVzIGJ5IGNoZWNraW5nIExMQyBhZmZpbml0eS5cbitcdCAqXG4rXHQgKiBGcmVxdWVudCBmbG93IHRhYmxlIHVwZGF0ZXMgY2FuIHRyaWdnZXIgY29uc3RhbnQgaGFyZHdhcmUgc3RlZXJpbmdcbitcdCAqIHJlY29uZmlndXJhdGlvbnMgKGUuZy4sIG5kb19yeF9mbG93X3N0ZWVyKSwgbGVhZGluZyB0byBzaWduaWZpY2FudFxuK1x0ICogY29udGVudGlvbiBvbiBkcml2ZXIgaW50ZXJuYWwgbG9ja3MgKGxpa2UgbWx4NSdzIGFyZnNfbG9jaykuXG4rXHQgKlxuK1x0ICogVGhpcyBzdHJhdGVneSBvbmx5IHVwZGF0ZXMgdGhlIGZsb3cgcmVjb3JkIGlmIGl0IG1pZ3JhdGVzIGFjcm9zcyBMTENcbitcdCAqIGJvdW5kYXJpZXMuIFRoaXMgbWluaW1pemVzIGV4cGVuc2l2ZSBoYXJkd2FyZSB1cGRhdGVzIHdoaWxlIHByZXNlcnZpbmdcbitcdCAqIGNhY2hlIGxvY2FsaXR5IGZvciB0aGUgYXBwbGljYXRpb24uXG4rXHQgKi9cbitcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnJwc19mZWF0X2xsY19hZmZpbml0eSkpIHtcbitcdFx0LyogRm9yY2UgdXBkYXRlIGlmIHRoZSByZWNvcmRlZCBDUFUgaXMgaW52YWxpZCBvciBoYXMgZ29uZSBvZmZsaW5lICovXG4rXHRcdGlmIChvbGRfY3B1IFx1MDAzZT0gbnJfY3B1X2lkcyB8fCAhY3B1X2FjdGl2ZShvbGRfY3B1KSlcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdFx0LypcbitcdFx0ICogRm9yY2UgYW4gdXBkYXRlIGlmIHRoZSBjdXJyZW50IHRhc2sgaXMgbm8gbG9uZ2VyIHBlcm1pdHRlZFxuK1x0XHQgKiB0byBydW4gb24gdGhlIG9sZF9jcHUuXG4rXHRcdCAqL1xuK1x0XHRpZiAoIWNwdW1hc2tfdGVzdF9jcHUob2xkX2NwdSwgY3VycmVudC1cdTAwM2VjcHVzX3B0cikpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIElmIENQVXMgZG8gbm90IHNoYXJlIGEgY2FjaGUsIGFsbG93IHRoZSB1cGRhdGUgdG8gcHJldmVudFxuK1x0XHQgKiBleHBlbnNpdmUgcmVtb3RlIG1lbW9yeSBhY2Nlc3NlcyBhbmQgY2FjaGUgbWlzc2VzLlxuK1x0XHQgKi9cbitcdFx0aWYgKCFjcHVzX3NoYXJlX2NhY2hlKG9sZF9jcHUsIG5ld19jcHUpKVxuK1x0XHRcdHJldHVybiB0cnVlO1xuK1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gI2lmZGVmIENPTkZJR19SRlNfQUNDRUxcbiBcbiAvKipcbkBAIC01MjYzLDYgKzUzMTQsMjggQEAgc3RhdGljIHZvaWQgcnBzX3RyaWdnZXJfc29mdGlycSh2b2lkICpkYXRhKVxuIFxuICNlbmRpZiAvKiBDT05GSUdfUlBTICovXG4gXG4rdm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKF9fdTMyIGhhc2gpXG4re1xuKyNpZmRlZiBDT05GSUdfUlBTXG4rXHRpZiAoIXJmc19pc19uZWVkZWQoKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0X3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goaGFzaCk7XG4rI2VuZGlmXG4rfVxuK0VYUE9SVF9TWU1CT0woc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaCk7XG4rXG4rdm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4re1xuKyNpZmRlZiBDT05GSUdfUlBTXG4rXHRpZiAoIXJmc19pc19uZWVkZWQoKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0X3NvY2tfcnBzX3JlY29yZF9mbG93KHNrKTtcbisjZW5kaWZcbit9XG4rRVhQT1JUX1NZTUJPTChzb2NrX3Jwc19yZWNvcmRfZmxvdyk7XG4rXG4gLyogQ2FsbGVkIGZyb20gaGFyZGlycSAoSVBJKSBjb250ZXh0ICovXG4gc3RhdGljIHZvaWQgdHJpZ2dlcl9yeF9zb2Z0aXJxKHZvaWQgKmRhdGEpXG4ge1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jIGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmNcbmluZGV4IGI1MDg2MThiZmMxMjMuLmI2ZDRlYmNiYjZhNjggMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuY1xuKysrIGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmNcbkBAIC0yMTAsNiArMjEwLDMzIEBAIHN0YXRpYyBpbnQgcnBzX3NvY2tfZmxvd19zeXNjdGwoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbiBcdGt2ZnJlZV9yY3VfbWlnaHRzbGVlcCh0b2ZyZWUpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4rXG4rc3RhdGljIGludCBycHNfZmVhdF9sbGNfYWZmaW5pdHlfc3lzY3RsKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4rXHRcdFx0XHRcdHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXG4re1xuK1x0dTggY3Vycl9zdGF0ZTtcbitcdGludCByZXQ7XG4rXHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHRtcCA9IHtcbitcdFx0LmRhdGEgPSBcdTAwMjZjdXJyX3N0YXRlLFxuK1x0XHQubWF4bGVuID0gc2l6ZW9mKGN1cnJfc3RhdGUpLFxuK1x0XHQubW9kZSA9IHRhYmxlLVx1MDAzZW1vZGUsXG4rXHRcdC5leHRyYTEgPSB0YWJsZS1cdTAwM2VleHRyYTEsXG4rXHRcdC5leHRyYTIgPSB0YWJsZS1cdTAwM2VleHRyYTJcbitcdH07XG4rXG4rXHRjdXJyX3N0YXRlID0gc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZycHNfZmVhdF9sbGNfYWZmaW5pdHkpID8gMSA6IDA7XG4rXG4rXHRyZXQgPSBwcm9jX2RvdTh2ZWNfbWlubWF4KFx1MDAyNnRtcCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XG4rXHRpZiAod3JpdGUgXHUwMDI2XHUwMDI2IHJldCA9PSAwKSB7XG4rXHRcdGlmIChjdXJyX3N0YXRlIFx1MDAyNlx1MDAyNiAhc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZycHNfZmVhdF9sbGNfYWZmaW5pdHkpKVxuK1x0XHRcdHN0YXRpY19icmFuY2hfZW5hYmxlKFx1MDAyNnJwc19mZWF0X2xsY19hZmZpbml0eSk7XG4rXHRcdGVsc2UgaWYgKCFjdXJyX3N0YXRlIFx1MDAyNlx1MDAyNiBzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnJwc19mZWF0X2xsY19hZmZpbml0eSkpXG4rXHRcdFx0c3RhdGljX2JyYW5jaF9kaXNhYmxlKFx1MDAyNnJwc19mZWF0X2xsY19hZmZpbml0eSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiAjZW5kaWYgLyogQ09ORklHX1JQUyAqL1xuIFxuICNpZmRlZiBDT05GSUdfTkVUX0ZMT1dfTElNSVRcbkBAIC01NTQsNiArNTgxLDE0IEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5ldF9jb3JlX3RhYmxlW10gPSB7XG4gXHRcdC5tb2RlXHRcdD0gMDY0NCxcbiBcdFx0LnByb2NfaGFuZGxlclx0PSBycHNfc29ja19mbG93X3N5c2N0bFxuIFx0fSxcbitcdHtcbitcdFx0LnByb2NuYW1lICAgPSBcInJwc19mZWF0X2xsY19hZmZpbml0eVwiLFxuK1x0XHQubWF4bGVuICAgICA9IHNpemVvZih1OCksXG4rXHRcdC5tb2RlICAgICAgID0gMDY0NCxcbitcdFx0LnByb2NfaGFuZGxlciAgID0gcnBzX2ZlYXRfbGxjX2FmZmluaXR5X3N5c2N0bCxcbitcdFx0LmV4dHJhMSAgICAgPSBTWVNDVExfWkVSTyxcbitcdFx0LmV4dHJhMiAgICAgPSBTWVNDVExfT05FXG4rXHR9LFxuICNlbmRpZlxuICNpZmRlZiBDT05GSUdfTkVUX0ZMT1dfTElNSVRcbiBcdHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAzOjEyOjA3LjgxMTA2NDExNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMjc2NjU2NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSUFMgTExDIEFmZmluaXR5IFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0J3MgaW50cm9kdWNpbmcgYSBuZXcgc3lzY3RsLCBgbmV0LmNvcmUucnBzX2ZlYXRfbGxjX2FmZmluaXR5YCwgYW5kIGEgbmV3IGZlYXR1cmUgZm9yIFJQUywgd2hpY2ggaXMgaW50cmlndWluZy4gSSBzZWUgdGhlIGNoYW5nZXMgYXJlIHRvdWNoaW5nIHNvbWUga2V5IG5ldHdvcmtpbmcgZmlsZXM6IGBpbmNsdWRlL25ldC9ycHMuaGAsIGBuZXQvY29yZS9kZXYuY2AsIGFuZCBgbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmNgLiBUaGlzIExMQyBhZmZpbml0eSB0aGluZyBpcyBhYm91dCBjaGVja2luZyBpZiBhbiBSUFMgZmxvdyB0YWJsZSB1cGRhdGUgaXMgbmVjZXNzYXJ5LCBiYXNlZCBvbiB0aGF0IGNhY2hlIGxldmVsIGFmZmluaXR5LCBzbyBwb3RlbnRpYWxseSBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgYnkga2VlcGluZyBmbG93cyBvbiB0aGUgc2FtZSBjb3JlLlxuXG5UaGUgcGF0Y2ggYWRkcyBhIG5ldyBmdW5jdGlvbiwgYHJwc19sbGNfY2hlY2tgLCBpbiBgbmV0L2NvcmUvZGV2LmNgLCB3aGljaCBzZWVtcyB0byBiZSB0aGUgY29yZSBvZiB0aGlzIG5ldyBmZWF0dXJlLiBJdCdzIHVzaW5nIGBzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnJwc19mZWF0X2xsY19hZmZpbml0eSlgLCBzbyB0aGlzIGBycHNfZmVhdF9sbGNfYWZmaW5pdHlfc3lzY3RsYCBoYW5kbGVyIG11c3QgYmUgaG93IHdlIGVuYWJsZSBvciBkaXNhYmxlIHRoaXMgY29uZGl0aW9uYWwgYmVoYXZpb3IuIEludGVyZXN0aW5nLiBBbmQgZnJvbSB3aGF0IEkgc2VlLCBgcnBzX2xsY19jaGVja2AgZ2V0cyBjYWxsZWQgZnJvbSBgcnBzX3JlY29yZF9zb2NrX2Zsb3dgIGluIGBpbmNsdWRlL25ldC9ycHMuaGAsIHdoaWNoIGlzIGEga2V5IHBhcnQgb2YgaG93IHBhY2tldHMgYXJlIHJvdXRlZCB0byBjb3Jlcy4gVGhpcyB3aG9sZSB0aGluZyB0cmlja2xlcyBkb3duIHRocm91Z2ggYSBmZXcgZnVuY3Rpb25zOiBgX3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2hgLCBgX3NvY2tfcnBzX3JlY29yZF9mbG93YCwgYW5kIHRoZW4gdGhlIHVuLWlubGluZWQgdmVyc2lvbnMgaW4gYG5ldC9jb3JlL2Rldi5jYC5cblxuUmlnaHQsIHRpbWUgdG8gZXZhbHVhdGUgaWYgdGhpcyBpcyByaXBlIGZvciBmdXp6aW5nLiBHaXZlbiB0aGUgbW9kaWZpY2F0aW9uIHRvIGNvcmUgbmV0d29ya2luZyBsb2dpYyDigJMgUlBTLCBzcGVjaWZpY2FsbHkg4oCTIGFuZCB0aGUgYWRkaXRpb24gb2YgdGhhdCBuZXcgc3lzY3RsLCBteSBndXQgZmVlbGluZyBpcyB0aGF0IGl0J3Mgd29ydGggYSBzaG90LiBUaGUgbmV3IGBycHNfbGxjX2NoZWNrYCBmdW5jdGlvbiBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBpZiBSUFMvUkZTIGlzIGVuYWJsZWQsIGFuZCB0aGUgYHJwc19mZWF0X2xsY19hZmZpbml0eV9zeXNjdGxgIGhhbmRsZXIgaXMgYWxzbyBleHBvc2VkLiBUaGF04oCZcyBlbm91Z2ggdG8gcGVhayBteSBpbnRlcmVzdC5cblxuTm93LCBsZXQncyBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGNoZWNrIHRoZSBgI2lmZGVmIENPTkZJR19SUFNgIGd1YXJkcywgc28gSSdsbCBwb2tlIGFyb3VuZCBgbmV0L2NvcmUvZGV2LmNgIGFuZCBgbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmNgIHRvIGNvbmZpcm0gd2hhdCdzIG5lZWRlZC4gVGltZSB0byBkaWcgaW4gYW5kIGZpbmQgdGhvc2UgaW5pdGlhbCBjb25maWcgcmVxdWlyZW1lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzA4LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDM6MTI6MTYuMDM4NzMyNTc1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNzU0NDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19SUFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTIzMT1zdGF0aWMgaW5saW5lIHZvaWQgYmFja2xvZ19sb2NrX2lycV9zYXZlKHN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMjM3LVxcdFxcdGxvY2FsX2lycV9zYXZlKCpmbGFncyk7XFxubmV0L2NvcmUvZGV2LmM6MjM4OlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19SUFMpIHx8IHVzZV9iYWNrbG9nX3RocmVhZHMoKSlcXG5uZXQvY29yZS9kZXYuYy0yMzktXFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZzZC1cXHUwMDNlaW5wdXRfcGt0X3F1ZXVlLmxvY2spO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MjQzPXN0YXRpYyBpbmxpbmUgdm9pZCBiYWNrbG9nX2xvY2tfaXJxX2Rpc2FibGUoc3RydWN0IHNvZnRuZXRfZGF0YSAqc2QpXFxubmV0L2NvcmUvZGV2LmMtMjQ0LXtcXG5uZXQvY29yZS9kZXYuYzoyNDU6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1JQUykgfHwgdXNlX2JhY2tsb2dfdGhyZWFkcygpKVxcbm5ldC9jb3JlL2Rldi5jLTI0Ni1cXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZzZC1cXHUwMDNlaW5wdXRfcGt0X3F1ZXVlLmxvY2spO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MjUxPXN0YXRpYyBpbmxpbmUgdm9pZCBiYWNrbG9nX3VubG9ja19pcnFfcmVzdG9yZShzdHJ1Y3Qgc29mdG5ldF9kYXRhICpzZCxcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTI1Ni1cXHR9IGVsc2Uge1xcbm5ldC9jb3JlL2Rldi5jOjI1NzpcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUlBTKSB8fCB1c2VfYmFja2xvZ190aHJlYWRzKCkpXFxubmV0L2NvcmUvZGV2LmMtMjU4LVxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZzZC1cXHUwMDNlaW5wdXRfcGt0X3F1ZXVlLmxvY2spO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MjYzPXN0YXRpYyBpbmxpbmUgdm9pZCBiYWNrbG9nX3VubG9ja19pcnFfZW5hYmxlKHN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkKVxcbm5ldC9jb3JlL2Rldi5jLTI2NC17XFxubmV0L2NvcmUvZGV2LmM6MjY1OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19SUFMpIHx8IHVzZV9iYWNrbG9nX3RocmVhZHMoKSlcXG5uZXQvY29yZS9kZXYuYy0yNjYtXFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZzZC1cXHUwMDNlaW5wdXRfcGt0X3F1ZXVlLmxvY2spO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9NDk1OD1zdGF0aWMgaW5saW5lIHZvaWQgX19fX25hcGlfc2NoZWR1bGUoc3RydWN0IHNvZnRuZXRfZGF0YSAqc2QsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy00OTkzLVxcbm5ldC9jb3JlL2Rldi5jOjQ5OTQ6I2lmZGVmIENPTkZJR19SUFNcXG5uZXQvY29yZS9kZXYuYy00OTk1LVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTMwNj1zdGF0aWMgdm9pZCBycHNfdHJpZ2dlcl9zb2Z0aXJxKHZvaWQgKmRhdGEpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy01MzE0LVxcbm5ldC9jb3JlL2Rldi5jOjUzMTU6I2VuZGlmIC8qIENPTkZJR19SUFMgKi9cXG5uZXQvY29yZS9kZXYuYy01MzE2LVxcbm5ldC9jb3JlL2Rldi5jPTUzMTc9dm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKF9fdTMyIGhhc2gpXFxubmV0L2NvcmUvZGV2LmMtNTMxOC17XFxubmV0L2NvcmUvZGV2LmM6NTMxOTojaWZkZWYgQ09ORklHX1JQU1xcbm5ldC9jb3JlL2Rldi5jLTUzMjAtXFx0aWYgKCFyZnNfaXNfbmVlZGVkKCkpXFxuLS1cXG5uZXQvY29yZS9kZXYuYz01MzI4PXZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9jb3JlL2Rldi5jLTUzMjkte1xcbm5ldC9jb3JlL2Rldi5jOjUzMzA6I2lmZGVmIENPTkZJR19SUFNcXG5uZXQvY29yZS9kZXYuYy01MzMxLVxcdGlmICghcmZzX2lzX25lZWRlZCgpKVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTM1OD1zdGF0aWMgdm9pZCBuYXBpX3NjaGVkdWxlX3JwcyhzdHJ1Y3Qgc29mdG5ldF9kYXRhICpzZClcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTUzNjEtXFxubmV0L2NvcmUvZGV2LmM6NTM2MjojaWZkZWYgQ09ORklHX1JQU1xcbm5ldC9jb3JlL2Rldi5jLTUzNjMtXFx0aWYgKHNkICE9IG15c2QpIHtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTUzNzgtXFx0fVxcbm5ldC9jb3JlL2Rldi5jOjUzNzk6I2VuZGlmIC8qIENPTkZJR19SUFMgKi9cXG5uZXQvY29yZS9kZXYuYy01MzgwLVxcdF9fbmFwaV9zY2hlZHVsZV9pcnFvZmYoXFx1MDAyNm15c2QtXFx1MDAzZWJhY2tsb2cpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTc2Nj1zdGF0aWMgaW50IG5ldGlmX3J4X2ludGVybmFsKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy01NzczLVxcbm5ldC9jb3JlL2Rldi5jOjU3NzQ6I2lmZGVmIENPTkZJR19SUFNcXG5uZXQvY29yZS9kZXYuYy01Nzc1LVxcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZycHNfbmVlZGVkKSkge1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9NjQ1Mz1zdGF0aWMgaW50IG5ldGlmX3JlY2VpdmVfc2tiX2ludGVybmFsKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy02NDYyLVxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvY29yZS9kZXYuYzo2NDYzOiNpZmRlZiBDT05GSUdfUlBTXFxubmV0L2NvcmUvZGV2LmMtNjQ2NC1cXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2cnBzX25lZWRlZCkpIHtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTY0ODA9dm9pZCBuZXRpZl9yZWNlaXZlX3NrYl9saXN0X2ludGVybmFsKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy02NDk0LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvY29yZS9kZXYuYzo2NDk1OiNpZmRlZiBDT05GSUdfUlBTXFxubmV0L2NvcmUvZGV2LmMtNjQ5Ni1cXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2cnBzX25lZWRlZCkpIHtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTY2MDE9c3RhdGljIGJvb2wgZmx1c2hfcmVxdWlyZWQoaW50IGNwdSlcXG5uZXQvY29yZS9kZXYuYy02NjAyLXtcXG5uZXQvY29yZS9kZXYuYzo2NjAzOiNpZiBJU19FTkFCTEVEKENPTkZJR19SUFMpXFxubmV0L2NvcmUvZGV2LmMtNjYwNC1cXHRzdHJ1Y3Qgc29mdG5ldF9kYXRhICpzZCA9IFxcdTAwMjZwZXJfY3B1KHNvZnRuZXRfZGF0YSwgY3B1KTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTY2NzU9c3RhdGljIHZvaWQgbmV0X3Jwc19zZW5kX2lwaShzdHJ1Y3Qgc29mdG5ldF9kYXRhICpyZW1zZClcXG5uZXQvY29yZS9kZXYuYy02Njc2LXtcXG5uZXQvY29yZS9kZXYuYzo2Njc3OiNpZmRlZiBDT05GSUdfUlBTXFxubmV0L2NvcmUvZGV2LmMtNjY3OC1cXHR3aGlsZSAocmVtc2QpIHtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTY2OTI9c3RhdGljIHZvaWQgbmV0X3Jwc19hY3Rpb25fYW5kX2lycV9lbmFibGUoc3RydWN0IHNvZnRuZXRfZGF0YSAqc2QpXFxubmV0L2NvcmUvZGV2LmMtNjY5My17XFxubmV0L2NvcmUvZGV2LmM6NjY5NDojaWZkZWYgQ09ORklHX1JQU1xcbm5ldC9jb3JlL2Rldi5jLTY2OTUtXFx0c3RydWN0IHNvZnRuZXRfZGF0YSAqcmVtc2QgPSBzZC1cXHUwMDNlcnBzX2lwaV9saXN0O1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9NjcwOT1zdGF0aWMgYm9vbCBzZF9oYXNfcnBzX2lwaV93YWl0aW5nKHN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkKVxcbm5ldC9jb3JlL2Rldi5jLTY3MTAte1xcbm5ldC9jb3JlL2Rldi5jOjY3MTE6I2lmZGVmIENPTkZJR19SUFNcXG5uZXQvY29yZS9kZXYuYy02NzEyLVxcdHJldHVybiAhdXNlX2JhY2tsb2dfdGhyZWFkcygpIFxcdTAwMjZcXHUwMDI2IHNkLVxcdTAwM2VycHNfaXBpX2xpc3Q7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMjc4Mz1zdGF0aWMgaW50IGRldl9jcHVfZGVhZCh1bnNpZ25lZCBpbnQgb2xkY3B1KVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTI4MjktXFx0aWYgKCF1c2VfYmFja2xvZ190aHJlYWRzKCkpIHtcXG5uZXQvY29yZS9kZXYuYzoxMjgzMDojaWZkZWYgQ09ORklHX1JQU1xcbm5ldC9jb3JlL2Rldi5jLTEyODMxLVxcdFxcdHJlbXNkID0gb2xkc2QtXFx1MDAzZXJwc19pcGlfbGlzdDtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTEzMzA0PXN0YXRpYyBpbnQgX19pbml0IG5ldF9kZXZfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTMzNDEtXFx0XFx0c2QtXFx1MDAzZW91dHB1dF9xdWV1ZV90YWlscCA9IFxcdTAwMjZzZC1cXHUwMDNlb3V0cHV0X3F1ZXVlO1xcbm5ldC9jb3JlL2Rldi5jOjEzMzQyOiNpZmRlZiBDT05GSUdfUlBTXFxubmV0L2NvcmUvZGV2LmMtMTMzNDMtXFx0XFx0SU5JVF9DU0QoXFx1MDAyNnNkLVxcdTAwM2Vjc2QsIHJwc190cmlnZ2VyX3NvZnRpcnEsIHNkKTtcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jPTk1Mz1zdGF0aWMgY29uc3Qgc3RydWN0IHN5c2ZzX29wcyByeF9xdWV1ZV9zeXNmc19vcHMgPSB7XFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy05NTctXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6OTU4OiNpZmRlZiBDT05GSUdfUlBTXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtOTU5LXN0YXRpYyBzc2l6ZV90IHNob3dfcnBzX21hcChzdHJ1Y3QgbmV0ZGV2X3J4X3F1ZXVlICpxdWV1ZSwgY2hhciAqYnVmKVxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTEzMz1zdGF0aWMgc3RydWN0IHJ4X3F1ZXVlX2F0dHJpYnV0ZSBycHNfZGV2X2Zsb3dfdGFibGVfY250X2F0dHJpYnV0ZSBfX3JvX2FmdGVyX2luaXRcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTExMzUtXFx0XFx0IHNob3dfcnBzX2Rldl9mbG93X3RhYmxlX2NudCwgc3RvcmVfcnBzX2Rldl9mbG93X3RhYmxlX2NudCk7XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTEzNjojZW5kaWYgLyogQ09ORklHX1JQUyAqL1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTExMzctXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTEzOD1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcnhfcXVldWVfZGVmYXVsdF9hdHRyc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMTM5OiNpZmRlZiBDT05GSUdfUlBTXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTE0MC1cXHRcXHUwMDI2cnBzX2NwdXNfYXR0cmlidXRlLmF0dHIsXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0xMTQ3PXN0YXRpYyB2b2lkIHJ4X3F1ZXVlX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMTQ5LVxcdHN0cnVjdCBuZXRkZXZfcnhfcXVldWUgKnF1ZXVlID0gdG9fcnhfcXVldWUoa29iaik7XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTE1MDojaWZkZWYgQ09ORklHX1JQU1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTExNTEtXFx0cnBzX3RhZ19wdHIgdGFnX3B0cjtcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jPTExOTY9c3RhdGljIGludCByeF9xdWV1ZV9kZWZhdWx0X21hc2soc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTExOTgte1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjExOTk6I2lmIElTX0VOQUJMRUQoQ09ORklHX1JQUykgXFx1MDAyNlxcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfU1lTQ1RMKVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEyMDAtXFx0c3RydWN0IGNwdW1hc2sgKnJwc19kZWZhdWx0X21hc2s7XFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0xMjk2PW5ldF9yeF9xdWV1ZV91cGRhdGVfa29iamVjdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG9sZF9udW0sIGludCBuZXdfbnVtKVxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTMwMS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMzAyOiNpZm5kZWYgQ09ORklHX1JQU1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzMDMtXFx0aWYgKCFkZXYtXFx1MDAzZXN5c2ZzX3J4X3F1ZXVlX2dyb3VwKVxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTMzMj1zdGF0aWMgaW50IG5ldF9yeF9xdWV1ZV9jaGFuZ2Vfb3duZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG51bSxcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzMzgtXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTMzOTojaWZuZGVmIENPTkZJR19SUFNcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMzQwLVxcdGlmICghZGV2LVxcdTAwM2VzeXNmc19yeF9xdWV1ZV9ncm91cClcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTIwNTc9c3RhdGljIGludCBydG5sX2ZpbGxfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yMTI1LVxcdFxcdFxcdCBSRUFEX09OQ0UoZGV2LVxcdTAwM2VtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbikpIHx8XFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjEyNjojaWZkZWYgQ09ORklHX1JQU1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIxMjctXFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9OVU1fUlhfUVVFVUVTLFxcbi0tXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM9NTQ9RVhQT1JUX1NZTUJPTChzeXNjdGxfZGV2Y29uZl9pbmhlcml0X2luaXRfbmV0KTtcXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy01NS1cXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYzo1NjojaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0ZMT1dfTElNSVQpIHx8IElTX0VOQUJMRUQoQ09ORklHX1JQUylcXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy01Ny1zdGF0aWMgaW50IGR1bXBfY3B1bWFzayh2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zLFxcbi0tXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtOTgtXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6OTk6I2lmZGVmIENPTkZJR19SUFNcXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy0xMDAtXFxuLS1cXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYz0yMTQ9c3RhdGljIGludCBycHNfZmVhdF9sbGNfYWZmaW5pdHlfc3lzY3RsKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXFxuLS1cXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy0yMzktXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6MjQwOiNlbmRpZiAvKiBDT05GSUdfUlBTICovXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtMjQxLVxcbi0tXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM9NDU3PXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5ldF9jb3JlX3RhYmxlW10gPSB7XFxuLS1cXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy01NzYtXFx0fSxcXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYzo1Nzc6I2lmZGVmIENPTkZJR19SUFNcXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy01NzgtXFx0e1xcbi0tXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM9NzE2PXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5ldG5zX2NvcmVfdGFibGVbXSA9IHtcXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYzo3MTc6I2lmIElTX0VOQUJMRUQoQ09ORklHX1JQUylcXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy03MTgtXFx0e1xcbi0tXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM9ODYwPXN0YXRpYyBfX25ldF9leGl0IHZvaWQgc3lzY3RsX2NvcmVfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtODY2LVxcdEJVR19PTih0YmwgPT0gbmV0bnNfY29yZV90YWJsZSk7XFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6ODY3OiNpZiBJU19FTkFCTEVEKENPTkZJR19SUFMpXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtODY4LVxcdGtmcmVlKG5ldC1cXHUwMDNlY29yZS5ycHNfZGVmYXVsdF9tYXNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDM6MTI6MTYuMDgwNDkxMjVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTQyMDQ4NTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIENPTkZJR19SUFMgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHRoZSBjb2RlIEknbSBsb29raW5nIGF0IGhpbmdlcyBvbiBgQ09ORklHX1JQU2AuIEltbWVkaWF0ZWx5LCBteSBicmFpbiBmbGFncyBpdCBhcyBhIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUsIGFuZCBhIGJvb2xlYW4gb25lIGF0IHRoYXQuIFRpbWUgdG8gY29uZmlybSB0aGF0IGFzc3VtcHRpb24gYW5kIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGtub3cgd2hhdCBgQ09ORklHX1JQU2AgKmFjdHVhbGx5KiBjb250cm9scy4gVGltZSB0byBnbyBjaGVjayBpdHMgZGVmaW5pdGlvbiBpbiB0aGUgcmVsZXZhbnQgY29uZmlnIGZpbGVzIG9yIGRvY3VtZW50YXRpb24uIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzQ3LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDM6MTI6MjMuMDIyNTQxODYxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5ODE4ODQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBSUFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9Mjk0PWNvbmZpZyBNQVhfU0tCX0ZSQUdTXFxuLS1cXG5uZXQvS2NvbmZpZy0zMDUtXFxubmV0L0tjb25maWc6MzA2OmNvbmZpZyBSUFNcXG5uZXQvS2NvbmZpZy0zMDctXFx0Ym9vbCBcXFwiUmVjZWl2ZSBwYWNrZXQgc3RlZXJpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAzOjEyOjIzLjA3MjM2NDc4NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NjEwNTcyNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipJbnZlc3RpZ2F0aW5nIGBDT05GSUdfUlBTYCoqXG5cbk9rYXksIHNvIEkgc2VlIGBDT05GSUdfUlBTYCBpcyBkZWZpbmVkIHdpdGhpbiBgbmV0L0tjb25maWdgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdoZXJlIHRvIHN0YXJ0IGRpZ2dpbmcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIE5vdywgbXkgbmV4dCBtb3ZlIGlzIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBvciBmZWF0dXJlcyBhcmUgcmVxdWlyZWQgb3IgYWZmZWN0ZWQgYnkgYENPTkZJR19SUFNgLiBLbm93aW5nIGl0cyBkZXBlbmRlbmNpZXMgd2lsbCBoZWxwIG1lIGZ1bGx5IGdyYXNwIGl0cyBwdXJwb3NlIGFuZCBwb3RlbnRpYWwgaW1wYWN0IHdpdGhpbiB0aGUgbmV0d29yayBzdGFjay4gSXQncyB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaW4gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZyBvcHRpb24gZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk5NywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAzOjEyOjI2LjYzMzQyMzk1NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTA4NzEyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUlBTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9Mjk0PWNvbmZpZyBNQVhfU0tCX0ZSQUdTXFxuLS1cXG5uZXQvS2NvbmZpZy0zMDUtXFxubmV0L0tjb25maWc6MzA2OmNvbmZpZyBSUFNcXG5uZXQvS2NvbmZpZy0zMDctXFx0Ym9vbCBcXFwiUmVjZWl2ZSBwYWNrZXQgc3RlZXJpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAzOjEyOjI2LjcyNDUxNjI1NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxODAxNTYzOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiBteSBleHBlcmllbmNlLCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgbmV0L0tjb25maWdgIGZpbGUuIEl0J3MgdGhlIGNlbnRyYWwgaHViIGZvciBuZXR3b3JrLXJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBbmQsIGdpdmVuIHRoYXQgSSBhbSBpbiB0aGUgd2VlZHMsIEkgbmVlZCB0byBnZXQgdG8gdGhlIHJlbGV2YW50IHNlY3Rpb24gcXVpY2tseS4gSSBhbSBwcmV0dHkgc3VyZSBsaW5lIDMwNiB3aWxsIGdldCBtZSB3aGVyZSBJIG5lZWQgdG8gYmUuIExldCdzIHNlZSB3aGF0J3MgaW4gc3RvcmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI0NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAzOjEyOjMxLjkwNDY3NDg4M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMDA6XFx0XFx0ICBUaGlzIGhlbHBzIEJJRyBUQ1Agd29ya2xvYWRzLCBidXQgbWlnaHQgZXhwb3NlIGJ1Z3MgaW4gc29tZVxcbiAzMDE6XFx0XFx0ICBsZWdhY3kgZHJpdmVycy5cXG4gMzAyOlxcdFxcdCAgVGhpcyBhbHNvIGluY3JlYXNlcyBtZW1vcnkgb3ZlcmhlYWQgb2Ygc21hbGwgcGFja2V0cyxcXG4gMzAzOlxcdFxcdCAgYW5kIGluIGRyaXZlcnMgdXNpbmcgYnVpbGRfc2tiKCkuXFxuIDMwNDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IDE3LlxcbiAzMDU6XFx0XFxuIDMwNjpcXHRjb25maWcgUlBTXFxuIDMwNzpcXHRcXHRib29sIFxcXCJSZWNlaXZlIHBhY2tldCBzdGVlcmluZ1xcXCJcXG4gMzA4OlxcdFxcdGRlcGVuZHMgb24gU01QIFxcdTAwMjZcXHUwMDI2IFNZU0ZTXFxuIDMwOTpcXHRcXHRkZWZhdWx0IHlcXG4gMzEwOlxcdFxcdGhlbHBcXG4gMzExOlxcdFxcdCAgU29mdHdhcmUgcmVjZWl2ZSBzaWRlIHBhY2tldCBzdGVlcmluZyAoUlBTKSBkaXN0cmlidXRlcyB0aGVcXG4gMzEyOlxcdFxcdCAgbG9hZCBvZiByZWNlaXZlZCBwYWNrZXQgcHJvY2Vzc2luZyBhY3Jvc3MgbXVsdGlwbGUgQ1BVcy5cXG4gMzEzOlxcdFxcbiAzMTQ6XFx0Y29uZmlnIFJGU19BQ0NFTFxcbiAzMTU6XFx0XFx0Ym9vbCBcXFwiSGFyZHdhcmUgYWNjZWxlcmF0aW9uIG9mIFJGU1xcXCJcXG4gMzE2OlxcdFxcdGRlcGVuZHMgb24gUlBTXFxuIDMxNzpcXHRcXHRzZWxlY3QgQ1BVX1JNQVBcXG4gMzE4OlxcdFxcdGRlZmF1bHQgeVxcbiAzMTk6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMzoxMjozMS45MDQ3Mzk4NTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY4MjEzMDAyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJQUyBGbG93IENvbnRyb2wgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBgQ09ORklHX1JQU2AgaXMgc2V0IHRvICd5JyBieSBkZWZhdWx0LCBhbmQgaXQgcmVsaWVzIG9uIGJvdGggYFNNUGAgYW5kIGBTWVNGU2AsIHdoaWNoIG1ha2VzIGl0IHZlcnkgbGlrZWx5IHRvIGJlIGVuYWJsZWQgaW4gYSBzdGFuZGFyZCBjb25maWd1cmF0aW9uLiBUaGlzIHBhdGNoIHNlZW1zIHJlbGF0ZWQsIGJ1dCBpdCBhbHNvIG1lbnRpb25zIGBDT05GSUdfUkZTX0FDQ0VMYC4gV2FpdCwgdGhhdOKAmXMgbm90IHF1aXRlIHJpZ2h0LiBgcnBzX2xsY19jaGVja2AgaXNuJ3QgZ3VhcmRlZCBieSBgQ09ORklHX1JGU19BQ0NFTGAg4oCTIHRoYXQncyBhIGtleSBkZXRhaWwgdG8gbm90ZS4gTm93LCB0aGUgbW9yZSBpbXBvcnRhbnQgcGllY2VzLi4uIGBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoYCBhbmQgYHNvY2tfcnBzX3JlY29yZF9mbG93YCBoYXZlIGJlZW4gcHVsbGVkIG91dCBvZiB0aGUgaW5saW5lIGFuZCBtb3ZlZCBpbnRvIGBuZXQvY29yZS9kZXYuY2AuIENydWNpYWxseSwgdGhleSdyZSBleHBvcnRlZCBzeW1ib2xzIG5vdy5cblxuTGV0J3MgdHJhY2UgdGhpcyBsb2dpYy4gVGhlIGBycHNfbGxjX2NoZWNrYCBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgZnJvbSBgcnBzX3JlY29yZF9zb2NrX2Zsb3dgLCB3aGljaCwgaW50ZXJlc3RpbmdseSwgcmVzaWRlcyBpbiBgaW5jbHVkZS9uZXQvcnBzLmhgLiBUaGF0IG1ha2VzIGBycHNfcmVjb3JkX3NvY2tfZmxvd2AgYW4gaW5saW5lIGZ1bmN0aW9uLiBBbmQsIHNpbmNlIGl04oCZcyBpbmxpbmUsIGxldCdzIHNlZSB3aGVyZSBpdCBnZXRzIGNhbGxlZC4gRnJvbSBteSBnbGFuY2UgYXQgdGhlIGluY2x1ZGUgZmlsZXMsIGl0IGlzIGJlaW5nIGNhbGxlZCBmcm9tIGBfc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaGAgYW5kIGBfc29ja19ycHNfcmVjb3JkX2Zsb3dgLCB3aGljaCBhcmUgYWxzbyBkZWZpbmVkIGluIGBpbmNsdWRlL25ldC9ycHMuaGAuIFRoYXQgbWVhbnMgSSBzaG91bGQgcmVhbGx5IGRpZyBpbnRvIHRoYXQgaGVhZGVyIGZpbGUgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIExldCdzIHN0YXJ0IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Njg2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDM6MTI6MzcuNTg2ODcyMzEyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDE1NDcwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJycHNfcmVjb3JkX3NvY2tfZmxvd1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL25ldC9ycHMuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9ycHMuaD01OT1ib29sIHJwc19sbGNfY2hlY2sodTMyIG9sZF92YWwsIHUzMiBuZXdfdmFsKTtcXG5pbmNsdWRlL25ldC9ycHMuaC02MC1cXG5pbmNsdWRlL25ldC9ycHMuaDo2MTpzdGF0aWMgaW5saW5lIHZvaWQgcnBzX3JlY29yZF9zb2NrX2Zsb3cocnBzX3RhZ19wdHIgdGFnX3B0ciwgdTMyIGhhc2gpXFxuaW5jbHVkZS9uZXQvcnBzLmgtNjIte1xcbi0tXFxuaW5jbHVkZS9uZXQvcnBzLmg9ODA9c3RhdGljIGlubGluZSB2b2lkIF9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKF9fdTMyIGhhc2gpXFxuLS1cXG5pbmNsdWRlL25ldC9ycHMuaC04OC1cXHRpZiAodGFnX3B0cilcXG5pbmNsdWRlL25ldC9ycHMuaDo4OTpcXHRcXHRycHNfcmVjb3JkX3NvY2tfZmxvdyh0YWdfcHRyLCBoYXNoKTtcXG5pbmNsdWRlL25ldC9ycHMuaC05MC1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDM6MTI6MzcuNjMxMDMxNzU3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3Njc1Mjg1NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgX3NvY2tfcnBzX3JlY29yZF9mbG93YCoqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4gb24gdGhpcyBgX3NvY2tfcnBzX3JlY29yZF9mbG93YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgZXhhY3RseSBpdCdzIGRvaW5nLiBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBpdCdzIGludGVyYWN0aW5nIHdpdGg/IElzIGl0IHVwZGF0aW5nIGFueSBwZXItc29ja2V0IHN0YXRzPyBJIHdhbnQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgb3ZlcmFsbCBSUFMgKFJlY2VpdmUgUGFja2V0IFN0ZWVyaW5nKSBpbXBsZW1lbnRhdGlvbi4gSXMgaXQgcmVjb3JkaW5nIGZsb3dzIGZvciB0aGUgZ2l2ZW4gc29ja2V0PyBJcyBpdCBzZXR0aW5nIHVwIHJvdXRlcyBiYXNlZCBvbiB0aG9zZSBmbG93cz8gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBTcGVjaWZpY2FsbHksIGhvdyBkb2VzIHRoaXMgZnVuY3Rpb24gcmVsYXRlIHRvIHRoZSBkZWNpc2lvbiBwcm9jZXNzIGFyb3VuZCB3aGljaCBDUFUgYSBwYWNrZXQgaXMgYXNzaWduZWQgdG8/IElzIGl0IGEga2V5IGNvbXBvbmVudCBvZiB0aGUgaGFzaGluZyBhbmQgcmVkaXJlY3Rpb24gbG9naWMsIG9yIGlzIGl0IG1lcmVseSByZWNvcmRpbmcgdHJhZmZpYyBmb3Igb3RoZXIgcHVycG9zZXMgbGlrZSBtb25pdG9yaW5nIG9yIGxvYWQgYmFsYW5jaW5nPyBMZXQgbWUgcnVuIHRocm91Z2ggdGhlIGNvZGUgaW4gbXkgaGVhZCBhbmQgdmVyaWZ5IGhvdyB0aGUgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIG90aGVyIG1vZHVsZXMgaW4gdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0NjUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMzoxMjo0My4zOTg1NjI4MzdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwODUyNDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9zb2NrX3Jwc19yZWNvcmRfZmxvd1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL25ldC9ycHMuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9ycHMuaD02MT1zdGF0aWMgaW5saW5lIHZvaWQgcnBzX3JlY29yZF9zb2NrX2Zsb3cocnBzX3RhZ19wdHIgdGFnX3B0ciwgdTMyIGhhc2gpXFxuLS1cXG5pbmNsdWRlL25ldC9ycHMuaC03OS1cXG5pbmNsdWRlL25ldC9ycHMuaDo4MDpzdGF0aWMgaW5saW5lIHZvaWQgX3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goX191MzIgaGFzaClcXG5pbmNsdWRlL25ldC9ycHMuaC04MS17XFxuLS1cXG5pbmNsdWRlL25ldC9ycHMuaC05Mi1cXG5pbmNsdWRlL25ldC9ycHMuaDo5MzpzdGF0aWMgaW5saW5lIHZvaWQgX3NvY2tfcnBzX3JlY29yZF9mbG93KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG5pbmNsdWRlL25ldC9ycHMuaC05NC17XFxuLS1cXG5pbmNsdWRlL25ldC9ycHMuaC0xMDgtXFx0XFx0ICovXFxuaW5jbHVkZS9uZXQvcnBzLmg6MTA5OlxcdFxcdF9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKFJFQURfT05DRShzay1cXHUwMDNlc2tfcnhoYXNoKSk7XFxuaW5jbHVkZS9uZXQvcnBzLmgtMTEwLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDM6MTI6NDMuNDM5NDE5MTgyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NDUyNTExNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknbSB0aGlua2luZyBhYm91dCBpdDpcblxuKipBbmFseXppbmcgTmV0d29yayBTdGFjayBGbG93IFJlY29yZGluZyoqXG5cbkFscmlnaHQsIHNvIEkgc2VlIGBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoYCBhbmQgYHNvY2tfcnBzX3JlY29yZF9mbG93YC4gVGhvc2UgYXJlIHRoZSBtYWluIGVudHJ5IHBvaW50cywgdGhlIGhvb2tzIGludG8gdGhlIHN5c3RlbS4gVGhleSdyZSBjbGVhcmx5IGludGVuZGVkIHRvIHJlY29yZCBzb21ldGhpbmcgYWJvdXQgbmV0d29yayBmbG93cywgbGlrZWx5IGZvciBsb2FkIGJhbGFuY2luZyBvciB0cmFmZmljIHNoYXBpbmcsIGJhc2VkIG9uIHRoZWlyIG5hbWVzLiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzICp3aGVyZSogdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSAqdXNlZCogd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBUaGF0J3MgdGhlIGNyaXRpY2FsIGluZm9ybWF0aW9uLiBMZXQncyB0cmFjZSBiYWNrIHRoZSBjYWxscyB0byBgc29ja19ycHNfcmVjb3JkX2Zsb3dgLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgcmV2ZWFsIHRoZSBjb250ZXh0IGFuZCBwdXJwb3NlIG9mIHRoaXMgZmxvdyByZWNvcmRpbmcuIEknbGwgbmVlZCB0byBwaW5wb2ludCBhbGwgdGhlIHBsYWNlcyB3aXRoaW4gdGhlIGNvZGUgd2hlcmUgYHNvY2tfcnBzX3JlY29yZF9mbG93YCBpcyBpbnZva2VkLiBLbm93aW5nIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyBhbmQgdGhlaXIgcm9sZXMgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTU4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDM6MTI6NDcuODg0NjcyNDg4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjMxNTQxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb2NrX3Jwc19yZWNvcmRfZmxvd1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTUzMDY9c3RhdGljIHZvaWQgcnBzX3RyaWdnZXJfc29mdGlycSh2b2lkICpkYXRhKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTMxNi1cXG5uZXQvY29yZS9kZXYuYzo1MzE3OnZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKVxcbm5ldC9jb3JlL2Rldi5jLTUzMTgte1xcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTMyMi1cXG5uZXQvY29yZS9kZXYuYzo1MzIzOlxcdF9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKGhhc2gpO1xcbm5ldC9jb3JlL2Rldi5jLTUzMjQtI2VuZGlmXFxubmV0L2NvcmUvZGV2LmMtNTMyNS19XFxubmV0L2NvcmUvZGV2LmM6NTMyNjpFWFBPUlRfU1lNQk9MKHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2gpO1xcbm5ldC9jb3JlL2Rldi5jLTUzMjctXFxubmV0L2NvcmUvZGV2LmM6NTMyODp2b2lkIHNvY2tfcnBzX3JlY29yZF9mbG93KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG5uZXQvY29yZS9kZXYuYy01MzI5LXtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTUzMzMtXFxubmV0L2NvcmUvZGV2LmM6NTMzNDpcXHRfc29ja19ycHNfcmVjb3JkX2Zsb3coc2spO1xcbm5ldC9jb3JlL2Rldi5jLTUzMzUtI2VuZGlmXFxubmV0L2NvcmUvZGV2LmMtNTMzNi19XFxubmV0L2NvcmUvZGV2LmM6NTMzNzpFWFBPUlRfU1lNQk9MKHNvY2tfcnBzX3JlY29yZF9mbG93KTtcXG5uZXQvY29yZS9kZXYuYy01MzM4LVxcbi0tXFxubmV0L2lwdjQvYWZfaW5ldC5jPTc2MT12b2lkIF9faW5ldF9hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jaywgc3RydWN0IHNvY2sgKm5ld3NrKVxcbi0tXFxubmV0L2lwdjQvYWZfaW5ldC5jLTc2Ny1cXG5uZXQvaXB2NC9hZl9pbmV0LmM6NzY4OlxcdHNvY2tfcnBzX3JlY29yZF9mbG93KG5ld3NrKTtcXG5uZXQvaXB2NC9hZl9pbmV0LmMtNzY5LVxcdFdBUk5fT04oISgoMSBcXHUwMDNjXFx1MDAzYyBuZXdzay1cXHUwMDNlc2tfc3RhdGUpIFxcdTAwMjZcXG4tLVxcbm5ldC9pcHY0L2FmX2luZXQuYz04NDQ9aW50IGluZXRfc2VuZF9wcmVwYXJlKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvaXB2NC9hZl9pbmV0LmMtODQ1LXtcXG5uZXQvaXB2NC9hZl9pbmV0LmM6ODQ2OlxcdHNvY2tfcnBzX3JlY29yZF9mbG93KHNrKTtcXG5uZXQvaXB2NC9hZl9pbmV0LmMtODQ3LVxcbi0tXFxubmV0L2lwdjQvYWZfaW5ldC5jPTg4Nj1pbnQgaW5ldF9yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUsXFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmMtODkyLVxcdGlmIChsaWtlbHkoIShmbGFncyBcXHUwMDI2IE1TR19FUlJRVUVVRSkpKVxcbm5ldC9pcHY0L2FmX2luZXQuYzo4OTM6XFx0XFx0c29ja19ycHNfcmVjb3JkX2Zsb3coc2spO1xcbm5ldC9pcHY0L2FmX2luZXQuYy04OTQtXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz04MTI9c3NpemVfdCB0Y3Bfc3BsaWNlX3JlYWQoc3RydWN0IHNvY2tldCAqc29jaywgbG9mZl90ICpwcG9zLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtODI1LVxcbm5ldC9pcHY0L3RjcC5jOjgyNjpcXHRzb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XFxubmV0L2lwdjQvdGNwLmMtODI3LVxcdC8qXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0yMTk2PXN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3JlY2VpdmUoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMjIyMy1cXG5uZXQvaXB2NC90Y3AuYzoyMjI0OlxcdHNvY2tfcnBzX3JlY29yZF9mbG93KHNrKTtcXG5uZXQvaXB2NC90Y3AuYy0yMjI1LVxcbi0tXFxubmV0L2lwdjYvYWZfaW5ldDYuYz02NDY9aW50IGluZXQ2X3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSxcXG4tLVxcbm5ldC9pcHY2L2FmX2luZXQ2LmMtNjUyLVxcdGlmIChsaWtlbHkoIShmbGFncyBcXHUwMDI2IE1TR19FUlJRVUVVRSkpKVxcbm5ldC9pcHY2L2FmX2luZXQ2LmM6NjUzOlxcdFxcdHNvY2tfcnBzX3JlY29yZF9mbG93KHNrKTtcXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTY1NC1cXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTE4OTg9c3RhdGljIHZvaWQgbXB0Y3BfcnBzX3JlY29yZF9zdWJmbG93cyhjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTkwNy1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxOTA4OlxcdFxcdHNvY2tfcnBzX3JlY29yZF9mbG93KHNzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTkwOS1cXHR9XFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYz04Njk2PV9fcG9sbF90IHNjdHBfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jaywgcG9sbF90YWJsZSAqd2FpdClcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jLTg3MDMtXFxubmV0L3NjdHAvc29ja2V0LmM6ODcwNDpcXHRzb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XFxubmV0L3NjdHAvc29ja2V0LmMtODcwNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDM6MTI6NDcuOTQ2OTkyOTRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODM2MTU3MjA2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoIGFuZCBDb25maWd1cmF0aW9uIG9mIGBzb2NrX3Jwc19yZWNvcmRfZmxvd2AgYW5kIExMQyBBZmZpbml0eSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgc29ja19ycHNfcmVjb3JkX2Zsb3dgIGZ1bmN0aW9uIGFuZCBpdCdzIGxvb2tpbmcgcHJldHR5IHZlcnNhdGlsZS4gSXQncyBjYWxsZWQgaW4gYSBnb29kIHJhbmdlIG9mIGNyaXRpY2FsIG5ldHdvcmtpbmcgcGF0aHM6IGBpbmV0X3JlY3Ztc2dgLCBgaW5ldF9zZW5kX3ByZXBhcmVgLCB0aGUgYWNjZXB0IHJvdXRpbmVzLCBzcGxpY2UgYW5kIHplcm8tY29weSwgYW5kIGV2ZW4gYG1wdGNwX3Jwc19yZWNvcmRfc3ViZmxvd3NgIGFuZCBTQ1RQLiBUaGF0IHNjcmVhbXMgXCJhY3RpdmUgYW5kIHV0aWxpemVkXCIgdG8gbWUuXG5cblRoZSBmZWF0dXJlIGl0c2VsZiwgTExDIGFmZmluaXR5LCBpcyBnYXRlZCBieSB0aGUgYG5ldC5jb3JlLnJwc19mZWF0X2xsY19hZmZpbml0eWAgc3lzY3RsLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIuIEFoLCB3YWl0LCB0aGlzIGlzIGEgc3RhdGljIGtleSAqbW9kaWZpZWQqIGJ5IGEgc3lzY3RsLiBUaGF0J3MgYSBrZXkgZGV0YWlsOyBpdCBnaXZlcyB1cyBydW50aW1lIGNvbnRyb2wuIE5vdywgd2hhdCBkZXBlbmRlbmNpZXMgZG8gd2UgaGF2ZSB0byB3b3JyeSBhYm91dD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgY29uZmlncy5cblxuWWVwLCBgQ09ORklHX1JQU2AgaXMgZXNzZW50aWFsLCBhbmQgdGhhdCBkZXBlbmRzIG9uIGBTTVBgIGFuZCBgU1lTRlNgLiBHb29kLCBnb29kLiBXZSBhbHNvIG5lZWQgYENPTkZJR19TWVNDVExgIGZvciB0aGUgc3lzY3RsIGludGVyZmFjZSwgb2YgY291cnNlLiBJJ2xsIHRha2UgYSBxdWljayBsb29rIGluIGBuZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuY2Ag4oCTIHllcCwgdGhlIHN5c2N0bCBpcyB1bmRlciBhbiBgI2lmZGVmIENPTkZJR19SUFNgLiBTbywgd2UncmUgZ29vZCB0aGVyZS5cblxuVGhlIGNvcmUgbG9naWMgc2VlbXMgdG8gYmUgd2l0aGluIHRoZSBgcnBzX2xsY19jaGVja2AgZnVuY3Rpb24uIEl0IHRha2VzIGJvdGggb2xkIGFuZCBuZXcgdmFsdWVzLiBJdCBmaXJzdCBjaGVja3MgYHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2cnBzX2ZlYXRfbGxjX2FmZmluaXR5KWAuIElmIExMQyBhZmZpbml0eSBpcyBlbmFibGVkLCBpdCB0aGVuIGRvZXMgc29tZSBjaGVja3M6IG1ha2luZyBzdXJlIHRoZSBvbGQgQ1BVIElEIGlzIHZhbGlkLCBhbmQgdGhlIG9sZCBDUFUgaXMgbm90IGFjdGl2ZS4gRnVydGhlciwgaXQgbWFrZXMgc3VyZSB0aGUgb2xkIENQVSBpc24ndCBpbiB0aGUgY3VycmVudCBDUFUncyBDUFUgbWFzayBhbmQgaXQgdGhlbiBjaGVja3MgaWYgdGhlIG9sZCBDUFUgYW5kIHRoZSBuZXcgQ1BVIHNoYXJlIGEgY2FjaGUuXG5cbkl0IGxvb2tzIGxpa2UgdGhlIGBycHNfbGxjX2NoZWNrYCBmdW5jdGlvbiBpcyB0aGUgbWFpbiBhZGRpdGlvbiBoZXJlLiBgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaGAgYW5kIGBzb2NrX3Jwc19yZWNvcmRfZmxvd2AgYXJlIG5vbi1pbmxpbmVkIGFuZCBleHBvcnRlZCwgd2hpY2ggaXMgZ29vZCBmb3IgdHJhY2luZyBhbmQgZHluYW1pYyBhbmFseXNpcy4gQW5kIG9mIGNvdXJzZSwgdGhlIHN5c2N0bCBoYW5kbGVyIGlzIGBycHNfZmVhdF9sbGNfYWZmaW5pdHlfc3lzY3RsYC4gSXQgc2VlbXMgdGhlIGZvY3VzIGlzIHRoZSBuZXcgZnVuY3Rpb24sIGBycHNfbGxjX2NoZWNrYCwgd2hpY2ggaGFzIHNvbWUgc3BlY2lmaWMgY29uZGl0aW9ucy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGluIGBuZXQvY29yZS9kZXYuY2AgbW9yZSBjbG9zZWx5IGZvciBhbnkgb3RoZXIgbnVhbmNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0NDQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDM6MTI6NTYuMzA4NTY4MDc0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTc5MDY1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJycHNfbGxjX2NoZWNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTUxMTA9c3RhdGljIGludCBnZXRfcnBzX2NwdShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTIxMy0vKipcXG5uZXQvY29yZS9kZXYuYzo1MjE0OiAqIHJwc19sbGNfY2hlY2sgLSBkZXRlcm1pbmUgaWYgUlBTIGZsb3cgdGFibGUgc2hvdWxkIGJlIHVwZGF0ZWQuXFxubmV0L2NvcmUvZGV2LmMtNTIxNS0gKiBAb2xkX3ZhbDogcHJldmlvdXMgZmxvdyByZWNvcmQgdmFsdWUuXFxuLS1cXG5uZXQvY29yZS9kZXYuYy01MjE5LSAqL1xcbm5ldC9jb3JlL2Rldi5jOjUyMjA6Ym9vbCBycHNfbGxjX2NoZWNrKHUzMiBvbGRfdmFsLCB1MzIgbmV3X3ZhbClcXG5uZXQvY29yZS9kZXYuYy01MjIxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDM6MTI6NTYuMzUwMzY0MTg5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3MjMwOTY1MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSUFMgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIG5ldyBSUFMgaW1wbGVtZW50YXRpb24uIFRoZSBrZXkgZnVuY3Rpb25zIHNlZW0gdG8gYmUgYHJwc19sbGNfY2hlY2tgLCB3aGljaCBpcyB0aGUgY29yZSBsb2dpYywgYW5kIGBycHNfZmVhdF9sbGNfYWZmaW5pdHlfc3lzY3RsYCwgd2hpY2ggaGFuZGxlcyB0aGUgc3lzY3RsIGludGVyZmFjZS4gSSBhbHNvIHNlZSB0aGF0IGBzb2NrX3Jwc19yZWNvcmRfZmxvd2AgYW5kIGBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoYCBhcmUgdW4taW5saW5lZC5cblxuRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGlmIGBDT05GSUdfUlBTYCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuIEFoLCB5ZXMsIGl0J3MgYGRlZmF1bHQgeWAgaW4gYG5ldC9LY29uZmlnYCwgZ29vZC4gTm93LCB3aGVyZSBpcyB0aGUgc3lzY3RsIGRlZmluZWQ/IFJpZ2h0LCBpdCdzIGluIGBuZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuY2AuICBJIHNob3VsZCBjaGVjayB3aGV0aGVyIGBDT05GSUdfU1lTQ1RMYCBpcyBhbHNvIGEgcmVxdWlyZW1lbnQuIFllcywgaXQgbG9va3MgbGlrZSBpdCBpcy4gQnV0LCBmb3IgdGhlIGNvcmUgUlBTIGxvZ2ljIGl0c2VsZiwgYENPTkZJR19SUFNgIHNob3VsZCBiZSBzdWZmaWNpZW50LlxuXG5IYW5nIG9uLi4uIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBjYWxsZXJzIG9mIGBycHNfbGxjX2NoZWNrYC4gSXQgbG9va3MgbGlrZSBpdCdzIGNhbGxlZCBmcm9tIGBycHNfcmVjb3JkX3NvY2tfZmxvd2AsIHdoaWNoIGlzIGRlZmluZWQgaW4gYGluY2x1ZGUvbmV0L3Jwcy5oYC4gVGhhdCBtYWtlcyBzZW5zZS4gYHJwc19yZWNvcmRfc29ja19mbG93YCBpcyBpbiB0dXJuIGNhbGxlZCBieSBgX3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2hgIGFuZCBgX3NvY2tfcnBzX3JlY29yZF9mbG93YCwgd2hpY2ggYXJlIHRoZW4gdXNlZCBieSBgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaGAgYW5kIGBzb2NrX3Jwc19yZWNvcmRfZmxvd2AuIFNvLCByZWFsbHksIHRoZSBtYWluIGZ1bmN0aW9uIHRvIGFuYWx5emUgaGVyZSBpcyBpbmRlZWQgYHJwc19sbGNfY2hlY2tgLCBhbG9uZyB3aXRoIHRoZSBgcnBzX2ZlYXRfbGxjX2FmZmluaXR5X3N5c2N0bGAgc3lzY3RsIGhhbmRsZXIuXG5cbkxldCdzIGNoZWNrIHRoZSBzaWduYXR1cmUgb2YgYHJwc19sbGNfY2hlY2tgOiBgYm9vbCBycHNfbGxjX2NoZWNrKHUzMiBvbGRfdmFsLCB1MzIgbmV3X3ZhbClgLiBBbHJpZ2h0LiBOb3csIGlzIGl0IGV4cG9ydGVkPyBIbW0sIG5vLCBpdCBpc24ndC4gQnV0LCB3YWl0Li4uIGBycHNfcmVjb3JkX3NvY2tfZmxvd2AgaXMgaW5saW5lLCBzbyBgcnBzX2xsY19jaGVja2AgbXVzdCBiZSBleHBvcnRlZCwgb3RoZXJ3aXNlIGl0IGNvdWxkbid0IGJlIHVzZWQgYnkgbW9kdWxlcyBpZiBpdCBpcyB1c2VkIGludGVybmFsbHkuIE9rYXksIHRpbWUgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBleHBvcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2NTcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDM6MTM6MDUuMDczNDYyOTA5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjEwMTE3NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qcnBzX2xsY19jaGVja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9kZXYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDM6MTM6MDUuMTE1NTcxNjk1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMzA4NTk2MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSUFMgRmxvdyBSZWNvcmRpbmcgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIHNlZS4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGBycHNfcmVjb3JkX3NvY2tfZmxvd2AgaXMgZGVmaW5lZCBpbmxpbmUgd2l0aGluIGBpbmNsdWRlL25ldC9ycHMuaGAsIGFuZCBpdCBpbiB0dXJuIGNhbGxzIGBycHNfbGxjX2NoZWNrYC4gU28sIGlmIGEga2VybmVsIG1vZHVsZSB3ZXJlIHRvIGluY2x1ZGUgdGhhdCBoZWFkZXIgYW5kIHVzZSBgcnBzX3JlY29yZF9zb2NrX2Zsb3dgLCBpdCAqd291bGQqIGhhdmUgdG8gYWxzbyBsaW5rIGFnYWluc3QgdGhlIGRlZmluaXRpb24gb2YgYHJwc19sbGNfY2hlY2tgLiBUaGF0J3MgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcGVkIG91dC5cblxuQnV0IGhhbmcgb24sIHRoZXNlIGNoYW5nZXMgaGF2ZSB1bi1pbmxpbmVkIGBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoYCBhbmQgYHNvY2tfcnBzX3JlY29yZF9mbG93YC4gTGV0IG1lIHJlLWV4YW1pbmUgdGhlIHBhdGNoLi4uIGFoYSEgVGhleSdyZSBub3cgKm5vdCogaW5saW5lISBTbywgbW9kdWxlcyB0aGF0IGNhbGwgdGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUgY2FsbGluZyB0aGUgbm9uLWlubGluZSB2ZXJzaW9ucyB0aGF0IGFyZSBub3cgZXhwb3J0ZWQgYXMgc3ltYm9scy4gVGhhdCBtYWtlcyBzZW5zZS4gVGhlc2UgZnVuY3Rpb25zIGFyZSBub3cgZXhwbGljaXRseSBwYXJ0IG9mIHRoZSBzeW1ib2wgdGFibGUsIHNvIHRoZSBtb2R1bGUgbGlua2VyIHdpbGwgcmVzb2x2ZSB0aGVtIGR1cmluZyBidWlsZCB0aW1lLlxuXG5Ib3dldmVyLCBgcnBzX3JlY29yZF9zb2NrX2Zsb3dgICpyZW1haW5zKiBpbmxpbmUgd2l0aGluIGBpbmNsdWRlL25ldC9ycHMuaGAuIFRoYXQncyB0aGUgY3JpdGljYWwgcG9pbnQgSSBuZWVkIHRvIGNsYXJpZnkuIElzIGl0IGNhbGxlZCBmcm9tIGFueSBvdGhlciBsb2NhdGlvbiB0aGF0IG1pZ2h0IGNhdXNlIGRlcGVuZGVuY3kgaXNzdWVzPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGwgc2l0ZXMgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYWN0dWFsbHkgYSBzYWZlIGNoYW5nZSB0aGF0IGRvZXNuJ3QgaW50cm9kdWNlIHN1YnRsZSBicmVha2FnZSBkdWUgdG8gdGhlIGNoYW5nZSBpbiBpbmxpbmluZy4gVGhpcyBpcyBzb21ldGhpbmcgSSdsbCBuZWVkIHRvIGRpZyBpbnRvIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjA5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAzOjEzOjExLjQ0NjQzNDA5N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0MDA0NjMzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJycHNfcmVjb3JkX3NvY2tfZmxvd1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvcnBzLmg9NTk9Ym9vbCBycHNfbGxjX2NoZWNrKHUzMiBvbGRfdmFsLCB1MzIgbmV3X3ZhbCk7XFxuaW5jbHVkZS9uZXQvcnBzLmgtNjAtXFxuaW5jbHVkZS9uZXQvcnBzLmg6NjE6c3RhdGljIGlubGluZSB2b2lkIHJwc19yZWNvcmRfc29ja19mbG93KHJwc190YWdfcHRyIHRhZ19wdHIsIHUzMiBoYXNoKVxcbmluY2x1ZGUvbmV0L3Jwcy5oLTYyLXtcXG4tLVxcbmluY2x1ZGUvbmV0L3Jwcy5oPTgwPXN0YXRpYyBpbmxpbmUgdm9pZCBfc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKVxcbi0tXFxuaW5jbHVkZS9uZXQvcnBzLmgtODgtXFx0aWYgKHRhZ19wdHIpXFxuaW5jbHVkZS9uZXQvcnBzLmg6ODk6XFx0XFx0cnBzX3JlY29yZF9zb2NrX2Zsb3codGFnX3B0ciwgaGFzaCk7XFxuaW5jbHVkZS9uZXQvcnBzLmgtOTAtXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz01MTEwPXN0YXRpYyBpbnQgZ2V0X3Jwc19jcHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTUxNTQtXFx0XFx0LyogRmlyc3QgY2hlY2sgaW50byBnbG9iYWwgZmxvdyB0YWJsZSBpZiB0aGVyZSBpcyBhIG1hdGNoLlxcbm5ldC9jb3JlL2Rldi5jOjUxNTU6XFx0XFx0ICogVGhpcyBSRUFEX09OQ0UoKSBwYWlycyB3aXRoIFdSSVRFX09OQ0UoKSBmcm9tIHJwc19yZWNvcmRfc29ja19mbG93KCkuXFxubmV0L2NvcmUvZGV2LmMtNTE1Ni1cXHRcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDM6MTM6MTMuMDg2NDg0Njc0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMDcwMzk5NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJhY2luZyB0aGUgUlBTIEZsb3cgUmVjb3JkaW5nIEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYHJwc19yZWNvcmRfc29ja19mbG93YCDigJMgSSByZW1lbWJlciB0aGF0IGZ1bmN0aW9uLCBkZWFsaW5nIHdpdGggUmVjZWl2ZSBQYWNrZXQgU3RlZXJpbmcuIEknbSBwcmV0dHkgc3VyZSBpdCdzIG9ubHkgY2FsbGVkIGZyb20gYF9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoYC4gQW5kIHRoYXQncyBhY3R1YWxseSBpbmxpbmVkIGRpcmVjdGx5IGluIGBpbmNsdWRlL25ldC9ycHMuaGAuIEh1aCwgdGhhdCdzIGludGVyZXN0aW5nOyBpbmxpbmluZyBmb3IgcGVyZm9ybWFuY2UsIEknZCBndWVzcy5cblxuTm93LCBgX3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2hgLCB3aGljaCBJIGp1c3QgbWVudGlvbmVkLCBzZWVtcyB0byBiZSBjYWxsZWQgZnJvbSBgX3NvY2tfcnBzX3JlY29yZF9mbG93YC4gVGhhdCBvbmUncyBhbHNvIGlubGluZWQgaW4gdGhlIHNhbWUgaGVhZGVyIGZpbGUuIFdlJ3JlIGdldHRpbmcgZGVlcGVyIGludG8gdGhlIGNvcmUgbG9naWMuXG5cbkZpbmFsbHksIHRoZSByZWFsIGVudHJ5IHBvaW50cywgYF9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoYCBhbmQgYF9zb2NrX3Jwc19yZWNvcmRfZmxvd2AgYXJlIGNhbGxlZCBmcm9tIHRoZWlyIG5vbi11bmRlcnNjb3JlZCBjb3VudGVycGFydHMsIGBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoYCBhbmQgYHNvY2tfcnBzX3JlY29yZF9mbG93YCwgd2hpY2ggYXJlIGRlZmluZWQgaW4gYG5ldC9jb3JlL2Rldi5jYC4gTWFrZXMgc2Vuc2UsIHRoZSBkcml2ZXIgbGF5ZXIgY2FsbGluZyBpbnRvIHRoZSBSUFMgZnJhbWV3b3JrLlxuXG5CdXQgd2FpdCwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIEFyZSBgX3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2hgIGFuZCBgX3NvY2tfcnBzX3JlY29yZF9mbG93YCAqb25seSogY2FsbGVkIGZyb20gdGhvc2UgZnVuY3Rpb25zPyBJJ2QgYmV0dGVyIGNvbmZpcm0gdGhhdCB0aG9zZSBpbnRlcm5hbCBmdW5jdGlvbnMgYXJlIG5vdCBjYWxsZWQgZnJvbSBhbnl3aGVyZSBlbHNlLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHNuZWFreSBpbnRlcmFjdGlvbnMgSSdtIG1pc3NpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjM3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAzOjEzOjE5LjE5MzUyNzA0M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5ODA2NjM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfc29ja19ycHNfcmVjb3JkX2Zsb3dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3Jwcy5oPTYxPXN0YXRpYyBpbmxpbmUgdm9pZCBycHNfcmVjb3JkX3NvY2tfZmxvdyhycHNfdGFnX3B0ciB0YWdfcHRyLCB1MzIgaGFzaClcXG4tLVxcbmluY2x1ZGUvbmV0L3Jwcy5oLTc5LVxcbmluY2x1ZGUvbmV0L3Jwcy5oOjgwOnN0YXRpYyBpbmxpbmUgdm9pZCBfc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKVxcbmluY2x1ZGUvbmV0L3Jwcy5oLTgxLXtcXG4tLVxcbmluY2x1ZGUvbmV0L3Jwcy5oLTkyLVxcbmluY2x1ZGUvbmV0L3Jwcy5oOjkzOnN0YXRpYyBpbmxpbmUgdm9pZCBfc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbmluY2x1ZGUvbmV0L3Jwcy5oLTk0LXtcXG4tLVxcbmluY2x1ZGUvbmV0L3Jwcy5oLTEwOC1cXHRcXHQgKi9cXG5pbmNsdWRlL25ldC9ycHMuaDoxMDk6XFx0XFx0X3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19yeGhhc2gpKTtcXG5pbmNsdWRlL25ldC9ycHMuaC0xMTAtXFx0fVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTMxNz12b2lkIHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goX191MzIgaGFzaClcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTUzMjItXFxubmV0L2NvcmUvZGV2LmM6NTMyMzpcXHRfc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChoYXNoKTtcXG5uZXQvY29yZS9kZXYuYy01MzI0LSNlbmRpZlxcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTMyOD12b2lkIHNvY2tfcnBzX3JlY29yZF9mbG93KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTUzMzMtXFxubmV0L2NvcmUvZGV2LmM6NTMzNDpcXHRfc29ja19ycHNfcmVjb3JkX2Zsb3coc2spO1xcbm5ldC9jb3JlL2Rldi5jLTUzMzUtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAzOjEzOjIwLjg5MTU5NzIyM1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTg1MjUyNDE1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSUFMgTExDIEFmZmluaXR5IEFuYWx5c2lzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJbml0aWFsbHksIEkgd2FzIGZvY3VzaW5nIG9uIGhvdyBgcnBzX2xsY19jaGVja2AgaXMgY2FsbGVkIGFuZCBkaXNjb3ZlcmVkIGl0J3MgZWZmZWN0aXZlbHkgb25seSBjYWxsZWQgZnJvbSBgbmV0L2NvcmUvZGV2LmNgLiBIb3dldmVyLCBpdCdzIG5vdCBleHBvcnRlZCwgYnV0IGl0J3MgY2FsbGVkIGlubGluZSBmcm9tIGBycHNfcmVjb3JkX3NvY2tfZmxvd2AgaW4gYGluY2x1ZGUvbmV0L3Jwcy5oYC4gVGhhdCBtZWFucyBhbnkgbW9kdWxlIHRoYXQgaW5jbHVkZXMgYHJwcy5oYCAqY291bGQqIHNlZSBpdCwgYnV0IG5vIG1vZHVsZSAqYWN0dWFsbHkqIGNhbGxzIGl0LCBwcmV2ZW50aW5nIGxpbmtlciBlcnJvcnMuICBBaCwgYnV0IGBycHNfZmVhdF9sbGNfYWZmaW5pdHlgICppcyogZXhwb3J0ZWQhXG5cblNvLCB0aGUga2V5IGZ1bmN0aW9ucyB0byBleGFtaW5lIGFyZSBkZWZpbml0ZWx5IGBycHNfbGxjX2NoZWNrYCwgYHJwc19mZWF0X2xsY19hZmZpbml0eV9zeXNjdGxgLCBgc29ja19ycHNfcmVjb3JkX2Zsb3dgLCBhbmQgYHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2hgLiBBbHRob3VnaCBgc29ja19ycHNfcmVjb3JkX2Zsb3dgIGFuZCBgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaGAgYXJlIGp1c3Qgd3JhcHBlcnMsIHRoZSBjb3JlIGxvZ2ljIHJlc2lkZXMgaW4gYHJwc19sbGNfY2hlY2tgIGFuZCBgcnBzX2ZlYXRfbGxjX2FmZmluaXR5X3N5c2N0bGAuIE5vdywgaXMgYHJwc19sbGNfY2hlY2tgIGV2ZW4gKnJlYWNoYWJsZSo/IFllcywgaXQncyByZWFjaGFibGUgaWYgYHJmc19pc19uZWVkZWQoKWAgaXMgdHJ1ZSwgd2hpY2ggY2hlY2tzIGBzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnJmc19uZWVkZWQpYC4gYHJmc19uZWVkZWRgIGJlY29tZXMgZW5hYmxlZCB3aGVuIGBuZXQuY29yZS5ycHNfc29ja19mbG93X2VudHJpZXNgIGlzIHNldCB0byBhIHZhbHVlIGdyZWF0ZXIgdGhhbiAwLiAgVGhlcmVmb3JlLCB0byBleGVyY2lzZSB0aGlzLCB3ZSBuZWVkIGBuZXQuY29yZS5ycHNfc29ja19mbG93X2VudHJpZXMgXHUwMDNlIDBgIGFuZCwgdG8gdGVzdCB0aGUgbmV3IExMQyBhZmZpbml0eSBsb2dpYywgYG5ldC5jb3JlLnJwc19mZWF0X2xsY19hZmZpbml0eSA9IDFgLiAgQWxsIG9mIHRoaXMgaXMgYWNjZXNzaWJsZSB0aHJvdWdoIHN5c2N0bHMgYW5kLCBvZiBjb3Vyc2UsIHJlZ3VsYXIgbmV0d29yayB0cmFmZmljLlxuXG5MZXQncyBxdWlja2x5IGNvbmZpcm0gdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWdzLiBgQ09ORklHX1JQU2AgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCBhbmQgYENPTkZJR19TWVNDVExgIHRvby4gU28sIG5vIHNwZWNpYWwgY29uZmlncyBhcmUgbmVlZGVkIGFsdGhvdWdoIGBSUFNgIGlzIGFuIG9wdGlvbiB0byBzcGVjaWZ5LiBObyBvdGhlciByZXF1aXJlZCBjb25maWdzLiBgQ09ORklHX1JGU19BQ0NFTGAgaXMgbm90IHJlcXVpcmVkLCBhbHRob3VnaCBgQ09ORklHX1NNUGAgKmlzKiByZXF1aXJlZCBmb3IgYENPTkZJR19SUFNgLlxuXG5MZXQncyByZXZpc2l0IGBycHNfbGxjX2NoZWNrYCBpbiBgbmV0L2NvcmUvZGV2LmNgLiBJdCBoYXMgYSBjb25kaXRpb25hbCBiYXNlZCBvbiBgcnBzX2ZlYXRfbGxjX2FmZmluaXR5YCBiZWluZyBlbmFibGVkLiBUaGlzIGlzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBhbmQgcmlwZSBmb3IgZnV6emluZy5cblxuTXkgZm9jdXMgc2hvdWxkIGJlIG9uIGZ1enppbmcgdGhlIGZvbGxvd2luZyBzeW1ib2xzOiBgcnBzX2xsY19jaGVja2AgYW5kIGBycHNfZmVhdF9sbGNfYWZmaW5pdHlfc3lzY3RsYC4gIEkgZGlkIGNvbnNpZGVyIGBzb2NrX3Jwc19yZWNvcmRfZmxvd2AgYW5kIGBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoYCBidXQgdGhvc2UgYXJlIGhvdC1wYXRoIGZ1bmN0aW9ucywgYW5kIHRoZSBpbnN0cnVjdGlvbnMgYWR2aXNlIGFnYWluc3QgbGlzdGluZyB0aG9zZS4gU28gdGhhdCBsZWF2ZXMgYHJwc19sbGNfY2hlY2tgIGFuZCBgcnBzX2ZlYXRfbGxjX2FmZmluaXR5X3N5c2N0bGAuICBIb3dldmVyLCBgcnBzX2xsY19jaGVja2AgKmlzKiBjYWxsZWQgb24gZXZlcnkgZmxvdyByZWNvcmQgdXBkYXRlLCBsaWtlIG9uIGByZWN2bXNnYCwgYW5kIGBzZW5kbXNnYCBjYWxscy4gIEl0J3MgdGhlIGNvcmUgbG9naWMgb2YgdGhlIHBhdGNoLCBzbyBJIG5lZWQgdG8gaW5jbHVkZSBpdCBmb3IgdGhlIGZ1enppbmcgYW5hbHlzaXMuICBDaGVja2luZywgaXQncyBub3Qgc3RhdGljLCBtZWFuaW5nIGl0IGhhcyBpdHMgb3duIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLlxuXG5UaGVyZWZvcmUsIHRoZSBjb25maWcgaXMgc2ltcGx5OiBgUlBTYC5cblxuVGhlIHJlYXNvbmluZyBpcyB0aGF0IHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzeXNjdGwgKGBuZXQuY29yZS5ycHNfZmVhdF9sbGNfYWZmaW5pdHlgKSBhbmQgYSBuZXcgZnVuY3Rpb24gKGBycHNfbGxjX2NoZWNrYCkgdG8gb3B0aW1pemUgUlBTIGZsb3cgdGFibGUgdXBkYXRlcyBiYXNlZCBvbiBMTEMgYWZmaW5pdHkuIFRoaXMgY2xlYXJseSB0b3VjaGVzIGNvcmUgbmV0d29ya2luZyBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSBzeXNjdGwgY29uZmlndXJhdGlvbiBhbmQgcmVndWxhciBuZXR3b3JrIHRyYWZmaWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTY5LCJPdXRwdXRUb2tlbnMiOjEyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDM6MTM6MzYuNzQ0MTIzNTMzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM4MDIyNDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlJQU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJwc19sbGNfY2hlY2tcIixcbiAgICBcInJwc19mZWF0X2xsY19hZmZpbml0eV9zeXNjdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN5c2N0bCBgbmV0LmNvcmUucnBzX2ZlYXRfbGxjX2FmZmluaXR5YCBhbmQgYSBuZXcgZnVuY3Rpb24gYHJwc19sbGNfY2hlY2tgIHRvIG9wdGltaXplIFJQUyAoUmVjZWl2ZSBQYWNrZXQgU3RlZXJpbmcpIGZsb3cgdGFibGUgdXBkYXRlcyBiYXNlZCBvbiBMTEMgKExhc3QgTGV2ZWwgQ2FjaGUpIGFmZmluaXR5LiBUaGlzIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSBzeXNjdGwgY29uZmlndXJhdGlvbiBhbmQgbm9ybWFsIG5ldHdvcmsgdHJhZmZpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSUFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJycHNfbGxjX2NoZWNrXCIsXG4gICAgXCJycHNfZmVhdF9sbGNfYWZmaW5pdHlfc3lzY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzeXNjdGwgYG5ldC5jb3JlLnJwc19mZWF0X2xsY19hZmZpbml0eWAgYW5kIGEgbmV3IGZ1bmN0aW9uIGBycHNfbGxjX2NoZWNrYCB0byBvcHRpbWl6ZSBSUFMgKFJlY2VpdmUgUGFja2V0IFN0ZWVyaW5nKSBmbG93IHRhYmxlIHVwZGF0ZXMgYmFzZWQgb24gTExDIChMYXN0IExldmVsIENhY2hlKSBhZmZpbml0eS4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgc3lzY3RsIGNvbmZpZ3VyYXRpb24gYW5kIG5vcm1hbCBuZXR3b3JrIHRyYWZmaWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow88cbn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-04 02:49:11 +0000 UTC FinishedAt: 2026-08-04 03:13:39 +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": "6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "RPS" ], "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": "6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "RPS" ], "series_id": "93c4712b-9161-4ac5-b236-63af73f8abbe" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rps_llc_check", "rps_feat_llc_affinity_sysctl" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAzOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JQUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Jwc19sbGNfY2hlY2smIzM0OywKICAgICYjMzQ7cnBzX2ZlYXRfbGxjX2FmZmluaXR5X3N5c2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN5c2N0bCBgbmV0LmNvcmUucnBzX2ZlYXRfbGxjX2FmZmluaXR5YCBhbmQgYSBuZXcgZnVuY3Rpb24gYHJwc19sbGNfY2hlY2tgIHRvIG9wdGltaXplIFJQUyAoUmVjZWl2ZSBQYWNrZXQgU3RlZXJpbmcpIGZsb3cgdGFibGUgdXBkYXRlcyBiYXNlZCBvbiBMTEMgKExhc3QgTGV2ZWwgQ2FjaGUpIGFmZmluaXR5LiBUaGlzIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSBzeXNjdGwgY29uZmlndXJhdGlvbiBhbmQgbm9ybWFsIG5ldHdvcmsgdHJhZmZpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMzoxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDk0ZDA3ZmI3Mjc3MzMxNjE0MzhmMDg5NjA1NjMzNjk2ZTA4NmMzMDNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDAzOjEyOjA2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3Jwcy5oIGIvaW5jbHVkZS9uZXQvcnBzLmhcbmluZGV4IGUzM2M2YTJmYThiYmMuLjZkYWNmMDg4OGE2YzIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9ycHMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvcnBzLmhcbkBAIC0xMiw2ICYjNDM7MTIsNyBAQFxuIFxuIGV4dGVybiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBycHNfbmVlZGVkO1xuIGV4dGVybiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSByZnNfbmVlZGVkO1xuJiM0MztleHRlcm4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcnBzX2ZlYXRfbGxjX2FmZmluaXR5O1xuIFxuIC8qXG4gICogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgYW4gUlBTIG1hcCB3aGljaCBjYW4gYmUgb2YgdmFyaWFibGUgbGVuZ3RoLiAgVGhlXG5AQCAtNTUsMTEgJiM0Mzs1NiwxNCBAQCBzdHJ1Y3QgcnBzX3NvY2tfZmxvd190YWJsZSB7XG4gXG4gI2RlZmluZSBSUFNfTk9fQ1BVIDB4ZmZmZlxuIFxuJiM0Mztib29sIHJwc19sbGNfY2hlY2sodTMyIG9sZF92YWwsIHUzMiBuZXdfdmFsKTtcbiYjNDM7XG4gc3RhdGljIGlubGluZSB2b2lkIHJwc19yZWNvcmRfc29ja19mbG93KHJwc190YWdfcHRyIHRhZ19wdHIsIHUzMiBoYXNoKVxuIHtcbiBcdHVuc2lnbmVkIGludCBpbmRleCA9IGhhc2ggXHUwMDI2IHJwc190YWdfdG9fbWFzayh0YWdfcHRyKTtcbiBcdHUzMiB2YWwgPSBoYXNoIFx1MDAyNiB+bmV0X2hvdGRhdGEucnBzX2NwdV9tYXNrO1xuIFx0c3RydWN0IHJwc19zb2NrX2Zsb3dfdGFibGUgKnRhYmxlO1xuJiM0MztcdHUzMiBvbGRfdmFsO1xuIFxuIFx0LyogV2Ugb25seSBnaXZlIGEgaGludCwgcHJlZW1wdGlvbiBjYW4gY2hhbmdlIENQVSB1bmRlciB1cyAqL1xuIFx0dmFsIHw9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7XG5AQCAtNjgsNyAmIzQzOzcyLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHJwc19yZWNvcmRfc29ja19mbG93KHJwc190YWdfcHRyIHRhZ19wdHIsIHUzMiBoYXNoKVxuIFx0LyogVGhlIGZvbGxvd2luZyBXUklURV9PTkNFKCkgaXMgcGFpcmVkIHdpdGggdGhlIFJFQURfT05DRSgpXG4gXHQgKiBoZXJlLCBhbmQgYW5vdGhlciBvbmUgaW4gZ2V0X3Jwc19jcHUoKS5cbiBcdCAqL1xuLVx0aWYgKFJFQURfT05DRSh0YWJsZVtpbmRleF0uZW50KSAhPSB2YWwpXG4mIzQzO1x0b2xkX3ZhbCA9IFJFQURfT05DRSh0YWJsZVtpbmRleF0uZW50KTtcbiYjNDM7XHRpZiAob2xkX3ZhbCAhPSB2YWwgXHUwMDI2XHUwMDI2IHJwc19sbGNfY2hlY2sob2xkX3ZhbCwgdmFsKSlcbiBcdFx0V1JJVEVfT05DRSh0YWJsZVtpbmRleF0uZW50LCB2YWwpO1xuIH1cbiBcbkBAIC0xMzYsMjUgJiM0MzsxNDEsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcmZzX2lzX25lZWRlZCh2b2lkKVxuICNlbmRpZlxuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKVxuLXtcbi0jaWZkZWYgQ09ORklHX1JQU1xuLVx0aWYgKCFyZnNfaXNfbmVlZGVkKCkpXG4tXHRcdHJldHVybjtcbi1cbi1cdF9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKGhhc2gpO1xuLSNlbmRpZlxuLX1cbi1cbi1zdGF0aWMgaW5saW5lIHZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuLXtcbi0jaWZkZWYgQ09ORklHX1JQU1xuLVx0aWYgKCFyZnNfaXNfbmVlZGVkKCkpXG4tXHRcdHJldHVybjtcbi1cbi1cdF9zb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XG4tI2VuZGlmXG4tfVxuJiM0Mzt2b2lkIHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goX191MzIgaGFzaCk7XG4mIzQzO3ZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKTtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgc29ja19ycHNfZGVsZXRlX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuIHtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCAyNmFjOGViOWIyNTlkLi41M2JhZDNjODAxZGM0IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtNDk5Nyw2ICYjNDM7NDk5Nyw4IEBAIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJwc19uZWVkZWQgX19yZWFkX21vc3RseTtcbiBFWFBPUlRfU1lNQk9MKHJwc19uZWVkZWQpO1xuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJmc19uZWVkZWQgX19yZWFkX21vc3RseTtcbiBFWFBPUlRfU1lNQk9MKHJmc19uZWVkZWQpO1xuJiM0MztzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBycHNfZmVhdF9sbGNfYWZmaW5pdHkgX19yZWFkX21vc3RseTtcbiYjNDM7RVhQT1JUX1NZTUJPTChycHNfZmVhdF9sbGNfYWZmaW5pdHkpO1xuIFxuIHN0YXRpYyB1MzIgcmZzX3Nsb3QodTMyIGhhc2gsIHJwc190YWdfcHRyIHRhZ19wdHIpXG4ge1xuQEAgLTUyMDgsNiAmIzQzOzUyMTAsNTUgQEAgc3RhdGljIGludCBnZXRfcnBzX2NwdShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0cmV0dXJuIGNwdTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBycHNfbGxjX2NoZWNrIC0gZGV0ZXJtaW5lIGlmIFJQUyBmbG93IHRhYmxlIHNob3VsZCBiZSB1cGRhdGVkLlxuJiM0MzsgKiBAb2xkX3ZhbDogcHJldmlvdXMgZmxvdyByZWNvcmQgdmFsdWUuXG4mIzQzOyAqIEBuZXdfdmFsOiB0YXJnZXQgZmxvdyByZWNvcmQgdmFsdWUuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdHJ1ZSBpZiB0aGUgcmVjb3JkIG5lZWRzIGFuIHVwZGF0ZSwgZmFsc2Ugb3RoZXJ3aXNlLlxuJiM0MzsgKi9cbiYjNDM7Ym9vbCBycHNfbGxjX2NoZWNrKHUzMiBvbGRfdmFsLCB1MzIgbmV3X3ZhbClcbiYjNDM7e1xuJiM0MztcdHUzMiBvbGRfY3B1ID0gb2xkX3ZhbCBcdTAwMjYgfm5ldF9ob3RkYXRhLnJwc19jcHVfbWFzaztcbiYjNDM7XHR1MzIgbmV3X2NwdSA9IG5ld192YWwgXHUwMDI2IH5uZXRfaG90ZGF0YS5ycHNfY3B1X21hc2s7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUlBTIExMQyBBZmZpbml0eSBGZWF0dXJlOlxuJiM0MztcdCAqIFJlZHVjZSBSRlMvQVJGUyBmbG93IHVwZGF0ZXMgYnkgY2hlY2tpbmcgTExDIGFmZmluaXR5LlxuJiM0MztcdCAqXG4mIzQzO1x0ICogRnJlcXVlbnQgZmxvdyB0YWJsZSB1cGRhdGVzIGNhbiB0cmlnZ2VyIGNvbnN0YW50IGhhcmR3YXJlIHN0ZWVyaW5nXG4mIzQzO1x0ICogcmVjb25maWd1cmF0aW9ucyAoZS5nLiwgbmRvX3J4X2Zsb3dfc3RlZXIpLCBsZWFkaW5nIHRvIHNpZ25pZmljYW50XG4mIzQzO1x0ICogY29udGVudGlvbiBvbiBkcml2ZXIgaW50ZXJuYWwgbG9ja3MgKGxpa2UgbWx4NSYjMzk7cyBhcmZzX2xvY2spLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogVGhpcyBzdHJhdGVneSBvbmx5IHVwZGF0ZXMgdGhlIGZsb3cgcmVjb3JkIGlmIGl0IG1pZ3JhdGVzIGFjcm9zcyBMTENcbiYjNDM7XHQgKiBib3VuZGFyaWVzLiBUaGlzIG1pbmltaXplcyBleHBlbnNpdmUgaGFyZHdhcmUgdXBkYXRlcyB3aGlsZSBwcmVzZXJ2aW5nXG4mIzQzO1x0ICogY2FjaGUgbG9jYWxpdHkgZm9yIHRoZSBhcHBsaWNhdGlvbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZycHNfZmVhdF9sbGNfYWZmaW5pdHkpKSB7XG4mIzQzO1x0XHQvKiBGb3JjZSB1cGRhdGUgaWYgdGhlIHJlY29yZGVkIENQVSBpcyBpbnZhbGlkIG9yIGhhcyBnb25lIG9mZmxpbmUgKi9cbiYjNDM7XHRcdGlmIChvbGRfY3B1IFx1MDAzZT0gbnJfY3B1X2lkcyB8fCAhY3B1X2FjdGl2ZShvbGRfY3B1KSlcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEZvcmNlIGFuIHVwZGF0ZSBpZiB0aGUgY3VycmVudCB0YXNrIGlzIG5vIGxvbmdlciBwZXJtaXR0ZWRcbiYjNDM7XHRcdCAqIHRvIHJ1biBvbiB0aGUgb2xkX2NwdS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKCFjcHVtYXNrX3Rlc3RfY3B1KG9sZF9jcHUsIGN1cnJlbnQtXHUwMDNlY3B1c19wdHIpKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogSWYgQ1BVcyBkbyBub3Qgc2hhcmUgYSBjYWNoZSwgYWxsb3cgdGhlIHVwZGF0ZSB0byBwcmV2ZW50XG4mIzQzO1x0XHQgKiBleHBlbnNpdmUgcmVtb3RlIG1lbW9yeSBhY2Nlc3NlcyBhbmQgY2FjaGUgbWlzc2VzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoIWNwdXNfc2hhcmVfY2FjaGUob2xkX2NwdSwgbmV3X2NwdSkpXG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuICNpZmRlZiBDT05GSUdfUkZTX0FDQ0VMXG4gXG4gLyoqXG5AQCAtNTI2Myw2ICYjNDM7NTMxNCwyOCBAQCBzdGF0aWMgdm9pZCBycHNfdHJpZ2dlcl9zb2Z0aXJxKHZvaWQgKmRhdGEpXG4gXG4gI2VuZGlmIC8qIENPTkZJR19SUFMgKi9cbiBcbiYjNDM7dm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKF9fdTMyIGhhc2gpXG4mIzQzO3tcbiYjNDM7I2lmZGVmIENPTkZJR19SUFNcbiYjNDM7XHRpZiAoIXJmc19pc19uZWVkZWQoKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0X3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goaGFzaCk7XG4mIzQzOyNlbmRpZlxuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0woc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaCk7XG4mIzQzO1xuJiM0Mzt2b2lkIHNvY2tfcnBzX3JlY29yZF9mbG93KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbiYjNDM7e1xuJiM0MzsjaWZkZWYgQ09ORklHX1JQU1xuJiM0MztcdGlmICghcmZzX2lzX25lZWRlZCgpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRfc29ja19ycHNfcmVjb3JkX2Zsb3coc2spO1xuJiM0MzsjZW5kaWZcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHNvY2tfcnBzX3JlY29yZF9mbG93KTtcbiYjNDM7XG4gLyogQ2FsbGVkIGZyb20gaGFyZGlycSAoSVBJKSBjb250ZXh0ICovXG4gc3RhdGljIHZvaWQgdHJpZ2dlcl9yeF9zb2Z0aXJxKHZvaWQgKmRhdGEpXG4ge1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jIGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmNcbmluZGV4IGI1MDg2MThiZmMxMjMuLmI2ZDRlYmNiYjZhNjggMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmNcbkBAIC0yMTAsNiAmIzQzOzIxMCwzMyBAQCBzdGF0aWMgaW50IHJwc19zb2NrX2Zsb3dfc3lzY3RsKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4gXHRrdmZyZWVfcmN1X21pZ2h0c2xlZXAodG9mcmVlKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBycHNfZmVhdF9sbGNfYWZmaW5pdHlfc3lzY3RsKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4mIzQzO1x0XHRcdFx0XHR2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxuJiM0Mzt7XG4mIzQzO1x0dTggY3Vycl9zdGF0ZTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdG1wID0ge1xuJiM0MztcdFx0LmRhdGEgPSBcdTAwMjZjdXJyX3N0YXRlLFxuJiM0MztcdFx0Lm1heGxlbiA9IHNpemVvZihjdXJyX3N0YXRlKSxcbiYjNDM7XHRcdC5tb2RlID0gdGFibGUtXHUwMDNlbW9kZSxcbiYjNDM7XHRcdC5leHRyYTEgPSB0YWJsZS1cdTAwM2VleHRyYTEsXG4mIzQzO1x0XHQuZXh0cmEyID0gdGFibGUtXHUwMDNlZXh0cmEyXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0Y3Vycl9zdGF0ZSA9IHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2cnBzX2ZlYXRfbGxjX2FmZmluaXR5KSA/IDEgOiAwO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwcm9jX2RvdTh2ZWNfbWlubWF4KFx1MDAyNnRtcCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XG4mIzQzO1x0aWYgKHdyaXRlIFx1MDAyNlx1MDAyNiByZXQgPT0gMCkge1xuJiM0MztcdFx0aWYgKGN1cnJfc3RhdGUgXHUwMDI2XHUwMDI2ICFzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnJwc19mZWF0X2xsY19hZmZpbml0eSkpXG4mIzQzO1x0XHRcdHN0YXRpY19icmFuY2hfZW5hYmxlKFx1MDAyNnJwc19mZWF0X2xsY19hZmZpbml0eSk7XG4mIzQzO1x0XHRlbHNlIGlmICghY3Vycl9zdGF0ZSBcdTAwMjZcdTAwMjYgc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZycHNfZmVhdF9sbGNfYWZmaW5pdHkpKVxuJiM0MztcdFx0XHRzdGF0aWNfYnJhbmNoX2Rpc2FibGUoXHUwMDI2cnBzX2ZlYXRfbGxjX2FmZmluaXR5KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gI2VuZGlmIC8qIENPTkZJR19SUFMgKi9cbiBcbiAjaWZkZWYgQ09ORklHX05FVF9GTE9XX0xJTUlUXG5AQCAtNTU0LDYgJiM0Mzs1ODEsMTQgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmV0X2NvcmVfdGFibGVbXSA9IHtcbiBcdFx0Lm1vZGVcdFx0PSAwNjQ0LFxuIFx0XHQucHJvY19oYW5kbGVyXHQ9IHJwc19zb2NrX2Zsb3dfc3lzY3RsXG4gXHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdC5wcm9jbmFtZSAgID0gXCYjMzQ7cnBzX2ZlYXRfbGxjX2FmZmluaXR5XCYjMzQ7LFxuJiM0MztcdFx0Lm1heGxlbiAgICAgPSBzaXplb2YodTgpLFxuJiM0MztcdFx0Lm1vZGUgICAgICAgPSAwNjQ0LFxuJiM0MztcdFx0LnByb2NfaGFuZGxlciAgID0gcnBzX2ZlYXRfbGxjX2FmZmluaXR5X3N5c2N0bCxcbiYjNDM7XHRcdC5leHRyYTEgICAgID0gU1lTQ1RMX1pFUk8sXG4mIzQzO1x0XHQuZXh0cmEyICAgICA9IFNZU0NUTF9PTkVcbiYjNDM7XHR9LFxuICNlbmRpZlxuICNpZmRlZiBDT05GSUdfTkVUX0ZMT1dfTElNSVRcbiBcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMzoxMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UlBTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnBzX2xsY19jaGVjayYjMzQ7LAogICAgJiMzNDtycHNfZmVhdF9sbGNfYWZmaW5pdHlfc3lzY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3lzY3RsIGBuZXQuY29yZS5ycHNfZmVhdF9sbGNfYWZmaW5pdHlgIGFuZCBhIG5ldyBmdW5jdGlvbiBgcnBzX2xsY19jaGVja2AgdG8gb3B0aW1pemUgUlBTIChSZWNlaXZlIFBhY2tldCBTdGVlcmluZykgZmxvdyB0YWJsZSB1cGRhdGVzIGJhc2VkIG9uIExMQyAoTGFzdCBMZXZlbCBDYWNoZSkgYWZmaW5pdHkuIFRoaXMgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgdmlhIHN5c2N0bCBjb25maWd1cmF0aW9uIGFuZCBub3JtYWwgbmV0d29yayB0cmFmZmljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTRkMDdmYjcyNzczMzE2MTQzOGYwODk2MDU2MzM2OTZlMDg2YzMwMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDQgMDM6MTI6MDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ycHMuaCBiL2luY2x1ZGUvbmV0L3Jwcy5oCmluZGV4IGUzM2M2YTJmYThiYmMuLjZkYWNmMDg4OGE2YzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3Jwcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3Jwcy5oCkBAIC0xMiw2ICYjNDM7MTIsNyBAQAogCiBleHRlcm4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcnBzX25lZWRlZDsKIGV4dGVybiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSByZnNfbmVlZGVkOwomIzQzO2V4dGVybiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBycHNfZmVhdF9sbGNfYWZmaW5pdHk7CiAKIC8qCiAgKiBUaGlzIHN0cnVjdHVyZSBob2xkcyBhbiBSUFMgbWFwIHdoaWNoIGNhbiBiZSBvZiB2YXJpYWJsZSBsZW5ndGguICBUaGUKQEAgLTU1LDExICYjNDM7NTYsMTQgQEAgc3RydWN0IHJwc19zb2NrX2Zsb3dfdGFibGUgewogCiAjZGVmaW5lIFJQU19OT19DUFUgMHhmZmZmCiAKJiM0Mztib29sIHJwc19sbGNfY2hlY2sodTMyIG9sZF92YWwsIHUzMiBuZXdfdmFsKTsKJiM0MzsKIHN0YXRpYyBpbmxpbmUgdm9pZCBycHNfcmVjb3JkX3NvY2tfZmxvdyhycHNfdGFnX3B0ciB0YWdfcHRyLCB1MzIgaGFzaCkKIHsKIAl1bnNpZ25lZCBpbnQgaW5kZXggPSBoYXNoICZhbXA7IHJwc190YWdfdG9fbWFzayh0YWdfcHRyKTsKIAl1MzIgdmFsID0gaGFzaCAmYW1wOyB+bmV0X2hvdGRhdGEucnBzX2NwdV9tYXNrOwogCXN0cnVjdCBycHNfc29ja19mbG93X3RhYmxlICp0YWJsZTsKJiM0MzsJdTMyIG9sZF92YWw7CiAKIAkvKiBXZSBvbmx5IGdpdmUgYSBoaW50LCBwcmVlbXB0aW9uIGNhbiBjaGFuZ2UgQ1BVIHVuZGVyIHVzICovCiAJdmFsIHw9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CkBAIC02OCw3ICYjNDM7NzIsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcnBzX3JlY29yZF9zb2NrX2Zsb3cocnBzX3RhZ19wdHIgdGFnX3B0ciwgdTMyIGhhc2gpCiAJLyogVGhlIGZvbGxvd2luZyBXUklURV9PTkNFKCkgaXMgcGFpcmVkIHdpdGggdGhlIFJFQURfT05DRSgpCiAJICogaGVyZSwgYW5kIGFub3RoZXIgb25lIGluIGdldF9ycHNfY3B1KCkuCiAJICovCi0JaWYgKFJFQURfT05DRSh0YWJsZVtpbmRleF0uZW50KSAhPSB2YWwpCiYjNDM7CW9sZF92YWwgPSBSRUFEX09OQ0UodGFibGVbaW5kZXhdLmVudCk7CiYjNDM7CWlmIChvbGRfdmFsICE9IHZhbCAmYW1wOyZhbXA7IHJwc19sbGNfY2hlY2sob2xkX3ZhbCwgdmFsKSkKIAkJV1JJVEVfT05DRSh0YWJsZVtpbmRleF0uZW50LCB2YWwpOwogfQogCkBAIC0xMzYsMjUgJiM0MzsxNDEsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcmZzX2lzX25lZWRlZCh2b2lkKQogI2VuZGlmCiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKF9fdTMyIGhhc2gpCi17Ci0jaWZkZWYgQ09ORklHX1JQUwotCWlmICghcmZzX2lzX25lZWRlZCgpKQotCQlyZXR1cm47Ci0KLQlfc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChoYXNoKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKQotewotI2lmZGVmIENPTkZJR19SUFMKLQlpZiAoIXJmc19pc19uZWVkZWQoKSkKLQkJcmV0dXJuOwotCi0JX3NvY2tfcnBzX3JlY29yZF9mbG93KHNrKTsKLSNlbmRpZgotfQomIzQzO3ZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKTsKJiM0Mzt2b2lkIHNvY2tfcnBzX3JlY29yZF9mbG93KGNvbnN0IHN0cnVjdCBzb2NrICpzayk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzb2NrX3Jwc19kZWxldGVfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spCiB7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IDI2YWM4ZWI5YjI1OWQuLjUzYmFkM2M4MDFkYzQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jCkBAIC00OTk3LDYgJiM0Mzs0OTk3LDggQEAgc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcnBzX25lZWRlZCBfX3JlYWRfbW9zdGx5OwogRVhQT1JUX1NZTUJPTChycHNfbmVlZGVkKTsKIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJmc19uZWVkZWQgX19yZWFkX21vc3RseTsKIEVYUE9SVF9TWU1CT0wocmZzX25lZWRlZCk7CiYjNDM7c3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcnBzX2ZlYXRfbGxjX2FmZmluaXR5IF9fcmVhZF9tb3N0bHk7CiYjNDM7RVhQT1JUX1NZTUJPTChycHNfZmVhdF9sbGNfYWZmaW5pdHkpOwogCiBzdGF0aWMgdTMyIHJmc19zbG90KHUzMiBoYXNoLCBycHNfdGFnX3B0ciB0YWdfcHRyKQogewpAQCAtNTIwOCw2ICYjNDM7NTIxMCw1NSBAQCBzdGF0aWMgaW50IGdldF9ycHNfY3B1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsCiAJcmV0dXJuIGNwdTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHJwc19sbGNfY2hlY2sgLSBkZXRlcm1pbmUgaWYgUlBTIGZsb3cgdGFibGUgc2hvdWxkIGJlIHVwZGF0ZWQuCiYjNDM7ICogQG9sZF92YWw6IHByZXZpb3VzIGZsb3cgcmVjb3JkIHZhbHVlLgomIzQzOyAqIEBuZXdfdmFsOiB0YXJnZXQgZmxvdyByZWNvcmQgdmFsdWUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgdGhlIHJlY29yZCBuZWVkcyBhbiB1cGRhdGUsIGZhbHNlIG90aGVyd2lzZS4KJiM0MzsgKi8KJiM0Mztib29sIHJwc19sbGNfY2hlY2sodTMyIG9sZF92YWwsIHUzMiBuZXdfdmFsKQomIzQzO3sKJiM0MzsJdTMyIG9sZF9jcHUgPSBvbGRfdmFsICZhbXA7IH5uZXRfaG90ZGF0YS5ycHNfY3B1X21hc2s7CiYjNDM7CXUzMiBuZXdfY3B1ID0gbmV3X3ZhbCAmYW1wOyB+bmV0X2hvdGRhdGEucnBzX2NwdV9tYXNrOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSUFMgTExDIEFmZmluaXR5IEZlYXR1cmU6CiYjNDM7CSAqIFJlZHVjZSBSRlMvQVJGUyBmbG93IHVwZGF0ZXMgYnkgY2hlY2tpbmcgTExDIGFmZmluaXR5LgomIzQzOwkgKgomIzQzOwkgKiBGcmVxdWVudCBmbG93IHRhYmxlIHVwZGF0ZXMgY2FuIHRyaWdnZXIgY29uc3RhbnQgaGFyZHdhcmUgc3RlZXJpbmcKJiM0MzsJICogcmVjb25maWd1cmF0aW9ucyAoZS5nLiwgbmRvX3J4X2Zsb3dfc3RlZXIpLCBsZWFkaW5nIHRvIHNpZ25pZmljYW50CiYjNDM7CSAqIGNvbnRlbnRpb24gb24gZHJpdmVyIGludGVybmFsIGxvY2tzIChsaWtlIG1seDUmIzM5O3MgYXJmc19sb2NrKS4KJiM0MzsJICoKJiM0MzsJICogVGhpcyBzdHJhdGVneSBvbmx5IHVwZGF0ZXMgdGhlIGZsb3cgcmVjb3JkIGlmIGl0IG1pZ3JhdGVzIGFjcm9zcyBMTEMKJiM0MzsJICogYm91bmRhcmllcy4gVGhpcyBtaW5pbWl6ZXMgZXhwZW5zaXZlIGhhcmR3YXJlIHVwZGF0ZXMgd2hpbGUgcHJlc2VydmluZwomIzQzOwkgKiBjYWNoZSBsb2NhbGl0eSBmb3IgdGhlIGFwcGxpY2F0aW9uLgomIzQzOwkgKi8KJiM0MzsJaWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoJmFtcDtycHNfZmVhdF9sbGNfYWZmaW5pdHkpKSB7CiYjNDM7CQkvKiBGb3JjZSB1cGRhdGUgaWYgdGhlIHJlY29yZGVkIENQVSBpcyBpbnZhbGlkIG9yIGhhcyBnb25lIG9mZmxpbmUgKi8KJiM0MzsJCWlmIChvbGRfY3B1ICZndDs9IG5yX2NwdV9pZHMgfHwgIWNwdV9hY3RpdmUob2xkX2NwdSkpCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogRm9yY2UgYW4gdXBkYXRlIGlmIHRoZSBjdXJyZW50IHRhc2sgaXMgbm8gbG9uZ2VyIHBlcm1pdHRlZAomIzQzOwkJICogdG8gcnVuIG9uIHRoZSBvbGRfY3B1LgomIzQzOwkJICovCiYjNDM7CQlpZiAoIWNwdW1hc2tfdGVzdF9jcHUob2xkX2NwdSwgY3VycmVudC0mZ3Q7Y3B1c19wdHIpKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIElmIENQVXMgZG8gbm90IHNoYXJlIGEgY2FjaGUsIGFsbG93IHRoZSB1cGRhdGUgdG8gcHJldmVudAomIzQzOwkJICogZXhwZW5zaXZlIHJlbW90ZSBtZW1vcnkgYWNjZXNzZXMgYW5kIGNhY2hlIG1pc3Nlcy4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCFjcHVzX3NoYXJlX2NhY2hlKG9sZF9jcHUsIG5ld19jcHUpKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKICNpZmRlZiBDT05GSUdfUkZTX0FDQ0VMCiAKIC8qKgpAQCAtNTI2Myw2ICYjNDM7NTMxNCwyOCBAQCBzdGF0aWMgdm9pZCBycHNfdHJpZ2dlcl9zb2Z0aXJxKHZvaWQgKmRhdGEpCiAKICNlbmRpZiAvKiBDT05GSUdfUlBTICovCiAKJiM0Mzt2b2lkIHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goX191MzIgaGFzaCkKJiM0Mzt7CiYjNDM7I2lmZGVmIENPTkZJR19SUFMKJiM0MzsJaWYgKCFyZnNfaXNfbmVlZGVkKCkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CV9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKGhhc2gpOwomIzQzOyNlbmRpZgomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2gpOwomIzQzOwomIzQzO3ZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsjaWZkZWYgQ09ORklHX1JQUwomIzQzOwlpZiAoIXJmc19pc19uZWVkZWQoKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJX3NvY2tfcnBzX3JlY29yZF9mbG93KHNrKTsKJiM0MzsjZW5kaWYKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTChzb2NrX3Jwc19yZWNvcmRfZmxvdyk7CiYjNDM7CiAvKiBDYWxsZWQgZnJvbSBoYXJkaXJxIChJUEkpIGNvbnRleHQgKi8KIHN0YXRpYyB2b2lkIHRyaWdnZXJfcnhfc29mdGlycSh2b2lkICpkYXRhKQogewpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMgYi9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYwppbmRleCBiNTA4NjE4YmZjMTIzLi5iNmQ0ZWJjYmI2YTY4IDEwMDY0NAotLS0gYS9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYwpAQCAtMjEwLDYgJiM0MzsyMTAsMzMgQEAgc3RhdGljIGludCBycHNfc29ja19mbG93X3N5c2N0bChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLAogCWt2ZnJlZV9yY3VfbWlnaHRzbGVlcCh0b2ZyZWUpOwogCXJldHVybiByZXQ7CiB9CiYjNDM7CiYjNDM7c3RhdGljIGludCBycHNfZmVhdF9sbGNfYWZmaW5pdHlfc3lzY3RsKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsCiYjNDM7CQkJCQl2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKQomIzQzO3sKJiM0MzsJdTggY3Vycl9zdGF0ZTsKJiM0MzsJaW50IHJldDsKJiM0MzsJY29uc3Qgc3RydWN0IGN0bF90YWJsZSB0bXAgPSB7CiYjNDM7CQkuZGF0YSA9ICZhbXA7Y3Vycl9zdGF0ZSwKJiM0MzsJCS5tYXhsZW4gPSBzaXplb2YoY3Vycl9zdGF0ZSksCiYjNDM7CQkubW9kZSA9IHRhYmxlLSZndDttb2RlLAomIzQzOwkJLmV4dHJhMSA9IHRhYmxlLSZndDtleHRyYTEsCiYjNDM7CQkuZXh0cmEyID0gdGFibGUtJmd0O2V4dHJhMgomIzQzOwl9OwomIzQzOwomIzQzOwljdXJyX3N0YXRlID0gc3RhdGljX2JyYW5jaF91bmxpa2VseSgmYW1wO3Jwc19mZWF0X2xsY19hZmZpbml0eSkgPyAxIDogMDsKJiM0MzsKJiM0MzsJcmV0ID0gcHJvY19kb3U4dmVjX21pbm1heCgmYW1wO3RtcCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7CiYjNDM7CWlmICh3cml0ZSAmYW1wOyZhbXA7IHJldCA9PSAwKSB7CiYjNDM7CQlpZiAoY3Vycl9zdGF0ZSAmYW1wOyZhbXA7ICFzdGF0aWNfYnJhbmNoX3VubGlrZWx5KCZhbXA7cnBzX2ZlYXRfbGxjX2FmZmluaXR5KSkKJiM0MzsJCQlzdGF0aWNfYnJhbmNoX2VuYWJsZSgmYW1wO3Jwc19mZWF0X2xsY19hZmZpbml0eSk7CiYjNDM7CQllbHNlIGlmICghY3Vycl9zdGF0ZSAmYW1wOyZhbXA7IHN0YXRpY19icmFuY2hfdW5saWtlbHkoJmFtcDtycHNfZmVhdF9sbGNfYWZmaW5pdHkpKQomIzQzOwkJCXN0YXRpY19icmFuY2hfZGlzYWJsZSgmYW1wO3Jwc19mZWF0X2xsY19hZmZpbml0eSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiAjZW5kaWYgLyogQ09ORklHX1JQUyAqLwogCiAjaWZkZWYgQ09ORklHX05FVF9GTE9XX0xJTUlUCkBAIC01NTQsNiAmIzQzOzU4MSwxNCBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBuZXRfY29yZV90YWJsZVtdID0gewogCQkubW9kZQkJPSAwNjQ0LAogCQkucHJvY19oYW5kbGVyCT0gcnBzX3NvY2tfZmxvd19zeXNjdGwKIAl9LAomIzQzOwl7CiYjNDM7CQkucHJvY25hbWUgICA9ICYjMzQ7cnBzX2ZlYXRfbGxjX2FmZmluaXR5JiMzNDssCiYjNDM7CQkubWF4bGVuICAgICA9IHNpemVvZih1OCksCiYjNDM7CQkubW9kZSAgICAgICA9IDA2NDQsCiYjNDM7CQkucHJvY19oYW5kbGVyICAgPSBycHNfZmVhdF9sbGNfYWZmaW5pdHlfc3lzY3RsLAomIzQzOwkJLmV4dHJhMSAgICAgPSBTWVNDVExfWkVSTywKJiM0MzsJCS5leHRyYTIgICAgID0gU1lTQ1RMX09ORQomIzQzOwl9LAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX05FVF9GTE9XX0xJTUlUCiAJewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzA4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUlBTIExMQyBBZmZpbml0eSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIGludHJvZHVjaW5nIGEgbmV3IHN5c2N0bCwgYG5ldC5jb3JlLnJwc19mZWF0X2xsY19hZmZpbml0eWAsIGFuZCBhIG5ldyBmZWF0dXJlIGZvciBSUFMsIHdoaWNoIGlzIGludHJpZ3VpbmcuIEkgc2VlIHRoZSBjaGFuZ2VzIGFyZSB0b3VjaGluZyBzb21lIGtleSBuZXR3b3JraW5nIGZpbGVzOiBgaW5jbHVkZS9uZXQvcnBzLmhgLCBgbmV0L2NvcmUvZGV2LmNgLCBhbmQgYG5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jYC4gVGhpcyBMTEMgYWZmaW5pdHkgdGhpbmcgaXMgYWJvdXQgY2hlY2tpbmcgaWYgYW4gUlBTIGZsb3cgdGFibGUgdXBkYXRlIGlzIG5lY2Vzc2FyeSwgYmFzZWQgb24gdGhhdCBjYWNoZSBsZXZlbCBhZmZpbml0eSwgc28gcG90ZW50aWFsbHkgaW1wcm92aW5nIHBlcmZvcm1hbmNlIGJ5IGtlZXBpbmcgZmxvd3Mgb24gdGhlIHNhbWUgY29yZS4KClRoZSBwYXRjaCBhZGRzIGEgbmV3IGZ1bmN0aW9uLCBgcnBzX2xsY19jaGVja2AsIGluIGBuZXQvY29yZS9kZXYuY2AsIHdoaWNoIHNlZW1zIHRvIGJlIHRoZSBjb3JlIG9mIHRoaXMgbmV3IGZlYXR1cmUuIEl0JiMzOTtzIHVzaW5nIGBzdGF0aWNfYnJhbmNoX3VubGlrZWx5KCZhbXA7cnBzX2ZlYXRfbGxjX2FmZmluaXR5KWAsIHNvIHRoaXMgYHJwc19mZWF0X2xsY19hZmZpbml0eV9zeXNjdGxgIGhhbmRsZXIgbXVzdCBiZSBob3cgd2UgZW5hYmxlIG9yIGRpc2FibGUgdGhpcyBjb25kaXRpb25hbCBiZWhhdmlvci4gSW50ZXJlc3RpbmcuIEFuZCBmcm9tIHdoYXQgSSBzZWUsIGBycHNfbGxjX2NoZWNrYCBnZXRzIGNhbGxlZCBmcm9tIGBycHNfcmVjb3JkX3NvY2tfZmxvd2AgaW4gYGluY2x1ZGUvbmV0L3Jwcy5oYCwgd2hpY2ggaXMgYSBrZXkgcGFydCBvZiBob3cgcGFja2V0cyBhcmUgcm91dGVkIHRvIGNvcmVzLiBUaGlzIHdob2xlIHRoaW5nIHRyaWNrbGVzIGRvd24gdGhyb3VnaCBhIGZldyBmdW5jdGlvbnM6IGBfc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaGAsIGBfc29ja19ycHNfcmVjb3JkX2Zsb3dgLCBhbmQgdGhlbiB0aGUgdW4taW5saW5lZCB2ZXJzaW9ucyBpbiBgbmV0L2NvcmUvZGV2LmNgLgoKUmlnaHQsIHRpbWUgdG8gZXZhbHVhdGUgaWYgdGhpcyBpcyByaXBlIGZvciBmdXp6aW5nLiBHaXZlbiB0aGUgbW9kaWZpY2F0aW9uIHRvIGNvcmUgbmV0d29ya2luZyBsb2dpYyDigJMgUlBTLCBzcGVjaWZpY2FsbHkg4oCTIGFuZCB0aGUgYWRkaXRpb24gb2YgdGhhdCBuZXcgc3lzY3RsLCBteSBndXQgZmVlbGluZyBpcyB0aGF0IGl0JiMzOTtzIHdvcnRoIGEgc2hvdC4gVGhlIG5ldyBgcnBzX2xsY19jaGVja2AgZnVuY3Rpb24gaXMgZGVmaW5pdGVseSByZWFjaGFibGUgaWYgUlBTL1JGUyBpcyBlbmFibGVkLCBhbmQgdGhlIGBycHNfZmVhdF9sbGNfYWZmaW5pdHlfc3lzY3RsYCBoYW5kbGVyIGlzIGFsc28gZXhwb3NlZC4gVGhhdOKAmXMgZW5vdWdoIHRvIHBlYWsgbXkgaW50ZXJlc3QuCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGNoZWNrIHRoZSBgI2lmZGVmIENPTkZJR19SUFNgIGd1YXJkcywgc28gSSYjMzk7bGwgcG9rZSBhcm91bmQgYG5ldC9jb3JlL2Rldi5jYCBhbmQgYG5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jYCB0byBjb25maXJtIHdoYXQmIzM5O3MgbmVlZGVkLiBUaW1lIHRvIGRpZyBpbiBhbmQgZmluZCB0aG9zZSBpbml0aWFsIGNvbmZpZyByZXF1aXJlbWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDM6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1JQUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz0yMzE9c3RhdGljIGlubGluZSB2b2lkIGJhY2tsb2dfbG9ja19pcnFfc2F2ZShzdHJ1Y3Qgc29mdG5ldF9kYXRhICpzZCxcbi0tXG5uZXQvY29yZS9kZXYuYy0yMzctXHRcdGxvY2FsX2lycV9zYXZlKCpmbGFncyk7XG5uZXQvY29yZS9kZXYuYzoyMzg6XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19SUFMpIHx8IHVzZV9iYWNrbG9nX3RocmVhZHMoKSlcbm5ldC9jb3JlL2Rldi5jLTIzOS1cdFx0XHRzcGluX2xvY2soXHUwMDI2c2QtXHUwMDNlaW5wdXRfcGt0X3F1ZXVlLmxvY2spO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTI0Mz1zdGF0aWMgaW5saW5lIHZvaWQgYmFja2xvZ19sb2NrX2lycV9kaXNhYmxlKHN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkKVxubmV0L2NvcmUvZGV2LmMtMjQ0LXtcbm5ldC9jb3JlL2Rldi5jOjI0NTpcdGlmIChJU19FTkFCTEVEKENPTkZJR19SUFMpIHx8IHVzZV9iYWNrbG9nX3RocmVhZHMoKSlcbm5ldC9jb3JlL2Rldi5jLTI0Ni1cdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZzZC1cdTAwM2VpbnB1dF9wa3RfcXVldWUubG9jayk7XG4tLVxubmV0L2NvcmUvZGV2LmM9MjUxPXN0YXRpYyBpbmxpbmUgdm9pZCBiYWNrbG9nX3VubG9ja19pcnFfcmVzdG9yZShzdHJ1Y3Qgc29mdG5ldF9kYXRhICpzZCxcbi0tXG5uZXQvY29yZS9kZXYuYy0yNTYtXHR9IGVsc2Uge1xubmV0L2NvcmUvZGV2LmM6MjU3Olx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUlBTKSB8fCB1c2VfYmFja2xvZ190aHJlYWRzKCkpXG5uZXQvY29yZS9kZXYuYy0yNTgtXHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2c2QtXHUwMDNlaW5wdXRfcGt0X3F1ZXVlLmxvY2spO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTI2Mz1zdGF0aWMgaW5saW5lIHZvaWQgYmFja2xvZ191bmxvY2tfaXJxX2VuYWJsZShzdHJ1Y3Qgc29mdG5ldF9kYXRhICpzZClcbm5ldC9jb3JlL2Rldi5jLTI2NC17XG5uZXQvY29yZS9kZXYuYzoyNjU6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUlBTKSB8fCB1c2VfYmFja2xvZ190aHJlYWRzKCkpXG5uZXQvY29yZS9kZXYuYy0yNjYtXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZzZC1cdTAwM2VpbnB1dF9wa3RfcXVldWUubG9jayk7XG4tLVxubmV0L2NvcmUvZGV2LmM9NDk1OD1zdGF0aWMgaW5saW5lIHZvaWQgX19fX25hcGlfc2NoZWR1bGUoc3RydWN0IHNvZnRuZXRfZGF0YSAqc2QsXG4tLVxubmV0L2NvcmUvZGV2LmMtNDk5My1cbm5ldC9jb3JlL2Rldi5jOjQ5OTQ6I2lmZGVmIENPTkZJR19SUFNcbm5ldC9jb3JlL2Rldi5jLTQ5OTUtXG4tLVxubmV0L2NvcmUvZGV2LmM9NTMwNj1zdGF0aWMgdm9pZCBycHNfdHJpZ2dlcl9zb2Z0aXJxKHZvaWQgKmRhdGEpXG4tLVxubmV0L2NvcmUvZGV2LmMtNTMxNC1cbm5ldC9jb3JlL2Rldi5jOjUzMTU6I2VuZGlmIC8qIENPTkZJR19SUFMgKi9cbm5ldC9jb3JlL2Rldi5jLTUzMTYtXG5uZXQvY29yZS9kZXYuYz01MzE3PXZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKVxubmV0L2NvcmUvZGV2LmMtNTMxOC17XG5uZXQvY29yZS9kZXYuYzo1MzE5OiNpZmRlZiBDT05GSUdfUlBTXG5uZXQvY29yZS9kZXYuYy01MzIwLVx0aWYgKCFyZnNfaXNfbmVlZGVkKCkpXG4tLVxubmV0L2NvcmUvZGV2LmM9NTMyOD12b2lkIHNvY2tfcnBzX3JlY29yZF9mbG93KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbm5ldC9jb3JlL2Rldi5jLTUzMjkte1xubmV0L2NvcmUvZGV2LmM6NTMzMDojaWZkZWYgQ09ORklHX1JQU1xubmV0L2NvcmUvZGV2LmMtNTMzMS1cdGlmICghcmZzX2lzX25lZWRlZCgpKVxuLS1cbm5ldC9jb3JlL2Rldi5jPTUzNTg9c3RhdGljIHZvaWQgbmFwaV9zY2hlZHVsZV9ycHMoc3RydWN0IHNvZnRuZXRfZGF0YSAqc2QpXG4tLVxubmV0L2NvcmUvZGV2LmMtNTM2MS1cbm5ldC9jb3JlL2Rldi5jOjUzNjI6I2lmZGVmIENPTkZJR19SUFNcbm5ldC9jb3JlL2Rldi5jLTUzNjMtXHRpZiAoc2QgIT0gbXlzZCkge1xuLS1cbm5ldC9jb3JlL2Rldi5jLTUzNzgtXHR9XG5uZXQvY29yZS9kZXYuYzo1Mzc5OiNlbmRpZiAvKiBDT05GSUdfUlBTICovXG5uZXQvY29yZS9kZXYuYy01MzgwLVx0X19uYXBpX3NjaGVkdWxlX2lycW9mZihcdTAwMjZteXNkLVx1MDAzZWJhY2tsb2cpO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTU3NjY9c3RhdGljIGludCBuZXRpZl9yeF9pbnRlcm5hbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTU3NzMtXG5uZXQvY29yZS9kZXYuYzo1Nzc0OiNpZmRlZiBDT05GSUdfUlBTXG5uZXQvY29yZS9kZXYuYy01Nzc1LVx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2cnBzX25lZWRlZCkpIHtcbi0tXG5uZXQvY29yZS9kZXYuYz02NDUzPXN0YXRpYyBpbnQgbmV0aWZfcmVjZWl2ZV9za2JfaW50ZXJuYWwoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9kZXYuYy02NDYyLVx0cmN1X3JlYWRfbG9jaygpO1xubmV0L2NvcmUvZGV2LmM6NjQ2MzojaWZkZWYgQ09ORklHX1JQU1xubmV0L2NvcmUvZGV2LmMtNjQ2NC1cdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnJwc19uZWVkZWQpKSB7XG4tLVxubmV0L2NvcmUvZGV2LmM9NjQ4MD12b2lkIG5ldGlmX3JlY2VpdmVfc2tiX2xpc3RfaW50ZXJuYWwoc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbi0tXG5uZXQvY29yZS9kZXYuYy02NDk0LVx0cmN1X3JlYWRfbG9jaygpO1xubmV0L2NvcmUvZGV2LmM6NjQ5NTojaWZkZWYgQ09ORklHX1JQU1xubmV0L2NvcmUvZGV2LmMtNjQ5Ni1cdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnJwc19uZWVkZWQpKSB7XG4tLVxubmV0L2NvcmUvZGV2LmM9NjYwMT1zdGF0aWMgYm9vbCBmbHVzaF9yZXF1aXJlZChpbnQgY3B1KVxubmV0L2NvcmUvZGV2LmMtNjYwMi17XG5uZXQvY29yZS9kZXYuYzo2NjAzOiNpZiBJU19FTkFCTEVEKENPTkZJR19SUFMpXG5uZXQvY29yZS9kZXYuYy02NjA0LVx0c3RydWN0IHNvZnRuZXRfZGF0YSAqc2QgPSBcdTAwMjZwZXJfY3B1KHNvZnRuZXRfZGF0YSwgY3B1KTtcbi0tXG5uZXQvY29yZS9kZXYuYz02Njc1PXN0YXRpYyB2b2lkIG5ldF9ycHNfc2VuZF9pcGkoc3RydWN0IHNvZnRuZXRfZGF0YSAqcmVtc2QpXG5uZXQvY29yZS9kZXYuYy02Njc2LXtcbm5ldC9jb3JlL2Rldi5jOjY2Nzc6I2lmZGVmIENPTkZJR19SUFNcbm5ldC9jb3JlL2Rldi5jLTY2NzgtXHR3aGlsZSAocmVtc2QpIHtcbi0tXG5uZXQvY29yZS9kZXYuYz02NjkyPXN0YXRpYyB2b2lkIG5ldF9ycHNfYWN0aW9uX2FuZF9pcnFfZW5hYmxlKHN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkKVxubmV0L2NvcmUvZGV2LmMtNjY5My17XG5uZXQvY29yZS9kZXYuYzo2Njk0OiNpZmRlZiBDT05GSUdfUlBTXG5uZXQvY29yZS9kZXYuYy02Njk1LVx0c3RydWN0IHNvZnRuZXRfZGF0YSAqcmVtc2QgPSBzZC1cdTAwM2VycHNfaXBpX2xpc3Q7XG4tLVxubmV0L2NvcmUvZGV2LmM9NjcwOT1zdGF0aWMgYm9vbCBzZF9oYXNfcnBzX2lwaV93YWl0aW5nKHN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkKVxubmV0L2NvcmUvZGV2LmMtNjcxMC17XG5uZXQvY29yZS9kZXYuYzo2NzExOiNpZmRlZiBDT05GSUdfUlBTXG5uZXQvY29yZS9kZXYuYy02NzEyLVx0cmV0dXJuICF1c2VfYmFja2xvZ190aHJlYWRzKCkgXHUwMDI2XHUwMDI2IHNkLVx1MDAzZXJwc19pcGlfbGlzdDtcbi0tXG5uZXQvY29yZS9kZXYuYz0xMjc4Mz1zdGF0aWMgaW50IGRldl9jcHVfZGVhZCh1bnNpZ25lZCBpbnQgb2xkY3B1KVxuLS1cbm5ldC9jb3JlL2Rldi5jLTEyODI5LVx0aWYgKCF1c2VfYmFja2xvZ190aHJlYWRzKCkpIHtcbm5ldC9jb3JlL2Rldi5jOjEyODMwOiNpZmRlZiBDT05GSUdfUlBTXG5uZXQvY29yZS9kZXYuYy0xMjgzMS1cdFx0cmVtc2QgPSBvbGRzZC1cdTAwM2VycHNfaXBpX2xpc3Q7XG4tLVxubmV0L2NvcmUvZGV2LmM9MTMzMDQ9c3RhdGljIGludCBfX2luaXQgbmV0X2Rldl9pbml0KHZvaWQpXG4tLVxubmV0L2NvcmUvZGV2LmMtMTMzNDEtXHRcdHNkLVx1MDAzZW91dHB1dF9xdWV1ZV90YWlscCA9IFx1MDAyNnNkLVx1MDAzZW91dHB1dF9xdWV1ZTtcbm5ldC9jb3JlL2Rldi5jOjEzMzQyOiNpZmRlZiBDT05GSUdfUlBTXG5uZXQvY29yZS9kZXYuYy0xMzM0My1cdFx0SU5JVF9DU0QoXHUwMDI2c2QtXHUwMDNlY3NkLCBycHNfdHJpZ2dlcl9zb2Z0aXJxLCBzZCk7XG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9OTUzPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzZnNfb3BzIHJ4X3F1ZXVlX3N5c2ZzX29wcyA9IHtcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy05NTctXG5uZXQvY29yZS9uZXQtc3lzZnMuYzo5NTg6I2lmZGVmIENPTkZJR19SUFNcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTk1OS1zdGF0aWMgc3NpemVfdCBzaG93X3Jwc19tYXAoc3RydWN0IG5ldGRldl9yeF9xdWV1ZSAqcXVldWUsIGNoYXIgKmJ1Zilcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0xMTMzPXN0YXRpYyBzdHJ1Y3QgcnhfcXVldWVfYXR0cmlidXRlIHJwc19kZXZfZmxvd190YWJsZV9jbnRfYXR0cmlidXRlIF9fcm9fYWZ0ZXJfaW5pdFxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTExMzUtXHRcdCBzaG93X3Jwc19kZXZfZmxvd190YWJsZV9jbnQsIHN0b3JlX3Jwc19kZXZfZmxvd190YWJsZV9jbnQpO1xubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTEzNjojZW5kaWYgLyogQ09ORklHX1JQUyAqL1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTEzNy1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTExMzg9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnJ4X3F1ZXVlX2RlZmF1bHRfYXR0cnNbXSBfX3JvX2FmdGVyX2luaXQgPSB7XG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMTM5OiNpZmRlZiBDT05GSUdfUlBTXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMTQwLVx0XHUwMDI2cnBzX2NwdXNfYXR0cmlidXRlLmF0dHIsXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTE0Nz1zdGF0aWMgdm9pZCByeF9xdWV1ZV9yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKVxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTExNDktXHRzdHJ1Y3QgbmV0ZGV2X3J4X3F1ZXVlICpxdWV1ZSA9IHRvX3J4X3F1ZXVlKGtvYmopO1xubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTE1MDojaWZkZWYgQ09ORklHX1JQU1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTE1MS1cdHJwc190YWdfcHRyIHRhZ19wdHI7XG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTE5Nj1zdGF0aWMgaW50IHJ4X3F1ZXVlX2RlZmF1bHRfbWFzayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTExOTgte1xubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTE5OTojaWYgSVNfRU5BQkxFRChDT05GSUdfUlBTKSBcdTAwMjZcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfU1lTQ1RMKVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTIwMC1cdHN0cnVjdCBjcHVtYXNrICpycHNfZGVmYXVsdF9tYXNrO1xuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTEyOTY9bmV0X3J4X3F1ZXVlX3VwZGF0ZV9rb2JqZWN0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgb2xkX251bSwgaW50IG5ld19udW0pXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTMwMS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jOjEzMDI6I2lmbmRlZiBDT05GSUdfUlBTXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMzAzLVx0aWYgKCFkZXYtXHUwMDNlc3lzZnNfcnhfcXVldWVfZ3JvdXApXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTMzMj1zdGF0aWMgaW50IG5ldF9yeF9xdWV1ZV9jaGFuZ2Vfb3duZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG51bSxcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMzM4LVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTMzOTojaWZuZGVmIENPTkZJR19SUFNcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzNDAtXHRpZiAoIWRldi1cdTAwM2VzeXNmc19yeF9xdWV1ZV9ncm91cClcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0yMDU3PXN0YXRpYyBpbnQgcnRubF9maWxsX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTIxMjUtXHRcdFx0IFJFQURfT05DRShkZXYtXHUwMDNlbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24pKSB8fFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjEyNjojaWZkZWYgQ09ORklHX1JQU1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjEyNy1cdCAgICBubGFfcHV0X3UzMihza2IsIElGTEFfTlVNX1JYX1FVRVVFUyxcbi0tXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYz01ND1FWFBPUlRfU1lNQk9MKHN5c2N0bF9kZXZjb25mX2luaGVyaXRfaW5pdF9uZXQpO1xubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtNTUtXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYzo1NjojaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0ZMT1dfTElNSVQpIHx8IElTX0VOQUJMRUQoQ09ORklHX1JQUylcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTU3LXN0YXRpYyBpbnQgZHVtcF9jcHVtYXNrKHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MsXG4tLVxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtOTgtXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYzo5OTojaWZkZWYgQ09ORklHX1JQU1xubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtMTAwLVxuLS1cbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jPTIxND1zdGF0aWMgaW50IHJwc19mZWF0X2xsY19hZmZpbml0eV9zeXNjdGwoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbi0tXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy0yMzktXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYzoyNDA6I2VuZGlmIC8qIENPTkZJR19SUFMgKi9cbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTI0MS1cbi0tXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYz00NTc9c3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmV0X2NvcmVfdGFibGVbXSA9IHtcbi0tXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy01NzYtXHR9LFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6NTc3OiNpZmRlZiBDT05GSUdfUlBTXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy01NzgtXHR7XG4tLVxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM9NzE2PXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5ldG5zX2NvcmVfdGFibGVbXSA9IHtcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jOjcxNzojaWYgSVNfRU5BQkxFRChDT05GSUdfUlBTKVxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtNzE4LVx0e1xuLS1cbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jPTg2MD1zdGF0aWMgX19uZXRfZXhpdCB2b2lkIHN5c2N0bF9jb3JlX25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy04NjYtXHRCVUdfT04odGJsID09IG5ldG5zX2NvcmVfdGFibGUpO1xubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6ODY3OiNpZiBJU19FTkFCTEVEKENPTkZJR19SUFMpXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy04NjgtXHRrZnJlZShuZXQtXHUwMDNlY29yZS5ycHNfZGVmYXVsdF9tYXNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzQ3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byB0aGUgQ09ORklHX1JQUyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRoZSBjb2RlIEkmIzM5O20gbG9va2luZyBhdCBoaW5nZXMgb24gYENPTkZJR19SUFNgLiBJbW1lZGlhdGVseSwgbXkgYnJhaW4gZmxhZ3MgaXQgYXMgYSBjb25maWd1cmF0aW9uIHZhcmlhYmxlLCBhbmQgYSBib29sZWFuIG9uZSBhdCB0aGF0LiBUaW1lIHRvIGNvbmZpcm0gdGhhdCBhc3N1bXB0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBrbm93IHdoYXQgYENPTkZJR19SUFNgICphY3R1YWxseSogY29udHJvbHMuIFRpbWUgdG8gZ28gY2hlY2sgaXRzIGRlZmluaXRpb24gaW4gdGhlIHJlbGV2YW50IGNvbmZpZyBmaWxlcyBvciBkb2N1bWVudGF0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAzOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBSUFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0yOTQ9Y29uZmlnIE1BWF9TS0JfRlJBR1Ncbi0tXG5uZXQvS2NvbmZpZy0zMDUtXG5uZXQvS2NvbmZpZzozMDY6Y29uZmlnIFJQU1xubmV0L0tjb25maWctMzA3LVx0Ym9vbCBcJiMzNDtSZWNlaXZlIHBhY2tldCBzdGVlcmluZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAzOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5OTcKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBgQ09ORklHX1JQU2AqKgoKT2theSwgc28gSSBzZWUgYENPTkZJR19SUFNgIGlzIGRlZmluZWQgd2l0aGluIGBuZXQvS2NvbmZpZ2AuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2hlcmUgdG8gc3RhcnQgZGlnZ2luZyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gTm93LCBteSBuZXh0IG1vdmUgaXMgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIG9yIGZlYXR1cmVzIGFyZSByZXF1aXJlZCBvciBhZmZlY3RlZCBieSBgQ09ORklHX1JQU2AuIEtub3dpbmcgaXRzIGRlcGVuZGVuY2llcyB3aWxsIGhlbHAgbWUgZnVsbHkgZ3Jhc3AgaXRzIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBpbXBhY3Qgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBJdCYjMzk7cyB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaW4gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZyBvcHRpb24gZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUlBTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0yOTQ9Y29uZmlnIE1BWF9TS0JfRlJBR1Ncbi0tXG5uZXQvS2NvbmZpZy0zMDUtXG5uZXQvS2NvbmZpZzozMDY6Y29uZmlnIFJQU1xubmV0L0tjb25maWctMzA3LVx0Ym9vbCBcJiMzNDtSZWNlaXZlIHBhY2tldCBzdGVlcmluZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAzOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyNDUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2UsIGlzIHRvIHplcm8gaW4gb24gdGhlIGBuZXQvS2NvbmZpZ2AgZmlsZS4gSXQmIzM5O3MgdGhlIGNlbnRyYWwgaHViIGZvciBuZXR3b3JrLXJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBbmQsIGdpdmVuIHRoYXQgSSBhbSBpbiB0aGUgd2VlZHMsIEkgbmVlZCB0byBnZXQgdG8gdGhlIHJlbGV2YW50IHNlY3Rpb24gcXVpY2tseS4gSSBhbSBwcmV0dHkgc3VyZSBsaW5lIDMwNiB3aWxsIGdldCBtZSB3aGVyZSBJIG5lZWQgdG8gYmUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiBzdG9yZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMDA6XHRcdCAgVGhpcyBoZWxwcyBCSUcgVENQIHdvcmtsb2FkcywgYnV0IG1pZ2h0IGV4cG9zZSBidWdzIGluIHNvbWVcbiAzMDE6XHRcdCAgbGVnYWN5IGRyaXZlcnMuXG4gMzAyOlx0XHQgIFRoaXMgYWxzbyBpbmNyZWFzZXMgbWVtb3J5IG92ZXJoZWFkIG9mIHNtYWxsIHBhY2tldHMsXG4gMzAzOlx0XHQgIGFuZCBpbiBkcml2ZXJzIHVzaW5nIGJ1aWxkX3NrYigpLlxuIDMwNDpcdFx0ICBJZiB1bnN1cmUsIHNheSAxNy5cbiAzMDU6XHRcbiAzMDY6XHRjb25maWcgUlBTXG4gMzA3Olx0XHRib29sIFwmIzM0O1JlY2VpdmUgcGFja2V0IHN0ZWVyaW5nXCYjMzQ7XG4gMzA4Olx0XHRkZXBlbmRzIG9uIFNNUCBcdTAwMjZcdTAwMjYgU1lTRlNcbiAzMDk6XHRcdGRlZmF1bHQgeVxuIDMxMDpcdFx0aGVscFxuIDMxMTpcdFx0ICBTb2Z0d2FyZSByZWNlaXZlIHNpZGUgcGFja2V0IHN0ZWVyaW5nIChSUFMpIGRpc3RyaWJ1dGVzIHRoZVxuIDMxMjpcdFx0ICBsb2FkIG9mIHJlY2VpdmVkIHBhY2tldCBwcm9jZXNzaW5nIGFjcm9zcyBtdWx0aXBsZSBDUFVzLlxuIDMxMzpcdFxuIDMxNDpcdGNvbmZpZyBSRlNfQUNDRUxcbiAzMTU6XHRcdGJvb2wgXCYjMzQ7SGFyZHdhcmUgYWNjZWxlcmF0aW9uIG9mIFJGU1wmIzM0O1xuIDMxNjpcdFx0ZGVwZW5kcyBvbiBSUFNcbiAzMTc6XHRcdHNlbGVjdCBDUFVfUk1BUFxuIDMxODpcdFx0ZGVmYXVsdCB5XG4gMzE5Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAzOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2ODYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSUFMgRmxvdyBDb250cm9sIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIGBDT05GSUdfUlBTYCBpcyBzZXQgdG8gJiMzOTt5JiMzOTsgYnkgZGVmYXVsdCwgYW5kIGl0IHJlbGllcyBvbiBib3RoIGBTTVBgIGFuZCBgU1lTRlNgLCB3aGljaCBtYWtlcyBpdCB2ZXJ5IGxpa2VseSB0byBiZSBlbmFibGVkIGluIGEgc3RhbmRhcmQgY29uZmlndXJhdGlvbi4gVGhpcyBwYXRjaCBzZWVtcyByZWxhdGVkLCBidXQgaXQgYWxzbyBtZW50aW9ucyBgQ09ORklHX1JGU19BQ0NFTGAuIFdhaXQsIHRoYXTigJlzIG5vdCBxdWl0ZSByaWdodC4gYHJwc19sbGNfY2hlY2tgIGlzbiYjMzk7dCBndWFyZGVkIGJ5IGBDT05GSUdfUkZTX0FDQ0VMYCDigJMgdGhhdCYjMzk7cyBhIGtleSBkZXRhaWwgdG8gbm90ZS4gTm93LCB0aGUgbW9yZSBpbXBvcnRhbnQgcGllY2VzLi4uIGBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoYCBhbmQgYHNvY2tfcnBzX3JlY29yZF9mbG93YCBoYXZlIGJlZW4gcHVsbGVkIG91dCBvZiB0aGUgaW5saW5lIGFuZCBtb3ZlZCBpbnRvIGBuZXQvY29yZS9kZXYuY2AuIENydWNpYWxseSwgdGhleSYjMzk7cmUgZXhwb3J0ZWQgc3ltYm9scyBub3cuCgpMZXQmIzM5O3MgdHJhY2UgdGhpcyBsb2dpYy4gVGhlIGBycHNfbGxjX2NoZWNrYCBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgZnJvbSBgcnBzX3JlY29yZF9zb2NrX2Zsb3dgLCB3aGljaCwgaW50ZXJlc3RpbmdseSwgcmVzaWRlcyBpbiBgaW5jbHVkZS9uZXQvcnBzLmhgLiBUaGF0IG1ha2VzIGBycHNfcmVjb3JkX3NvY2tfZmxvd2AgYW4gaW5saW5lIGZ1bmN0aW9uLiBBbmQsIHNpbmNlIGl04oCZcyBpbmxpbmUsIGxldCYjMzk7cyBzZWUgd2hlcmUgaXQgZ2V0cyBjYWxsZWQuIEZyb20gbXkgZ2xhbmNlIGF0IHRoZSBpbmNsdWRlIGZpbGVzLCBpdCBpcyBiZWluZyBjYWxsZWQgZnJvbSBgX3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2hgIGFuZCBgX3NvY2tfcnBzX3JlY29yZF9mbG93YCwgd2hpY2ggYXJlIGFsc28gZGVmaW5lZCBpbiBgaW5jbHVkZS9uZXQvcnBzLmhgLiBUaGF0IG1lYW5zIEkgc2hvdWxkIHJlYWxseSBkaWcgaW50byB0aGF0IGhlYWRlciBmaWxlIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAzOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Jwc19yZWNvcmRfc29ja19mbG93JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvcnBzLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvcnBzLmg9NTk9Ym9vbCBycHNfbGxjX2NoZWNrKHUzMiBvbGRfdmFsLCB1MzIgbmV3X3ZhbCk7XG5pbmNsdWRlL25ldC9ycHMuaC02MC1cbmluY2x1ZGUvbmV0L3Jwcy5oOjYxOnN0YXRpYyBpbmxpbmUgdm9pZCBycHNfcmVjb3JkX3NvY2tfZmxvdyhycHNfdGFnX3B0ciB0YWdfcHRyLCB1MzIgaGFzaClcbmluY2x1ZGUvbmV0L3Jwcy5oLTYyLXtcbi0tXG5pbmNsdWRlL25ldC9ycHMuaD04MD1zdGF0aWMgaW5saW5lIHZvaWQgX3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goX191MzIgaGFzaClcbi0tXG5pbmNsdWRlL25ldC9ycHMuaC04OC1cdGlmICh0YWdfcHRyKVxuaW5jbHVkZS9uZXQvcnBzLmg6ODk6XHRcdHJwc19yZWNvcmRfc29ja19mbG93KHRhZ19wdHIsIGhhc2gpO1xuaW5jbHVkZS9uZXQvcnBzLmgtOTAtXHRyY3VfcmVhZF91bmxvY2soKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDM6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NjUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gYF9zb2NrX3Jwc19yZWNvcmRfZmxvd2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhpcyBgX3NvY2tfcnBzX3JlY29yZF9mbG93YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgZXhhY3RseSBpdCYjMzk7cyBkb2luZy4gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgaXQmIzM5O3MgaW50ZXJhY3Rpbmcgd2l0aD8gSXMgaXQgdXBkYXRpbmcgYW55IHBlci1zb2NrZXQgc3RhdHM/IEkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBvdmVyYWxsIFJQUyAoUmVjZWl2ZSBQYWNrZXQgU3RlZXJpbmcpIGltcGxlbWVudGF0aW9uLiBJcyBpdCByZWNvcmRpbmcgZmxvd3MgZm9yIHRoZSBnaXZlbiBzb2NrZXQ/IElzIGl0IHNldHRpbmcgdXAgcm91dGVzIGJhc2VkIG9uIHRob3NlIGZsb3dzPyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIFNwZWNpZmljYWxseSwgaG93IGRvZXMgdGhpcyBmdW5jdGlvbiByZWxhdGUgdG8gdGhlIGRlY2lzaW9uIHByb2Nlc3MgYXJvdW5kIHdoaWNoIENQVSBhIHBhY2tldCBpcyBhc3NpZ25lZCB0bz8gSXMgaXQgYSBrZXkgY29tcG9uZW50IG9mIHRoZSBoYXNoaW5nIGFuZCByZWRpcmVjdGlvbiBsb2dpYywgb3IgaXMgaXQgbWVyZWx5IHJlY29yZGluZyB0cmFmZmljIGZvciBvdGhlciBwdXJwb3NlcyBsaWtlIG1vbml0b3Jpbmcgb3IgbG9hZCBiYWxhbmNpbmc/IExldCBtZSBydW4gdGhyb3VnaCB0aGUgY29kZSBpbiBteSBoZWFkIGFuZCB2ZXJpZnkgaG93IHRoZSBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgb3RoZXIgbW9kdWxlcyBpbiB0aGUga2VybmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfc29ja19ycHNfcmVjb3JkX2Zsb3cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9ycHMuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9ycHMuaD02MT1zdGF0aWMgaW5saW5lIHZvaWQgcnBzX3JlY29yZF9zb2NrX2Zsb3cocnBzX3RhZ19wdHIgdGFnX3B0ciwgdTMyIGhhc2gpXG4tLVxuaW5jbHVkZS9uZXQvcnBzLmgtNzktXG5pbmNsdWRlL25ldC9ycHMuaDo4MDpzdGF0aWMgaW5saW5lIHZvaWQgX3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goX191MzIgaGFzaClcbmluY2x1ZGUvbmV0L3Jwcy5oLTgxLXtcbi0tXG5pbmNsdWRlL25ldC9ycHMuaC05Mi1cbmluY2x1ZGUvbmV0L3Jwcy5oOjkzOnN0YXRpYyBpbmxpbmUgdm9pZCBfc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuaW5jbHVkZS9uZXQvcnBzLmgtOTQte1xuLS1cbmluY2x1ZGUvbmV0L3Jwcy5oLTEwOC1cdFx0ICovXG5pbmNsdWRlL25ldC9ycHMuaDoxMDk6XHRcdF9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKFJFQURfT05DRShzay1cdTAwM2Vza19yeGhhc2gpKTtcbmluY2x1ZGUvbmV0L3Jwcy5oLTExMC1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDM6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5NTgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGl0OgoKKipBbmFseXppbmcgTmV0d29yayBTdGFjayBGbG93IFJlY29yZGluZyoqCgpBbHJpZ2h0LCBzbyBJIHNlZSBgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaGAgYW5kIGBzb2NrX3Jwc19yZWNvcmRfZmxvd2AuIFRob3NlIGFyZSB0aGUgbWFpbiBlbnRyeSBwb2ludHMsIHRoZSBob29rcyBpbnRvIHRoZSBzeXN0ZW0uIFRoZXkmIzM5O3JlIGNsZWFybHkgaW50ZW5kZWQgdG8gcmVjb3JkIHNvbWV0aGluZyBhYm91dCBuZXR3b3JrIGZsb3dzLCBsaWtlbHkgZm9yIGxvYWQgYmFsYW5jaW5nIG9yIHRyYWZmaWMgc2hhcGluZywgYmFzZWQgb24gdGhlaXIgbmFtZXMuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMgKndoZXJlKiB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5ICp1c2VkKiB3aXRoaW4gdGhlIG5ldHdvcmsgc3RhY2suIFRoYXQmIzM5O3MgdGhlIGNyaXRpY2FsIGluZm9ybWF0aW9uLiBMZXQmIzM5O3MgdHJhY2UgYmFjayB0aGUgY2FsbHMgdG8gYHNvY2tfcnBzX3JlY29yZF9mbG93YC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzaXRlcyB3aWxsIHJldmVhbCB0aGUgY29udGV4dCBhbmQgcHVycG9zZSBvZiB0aGlzIGZsb3cgcmVjb3JkaW5nLiBJJiMzOTtsbCBuZWVkIHRvIHBpbnBvaW50IGFsbCB0aGUgcGxhY2VzIHdpdGhpbiB0aGUgY29kZSB3aGVyZSBgc29ja19ycHNfcmVjb3JkX2Zsb3dgIGlzIGludm9rZWQuIEtub3dpbmcgdGhlIGNhbGxpbmcgZnVuY3Rpb25zIGFuZCB0aGVpciByb2xlcyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDM6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c29ja19ycHNfcmVjb3JkX2Zsb3cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jPTUzMDY9c3RhdGljIHZvaWQgcnBzX3RyaWdnZXJfc29mdGlycSh2b2lkICpkYXRhKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTUzMTYtXG5uZXQvY29yZS9kZXYuYzo1MzE3OnZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKVxubmV0L2NvcmUvZGV2LmMtNTMxOC17XG4tLVxubmV0L2NvcmUvZGV2LmMtNTMyMi1cbm5ldC9jb3JlL2Rldi5jOjUzMjM6XHRfc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChoYXNoKTtcbm5ldC9jb3JlL2Rldi5jLTUzMjQtI2VuZGlmXG5uZXQvY29yZS9kZXYuYy01MzI1LX1cbm5ldC9jb3JlL2Rldi5jOjUzMjY6RVhQT1JUX1NZTUJPTChzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKTtcbm5ldC9jb3JlL2Rldi5jLTUzMjctXG5uZXQvY29yZS9kZXYuYzo1MzI4OnZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvZGV2LmMtNTMyOS17XG4tLVxubmV0L2NvcmUvZGV2LmMtNTMzMy1cbm5ldC9jb3JlL2Rldi5jOjUzMzQ6XHRfc29ja19ycHNfcmVjb3JkX2Zsb3coc2spO1xubmV0L2NvcmUvZGV2LmMtNTMzNS0jZW5kaWZcbm5ldC9jb3JlL2Rldi5jLTUzMzYtfVxubmV0L2NvcmUvZGV2LmM6NTMzNzpFWFBPUlRfU1lNQk9MKHNvY2tfcnBzX3JlY29yZF9mbG93KTtcbm5ldC9jb3JlL2Rldi5jLTUzMzgtXG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jPTc2MT12b2lkIF9faW5ldF9hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jaywgc3RydWN0IHNvY2sgKm5ld3NrKVxuLS1cbm5ldC9pcHY0L2FmX2luZXQuYy03NjctXG5uZXQvaXB2NC9hZl9pbmV0LmM6NzY4Olx0c29ja19ycHNfcmVjb3JkX2Zsb3cobmV3c2spO1xubmV0L2lwdjQvYWZfaW5ldC5jLTc2OS1cdFdBUk5fT04oISgoMSBcdTAwM2NcdTAwM2MgbmV3c2stXHUwMDNlc2tfc3RhdGUpIFx1MDAyNlxuLS1cbm5ldC9pcHY0L2FmX2luZXQuYz04NDQ9aW50IGluZXRfc2VuZF9wcmVwYXJlKHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L2FmX2luZXQuYy04NDUte1xubmV0L2lwdjQvYWZfaW5ldC5jOjg0NjpcdHNvY2tfcnBzX3JlY29yZF9mbG93KHNrKTtcbm5ldC9pcHY0L2FmX2luZXQuYy04NDctXG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jPTg4Nj1pbnQgaW5ldF9yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUsXG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jLTg5Mi1cdGlmIChsaWtlbHkoIShmbGFncyBcdTAwMjYgTVNHX0VSUlFVRVVFKSkpXG5uZXQvaXB2NC9hZl9pbmV0LmM6ODkzOlx0XHRzb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XG5uZXQvaXB2NC9hZl9pbmV0LmMtODk0LVxuLS1cbm5ldC9pcHY0L3RjcC5jPTgxMj1zc2l6ZV90IHRjcF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb2ZmX3QgKnBwb3MsXG4tLVxubmV0L2lwdjQvdGNwLmMtODI1LVxubmV0L2lwdjQvdGNwLmM6ODI2Olx0c29ja19ycHNfcmVjb3JkX2Zsb3coc2spO1xubmV0L2lwdjQvdGNwLmMtODI3LVx0Lypcbi0tXG5uZXQvaXB2NC90Y3AuYz0yMTk2PXN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3JlY2VpdmUoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTIyMjMtXG5uZXQvaXB2NC90Y3AuYzoyMjI0Olx0c29ja19ycHNfcmVjb3JkX2Zsb3coc2spO1xubmV0L2lwdjQvdGNwLmMtMjIyNS1cbi0tXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jPTY0Nj1pbnQgaW5ldDZfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplLFxuLS1cbm5ldC9pcHY2L2FmX2luZXQ2LmMtNjUyLVx0aWYgKGxpa2VseSghKGZsYWdzIFx1MDAyNiBNU0dfRVJSUVVFVUUpKSlcbm5ldC9pcHY2L2FmX2luZXQ2LmM6NjUzOlx0XHRzb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTY1NC1cbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0xODk4PXN0YXRpYyB2b2lkIG1wdGNwX3Jwc19yZWNvcmRfc3ViZmxvd3MoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xOTA3LVxubmV0L21wdGNwL3Byb3RvY29sLmM6MTkwODpcdFx0c29ja19ycHNfcmVjb3JkX2Zsb3coc3NrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE5MDktXHR9XG4tLVxubmV0L3NjdHAvc29ja2V0LmM9ODY5Nj1fX3BvbGxfdCBzY3RwX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHBvbGxfdGFibGUgKndhaXQpXG4tLVxubmV0L3NjdHAvc29ja2V0LmMtODcwMy1cbm5ldC9zY3RwL3NvY2tldC5jOjg3MDQ6XHRzb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XG5uZXQvc2N0cC9zb2NrZXQuYy04NzA1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ0NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWNoIGFuZCBDb25maWd1cmF0aW9uIG9mIGBzb2NrX3Jwc19yZWNvcmRfZmxvd2AgYW5kIExMQyBBZmZpbml0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBzb2NrX3Jwc19yZWNvcmRfZmxvd2AgZnVuY3Rpb24gYW5kIGl0JiMzOTtzIGxvb2tpbmcgcHJldHR5IHZlcnNhdGlsZS4gSXQmIzM5O3MgY2FsbGVkIGluIGEgZ29vZCByYW5nZSBvZiBjcml0aWNhbCBuZXR3b3JraW5nIHBhdGhzOiBgaW5ldF9yZWN2bXNnYCwgYGluZXRfc2VuZF9wcmVwYXJlYCwgdGhlIGFjY2VwdCByb3V0aW5lcywgc3BsaWNlIGFuZCB6ZXJvLWNvcHksIGFuZCBldmVuIGBtcHRjcF9ycHNfcmVjb3JkX3N1YmZsb3dzYCBhbmQgU0NUUC4gVGhhdCBzY3JlYW1zICYjMzQ7YWN0aXZlIGFuZCB1dGlsaXplZCYjMzQ7IHRvIG1lLgoKVGhlIGZlYXR1cmUgaXRzZWxmLCBMTEMgYWZmaW5pdHksIGlzIGdhdGVkIGJ5IHRoZSBgbmV0LmNvcmUucnBzX2ZlYXRfbGxjX2FmZmluaXR5YCBzeXNjdGwsIHdoaWNoIGlzIGltcG9ydGFudCB0byByZW1lbWJlci4gQWgsIHdhaXQsIHRoaXMgaXMgYSBzdGF0aWMga2V5ICptb2RpZmllZCogYnkgYSBzeXNjdGwuIFRoYXQmIzM5O3MgYSBrZXkgZGV0YWlsOyBpdCBnaXZlcyB1cyBydW50aW1lIGNvbnRyb2wuIE5vdywgd2hhdCBkZXBlbmRlbmNpZXMgZG8gd2UgaGF2ZSB0byB3b3JyeSBhYm91dD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgY29uZmlncy4KClllcCwgYENPTkZJR19SUFNgIGlzIGVzc2VudGlhbCwgYW5kIHRoYXQgZGVwZW5kcyBvbiBgU01QYCBhbmQgYFNZU0ZTYC4gR29vZCwgZ29vZC4gV2UgYWxzbyBuZWVkIGBDT05GSUdfU1lTQ1RMYCBmb3IgdGhlIHN5c2N0bCBpbnRlcmZhY2UsIG9mIGNvdXJzZS4gSSYjMzk7bGwgdGFrZSBhIHF1aWNrIGxvb2sgaW4gYG5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jYCDigJMgeWVwLCB0aGUgc3lzY3RsIGlzIHVuZGVyIGFuIGAjaWZkZWYgQ09ORklHX1JQU2AuIFNvLCB3ZSYjMzk7cmUgZ29vZCB0aGVyZS4KClRoZSBjb3JlIGxvZ2ljIHNlZW1zIHRvIGJlIHdpdGhpbiB0aGUgYHJwc19sbGNfY2hlY2tgIGZ1bmN0aW9uLiBJdCB0YWtlcyBib3RoIG9sZCBhbmQgbmV3IHZhbHVlcy4gSXQgZmlyc3QgY2hlY2tzIGBzdGF0aWNfYnJhbmNoX3VubGlrZWx5KCZhbXA7cnBzX2ZlYXRfbGxjX2FmZmluaXR5KWAuIElmIExMQyBhZmZpbml0eSBpcyBlbmFibGVkLCBpdCB0aGVuIGRvZXMgc29tZSBjaGVja3M6IG1ha2luZyBzdXJlIHRoZSBvbGQgQ1BVIElEIGlzIHZhbGlkLCBhbmQgdGhlIG9sZCBDUFUgaXMgbm90IGFjdGl2ZS4gRnVydGhlciwgaXQgbWFrZXMgc3VyZSB0aGUgb2xkIENQVSBpc24mIzM5O3QgaW4gdGhlIGN1cnJlbnQgQ1BVJiMzOTtzIENQVSBtYXNrIGFuZCBpdCB0aGVuIGNoZWNrcyBpZiB0aGUgb2xkIENQVSBhbmQgdGhlIG5ldyBDUFUgc2hhcmUgYSBjYWNoZS4KCkl0IGxvb2tzIGxpa2UgdGhlIGBycHNfbGxjX2NoZWNrYCBmdW5jdGlvbiBpcyB0aGUgbWFpbiBhZGRpdGlvbiBoZXJlLiBgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaGAgYW5kIGBzb2NrX3Jwc19yZWNvcmRfZmxvd2AgYXJlIG5vbi1pbmxpbmVkIGFuZCBleHBvcnRlZCwgd2hpY2ggaXMgZ29vZCBmb3IgdHJhY2luZyBhbmQgZHluYW1pYyBhbmFseXNpcy4gQW5kIG9mIGNvdXJzZSwgdGhlIHN5c2N0bCBoYW5kbGVyIGlzIGBycHNfZmVhdF9sbGNfYWZmaW5pdHlfc3lzY3RsYC4gSXQgc2VlbXMgdGhlIGZvY3VzIGlzIHRoZSBuZXcgZnVuY3Rpb24sIGBycHNfbGxjX2NoZWNrYCwgd2hpY2ggaGFzIHNvbWUgc3BlY2lmaWMgY29uZGl0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY29kZSBpbiBgbmV0L2NvcmUvZGV2LmNgIG1vcmUgY2xvc2VseSBmb3IgYW55IG90aGVyIG51YW5jZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAzOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Jwc19sbGNfY2hlY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz01MTEwPXN0YXRpYyBpbnQgZ2V0X3Jwc19jcHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9kZXYuYy01MjEzLS8qKlxubmV0L2NvcmUvZGV2LmM6NTIxNDogKiBycHNfbGxjX2NoZWNrIC0gZGV0ZXJtaW5lIGlmIFJQUyBmbG93IHRhYmxlIHNob3VsZCBiZSB1cGRhdGVkLlxubmV0L2NvcmUvZGV2LmMtNTIxNS0gKiBAb2xkX3ZhbDogcHJldmlvdXMgZmxvdyByZWNvcmQgdmFsdWUuXG4tLVxubmV0L2NvcmUvZGV2LmMtNTIxOS0gKi9cbm5ldC9jb3JlL2Rldi5jOjUyMjA6Ym9vbCBycHNfbGxjX2NoZWNrKHUzMiBvbGRfdmFsLCB1MzIgbmV3X3ZhbClcbm5ldC9jb3JlL2Rldi5jLTUyMjEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzY1NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJQUyBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBuZXcgUlBTIGltcGxlbWVudGF0aW9uLiBUaGUga2V5IGZ1bmN0aW9ucyBzZWVtIHRvIGJlIGBycHNfbGxjX2NoZWNrYCwgd2hpY2ggaXMgdGhlIGNvcmUgbG9naWMsIGFuZCBgcnBzX2ZlYXRfbGxjX2FmZmluaXR5X3N5c2N0bGAsIHdoaWNoIGhhbmRsZXMgdGhlIHN5c2N0bCBpbnRlcmZhY2UuIEkgYWxzbyBzZWUgdGhhdCBgc29ja19ycHNfcmVjb3JkX2Zsb3dgIGFuZCBgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaGAgYXJlIHVuLWlubGluZWQuCgpGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgYENPTkZJR19SUFNgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gQWgsIHllcywgaXQmIzM5O3MgYGRlZmF1bHQgeWAgaW4gYG5ldC9LY29uZmlnYCwgZ29vZC4gTm93LCB3aGVyZSBpcyB0aGUgc3lzY3RsIGRlZmluZWQ/IFJpZ2h0LCBpdCYjMzk7cyBpbiBgbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmNgLiAgSSBzaG91bGQgY2hlY2sgd2hldGhlciBgQ09ORklHX1NZU0NUTGAgaXMgYWxzbyBhIHJlcXVpcmVtZW50LiBZZXMsIGl0IGxvb2tzIGxpa2UgaXQgaXMuIEJ1dCwgZm9yIHRoZSBjb3JlIFJQUyBsb2dpYyBpdHNlbGYsIGBDT05GSUdfUlBTYCBzaG91bGQgYmUgc3VmZmljaWVudC4KCkhhbmcgb24uLi4gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNhbGxlcnMgb2YgYHJwc19sbGNfY2hlY2tgLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBycHNfcmVjb3JkX3NvY2tfZmxvd2AsIHdoaWNoIGlzIGRlZmluZWQgaW4gYGluY2x1ZGUvbmV0L3Jwcy5oYC4gVGhhdCBtYWtlcyBzZW5zZS4gYHJwc19yZWNvcmRfc29ja19mbG93YCBpcyBpbiB0dXJuIGNhbGxlZCBieSBgX3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2hgIGFuZCBgX3NvY2tfcnBzX3JlY29yZF9mbG93YCwgd2hpY2ggYXJlIHRoZW4gdXNlZCBieSBgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaGAgYW5kIGBzb2NrX3Jwc19yZWNvcmRfZmxvd2AuIFNvLCByZWFsbHksIHRoZSBtYWluIGZ1bmN0aW9uIHRvIGFuYWx5emUgaGVyZSBpcyBpbmRlZWQgYHJwc19sbGNfY2hlY2tgLCBhbG9uZyB3aXRoIHRoZSBgcnBzX2ZlYXRfbGxjX2FmZmluaXR5X3N5c2N0bGAgc3lzY3RsIGhhbmRsZXIuCgpMZXQmIzM5O3MgY2hlY2sgdGhlIHNpZ25hdHVyZSBvZiBgcnBzX2xsY19jaGVja2A6IGBib29sIHJwc19sbGNfY2hlY2sodTMyIG9sZF92YWwsIHUzMiBuZXdfdmFsKWAuIEFscmlnaHQuIE5vdywgaXMgaXQgZXhwb3J0ZWQ/IEhtbSwgbm8sIGl0IGlzbiYjMzk7dC4gQnV0LCB3YWl0Li4uIGBycHNfcmVjb3JkX3NvY2tfZmxvd2AgaXMgaW5saW5lLCBzbyBgcnBzX2xsY19jaGVja2AgbXVzdCBiZSBleHBvcnRlZCwgb3RoZXJ3aXNlIGl0IGNvdWxkbiYjMzk7dCBiZSB1c2VkIGJ5IG1vZHVsZXMgaWYgaXQgaXMgdXNlZCBpbnRlcm5hbGx5LiBPa2F5LCB0aW1lIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgZXhwb3J0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAzOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qcnBzX2xsY19jaGVjayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2MDkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSUFMgRmxvdyBSZWNvcmRpbmcgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYHJwc19yZWNvcmRfc29ja19mbG93YCBpcyBkZWZpbmVkIGlubGluZSB3aXRoaW4gYGluY2x1ZGUvbmV0L3Jwcy5oYCwgYW5kIGl0IGluIHR1cm4gY2FsbHMgYHJwc19sbGNfY2hlY2tgLiBTbywgaWYgYSBrZXJuZWwgbW9kdWxlIHdlcmUgdG8gaW5jbHVkZSB0aGF0IGhlYWRlciBhbmQgdXNlIGBycHNfcmVjb3JkX3NvY2tfZmxvd2AsIGl0ICp3b3VsZCogaGF2ZSB0byBhbHNvIGxpbmsgYWdhaW5zdCB0aGUgZGVmaW5pdGlvbiBvZiBgcnBzX2xsY19jaGVja2AuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcGVkIG91dC4KCkJ1dCBoYW5nIG9uLCB0aGVzZSBjaGFuZ2VzIGhhdmUgdW4taW5saW5lZCBgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaGAgYW5kIGBzb2NrX3Jwc19yZWNvcmRfZmxvd2AuIExldCBtZSByZS1leGFtaW5lIHRoZSBwYXRjaC4uLiBhaGEhIFRoZXkmIzM5O3JlIG5vdyAqbm90KiBpbmxpbmUhIFNvLCBtb2R1bGVzIHRoYXQgY2FsbCB0aGVzZSBmdW5jdGlvbnMgd2lsbCBiZSBjYWxsaW5nIHRoZSBub24taW5saW5lIHZlcnNpb25zIHRoYXQgYXJlIG5vdyBleHBvcnRlZCBhcyBzeW1ib2xzLiBUaGF0IG1ha2VzIHNlbnNlLiBUaGVzZSBmdW5jdGlvbnMgYXJlIG5vdyBleHBsaWNpdGx5IHBhcnQgb2YgdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhlIG1vZHVsZSBsaW5rZXIgd2lsbCByZXNvbHZlIHRoZW0gZHVyaW5nIGJ1aWxkIHRpbWUuCgpIb3dldmVyLCBgcnBzX3JlY29yZF9zb2NrX2Zsb3dgICpyZW1haW5zKiBpbmxpbmUgd2l0aGluIGBpbmNsdWRlL25ldC9ycHMuaGAuIFRoYXQmIzM5O3MgdGhlIGNyaXRpY2FsIHBvaW50IEkgbmVlZCB0byBjbGFyaWZ5LiBJcyBpdCBjYWxsZWQgZnJvbSBhbnkgb3RoZXIgbG9jYXRpb24gdGhhdCBtaWdodCBjYXVzZSBkZXBlbmRlbmN5IGlzc3Vlcz8gSSBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsIHNpdGVzIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGFjdHVhbGx5IGEgc2FmZSBjaGFuZ2UgdGhhdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2Ugc3VidGxlIGJyZWFrYWdlIGR1ZSB0byB0aGUgY2hhbmdlIGluIGlubGluaW5nLiBUaGlzIGlzIHNvbWV0aGluZyBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAzOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Jwc19yZWNvcmRfc29ja19mbG93JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3Jwcy5oPTU5PWJvb2wgcnBzX2xsY19jaGVjayh1MzIgb2xkX3ZhbCwgdTMyIG5ld192YWwpO1xuaW5jbHVkZS9uZXQvcnBzLmgtNjAtXG5pbmNsdWRlL25ldC9ycHMuaDo2MTpzdGF0aWMgaW5saW5lIHZvaWQgcnBzX3JlY29yZF9zb2NrX2Zsb3cocnBzX3RhZ19wdHIgdGFnX3B0ciwgdTMyIGhhc2gpXG5pbmNsdWRlL25ldC9ycHMuaC02Mi17XG4tLVxuaW5jbHVkZS9uZXQvcnBzLmg9ODA9c3RhdGljIGlubGluZSB2b2lkIF9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKF9fdTMyIGhhc2gpXG4tLVxuaW5jbHVkZS9uZXQvcnBzLmgtODgtXHRpZiAodGFnX3B0cilcbmluY2x1ZGUvbmV0L3Jwcy5oOjg5Olx0XHRycHNfcmVjb3JkX3NvY2tfZmxvdyh0YWdfcHRyLCBoYXNoKTtcbmluY2x1ZGUvbmV0L3Jwcy5oLTkwLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxubmV0L2NvcmUvZGV2LmM9NTExMD1zdGF0aWMgaW50IGdldF9ycHNfY3B1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvZGV2LmMtNTE1NC1cdFx0LyogRmlyc3QgY2hlY2sgaW50byBnbG9iYWwgZmxvdyB0YWJsZSBpZiB0aGVyZSBpcyBhIG1hdGNoLlxubmV0L2NvcmUvZGV2LmM6NTE1NTpcdFx0ICogVGhpcyBSRUFEX09OQ0UoKSBwYWlycyB3aXRoIFdSSVRFX09OQ0UoKSBmcm9tIHJwc19yZWNvcmRfc29ja19mbG93KCkuXG5uZXQvY29yZS9kZXYuYy01MTU2LVx0XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2MzcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJhY2luZyB0aGUgUlBTIEZsb3cgUmVjb3JkaW5nIEZ1bmN0aW9ucyoqCgpPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBycHNfcmVjb3JkX3NvY2tfZmxvd2Ag4oCTIEkgcmVtZW1iZXIgdGhhdCBmdW5jdGlvbiwgZGVhbGluZyB3aXRoIFJlY2VpdmUgUGFja2V0IFN0ZWVyaW5nLiBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIG9ubHkgY2FsbGVkIGZyb20gYF9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoYC4gQW5kIHRoYXQmIzM5O3MgYWN0dWFsbHkgaW5saW5lZCBkaXJlY3RseSBpbiBgaW5jbHVkZS9uZXQvcnBzLmhgLiBIdWgsIHRoYXQmIzM5O3MgaW50ZXJlc3Rpbmc7IGlubGluaW5nIGZvciBwZXJmb3JtYW5jZSwgSSYjMzk7ZCBndWVzcy4KCk5vdywgYF9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoYCwgd2hpY2ggSSBqdXN0IG1lbnRpb25lZCwgc2VlbXMgdG8gYmUgY2FsbGVkIGZyb20gYF9zb2NrX3Jwc19yZWNvcmRfZmxvd2AuIFRoYXQgb25lJiMzOTtzIGFsc28gaW5saW5lZCBpbiB0aGUgc2FtZSBoZWFkZXIgZmlsZS4gV2UmIzM5O3JlIGdldHRpbmcgZGVlcGVyIGludG8gdGhlIGNvcmUgbG9naWMuCgpGaW5hbGx5LCB0aGUgcmVhbCBlbnRyeSBwb2ludHMsIGBfc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaGAgYW5kIGBfc29ja19ycHNfcmVjb3JkX2Zsb3dgIGFyZSBjYWxsZWQgZnJvbSB0aGVpciBub24tdW5kZXJzY29yZWQgY291bnRlcnBhcnRzLCBgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaGAgYW5kIGBzb2NrX3Jwc19yZWNvcmRfZmxvd2AsIHdoaWNoIGFyZSBkZWZpbmVkIGluIGBuZXQvY29yZS9kZXYuY2AuIE1ha2VzIHNlbnNlLCB0aGUgZHJpdmVyIGxheWVyIGNhbGxpbmcgaW50byB0aGUgUlBTIGZyYW1ld29yay4KCkJ1dCB3YWl0LCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gQXJlIGBfc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaGAgYW5kIGBfc29ja19ycHNfcmVjb3JkX2Zsb3dgICpvbmx5KiBjYWxsZWQgZnJvbSB0aG9zZSBmdW5jdGlvbnM/IEkmIzM5O2QgYmV0dGVyIGNvbmZpcm0gdGhhdCB0aG9zZSBpbnRlcm5hbCBmdW5jdGlvbnMgYXJlIG5vdCBjYWxsZWQgZnJvbSBhbnl3aGVyZSBlbHNlLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBzbmVha3kgaW50ZXJhY3Rpb25zIEkmIzM5O20gbWlzc2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X3NvY2tfcnBzX3JlY29yZF9mbG93JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3Jwcy5oPTYxPXN0YXRpYyBpbmxpbmUgdm9pZCBycHNfcmVjb3JkX3NvY2tfZmxvdyhycHNfdGFnX3B0ciB0YWdfcHRyLCB1MzIgaGFzaClcbi0tXG5pbmNsdWRlL25ldC9ycHMuaC03OS1cbmluY2x1ZGUvbmV0L3Jwcy5oOjgwOnN0YXRpYyBpbmxpbmUgdm9pZCBfc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKVxuaW5jbHVkZS9uZXQvcnBzLmgtODEte1xuLS1cbmluY2x1ZGUvbmV0L3Jwcy5oLTkyLVxuaW5jbHVkZS9uZXQvcnBzLmg6OTM6c3RhdGljIGlubGluZSB2b2lkIF9zb2NrX3Jwc19yZWNvcmRfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG5pbmNsdWRlL25ldC9ycHMuaC05NC17XG4tLVxuaW5jbHVkZS9uZXQvcnBzLmgtMTA4LVx0XHQgKi9cbmluY2x1ZGUvbmV0L3Jwcy5oOjEwOTpcdFx0X3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3J4aGFzaCkpO1xuaW5jbHVkZS9uZXQvcnBzLmgtMTEwLVx0fVxuLS1cbm5ldC9jb3JlL2Rldi5jPTUzMTc9dm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKF9fdTMyIGhhc2gpXG4tLVxubmV0L2NvcmUvZGV2LmMtNTMyMi1cbm5ldC9jb3JlL2Rldi5jOjUzMjM6XHRfc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChoYXNoKTtcbm5ldC9jb3JlL2Rldi5jLTUzMjQtI2VuZGlmXG4tLVxubmV0L2NvcmUvZGV2LmM9NTMyOD12b2lkIHNvY2tfcnBzX3JlY29yZF9mbG93KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvY29yZS9kZXYuYy01MzMzLVxubmV0L2NvcmUvZGV2LmM6NTMzNDpcdF9zb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XG5uZXQvY29yZS9kZXYuYy01MzM1LSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjU2OQoJCQkJCQkJb3V0cHV0OiAxMjgKCQkJCQkJCXRob3VnaHRzOiAxMjU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJQUyBMTEMgQWZmaW5pdHkgQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSW5pdGlhbGx5LCBJIHdhcyBmb2N1c2luZyBvbiBob3cgYHJwc19sbGNfY2hlY2tgIGlzIGNhbGxlZCBhbmQgZGlzY292ZXJlZCBpdCYjMzk7cyBlZmZlY3RpdmVseSBvbmx5IGNhbGxlZCBmcm9tIGBuZXQvY29yZS9kZXYuY2AuIEhvd2V2ZXIsIGl0JiMzOTtzIG5vdCBleHBvcnRlZCwgYnV0IGl0JiMzOTtzIGNhbGxlZCBpbmxpbmUgZnJvbSBgcnBzX3JlY29yZF9zb2NrX2Zsb3dgIGluIGBpbmNsdWRlL25ldC9ycHMuaGAuIFRoYXQgbWVhbnMgYW55IG1vZHVsZSB0aGF0IGluY2x1ZGVzIGBycHMuaGAgKmNvdWxkKiBzZWUgaXQsIGJ1dCBubyBtb2R1bGUgKmFjdHVhbGx5KiBjYWxscyBpdCwgcHJldmVudGluZyBsaW5rZXIgZXJyb3JzLiAgQWgsIGJ1dCBgcnBzX2ZlYXRfbGxjX2FmZmluaXR5YCAqaXMqIGV4cG9ydGVkIQoKU28sIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGV4YW1pbmUgYXJlIGRlZmluaXRlbHkgYHJwc19sbGNfY2hlY2tgLCBgcnBzX2ZlYXRfbGxjX2FmZmluaXR5X3N5c2N0bGAsIGBzb2NrX3Jwc19yZWNvcmRfZmxvd2AsIGFuZCBgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaGAuIEFsdGhvdWdoIGBzb2NrX3Jwc19yZWNvcmRfZmxvd2AgYW5kIGBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoYCBhcmUganVzdCB3cmFwcGVycywgdGhlIGNvcmUgbG9naWMgcmVzaWRlcyBpbiBgcnBzX2xsY19jaGVja2AgYW5kIGBycHNfZmVhdF9sbGNfYWZmaW5pdHlfc3lzY3RsYC4gTm93LCBpcyBgcnBzX2xsY19jaGVja2AgZXZlbiAqcmVhY2hhYmxlKj8gWWVzLCBpdCYjMzk7cyByZWFjaGFibGUgaWYgYHJmc19pc19uZWVkZWQoKWAgaXMgdHJ1ZSwgd2hpY2ggY2hlY2tzIGBzdGF0aWNfYnJhbmNoX3VubGlrZWx5KCZhbXA7cmZzX25lZWRlZClgLiBgcmZzX25lZWRlZGAgYmVjb21lcyBlbmFibGVkIHdoZW4gYG5ldC5jb3JlLnJwc19zb2NrX2Zsb3dfZW50cmllc2AgaXMgc2V0IHRvIGEgdmFsdWUgZ3JlYXRlciB0aGFuIDAuICBUaGVyZWZvcmUsIHRvIGV4ZXJjaXNlIHRoaXMsIHdlIG5lZWQgYG5ldC5jb3JlLnJwc19zb2NrX2Zsb3dfZW50cmllcyAmZ3Q7IDBgIGFuZCwgdG8gdGVzdCB0aGUgbmV3IExMQyBhZmZpbml0eSBsb2dpYywgYG5ldC5jb3JlLnJwc19mZWF0X2xsY19hZmZpbml0eSA9IDFgLiAgQWxsIG9mIHRoaXMgaXMgYWNjZXNzaWJsZSB0aHJvdWdoIHN5c2N0bHMgYW5kLCBvZiBjb3Vyc2UsIHJlZ3VsYXIgbmV0d29yayB0cmFmZmljLgoKTGV0JiMzOTtzIHF1aWNrbHkgY29uZmlybSB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3MuIGBDT05GSUdfUlBTYCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQsIGFuZCBgQ09ORklHX1NZU0NUTGAgdG9vLiBTbywgbm8gc3BlY2lhbCBjb25maWdzIGFyZSBuZWVkZWQgYWx0aG91Z2ggYFJQU2AgaXMgYW4gb3B0aW9uIHRvIHNwZWNpZnkuIE5vIG90aGVyIHJlcXVpcmVkIGNvbmZpZ3MuIGBDT05GSUdfUkZTX0FDQ0VMYCBpcyBub3QgcmVxdWlyZWQsIGFsdGhvdWdoIGBDT05GSUdfU01QYCAqaXMqIHJlcXVpcmVkIGZvciBgQ09ORklHX1JQU2AuCgpMZXQmIzM5O3MgcmV2aXNpdCBgcnBzX2xsY19jaGVja2AgaW4gYG5ldC9jb3JlL2Rldi5jYC4gSXQgaGFzIGEgY29uZGl0aW9uYWwgYmFzZWQgb24gYHJwc19mZWF0X2xsY19hZmZpbml0eWAgYmVpbmcgZW5hYmxlZC4gVGhpcyBpcyBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwgYW5kIHJpcGUgZm9yIGZ1enppbmcuCgpNeSBmb2N1cyBzaG91bGQgYmUgb24gZnV6emluZyB0aGUgZm9sbG93aW5nIHN5bWJvbHM6IGBycHNfbGxjX2NoZWNrYCBhbmQgYHJwc19mZWF0X2xsY19hZmZpbml0eV9zeXNjdGxgLiAgSSBkaWQgY29uc2lkZXIgYHNvY2tfcnBzX3JlY29yZF9mbG93YCBhbmQgYHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2hgIGJ1dCB0aG9zZSBhcmUgaG90LXBhdGggZnVuY3Rpb25zLCBhbmQgdGhlIGluc3RydWN0aW9ucyBhZHZpc2UgYWdhaW5zdCBsaXN0aW5nIHRob3NlLiBTbyB0aGF0IGxlYXZlcyBgcnBzX2xsY19jaGVja2AgYW5kIGBycHNfZmVhdF9sbGNfYWZmaW5pdHlfc3lzY3RsYC4gIEhvd2V2ZXIsIGBycHNfbGxjX2NoZWNrYCAqaXMqIGNhbGxlZCBvbiBldmVyeSBmbG93IHJlY29yZCB1cGRhdGUsIGxpa2Ugb24gYHJlY3Ztc2dgLCBhbmQgYHNlbmRtc2dgIGNhbGxzLiAgSXQmIzM5O3MgdGhlIGNvcmUgbG9naWMgb2YgdGhlIHBhdGNoLCBzbyBJIG5lZWQgdG8gaW5jbHVkZSBpdCBmb3IgdGhlIGZ1enppbmcgYW5hbHlzaXMuICBDaGVja2luZywgaXQmIzM5O3Mgbm90IHN0YXRpYywgbWVhbmluZyBpdCBoYXMgaXRzIG93biBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcy4KClRoZXJlZm9yZSwgdGhlIGNvbmZpZyBpcyBzaW1wbHk6IGBSUFNgLgoKVGhlIHJlYXNvbmluZyBpcyB0aGF0IHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzeXNjdGwgKGBuZXQuY29yZS5ycHNfZmVhdF9sbGNfYWZmaW5pdHlgKSBhbmQgYSBuZXcgZnVuY3Rpb24gKGBycHNfbGxjX2NoZWNrYCkgdG8gb3B0aW1pemUgUlBTIGZsb3cgdGFibGUgdXBkYXRlcyBiYXNlZCBvbiBMTEMgYWZmaW5pdHkuIFRoaXMgY2xlYXJseSB0b3VjaGVzIGNvcmUgbmV0d29ya2luZyBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSBzeXNjdGwgY29uZmlndXJhdGlvbiBhbmQgcmVndWxhciBuZXR3b3JrIHRyYWZmaWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAzOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtSUFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtycHNfbGxjX2NoZWNrJiMzNDssCiAgICAmIzM0O3Jwc19mZWF0X2xsY19hZmZpbml0eV9zeXNjdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzeXNjdGwgYG5ldC5jb3JlLnJwc19mZWF0X2xsY19hZmZpbml0eWAgYW5kIGEgbmV3IGZ1bmN0aW9uIGBycHNfbGxjX2NoZWNrYCB0byBvcHRpbWl6ZSBSUFMgKFJlY2VpdmUgUGFja2V0IFN0ZWVyaW5nKSBmbG93IHRhYmxlIHVwZGF0ZXMgYmFzZWQgb24gTExDIChMYXN0IExldmVsIENhY2hlKSBhZmZpbml0eS4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgc3lzY3RsIGNvbmZpZ3VyYXRpb24gYW5kIG5vcm1hbCBuZXR3b3JrIHRyYWZmaWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JQUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Jwc19sbGNfY2hlY2smIzM0OywKICAgICYjMzQ7cnBzX2ZlYXRfbGxjX2FmZmluaXR5X3N5c2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN5c2N0bCBgbmV0LmNvcmUucnBzX2ZlYXRfbGxjX2FmZmluaXR5YCBhbmQgYSBuZXcgZnVuY3Rpb24gYHJwc19sbGNfY2hlY2tgIHRvIG9wdGltaXplIFJQUyAoUmVjZWl2ZSBQYWNrZXQgU3RlZXJpbmcpIGZsb3cgdGFibGUgdXBkYXRlcyBiYXNlZCBvbiBMTEMgKExhc3QgTGV2ZWwgQ2FjaGUpIGFmZmluaXR5LiBUaGlzIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSBzeXNjdGwgY29uZmlndXJhdGlvbiBhbmQgbm9ybWFsIG5ldHdvcmsgdHJhZmZpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAzOjEyOjA3LjQwMzY4ODgyMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NDE0MjQ5MjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlJQU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJwc19sbGNfY2hlY2tcIixcbiAgICBcInJwc19mZWF0X2xsY19hZmZpbml0eV9zeXNjdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN5c2N0bCBgbmV0LmNvcmUucnBzX2ZlYXRfbGxjX2FmZmluaXR5YCBhbmQgYSBuZXcgZnVuY3Rpb24gYHJwc19sbGNfY2hlY2tgIHRvIG9wdGltaXplIFJQUyAoUmVjZWl2ZSBQYWNrZXQgU3RlZXJpbmcpIGZsb3cgdGFibGUgdXBkYXRlcyBiYXNlZCBvbiBMTEMgKExhc3QgTGV2ZWwgQ2FjaGUpIGFmZmluaXR5LiBUaGlzIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSBzeXNjdGwgY29uZmlndXJhdGlvbiBhbmQgbm9ybWFsIG5ldHdvcmsgdHJhZmZpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDM6MTI6MDcuNDAzNjk0ODQyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDY2NzI2MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5NGQwN2ZiNzI3NzMzMTYxNDM4ZjA4OTYwNTYzMzY5NmUwODZjMzAzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDQgMDM6MTI6MDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcnBzLmggYi9pbmNsdWRlL25ldC9ycHMuaFxcbmluZGV4IGUzM2M2YTJmYThiYmMuLjZkYWNmMDg4OGE2YzIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvcnBzLmhcXG4rKysgYi9pbmNsdWRlL25ldC9ycHMuaFxcbkBAIC0xMiw2ICsxMiw3IEBAXFxuIFxcbiBleHRlcm4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcnBzX25lZWRlZDtcXG4gZXh0ZXJuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJmc19uZWVkZWQ7XFxuK2V4dGVybiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBycHNfZmVhdF9sbGNfYWZmaW5pdHk7XFxuIFxcbiAvKlxcbiAgKiBUaGlzIHN0cnVjdHVyZSBob2xkcyBhbiBSUFMgbWFwIHdoaWNoIGNhbiBiZSBvZiB2YXJpYWJsZSBsZW5ndGguICBUaGVcXG5AQCAtNTUsMTEgKzU2LDE0IEBAIHN0cnVjdCBycHNfc29ja19mbG93X3RhYmxlIHtcXG4gXFxuICNkZWZpbmUgUlBTX05PX0NQVSAweGZmZmZcXG4gXFxuK2Jvb2wgcnBzX2xsY19jaGVjayh1MzIgb2xkX3ZhbCwgdTMyIG5ld192YWwpO1xcbitcXG4gc3RhdGljIGlubGluZSB2b2lkIHJwc19yZWNvcmRfc29ja19mbG93KHJwc190YWdfcHRyIHRhZ19wdHIsIHUzMiBoYXNoKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGludCBpbmRleCA9IGhhc2ggXFx1MDAyNiBycHNfdGFnX3RvX21hc2sodGFnX3B0cik7XFxuIFxcdHUzMiB2YWwgPSBoYXNoIFxcdTAwMjYgfm5ldF9ob3RkYXRhLnJwc19jcHVfbWFzaztcXG4gXFx0c3RydWN0IHJwc19zb2NrX2Zsb3dfdGFibGUgKnRhYmxlO1xcbitcXHR1MzIgb2xkX3ZhbDtcXG4gXFxuIFxcdC8qIFdlIG9ubHkgZ2l2ZSBhIGhpbnQsIHByZWVtcHRpb24gY2FuIGNoYW5nZSBDUFUgdW5kZXIgdXMgKi9cXG4gXFx0dmFsIHw9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7XFxuQEAgLTY4LDcgKzcyLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHJwc19yZWNvcmRfc29ja19mbG93KHJwc190YWdfcHRyIHRhZ19wdHIsIHUzMiBoYXNoKVxcbiBcXHQvKiBUaGUgZm9sbG93aW5nIFdSSVRFX09OQ0UoKSBpcyBwYWlyZWQgd2l0aCB0aGUgUkVBRF9PTkNFKClcXG4gXFx0ICogaGVyZSwgYW5kIGFub3RoZXIgb25lIGluIGdldF9ycHNfY3B1KCkuXFxuIFxcdCAqL1xcbi1cXHRpZiAoUkVBRF9PTkNFKHRhYmxlW2luZGV4XS5lbnQpICE9IHZhbClcXG4rXFx0b2xkX3ZhbCA9IFJFQURfT05DRSh0YWJsZVtpbmRleF0uZW50KTtcXG4rXFx0aWYgKG9sZF92YWwgIT0gdmFsIFxcdTAwMjZcXHUwMDI2IHJwc19sbGNfY2hlY2sob2xkX3ZhbCwgdmFsKSlcXG4gXFx0XFx0V1JJVEVfT05DRSh0YWJsZVtpbmRleF0uZW50LCB2YWwpO1xcbiB9XFxuIFxcbkBAIC0xMzYsMjUgKzE0MSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCByZnNfaXNfbmVlZGVkKHZvaWQpXFxuICNlbmRpZlxcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKVxcbi17XFxuLSNpZmRlZiBDT05GSUdfUlBTXFxuLVxcdGlmICghcmZzX2lzX25lZWRlZCgpKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbi1cXHRfc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChoYXNoKTtcXG4tI2VuZGlmXFxuLX1cXG4tXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuLXtcXG4tI2lmZGVmIENPTkZJR19SUFNcXG4tXFx0aWYgKCFyZnNfaXNfbmVlZGVkKCkpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuLVxcdF9zb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XFxuLSNlbmRpZlxcbi19XFxuK3ZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKTtcXG4rdm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spO1xcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIHNvY2tfcnBzX2RlbGV0ZV9mbG93KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4ge1xcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXFxuaW5kZXggMjZhYzhlYjliMjU5ZC4uNTNiYWQzYzgwMWRjNCAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9kZXYuY1xcbisrKyBiL25ldC9jb3JlL2Rldi5jXFxuQEAgLTQ5OTcsNiArNDk5Nyw4IEBAIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJwc19uZWVkZWQgX19yZWFkX21vc3RseTtcXG4gRVhQT1JUX1NZTUJPTChycHNfbmVlZGVkKTtcXG4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcmZzX25lZWRlZCBfX3JlYWRfbW9zdGx5O1xcbiBFWFBPUlRfU1lNQk9MKHJmc19uZWVkZWQpO1xcbitzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBycHNfZmVhdF9sbGNfYWZmaW5pdHkgX19yZWFkX21vc3RseTtcXG4rRVhQT1JUX1NZTUJPTChycHNfZmVhdF9sbGNfYWZmaW5pdHkpO1xcbiBcXG4gc3RhdGljIHUzMiByZnNfc2xvdCh1MzIgaGFzaCwgcnBzX3RhZ19wdHIgdGFnX3B0cilcXG4ge1xcbkBAIC01MjA4LDYgKzUyMTAsNTUgQEAgc3RhdGljIGludCBnZXRfcnBzX2NwdShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRyZXR1cm4gY3B1O1xcbiB9XFxuIFxcbisvKipcXG4rICogcnBzX2xsY19jaGVjayAtIGRldGVybWluZSBpZiBSUFMgZmxvdyB0YWJsZSBzaG91bGQgYmUgdXBkYXRlZC5cXG4rICogQG9sZF92YWw6IHByZXZpb3VzIGZsb3cgcmVjb3JkIHZhbHVlLlxcbisgKiBAbmV3X3ZhbDogdGFyZ2V0IGZsb3cgcmVjb3JkIHZhbHVlLlxcbisgKlxcbisgKiBSZXR1cm46IHRydWUgaWYgdGhlIHJlY29yZCBuZWVkcyBhbiB1cGRhdGUsIGZhbHNlIG90aGVyd2lzZS5cXG4rICovXFxuK2Jvb2wgcnBzX2xsY19jaGVjayh1MzIgb2xkX3ZhbCwgdTMyIG5ld192YWwpXFxuK3tcXG4rXFx0dTMyIG9sZF9jcHUgPSBvbGRfdmFsIFxcdTAwMjYgfm5ldF9ob3RkYXRhLnJwc19jcHVfbWFzaztcXG4rXFx0dTMyIG5ld19jcHUgPSBuZXdfdmFsIFxcdTAwMjYgfm5ldF9ob3RkYXRhLnJwc19jcHVfbWFzaztcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFJQUyBMTEMgQWZmaW5pdHkgRmVhdHVyZTpcXG4rXFx0ICogUmVkdWNlIFJGUy9BUkZTIGZsb3cgdXBkYXRlcyBieSBjaGVja2luZyBMTEMgYWZmaW5pdHkuXFxuK1xcdCAqXFxuK1xcdCAqIEZyZXF1ZW50IGZsb3cgdGFibGUgdXBkYXRlcyBjYW4gdHJpZ2dlciBjb25zdGFudCBoYXJkd2FyZSBzdGVlcmluZ1xcbitcXHQgKiByZWNvbmZpZ3VyYXRpb25zIChlLmcuLCBuZG9fcnhfZmxvd19zdGVlciksIGxlYWRpbmcgdG8gc2lnbmlmaWNhbnRcXG4rXFx0ICogY29udGVudGlvbiBvbiBkcml2ZXIgaW50ZXJuYWwgbG9ja3MgKGxpa2UgbWx4NSdzIGFyZnNfbG9jaykuXFxuK1xcdCAqXFxuK1xcdCAqIFRoaXMgc3RyYXRlZ3kgb25seSB1cGRhdGVzIHRoZSBmbG93IHJlY29yZCBpZiBpdCBtaWdyYXRlcyBhY3Jvc3MgTExDXFxuK1xcdCAqIGJvdW5kYXJpZXMuIFRoaXMgbWluaW1pemVzIGV4cGVuc2l2ZSBoYXJkd2FyZSB1cGRhdGVzIHdoaWxlIHByZXNlcnZpbmdcXG4rXFx0ICogY2FjaGUgbG9jYWxpdHkgZm9yIHRoZSBhcHBsaWNhdGlvbi5cXG4rXFx0ICovXFxuK1xcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZycHNfZmVhdF9sbGNfYWZmaW5pdHkpKSB7XFxuK1xcdFxcdC8qIEZvcmNlIHVwZGF0ZSBpZiB0aGUgcmVjb3JkZWQgQ1BVIGlzIGludmFsaWQgb3IgaGFzIGdvbmUgb2ZmbGluZSAqL1xcbitcXHRcXHRpZiAob2xkX2NwdSBcXHUwMDNlPSBucl9jcHVfaWRzIHx8ICFjcHVfYWN0aXZlKG9sZF9jcHUpKVxcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEZvcmNlIGFuIHVwZGF0ZSBpZiB0aGUgY3VycmVudCB0YXNrIGlzIG5vIGxvbmdlciBwZXJtaXR0ZWRcXG4rXFx0XFx0ICogdG8gcnVuIG9uIHRoZSBvbGRfY3B1LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKCFjcHVtYXNrX3Rlc3RfY3B1KG9sZF9jcHUsIGN1cnJlbnQtXFx1MDAzZWNwdXNfcHRyKSlcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBJZiBDUFVzIGRvIG5vdCBzaGFyZSBhIGNhY2hlLCBhbGxvdyB0aGUgdXBkYXRlIHRvIHByZXZlbnRcXG4rXFx0XFx0ICogZXhwZW5zaXZlIHJlbW90ZSBtZW1vcnkgYWNjZXNzZXMgYW5kIGNhY2hlIG1pc3Nlcy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICghY3B1c19zaGFyZV9jYWNoZShvbGRfY3B1LCBuZXdfY3B1KSlcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbiAjaWZkZWYgQ09ORklHX1JGU19BQ0NFTFxcbiBcXG4gLyoqXFxuQEAgLTUyNjMsNiArNTMxNCwyOCBAQCBzdGF0aWMgdm9pZCBycHNfdHJpZ2dlcl9zb2Z0aXJxKHZvaWQgKmRhdGEpXFxuIFxcbiAjZW5kaWYgLyogQ09ORklHX1JQUyAqL1xcbiBcXG4rdm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKF9fdTMyIGhhc2gpXFxuK3tcXG4rI2lmZGVmIENPTkZJR19SUFNcXG4rXFx0aWYgKCFyZnNfaXNfbmVlZGVkKCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdF9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKGhhc2gpO1xcbisjZW5kaWZcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2gpO1xcbitcXG4rdm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuK3tcXG4rI2lmZGVmIENPTkZJR19SUFNcXG4rXFx0aWYgKCFyZnNfaXNfbmVlZGVkKCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdF9zb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XFxuKyNlbmRpZlxcbit9XFxuK0VYUE9SVF9TWU1CT0woc29ja19ycHNfcmVjb3JkX2Zsb3cpO1xcbitcXG4gLyogQ2FsbGVkIGZyb20gaGFyZGlycSAoSVBJKSBjb250ZXh0ICovXFxuIHN0YXRpYyB2b2lkIHRyaWdnZXJfcnhfc29mdGlycSh2b2lkICpkYXRhKVxcbiB7XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jIGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmNcXG5pbmRleCBiNTA4NjE4YmZjMTIzLi5iNmQ0ZWJjYmI2YTY4IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jXFxuKysrIGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmNcXG5AQCAtMjEwLDYgKzIxMCwzMyBAQCBzdGF0aWMgaW50IHJwc19zb2NrX2Zsb3dfc3lzY3RsKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXFxuIFxcdGt2ZnJlZV9yY3VfbWlnaHRzbGVlcCh0b2ZyZWUpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuK1xcbitzdGF0aWMgaW50IHJwc19mZWF0X2xsY19hZmZpbml0eV9zeXNjdGwoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0dm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcXG4re1xcbitcXHR1OCBjdXJyX3N0YXRlO1xcbitcXHRpbnQgcmV0O1xcbitcXHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHRtcCA9IHtcXG4rXFx0XFx0LmRhdGEgPSBcXHUwMDI2Y3Vycl9zdGF0ZSxcXG4rXFx0XFx0Lm1heGxlbiA9IHNpemVvZihjdXJyX3N0YXRlKSxcXG4rXFx0XFx0Lm1vZGUgPSB0YWJsZS1cXHUwMDNlbW9kZSxcXG4rXFx0XFx0LmV4dHJhMSA9IHRhYmxlLVxcdTAwM2VleHRyYTEsXFxuK1xcdFxcdC5leHRyYTIgPSB0YWJsZS1cXHUwMDNlZXh0cmEyXFxuK1xcdH07XFxuK1xcbitcXHRjdXJyX3N0YXRlID0gc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2cnBzX2ZlYXRfbGxjX2FmZmluaXR5KSA/IDEgOiAwO1xcbitcXG4rXFx0cmV0ID0gcHJvY19kb3U4dmVjX21pbm1heChcXHUwMDI2dG1wLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTtcXG4rXFx0aWYgKHdyaXRlIFxcdTAwMjZcXHUwMDI2IHJldCA9PSAwKSB7XFxuK1xcdFxcdGlmIChjdXJyX3N0YXRlIFxcdTAwMjZcXHUwMDI2ICFzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZycHNfZmVhdF9sbGNfYWZmaW5pdHkpKVxcbitcXHRcXHRcXHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcXHUwMDI2cnBzX2ZlYXRfbGxjX2FmZmluaXR5KTtcXG4rXFx0XFx0ZWxzZSBpZiAoIWN1cnJfc3RhdGUgXFx1MDAyNlxcdTAwMjYgc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2cnBzX2ZlYXRfbGxjX2FmZmluaXR5KSlcXG4rXFx0XFx0XFx0c3RhdGljX2JyYW5jaF9kaXNhYmxlKFxcdTAwMjZycHNfZmVhdF9sbGNfYWZmaW5pdHkpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiAjZW5kaWYgLyogQ09ORklHX1JQUyAqL1xcbiBcXG4gI2lmZGVmIENPTkZJR19ORVRfRkxPV19MSU1JVFxcbkBAIC01NTQsNiArNTgxLDE0IEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5ldF9jb3JlX3RhYmxlW10gPSB7XFxuIFxcdFxcdC5tb2RlXFx0XFx0PSAwNjQ0LFxcbiBcXHRcXHQucHJvY19oYW5kbGVyXFx0PSBycHNfc29ja19mbG93X3N5c2N0bFxcbiBcXHR9LFxcbitcXHR7XFxuK1xcdFxcdC5wcm9jbmFtZSAgID0gXFxcInJwc19mZWF0X2xsY19hZmZpbml0eVxcXCIsXFxuK1xcdFxcdC5tYXhsZW4gICAgID0gc2l6ZW9mKHU4KSxcXG4rXFx0XFx0Lm1vZGUgICAgICAgPSAwNjQ0LFxcbitcXHRcXHQucHJvY19oYW5kbGVyICAgPSBycHNfZmVhdF9sbGNfYWZmaW5pdHlfc3lzY3RsLFxcbitcXHRcXHQuZXh0cmExICAgICA9IFNZU0NUTF9aRVJPLFxcbitcXHRcXHQuZXh0cmEyICAgICA9IFNZU0NUTF9PTkVcXG4rXFx0fSxcXG4gI2VuZGlmXFxuICNpZmRlZiBDT05GSUdfTkVUX0ZMT1dfTElNSVRcXG4gXFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMzoxMjowNy44MTEwNjI1MzVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4OTAwNjg2NjM5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSUFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJycHNfbGxjX2NoZWNrXCIsXG4gICAgXCJycHNfZmVhdF9sbGNfYWZmaW5pdHlfc3lzY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzeXNjdGwgYG5ldC5jb3JlLnJwc19mZWF0X2xsY19hZmZpbml0eWAgYW5kIGEgbmV3IGZ1bmN0aW9uIGBycHNfbGxjX2NoZWNrYCB0byBvcHRpbWl6ZSBSUFMgKFJlY2VpdmUgUGFja2V0IFN0ZWVyaW5nKSBmbG93IHRhYmxlIHVwZGF0ZXMgYmFzZWQgb24gTExDIChMYXN0IExldmVsIENhY2hlKSBhZmZpbml0eS4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgc3lzY3RsIGNvbmZpZ3VyYXRpb24gYW5kIG5vcm1hbCBuZXR3b3JrIHRyYWZmaWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDk0ZDA3ZmI3Mjc3MzMxNjE0MzhmMDg5NjA1NjMzNjk2ZTA4NmMzMDNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDAzOjEyOjA2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcnBzLmggYi9pbmNsdWRlL25ldC9ycHMuaFxuaW5kZXggZTMzYzZhMmZhOGJiYy4uNmRhY2YwODg4YTZjMiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3Jwcy5oXG4rKysgYi9pbmNsdWRlL25ldC9ycHMuaFxuQEAgLTEyLDYgKzEyLDcgQEBcbiBcbiBleHRlcm4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcnBzX25lZWRlZDtcbiBleHRlcm4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcmZzX25lZWRlZDtcbitleHRlcm4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcnBzX2ZlYXRfbGxjX2FmZmluaXR5O1xuIFxuIC8qXG4gICogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgYW4gUlBTIG1hcCB3aGljaCBjYW4gYmUgb2YgdmFyaWFibGUgbGVuZ3RoLiAgVGhlXG5AQCAtNTUsMTEgKzU2LDE0IEBAIHN0cnVjdCBycHNfc29ja19mbG93X3RhYmxlIHtcbiBcbiAjZGVmaW5lIFJQU19OT19DUFUgMHhmZmZmXG4gXG4rYm9vbCBycHNfbGxjX2NoZWNrKHUzMiBvbGRfdmFsLCB1MzIgbmV3X3ZhbCk7XG4rXG4gc3RhdGljIGlubGluZSB2b2lkIHJwc19yZWNvcmRfc29ja19mbG93KHJwc190YWdfcHRyIHRhZ19wdHIsIHUzMiBoYXNoKVxuIHtcbiBcdHVuc2lnbmVkIGludCBpbmRleCA9IGhhc2ggXHUwMDI2IHJwc190YWdfdG9fbWFzayh0YWdfcHRyKTtcbiBcdHUzMiB2YWwgPSBoYXNoIFx1MDAyNiB+bmV0X2hvdGRhdGEucnBzX2NwdV9tYXNrO1xuIFx0c3RydWN0IHJwc19zb2NrX2Zsb3dfdGFibGUgKnRhYmxlO1xuK1x0dTMyIG9sZF92YWw7XG4gXG4gXHQvKiBXZSBvbmx5IGdpdmUgYSBoaW50LCBwcmVlbXB0aW9uIGNhbiBjaGFuZ2UgQ1BVIHVuZGVyIHVzICovXG4gXHR2YWwgfD0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTtcbkBAIC02OCw3ICs3Miw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBycHNfcmVjb3JkX3NvY2tfZmxvdyhycHNfdGFnX3B0ciB0YWdfcHRyLCB1MzIgaGFzaClcbiBcdC8qIFRoZSBmb2xsb3dpbmcgV1JJVEVfT05DRSgpIGlzIHBhaXJlZCB3aXRoIHRoZSBSRUFEX09OQ0UoKVxuIFx0ICogaGVyZSwgYW5kIGFub3RoZXIgb25lIGluIGdldF9ycHNfY3B1KCkuXG4gXHQgKi9cbi1cdGlmIChSRUFEX09OQ0UodGFibGVbaW5kZXhdLmVudCkgIT0gdmFsKVxuK1x0b2xkX3ZhbCA9IFJFQURfT05DRSh0YWJsZVtpbmRleF0uZW50KTtcbitcdGlmIChvbGRfdmFsICE9IHZhbCBcdTAwMjZcdTAwMjYgcnBzX2xsY19jaGVjayhvbGRfdmFsLCB2YWwpKVxuIFx0XHRXUklURV9PTkNFKHRhYmxlW2luZGV4XS5lbnQsIHZhbCk7XG4gfVxuIFxuQEAgLTEzNiwyNSArMTQxLDggQEAgc3RhdGljIGlubGluZSBib29sIHJmc19pc19uZWVkZWQodm9pZClcbiAjZW5kaWZcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goX191MzIgaGFzaClcbi17XG4tI2lmZGVmIENPTkZJR19SUFNcbi1cdGlmICghcmZzX2lzX25lZWRlZCgpKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRfc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChoYXNoKTtcbi0jZW5kaWZcbi19XG4tXG4tc3RhdGljIGlubGluZSB2b2lkIHNvY2tfcnBzX3JlY29yZF9mbG93KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbi17XG4tI2lmZGVmIENPTkZJR19SUFNcbi1cdGlmICghcmZzX2lzX25lZWRlZCgpKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRfc29ja19ycHNfcmVjb3JkX2Zsb3coc2spO1xuLSNlbmRpZlxuLX1cbit2b2lkIHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goX191MzIgaGFzaCk7XG4rdm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spO1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzb2NrX3Jwc19kZWxldGVfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4ge1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcbmluZGV4IDI2YWM4ZWI5YjI1OWQuLjUzYmFkM2M4MDFkYzQgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuKysrIGIvbmV0L2NvcmUvZGV2LmNcbkBAIC00OTk3LDYgKzQ5OTcsOCBAQCBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBycHNfbmVlZGVkIF9fcmVhZF9tb3N0bHk7XG4gRVhQT1JUX1NZTUJPTChycHNfbmVlZGVkKTtcbiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSByZnNfbmVlZGVkIF9fcmVhZF9tb3N0bHk7XG4gRVhQT1JUX1NZTUJPTChyZnNfbmVlZGVkKTtcbitzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBycHNfZmVhdF9sbGNfYWZmaW5pdHkgX19yZWFkX21vc3RseTtcbitFWFBPUlRfU1lNQk9MKHJwc19mZWF0X2xsY19hZmZpbml0eSk7XG4gXG4gc3RhdGljIHUzMiByZnNfc2xvdCh1MzIgaGFzaCwgcnBzX3RhZ19wdHIgdGFnX3B0cilcbiB7XG5AQCAtNTIwOCw2ICs1MjEwLDU1IEBAIHN0YXRpYyBpbnQgZ2V0X3Jwc19jcHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiBjcHU7XG4gfVxuIFxuKy8qKlxuKyAqIHJwc19sbGNfY2hlY2sgLSBkZXRlcm1pbmUgaWYgUlBTIGZsb3cgdGFibGUgc2hvdWxkIGJlIHVwZGF0ZWQuXG4rICogQG9sZF92YWw6IHByZXZpb3VzIGZsb3cgcmVjb3JkIHZhbHVlLlxuKyAqIEBuZXdfdmFsOiB0YXJnZXQgZmxvdyByZWNvcmQgdmFsdWUuXG4rICpcbisgKiBSZXR1cm46IHRydWUgaWYgdGhlIHJlY29yZCBuZWVkcyBhbiB1cGRhdGUsIGZhbHNlIG90aGVyd2lzZS5cbisgKi9cbitib29sIHJwc19sbGNfY2hlY2sodTMyIG9sZF92YWwsIHUzMiBuZXdfdmFsKVxuK3tcbitcdHUzMiBvbGRfY3B1ID0gb2xkX3ZhbCBcdTAwMjYgfm5ldF9ob3RkYXRhLnJwc19jcHVfbWFzaztcbitcdHUzMiBuZXdfY3B1ID0gbmV3X3ZhbCBcdTAwMjYgfm5ldF9ob3RkYXRhLnJwc19jcHVfbWFzaztcbitcbitcdC8qXG4rXHQgKiBSUFMgTExDIEFmZmluaXR5IEZlYXR1cmU6XG4rXHQgKiBSZWR1Y2UgUkZTL0FSRlMgZmxvdyB1cGRhdGVzIGJ5IGNoZWNraW5nIExMQyBhZmZpbml0eS5cbitcdCAqXG4rXHQgKiBGcmVxdWVudCBmbG93IHRhYmxlIHVwZGF0ZXMgY2FuIHRyaWdnZXIgY29uc3RhbnQgaGFyZHdhcmUgc3RlZXJpbmdcbitcdCAqIHJlY29uZmlndXJhdGlvbnMgKGUuZy4sIG5kb19yeF9mbG93X3N0ZWVyKSwgbGVhZGluZyB0byBzaWduaWZpY2FudFxuK1x0ICogY29udGVudGlvbiBvbiBkcml2ZXIgaW50ZXJuYWwgbG9ja3MgKGxpa2UgbWx4NSdzIGFyZnNfbG9jaykuXG4rXHQgKlxuK1x0ICogVGhpcyBzdHJhdGVneSBvbmx5IHVwZGF0ZXMgdGhlIGZsb3cgcmVjb3JkIGlmIGl0IG1pZ3JhdGVzIGFjcm9zcyBMTENcbitcdCAqIGJvdW5kYXJpZXMuIFRoaXMgbWluaW1pemVzIGV4cGVuc2l2ZSBoYXJkd2FyZSB1cGRhdGVzIHdoaWxlIHByZXNlcnZpbmdcbitcdCAqIGNhY2hlIGxvY2FsaXR5IGZvciB0aGUgYXBwbGljYXRpb24uXG4rXHQgKi9cbitcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnJwc19mZWF0X2xsY19hZmZpbml0eSkpIHtcbitcdFx0LyogRm9yY2UgdXBkYXRlIGlmIHRoZSByZWNvcmRlZCBDUFUgaXMgaW52YWxpZCBvciBoYXMgZ29uZSBvZmZsaW5lICovXG4rXHRcdGlmIChvbGRfY3B1IFx1MDAzZT0gbnJfY3B1X2lkcyB8fCAhY3B1X2FjdGl2ZShvbGRfY3B1KSlcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdFx0LypcbitcdFx0ICogRm9yY2UgYW4gdXBkYXRlIGlmIHRoZSBjdXJyZW50IHRhc2sgaXMgbm8gbG9uZ2VyIHBlcm1pdHRlZFxuK1x0XHQgKiB0byBydW4gb24gdGhlIG9sZF9jcHUuXG4rXHRcdCAqL1xuK1x0XHRpZiAoIWNwdW1hc2tfdGVzdF9jcHUob2xkX2NwdSwgY3VycmVudC1cdTAwM2VjcHVzX3B0cikpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIElmIENQVXMgZG8gbm90IHNoYXJlIGEgY2FjaGUsIGFsbG93IHRoZSB1cGRhdGUgdG8gcHJldmVudFxuK1x0XHQgKiBleHBlbnNpdmUgcmVtb3RlIG1lbW9yeSBhY2Nlc3NlcyBhbmQgY2FjaGUgbWlzc2VzLlxuK1x0XHQgKi9cbitcdFx0aWYgKCFjcHVzX3NoYXJlX2NhY2hlKG9sZF9jcHUsIG5ld19jcHUpKVxuK1x0XHRcdHJldHVybiB0cnVlO1xuK1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gI2lmZGVmIENPTkZJR19SRlNfQUNDRUxcbiBcbiAvKipcbkBAIC01MjYzLDYgKzUzMTQsMjggQEAgc3RhdGljIHZvaWQgcnBzX3RyaWdnZXJfc29mdGlycSh2b2lkICpkYXRhKVxuIFxuICNlbmRpZiAvKiBDT05GSUdfUlBTICovXG4gXG4rdm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKF9fdTMyIGhhc2gpXG4re1xuKyNpZmRlZiBDT05GSUdfUlBTXG4rXHRpZiAoIXJmc19pc19uZWVkZWQoKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0X3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goaGFzaCk7XG4rI2VuZGlmXG4rfVxuK0VYUE9SVF9TWU1CT0woc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaCk7XG4rXG4rdm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4re1xuKyNpZmRlZiBDT05GSUdfUlBTXG4rXHRpZiAoIXJmc19pc19uZWVkZWQoKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0X3NvY2tfcnBzX3JlY29yZF9mbG93KHNrKTtcbisjZW5kaWZcbit9XG4rRVhQT1JUX1NZTUJPTChzb2NrX3Jwc19yZWNvcmRfZmxvdyk7XG4rXG4gLyogQ2FsbGVkIGZyb20gaGFyZGlycSAoSVBJKSBjb250ZXh0ICovXG4gc3RhdGljIHZvaWQgdHJpZ2dlcl9yeF9zb2Z0aXJxKHZvaWQgKmRhdGEpXG4ge1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jIGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmNcbmluZGV4IGI1MDg2MThiZmMxMjMuLmI2ZDRlYmNiYjZhNjggMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuY1xuKysrIGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmNcbkBAIC0yMTAsNiArMjEwLDMzIEBAIHN0YXRpYyBpbnQgcnBzX3NvY2tfZmxvd19zeXNjdGwoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbiBcdGt2ZnJlZV9yY3VfbWlnaHRzbGVlcCh0b2ZyZWUpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4rXG4rc3RhdGljIGludCBycHNfZmVhdF9sbGNfYWZmaW5pdHlfc3lzY3RsKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4rXHRcdFx0XHRcdHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXG4re1xuK1x0dTggY3Vycl9zdGF0ZTtcbitcdGludCByZXQ7XG4rXHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHRtcCA9IHtcbitcdFx0LmRhdGEgPSBcdTAwMjZjdXJyX3N0YXRlLFxuK1x0XHQubWF4bGVuID0gc2l6ZW9mKGN1cnJfc3RhdGUpLFxuK1x0XHQubW9kZSA9IHRhYmxlLVx1MDAzZW1vZGUsXG4rXHRcdC5leHRyYTEgPSB0YWJsZS1cdTAwM2VleHRyYTEsXG4rXHRcdC5leHRyYTIgPSB0YWJsZS1cdTAwM2VleHRyYTJcbitcdH07XG4rXG4rXHRjdXJyX3N0YXRlID0gc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZycHNfZmVhdF9sbGNfYWZmaW5pdHkpID8gMSA6IDA7XG4rXG4rXHRyZXQgPSBwcm9jX2RvdTh2ZWNfbWlubWF4KFx1MDAyNnRtcCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XG4rXHRpZiAod3JpdGUgXHUwMDI2XHUwMDI2IHJldCA9PSAwKSB7XG4rXHRcdGlmIChjdXJyX3N0YXRlIFx1MDAyNlx1MDAyNiAhc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZycHNfZmVhdF9sbGNfYWZmaW5pdHkpKVxuK1x0XHRcdHN0YXRpY19icmFuY2hfZW5hYmxlKFx1MDAyNnJwc19mZWF0X2xsY19hZmZpbml0eSk7XG4rXHRcdGVsc2UgaWYgKCFjdXJyX3N0YXRlIFx1MDAyNlx1MDAyNiBzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnJwc19mZWF0X2xsY19hZmZpbml0eSkpXG4rXHRcdFx0c3RhdGljX2JyYW5jaF9kaXNhYmxlKFx1MDAyNnJwc19mZWF0X2xsY19hZmZpbml0eSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiAjZW5kaWYgLyogQ09ORklHX1JQUyAqL1xuIFxuICNpZmRlZiBDT05GSUdfTkVUX0ZMT1dfTElNSVRcbkBAIC01NTQsNiArNTgxLDE0IEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5ldF9jb3JlX3RhYmxlW10gPSB7XG4gXHRcdC5tb2RlXHRcdD0gMDY0NCxcbiBcdFx0LnByb2NfaGFuZGxlclx0PSBycHNfc29ja19mbG93X3N5c2N0bFxuIFx0fSxcbitcdHtcbitcdFx0LnByb2NuYW1lICAgPSBcInJwc19mZWF0X2xsY19hZmZpbml0eVwiLFxuK1x0XHQubWF4bGVuICAgICA9IHNpemVvZih1OCksXG4rXHRcdC5tb2RlICAgICAgID0gMDY0NCxcbitcdFx0LnByb2NfaGFuZGxlciAgID0gcnBzX2ZlYXRfbGxjX2FmZmluaXR5X3N5c2N0bCxcbitcdFx0LmV4dHJhMSAgICAgPSBTWVNDVExfWkVSTyxcbitcdFx0LmV4dHJhMiAgICAgPSBTWVNDVExfT05FXG4rXHR9LFxuICNlbmRpZlxuICNpZmRlZiBDT05GSUdfTkVUX0ZMT1dfTElNSVRcbiBcdHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAzOjEyOjA3LjgxMTA2NDExNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMjc2NjU2NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSUFMgTExDIEFmZmluaXR5IFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0J3MgaW50cm9kdWNpbmcgYSBuZXcgc3lzY3RsLCBgbmV0LmNvcmUucnBzX2ZlYXRfbGxjX2FmZmluaXR5YCwgYW5kIGEgbmV3IGZlYXR1cmUgZm9yIFJQUywgd2hpY2ggaXMgaW50cmlndWluZy4gSSBzZWUgdGhlIGNoYW5nZXMgYXJlIHRvdWNoaW5nIHNvbWUga2V5IG5ldHdvcmtpbmcgZmlsZXM6IGBpbmNsdWRlL25ldC9ycHMuaGAsIGBuZXQvY29yZS9kZXYuY2AsIGFuZCBgbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmNgLiBUaGlzIExMQyBhZmZpbml0eSB0aGluZyBpcyBhYm91dCBjaGVja2luZyBpZiBhbiBSUFMgZmxvdyB0YWJsZSB1cGRhdGUgaXMgbmVjZXNzYXJ5LCBiYXNlZCBvbiB0aGF0IGNhY2hlIGxldmVsIGFmZmluaXR5LCBzbyBwb3RlbnRpYWxseSBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgYnkga2VlcGluZyBmbG93cyBvbiB0aGUgc2FtZSBjb3JlLlxuXG5UaGUgcGF0Y2ggYWRkcyBhIG5ldyBmdW5jdGlvbiwgYHJwc19sbGNfY2hlY2tgLCBpbiBgbmV0L2NvcmUvZGV2LmNgLCB3aGljaCBzZWVtcyB0byBiZSB0aGUgY29yZSBvZiB0aGlzIG5ldyBmZWF0dXJlLiBJdCdzIHVzaW5nIGBzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnJwc19mZWF0X2xsY19hZmZpbml0eSlgLCBzbyB0aGlzIGBycHNfZmVhdF9sbGNfYWZmaW5pdHlfc3lzY3RsYCBoYW5kbGVyIG11c3QgYmUgaG93IHdlIGVuYWJsZSBvciBkaXNhYmxlIHRoaXMgY29uZGl0aW9uYWwgYmVoYXZpb3IuIEludGVyZXN0aW5nLiBBbmQgZnJvbSB3aGF0IEkgc2VlLCBgcnBzX2xsY19jaGVja2AgZ2V0cyBjYWxsZWQgZnJvbSBgcnBzX3JlY29yZF9zb2NrX2Zsb3dgIGluIGBpbmNsdWRlL25ldC9ycHMuaGAsIHdoaWNoIGlzIGEga2V5IHBhcnQgb2YgaG93IHBhY2tldHMgYXJlIHJvdXRlZCB0byBjb3Jlcy4gVGhpcyB3aG9sZSB0aGluZyB0cmlja2xlcyBkb3duIHRocm91Z2ggYSBmZXcgZnVuY3Rpb25zOiBgX3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2hgLCBgX3NvY2tfcnBzX3JlY29yZF9mbG93YCwgYW5kIHRoZW4gdGhlIHVuLWlubGluZWQgdmVyc2lvbnMgaW4gYG5ldC9jb3JlL2Rldi5jYC5cblxuUmlnaHQsIHRpbWUgdG8gZXZhbHVhdGUgaWYgdGhpcyBpcyByaXBlIGZvciBmdXp6aW5nLiBHaXZlbiB0aGUgbW9kaWZpY2F0aW9uIHRvIGNvcmUgbmV0d29ya2luZyBsb2dpYyDigJMgUlBTLCBzcGVjaWZpY2FsbHkg4oCTIGFuZCB0aGUgYWRkaXRpb24gb2YgdGhhdCBuZXcgc3lzY3RsLCBteSBndXQgZmVlbGluZyBpcyB0aGF0IGl0J3Mgd29ydGggYSBzaG90LiBUaGUgbmV3IGBycHNfbGxjX2NoZWNrYCBmdW5jdGlvbiBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBpZiBSUFMvUkZTIGlzIGVuYWJsZWQsIGFuZCB0aGUgYHJwc19mZWF0X2xsY19hZmZpbml0eV9zeXNjdGxgIGhhbmRsZXIgaXMgYWxzbyBleHBvc2VkLiBUaGF04oCZcyBlbm91Z2ggdG8gcGVhayBteSBpbnRlcmVzdC5cblxuTm93LCBsZXQncyBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGNoZWNrIHRoZSBgI2lmZGVmIENPTkZJR19SUFNgIGd1YXJkcywgc28gSSdsbCBwb2tlIGFyb3VuZCBgbmV0L2NvcmUvZGV2LmNgIGFuZCBgbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmNgIHRvIGNvbmZpcm0gd2hhdCdzIG5lZWRlZC4gVGltZSB0byBkaWcgaW4gYW5kIGZpbmQgdGhvc2UgaW5pdGlhbCBjb25maWcgcmVxdWlyZW1lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzA4LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDM6MTI6MTYuMDM4NzMyNTc1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNzU0NDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19SUFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTIzMT1zdGF0aWMgaW5saW5lIHZvaWQgYmFja2xvZ19sb2NrX2lycV9zYXZlKHN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMjM3LVxcdFxcdGxvY2FsX2lycV9zYXZlKCpmbGFncyk7XFxubmV0L2NvcmUvZGV2LmM6MjM4OlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19SUFMpIHx8IHVzZV9iYWNrbG9nX3RocmVhZHMoKSlcXG5uZXQvY29yZS9kZXYuYy0yMzktXFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZzZC1cXHUwMDNlaW5wdXRfcGt0X3F1ZXVlLmxvY2spO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MjQzPXN0YXRpYyBpbmxpbmUgdm9pZCBiYWNrbG9nX2xvY2tfaXJxX2Rpc2FibGUoc3RydWN0IHNvZnRuZXRfZGF0YSAqc2QpXFxubmV0L2NvcmUvZGV2LmMtMjQ0LXtcXG5uZXQvY29yZS9kZXYuYzoyNDU6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1JQUykgfHwgdXNlX2JhY2tsb2dfdGhyZWFkcygpKVxcbm5ldC9jb3JlL2Rldi5jLTI0Ni1cXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZzZC1cXHUwMDNlaW5wdXRfcGt0X3F1ZXVlLmxvY2spO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MjUxPXN0YXRpYyBpbmxpbmUgdm9pZCBiYWNrbG9nX3VubG9ja19pcnFfcmVzdG9yZShzdHJ1Y3Qgc29mdG5ldF9kYXRhICpzZCxcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTI1Ni1cXHR9IGVsc2Uge1xcbm5ldC9jb3JlL2Rldi5jOjI1NzpcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUlBTKSB8fCB1c2VfYmFja2xvZ190aHJlYWRzKCkpXFxubmV0L2NvcmUvZGV2LmMtMjU4LVxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZzZC1cXHUwMDNlaW5wdXRfcGt0X3F1ZXVlLmxvY2spO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MjYzPXN0YXRpYyBpbmxpbmUgdm9pZCBiYWNrbG9nX3VubG9ja19pcnFfZW5hYmxlKHN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkKVxcbm5ldC9jb3JlL2Rldi5jLTI2NC17XFxubmV0L2NvcmUvZGV2LmM6MjY1OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19SUFMpIHx8IHVzZV9iYWNrbG9nX3RocmVhZHMoKSlcXG5uZXQvY29yZS9kZXYuYy0yNjYtXFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZzZC1cXHUwMDNlaW5wdXRfcGt0X3F1ZXVlLmxvY2spO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9NDk1OD1zdGF0aWMgaW5saW5lIHZvaWQgX19fX25hcGlfc2NoZWR1bGUoc3RydWN0IHNvZnRuZXRfZGF0YSAqc2QsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy00OTkzLVxcbm5ldC9jb3JlL2Rldi5jOjQ5OTQ6I2lmZGVmIENPTkZJR19SUFNcXG5uZXQvY29yZS9kZXYuYy00OTk1LVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTMwNj1zdGF0aWMgdm9pZCBycHNfdHJpZ2dlcl9zb2Z0aXJxKHZvaWQgKmRhdGEpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy01MzE0LVxcbm5ldC9jb3JlL2Rldi5jOjUzMTU6I2VuZGlmIC8qIENPTkZJR19SUFMgKi9cXG5uZXQvY29yZS9kZXYuYy01MzE2LVxcbm5ldC9jb3JlL2Rldi5jPTUzMTc9dm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKF9fdTMyIGhhc2gpXFxubmV0L2NvcmUvZGV2LmMtNTMxOC17XFxubmV0L2NvcmUvZGV2LmM6NTMxOTojaWZkZWYgQ09ORklHX1JQU1xcbm5ldC9jb3JlL2Rldi5jLTUzMjAtXFx0aWYgKCFyZnNfaXNfbmVlZGVkKCkpXFxuLS1cXG5uZXQvY29yZS9kZXYuYz01MzI4PXZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9jb3JlL2Rldi5jLTUzMjkte1xcbm5ldC9jb3JlL2Rldi5jOjUzMzA6I2lmZGVmIENPTkZJR19SUFNcXG5uZXQvY29yZS9kZXYuYy01MzMxLVxcdGlmICghcmZzX2lzX25lZWRlZCgpKVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTM1OD1zdGF0aWMgdm9pZCBuYXBpX3NjaGVkdWxlX3JwcyhzdHJ1Y3Qgc29mdG5ldF9kYXRhICpzZClcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTUzNjEtXFxubmV0L2NvcmUvZGV2LmM6NTM2MjojaWZkZWYgQ09ORklHX1JQU1xcbm5ldC9jb3JlL2Rldi5jLTUzNjMtXFx0aWYgKHNkICE9IG15c2QpIHtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTUzNzgtXFx0fVxcbm5ldC9jb3JlL2Rldi5jOjUzNzk6I2VuZGlmIC8qIENPTkZJR19SUFMgKi9cXG5uZXQvY29yZS9kZXYuYy01MzgwLVxcdF9fbmFwaV9zY2hlZHVsZV9pcnFvZmYoXFx1MDAyNm15c2QtXFx1MDAzZWJhY2tsb2cpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTc2Nj1zdGF0aWMgaW50IG5ldGlmX3J4X2ludGVybmFsKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy01NzczLVxcbm5ldC9jb3JlL2Rldi5jOjU3NzQ6I2lmZGVmIENPTkZJR19SUFNcXG5uZXQvY29yZS9kZXYuYy01Nzc1LVxcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZycHNfbmVlZGVkKSkge1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9NjQ1Mz1zdGF0aWMgaW50IG5ldGlmX3JlY2VpdmVfc2tiX2ludGVybmFsKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy02NDYyLVxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvY29yZS9kZXYuYzo2NDYzOiNpZmRlZiBDT05GSUdfUlBTXFxubmV0L2NvcmUvZGV2LmMtNjQ2NC1cXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2cnBzX25lZWRlZCkpIHtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTY0ODA9dm9pZCBuZXRpZl9yZWNlaXZlX3NrYl9saXN0X2ludGVybmFsKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy02NDk0LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvY29yZS9kZXYuYzo2NDk1OiNpZmRlZiBDT05GSUdfUlBTXFxubmV0L2NvcmUvZGV2LmMtNjQ5Ni1cXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2cnBzX25lZWRlZCkpIHtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTY2MDE9c3RhdGljIGJvb2wgZmx1c2hfcmVxdWlyZWQoaW50IGNwdSlcXG5uZXQvY29yZS9kZXYuYy02NjAyLXtcXG5uZXQvY29yZS9kZXYuYzo2NjAzOiNpZiBJU19FTkFCTEVEKENPTkZJR19SUFMpXFxubmV0L2NvcmUvZGV2LmMtNjYwNC1cXHRzdHJ1Y3Qgc29mdG5ldF9kYXRhICpzZCA9IFxcdTAwMjZwZXJfY3B1KHNvZnRuZXRfZGF0YSwgY3B1KTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTY2NzU9c3RhdGljIHZvaWQgbmV0X3Jwc19zZW5kX2lwaShzdHJ1Y3Qgc29mdG5ldF9kYXRhICpyZW1zZClcXG5uZXQvY29yZS9kZXYuYy02Njc2LXtcXG5uZXQvY29yZS9kZXYuYzo2Njc3OiNpZmRlZiBDT05GSUdfUlBTXFxubmV0L2NvcmUvZGV2LmMtNjY3OC1cXHR3aGlsZSAocmVtc2QpIHtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTY2OTI9c3RhdGljIHZvaWQgbmV0X3Jwc19hY3Rpb25fYW5kX2lycV9lbmFibGUoc3RydWN0IHNvZnRuZXRfZGF0YSAqc2QpXFxubmV0L2NvcmUvZGV2LmMtNjY5My17XFxubmV0L2NvcmUvZGV2LmM6NjY5NDojaWZkZWYgQ09ORklHX1JQU1xcbm5ldC9jb3JlL2Rldi5jLTY2OTUtXFx0c3RydWN0IHNvZnRuZXRfZGF0YSAqcmVtc2QgPSBzZC1cXHUwMDNlcnBzX2lwaV9saXN0O1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9NjcwOT1zdGF0aWMgYm9vbCBzZF9oYXNfcnBzX2lwaV93YWl0aW5nKHN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkKVxcbm5ldC9jb3JlL2Rldi5jLTY3MTAte1xcbm5ldC9jb3JlL2Rldi5jOjY3MTE6I2lmZGVmIENPTkZJR19SUFNcXG5uZXQvY29yZS9kZXYuYy02NzEyLVxcdHJldHVybiAhdXNlX2JhY2tsb2dfdGhyZWFkcygpIFxcdTAwMjZcXHUwMDI2IHNkLVxcdTAwM2VycHNfaXBpX2xpc3Q7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMjc4Mz1zdGF0aWMgaW50IGRldl9jcHVfZGVhZCh1bnNpZ25lZCBpbnQgb2xkY3B1KVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTI4MjktXFx0aWYgKCF1c2VfYmFja2xvZ190aHJlYWRzKCkpIHtcXG5uZXQvY29yZS9kZXYuYzoxMjgzMDojaWZkZWYgQ09ORklHX1JQU1xcbm5ldC9jb3JlL2Rldi5jLTEyODMxLVxcdFxcdHJlbXNkID0gb2xkc2QtXFx1MDAzZXJwc19pcGlfbGlzdDtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTEzMzA0PXN0YXRpYyBpbnQgX19pbml0IG5ldF9kZXZfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTMzNDEtXFx0XFx0c2QtXFx1MDAzZW91dHB1dF9xdWV1ZV90YWlscCA9IFxcdTAwMjZzZC1cXHUwMDNlb3V0cHV0X3F1ZXVlO1xcbm5ldC9jb3JlL2Rldi5jOjEzMzQyOiNpZmRlZiBDT05GSUdfUlBTXFxubmV0L2NvcmUvZGV2LmMtMTMzNDMtXFx0XFx0SU5JVF9DU0QoXFx1MDAyNnNkLVxcdTAwM2Vjc2QsIHJwc190cmlnZ2VyX3NvZnRpcnEsIHNkKTtcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jPTk1Mz1zdGF0aWMgY29uc3Qgc3RydWN0IHN5c2ZzX29wcyByeF9xdWV1ZV9zeXNmc19vcHMgPSB7XFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy05NTctXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6OTU4OiNpZmRlZiBDT05GSUdfUlBTXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtOTU5LXN0YXRpYyBzc2l6ZV90IHNob3dfcnBzX21hcChzdHJ1Y3QgbmV0ZGV2X3J4X3F1ZXVlICpxdWV1ZSwgY2hhciAqYnVmKVxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTEzMz1zdGF0aWMgc3RydWN0IHJ4X3F1ZXVlX2F0dHJpYnV0ZSBycHNfZGV2X2Zsb3dfdGFibGVfY250X2F0dHJpYnV0ZSBfX3JvX2FmdGVyX2luaXRcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTExMzUtXFx0XFx0IHNob3dfcnBzX2Rldl9mbG93X3RhYmxlX2NudCwgc3RvcmVfcnBzX2Rldl9mbG93X3RhYmxlX2NudCk7XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTEzNjojZW5kaWYgLyogQ09ORklHX1JQUyAqL1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTExMzctXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTEzOD1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcnhfcXVldWVfZGVmYXVsdF9hdHRyc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMTM5OiNpZmRlZiBDT05GSUdfUlBTXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTE0MC1cXHRcXHUwMDI2cnBzX2NwdXNfYXR0cmlidXRlLmF0dHIsXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0xMTQ3PXN0YXRpYyB2b2lkIHJ4X3F1ZXVlX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMTQ5LVxcdHN0cnVjdCBuZXRkZXZfcnhfcXVldWUgKnF1ZXVlID0gdG9fcnhfcXVldWUoa29iaik7XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTE1MDojaWZkZWYgQ09ORklHX1JQU1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTExNTEtXFx0cnBzX3RhZ19wdHIgdGFnX3B0cjtcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jPTExOTY9c3RhdGljIGludCByeF9xdWV1ZV9kZWZhdWx0X21hc2soc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTExOTgte1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjExOTk6I2lmIElTX0VOQUJMRUQoQ09ORklHX1JQUykgXFx1MDAyNlxcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfU1lTQ1RMKVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEyMDAtXFx0c3RydWN0IGNwdW1hc2sgKnJwc19kZWZhdWx0X21hc2s7XFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0xMjk2PW5ldF9yeF9xdWV1ZV91cGRhdGVfa29iamVjdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG9sZF9udW0sIGludCBuZXdfbnVtKVxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTMwMS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMzAyOiNpZm5kZWYgQ09ORklHX1JQU1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzMDMtXFx0aWYgKCFkZXYtXFx1MDAzZXN5c2ZzX3J4X3F1ZXVlX2dyb3VwKVxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTMzMj1zdGF0aWMgaW50IG5ldF9yeF9xdWV1ZV9jaGFuZ2Vfb3duZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG51bSxcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzMzgtXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTMzOTojaWZuZGVmIENPTkZJR19SUFNcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMzQwLVxcdGlmICghZGV2LVxcdTAwM2VzeXNmc19yeF9xdWV1ZV9ncm91cClcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTIwNTc9c3RhdGljIGludCBydG5sX2ZpbGxfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yMTI1LVxcdFxcdFxcdCBSRUFEX09OQ0UoZGV2LVxcdTAwM2VtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbikpIHx8XFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjEyNjojaWZkZWYgQ09ORklHX1JQU1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIxMjctXFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9OVU1fUlhfUVVFVUVTLFxcbi0tXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM9NTQ9RVhQT1JUX1NZTUJPTChzeXNjdGxfZGV2Y29uZl9pbmhlcml0X2luaXRfbmV0KTtcXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy01NS1cXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYzo1NjojaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0ZMT1dfTElNSVQpIHx8IElTX0VOQUJMRUQoQ09ORklHX1JQUylcXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy01Ny1zdGF0aWMgaW50IGR1bXBfY3B1bWFzayh2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zLFxcbi0tXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtOTgtXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6OTk6I2lmZGVmIENPTkZJR19SUFNcXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy0xMDAtXFxuLS1cXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYz0yMTQ9c3RhdGljIGludCBycHNfZmVhdF9sbGNfYWZmaW5pdHlfc3lzY3RsKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXFxuLS1cXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy0yMzktXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6MjQwOiNlbmRpZiAvKiBDT05GSUdfUlBTICovXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtMjQxLVxcbi0tXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM9NDU3PXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5ldF9jb3JlX3RhYmxlW10gPSB7XFxuLS1cXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy01NzYtXFx0fSxcXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYzo1Nzc6I2lmZGVmIENPTkZJR19SUFNcXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy01NzgtXFx0e1xcbi0tXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM9NzE2PXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5ldG5zX2NvcmVfdGFibGVbXSA9IHtcXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYzo3MTc6I2lmIElTX0VOQUJMRUQoQ09ORklHX1JQUylcXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy03MTgtXFx0e1xcbi0tXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM9ODYwPXN0YXRpYyBfX25ldF9leGl0IHZvaWQgc3lzY3RsX2NvcmVfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtODY2LVxcdEJVR19PTih0YmwgPT0gbmV0bnNfY29yZV90YWJsZSk7XFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6ODY3OiNpZiBJU19FTkFCTEVEKENPTkZJR19SUFMpXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtODY4LVxcdGtmcmVlKG5ldC1cXHUwMDNlY29yZS5ycHNfZGVmYXVsdF9tYXNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDM6MTI6MTYuMDgwNDkxMjVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTQyMDQ4NTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIENPTkZJR19SUFMgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHRoZSBjb2RlIEknbSBsb29raW5nIGF0IGhpbmdlcyBvbiBgQ09ORklHX1JQU2AuIEltbWVkaWF0ZWx5LCBteSBicmFpbiBmbGFncyBpdCBhcyBhIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUsIGFuZCBhIGJvb2xlYW4gb25lIGF0IHRoYXQuIFRpbWUgdG8gY29uZmlybSB0aGF0IGFzc3VtcHRpb24gYW5kIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGtub3cgd2hhdCBgQ09ORklHX1JQU2AgKmFjdHVhbGx5KiBjb250cm9scy4gVGltZSB0byBnbyBjaGVjayBpdHMgZGVmaW5pdGlvbiBpbiB0aGUgcmVsZXZhbnQgY29uZmlnIGZpbGVzIG9yIGRvY3VtZW50YXRpb24uIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzQ3LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDM6MTI6MjMuMDIyNTQxODYxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5ODE4ODQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBSUFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9Mjk0PWNvbmZpZyBNQVhfU0tCX0ZSQUdTXFxuLS1cXG5uZXQvS2NvbmZpZy0zMDUtXFxubmV0L0tjb25maWc6MzA2OmNvbmZpZyBSUFNcXG5uZXQvS2NvbmZpZy0zMDctXFx0Ym9vbCBcXFwiUmVjZWl2ZSBwYWNrZXQgc3RlZXJpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAzOjEyOjIzLjA3MjM2NDc4NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NjEwNTcyNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipJbnZlc3RpZ2F0aW5nIGBDT05GSUdfUlBTYCoqXG5cbk9rYXksIHNvIEkgc2VlIGBDT05GSUdfUlBTYCBpcyBkZWZpbmVkIHdpdGhpbiBgbmV0L0tjb25maWdgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdoZXJlIHRvIHN0YXJ0IGRpZ2dpbmcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIE5vdywgbXkgbmV4dCBtb3ZlIGlzIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBvciBmZWF0dXJlcyBhcmUgcmVxdWlyZWQgb3IgYWZmZWN0ZWQgYnkgYENPTkZJR19SUFNgLiBLbm93aW5nIGl0cyBkZXBlbmRlbmNpZXMgd2lsbCBoZWxwIG1lIGZ1bGx5IGdyYXNwIGl0cyBwdXJwb3NlIGFuZCBwb3RlbnRpYWwgaW1wYWN0IHdpdGhpbiB0aGUgbmV0d29yayBzdGFjay4gSXQncyB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaW4gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZyBvcHRpb24gZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk5NywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAzOjEyOjI2LjYzMzQyMzk1NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTA4NzEyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUlBTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9Mjk0PWNvbmZpZyBNQVhfU0tCX0ZSQUdTXFxuLS1cXG5uZXQvS2NvbmZpZy0zMDUtXFxubmV0L0tjb25maWc6MzA2OmNvbmZpZyBSUFNcXG5uZXQvS2NvbmZpZy0zMDctXFx0Ym9vbCBcXFwiUmVjZWl2ZSBwYWNrZXQgc3RlZXJpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAzOjEyOjI2LjcyNDUxNjI1NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxODAxNTYzOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiBteSBleHBlcmllbmNlLCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgbmV0L0tjb25maWdgIGZpbGUuIEl0J3MgdGhlIGNlbnRyYWwgaHViIGZvciBuZXR3b3JrLXJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBbmQsIGdpdmVuIHRoYXQgSSBhbSBpbiB0aGUgd2VlZHMsIEkgbmVlZCB0byBnZXQgdG8gdGhlIHJlbGV2YW50IHNlY3Rpb24gcXVpY2tseS4gSSBhbSBwcmV0dHkgc3VyZSBsaW5lIDMwNiB3aWxsIGdldCBtZSB3aGVyZSBJIG5lZWQgdG8gYmUuIExldCdzIHNlZSB3aGF0J3MgaW4gc3RvcmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI0NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAzOjEyOjMxLjkwNDY3NDg4M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMDA6XFx0XFx0ICBUaGlzIGhlbHBzIEJJRyBUQ1Agd29ya2xvYWRzLCBidXQgbWlnaHQgZXhwb3NlIGJ1Z3MgaW4gc29tZVxcbiAzMDE6XFx0XFx0ICBsZWdhY3kgZHJpdmVycy5cXG4gMzAyOlxcdFxcdCAgVGhpcyBhbHNvIGluY3JlYXNlcyBtZW1vcnkgb3ZlcmhlYWQgb2Ygc21hbGwgcGFja2V0cyxcXG4gMzAzOlxcdFxcdCAgYW5kIGluIGRyaXZlcnMgdXNpbmcgYnVpbGRfc2tiKCkuXFxuIDMwNDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IDE3LlxcbiAzMDU6XFx0XFxuIDMwNjpcXHRjb25maWcgUlBTXFxuIDMwNzpcXHRcXHRib29sIFxcXCJSZWNlaXZlIHBhY2tldCBzdGVlcmluZ1xcXCJcXG4gMzA4OlxcdFxcdGRlcGVuZHMgb24gU01QIFxcdTAwMjZcXHUwMDI2IFNZU0ZTXFxuIDMwOTpcXHRcXHRkZWZhdWx0IHlcXG4gMzEwOlxcdFxcdGhlbHBcXG4gMzExOlxcdFxcdCAgU29mdHdhcmUgcmVjZWl2ZSBzaWRlIHBhY2tldCBzdGVlcmluZyAoUlBTKSBkaXN0cmlidXRlcyB0aGVcXG4gMzEyOlxcdFxcdCAgbG9hZCBvZiByZWNlaXZlZCBwYWNrZXQgcHJvY2Vzc2luZyBhY3Jvc3MgbXVsdGlwbGUgQ1BVcy5cXG4gMzEzOlxcdFxcbiAzMTQ6XFx0Y29uZmlnIFJGU19BQ0NFTFxcbiAzMTU6XFx0XFx0Ym9vbCBcXFwiSGFyZHdhcmUgYWNjZWxlcmF0aW9uIG9mIFJGU1xcXCJcXG4gMzE2OlxcdFxcdGRlcGVuZHMgb24gUlBTXFxuIDMxNzpcXHRcXHRzZWxlY3QgQ1BVX1JNQVBcXG4gMzE4OlxcdFxcdGRlZmF1bHQgeVxcbiAzMTk6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMzoxMjozMS45MDQ3Mzk4NTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY4MjEzMDAyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJQUyBGbG93IENvbnRyb2wgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBgQ09ORklHX1JQU2AgaXMgc2V0IHRvICd5JyBieSBkZWZhdWx0LCBhbmQgaXQgcmVsaWVzIG9uIGJvdGggYFNNUGAgYW5kIGBTWVNGU2AsIHdoaWNoIG1ha2VzIGl0IHZlcnkgbGlrZWx5IHRvIGJlIGVuYWJsZWQgaW4gYSBzdGFuZGFyZCBjb25maWd1cmF0aW9uLiBUaGlzIHBhdGNoIHNlZW1zIHJlbGF0ZWQsIGJ1dCBpdCBhbHNvIG1lbnRpb25zIGBDT05GSUdfUkZTX0FDQ0VMYC4gV2FpdCwgdGhhdOKAmXMgbm90IHF1aXRlIHJpZ2h0LiBgcnBzX2xsY19jaGVja2AgaXNuJ3QgZ3VhcmRlZCBieSBgQ09ORklHX1JGU19BQ0NFTGAg4oCTIHRoYXQncyBhIGtleSBkZXRhaWwgdG8gbm90ZS4gTm93LCB0aGUgbW9yZSBpbXBvcnRhbnQgcGllY2VzLi4uIGBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoYCBhbmQgYHNvY2tfcnBzX3JlY29yZF9mbG93YCBoYXZlIGJlZW4gcHVsbGVkIG91dCBvZiB0aGUgaW5saW5lIGFuZCBtb3ZlZCBpbnRvIGBuZXQvY29yZS9kZXYuY2AuIENydWNpYWxseSwgdGhleSdyZSBleHBvcnRlZCBzeW1ib2xzIG5vdy5cblxuTGV0J3MgdHJhY2UgdGhpcyBsb2dpYy4gVGhlIGBycHNfbGxjX2NoZWNrYCBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgZnJvbSBgcnBzX3JlY29yZF9zb2NrX2Zsb3dgLCB3aGljaCwgaW50ZXJlc3RpbmdseSwgcmVzaWRlcyBpbiBgaW5jbHVkZS9uZXQvcnBzLmhgLiBUaGF0IG1ha2VzIGBycHNfcmVjb3JkX3NvY2tfZmxvd2AgYW4gaW5saW5lIGZ1bmN0aW9uLiBBbmQsIHNpbmNlIGl04oCZcyBpbmxpbmUsIGxldCdzIHNlZSB3aGVyZSBpdCBnZXRzIGNhbGxlZC4gRnJvbSBteSBnbGFuY2UgYXQgdGhlIGluY2x1ZGUgZmlsZXMsIGl0IGlzIGJlaW5nIGNhbGxlZCBmcm9tIGBfc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaGAgYW5kIGBfc29ja19ycHNfcmVjb3JkX2Zsb3dgLCB3aGljaCBhcmUgYWxzbyBkZWZpbmVkIGluIGBpbmNsdWRlL25ldC9ycHMuaGAuIFRoYXQgbWVhbnMgSSBzaG91bGQgcmVhbGx5IGRpZyBpbnRvIHRoYXQgaGVhZGVyIGZpbGUgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIExldCdzIHN0YXJ0IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Njg2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDM6MTI6MzcuNTg2ODcyMzEyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDE1NDcwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJycHNfcmVjb3JkX3NvY2tfZmxvd1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL25ldC9ycHMuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9ycHMuaD01OT1ib29sIHJwc19sbGNfY2hlY2sodTMyIG9sZF92YWwsIHUzMiBuZXdfdmFsKTtcXG5pbmNsdWRlL25ldC9ycHMuaC02MC1cXG5pbmNsdWRlL25ldC9ycHMuaDo2MTpzdGF0aWMgaW5saW5lIHZvaWQgcnBzX3JlY29yZF9zb2NrX2Zsb3cocnBzX3RhZ19wdHIgdGFnX3B0ciwgdTMyIGhhc2gpXFxuaW5jbHVkZS9uZXQvcnBzLmgtNjIte1xcbi0tXFxuaW5jbHVkZS9uZXQvcnBzLmg9ODA9c3RhdGljIGlubGluZSB2b2lkIF9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKF9fdTMyIGhhc2gpXFxuLS1cXG5pbmNsdWRlL25ldC9ycHMuaC04OC1cXHRpZiAodGFnX3B0cilcXG5pbmNsdWRlL25ldC9ycHMuaDo4OTpcXHRcXHRycHNfcmVjb3JkX3NvY2tfZmxvdyh0YWdfcHRyLCBoYXNoKTtcXG5pbmNsdWRlL25ldC9ycHMuaC05MC1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDM6MTI6MzcuNjMxMDMxNzU3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3Njc1Mjg1NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgX3NvY2tfcnBzX3JlY29yZF9mbG93YCoqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4gb24gdGhpcyBgX3NvY2tfcnBzX3JlY29yZF9mbG93YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgZXhhY3RseSBpdCdzIGRvaW5nLiBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBpdCdzIGludGVyYWN0aW5nIHdpdGg/IElzIGl0IHVwZGF0aW5nIGFueSBwZXItc29ja2V0IHN0YXRzPyBJIHdhbnQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgb3ZlcmFsbCBSUFMgKFJlY2VpdmUgUGFja2V0IFN0ZWVyaW5nKSBpbXBsZW1lbnRhdGlvbi4gSXMgaXQgcmVjb3JkaW5nIGZsb3dzIGZvciB0aGUgZ2l2ZW4gc29ja2V0PyBJcyBpdCBzZXR0aW5nIHVwIHJvdXRlcyBiYXNlZCBvbiB0aG9zZSBmbG93cz8gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBTcGVjaWZpY2FsbHksIGhvdyBkb2VzIHRoaXMgZnVuY3Rpb24gcmVsYXRlIHRvIHRoZSBkZWNpc2lvbiBwcm9jZXNzIGFyb3VuZCB3aGljaCBDUFUgYSBwYWNrZXQgaXMgYXNzaWduZWQgdG8/IElzIGl0IGEga2V5IGNvbXBvbmVudCBvZiB0aGUgaGFzaGluZyBhbmQgcmVkaXJlY3Rpb24gbG9naWMsIG9yIGlzIGl0IG1lcmVseSByZWNvcmRpbmcgdHJhZmZpYyBmb3Igb3RoZXIgcHVycG9zZXMgbGlrZSBtb25pdG9yaW5nIG9yIGxvYWQgYmFsYW5jaW5nPyBMZXQgbWUgcnVuIHRocm91Z2ggdGhlIGNvZGUgaW4gbXkgaGVhZCBhbmQgdmVyaWZ5IGhvdyB0aGUgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIG90aGVyIG1vZHVsZXMgaW4gdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0NjUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMzoxMjo0My4zOTg1NjI4MzdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwODUyNDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9zb2NrX3Jwc19yZWNvcmRfZmxvd1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL25ldC9ycHMuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9ycHMuaD02MT1zdGF0aWMgaW5saW5lIHZvaWQgcnBzX3JlY29yZF9zb2NrX2Zsb3cocnBzX3RhZ19wdHIgdGFnX3B0ciwgdTMyIGhhc2gpXFxuLS1cXG5pbmNsdWRlL25ldC9ycHMuaC03OS1cXG5pbmNsdWRlL25ldC9ycHMuaDo4MDpzdGF0aWMgaW5saW5lIHZvaWQgX3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goX191MzIgaGFzaClcXG5pbmNsdWRlL25ldC9ycHMuaC04MS17XFxuLS1cXG5pbmNsdWRlL25ldC9ycHMuaC05Mi1cXG5pbmNsdWRlL25ldC9ycHMuaDo5MzpzdGF0aWMgaW5saW5lIHZvaWQgX3NvY2tfcnBzX3JlY29yZF9mbG93KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG5pbmNsdWRlL25ldC9ycHMuaC05NC17XFxuLS1cXG5pbmNsdWRlL25ldC9ycHMuaC0xMDgtXFx0XFx0ICovXFxuaW5jbHVkZS9uZXQvcnBzLmg6MTA5OlxcdFxcdF9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKFJFQURfT05DRShzay1cXHUwMDNlc2tfcnhoYXNoKSk7XFxuaW5jbHVkZS9uZXQvcnBzLmgtMTEwLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDM6MTI6NDMuNDM5NDE5MTgyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NDUyNTExNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknbSB0aGlua2luZyBhYm91dCBpdDpcblxuKipBbmFseXppbmcgTmV0d29yayBTdGFjayBGbG93IFJlY29yZGluZyoqXG5cbkFscmlnaHQsIHNvIEkgc2VlIGBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoYCBhbmQgYHNvY2tfcnBzX3JlY29yZF9mbG93YC4gVGhvc2UgYXJlIHRoZSBtYWluIGVudHJ5IHBvaW50cywgdGhlIGhvb2tzIGludG8gdGhlIHN5c3RlbS4gVGhleSdyZSBjbGVhcmx5IGludGVuZGVkIHRvIHJlY29yZCBzb21ldGhpbmcgYWJvdXQgbmV0d29yayBmbG93cywgbGlrZWx5IGZvciBsb2FkIGJhbGFuY2luZyBvciB0cmFmZmljIHNoYXBpbmcsIGJhc2VkIG9uIHRoZWlyIG5hbWVzLiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzICp3aGVyZSogdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSAqdXNlZCogd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBUaGF0J3MgdGhlIGNyaXRpY2FsIGluZm9ybWF0aW9uLiBMZXQncyB0cmFjZSBiYWNrIHRoZSBjYWxscyB0byBgc29ja19ycHNfcmVjb3JkX2Zsb3dgLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgcmV2ZWFsIHRoZSBjb250ZXh0IGFuZCBwdXJwb3NlIG9mIHRoaXMgZmxvdyByZWNvcmRpbmcuIEknbGwgbmVlZCB0byBwaW5wb2ludCBhbGwgdGhlIHBsYWNlcyB3aXRoaW4gdGhlIGNvZGUgd2hlcmUgYHNvY2tfcnBzX3JlY29yZF9mbG93YCBpcyBpbnZva2VkLiBLbm93aW5nIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyBhbmQgdGhlaXIgcm9sZXMgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTU4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDM6MTI6NDcuODg0NjcyNDg4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjMxNTQxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb2NrX3Jwc19yZWNvcmRfZmxvd1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTUzMDY9c3RhdGljIHZvaWQgcnBzX3RyaWdnZXJfc29mdGlycSh2b2lkICpkYXRhKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTMxNi1cXG5uZXQvY29yZS9kZXYuYzo1MzE3OnZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKVxcbm5ldC9jb3JlL2Rldi5jLTUzMTgte1xcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTMyMi1cXG5uZXQvY29yZS9kZXYuYzo1MzIzOlxcdF9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKGhhc2gpO1xcbm5ldC9jb3JlL2Rldi5jLTUzMjQtI2VuZGlmXFxubmV0L2NvcmUvZGV2LmMtNTMyNS19XFxubmV0L2NvcmUvZGV2LmM6NTMyNjpFWFBPUlRfU1lNQk9MKHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2gpO1xcbm5ldC9jb3JlL2Rldi5jLTUzMjctXFxubmV0L2NvcmUvZGV2LmM6NTMyODp2b2lkIHNvY2tfcnBzX3JlY29yZF9mbG93KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG5uZXQvY29yZS9kZXYuYy01MzI5LXtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTUzMzMtXFxubmV0L2NvcmUvZGV2LmM6NTMzNDpcXHRfc29ja19ycHNfcmVjb3JkX2Zsb3coc2spO1xcbm5ldC9jb3JlL2Rldi5jLTUzMzUtI2VuZGlmXFxubmV0L2NvcmUvZGV2LmMtNTMzNi19XFxubmV0L2NvcmUvZGV2LmM6NTMzNzpFWFBPUlRfU1lNQk9MKHNvY2tfcnBzX3JlY29yZF9mbG93KTtcXG5uZXQvY29yZS9kZXYuYy01MzM4LVxcbi0tXFxubmV0L2lwdjQvYWZfaW5ldC5jPTc2MT12b2lkIF9faW5ldF9hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jaywgc3RydWN0IHNvY2sgKm5ld3NrKVxcbi0tXFxubmV0L2lwdjQvYWZfaW5ldC5jLTc2Ny1cXG5uZXQvaXB2NC9hZl9pbmV0LmM6NzY4OlxcdHNvY2tfcnBzX3JlY29yZF9mbG93KG5ld3NrKTtcXG5uZXQvaXB2NC9hZl9pbmV0LmMtNzY5LVxcdFdBUk5fT04oISgoMSBcXHUwMDNjXFx1MDAzYyBuZXdzay1cXHUwMDNlc2tfc3RhdGUpIFxcdTAwMjZcXG4tLVxcbm5ldC9pcHY0L2FmX2luZXQuYz04NDQ9aW50IGluZXRfc2VuZF9wcmVwYXJlKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvaXB2NC9hZl9pbmV0LmMtODQ1LXtcXG5uZXQvaXB2NC9hZl9pbmV0LmM6ODQ2OlxcdHNvY2tfcnBzX3JlY29yZF9mbG93KHNrKTtcXG5uZXQvaXB2NC9hZl9pbmV0LmMtODQ3LVxcbi0tXFxubmV0L2lwdjQvYWZfaW5ldC5jPTg4Nj1pbnQgaW5ldF9yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUsXFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmMtODkyLVxcdGlmIChsaWtlbHkoIShmbGFncyBcXHUwMDI2IE1TR19FUlJRVUVVRSkpKVxcbm5ldC9pcHY0L2FmX2luZXQuYzo4OTM6XFx0XFx0c29ja19ycHNfcmVjb3JkX2Zsb3coc2spO1xcbm5ldC9pcHY0L2FmX2luZXQuYy04OTQtXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz04MTI9c3NpemVfdCB0Y3Bfc3BsaWNlX3JlYWQoc3RydWN0IHNvY2tldCAqc29jaywgbG9mZl90ICpwcG9zLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtODI1LVxcbm5ldC9pcHY0L3RjcC5jOjgyNjpcXHRzb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XFxubmV0L2lwdjQvdGNwLmMtODI3LVxcdC8qXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0yMTk2PXN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3JlY2VpdmUoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMjIyMy1cXG5uZXQvaXB2NC90Y3AuYzoyMjI0OlxcdHNvY2tfcnBzX3JlY29yZF9mbG93KHNrKTtcXG5uZXQvaXB2NC90Y3AuYy0yMjI1LVxcbi0tXFxubmV0L2lwdjYvYWZfaW5ldDYuYz02NDY9aW50IGluZXQ2X3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSxcXG4tLVxcbm5ldC9pcHY2L2FmX2luZXQ2LmMtNjUyLVxcdGlmIChsaWtlbHkoIShmbGFncyBcXHUwMDI2IE1TR19FUlJRVUVVRSkpKVxcbm5ldC9pcHY2L2FmX2luZXQ2LmM6NjUzOlxcdFxcdHNvY2tfcnBzX3JlY29yZF9mbG93KHNrKTtcXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTY1NC1cXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTE4OTg9c3RhdGljIHZvaWQgbXB0Y3BfcnBzX3JlY29yZF9zdWJmbG93cyhjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTkwNy1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxOTA4OlxcdFxcdHNvY2tfcnBzX3JlY29yZF9mbG93KHNzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTkwOS1cXHR9XFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYz04Njk2PV9fcG9sbF90IHNjdHBfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jaywgcG9sbF90YWJsZSAqd2FpdClcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jLTg3MDMtXFxubmV0L3NjdHAvc29ja2V0LmM6ODcwNDpcXHRzb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XFxubmV0L3NjdHAvc29ja2V0LmMtODcwNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDM6MTI6NDcuOTQ2OTkyOTRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODM2MTU3MjA2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoIGFuZCBDb25maWd1cmF0aW9uIG9mIGBzb2NrX3Jwc19yZWNvcmRfZmxvd2AgYW5kIExMQyBBZmZpbml0eSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgc29ja19ycHNfcmVjb3JkX2Zsb3dgIGZ1bmN0aW9uIGFuZCBpdCdzIGxvb2tpbmcgcHJldHR5IHZlcnNhdGlsZS4gSXQncyBjYWxsZWQgaW4gYSBnb29kIHJhbmdlIG9mIGNyaXRpY2FsIG5ldHdvcmtpbmcgcGF0aHM6IGBpbmV0X3JlY3Ztc2dgLCBgaW5ldF9zZW5kX3ByZXBhcmVgLCB0aGUgYWNjZXB0IHJvdXRpbmVzLCBzcGxpY2UgYW5kIHplcm8tY29weSwgYW5kIGV2ZW4gYG1wdGNwX3Jwc19yZWNvcmRfc3ViZmxvd3NgIGFuZCBTQ1RQLiBUaGF0IHNjcmVhbXMgXCJhY3RpdmUgYW5kIHV0aWxpemVkXCIgdG8gbWUuXG5cblRoZSBmZWF0dXJlIGl0c2VsZiwgTExDIGFmZmluaXR5LCBpcyBnYXRlZCBieSB0aGUgYG5ldC5jb3JlLnJwc19mZWF0X2xsY19hZmZpbml0eWAgc3lzY3RsLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIuIEFoLCB3YWl0LCB0aGlzIGlzIGEgc3RhdGljIGtleSAqbW9kaWZpZWQqIGJ5IGEgc3lzY3RsLiBUaGF0J3MgYSBrZXkgZGV0YWlsOyBpdCBnaXZlcyB1cyBydW50aW1lIGNvbnRyb2wuIE5vdywgd2hhdCBkZXBlbmRlbmNpZXMgZG8gd2UgaGF2ZSB0byB3b3JyeSBhYm91dD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgY29uZmlncy5cblxuWWVwLCBgQ09ORklHX1JQU2AgaXMgZXNzZW50aWFsLCBhbmQgdGhhdCBkZXBlbmRzIG9uIGBTTVBgIGFuZCBgU1lTRlNgLiBHb29kLCBnb29kLiBXZSBhbHNvIG5lZWQgYENPTkZJR19TWVNDVExgIGZvciB0aGUgc3lzY3RsIGludGVyZmFjZSwgb2YgY291cnNlLiBJJ2xsIHRha2UgYSBxdWljayBsb29rIGluIGBuZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuY2Ag4oCTIHllcCwgdGhlIHN5c2N0bCBpcyB1bmRlciBhbiBgI2lmZGVmIENPTkZJR19SUFNgLiBTbywgd2UncmUgZ29vZCB0aGVyZS5cblxuVGhlIGNvcmUgbG9naWMgc2VlbXMgdG8gYmUgd2l0aGluIHRoZSBgcnBzX2xsY19jaGVja2AgZnVuY3Rpb24uIEl0IHRha2VzIGJvdGggb2xkIGFuZCBuZXcgdmFsdWVzLiBJdCBmaXJzdCBjaGVja3MgYHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2cnBzX2ZlYXRfbGxjX2FmZmluaXR5KWAuIElmIExMQyBhZmZpbml0eSBpcyBlbmFibGVkLCBpdCB0aGVuIGRvZXMgc29tZSBjaGVja3M6IG1ha2luZyBzdXJlIHRoZSBvbGQgQ1BVIElEIGlzIHZhbGlkLCBhbmQgdGhlIG9sZCBDUFUgaXMgbm90IGFjdGl2ZS4gRnVydGhlciwgaXQgbWFrZXMgc3VyZSB0aGUgb2xkIENQVSBpc24ndCBpbiB0aGUgY3VycmVudCBDUFUncyBDUFUgbWFzayBhbmQgaXQgdGhlbiBjaGVja3MgaWYgdGhlIG9sZCBDUFUgYW5kIHRoZSBuZXcgQ1BVIHNoYXJlIGEgY2FjaGUuXG5cbkl0IGxvb2tzIGxpa2UgdGhlIGBycHNfbGxjX2NoZWNrYCBmdW5jdGlvbiBpcyB0aGUgbWFpbiBhZGRpdGlvbiBoZXJlLiBgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaGAgYW5kIGBzb2NrX3Jwc19yZWNvcmRfZmxvd2AgYXJlIG5vbi1pbmxpbmVkIGFuZCBleHBvcnRlZCwgd2hpY2ggaXMgZ29vZCBmb3IgdHJhY2luZyBhbmQgZHluYW1pYyBhbmFseXNpcy4gQW5kIG9mIGNvdXJzZSwgdGhlIHN5c2N0bCBoYW5kbGVyIGlzIGBycHNfZmVhdF9sbGNfYWZmaW5pdHlfc3lzY3RsYC4gSXQgc2VlbXMgdGhlIGZvY3VzIGlzIHRoZSBuZXcgZnVuY3Rpb24sIGBycHNfbGxjX2NoZWNrYCwgd2hpY2ggaGFzIHNvbWUgc3BlY2lmaWMgY29uZGl0aW9ucy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGluIGBuZXQvY29yZS9kZXYuY2AgbW9yZSBjbG9zZWx5IGZvciBhbnkgb3RoZXIgbnVhbmNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0NDQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDM6MTI6NTYuMzA4NTY4MDc0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTc5MDY1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJycHNfbGxjX2NoZWNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTUxMTA9c3RhdGljIGludCBnZXRfcnBzX2NwdShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTIxMy0vKipcXG5uZXQvY29yZS9kZXYuYzo1MjE0OiAqIHJwc19sbGNfY2hlY2sgLSBkZXRlcm1pbmUgaWYgUlBTIGZsb3cgdGFibGUgc2hvdWxkIGJlIHVwZGF0ZWQuXFxubmV0L2NvcmUvZGV2LmMtNTIxNS0gKiBAb2xkX3ZhbDogcHJldmlvdXMgZmxvdyByZWNvcmQgdmFsdWUuXFxuLS1cXG5uZXQvY29yZS9kZXYuYy01MjE5LSAqL1xcbm5ldC9jb3JlL2Rldi5jOjUyMjA6Ym9vbCBycHNfbGxjX2NoZWNrKHUzMiBvbGRfdmFsLCB1MzIgbmV3X3ZhbClcXG5uZXQvY29yZS9kZXYuYy01MjIxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDM6MTI6NTYuMzUwMzY0MTg5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3MjMwOTY1MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSUFMgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIG5ldyBSUFMgaW1wbGVtZW50YXRpb24uIFRoZSBrZXkgZnVuY3Rpb25zIHNlZW0gdG8gYmUgYHJwc19sbGNfY2hlY2tgLCB3aGljaCBpcyB0aGUgY29yZSBsb2dpYywgYW5kIGBycHNfZmVhdF9sbGNfYWZmaW5pdHlfc3lzY3RsYCwgd2hpY2ggaGFuZGxlcyB0aGUgc3lzY3RsIGludGVyZmFjZS4gSSBhbHNvIHNlZSB0aGF0IGBzb2NrX3Jwc19yZWNvcmRfZmxvd2AgYW5kIGBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoYCBhcmUgdW4taW5saW5lZC5cblxuRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGlmIGBDT05GSUdfUlBTYCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuIEFoLCB5ZXMsIGl0J3MgYGRlZmF1bHQgeWAgaW4gYG5ldC9LY29uZmlnYCwgZ29vZC4gTm93LCB3aGVyZSBpcyB0aGUgc3lzY3RsIGRlZmluZWQ/IFJpZ2h0LCBpdCdzIGluIGBuZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuY2AuICBJIHNob3VsZCBjaGVjayB3aGV0aGVyIGBDT05GSUdfU1lTQ1RMYCBpcyBhbHNvIGEgcmVxdWlyZW1lbnQuIFllcywgaXQgbG9va3MgbGlrZSBpdCBpcy4gQnV0LCBmb3IgdGhlIGNvcmUgUlBTIGxvZ2ljIGl0c2VsZiwgYENPTkZJR19SUFNgIHNob3VsZCBiZSBzdWZmaWNpZW50LlxuXG5IYW5nIG9uLi4uIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBjYWxsZXJzIG9mIGBycHNfbGxjX2NoZWNrYC4gSXQgbG9va3MgbGlrZSBpdCdzIGNhbGxlZCBmcm9tIGBycHNfcmVjb3JkX3NvY2tfZmxvd2AsIHdoaWNoIGlzIGRlZmluZWQgaW4gYGluY2x1ZGUvbmV0L3Jwcy5oYC4gVGhhdCBtYWtlcyBzZW5zZS4gYHJwc19yZWNvcmRfc29ja19mbG93YCBpcyBpbiB0dXJuIGNhbGxlZCBieSBgX3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2hgIGFuZCBgX3NvY2tfcnBzX3JlY29yZF9mbG93YCwgd2hpY2ggYXJlIHRoZW4gdXNlZCBieSBgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaGAgYW5kIGBzb2NrX3Jwc19yZWNvcmRfZmxvd2AuIFNvLCByZWFsbHksIHRoZSBtYWluIGZ1bmN0aW9uIHRvIGFuYWx5emUgaGVyZSBpcyBpbmRlZWQgYHJwc19sbGNfY2hlY2tgLCBhbG9uZyB3aXRoIHRoZSBgcnBzX2ZlYXRfbGxjX2FmZmluaXR5X3N5c2N0bGAgc3lzY3RsIGhhbmRsZXIuXG5cbkxldCdzIGNoZWNrIHRoZSBzaWduYXR1cmUgb2YgYHJwc19sbGNfY2hlY2tgOiBgYm9vbCBycHNfbGxjX2NoZWNrKHUzMiBvbGRfdmFsLCB1MzIgbmV3X3ZhbClgLiBBbHJpZ2h0LiBOb3csIGlzIGl0IGV4cG9ydGVkPyBIbW0sIG5vLCBpdCBpc24ndC4gQnV0LCB3YWl0Li4uIGBycHNfcmVjb3JkX3NvY2tfZmxvd2AgaXMgaW5saW5lLCBzbyBgcnBzX2xsY19jaGVja2AgbXVzdCBiZSBleHBvcnRlZCwgb3RoZXJ3aXNlIGl0IGNvdWxkbid0IGJlIHVzZWQgYnkgbW9kdWxlcyBpZiBpdCBpcyB1c2VkIGludGVybmFsbHkuIE9rYXksIHRpbWUgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBleHBvcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2NTcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDM6MTM6MDUuMDczNDYyOTA5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjEwMTE3NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qcnBzX2xsY19jaGVja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9kZXYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDM6MTM6MDUuMTE1NTcxNjk1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMzA4NTk2MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSUFMgRmxvdyBSZWNvcmRpbmcgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIHNlZS4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGBycHNfcmVjb3JkX3NvY2tfZmxvd2AgaXMgZGVmaW5lZCBpbmxpbmUgd2l0aGluIGBpbmNsdWRlL25ldC9ycHMuaGAsIGFuZCBpdCBpbiB0dXJuIGNhbGxzIGBycHNfbGxjX2NoZWNrYC4gU28sIGlmIGEga2VybmVsIG1vZHVsZSB3ZXJlIHRvIGluY2x1ZGUgdGhhdCBoZWFkZXIgYW5kIHVzZSBgcnBzX3JlY29yZF9zb2NrX2Zsb3dgLCBpdCAqd291bGQqIGhhdmUgdG8gYWxzbyBsaW5rIGFnYWluc3QgdGhlIGRlZmluaXRpb24gb2YgYHJwc19sbGNfY2hlY2tgLiBUaGF0J3MgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcGVkIG91dC5cblxuQnV0IGhhbmcgb24sIHRoZXNlIGNoYW5nZXMgaGF2ZSB1bi1pbmxpbmVkIGBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoYCBhbmQgYHNvY2tfcnBzX3JlY29yZF9mbG93YC4gTGV0IG1lIHJlLWV4YW1pbmUgdGhlIHBhdGNoLi4uIGFoYSEgVGhleSdyZSBub3cgKm5vdCogaW5saW5lISBTbywgbW9kdWxlcyB0aGF0IGNhbGwgdGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUgY2FsbGluZyB0aGUgbm9uLWlubGluZSB2ZXJzaW9ucyB0aGF0IGFyZSBub3cgZXhwb3J0ZWQgYXMgc3ltYm9scy4gVGhhdCBtYWtlcyBzZW5zZS4gVGhlc2UgZnVuY3Rpb25zIGFyZSBub3cgZXhwbGljaXRseSBwYXJ0IG9mIHRoZSBzeW1ib2wgdGFibGUsIHNvIHRoZSBtb2R1bGUgbGlua2VyIHdpbGwgcmVzb2x2ZSB0aGVtIGR1cmluZyBidWlsZCB0aW1lLlxuXG5Ib3dldmVyLCBgcnBzX3JlY29yZF9zb2NrX2Zsb3dgICpyZW1haW5zKiBpbmxpbmUgd2l0aGluIGBpbmNsdWRlL25ldC9ycHMuaGAuIFRoYXQncyB0aGUgY3JpdGljYWwgcG9pbnQgSSBuZWVkIHRvIGNsYXJpZnkuIElzIGl0IGNhbGxlZCBmcm9tIGFueSBvdGhlciBsb2NhdGlvbiB0aGF0IG1pZ2h0IGNhdXNlIGRlcGVuZGVuY3kgaXNzdWVzPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGwgc2l0ZXMgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYWN0dWFsbHkgYSBzYWZlIGNoYW5nZSB0aGF0IGRvZXNuJ3QgaW50cm9kdWNlIHN1YnRsZSBicmVha2FnZSBkdWUgdG8gdGhlIGNoYW5nZSBpbiBpbmxpbmluZy4gVGhpcyBpcyBzb21ldGhpbmcgSSdsbCBuZWVkIHRvIGRpZyBpbnRvIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjA5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAzOjEzOjExLjQ0NjQzNDA5N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0MDA0NjMzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJycHNfcmVjb3JkX3NvY2tfZmxvd1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvcnBzLmg9NTk9Ym9vbCBycHNfbGxjX2NoZWNrKHUzMiBvbGRfdmFsLCB1MzIgbmV3X3ZhbCk7XFxuaW5jbHVkZS9uZXQvcnBzLmgtNjAtXFxuaW5jbHVkZS9uZXQvcnBzLmg6NjE6c3RhdGljIGlubGluZSB2b2lkIHJwc19yZWNvcmRfc29ja19mbG93KHJwc190YWdfcHRyIHRhZ19wdHIsIHUzMiBoYXNoKVxcbmluY2x1ZGUvbmV0L3Jwcy5oLTYyLXtcXG4tLVxcbmluY2x1ZGUvbmV0L3Jwcy5oPTgwPXN0YXRpYyBpbmxpbmUgdm9pZCBfc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKVxcbi0tXFxuaW5jbHVkZS9uZXQvcnBzLmgtODgtXFx0aWYgKHRhZ19wdHIpXFxuaW5jbHVkZS9uZXQvcnBzLmg6ODk6XFx0XFx0cnBzX3JlY29yZF9zb2NrX2Zsb3codGFnX3B0ciwgaGFzaCk7XFxuaW5jbHVkZS9uZXQvcnBzLmgtOTAtXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz01MTEwPXN0YXRpYyBpbnQgZ2V0X3Jwc19jcHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTUxNTQtXFx0XFx0LyogRmlyc3QgY2hlY2sgaW50byBnbG9iYWwgZmxvdyB0YWJsZSBpZiB0aGVyZSBpcyBhIG1hdGNoLlxcbm5ldC9jb3JlL2Rldi5jOjUxNTU6XFx0XFx0ICogVGhpcyBSRUFEX09OQ0UoKSBwYWlycyB3aXRoIFdSSVRFX09OQ0UoKSBmcm9tIHJwc19yZWNvcmRfc29ja19mbG93KCkuXFxubmV0L2NvcmUvZGV2LmMtNTE1Ni1cXHRcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDM6MTM6MTMuMDg2NDg0Njc0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMDcwMzk5NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJhY2luZyB0aGUgUlBTIEZsb3cgUmVjb3JkaW5nIEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYHJwc19yZWNvcmRfc29ja19mbG93YCDigJMgSSByZW1lbWJlciB0aGF0IGZ1bmN0aW9uLCBkZWFsaW5nIHdpdGggUmVjZWl2ZSBQYWNrZXQgU3RlZXJpbmcuIEknbSBwcmV0dHkgc3VyZSBpdCdzIG9ubHkgY2FsbGVkIGZyb20gYF9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoYC4gQW5kIHRoYXQncyBhY3R1YWxseSBpbmxpbmVkIGRpcmVjdGx5IGluIGBpbmNsdWRlL25ldC9ycHMuaGAuIEh1aCwgdGhhdCdzIGludGVyZXN0aW5nOyBpbmxpbmluZyBmb3IgcGVyZm9ybWFuY2UsIEknZCBndWVzcy5cblxuTm93LCBgX3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2hgLCB3aGljaCBJIGp1c3QgbWVudGlvbmVkLCBzZWVtcyB0byBiZSBjYWxsZWQgZnJvbSBgX3NvY2tfcnBzX3JlY29yZF9mbG93YC4gVGhhdCBvbmUncyBhbHNvIGlubGluZWQgaW4gdGhlIHNhbWUgaGVhZGVyIGZpbGUuIFdlJ3JlIGdldHRpbmcgZGVlcGVyIGludG8gdGhlIGNvcmUgbG9naWMuXG5cbkZpbmFsbHksIHRoZSByZWFsIGVudHJ5IHBvaW50cywgYF9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoYCBhbmQgYF9zb2NrX3Jwc19yZWNvcmRfZmxvd2AgYXJlIGNhbGxlZCBmcm9tIHRoZWlyIG5vbi11bmRlcnNjb3JlZCBjb3VudGVycGFydHMsIGBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoYCBhbmQgYHNvY2tfcnBzX3JlY29yZF9mbG93YCwgd2hpY2ggYXJlIGRlZmluZWQgaW4gYG5ldC9jb3JlL2Rldi5jYC4gTWFrZXMgc2Vuc2UsIHRoZSBkcml2ZXIgbGF5ZXIgY2FsbGluZyBpbnRvIHRoZSBSUFMgZnJhbWV3b3JrLlxuXG5CdXQgd2FpdCwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIEFyZSBgX3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2hgIGFuZCBgX3NvY2tfcnBzX3JlY29yZF9mbG93YCAqb25seSogY2FsbGVkIGZyb20gdGhvc2UgZnVuY3Rpb25zPyBJJ2QgYmV0dGVyIGNvbmZpcm0gdGhhdCB0aG9zZSBpbnRlcm5hbCBmdW5jdGlvbnMgYXJlIG5vdCBjYWxsZWQgZnJvbSBhbnl3aGVyZSBlbHNlLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHNuZWFreSBpbnRlcmFjdGlvbnMgSSdtIG1pc3NpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjM3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAzOjEzOjE5LjE5MzUyNzA0M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5ODA2NjM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfc29ja19ycHNfcmVjb3JkX2Zsb3dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3Jwcy5oPTYxPXN0YXRpYyBpbmxpbmUgdm9pZCBycHNfcmVjb3JkX3NvY2tfZmxvdyhycHNfdGFnX3B0ciB0YWdfcHRyLCB1MzIgaGFzaClcXG4tLVxcbmluY2x1ZGUvbmV0L3Jwcy5oLTc5LVxcbmluY2x1ZGUvbmV0L3Jwcy5oOjgwOnN0YXRpYyBpbmxpbmUgdm9pZCBfc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKVxcbmluY2x1ZGUvbmV0L3Jwcy5oLTgxLXtcXG4tLVxcbmluY2x1ZGUvbmV0L3Jwcy5oLTkyLVxcbmluY2x1ZGUvbmV0L3Jwcy5oOjkzOnN0YXRpYyBpbmxpbmUgdm9pZCBfc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbmluY2x1ZGUvbmV0L3Jwcy5oLTk0LXtcXG4tLVxcbmluY2x1ZGUvbmV0L3Jwcy5oLTEwOC1cXHRcXHQgKi9cXG5pbmNsdWRlL25ldC9ycHMuaDoxMDk6XFx0XFx0X3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19yeGhhc2gpKTtcXG5pbmNsdWRlL25ldC9ycHMuaC0xMTAtXFx0fVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTMxNz12b2lkIHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goX191MzIgaGFzaClcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTUzMjItXFxubmV0L2NvcmUvZGV2LmM6NTMyMzpcXHRfc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChoYXNoKTtcXG5uZXQvY29yZS9kZXYuYy01MzI0LSNlbmRpZlxcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTMyOD12b2lkIHNvY2tfcnBzX3JlY29yZF9mbG93KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTUzMzMtXFxubmV0L2NvcmUvZGV2LmM6NTMzNDpcXHRfc29ja19ycHNfcmVjb3JkX2Zsb3coc2spO1xcbm5ldC9jb3JlL2Rldi5jLTUzMzUtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAzOjEzOjIwLjg5MTU5NzIyM1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTg1MjUyNDE1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSUFMgTExDIEFmZmluaXR5IEFuYWx5c2lzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJbml0aWFsbHksIEkgd2FzIGZvY3VzaW5nIG9uIGhvdyBgcnBzX2xsY19jaGVja2AgaXMgY2FsbGVkIGFuZCBkaXNjb3ZlcmVkIGl0J3MgZWZmZWN0aXZlbHkgb25seSBjYWxsZWQgZnJvbSBgbmV0L2NvcmUvZGV2LmNgLiBIb3dldmVyLCBpdCdzIG5vdCBleHBvcnRlZCwgYnV0IGl0J3MgY2FsbGVkIGlubGluZSBmcm9tIGBycHNfcmVjb3JkX3NvY2tfZmxvd2AgaW4gYGluY2x1ZGUvbmV0L3Jwcy5oYC4gVGhhdCBtZWFucyBhbnkgbW9kdWxlIHRoYXQgaW5jbHVkZXMgYHJwcy5oYCAqY291bGQqIHNlZSBpdCwgYnV0IG5vIG1vZHVsZSAqYWN0dWFsbHkqIGNhbGxzIGl0LCBwcmV2ZW50aW5nIGxpbmtlciBlcnJvcnMuICBBaCwgYnV0IGBycHNfZmVhdF9sbGNfYWZmaW5pdHlgICppcyogZXhwb3J0ZWQhXG5cblNvLCB0aGUga2V5IGZ1bmN0aW9ucyB0byBleGFtaW5lIGFyZSBkZWZpbml0ZWx5IGBycHNfbGxjX2NoZWNrYCwgYHJwc19mZWF0X2xsY19hZmZpbml0eV9zeXNjdGxgLCBgc29ja19ycHNfcmVjb3JkX2Zsb3dgLCBhbmQgYHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2hgLiBBbHRob3VnaCBgc29ja19ycHNfcmVjb3JkX2Zsb3dgIGFuZCBgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaGAgYXJlIGp1c3Qgd3JhcHBlcnMsIHRoZSBjb3JlIGxvZ2ljIHJlc2lkZXMgaW4gYHJwc19sbGNfY2hlY2tgIGFuZCBgcnBzX2ZlYXRfbGxjX2FmZmluaXR5X3N5c2N0bGAuIE5vdywgaXMgYHJwc19sbGNfY2hlY2tgIGV2ZW4gKnJlYWNoYWJsZSo/IFllcywgaXQncyByZWFjaGFibGUgaWYgYHJmc19pc19uZWVkZWQoKWAgaXMgdHJ1ZSwgd2hpY2ggY2hlY2tzIGBzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnJmc19uZWVkZWQpYC4gYHJmc19uZWVkZWRgIGJlY29tZXMgZW5hYmxlZCB3aGVuIGBuZXQuY29yZS5ycHNfc29ja19mbG93X2VudHJpZXNgIGlzIHNldCB0byBhIHZhbHVlIGdyZWF0ZXIgdGhhbiAwLiAgVGhlcmVmb3JlLCB0byBleGVyY2lzZSB0aGlzLCB3ZSBuZWVkIGBuZXQuY29yZS5ycHNfc29ja19mbG93X2VudHJpZXMgXHUwMDNlIDBgIGFuZCwgdG8gdGVzdCB0aGUgbmV3IExMQyBhZmZpbml0eSBsb2dpYywgYG5ldC5jb3JlLnJwc19mZWF0X2xsY19hZmZpbml0eSA9IDFgLiAgQWxsIG9mIHRoaXMgaXMgYWNjZXNzaWJsZSB0aHJvdWdoIHN5c2N0bHMgYW5kLCBvZiBjb3Vyc2UsIHJlZ3VsYXIgbmV0d29yayB0cmFmZmljLlxuXG5MZXQncyBxdWlja2x5IGNvbmZpcm0gdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWdzLiBgQ09ORklHX1JQU2AgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCBhbmQgYENPTkZJR19TWVNDVExgIHRvby4gU28sIG5vIHNwZWNpYWwgY29uZmlncyBhcmUgbmVlZGVkIGFsdGhvdWdoIGBSUFNgIGlzIGFuIG9wdGlvbiB0byBzcGVjaWZ5LiBObyBvdGhlciByZXF1aXJlZCBjb25maWdzLiBgQ09ORklHX1JGU19BQ0NFTGAgaXMgbm90IHJlcXVpcmVkLCBhbHRob3VnaCBgQ09ORklHX1NNUGAgKmlzKiByZXF1aXJlZCBmb3IgYENPTkZJR19SUFNgLlxuXG5MZXQncyByZXZpc2l0IGBycHNfbGxjX2NoZWNrYCBpbiBgbmV0L2NvcmUvZGV2LmNgLiBJdCBoYXMgYSBjb25kaXRpb25hbCBiYXNlZCBvbiBgcnBzX2ZlYXRfbGxjX2FmZmluaXR5YCBiZWluZyBlbmFibGVkLiBUaGlzIGlzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBhbmQgcmlwZSBmb3IgZnV6emluZy5cblxuTXkgZm9jdXMgc2hvdWxkIGJlIG9uIGZ1enppbmcgdGhlIGZvbGxvd2luZyBzeW1ib2xzOiBgcnBzX2xsY19jaGVja2AgYW5kIGBycHNfZmVhdF9sbGNfYWZmaW5pdHlfc3lzY3RsYC4gIEkgZGlkIGNvbnNpZGVyIGBzb2NrX3Jwc19yZWNvcmRfZmxvd2AgYW5kIGBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoYCBidXQgdGhvc2UgYXJlIGhvdC1wYXRoIGZ1bmN0aW9ucywgYW5kIHRoZSBpbnN0cnVjdGlvbnMgYWR2aXNlIGFnYWluc3QgbGlzdGluZyB0aG9zZS4gU28gdGhhdCBsZWF2ZXMgYHJwc19sbGNfY2hlY2tgIGFuZCBgcnBzX2ZlYXRfbGxjX2FmZmluaXR5X3N5c2N0bGAuICBIb3dldmVyLCBgcnBzX2xsY19jaGVja2AgKmlzKiBjYWxsZWQgb24gZXZlcnkgZmxvdyByZWNvcmQgdXBkYXRlLCBsaWtlIG9uIGByZWN2bXNnYCwgYW5kIGBzZW5kbXNnYCBjYWxscy4gIEl0J3MgdGhlIGNvcmUgbG9naWMgb2YgdGhlIHBhdGNoLCBzbyBJIG5lZWQgdG8gaW5jbHVkZSBpdCBmb3IgdGhlIGZ1enppbmcgYW5hbHlzaXMuICBDaGVja2luZywgaXQncyBub3Qgc3RhdGljLCBtZWFuaW5nIGl0IGhhcyBpdHMgb3duIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLlxuXG5UaGVyZWZvcmUsIHRoZSBjb25maWcgaXMgc2ltcGx5OiBgUlBTYC5cblxuVGhlIHJlYXNvbmluZyBpcyB0aGF0IHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzeXNjdGwgKGBuZXQuY29yZS5ycHNfZmVhdF9sbGNfYWZmaW5pdHlgKSBhbmQgYSBuZXcgZnVuY3Rpb24gKGBycHNfbGxjX2NoZWNrYCkgdG8gb3B0aW1pemUgUlBTIGZsb3cgdGFibGUgdXBkYXRlcyBiYXNlZCBvbiBMTEMgYWZmaW5pdHkuIFRoaXMgY2xlYXJseSB0b3VjaGVzIGNvcmUgbmV0d29ya2luZyBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSBzeXNjdGwgY29uZmlndXJhdGlvbiBhbmQgcmVndWxhciBuZXR3b3JrIHRyYWZmaWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTY5LCJPdXRwdXRUb2tlbnMiOjEyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDM6MTM6MzYuNzQ0MTIzNTMzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM4MDIyNDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlJQU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJwc19sbGNfY2hlY2tcIixcbiAgICBcInJwc19mZWF0X2xsY19hZmZpbml0eV9zeXNjdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN5c2N0bCBgbmV0LmNvcmUucnBzX2ZlYXRfbGxjX2FmZmluaXR5YCBhbmQgYSBuZXcgZnVuY3Rpb24gYHJwc19sbGNfY2hlY2tgIHRvIG9wdGltaXplIFJQUyAoUmVjZWl2ZSBQYWNrZXQgU3RlZXJpbmcpIGZsb3cgdGFibGUgdXBkYXRlcyBiYXNlZCBvbiBMTEMgKExhc3QgTGV2ZWwgQ2FjaGUpIGFmZmluaXR5LiBUaGlzIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSBzeXNjdGwgY29uZmlndXJhdGlvbiBhbmQgbm9ybWFsIG5ldHdvcmsgdHJhZmZpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSUFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJycHNfbGxjX2NoZWNrXCIsXG4gICAgXCJycHNfZmVhdF9sbGNfYWZmaW5pdHlfc3lzY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzeXNjdGwgYG5ldC5jb3JlLnJwc19mZWF0X2xsY19hZmZpbml0eWAgYW5kIGEgbmV3IGZ1bmN0aW9uIGBycHNfbGxjX2NoZWNrYCB0byBvcHRpbWl6ZSBSUFMgKFJlY2VpdmUgUGFja2V0IFN0ZWVyaW5nKSBmbG93IHRhYmxlIHVwZGF0ZXMgYmFzZWQgb24gTExDIChMYXN0IExldmVsIENhY2hlKSBhZmZpbml0eS4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgc3lzY3RsIGNvbmZpZ3VyYXRpb24gYW5kIG5vcm1hbCBuZXR3b3JrIHRyYWZmaWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow88cbn[1] Phase: Succeeded StartedAt: 2026-08-04 03:13:48 +0000 UTC FinishedAt: 2026-08-04 03:13:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88cbn[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-04 03:13:48 +0000 UTC FinishedAt: 2026-08-04 03:13:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88cbn[2] Phase: Succeeded StartedAt: 2026-08-04 03:13:48 +0000 UTC FinishedAt: 2026-08-04 06:55:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88cbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"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"],"focus":["net"],"focus_symbols":["rps_llc_check","rps_feat_llc_affinity_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"series_id":"93c4712b-9161-4ac5-b236-63af73f8abbe","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-04 03:13:48 +0000 UTC FinishedAt: 2026-08-04 06:55:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"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"],"focus":["net"],"focus_symbols":["rps_llc_check","rps_feat_llc_affinity_sysctl"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"series_id":"93c4712b-9161-4ac5-b236-63af73f8abbe","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-workflow88cbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"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"],"focus":["net"],"focus_symbols":["rps_llc_check","rps_feat_llc_affinity_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"series_id":"93c4712b-9161-4ac5-b236-63af73f8abbe","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-04 03:13:48 +0000 UTC FinishedAt: 2026-08-04 03:13:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88cbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"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"],"focus":["net"],"focus_symbols":["rps_llc_check","rps_feat_llc_affinity_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"series_id":"93c4712b-9161-4ac5-b236-63af73f8abbe","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-04 03:13:48 +0000 UTC FinishedAt: 2026-08-04 03:13:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"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-workflow88cbn/series-workflow88cbn-convert-artifact-1888693112/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow88cbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"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"],"focus":["net"],"focus_symbols":["rps_llc_check","rps_feat_llc_affinity_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"series_id":"93c4712b-9161-4ac5-b236-63af73f8abbe","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-04 03:13:58 +0000 UTC FinishedAt: 2026-08-04 03:32:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88cbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"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"],"focus":["net"],"focus_symbols":["rps_llc_check","rps_feat_llc_affinity_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"series_id":"93c4712b-9161-4ac5-b236-63af73f8abbe","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-04 03:13:58 +0000 UTC FinishedAt: 2026-08-04 03:32:00 +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:*ae94a4f3-1fb4-49d8-8314-d63c364df6ed,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-workflow88cbn/series-workflow88cbn-convert-artifact-1888693112/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": "c9a6cc19-384d-4485-a2ec-b49405ab1e76", "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-workflow88cbn/series-workflow88cbn-build-action-1225322542/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow88cbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"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"],"focus":["net"],"focus_symbols":["rps_llc_check","rps_feat_llc_affinity_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"series_id":"93c4712b-9161-4ac5-b236-63af73f8abbe","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-04 03:13:58 +0000 UTC FinishedAt: 2026-08-04 03:31:50 +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:*ae94a4f3-1fb4-49d8-8314-d63c364df6ed,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-workflow88cbn/series-workflow88cbn-convert-artifact-1888693112/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": "c9a6cc19-384d-4485-a2ec-b49405ab1e76", "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-workflow88cbn/series-workflow88cbn-build-action-1225322542/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow88cbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"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"],"focus":["net"],"focus_symbols":["rps_llc_check","rps_feat_llc_affinity_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"series_id":"93c4712b-9161-4ac5-b236-63af73f8abbe","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-04 03:32:00 +0000 UTC FinishedAt: 2026-08-04 03:32:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88cbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"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"],"focus":["net"],"focus_symbols":["rps_llc_check","rps_feat_llc_affinity_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"series_id":"93c4712b-9161-4ac5-b236-63af73f8abbe","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-04 03:32:00 +0000 UTC FinishedAt: 2026-08-04 03:32:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88cbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"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"],"focus":["net"],"focus_symbols":["rps_llc_check","rps_feat_llc_affinity_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"series_id":"93c4712b-9161-4ac5-b236-63af73f8abbe","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-04 03:32:00 +0000 UTC FinishedAt: 2026-08-04 03:32:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88cbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"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"],"focus":["net"],"focus_symbols":["rps_llc_check","rps_feat_llc_affinity_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"series_id":"93c4712b-9161-4ac5-b236-63af73f8abbe","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-04 03:32:00 +0000 UTC FinishedAt: 2026-08-04 03:32:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"series_id":"93c4712b-9161-4ac5-b236-63af73f8abbe","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-workflow88cbn/series-workflow88cbn-convert-artifact-2813240543/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow88cbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"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"],"focus":["net"],"focus_symbols":["rps_llc_check","rps_feat_llc_affinity_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"series_id":"93c4712b-9161-4ac5-b236-63af73f8abbe","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-04 03:32:10 +0000 UTC FinishedAt: 2026-08-04 03:34:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88cbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"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"],"focus":["net"],"focus_symbols":["rps_llc_check","rps_feat_llc_affinity_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"series_id":"93c4712b-9161-4ac5-b236-63af73f8abbe","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-04 03:32:10 +0000 UTC FinishedAt: 2026-08-04 03:33:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c9a6cc19-384d-4485-a2ec-b49405ab1e76,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-workflow88cbn/series-workflow88cbn-build-action-1225322542/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-workflow88cbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"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"],"focus":["net"],"focus_symbols":["rps_llc_check","rps_feat_llc_affinity_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"series_id":"93c4712b-9161-4ac5-b236-63af73f8abbe","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-04 03:34:09 +0000 UTC FinishedAt: 2026-08-04 03:34:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88cbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"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"],"focus":["net"],"focus_symbols":["rps_llc_check","rps_feat_llc_affinity_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"series_id":"93c4712b-9161-4ac5-b236-63af73f8abbe","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-04 03:34:09 +0000 UTC FinishedAt: 2026-08-04 03:34:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88cbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"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"],"focus":["net"],"focus_symbols":["rps_llc_check","rps_feat_llc_affinity_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"series_id":"93c4712b-9161-4ac5-b236-63af73f8abbe","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-04 03:34:09 +0000 UTC FinishedAt: 2026-08-04 03:52:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88cbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"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"],"focus":["net"],"focus_symbols":["rps_llc_check","rps_feat_llc_affinity_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"series_id":"93c4712b-9161-4ac5-b236-63af73f8abbe","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-04 03:34:09 +0000 UTC FinishedAt: 2026-08-04 03:52:12 +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:*ae94a4f3-1fb4-49d8-8314-d63c364df6ed,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-workflow88cbn/series-workflow88cbn-convert-artifact-2813240543/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": "ea04a479-57e8-4686-abd3-5c27cd0c26d8", "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-workflow88cbn/series-workflow88cbn-build-action-4152308339/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow88cbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"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"],"focus":["net"],"focus_symbols":["rps_llc_check","rps_feat_llc_affinity_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"series_id":"93c4712b-9161-4ac5-b236-63af73f8abbe","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-04 03:34:09 +0000 UTC FinishedAt: 2026-08-04 03:52:02 +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:*ae94a4f3-1fb4-49d8-8314-d63c364df6ed,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-workflow88cbn/series-workflow88cbn-convert-artifact-2813240543/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": "ea04a479-57e8-4686-abd3-5c27cd0c26d8", "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-workflow88cbn/series-workflow88cbn-build-action-4152308339/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow88cbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"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"],"focus":["net"],"focus_symbols":["rps_llc_check","rps_feat_llc_affinity_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"series_id":"93c4712b-9161-4ac5-b236-63af73f8abbe","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-04 03:52:12 +0000 UTC FinishedAt: 2026-08-04 03:52:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88cbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"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"],"focus":["net"],"focus_symbols":["rps_llc_check","rps_feat_llc_affinity_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"series_id":"93c4712b-9161-4ac5-b236-63af73f8abbe","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-04 03:52:12 +0000 UTC FinishedAt: 2026-08-04 03:52:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88cbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"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"],"focus":["net"],"focus_symbols":["rps_llc_check","rps_feat_llc_affinity_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"series_id":"93c4712b-9161-4ac5-b236-63af73f8abbe","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-04 03:52:12 +0000 UTC FinishedAt: 2026-08-04 03:54:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88cbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"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"],"focus":["net"],"focus_symbols":["rps_llc_check","rps_feat_llc_affinity_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"series_id":"93c4712b-9161-4ac5-b236-63af73f8abbe","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-04 03:52:12 +0000 UTC FinishedAt: 2026-08-04 03:54:00 +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:*ea04a479-57e8-4686-abd3-5c27cd0c26d8,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-workflow88cbn/series-workflow88cbn-build-action-4152308339/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-workflow88cbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"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"],"focus":["net"],"focus_symbols":["rps_llc_check","rps_feat_llc_affinity_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"series_id":"93c4712b-9161-4ac5-b236-63af73f8abbe","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-04 03:54:10 +0000 UTC FinishedAt: 2026-08-04 06:55:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88cbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"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"],"focus":["net"],"focus_symbols":["rps_llc_check","rps_feat_llc_affinity_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"series_id":"93c4712b-9161-4ac5-b236-63af73f8abbe","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-04 03:54:10 +0000 UTC FinishedAt: 2026-08-04 06:55:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rps_llc_check","rps_feat_llc_affinity_sysctl"],"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:*c9a6cc19-384d-4485-a2ec-b49405ab1e76,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ea04a479-57e8-4686-abd3-5c27cd0c26d8,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-workflow88cbn/series-workflow88cbn-build-action-1225322542/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-workflow88cbn/series-workflow88cbn-build-action-4152308339/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow88cbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"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"],"focus":["net"],"focus_symbols":["rps_llc_check","rps_feat_llc_affinity_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"series_id":"93c4712b-9161-4ac5-b236-63af73f8abbe","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-04 03:54:10 +0000 UTC FinishedAt: 2026-08-04 03:54:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88cbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"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"],"focus":["net"],"focus_symbols":["rps_llc_check","rps_feat_llc_affinity_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"series_id":"93c4712b-9161-4ac5-b236-63af73f8abbe","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-04 03:54:10 +0000 UTC FinishedAt: 2026-08-04 03:54:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rps_llc_check","rps_feat_llc_affinity_sysctl"],"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-workflow88cbn/series-workflow88cbn-convert-artifact-1745797624/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow88cbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"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"],"focus":["net"],"focus_symbols":["rps_llc_check","rps_feat_llc_affinity_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"series_id":"93c4712b-9161-4ac5-b236-63af73f8abbe","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-04 03:54:10 +0000 UTC FinishedAt: 2026-08-04 03:54:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88cbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"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"],"focus":["net"],"focus_symbols":["rps_llc_check","rps_feat_llc_affinity_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"series_id":"93c4712b-9161-4ac5-b236-63af73f8abbe","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-04 03:54:10 +0000 UTC FinishedAt: 2026-08-04 03:54:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88cbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"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"],"focus":["net"],"focus_symbols":["rps_llc_check","rps_feat_llc_affinity_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"series_id":"93c4712b-9161-4ac5-b236-63af73f8abbe","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-04 03:54:11 +0000 UTC FinishedAt: 2026-08-04 03:54:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88cbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"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"],"focus":["net"],"focus_symbols":["rps_llc_check","rps_feat_llc_affinity_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"series_id":"93c4712b-9161-4ac5-b236-63af73f8abbe","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-04 03:54:21 +0000 UTC FinishedAt: 2026-08-04 06:55:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88cbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"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"],"focus":["net"],"focus_symbols":["rps_llc_check","rps_feat_llc_affinity_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f5dc19f46f4bd0e104c9a4da2f0a912cdf3bd86","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS"],"series_id":"93c4712b-9161-4ac5-b236-63af73f8abbe","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-04 03:54:21 +0000 UTC FinishedAt: 2026-08-04 06:55:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c9a6cc19-384d-4485-a2ec-b49405ab1e76,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ea04a479-57e8-4686-abd3-5c27cd0c26d8,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-workflow88cbn/series-workflow88cbn-build-action-1225322542/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-workflow88cbn/series-workflow88cbn-build-action-4152308339/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-workflow88cbn/series-workflow88cbn-convert-artifact-1745797624/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,}