Name: series-workflowkff4t Phase: Succeeded StartedAt: 2026-07-13 18:28:45 +0000 UTC FinishedAt: 2026-07-13 23:22:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkff4t[0] Phase: Succeeded StartedAt: 2026-07-13 18:28:45 +0000 UTC FinishedAt: 2026-07-13 18:55:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkff4t[0].run-triage Phase: Succeeded StartedAt: 2026-07-13 18:28:45 +0000 UTC FinishedAt: 2026-07-13 18:55:40 +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": "f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP", "IPV6", "MPTCP_IPV6" ], "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": "f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP", "IPV6", "MPTCP_IPV6" ], "series_id": "45cfca61-f372-4c92-b8fa-022b797bbd55" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mptcp_setsockopt_v6_set_tclass", "mptcp_setsockopt_v6", "mptcp_getsockopt_v6" ], "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+CgkJCTx0ZD4yMDI2LzA3LzEzIDE4OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7TVBUQ1BfSVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzcyYjMzQ7LAogICAgJiMzNDttcHRjcF9zZXRzb2Nrb3B0X3Y2JiMzNDssCiAgICAmIzM0O21wdGNwX2dldHNvY2tvcHRfdjYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBzZXR0aW5nIGFuZCBnZXR0aW5nIHRoZSBJUFY2X1RDTEFTUyBzb2NrZXQgb3B0aW9uIG9uIE1QVENQIHNvY2tldHMuIFRoaXMgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGNvZGUgaW4gdGhlIE1QVENQIHNvY2tldCBvcHRpb25zIGhhbmRsaW5nIGxvZ2ljLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgaGFuZGxlcyB2YXJpb3VzIGlucHV0cyBhbmQgc3ViZmxvdyBzdGF0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTg6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmZTdhNjUyMjdjMDIxYmEzZGUzM2MwZTY4OGRmOTU5NzdhM2ViNTc0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMTMgMTg6NTM6MzQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3NvY2tvcHQuYyBiL25ldC9tcHRjcC9zb2Nrb3B0LmNcbmluZGV4IGZjZjZmZWIyYTllYjVkLi4xYjgzYmJhMGI1OGUwNSAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9zb2Nrb3B0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9zb2Nrb3B0LmNcbkBAIC0zOTQsNiAmIzQzOzM5NCwzOSBAQCBzdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfc29sX3NvY2tldChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbiBcdHJldHVybiAtRU9QTk9UU1VQUDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxuJiM0MztcdFx0XHRcdFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuJiM0Mzt7XG4mIzQzOyNpZiAhSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbiYjNDM7XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzOyNlbHNlXG4mIzQzO1x0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdztcbiYjNDM7XHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltc2s7XG4mIzQzO1x0aW50IGVyciwgdmFsO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBpcHY2X3NldHNvY2tvcHQoc2ssIFNPTF9JUFY2LCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4mIzQzO1xuJiM0MztcdGlmIChlcnIgIT0gMClcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGxvY2tfc29jayhzayk7XG4mIzQzO1x0c29ja29wdF9zZXFfaW5jKG1zayk7XG4mIzQzO1x0dmFsID0gUkVBRF9PTkNFKGluZXQ2X3NrKHNrKS1cdTAwM2V0Y2xhc3MpO1xuJiM0MztcdG1wdGNwX2Zvcl9lYWNoX3N1YmZsb3cobXNrLCBzdWJmbG93KSB7XG4mIzQzO1x0XHRzdHJ1Y3Qgc29jayAqc3NrID0gbXB0Y3Bfc3ViZmxvd190Y3Bfc29jayhzdWJmbG93KTtcbiYjNDM7XHRcdGJvb2wgc2xvdztcbiYjNDM7XG4mIzQzO1x0XHRzbG93ID0gbG9ja19zb2NrX2Zhc3Qoc3NrKTtcbiYjNDM7XHRcdGluZXQ2X3NrKHNzayktXHUwMDNldGNsYXNzID0gdmFsO1xuJiM0MztcdFx0c2tfZHN0X3Jlc2V0KHNzayk7XG4mIzQzO1x0XHR1bmxvY2tfc29ja19mYXN0KHNzaywgc2xvdyk7XG4mIzQzO1x0fVxuJiM0MztcdHJlbGVhc2Vfc29jayhzayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MzsjZW5kaWZcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfdjYoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsXG4gXHRcdFx0ICAgICAgIHNvY2twdHJfdCBvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4pXG4ge1xuQEAgLTQzNiw2ICYjNDM7NDY5LDggQEAgc3RhdGljIGludCBtcHRjcF9zZXRzb2Nrb3B0X3Y2KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxuIFxuIFx0XHRyZWxlYXNlX3NvY2soc2spO1xuIFx0XHRicmVhaztcbiYjNDM7XHRjYXNlIElQVjZfVENMQVNTOlxuJiM0MztcdFx0cmV0dXJuIG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzcyhtc2ssIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcbiBcdH1cbiBcbiBcdHJldHVybiByZXQ7XG5AQCAtMTQ4NSw2ICYjNDM7MTUyMCw5IEBAIHN0YXRpYyBpbnQgbXB0Y3BfZ2V0c29ja29wdF92NihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbiBcdHN0cnVjdCBzb2NrICpzayA9ICh2b2lkICopbXNrO1xuIFxuIFx0c3dpdGNoIChvcHRuYW1lKSB7XG4mIzQzO1x0Y2FzZSBJUFY2X1RDTEFTUzpcbiYjNDM7XHRcdHJldHVybiBtcHRjcF9wdXRfaW50X29wdGlvbihtc2ssIG9wdHZhbCwgb3B0bGVuLFxuJiM0MztcdFx0XHRcdFx0ICAgIFJFQURfT05DRShpbmV0Nl9zayhzayktXHUwMDNldGNsYXNzKSk7XG4gXHRjYXNlIElQVjZfVjZPTkxZOlxuIFx0XHRyZXR1cm4gbXB0Y3BfcHV0X2ludF9vcHRpb24obXNrLCBvcHR2YWwsIG9wdGxlbixcbiBcdFx0XHRcdFx0ICAgIHNrLVx1MDAzZXNrX2lwdjZvbmx5KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxODo1MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNUFRDUCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O01QVENQX0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3MmIzM0OywKICAgICYjMzQ7bXB0Y3Bfc2V0c29ja29wdF92NiYjMzQ7LAogICAgJiMzNDttcHRjcF9nZXRzb2Nrb3B0X3Y2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igc2V0dGluZyBhbmQgZ2V0dGluZyB0aGUgSVBWNl9UQ0xBU1Mgc29ja2V0IG9wdGlvbiBvbiBNUFRDUCBzb2NrZXRzLiBUaGlzIGludHJvZHVjZXMgbmV3IHJlYWNoYWJsZSBjb2RlIGluIHRoZSBNUFRDUCBzb2NrZXQgb3B0aW9ucyBoYW5kbGluZyBsb2dpYywgd2hpY2ggc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgY29ycmVjdGx5IGhhbmRsZXMgdmFyaW91cyBpbnB1dHMgYW5kIHN1YmZsb3cgc3RhdGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmZTdhNjUyMjdjMDIxYmEzZGUzM2MwZTY4OGRmOTU5NzdhM2ViNTc0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdWwgMTMgMTg6NTM6MzQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3Avc29ja29wdC5jIGIvbmV0L21wdGNwL3NvY2tvcHQuYwppbmRleCBmY2Y2ZmViMmE5ZWI1ZC4uMWI4M2JiYTBiNThlMDUgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9zb2Nrb3B0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3NvY2tvcHQuYwpAQCAtMzk0LDYgJiM0MzszOTQsMzkgQEAgc3RhdGljIGludCBtcHRjcF9zZXRzb2Nrb3B0X3NvbF9zb2NrZXQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsCiAJcmV0dXJuIC1FT1BOT1RTVVBQOwogfQogCiYjNDM7c3RhdGljIGludCBtcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3Moc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsCiYjNDM7CQkJCQkgIHNvY2twdHJfdCBvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4pCiYjNDM7ewomIzQzOyNpZiAhSVNfRU5BQkxFRChDT05GSUdfSVBWNikKJiM0MzsJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOyNlbHNlCiYjNDM7CXN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3c7CiYjNDM7CXN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKW1zazsKJiM0MzsJaW50IGVyciwgdmFsOwomIzQzOwomIzQzOwllcnIgPSBpcHY2X3NldHNvY2tvcHQoc2ssIFNPTF9JUFY2LCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CiYjNDM7CiYjNDM7CWlmIChlcnIgIT0gMCkKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CWxvY2tfc29jayhzayk7CiYjNDM7CXNvY2tvcHRfc2VxX2luYyhtc2spOwomIzQzOwl2YWwgPSBSRUFEX09OQ0UoaW5ldDZfc2soc2spLSZndDt0Y2xhc3MpOwomIzQzOwltcHRjcF9mb3JfZWFjaF9zdWJmbG93KG1zaywgc3ViZmxvdykgewomIzQzOwkJc3RydWN0IHNvY2sgKnNzayA9IG1wdGNwX3N1YmZsb3dfdGNwX3NvY2soc3ViZmxvdyk7CiYjNDM7CQlib29sIHNsb3c7CiYjNDM7CiYjNDM7CQlzbG93ID0gbG9ja19zb2NrX2Zhc3Qoc3NrKTsKJiM0MzsJCWluZXQ2X3NrKHNzayktJmd0O3RjbGFzcyA9IHZhbDsKJiM0MzsJCXNrX2RzdF9yZXNldChzc2spOwomIzQzOwkJdW5sb2NrX3NvY2tfZmFzdChzc2ssIHNsb3cpOwomIzQzOwl9CiYjNDM7CXJlbGVhc2Vfc29jayhzayk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOyNlbmRpZgomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF92NihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSwKIAkJCSAgICAgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKQogewpAQCAtNDM2LDYgJiM0Mzs0NjksOCBAQCBzdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfdjYoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsCiAKIAkJcmVsZWFzZV9zb2NrKHNrKTsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgSVBWNl9UQ0xBU1M6CiYjNDM7CQlyZXR1cm4gbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzKG1zaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC0xNDg1LDYgJiM0MzsxNTIwLDkgQEAgc3RhdGljIGludCBtcHRjcF9nZXRzb2Nrb3B0X3Y2KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLAogCXN0cnVjdCBzb2NrICpzayA9ICh2b2lkICopbXNrOwogCiAJc3dpdGNoIChvcHRuYW1lKSB7CiYjNDM7CWNhc2UgSVBWNl9UQ0xBU1M6CiYjNDM7CQlyZXR1cm4gbXB0Y3BfcHV0X2ludF9vcHRpb24obXNrLCBvcHR2YWwsIG9wdGxlbiwKJiM0MzsJCQkJCSAgICBSRUFEX09OQ0UoaW5ldDZfc2soc2spLSZndDt0Y2xhc3MpKTsKIAljYXNlIElQVjZfVjZPTkxZOgogCQlyZXR1cm4gbXB0Y3BfcHV0X2ludF9vcHRpb24obXNrLCBvcHR2YWwsIG9wdGxlbiwKIAkJCQkJICAgIHNrLSZndDtza19pcHY2b25seSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE4OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MjgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBNUFRDUCBJUFY2X1RDTEFTUyBQYXRjaCoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7dmUgZ290IGEgcGF0Y2ggdGhhdCYjMzk7cyBpbnRyb2R1Y2luZyBzdXBwb3J0IGZvciBgSVBWNl9UQ0xBU1NgIHdpdGhpbiBNUFRDUCBzb2NrZXRzLiBUaGUgY29yZSBjaGFuZ2VzIGFyZSwgYXMgZXhwZWN0ZWQsIHdpdGhpbiBgbmV0L21wdGNwL3NvY2tvcHQuY2AuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7dmUgdG91Y2hlZCBgbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzYCwgYG1wdGNwX3NldHNvY2tvcHRfdjZgLCBhbmQgYG1wdGNwX2dldHNvY2tvcHRfdjZgLiBUaGF0IHNlZW1zIGxvZ2ljYWw7IGBzZXRzb2Nrb3B0YCBhbmQgYGdldHNvY2tvcHRgIHdvdWxkIGJlIHRoZSBwcmltYXJ5IGludGVyZmFjZXMgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSwgd2l0aCB0aGUgZGVkaWNhdGVkIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3NgIGJlaW5nIGFkZGVkLCBwcmVzdW1hYmx5IHRvIGhhbmRsZSB0aGUgYElQVjZfVENMQVNTYCBvcHRpb24gaW4gcGFydGljdWxhciwgZm9yIHRoZSBJUHY2LXNwZWNpZmljIHNvY2tldCBvcHRpb25zIGZvciBNUFRDUC4KCk5vdywgYmVmb3JlIEkgZGlnIGludG8gdGhlIGNvZGUgaXRzZWxmLCBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSB0aGUgcHJlLXJlcXVpc2l0ZXMuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggTVBUQ1AsIHNvIGBDT05GSUdfTVBUQ1BgICpoYXMqIHRvIGJlIGVuYWJsZWQuIEFuZCBpdCYjMzk7cyBgSVBWNl9UQ0xBU1NgIHNvIGBDT05GSUdfSVBWNmAgbXVzdCBiZSBlbmFibGVkLiBUaGF0JiMzOTtzIGEgZ2l2ZW4uCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayBgbmV0L21wdGNwL3NvY2tvcHQuY2AgZm9yIGFueSBvdGhlciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvciBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gVGhlcmUgY291bGQgYmUgc29tZSBzdWJ0bGUgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgc29ja2V0IG9wdGlvbnMgb3IgZXZlbiBNUFRDUCBmZWF0dXJlcyB0aGF0IHdlIG5lZWQgdG8ga2VlcCBpbiBtaW5kLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgZnVsbCBwaWN0dXJlIGJlZm9yZSBkaXZpbmcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxODo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTVBUQ1AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbm5ldC9tcHRjcC9NYWtlZmlsZToyOm9iai0kKENPTkZJR19NUFRDUCkgJiM0Mzs9IG1wdGNwLm9cbm5ldC9tcHRjcC9NYWtlZmlsZS0zLVxuLS1cbm5ldC9tcHRjcC9NYWtlZmlsZT0xMj1tcHRjcF90b2tlbl90ZXN0LW9ianMgOj0gdG9rZW5fdGVzdC5vXG5uZXQvbXB0Y3AvTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX01QVENQX0tVTklUX1RFU1QpICYjNDM7PSBtcHRjcF9jcnlwdG9fdGVzdC5vIG1wdGNwX3Rva2VuX3Rlc3Qub1xubmV0L21wdGNwL01ha2VmaWxlLTE0LVxuLS1cbm5ldC9tcHRjcC9jcnlwdG8uYz00Mz12b2lkIG1wdGNwX2NyeXB0b19obWFjX3NoYSh1NjQga2V5MSwgdTY0IGtleTIsIHU4ICptc2csIGludCBsZW4sIHZvaWQgKmhtYWMpXG4tLVxubmV0L21wdGNwL2NyeXB0by5jLTQ5LVxubmV0L21wdGNwL2NyeXB0by5jOjUwOiNpZiBJU19NT0RVTEUoQ09ORklHX01QVENQX0tVTklUX1RFU1QpXG5uZXQvbXB0Y3AvY3J5cHRvLmMtNTEtRVhQT1JUX1NZTUJPTF9HUEwobXB0Y3BfY3J5cHRvX2htYWNfc2hhKTtcbi0tXG5uZXQvbXB0Y3AvY3RybC5jPTU4Nz12b2lkIF9faW5pdCBtcHRjcF9pbml0KHZvaWQpXG4tLVxubmV0L21wdGNwL2N0cmwuYy01OTUtXG5uZXQvbXB0Y3AvY3RybC5jOjU5NjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9jdHJsLmMtNTk3LWludCBfX2luaXQgbXB0Y3B2Nl9pbml0KHZvaWQpXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYz0yMz1zdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTI0MS1cdFx0XHRcdG1wX29wdC1cdTAwM2VhZGRyLmZhbWlseSA9IEFGX0lORVQ7XG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjI0MjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9vcHRpb25zLmMtMjQzLVx0XHRcdGVsc2UgaWYgKG9wc2l6ZSA9PSBUQ1BPTEVOX01QVENQX0FERF9BRERSNiB8fFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtMjUyLVx0XHRcdFx0bXBfb3B0LVx1MDAzZWFkZHIuZmFtaWx5ID0gQUZfSU5FVDtcbm5ldC9tcHRjcC9vcHRpb25zLmM6MjUzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL29wdGlvbnMuYy0yNTQtXHRcdFx0ZWxzZSBpZiAob3BzaXplID09IFRDUE9MRU5fTVBUQ1BfQUREX0FERFI2X0JBU0UgfHxcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTI3NC1cdFx0fVxubmV0L21wdGNwL29wdGlvbnMuYzoyNzU6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTI3Ni1cdFx0ZWxzZSB7XG4tLVxubmV0L21wdGNwL29wdGlvbnMuYz02MzI9c3RhdGljIHU2NCBhZGRfYWRkcl9nZW5lcmF0ZV9obWFjKHU2NCBrZXkxLCB1NjQga2V5Mixcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTY0NC1cdH1cbm5ldC9tcHRjcC9vcHRpb25zLmM6NjQ1OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL29wdGlvbnMuYy02NDYtXHRlbHNlIGlmIChhZGRyLVx1MDAzZWZhbWlseSA9PSBBRl9JTkVUNikge1xuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmM9MTM4ND12b2lkIG1wdGNwX3dyaXRlX29wdGlvbnMoc3RydWN0IHRjcGhkciAqdGgsIF9fYmUzMiAqcHRyLCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtMTU2Ny1cbm5ldC9tcHRjcC9vcHRpb25zLmM6MTU2ODojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTU2OS1cdFx0aWYgKG9wdHMtXHUwMDNlYWRkci5mYW1pbHkgPT0gQUZfSU5FVDYpXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy0xNTg2LVx0XHR9XG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjE1ODc6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTE1ODgtXHRcdGVsc2UgaWYgKG9wdHMtXHUwMDNlYWRkci5mYW1pbHkgPT0gQUZfSU5FVDYpIHtcbi0tXG5uZXQvbXB0Y3AvcG0uYz0zMz1ib29sIG1wdGNwX3BtX2FkZHJfZmFtaWxpZXNfbWF0Y2goY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9tcHRjcC9wbS5jLTM4LVxubmV0L21wdGNwL3BtLmM6Mzk6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcG0uYy00MC1cdGJvb2wgbG9jX2lzX3Y0ID0gbG9jLVx1MDAzZWZhbWlseSA9PSBBRl9JTkVUIHx8IGlwdjZfYWRkcl92NG1hcHBlZChcdTAwMjZsb2MtXHUwMDNlYWRkcjYpO1xuLS1cbm5ldC9tcHRjcC9wbS5jPTU1PWJvb2wgbXB0Y3BfYWRkcmVzc2VzX2VxdWFsKGNvbnN0IHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKmEsXG4tLVxubmV0L21wdGNwL3BtLmMtNjItXHRcdFx0YWRkcl9lcXVhbHMgPSBhLVx1MDAzZWFkZHIuc19hZGRyID09IGItXHUwMDNlYWRkci5zX2FkZHI7XG5uZXQvbXB0Y3AvcG0uYzo2MzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbS5jLTY0LVx0XHRlbHNlXG4tLVxubmV0L21wdGNwL3BtLmM9ODM9dm9pZCBtcHRjcF9sb2NhbF9hZGRyZXNzKGNvbnN0IHN0cnVjdCBzb2NrX2NvbW1vbiAqc2tjLFxuLS1cbm5ldC9tcHRjcC9wbS5jLTg5LVx0XHRhZGRyLVx1MDAzZWFkZHIuc19hZGRyID0gc2tjLVx1MDAzZXNrY19yY3Zfc2FkZHI7XG5uZXQvbXB0Y3AvcG0uYzo5MDojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbS5jLTkxLVx0ZWxzZSBpZiAoYWRkci1cdTAwM2VmYW1pbHkgPT0gQUZfSU5FVDYpXG4tLVxubmV0L21wdGNwL3BtLmM9OTY9dm9pZCBtcHRjcF9yZW1vdGVfYWRkcmVzcyhjb25zdCBzdHJ1Y3Qgc29ja19jb21tb24gKnNrYyxcbi0tXG5uZXQvbXB0Y3AvcG0uYy0xMDItXHRcdGFkZHItXHUwMDNlYWRkci5zX2FkZHIgPSBza2MtXHUwMDNlc2tjX2RhZGRyO1xubmV0L21wdGNwL3BtLmM6MTAzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3BtLmMtMTA0LVx0ZWxzZSBpZiAoYWRkci1cdTAwM2VmYW1pbHkgPT0gQUZfSU5FVDYpXG4tLVxubmV0L21wdGNwL3BtX2tlcm5lbC5jPTYwNj1maWxsX2xvY2FsX2FkZHJlc3NfYW55KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKnJlbW90ZSxcbi0tXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtNjEyLVx0bG9jYWwtXHUwMDNlYWRkci5mYW1pbHkgPVxubmV0L21wdGNwL3BtX2tlcm5lbC5jOjYxMzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy02MTQtXHRcdFx0cmVtb3RlLVx1MDAzZWZhbWlseSA9PSBBRl9JTkVUNiBcdTAwMjZcdTAwMjZcbi0tXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM9ODUyPXN0YXRpYyBpbnQgbXB0Y3BfcG1fbmxfY3JlYXRlX2xpc3Rlbl9zb2NrZXQoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy04ODktXHRtcHRjcF9pbmZvMnNvY2thZGRyKFx1MDAyNmVudHJ5LVx1MDAzZWFkZHIsIFx1MDAyNmFkZHIsIGVudHJ5LVx1MDAzZWFkZHIuZmFtaWx5KTtcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYzo4OTA6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtODkxLVx0aWYgKGVudHJ5LVx1MDAzZWFkZHIuZmFtaWx5ID09IEFGX0lORVQ2KVxuLS1cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy04OTUtXHRcdGVyciA9IGluZXRfYmluZF9zayhzc2ssIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKVx1MDAyNmFkZHIsIGFkZHJsZW4pO1xubmV0L21wdGNwL3BtX2tlcm5lbC5jOjg5NjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy04OTctXHRlbHNlIGlmIChzc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxuLS1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9MjI9c3RhdGljIGludCBtcHRjcF9wbV9mYW1pbHlfdG9fYWRkcihpbnQgZmFtaWx5KVxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0yMy17XG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jOjI0OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0yNS1cdGlmIChmYW1pbHkgPT0gQUZfSU5FVDYpXG4tLVxubmV0L21wdGNwL3BtX25ldGxpbmsuYz0zMT1zdGF0aWMgaW50IG1wdGNwX3BtX3BhcnNlX3BtX2FkZHJfYXR0cihzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNjMtXHRpZiAoYWRkci1cdTAwM2VmYW1pbHkgIT0gQUZfSU5FVFxubmV0L21wdGNwL3BtX25ldGxpbmsuYzo2NDojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNjUtXHQgICAgXHUwMDI2XHUwMDI2IGFkZHItXHUwMDNlZmFtaWx5ICE9IEFGX0lORVQ2XG4tLVxubmV0L21wdGNwL3BtX25ldGxpbmsuYy03OC1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM6Nzk6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTgwLVx0aWYgKGFkZHItXHUwMDNlZmFtaWx5ID09IEFGX0lORVQ2KVxuLS1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9MTMxPXN0YXRpYyBpbnQgbXB0Y3BfbmxfZmlsbF9hZGRyKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0xNTYtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xubmV0L21wdGNwL3BtX25ldGxpbmsuYzoxNTc6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTE1OC1cdGVsc2UgaWYgKGFkZHItXHUwMDNlZmFtaWx5ID09IEFGX0lORVQ2IFx1MDAyNlx1MDAyNlxuLS1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9Mjk4PXN0YXRpYyBpbnQgbXB0Y3BfZXZlbnRfYWRkX3N1YmZsb3coc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHNvY2sgKnNzaylcbi0tXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTMxMi1cdFx0YnJlYWs7XG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jOjMxMzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtMzE0LVx0Y2FzZSBBRl9JTkVUNjoge1xuLS1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9NDY1PXZvaWQgbXB0Y3BfZXZlbnRfYWRkcl9hbm5vdW5jZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNzayxcbi0tXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTUwMi1cdFx0YnJlYWs7XG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jOjUwMzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNTA0LVx0Y2FzZSBBRl9JTkVUNjpcbi0tXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jPTUyMj12b2lkIG1wdGNwX2V2ZW50X3BtX2xpc3RlbmVyKGNvbnN0IHN0cnVjdCBzb2NrICpzc2ssXG4tLVxubmV0L21wdGNwL3BtX25ldGxpbmsuYy01NTEtXHRcdGJyZWFrO1xubmV0L21wdGNwL3BtX25ldGxpbmsuYzo1NTI6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTU1My1cdGNhc2UgQUZfSU5FVDY6IHtcbi0tXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM9NDMyPXN0YXRpYyBzdHJ1Y3Qgc29jayAqbXB0Y3BfbmxfZmluZF9zc2soc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbi0tXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtNDU3LVx0XHRcdGJyZWFrO1xubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jOjQ1ODojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy00NTktXHRcdGNhc2UgQUZfSU5FVDY6IHtcbi0tXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM9NDc4PWludCBtcHRjcF9wbV9ubF9zdWJmbG93X2Rlc3Ryb3lfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy01MDYtXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM6NTA3OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTUwOC1cdGlmIChhZGRyX2wuYWRkci5mYW1pbHkgPT0gQUZfSU5FVCBcdTAwMjZcdTAwMjYgaXB2Nl9hZGRyX3Y0bWFwcGVkKFx1MDAyNmFkZHJfci5hZGRyNikpIHtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMC0jaW5jbHVkZSBcdTAwM2NuZXQvdGNwX3N0YXRlcy5oXHUwMDNlXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyMTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIyLSNpbmNsdWRlIFx1MDAzY25ldC90cmFuc3BfdjYuaFx1MDAzZVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTMxPXN0YXRpYyB1bnNpZ25lZCBpbnQgbXB0Y3BfaW5xX2hpbnQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM2OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzctc3RydWN0IG1wdGNwNl9zb2NrIHtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz02ND1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyAqbXB0Y3BfZmFsbGJhY2tfdGNwX29wcyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtNjctXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo2ODojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTY5LVx0aWYgKGZhbWlseSA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zMzk3PXN0YXRpYyB2b2lkIG1wdGNwX2NvcHlfaW5hZGRycyhzdHJ1Y3Qgc29jayAqbXNrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc3NrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzM5OC17XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozMzk5OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzQwMC1cdGNvbnN0IHN0cnVjdCBpcHY2X3BpbmZvICpzc2s2ID0gaW5ldDZfc2soc3NrKTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zNDQyPXN0YXRpYyBpbnQgbXB0Y3BfZGlzY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNTA0LVxubmV0L21wdGNwL3Byb3RvY29sLmM6MzUwNTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM1MDYtc3RhdGljIHN0cnVjdCBpcHY2X3BpbmZvICptcHRjcF9pbmV0Nl9zayhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MzU1Mz1zdHJ1Y3Qgc29jayAqbXB0Y3Bfc2tfY2xvbmVfaW5pdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzU2NS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM1NjY6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNTY3LVx0aWYgKG5zay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzU3Mi1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM1NzM6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNTc0LVx0aWYgKG5zay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9NDA5OT1zdGF0aWMgaW50IG1wdGNwX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLCBpbnQgYWRkcl9sZW4pXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtNDExMy1cdFx0ZXJyID0gaW5ldF9iaW5kX3NrKHNzaywgdWFkZHIsIGFkZHJfbGVuKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQxMTQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MTE1LVx0ZWxzZSBpZiAoc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTQ2MzU9dm9pZCBfX2luaXQgbXB0Y3BfcHJvdG9faW5pdCh2b2lkKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ2NzQtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0Njc1OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3Byb3RvY29sLmMtNDY3Ni1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBtcHRjcF92Nl9zdHJlYW1fb3BzID0ge1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oPTkxMj12b2lkIF9faW5pdCBtcHRjcF9wcm90b19pbml0KHZvaWQpO1xubmV0L21wdGNwL3Byb3RvY29sLmg6OTEzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3Byb3RvY29sLmgtOTE0LWludCBfX2luaXQgbXB0Y3BfcHJvdG9fdjZfaW5pdCh2b2lkKTtcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE3LSNpbmNsdWRlIFx1MDAzY25ldC9wcm90b2NvbC5oXHUwMDNlXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE4OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3N1YmZsb3cuYy0xOS0jaW5jbHVkZSBcdTAwM2NuZXQvaXA2X3JvdXRlLmhcdTAwM2Vcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTM1OD1zdGF0aWMgaW50IHN1YmZsb3dfdjRfc2VuZF9zeW5hY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0zNzAtXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjM3MTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9zdWJmbG93LmMtMzcyLXN0YXRpYyBpbnQgc3ViZmxvd192Nl9zZW5kX3N5bmFjayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTY0OT1zdGF0aWMgaW50IHN1YmZsb3dfcmVidWlsZF9oZWFkZXIoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtNjU4LVxubmV0L21wdGNwL3N1YmZsb3cuYzo2NTk6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTY2MC1zdGF0aWMgaW50IHN1YmZsb3dfdjZfcmVidWlsZF9oZWFkZXIoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9NjkyPXN0YXRpYyB2b2lkIHN1YmZsb3dfdjRfcmVxX2Rlc3RydWN0b3Ioc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtNjk3LVxubmV0L21wdGNwL3N1YmZsb3cuYzo2OTg6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTY5OS1zdGF0aWMgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgbXB0Y3Bfc3ViZmxvd192Nl9yZXF1ZXN0X3NvY2tfb3BzIF9fcm9fYWZ0ZXJfaW5pdDtcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTczNz1zdHJ1Y3QgcmVxdWVzdF9zb2NrICptcHRjcF9zdWJmbG93X3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy03NDItXHRcdG9wcyA9IFx1MDAyNm1wdGNwX3N1YmZsb3dfdjRfcmVxdWVzdF9zb2NrX29wcztcbm5ldC9tcHRjcC9zdWJmbG93LmM6NzQzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3N1YmZsb3cuYy03NDQtXHRlbHNlIGlmIChvcHMtXHUwMDNlZmFtaWx5ID09IEFGX0lORVQ2KVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MTU1Mz1zdWJmbG93X2RlZmF1bHRfYWZfb3BzKHN0cnVjdCBzb2NrICpzaylcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU1NC17XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE1NTU6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE1NTYtXHRpZiAoc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU2MS1cbm5ldC9tcHRjcC9zdWJmbG93LmM6MTU2MjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU2My12b2lkIG1wdGNwdjZfaGFuZGxlX21hcHBlZChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgbWFwcGVkKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MTU4Mj12b2lkIG1wdGNwX2luZm8yc29ja2FkZHIoY29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqaW5mbyxcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE1OTItXHRcdFx0aW5fYWRkci1cdTAwM2VzaW5fYWRkciA9IGluZm8tXHUwMDNlYWRkcjtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTU5MzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU5NC1cdFx0ZWxzZSBpZiAoaXB2Nl9hZGRyX3Y0bWFwcGVkKFx1MDAyNmluZm8tXHUwMDNlYWRkcjYpKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU5OC1cdH1cbm5ldC9tcHRjcC9zdWJmbG93LmM6MTU5OTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTYwMC1cdGVsc2UgaWYgKGFkZHItXHUwMDNlc3NfZmFtaWx5ID09IEFGX0lORVQ2KSB7XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0xNjEzPWludCBfX21wdGNwX3N1YmZsb3dfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBtcHRjcF9wbV9sb2NhbCAqbG9jYWwsXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0xNjQ4LVx0XHRcdGxvY2FsX2lkID0gLTE7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE2NDk6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2NTAtXHR9IGVsc2UgaWYgKHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNikge1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMTY2NS1cdGFkZHJsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTY2NjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTY2Ny1cdGlmIChhZGRyLnNzX2ZhbWlseSA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE3NTY9c3RhdGljIHZvaWQgbXB0Y3Bfc3ViZmxvd19vcHNfb3ZlcnJpZGUoc3RydWN0IHNvY2sgKnNzaylcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTc1Ny17XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE3NTg6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE3NTktXHRpZiAoc3NrLVx1MDAzZXNrX3Byb3QgPT0gXHUwMDI2dGNwdjZfcHJvdClcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE3NjY9c3RhdGljIHZvaWQgbXB0Y3Bfc3ViZmxvd19vcHNfdW5kb19vdmVycmlkZShzdHJ1Y3Qgc29jayAqc3NrKVxubmV0L21wdGNwL3N1YmZsb3cuYy0xNzY3LXtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTc2ODojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTc2OS1cdGlmIChzc2stXHUwMDNlc2tfcHJvdCA9PSBcdTAwMjZ0Y3B2Nl9wcm90X292ZXJyaWRlKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MjE0MT12b2lkIF9faW5pdCBtcHRjcF9zdWJmbG93X2luaXQodm9pZClcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNzMtXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIxNzQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNzUtdm9pZCBfX2luaXQgbXB0Y3Bfc3ViZmxvd192Nl9pbml0KHZvaWQpXG4tLVxubmV0L21wdGNwL3Rva2VuLmM9Mzk4PXZvaWQgX19pbml0IG1wdGNwX3Rva2VuX2luaXQodm9pZClcbi0tXG5uZXQvbXB0Y3AvdG9rZW4uYy00MTctXG5uZXQvbXB0Y3AvdG9rZW4uYzo0MTg6I2lmIElTX01PRFVMRShDT05GSUdfTVBUQ1BfS1VOSVRfVEVTVClcbm5ldC9tcHRjcC90b2tlbi5jLTQxOS1FWFBPUlRfU1lNQk9MX0dQTChtcHRjcF90b2tlbl9uZXdfcmVxdWVzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTg6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY2NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1QVENQIElQVjZfVENMQVNTIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L21wdGNwL3NvY2tvcHQuY2AuIEl0JiMzOTtzIGludHJvZHVjaW5nIGBJUFY2X1RDTEFTU2Agc3VwcG9ydCBzcGVjaWZpY2FsbHkgZm9yIE1QVENQIHNvY2tldHMuIFRoYXQmIzM5O3MgZ29vZCwgc2VlaW5nIGFzIHdlIHNob3VsZCBiZSBhYmxlIHRvIG1ha2UgdXNlIG9mIHRyYWZmaWMgY2xhc3MgZGlmZmVyZW50aWF0aW9ucyBmb3IgTVBUQ1AgaW4gYW4gSVB2NiBlbnZpcm9ubWVudC4KCk5vdywgdGhlIGNvZGUgaXRzZWxmIGlzIHVzaW5nIGEgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSwgYCNpZiAhSVNfRU5BQkxFRChDT05GSUdfSVBWNilgLCB3aXRoaW4gYG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzc2AuIFRoYXQmIzM5O3MgYSBiaXQgb2RkLiBJIHdvdWxkIGhhdmUgZXhwZWN0ZWQgYSBjaGVjayAqZm9yKiBJUHY2IHRvIGluY2x1ZGUgdGhpcyBmZWF0dXJlLCBub3QgZXhjbHVkZSBpdC4gU28sIGEgZ3VhcmQgbGlrZSBgQ09ORklHX0lQVjZgIHNlZW1zIGxvZ2ljYWw7IHRoZSBgIWAgbmVnYXRlcyBteSBpbml0aWFsIGltcHJlc3Npb24uCgpCZWZvcmUgSSBqdW1wIHRvIGNvbmNsdXNpb25zLCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgQ09ORklHX0lQVjZgIGFuZCBwb3RlbnRpYWxseSBgQ09ORklHX01QVENQX0lQVjZgIGFyZSBiZWluZyB1c2VkIGluIHRoaXMgZmlsZS4gVGhlcmUgbWlnaHQgYmUgYSBzdWJ0bGUgcmVhc29uIGZvciB0aGlzIGNvbmRpdGlvbmFsIGxvZ2ljLCBvciBwZXJoYXBzIGl0JiMzOTtzIGFuIG92ZXJzaWdodC4gVGltZSB0byBzY2FuIGBuZXQvbXB0Y3Avc29ja29wdC5jYCBmb3IgdGhvc2UgY29uZmlnIHN5bWJvbHMgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE4OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19JUFY2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3NvY2tvcHQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3Avc29ja29wdC5jPTM5Nz1zdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzcyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jLTM5OS17XG5uZXQvbXB0Y3Avc29ja29wdC5jOjQwMDojaWYgIUlTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvbXB0Y3Avc29ja29wdC5jLTQwMS1cdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jPTEyMDY9c3RhdGljIHZvaWQgbXB0Y3BfZ2V0X3N1Yl9hZGRycyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtcHRjcF9zdWJmbG93X2FkZHJzICphKVxuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTIyMi1cdFx0YS1cdTAwM2VzaW5fcmVtb3RlLnNpbl9hZGRyLnNfYWRkciA9IGluZXQtXHUwMDNlaW5ldF9kYWRkcjtcbm5ldC9tcHRjcC9zb2Nrb3B0LmM6MTIyMzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTIyNC1cdH0gZWxzZSBpZiAoc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTg6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM2MAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFByb3Bvc2VkIE1QVENQIGFuZCBJUHY2IEludGVncmF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGludGVncmF0aW5nIFRyYWZmaWMgQ2xhc3MgKFRDTEFTUykgc2V0dGluZyB3aXRoIE1QVENQIG92ZXIgSVB2Ni4gVGhlIGZ1bmRhbWVudGFsIGNvbmZpZ3MgcmVxdWlyZWQgYXJlLCBvYnZpb3VzbHksIGBNUFRDUGAgYW5kIGBJUFY2YC4gV2UgYXJlIHdvcmtpbmcgd2l0aCB0aHJlZSBmdW5jdGlvbnMgaGVyZTogYG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzc2Agd2hpY2ggaXMgYSBuZXcgZnVuY3Rpb24sIGFuZCBgbXB0Y3Bfc2V0c29ja29wdF92NmAgYW5kIGBtcHRjcF9nZXRzb2Nrb3B0X3Y2YCwgd2hpY2ggYXJlIGV4aXN0aW5nIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZC4KClRoZSBrZXkgaXMgaG93IHRoZXNlIHBpZWNlcyB3aWxsIGZpdCB0b2dldGhlci4gRmlyc3QsIGl0IGxvb2tzIGxpa2UgYElQVjZfVENMQVNTYCBzaG91bGQgYmUgYWNjZXNzaWJsZS4gVGhlIGV4aXN0aW5nIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2YCBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBgbXB0Y3Bfc2V0c29ja29wdGAgd2hlbiB0aGUgc29ja2V0IG9wdGlvbiBsZXZlbCBpcyBgU09MX0lQVjZgLCBhbmQgdGhlIGBtcHRjcF9nZXRzb2Nrb3B0X3Y2YCBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBgbXB0Y3BfZ2V0c29ja29wdGAgd2hlbiB0aGUgc29ja2V0IG9wdGlvbiBsZXZlbCBpcyBgU09MX0lQVjZgIC0gdGhhdCBtZWFucyBpdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gaG9vayBpbi4KCk5vdywgbGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byBgbXB0Y3Bfc2V0c29ja29wdF92NmAgYW5kIGBtcHRjcF9nZXRzb2Nrb3B0X3Y2YCBhbmQgc2VlIGhvdyB0aGUgbmV3IGBtcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3NgIGZ1bmN0aW9uIGlzIGNhbGxlZCBvciB3aWxsIGludGVyZmFjZSB3aXRoIHRoZW0uIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgcmVsZXZhbnQgY29kZSBpbiBkZXRhaWwgYW5kIHZlcmlmeSBwcm9wZXIgZXJyb3IgaGFuZGxpbmcsIGRhdGEgc3RydWN0dXJlIGludGVyYWN0aW9ucywgYW5kIG92ZXJhbGwgaW1wYWN0IG9uIGV4aXN0aW5nIE1QVENQL0lQdjYgZnVuY3Rpb25hbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxODo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9zZXRzb2Nrb3B0X3Y2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3NvY2tvcHQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3Avc29ja29wdC5jPTMwMD1zdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfc29sX3NvY2tldChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jLTM5Ni1cbm5ldC9tcHRjcC9zb2Nrb3B0LmM6Mzk3OnN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxubmV0L21wdGNwL3NvY2tvcHQuYy0zOTgtXHRcdFx0XHRcdCAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jLTQyOS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmM6NDMwOnN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF92NihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNDMxLVx0XHRcdCAgICAgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNDcyLVx0Y2FzZSBJUFY2X1RDTEFTUzpcbm5ldC9tcHRjcC9zb2Nrb3B0LmM6NDczOlx0XHRyZXR1cm4gbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzKG1zaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xubmV0L21wdGNwL3NvY2tvcHQuYy00NzQtXHR9XG4tLVxubmV0L21wdGNwL3NvY2tvcHQuYz05NDI9aW50IG1wdGNwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmMtOTcxLVx0aWYgKGxldmVsID09IFNPTF9JUFY2KVxubmV0L21wdGNwL3NvY2tvcHQuYzo5NzI6XHRcdHJldHVybiBtcHRjcF9zZXRzb2Nrb3B0X3Y2KG1zaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xubmV0L21wdGNwL3NvY2tvcHQuYy05NzMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTg6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0MTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBQbGFuOiBNUFRDUCBTb2NrZXQgVENMQVNTIEhhbmRsaW5nKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzb21lIGtlcm5lbCBjaGFuZ2VzIOKAkyBzcGVjaWZpY2FsbHksIHRoZSBhYmlsaXR5IHRvIHNldCBhbmQgZ2V0IGBJUFY2X1RDTEFTU2Agb24gTVBUQ1Agc29ja2V0cy4gVGhpcyBpcyBwcmltZSBmdXp6aW5nIHRlcnJpdG9yeS4gV2UmIzM5O3ZlIGdvdCBhIG5ldyBzdXJmYWNlIGFyZWEgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGFuZCB3ZSBuZWVkIHRvIGV4cGxvcmUgaXQgdGhvcm91Z2hseS4KCk15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB0aGUga2V5IHN5bWJvbHMgdGhhdCBhcmUgaW50cm9kdWNlZDogYG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzc2AsIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2YCwgYW5kIGBtcHRjcF9nZXRzb2Nrb3B0X3Y2YC4gVGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMgd2UgbmVlZCB0byB0YXJnZXQgZHVyaW5nIGZ1enppbmcuCgpCZWZvcmUgSSBraWNrIHRoaW5ncyBvZmYsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSByaWdodCBrZXJuZWwgY29uZmlncyBpbiBwbGFjZS4gV2UmIzM5O2xsIG5lZWQgYE1QVENQYCBhbmQgYElQVjZgIGVuYWJsZWQsIG9idmlvdXNseS4gSSYjMzk7bSBnb2luZyB0byBkb3VibGUgY2hlY2sgaWYgYE1QVENQX0lQVjZgIGlzIGFsc28gYSBkZXBlbmRlbmN5OyBtaWdodCBhcyB3ZWxsIGdldCB0aGF0IHN0cmFpZ2h0ZW5lZCBvdXQgYmVmb3JlIEkgc3RhcnQuIEkmIzM5O2xsIHRha2UgYSBxdWljayBsb29rIGluIGBuZXQvbXB0Y3AvS2NvbmZpZ2AgdG8gY29uZmlybS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBvdXIgZm91bmRhdGlvbiBpcyBzb2xpZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTg6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1QVENQX0lQVjYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9LY29uZmlnPTE2PWNvbmZpZyBJTkVUX01QVENQX0RJQUdcbi0tXG5uZXQvbXB0Y3AvS2NvbmZpZy0xOS1cbm5ldC9tcHRjcC9LY29uZmlnOjIwOmNvbmZpZyBNUFRDUF9JUFY2XG5uZXQvbXB0Y3AvS2NvbmZpZy0yMS1cdGJvb2wgXCYjMzQ7TVBUQ1A6IElQdjYgc3VwcG9ydCBmb3IgTXVsdGlwYXRoIFRDUFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxODo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDkyMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYE1QVENQX0lQVjZgIENvbmZpZ3VyYXRpb24gT3B0aW9uKioKClJpZ2h0LCBzbyBgTVBUQ1BfSVBWNmAgaXMgYSBkZWZpbmVkIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhpcyBzeXN0ZW0uIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBkcmlsbCBkb3duIGFuZCBleGFtaW5lIGl0cyBkZXBlbmRlbmNpZXMuIEtub3dpbmcgaXRzIHJlbGF0aW9uc2hpcCB3aXRoIG90aGVyIGZlYXR1cmVzIGFuZCBtb2R1bGVzIHdpbGwgcHJvdmlkZSB0aGUgY3J1Y2lhbCBjb250ZXh0LiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmN5IHRyZWUgd2lsbCBwYWludCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGVuYWJsaW5nIG9yIGRpc2FibGluZyBgTVBUQ1BfSVBWNmAgbWlnaHQgY2FzY2FkZSB0aHJvdWdob3V0IHRoZSBjb25maWd1cmF0aW9uIGFuZCB0aGUgc3lzdGVtJiMzOTtzIG92ZXJhbGwgZnVuY3Rpb25hbGl0eS4gSXQmIzM5O3MgdGltZSB0byBtYXAgb3V0IHRoZSBuZXR3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxODo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tcHRjcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0XG4gICAyOlx0Y29uZmlnIE1QVENQXG4gICAzOlx0XHRib29sIFwmIzM0O01QVENQOiBNdWx0aXBhdGggVENQXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDU6XHRcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xuICAgNjpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XG4gICA3Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xuICAgODpcdFx0aGVscFxuICAgOTpcdFx0ICBNdWx0aXBhdGggVENQIChNUFRDUCkgY29ubmVjdGlvbnMgc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIG92ZXIgbXVsdGlwbGVcbiAgMTA6XHRcdCAgc3ViZmxvd3MgaW4gb3JkZXIgdG8gdXRpbGl6ZSBtdWx0aXBsZSBuZXR3b3JrIHBhdGhzLiBFYWNoIHN1YmZsb3dcbiAgMTE6XHRcdCAgdXNlcyB0aGUgVENQIHByb3RvY29sLCBhbmQgVENQIG9wdGlvbnMgY2FycnkgaGVhZGVyIGluZm9ybWF0aW9uIGZvclxuICAxMjpcdFx0ICBNUFRDUC5cbiAgMTM6XHRcbiAgMTQ6XHRpZiBNUFRDUFxuICAxNTpcdFxuICAxNjpcdGNvbmZpZyBJTkVUX01QVENQX0RJQUdcbiAgMTc6XHRcdGRlcGVuZHMgb24gSU5FVF9ESUFHXG4gIDE4Olx0XHRkZWZfdHJpc3RhdGUgSU5FVF9ESUFHXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIE1QVENQX0lQVjZcbiAgMjE6XHRcdGJvb2wgXCYjMzQ7TVBUQ1A6IElQdjYgc3VwcG9ydCBmb3IgTXVsdGlwYXRoIFRDUFwmIzM0O1xuICAyMjpcdFx0ZGVwZW5kcyBvbiBJUFY2PXlcbiAgMjM6XHRcdGRlZmF1bHQgeVxuICAyNDpcdFxuICAyNTpcdGNvbmZpZyBNUFRDUF9LVU5JVF9URVNUXG4gIDI2Olx0XHR0cmlzdGF0ZSBcJiMzNDtUaGlzIGJ1aWxkcyB0aGUgTVBUQ1AgS1VuaXQgdGVzdHNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuICAyNzpcdFx0ZGVwZW5kcyBvbiBLVU5JVFxuICAyODpcdFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiAgMjk6XHRcdGhlbHBcbiAgMzA6XHRcdCAgQ3VycmVudGx5IGNvdmVycyB0aGUgTVBUQ1AgY3J5cHRvIGFuZCB0b2tlbiBoZWxwZXJzLlxuICAzMTpcdFx0ICBPbmx5IHVzZWZ1bCBmb3Iga2VybmVsIGRldnMgcnVubmluZyBLVW5pdCB0ZXN0IGhhcm5lc3MgYW5kIGFyZSBub3RcbiAgMzI6XHRcdCAgZm9yIGluY2x1c2lvbiBpbnRvIGEgcHJvZHVjdGlvbiBidWlsZC5cbiAgMzM6XHRcbiAgMzQ6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCBwbGVhc2UgcmVmZXJcbiAgMzU6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24gaW4gRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva3VuaXQvLlxuICAzNjpcdFxuICAzNzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAzODpcdFxuICAzOTpcdGVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE4OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjA3CgkJCQkJCQlvdXRwdXQ6IDE0NwoJCQkJCQkJdGhvdWdodHM6IDIzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBNUFRDUCBTb2NrZXQgT3B0aW9ucyB3aXRoIElQdjYgVENMQVNTKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYE1QVENQX0lQVjZgIHJlbGllcyBvbiBgSVBWNj15YCBhbmQgaXMsIGJ5IGRlZmF1bHQsIGVuYWJsZWQuIE1ha2VzIHNlbnNlLiBTbywgaW4gdGVybXMgb2YgZW5hYmxpbmcgY29uZmlndXJhdGlvbnMgZm9yIGZ1enppbmcsIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7dmUgZ290IGEgY291cGxlIG9mIHNvbGlkIG9wdGlvbnM6IGVpdGhlciBJIGNhbiBpbmNsdWRlIGBNUFRDUGAgYW5kIGBJUFY2YCwgb3IgSSBjYW4gYmUgYSBiaXQgbW9yZSBleHBsaWNpdCBhbmQgZW5hYmxlIGBNUFRDUGAsIGBJUFY2YCwgKmFuZCogYE1QVENQX0lQVjZgLiBFbmFibGluZyBgTVBUQ1BfSVBWNmAgaXMgdGVjaG5pY2FsbHkgcmVkdW5kYW50LCBzaW5jZSBpdCB3aWxsIGJlIGVuYWJsZWQgd2l0aCBgSVBWNj15YCwgYnV0IGl0IGRvZXNuJiMzOTt0IGh1cnQuCgpUaGUgY29kZSYjMzk7cyBnb3QgdGhpcyBgI2lmICFJU19FTkFCTEVEKENPTkZJR19JUFY2KWAgaW4gYG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzc2AsIGFuZCB0aGF0IGNvbmZpcm1zIHRoYXQgYElQVjZgIGlzIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gaXRlbSBoZXJlLgoKU28sIGhlcmUmIzM5O3MgbXkgc3VtbWFyaXplZCBhcHByb2FjaDoKCiogICAqKldvcnRoRnV6emluZzoqKiBBYnNvbHV0ZWx5IQoqICAgKipGb2N1cyBTeW1ib2xzOioqIEkmIzM5O20gemVyb2luZyBpbiBvbjoKICAgICogICBgbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzYCAoVGhpcyBpcyB3aGVyZSB0aGUgbmV3IGNvZGUgaXMsIGFuZCBpcyBteSBtYWluIGZvY3VzKQogICAgKiAgIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2YCAoSXQgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgdG8gc2V0dGluZyBvcHRpb25zLCBzbyBpdCBpcyByZXF1aXJlZCkKICAgICogICBgbXB0Y3BfZ2V0c29ja29wdF92NmAgKE5lZWQgdG8gbWFrZSBzdXJlIGdldHNvY2tvcHQgd29ya3MgdG9vLCBhbmQgaXMgcmVsZXZhbnQgdG8gdGhlIG5ldyBjb2RlKS4KKiAgICoqRW5hYmxlQ29uZmlnczoqKiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZToKICAgICogICBgTVBUQ1BgCiAgICAqICAgYElQVjZgCiAgICAqICAgYE1QVENQX0lQVjZgIChPcHRpb25hbCwgYnV0IGdvb2QgdG8gaW5jbHVkZSwgZXZlbiBpZiByZWR1bmRhbnQuKQoKKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igc2V0dGluZyBhbmQgZ2V0dGluZyB0aGUgYElQVjZfVENMQVNTYCBzb2NrZXQgb3B0aW9uIHNwZWNpZmljYWxseSBmb3IgTVBUQ1Agc29ja2V0cy4gVGhpcyBtZWFucyBuZXcgY29kZSBwYXRocyBhcmUgbm93IHJlYWNoYWJsZSBpbiB0aGUgTVBUQ1Agc29ja2V0IG9wdGlvbnMgbG9naWMuIEkgbmVlZCB0byBmdXp6IHRoZXNlIHRvIHRob3JvdWdobHkgdGVzdCBob3cgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eSBpbnRlcmFjdHMgd2l0aCB2YXJpb3VzIGlucHV0cywgYW5kIGFsbCB0aGUgc3RhdGVzIHRoYXQgYXJlIHBvc3NpYmxlIHdpdGggc3ViZmxvd3MuIE1ha2luZyBzdXJlIGV2ZXJ5dGhpbmcgaXMgaGFuZGxlZCBjb3JyZWN0bHkgaXMga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxODo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVBUQ1AmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtNUFRDUF9JUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzJiMzNDssCiAgICAmIzM0O21wdGNwX3NldHNvY2tvcHRfdjYmIzM0OywKICAgICYjMzQ7bXB0Y3BfZ2V0c29ja29wdF92NiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHNldHRpbmcgYW5kIGdldHRpbmcgdGhlIElQVjZfVENMQVNTIHNvY2tldCBvcHRpb24gb24gTVBUQ1Agc29ja2V0cy4gVGhpcyBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgY29kZSBpbiB0aGUgTVBUQ1Agc29ja2V0IG9wdGlvbnMgaGFuZGxpbmcgbG9naWMsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBoYW5kbGVzIHZhcmlvdXMgaW5wdXRzIGFuZCBzdWJmbG93IHN0YXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVBUQ1AmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtNUFRDUF9JUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzJiMzNDssCiAgICAmIzM0O21wdGNwX3NldHNvY2tvcHRfdjYmIzM0OywKICAgICYjMzQ7bXB0Y3BfZ2V0c29ja29wdF92NiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHNldHRpbmcgYW5kIGdldHRpbmcgdGhlIElQVjZfVENMQVNTIHNvY2tldCBvcHRpb24gb24gTVBUQ1Agc29ja2V0cy4gVGhpcyBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgY29kZSBpbiB0aGUgTVBUQ1Agc29ja2V0IG9wdGlvbnMgaGFuZGxpbmcgbG9naWMsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBoYW5kbGVzIHZhcmlvdXMgaW5wdXRzIGFuZCBzdWJmbG93IHN0YXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE4OjUzOjM2LjY3ODkyMzQwMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjU5MTEwNTA3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUFRDUFwiLFxuICAgIFwiSVBWNlwiLFxuICAgIFwiTVBUQ1BfSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzc1wiLFxuICAgIFwibXB0Y3Bfc2V0c29ja29wdF92NlwiLFxuICAgIFwibXB0Y3BfZ2V0c29ja29wdF92NlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igc2V0dGluZyBhbmQgZ2V0dGluZyB0aGUgSVBWNl9UQ0xBU1Mgc29ja2V0IG9wdGlvbiBvbiBNUFRDUCBzb2NrZXRzLiBUaGlzIGludHJvZHVjZXMgbmV3IHJlYWNoYWJsZSBjb2RlIGluIHRoZSBNUFRDUCBzb2NrZXQgb3B0aW9ucyBoYW5kbGluZyBsb2dpYywgd2hpY2ggc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgY29ycmVjdGx5IGhhbmRsZXMgdmFyaW91cyBpbnB1dHMgYW5kIHN1YmZsb3cgc3RhdGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxODo1MzozNi42Nzg5MzE3ODFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NjAyNzQwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGZlN2E2NTIyN2MwMjFiYTNkZTMzYzBlNjg4ZGY5NTk3N2EzZWI1NzRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgMTMgMTg6NTM6MzQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3NvY2tvcHQuYyBiL25ldC9tcHRjcC9zb2Nrb3B0LmNcXG5pbmRleCBmY2Y2ZmViMmE5ZWI1ZC4uMWI4M2JiYTBiNThlMDUgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL3NvY2tvcHQuY1xcbisrKyBiL25ldC9tcHRjcC9zb2Nrb3B0LmNcXG5AQCAtMzk0LDYgKzM5NCwzOSBAQCBzdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfc29sX3NvY2tldChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcXG4gXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzcyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbit7XFxuKyNpZiAhSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4rXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbisjZWxzZVxcbitcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93O1xcbitcXHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltc2s7XFxuK1xcdGludCBlcnIsIHZhbDtcXG4rXFxuK1xcdGVyciA9IGlwdjZfc2V0c29ja29wdChzaywgU09MX0lQVjYsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcXG4rXFxuK1xcdGlmIChlcnIgIT0gMClcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdGxvY2tfc29jayhzayk7XFxuK1xcdHNvY2tvcHRfc2VxX2luYyhtc2spO1xcbitcXHR2YWwgPSBSRUFEX09OQ0UoaW5ldDZfc2soc2spLVxcdTAwM2V0Y2xhc3MpO1xcbitcXHRtcHRjcF9mb3JfZWFjaF9zdWJmbG93KG1zaywgc3ViZmxvdykge1xcbitcXHRcXHRzdHJ1Y3Qgc29jayAqc3NrID0gbXB0Y3Bfc3ViZmxvd190Y3Bfc29jayhzdWJmbG93KTtcXG4rXFx0XFx0Ym9vbCBzbG93O1xcbitcXG4rXFx0XFx0c2xvdyA9IGxvY2tfc29ja19mYXN0KHNzayk7XFxuK1xcdFxcdGluZXQ2X3NrKHNzayktXFx1MDAzZXRjbGFzcyA9IHZhbDtcXG4rXFx0XFx0c2tfZHN0X3Jlc2V0KHNzayk7XFxuK1xcdFxcdHVubG9ja19zb2NrX2Zhc3Qoc3NrLCBzbG93KTtcXG4rXFx0fVxcbitcXHRyZWxlYXNlX3NvY2soc2spO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuKyNlbmRpZlxcbit9XFxuK1xcbiBzdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfdjYoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsXFxuIFxcdFxcdFxcdCAgICAgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbiB7XFxuQEAgLTQzNiw2ICs0NjksOCBAQCBzdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfdjYoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsXFxuIFxcbiBcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbiBcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBJUFY2X1RDTEFTUzpcXG4rXFx0XFx0cmV0dXJuIG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzcyhtc2ssIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG5AQCAtMTQ4NSw2ICsxNTIwLDkgQEAgc3RhdGljIGludCBtcHRjcF9nZXRzb2Nrb3B0X3Y2KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxcbiBcXHRzdHJ1Y3Qgc29jayAqc2sgPSAodm9pZCAqKW1zaztcXG4gXFxuIFxcdHN3aXRjaCAob3B0bmFtZSkge1xcbitcXHRjYXNlIElQVjZfVENMQVNTOlxcbitcXHRcXHRyZXR1cm4gbXB0Y3BfcHV0X2ludF9vcHRpb24obXNrLCBvcHR2YWwsIG9wdGxlbixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFJFQURfT05DRShpbmV0Nl9zayhzayktXFx1MDAzZXRjbGFzcykpO1xcbiBcXHRjYXNlIElQVjZfVjZPTkxZOlxcbiBcXHRcXHRyZXR1cm4gbXB0Y3BfcHV0X2ludF9vcHRpb24obXNrLCBvcHR2YWwsIG9wdGxlbixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIHNrLVxcdTAwM2Vza19pcHY2b25seSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE4OjUzOjM3LjMyNzEzMjEwMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTExOTQyODg2OTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1QVENQXCIsXG4gICAgXCJJUFY2XCIsXG4gICAgXCJNUFRDUF9JUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzXCIsXG4gICAgXCJtcHRjcF9zZXRzb2Nrb3B0X3Y2XCIsXG4gICAgXCJtcHRjcF9nZXRzb2Nrb3B0X3Y2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBzZXR0aW5nIGFuZCBnZXR0aW5nIHRoZSBJUFY2X1RDTEFTUyBzb2NrZXQgb3B0aW9uIG9uIE1QVENQIHNvY2tldHMuIFRoaXMgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGNvZGUgaW4gdGhlIE1QVENQIHNvY2tldCBvcHRpb25zIGhhbmRsaW5nIGxvZ2ljLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgaGFuZGxlcyB2YXJpb3VzIGlucHV0cyBhbmQgc3ViZmxvdyBzdGF0ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZmU3YTY1MjI3YzAyMWJhM2RlMzNjMGU2ODhkZjk1OTc3YTNlYjU3NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDEzIDE4OjUzOjM0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3NvY2tvcHQuYyBiL25ldC9tcHRjcC9zb2Nrb3B0LmNcbmluZGV4IGZjZjZmZWIyYTllYjVkLi4xYjgzYmJhMGI1OGUwNSAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9zb2Nrb3B0LmNcbisrKyBiL25ldC9tcHRjcC9zb2Nrb3B0LmNcbkBAIC0zOTQsNiArMzk0LDM5IEBAIHN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF9zb2xfc29ja2V0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxuIFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIH1cbiBcbitzdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzcyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbitcdFx0XHRcdFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuK3tcbisjaWYgIUlTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rI2Vsc2VcbitcdHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3c7XG4rXHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltc2s7XG4rXHRpbnQgZXJyLCB2YWw7XG4rXG4rXHRlcnIgPSBpcHY2X3NldHNvY2tvcHQoc2ssIFNPTF9JUFY2LCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4rXG4rXHRpZiAoZXJyICE9IDApXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRsb2NrX3NvY2soc2spO1xuK1x0c29ja29wdF9zZXFfaW5jKG1zayk7XG4rXHR2YWwgPSBSRUFEX09OQ0UoaW5ldDZfc2soc2spLVx1MDAzZXRjbGFzcyk7XG4rXHRtcHRjcF9mb3JfZWFjaF9zdWJmbG93KG1zaywgc3ViZmxvdykge1xuK1x0XHRzdHJ1Y3Qgc29jayAqc3NrID0gbXB0Y3Bfc3ViZmxvd190Y3Bfc29jayhzdWJmbG93KTtcbitcdFx0Ym9vbCBzbG93O1xuK1xuK1x0XHRzbG93ID0gbG9ja19zb2NrX2Zhc3Qoc3NrKTtcbitcdFx0aW5ldDZfc2soc3NrKS1cdTAwM2V0Y2xhc3MgPSB2YWw7XG4rXHRcdHNrX2RzdF9yZXNldChzc2spO1xuK1x0XHR1bmxvY2tfc29ja19mYXN0KHNzaywgc2xvdyk7XG4rXHR9XG4rXHRyZWxlYXNlX3NvY2soc2spO1xuK1xuK1x0cmV0dXJuIDA7XG4rI2VuZGlmXG4rfVxuK1xuIHN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF92NihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbiBcdFx0XHQgICAgICAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcbiB7XG5AQCAtNDM2LDYgKzQ2OSw4IEBAIHN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF92NihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbiBcbiBcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiBcdFx0YnJlYWs7XG4rXHRjYXNlIElQVjZfVENMQVNTOlxuK1x0XHRyZXR1cm4gbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzKG1zaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xuIFx0fVxuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC0xNDg1LDYgKzE1MjAsOSBAQCBzdGF0aWMgaW50IG1wdGNwX2dldHNvY2tvcHRfdjYoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsXG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSAodm9pZCAqKW1zaztcbiBcbiBcdHN3aXRjaCAob3B0bmFtZSkge1xuK1x0Y2FzZSBJUFY2X1RDTEFTUzpcbitcdFx0cmV0dXJuIG1wdGNwX3B1dF9pbnRfb3B0aW9uKG1zaywgb3B0dmFsLCBvcHRsZW4sXG4rXHRcdFx0XHRcdCAgICBSRUFEX09OQ0UoaW5ldDZfc2soc2spLVx1MDAzZXRjbGFzcykpO1xuIFx0Y2FzZSBJUFY2X1Y2T05MWTpcbiBcdFx0cmV0dXJuIG1wdGNwX3B1dF9pbnRfb3B0aW9uKG1zaywgb3B0dmFsLCBvcHRsZW4sXG4gXHRcdFx0XHRcdCAgICBzay1cdTAwM2Vza19pcHY2b25seSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxODo1MzozNy4zMjcxMzQ4MDFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTk1ODk4NTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIE1QVENQIElQVjZfVENMQVNTIFBhdGNoKipcblxuQWxyaWdodCwgc28gd2UndmUgZ290IGEgcGF0Y2ggdGhhdCdzIGludHJvZHVjaW5nIHN1cHBvcnQgZm9yIGBJUFY2X1RDTEFTU2Agd2l0aGluIE1QVENQIHNvY2tldHMuIFRoZSBjb3JlIGNoYW5nZXMgYXJlLCBhcyBleHBlY3RlZCwgd2l0aGluIGBuZXQvbXB0Y3Avc29ja29wdC5jYC4gU3BlY2lmaWNhbGx5LCB0aGV5J3ZlIHRvdWNoZWQgYG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzc2AsIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2YCwgYW5kIGBtcHRjcF9nZXRzb2Nrb3B0X3Y2YC4gVGhhdCBzZWVtcyBsb2dpY2FsOyBgc2V0c29ja29wdGAgYW5kIGBnZXRzb2Nrb3B0YCB3b3VsZCBiZSB0aGUgcHJpbWFyeSBpbnRlcmZhY2VzIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHksIHdpdGggdGhlIGRlZGljYXRlZCBgbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzYCBiZWluZyBhZGRlZCwgcHJlc3VtYWJseSB0byBoYW5kbGUgdGhlIGBJUFY2X1RDTEFTU2Agb3B0aW9uIGluIHBhcnRpY3VsYXIsIGZvciB0aGUgSVB2Ni1zcGVjaWZpYyBzb2NrZXQgb3B0aW9ucyBmb3IgTVBUQ1AuXG5cbk5vdywgYmVmb3JlIEkgZGlnIGludG8gdGhlIGNvZGUgaXRzZWxmLCBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSB0aGUgcHJlLXJlcXVpc2l0ZXMuIFdlJ3JlIGRlYWxpbmcgd2l0aCBNUFRDUCwgc28gYENPTkZJR19NUFRDUGAgKmhhcyogdG8gYmUgZW5hYmxlZC4gQW5kIGl0J3MgYElQVjZfVENMQVNTYCBzbyBgQ09ORklHX0lQVjZgIG11c3QgYmUgZW5hYmxlZC4gVGhhdCdzIGEgZ2l2ZW4uXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgYG5ldC9tcHRjcC9zb2Nrb3B0LmNgIGZvciBhbnkgb3RoZXIgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3IgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIFRoZXJlIGNvdWxkIGJlIHNvbWUgc3VidGxlIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHNvY2tldCBvcHRpb25zIG9yIGV2ZW4gTVBUQ1AgZmVhdHVyZXMgdGhhdCB3ZSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIGZ1bGwgcGljdHVyZSBiZWZvcmUgZGl2aW5nIGludG8gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MjgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxODo1Mzo0Mi4zMjMwMzYzOTlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5Njk4MTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19NUFRDUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXB0Y3AvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5uZXQvbXB0Y3AvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfTVBUQ1ApICs9IG1wdGNwLm9cXG5uZXQvbXB0Y3AvTWFrZWZpbGUtMy1cXG4tLVxcbm5ldC9tcHRjcC9NYWtlZmlsZT0xMj1tcHRjcF90b2tlbl90ZXN0LW9ianMgOj0gdG9rZW5fdGVzdC5vXFxubmV0L21wdGNwL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19NUFRDUF9LVU5JVF9URVNUKSArPSBtcHRjcF9jcnlwdG9fdGVzdC5vIG1wdGNwX3Rva2VuX3Rlc3Qub1xcbm5ldC9tcHRjcC9NYWtlZmlsZS0xNC1cXG4tLVxcbm5ldC9tcHRjcC9jcnlwdG8uYz00Mz12b2lkIG1wdGNwX2NyeXB0b19obWFjX3NoYSh1NjQga2V5MSwgdTY0IGtleTIsIHU4ICptc2csIGludCBsZW4sIHZvaWQgKmhtYWMpXFxuLS1cXG5uZXQvbXB0Y3AvY3J5cHRvLmMtNDktXFxubmV0L21wdGNwL2NyeXB0by5jOjUwOiNpZiBJU19NT0RVTEUoQ09ORklHX01QVENQX0tVTklUX1RFU1QpXFxubmV0L21wdGNwL2NyeXB0by5jLTUxLUVYUE9SVF9TWU1CT0xfR1BMKG1wdGNwX2NyeXB0b19obWFjX3NoYSk7XFxuLS1cXG5uZXQvbXB0Y3AvY3RybC5jPTU4Nz12b2lkIF9faW5pdCBtcHRjcF9pbml0KHZvaWQpXFxuLS1cXG5uZXQvbXB0Y3AvY3RybC5jLTU5NS1cXG5uZXQvbXB0Y3AvY3RybC5jOjU5NjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvY3RybC5jLTU5Ny1pbnQgX19pbml0IG1wdGNwdjZfaW5pdCh2b2lkKVxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYz0yMz1zdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMjQxLVxcdFxcdFxcdFxcdG1wX29wdC1cXHUwMDNlYWRkci5mYW1pbHkgPSBBRl9JTkVUO1xcbm5ldC9tcHRjcC9vcHRpb25zLmM6MjQyOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMjQzLVxcdFxcdFxcdGVsc2UgaWYgKG9wc2l6ZSA9PSBUQ1BPTEVOX01QVENQX0FERF9BRERSNiB8fFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy0yNTItXFx0XFx0XFx0XFx0bXBfb3B0LVxcdTAwM2VhZGRyLmZhbWlseSA9IEFGX0lORVQ7XFxubmV0L21wdGNwL29wdGlvbnMuYzoyNTM6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL29wdGlvbnMuYy0yNTQtXFx0XFx0XFx0ZWxzZSBpZiAob3BzaXplID09IFRDUE9MRU5fTVBUQ1BfQUREX0FERFI2X0JBU0UgfHxcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMjc0LVxcdFxcdH1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjI3NTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTI3Ni1cXHRcXHRlbHNlIHtcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmM9NjMyPXN0YXRpYyB1NjQgYWRkX2FkZHJfZ2VuZXJhdGVfaG1hYyh1NjQga2V5MSwgdTY0IGtleTIsXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTY0NC1cXHR9XFxubmV0L21wdGNwL29wdGlvbnMuYzo2NDU6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL29wdGlvbnMuYy02NDYtXFx0ZWxzZSBpZiAoYWRkci1cXHUwMDNlZmFtaWx5ID09IEFGX0lORVQ2KSB7XFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTEzODQ9dm9pZCBtcHRjcF93cml0ZV9vcHRpb25zKHN0cnVjdCB0Y3BoZHIgKnRoLCBfX2JlMzIgKnB0ciwgc3RydWN0IHRjcF9zb2NrICp0cCxcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTU2Ny1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjE1Njg6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL29wdGlvbnMuYy0xNTY5LVxcdFxcdGlmIChvcHRzLVxcdTAwM2VhZGRyLmZhbWlseSA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTU4Ni1cXHRcXHR9XFxubmV0L21wdGNwL29wdGlvbnMuYzoxNTg3OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTU4OC1cXHRcXHRlbHNlIGlmIChvcHRzLVxcdTAwM2VhZGRyLmZhbWlseSA9PSBBRl9JTkVUNikge1xcbi0tXFxubmV0L21wdGNwL3BtLmM9MzM9Ym9vbCBtcHRjcF9wbV9hZGRyX2ZhbWlsaWVzX21hdGNoKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9tcHRjcC9wbS5jLTM4LVxcbm5ldC9tcHRjcC9wbS5jOjM5OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wbS5jLTQwLVxcdGJvb2wgbG9jX2lzX3Y0ID0gbG9jLVxcdTAwM2VmYW1pbHkgPT0gQUZfSU5FVCB8fCBpcHY2X2FkZHJfdjRtYXBwZWQoXFx1MDAyNmxvYy1cXHUwMDNlYWRkcjYpO1xcbi0tXFxubmV0L21wdGNwL3BtLmM9NTU9Ym9vbCBtcHRjcF9hZGRyZXNzZXNfZXF1YWwoY29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqYSxcXG4tLVxcbm5ldC9tcHRjcC9wbS5jLTYyLVxcdFxcdFxcdGFkZHJfZXF1YWxzID0gYS1cXHUwMDNlYWRkci5zX2FkZHIgPT0gYi1cXHUwMDNlYWRkci5zX2FkZHI7XFxubmV0L21wdGNwL3BtLmM6NjM6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3BtLmMtNjQtXFx0XFx0ZWxzZVxcbi0tXFxubmV0L21wdGNwL3BtLmM9ODM9dm9pZCBtcHRjcF9sb2NhbF9hZGRyZXNzKGNvbnN0IHN0cnVjdCBzb2NrX2NvbW1vbiAqc2tjLFxcbi0tXFxubmV0L21wdGNwL3BtLmMtODktXFx0XFx0YWRkci1cXHUwMDNlYWRkci5zX2FkZHIgPSBza2MtXFx1MDAzZXNrY19yY3Zfc2FkZHI7XFxubmV0L21wdGNwL3BtLmM6OTA6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3BtLmMtOTEtXFx0ZWxzZSBpZiAoYWRkci1cXHUwMDNlZmFtaWx5ID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L21wdGNwL3BtLmM9OTY9dm9pZCBtcHRjcF9yZW1vdGVfYWRkcmVzcyhjb25zdCBzdHJ1Y3Qgc29ja19jb21tb24gKnNrYyxcXG4tLVxcbm5ldC9tcHRjcC9wbS5jLTEwMi1cXHRcXHRhZGRyLVxcdTAwM2VhZGRyLnNfYWRkciA9IHNrYy1cXHUwMDNlc2tjX2RhZGRyO1xcbm5ldC9tcHRjcC9wbS5jOjEwMzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcG0uYy0xMDQtXFx0ZWxzZSBpZiAoYWRkci1cXHUwMDNlZmFtaWx5ID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jPTYwNj1maWxsX2xvY2FsX2FkZHJlc3NfYW55KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKnJlbW90ZSxcXG4tLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy02MTItXFx0bG9jYWwtXFx1MDAzZWFkZHIuZmFtaWx5ID1cXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6NjEzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy02MTQtXFx0XFx0XFx0cmVtb3RlLVxcdTAwM2VmYW1pbHkgPT0gQUZfSU5FVDYgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYz04NTI9c3RhdGljIGludCBtcHRjcF9wbV9ubF9jcmVhdGVfbGlzdGVuX3NvY2tldChzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtODg5LVxcdG1wdGNwX2luZm8yc29ja2FkZHIoXFx1MDAyNmVudHJ5LVxcdTAwM2VhZGRyLCBcXHUwMDI2YWRkciwgZW50cnktXFx1MDAzZWFkZHIuZmFtaWx5KTtcXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6ODkwOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy04OTEtXFx0aWYgKGVudHJ5LVxcdTAwM2VhZGRyLmZhbWlseSA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy04OTUtXFx0XFx0ZXJyID0gaW5ldF9iaW5kX3NrKHNzaywgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopXFx1MDAyNmFkZHIsIGFkZHJsZW4pO1xcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYzo4OTY6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTg5Ny1cXHRlbHNlIGlmIChzc2stXFx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9MjI9c3RhdGljIGludCBtcHRjcF9wbV9mYW1pbHlfdG9fYWRkcihpbnQgZmFtaWx5KVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtMjMte1xcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM6MjQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0yNS1cXHRpZiAoZmFtaWx5ID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYz0zMT1zdGF0aWMgaW50IG1wdGNwX3BtX3BhcnNlX3BtX2FkZHJfYXR0cihzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy02My1cXHRpZiAoYWRkci1cXHUwMDNlZmFtaWx5ICE9IEFGX0lORVRcXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jOjY0OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNjUtXFx0ICAgIFxcdTAwMjZcXHUwMDI2IGFkZHItXFx1MDAzZWZhbWlseSAhPSBBRl9JTkVUNlxcbi0tXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy03OC1cXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jOjc5OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtODAtXFx0aWYgKGFkZHItXFx1MDAzZWZhbWlseSA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9MTMxPXN0YXRpYyBpbnQgbXB0Y3BfbmxfZmlsbF9hZGRyKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTE1Ni1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jOjE1NzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTE1OC1cXHRlbHNlIGlmIChhZGRyLVxcdTAwM2VmYW1pbHkgPT0gQUZfSU5FVDYgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9Mjk4PXN0YXRpYyBpbnQgbXB0Y3BfZXZlbnRfYWRkX3N1YmZsb3coc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHNvY2sgKnNzaylcXG4tLVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtMzEyLVxcdFxcdGJyZWFrO1xcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM6MzEzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtMzE0LVxcdGNhc2UgQUZfSU5FVDY6IHtcXG4tLVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9NDY1PXZvaWQgbXB0Y3BfZXZlbnRfYWRkcl9hbm5vdW5jZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNzayxcXG4tLVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNTAyLVxcdFxcdGJyZWFrO1xcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM6NTAzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNTA0LVxcdGNhc2UgQUZfSU5FVDY6XFxuLS1cXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jPTUyMj12b2lkIG1wdGNwX2V2ZW50X3BtX2xpc3RlbmVyKGNvbnN0IHN0cnVjdCBzb2NrICpzc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTU1MS1cXHRcXHRicmVhaztcXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jOjU1MjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTU1My1cXHRjYXNlIEFGX0lORVQ2OiB7XFxuLS1cXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM9NDMyPXN0YXRpYyBzdHJ1Y3Qgc29jayAqbXB0Y3BfbmxfZmluZF9zc2soc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4tLVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy00NTctXFx0XFx0XFx0YnJlYWs7XFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jOjQ1ODojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtNDU5LVxcdFxcdGNhc2UgQUZfSU5FVDY6IHtcXG4tLVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYz00Nzg9aW50IG1wdGNwX3BtX25sX3N1YmZsb3dfZGVzdHJveV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtNTA2LVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYzo1MDc6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTUwOC1cXHRpZiAoYWRkcl9sLmFkZHIuZmFtaWx5ID09IEFGX0lORVQgXFx1MDAyNlxcdTAwMjYgaXB2Nl9hZGRyX3Y0bWFwcGVkKFxcdTAwMjZhZGRyX3IuYWRkcjYpKSB7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMC0jaW5jbHVkZSBcXHUwMDNjbmV0L3RjcF9zdGF0ZXMuaFxcdTAwM2VcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyMTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMi0jaW5jbHVkZSBcXHUwMDNjbmV0L3RyYW5zcF92Ni5oXFx1MDAzZVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MzE9c3RhdGljIHVuc2lnbmVkIGludCBtcHRjcF9pbnFfaGludChjb25zdCBzdHJ1Y3Qgc29jayAqc2spO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzUtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzY6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzctc3RydWN0IG1wdGNwNl9zb2NrIHtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTY0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzICptcHRjcF9mYWxsYmFja190Y3Bfb3BzKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTY3LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjY4OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTY5LVxcdGlmIChmYW1pbHkgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zMzk3PXN0YXRpYyB2b2lkIG1wdGNwX2NvcHlfaW5hZGRycyhzdHJ1Y3Qgc29jayAqbXNrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc3NrKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMzOTgte1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjMzOTk6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzQwMC1cXHRjb25zdCBzdHJ1Y3QgaXB2Nl9waW5mbyAqc3NrNiA9IGluZXQ2X3NrKHNzayk7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zNDQyPXN0YXRpYyBpbnQgbXB0Y3BfZGlzY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM1MDQtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzUwNTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNTA2LXN0YXRpYyBzdHJ1Y3QgaXB2Nl9waW5mbyAqbXB0Y3BfaW5ldDZfc2soY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MzU1Mz1zdHJ1Y3Qgc29jayAqbXB0Y3Bfc2tfY2xvbmVfaW5pdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNTY1LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM1NjY6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzU2Ny1cXHRpZiAobnNrLVxcdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNTcyLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM1NzM6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzU3NC1cXHRpZiAobnNrLVxcdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz00MDk5PXN0YXRpYyBpbnQgbXB0Y3BfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsIGludCBhZGRyX2xlbilcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQxMTMtXFx0XFx0ZXJyID0gaW5ldF9iaW5kX3NrKHNzaywgdWFkZHIsIGFkZHJfbGVuKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0MTE0OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQxMTUtXFx0ZWxzZSBpZiAoc2stXFx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTQ2MzU9dm9pZCBfX2luaXQgbXB0Y3BfcHJvdG9faW5pdCh2b2lkKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDY3NC1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0Njc1OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ2NzYtc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbXB0Y3BfdjZfc3RyZWFtX29wcyA9IHtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oPTkxMj12b2lkIF9faW5pdCBtcHRjcF9wcm90b19pbml0KHZvaWQpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjkxMzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC05MTQtaW50IF9faW5pdCBtcHRjcF9wcm90b192Nl9pbml0KHZvaWQpO1xcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNy0jaW5jbHVkZSBcXHUwMDNjbmV0L3Byb3RvY29sLmhcXHUwMDNlXFxubmV0L21wdGNwL3N1YmZsb3cuYzoxODojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE5LSNpbmNsdWRlIFxcdTAwM2NuZXQvaXA2X3JvdXRlLmhcXHUwMDNlXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTM1OD1zdGF0aWMgaW50IHN1YmZsb3dfdjRfc2VuZF9zeW5hY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTM3MC1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjM3MTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTM3Mi1zdGF0aWMgaW50IHN1YmZsb3dfdjZfc2VuZF9zeW5hY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTY0OT1zdGF0aWMgaW50IHN1YmZsb3dfcmVidWlsZF9oZWFkZXIoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy02NTgtXFxubmV0L21wdGNwL3N1YmZsb3cuYzo2NTk6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3N1YmZsb3cuYy02NjAtc3RhdGljIGludCBzdWJmbG93X3Y2X3JlYnVpbGRfaGVhZGVyKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9NjkyPXN0YXRpYyB2b2lkIHN1YmZsb3dfdjRfcmVxX2Rlc3RydWN0b3Ioc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy02OTctXFxubmV0L21wdGNwL3N1YmZsb3cuYzo2OTg6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3N1YmZsb3cuYy02OTktc3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzIG1wdGNwX3N1YmZsb3dfdjZfcmVxdWVzdF9zb2NrX29wcyBfX3JvX2FmdGVyX2luaXQ7XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTczNz1zdHJ1Y3QgcmVxdWVzdF9zb2NrICptcHRjcF9zdWJmbG93X3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTc0Mi1cXHRcXHRvcHMgPSBcXHUwMDI2bXB0Y3Bfc3ViZmxvd192NF9yZXF1ZXN0X3NvY2tfb3BzO1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6NzQzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNzQ0LVxcdGVsc2UgaWYgKG9wcy1cXHUwMDNlZmFtaWx5ID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0xNTUzPXN1YmZsb3dfZGVmYXVsdF9hZl9vcHMoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU1NC17XFxubmV0L21wdGNwL3N1YmZsb3cuYzoxNTU1OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU1Ni1cXHRpZiAoc2stXFx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU2MS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE1NjI6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNTYzLXZvaWQgbXB0Y3B2Nl9oYW5kbGVfbWFwcGVkKHN0cnVjdCBzb2NrICpzaywgYm9vbCBtYXBwZWQpXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE1ODI9dm9pZCBtcHRjcF9pbmZvMnNvY2thZGRyKGNvbnN0IHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE1OTItXFx0XFx0XFx0aW5fYWRkci1cXHUwMDNlc2luX2FkZHIgPSBpbmZvLVxcdTAwM2VhZGRyO1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTU5MzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE1OTQtXFx0XFx0ZWxzZSBpZiAoaXB2Nl9hZGRyX3Y0bWFwcGVkKFxcdTAwMjZpbmZvLVxcdTAwM2VhZGRyNikpXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE1OTgtXFx0fVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTU5OTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2MDAtXFx0ZWxzZSBpZiAoYWRkci1cXHUwMDNlc3NfZmFtaWx5ID09IEFGX0lORVQ2KSB7XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE2MTM9aW50IF9fbXB0Y3Bfc3ViZmxvd19jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IG1wdGNwX3BtX2xvY2FsICpsb2NhbCxcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTY0OC1cXHRcXHRcXHRsb2NhbF9pZCA9IC0xO1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTY0OTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2NTAtXFx0fSBlbHNlIGlmIChzay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KSB7XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2NjUtXFx0YWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pO1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTY2NjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2NjctXFx0aWYgKGFkZHIuc3NfZmFtaWx5ID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0xNzU2PXN0YXRpYyB2b2lkIG1wdGNwX3N1YmZsb3dfb3BzX292ZXJyaWRlKHN0cnVjdCBzb2NrICpzc2spXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNzU3LXtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE3NTg6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNzU5LVxcdGlmIChzc2stXFx1MDAzZXNrX3Byb3QgPT0gXFx1MDAyNnRjcHY2X3Byb3QpXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE3NjY9c3RhdGljIHZvaWQgbXB0Y3Bfc3ViZmxvd19vcHNfdW5kb19vdmVycmlkZShzdHJ1Y3Qgc29jayAqc3NrKVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTc2Ny17XFxubmV0L21wdGNwL3N1YmZsb3cuYzoxNzY4OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTc2OS1cXHRpZiAoc3NrLVxcdTAwM2Vza19wcm90ID09IFxcdTAwMjZ0Y3B2Nl9wcm90X292ZXJyaWRlKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0yMTQxPXZvaWQgX19pbml0IG1wdGNwX3N1YmZsb3dfaW5pdCh2b2lkKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yMTczLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjE3NDojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNzUtdm9pZCBfX2luaXQgbXB0Y3Bfc3ViZmxvd192Nl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvbXB0Y3AvdG9rZW4uYz0zOTg9dm9pZCBfX2luaXQgbXB0Y3BfdG9rZW5faW5pdCh2b2lkKVxcbi0tXFxubmV0L21wdGNwL3Rva2VuLmMtNDE3LVxcbm5ldC9tcHRjcC90b2tlbi5jOjQxODojaWYgSVNfTU9EVUxFKENPTkZJR19NUFRDUF9LVU5JVF9URVNUKVxcbm5ldC9tcHRjcC90b2tlbi5jLTQxOS1FWFBPUlRfU1lNQk9MX0dQTChtcHRjcF90b2tlbl9uZXdfcmVxdWVzdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE4OjUzOjQyLjQ2Mjc0NjMzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODIxOTE5MDA0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1QVENQIElQVjZfVENMQVNTIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9tcHRjcC9zb2Nrb3B0LmNgLiBJdCdzIGludHJvZHVjaW5nIGBJUFY2X1RDTEFTU2Agc3VwcG9ydCBzcGVjaWZpY2FsbHkgZm9yIE1QVENQIHNvY2tldHMuIFRoYXQncyBnb29kLCBzZWVpbmcgYXMgd2Ugc2hvdWxkIGJlIGFibGUgdG8gbWFrZSB1c2Ugb2YgdHJhZmZpYyBjbGFzcyBkaWZmZXJlbnRpYXRpb25zIGZvciBNUFRDUCBpbiBhbiBJUHY2IGVudmlyb25tZW50LlxuXG5Ob3csIHRoZSBjb2RlIGl0c2VsZiBpcyB1c2luZyBhIHByZXByb2Nlc3NvciBkaXJlY3RpdmUsIGAjaWYgIUlTX0VOQUJMRUQoQ09ORklHX0lQVjYpYCwgd2l0aGluIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3NgLiBUaGF0J3MgYSBiaXQgb2RkLiBJIHdvdWxkIGhhdmUgZXhwZWN0ZWQgYSBjaGVjayAqZm9yKiBJUHY2IHRvIGluY2x1ZGUgdGhpcyBmZWF0dXJlLCBub3QgZXhjbHVkZSBpdC4gU28sIGEgZ3VhcmQgbGlrZSBgQ09ORklHX0lQVjZgIHNlZW1zIGxvZ2ljYWw7IHRoZSBgIWAgbmVnYXRlcyBteSBpbml0aWFsIGltcHJlc3Npb24uXG5cbkJlZm9yZSBJIGp1bXAgdG8gY29uY2x1c2lvbnMsIEkgbmVlZCB0byB2ZXJpZnkgaG93IGBDT05GSUdfSVBWNmAgYW5kIHBvdGVudGlhbGx5IGBDT05GSUdfTVBUQ1BfSVBWNmAgYXJlIGJlaW5nIHVzZWQgaW4gdGhpcyBmaWxlLiBUaGVyZSBtaWdodCBiZSBhIHN1YnRsZSByZWFzb24gZm9yIHRoaXMgY29uZGl0aW9uYWwgbG9naWMsIG9yIHBlcmhhcHMgaXQncyBhbiBvdmVyc2lnaHQuIFRpbWUgdG8gc2NhbiBgbmV0L21wdGNwL3NvY2tvcHQuY2AgZm9yIHRob3NlIGNvbmZpZyBzeW1ib2xzIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY2NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxODo1Mzo1MC42ODE5MzkwMzJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODMwOTk1MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0lQVjZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL3NvY2tvcHQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3Avc29ja29wdC5jPTM5Nz1zdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzcyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMzk5LXtcXG5uZXQvbXB0Y3Avc29ja29wdC5jOjQwMDojaWYgIUlTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L21wdGNwL3NvY2tvcHQuYy00MDEtXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L21wdGNwL3NvY2tvcHQuYz0xMjA2PXN0YXRpYyB2b2lkIG1wdGNwX2dldF9zdWJfYWRkcnMoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19hZGRycyAqYSlcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTIyMi1cXHRcXHRhLVxcdTAwM2VzaW5fcmVtb3RlLnNpbl9hZGRyLnNfYWRkciA9IGluZXQtXFx1MDAzZWluZXRfZGFkZHI7XFxubmV0L21wdGNwL3NvY2tvcHQuYzoxMjIzOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTIyNC1cXHR9IGVsc2UgaWYgKHNrLVxcdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTg6NTM6NTAuNzY1MDQ0NDI3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg2MjA4MTU2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFByb3Bvc2VkIE1QVENQIGFuZCBJUHY2IEludGVncmF0aW9uKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBpbnRlZ3JhdGluZyBUcmFmZmljIENsYXNzIChUQ0xBU1MpIHNldHRpbmcgd2l0aCBNUFRDUCBvdmVyIElQdjYuIFRoZSBmdW5kYW1lbnRhbCBjb25maWdzIHJlcXVpcmVkIGFyZSwgb2J2aW91c2x5LCBgTVBUQ1BgIGFuZCBgSVBWNmAuIFdlIGFyZSB3b3JraW5nIHdpdGggdGhyZWUgZnVuY3Rpb25zIGhlcmU6IGBtcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3NgIHdoaWNoIGlzIGEgbmV3IGZ1bmN0aW9uLCBhbmQgYG1wdGNwX3NldHNvY2tvcHRfdjZgIGFuZCBgbXB0Y3BfZ2V0c29ja29wdF92NmAsIHdoaWNoIGFyZSBleGlzdGluZyBmdW5jdGlvbnMgYmVpbmcgbW9kaWZpZWQuXG5cblRoZSBrZXkgaXMgaG93IHRoZXNlIHBpZWNlcyB3aWxsIGZpdCB0b2dldGhlci4gRmlyc3QsIGl0IGxvb2tzIGxpa2UgYElQVjZfVENMQVNTYCBzaG91bGQgYmUgYWNjZXNzaWJsZS4gVGhlIGV4aXN0aW5nIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2YCBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBgbXB0Y3Bfc2V0c29ja29wdGAgd2hlbiB0aGUgc29ja2V0IG9wdGlvbiBsZXZlbCBpcyBgU09MX0lQVjZgLCBhbmQgdGhlIGBtcHRjcF9nZXRzb2Nrb3B0X3Y2YCBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBgbXB0Y3BfZ2V0c29ja29wdGAgd2hlbiB0aGUgc29ja2V0IG9wdGlvbiBsZXZlbCBpcyBgU09MX0lQVjZgIC0gdGhhdCBtZWFucyBpdCdzIGEgZ29vZCBwbGFjZSB0byBob29rIGluLlxuXG5Ob3csIGxldCdzIGRyaWxsIGRvd24gaW50byBgbXB0Y3Bfc2V0c29ja29wdF92NmAgYW5kIGBtcHRjcF9nZXRzb2Nrb3B0X3Y2YCBhbmQgc2VlIGhvdyB0aGUgbmV3IGBtcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3NgIGZ1bmN0aW9uIGlzIGNhbGxlZCBvciB3aWxsIGludGVyZmFjZSB3aXRoIHRoZW0uIEknbGwgbmVlZCB0byBsb29rIGF0IHRoZSByZWxldmFudCBjb2RlIGluIGRldGFpbCBhbmQgdmVyaWZ5IHByb3BlciBlcnJvciBoYW5kbGluZywgZGF0YSBzdHJ1Y3R1cmUgaW50ZXJhY3Rpb25zLCBhbmQgb3ZlcmFsbCBpbXBhY3Qgb24gZXhpc3RpbmcgTVBUQ1AvSVB2NiBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzYwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE4OjUzOjU2LjYyNzEzMTQ4MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzYzODk5MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3Bfc2V0c29ja29wdF92NlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXB0Y3Avc29ja29wdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9zb2Nrb3B0LmM9MzAwPXN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF9zb2xfc29ja2V0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L21wdGNwL3NvY2tvcHQuYy0zOTYtXFxubmV0L21wdGNwL3NvY2tvcHQuYzozOTc6c3RhdGljIGludCBtcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3Moc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsXFxubmV0L21wdGNwL3NvY2tvcHQuYy0zOTgtXFx0XFx0XFx0XFx0XFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L21wdGNwL3NvY2tvcHQuYy00MjktXFxubmV0L21wdGNwL3NvY2tvcHQuYzo0MzA6c3RhdGljIGludCBtcHRjcF9zZXRzb2Nrb3B0X3Y2KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNDMxLVxcdFxcdFxcdCAgICAgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L21wdGNwL3NvY2tvcHQuYy00NzItXFx0Y2FzZSBJUFY2X1RDTEFTUzpcXG5uZXQvbXB0Y3Avc29ja29wdC5jOjQ3MzpcXHRcXHRyZXR1cm4gbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzKG1zaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNDc0LVxcdH1cXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM9OTQyPWludCBtcHRjcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtOTcxLVxcdGlmIChsZXZlbCA9PSBTT0xfSVBWNilcXG5uZXQvbXB0Y3Avc29ja29wdC5jOjk3MjpcXHRcXHRyZXR1cm4gbXB0Y3Bfc2V0c29ja29wdF92Nihtc2ssIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcXG5uZXQvbXB0Y3Avc29ja29wdC5jLTk3My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTg6NTM6NTYuNzYzNTI4NzU0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTExNTY4Mzc2NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBQbGFuOiBNUFRDUCBTb2NrZXQgVENMQVNTIEhhbmRsaW5nKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHNvbWUga2VybmVsIGNoYW5nZXMg4oCTIHNwZWNpZmljYWxseSwgdGhlIGFiaWxpdHkgdG8gc2V0IGFuZCBnZXQgYElQVjZfVENMQVNTYCBvbiBNUFRDUCBzb2NrZXRzLiBUaGlzIGlzIHByaW1lIGZ1enppbmcgdGVycml0b3J5LiBXZSd2ZSBnb3QgYSBuZXcgc3VyZmFjZSBhcmVhIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBhbmQgd2UgbmVlZCB0byBleHBsb3JlIGl0IHRob3JvdWdobHkuXG5cbk15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB0aGUga2V5IHN5bWJvbHMgdGhhdCBhcmUgaW50cm9kdWNlZDogYG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzc2AsIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2YCwgYW5kIGBtcHRjcF9nZXRzb2Nrb3B0X3Y2YC4gVGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMgd2UgbmVlZCB0byB0YXJnZXQgZHVyaW5nIGZ1enppbmcuXG5cbkJlZm9yZSBJIGtpY2sgdGhpbmdzIG9mZiwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWdzIGluIHBsYWNlLiBXZSdsbCBuZWVkIGBNUFRDUGAgYW5kIGBJUFY2YCBlbmFibGVkLCBvYnZpb3VzbHkuIEknbSBnb2luZyB0byBkb3VibGUgY2hlY2sgaWYgYE1QVENQX0lQVjZgIGlzIGFsc28gYSBkZXBlbmRlbmN5OyBtaWdodCBhcyB3ZWxsIGdldCB0aGF0IHN0cmFpZ2h0ZW5lZCBvdXQgYmVmb3JlIEkgc3RhcnQuIEknbGwgdGFrZSBhIHF1aWNrIGxvb2sgaW4gYG5ldC9tcHRjcC9LY29uZmlnYCB0byBjb25maXJtLiBMZXQncyBtYWtlIHN1cmUgb3VyIGZvdW5kYXRpb24gaXMgc29saWQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDEyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE4OjU0OjA3LjkyMDM3MTYzOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2NTcyMDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNUFRDUF9JUFY2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL0tjb25maWc9MTY9Y29uZmlnIElORVRfTVBUQ1BfRElBR1xcbi0tXFxubmV0L21wdGNwL0tjb25maWctMTktXFxubmV0L21wdGNwL0tjb25maWc6MjA6Y29uZmlnIE1QVENQX0lQVjZcXG5uZXQvbXB0Y3AvS2NvbmZpZy0yMS1cXHRib29sIFxcXCJNUFRDUDogSVB2NiBzdXBwb3J0IGZvciBNdWx0aXBhdGggVENQXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxODo1NDowOC4wNTY5NTExNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDQ3OTY2NTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBNUFRDUF9JUFY2YCBDb25maWd1cmF0aW9uIE9wdGlvbioqXG5cblJpZ2h0LCBzbyBgTVBUQ1BfSVBWNmAgaXMgYSBkZWZpbmVkIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhpcyBzeXN0ZW0uIEknbSBnb2luZyB0byBxdWlja2x5IGRyaWxsIGRvd24gYW5kIGV4YW1pbmUgaXRzIGRlcGVuZGVuY2llcy4gS25vd2luZyBpdHMgcmVsYXRpb25zaGlwIHdpdGggb3RoZXIgZmVhdHVyZXMgYW5kIG1vZHVsZXMgd2lsbCBwcm92aWRlIHRoZSBjcnVjaWFsIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY3kgdHJlZSB3aWxsIHBhaW50IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGBNUFRDUF9JUFY2YCBtaWdodCBjYXNjYWRlIHRocm91Z2hvdXQgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBzeXN0ZW0ncyBvdmVyYWxsIGZ1bmN0aW9uYWxpdHkuIEl0J3MgdGltZSB0byBtYXAgb3V0IHRoZSBuZXR3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDkyMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE4OjU0OjExLjUwNDkyMDg0MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHRcXG4gICAyOlxcdGNvbmZpZyBNUFRDUFxcbiAgIDM6XFx0XFx0Ym9vbCBcXFwiTVBUQ1A6IE11bHRpcGF0aCBUQ1BcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA1OlxcdFxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbiAgIDY6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XFxuICAgNzpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBNdWx0aXBhdGggVENQIChNUFRDUCkgY29ubmVjdGlvbnMgc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIG92ZXIgbXVsdGlwbGVcXG4gIDEwOlxcdFxcdCAgc3ViZmxvd3MgaW4gb3JkZXIgdG8gdXRpbGl6ZSBtdWx0aXBsZSBuZXR3b3JrIHBhdGhzLiBFYWNoIHN1YmZsb3dcXG4gIDExOlxcdFxcdCAgdXNlcyB0aGUgVENQIHByb3RvY29sLCBhbmQgVENQIG9wdGlvbnMgY2FycnkgaGVhZGVyIGluZm9ybWF0aW9uIGZvclxcbiAgMTI6XFx0XFx0ICBNUFRDUC5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0aWYgTVBUQ1BcXG4gIDE1OlxcdFxcbiAgMTY6XFx0Y29uZmlnIElORVRfTVBUQ1BfRElBR1xcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcXG4gIDE4OlxcdFxcdGRlZl90cmlzdGF0ZSBJTkVUX0RJQUdcXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIE1QVENQX0lQVjZcXG4gIDIxOlxcdFxcdGJvb2wgXFxcIk1QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcXFwiXFxuICAyMjpcXHRcXHRkZXBlbmRzIG9uIElQVjY9eVxcbiAgMjM6XFx0XFx0ZGVmYXVsdCB5XFxuICAyNDpcXHRcXG4gIDI1OlxcdGNvbmZpZyBNUFRDUF9LVU5JVF9URVNUXFxuICAyNjpcXHRcXHR0cmlzdGF0ZSBcXFwiVGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICAyNzpcXHRcXHRkZXBlbmRzIG9uIEtVTklUXFxuICAyODpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgMjk6XFx0XFx0aGVscFxcbiAgMzA6XFx0XFx0ICBDdXJyZW50bHkgY292ZXJzIHRoZSBNUFRDUCBjcnlwdG8gYW5kIHRva2VuIGhlbHBlcnMuXFxuICAzMTpcXHRcXHQgIE9ubHkgdXNlZnVsIGZvciBrZXJuZWwgZGV2cyBydW5uaW5nIEtVbml0IHRlc3QgaGFybmVzcyBhbmQgYXJlIG5vdFxcbiAgMzI6XFx0XFx0ICBmb3IgaW5jbHVzaW9uIGludG8gYSBwcm9kdWN0aW9uIGJ1aWxkLlxcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwgcGxlYXNlIHJlZmVyXFxuICAzNTpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uIGluIERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0Ly5cXG4gIDM2OlxcdFxcbiAgMzc6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMzg6XFx0XFxuICAzOTpcXHRlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxODo1NDoxMS41MDUwMzQ3MDFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzc1ODgxMjIzMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgTVBUQ1AgU29ja2V0IE9wdGlvbnMgd2l0aCBJUHY2IFRDTEFTUyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgTVBUQ1BfSVBWNmAgcmVsaWVzIG9uIGBJUFY2PXlgIGFuZCBpcywgYnkgZGVmYXVsdCwgZW5hYmxlZC4gTWFrZXMgc2Vuc2UuIFNvLCBpbiB0ZXJtcyBvZiBlbmFibGluZyBjb25maWd1cmF0aW9ucyBmb3IgZnV6emluZywgSSdtIHRoaW5raW5nIEkndmUgZ290IGEgY291cGxlIG9mIHNvbGlkIG9wdGlvbnM6IGVpdGhlciBJIGNhbiBpbmNsdWRlIGBNUFRDUGAgYW5kIGBJUFY2YCwgb3IgSSBjYW4gYmUgYSBiaXQgbW9yZSBleHBsaWNpdCBhbmQgZW5hYmxlIGBNUFRDUGAsIGBJUFY2YCwgKmFuZCogYE1QVENQX0lQVjZgLiBFbmFibGluZyBgTVBUQ1BfSVBWNmAgaXMgdGVjaG5pY2FsbHkgcmVkdW5kYW50LCBzaW5jZSBpdCB3aWxsIGJlIGVuYWJsZWQgd2l0aCBgSVBWNj15YCwgYnV0IGl0IGRvZXNuJ3QgaHVydC5cblxuVGhlIGNvZGUncyBnb3QgdGhpcyBgI2lmICFJU19FTkFCTEVEKENPTkZJR19JUFY2KWAgaW4gYG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzc2AsIGFuZCB0aGF0IGNvbmZpcm1zIHRoYXQgYElQVjZgIGlzIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gaXRlbSBoZXJlLlxuXG5TbywgaGVyZSdzIG15IHN1bW1hcml6ZWQgYXBwcm9hY2g6XG5cbiogICAqKldvcnRoRnV6emluZzoqKiBBYnNvbHV0ZWx5IVxuKiAgICoqRm9jdXMgU3ltYm9sczoqKiBJJ20gemVyb2luZyBpbiBvbjpcbiAgICAqICAgYG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzc2AgKFRoaXMgaXMgd2hlcmUgdGhlIG5ldyBjb2RlIGlzLCBhbmQgaXMgbXkgbWFpbiBmb2N1cylcbiAgICAqICAgYG1wdGNwX3NldHNvY2tvcHRfdjZgIChJdCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byBzZXR0aW5nIG9wdGlvbnMsIHNvIGl0IGlzIHJlcXVpcmVkKVxuICAgICogICBgbXB0Y3BfZ2V0c29ja29wdF92NmAgKE5lZWQgdG8gbWFrZSBzdXJlIGdldHNvY2tvcHQgd29ya3MgdG9vLCBhbmQgaXMgcmVsZXZhbnQgdG8gdGhlIG5ldyBjb2RlKS5cbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmU6XG4gICAgKiAgIGBNUFRDUGBcbiAgICAqICAgYElQVjZgXG4gICAgKiAgIGBNUFRDUF9JUFY2YCAoT3B0aW9uYWwsIGJ1dCBnb29kIHRvIGluY2x1ZGUsIGV2ZW4gaWYgcmVkdW5kYW50LilcblxuKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igc2V0dGluZyBhbmQgZ2V0dGluZyB0aGUgYElQVjZfVENMQVNTYCBzb2NrZXQgb3B0aW9uIHNwZWNpZmljYWxseSBmb3IgTVBUQ1Agc29ja2V0cy4gVGhpcyBtZWFucyBuZXcgY29kZSBwYXRocyBhcmUgbm93IHJlYWNoYWJsZSBpbiB0aGUgTVBUQ1Agc29ja2V0IG9wdGlvbnMgbG9naWMuIEkgbmVlZCB0byBmdXp6IHRoZXNlIHRvIHRob3JvdWdobHkgdGVzdCBob3cgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eSBpbnRlcmFjdHMgd2l0aCB2YXJpb3VzIGlucHV0cywgYW5kIGFsbCB0aGUgc3RhdGVzIHRoYXQgYXJlIHBvc3NpYmxlIHdpdGggc3ViZmxvd3MuIE1ha2luZyBzdXJlIGV2ZXJ5dGhpbmcgaXMgaGFuZGxlZCBjb3JyZWN0bHkgaXMga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYwNywiT3V0cHV0VG9rZW5zIjoxNDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxODo1NToyOS4wOTMxNjA4ODFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzY4NTIxNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1QVENQXCIsXG4gICAgXCJJUFY2XCIsXG4gICAgXCJNUFRDUF9JUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzXCIsXG4gICAgXCJtcHRjcF9zZXRzb2Nrb3B0X3Y2XCIsXG4gICAgXCJtcHRjcF9nZXRzb2Nrb3B0X3Y2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBzZXR0aW5nIGFuZCBnZXR0aW5nIHRoZSBJUFY2X1RDTEFTUyBzb2NrZXQgb3B0aW9uIG9uIE1QVENQIHNvY2tldHMuIFRoaXMgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGNvZGUgaW4gdGhlIE1QVENQIHNvY2tldCBvcHRpb25zIGhhbmRsaW5nIGxvZ2ljLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgaGFuZGxlcyB2YXJpb3VzIGlucHV0cyBhbmQgc3ViZmxvdyBzdGF0ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVBUQ1BcIixcbiAgICBcIklQVjZcIixcbiAgICBcIk1QVENQX0lQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3NcIixcbiAgICBcIm1wdGNwX3NldHNvY2tvcHRfdjZcIixcbiAgICBcIm1wdGNwX2dldHNvY2tvcHRfdjZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHNldHRpbmcgYW5kIGdldHRpbmcgdGhlIElQVjZfVENMQVNTIHNvY2tldCBvcHRpb24gb24gTVBUQ1Agc29ja2V0cy4gVGhpcyBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgY29kZSBpbiB0aGUgTVBUQ1Agc29ja2V0IG9wdGlvbnMgaGFuZGxpbmcgbG9naWMsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBoYW5kbGVzIHZhcmlvdXMgaW5wdXRzIGFuZCBzdWJmbG93IHN0YXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkff4t[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-13 18:28:45 +0000 UTC FinishedAt: 2026-07-13 18:55:30 +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": "f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP", "IPV6", "MPTCP_IPV6" ], "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": "f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP", "IPV6", "MPTCP_IPV6" ], "series_id": "45cfca61-f372-4c92-b8fa-022b797bbd55" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mptcp_setsockopt_v6_set_tclass", "mptcp_setsockopt_v6", "mptcp_getsockopt_v6" ], "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+CgkJCTx0ZD4yMDI2LzA3LzEzIDE4OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7TVBUQ1BfSVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzcyYjMzQ7LAogICAgJiMzNDttcHRjcF9zZXRzb2Nrb3B0X3Y2JiMzNDssCiAgICAmIzM0O21wdGNwX2dldHNvY2tvcHRfdjYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBzZXR0aW5nIGFuZCBnZXR0aW5nIHRoZSBJUFY2X1RDTEFTUyBzb2NrZXQgb3B0aW9uIG9uIE1QVENQIHNvY2tldHMuIFRoaXMgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGNvZGUgaW4gdGhlIE1QVENQIHNvY2tldCBvcHRpb25zIGhhbmRsaW5nIGxvZ2ljLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgaGFuZGxlcyB2YXJpb3VzIGlucHV0cyBhbmQgc3ViZmxvdyBzdGF0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTg6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmZTdhNjUyMjdjMDIxYmEzZGUzM2MwZTY4OGRmOTU5NzdhM2ViNTc0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMTMgMTg6NTM6MzQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3NvY2tvcHQuYyBiL25ldC9tcHRjcC9zb2Nrb3B0LmNcbmluZGV4IGZjZjZmZWIyYTllYjVkLi4xYjgzYmJhMGI1OGUwNSAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9zb2Nrb3B0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9zb2Nrb3B0LmNcbkBAIC0zOTQsNiAmIzQzOzM5NCwzOSBAQCBzdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfc29sX3NvY2tldChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbiBcdHJldHVybiAtRU9QTk9UU1VQUDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxuJiM0MztcdFx0XHRcdFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuJiM0Mzt7XG4mIzQzOyNpZiAhSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbiYjNDM7XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzOyNlbHNlXG4mIzQzO1x0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdztcbiYjNDM7XHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltc2s7XG4mIzQzO1x0aW50IGVyciwgdmFsO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBpcHY2X3NldHNvY2tvcHQoc2ssIFNPTF9JUFY2LCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4mIzQzO1xuJiM0MztcdGlmIChlcnIgIT0gMClcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGxvY2tfc29jayhzayk7XG4mIzQzO1x0c29ja29wdF9zZXFfaW5jKG1zayk7XG4mIzQzO1x0dmFsID0gUkVBRF9PTkNFKGluZXQ2X3NrKHNrKS1cdTAwM2V0Y2xhc3MpO1xuJiM0MztcdG1wdGNwX2Zvcl9lYWNoX3N1YmZsb3cobXNrLCBzdWJmbG93KSB7XG4mIzQzO1x0XHRzdHJ1Y3Qgc29jayAqc3NrID0gbXB0Y3Bfc3ViZmxvd190Y3Bfc29jayhzdWJmbG93KTtcbiYjNDM7XHRcdGJvb2wgc2xvdztcbiYjNDM7XG4mIzQzO1x0XHRzbG93ID0gbG9ja19zb2NrX2Zhc3Qoc3NrKTtcbiYjNDM7XHRcdGluZXQ2X3NrKHNzayktXHUwMDNldGNsYXNzID0gdmFsO1xuJiM0MztcdFx0c2tfZHN0X3Jlc2V0KHNzayk7XG4mIzQzO1x0XHR1bmxvY2tfc29ja19mYXN0KHNzaywgc2xvdyk7XG4mIzQzO1x0fVxuJiM0MztcdHJlbGVhc2Vfc29jayhzayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MzsjZW5kaWZcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfdjYoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsXG4gXHRcdFx0ICAgICAgIHNvY2twdHJfdCBvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4pXG4ge1xuQEAgLTQzNiw2ICYjNDM7NDY5LDggQEAgc3RhdGljIGludCBtcHRjcF9zZXRzb2Nrb3B0X3Y2KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxuIFxuIFx0XHRyZWxlYXNlX3NvY2soc2spO1xuIFx0XHRicmVhaztcbiYjNDM7XHRjYXNlIElQVjZfVENMQVNTOlxuJiM0MztcdFx0cmV0dXJuIG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzcyhtc2ssIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcbiBcdH1cbiBcbiBcdHJldHVybiByZXQ7XG5AQCAtMTQ4NSw2ICYjNDM7MTUyMCw5IEBAIHN0YXRpYyBpbnQgbXB0Y3BfZ2V0c29ja29wdF92NihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbiBcdHN0cnVjdCBzb2NrICpzayA9ICh2b2lkICopbXNrO1xuIFxuIFx0c3dpdGNoIChvcHRuYW1lKSB7XG4mIzQzO1x0Y2FzZSBJUFY2X1RDTEFTUzpcbiYjNDM7XHRcdHJldHVybiBtcHRjcF9wdXRfaW50X29wdGlvbihtc2ssIG9wdHZhbCwgb3B0bGVuLFxuJiM0MztcdFx0XHRcdFx0ICAgIFJFQURfT05DRShpbmV0Nl9zayhzayktXHUwMDNldGNsYXNzKSk7XG4gXHRjYXNlIElQVjZfVjZPTkxZOlxuIFx0XHRyZXR1cm4gbXB0Y3BfcHV0X2ludF9vcHRpb24obXNrLCBvcHR2YWwsIG9wdGxlbixcbiBcdFx0XHRcdFx0ICAgIHNrLVx1MDAzZXNrX2lwdjZvbmx5KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxODo1MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNUFRDUCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O01QVENQX0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3MmIzM0OywKICAgICYjMzQ7bXB0Y3Bfc2V0c29ja29wdF92NiYjMzQ7LAogICAgJiMzNDttcHRjcF9nZXRzb2Nrb3B0X3Y2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igc2V0dGluZyBhbmQgZ2V0dGluZyB0aGUgSVBWNl9UQ0xBU1Mgc29ja2V0IG9wdGlvbiBvbiBNUFRDUCBzb2NrZXRzLiBUaGlzIGludHJvZHVjZXMgbmV3IHJlYWNoYWJsZSBjb2RlIGluIHRoZSBNUFRDUCBzb2NrZXQgb3B0aW9ucyBoYW5kbGluZyBsb2dpYywgd2hpY2ggc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgY29ycmVjdGx5IGhhbmRsZXMgdmFyaW91cyBpbnB1dHMgYW5kIHN1YmZsb3cgc3RhdGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmZTdhNjUyMjdjMDIxYmEzZGUzM2MwZTY4OGRmOTU5NzdhM2ViNTc0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdWwgMTMgMTg6NTM6MzQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3Avc29ja29wdC5jIGIvbmV0L21wdGNwL3NvY2tvcHQuYwppbmRleCBmY2Y2ZmViMmE5ZWI1ZC4uMWI4M2JiYTBiNThlMDUgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9zb2Nrb3B0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3NvY2tvcHQuYwpAQCAtMzk0LDYgJiM0MzszOTQsMzkgQEAgc3RhdGljIGludCBtcHRjcF9zZXRzb2Nrb3B0X3NvbF9zb2NrZXQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsCiAJcmV0dXJuIC1FT1BOT1RTVVBQOwogfQogCiYjNDM7c3RhdGljIGludCBtcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3Moc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsCiYjNDM7CQkJCQkgIHNvY2twdHJfdCBvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4pCiYjNDM7ewomIzQzOyNpZiAhSVNfRU5BQkxFRChDT05GSUdfSVBWNikKJiM0MzsJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOyNlbHNlCiYjNDM7CXN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3c7CiYjNDM7CXN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKW1zazsKJiM0MzsJaW50IGVyciwgdmFsOwomIzQzOwomIzQzOwllcnIgPSBpcHY2X3NldHNvY2tvcHQoc2ssIFNPTF9JUFY2LCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CiYjNDM7CiYjNDM7CWlmIChlcnIgIT0gMCkKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CWxvY2tfc29jayhzayk7CiYjNDM7CXNvY2tvcHRfc2VxX2luYyhtc2spOwomIzQzOwl2YWwgPSBSRUFEX09OQ0UoaW5ldDZfc2soc2spLSZndDt0Y2xhc3MpOwomIzQzOwltcHRjcF9mb3JfZWFjaF9zdWJmbG93KG1zaywgc3ViZmxvdykgewomIzQzOwkJc3RydWN0IHNvY2sgKnNzayA9IG1wdGNwX3N1YmZsb3dfdGNwX3NvY2soc3ViZmxvdyk7CiYjNDM7CQlib29sIHNsb3c7CiYjNDM7CiYjNDM7CQlzbG93ID0gbG9ja19zb2NrX2Zhc3Qoc3NrKTsKJiM0MzsJCWluZXQ2X3NrKHNzayktJmd0O3RjbGFzcyA9IHZhbDsKJiM0MzsJCXNrX2RzdF9yZXNldChzc2spOwomIzQzOwkJdW5sb2NrX3NvY2tfZmFzdChzc2ssIHNsb3cpOwomIzQzOwl9CiYjNDM7CXJlbGVhc2Vfc29jayhzayk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOyNlbmRpZgomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF92NihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSwKIAkJCSAgICAgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKQogewpAQCAtNDM2LDYgJiM0Mzs0NjksOCBAQCBzdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfdjYoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsCiAKIAkJcmVsZWFzZV9zb2NrKHNrKTsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgSVBWNl9UQ0xBU1M6CiYjNDM7CQlyZXR1cm4gbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzKG1zaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC0xNDg1LDYgJiM0MzsxNTIwLDkgQEAgc3RhdGljIGludCBtcHRjcF9nZXRzb2Nrb3B0X3Y2KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLAogCXN0cnVjdCBzb2NrICpzayA9ICh2b2lkICopbXNrOwogCiAJc3dpdGNoIChvcHRuYW1lKSB7CiYjNDM7CWNhc2UgSVBWNl9UQ0xBU1M6CiYjNDM7CQlyZXR1cm4gbXB0Y3BfcHV0X2ludF9vcHRpb24obXNrLCBvcHR2YWwsIG9wdGxlbiwKJiM0MzsJCQkJCSAgICBSRUFEX09OQ0UoaW5ldDZfc2soc2spLSZndDt0Y2xhc3MpKTsKIAljYXNlIElQVjZfVjZPTkxZOgogCQlyZXR1cm4gbXB0Y3BfcHV0X2ludF9vcHRpb24obXNrLCBvcHR2YWwsIG9wdGxlbiwKIAkJCQkJICAgIHNrLSZndDtza19pcHY2b25seSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE4OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MjgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBNUFRDUCBJUFY2X1RDTEFTUyBQYXRjaCoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7dmUgZ290IGEgcGF0Y2ggdGhhdCYjMzk7cyBpbnRyb2R1Y2luZyBzdXBwb3J0IGZvciBgSVBWNl9UQ0xBU1NgIHdpdGhpbiBNUFRDUCBzb2NrZXRzLiBUaGUgY29yZSBjaGFuZ2VzIGFyZSwgYXMgZXhwZWN0ZWQsIHdpdGhpbiBgbmV0L21wdGNwL3NvY2tvcHQuY2AuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7dmUgdG91Y2hlZCBgbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzYCwgYG1wdGNwX3NldHNvY2tvcHRfdjZgLCBhbmQgYG1wdGNwX2dldHNvY2tvcHRfdjZgLiBUaGF0IHNlZW1zIGxvZ2ljYWw7IGBzZXRzb2Nrb3B0YCBhbmQgYGdldHNvY2tvcHRgIHdvdWxkIGJlIHRoZSBwcmltYXJ5IGludGVyZmFjZXMgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSwgd2l0aCB0aGUgZGVkaWNhdGVkIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3NgIGJlaW5nIGFkZGVkLCBwcmVzdW1hYmx5IHRvIGhhbmRsZSB0aGUgYElQVjZfVENMQVNTYCBvcHRpb24gaW4gcGFydGljdWxhciwgZm9yIHRoZSBJUHY2LXNwZWNpZmljIHNvY2tldCBvcHRpb25zIGZvciBNUFRDUC4KCk5vdywgYmVmb3JlIEkgZGlnIGludG8gdGhlIGNvZGUgaXRzZWxmLCBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSB0aGUgcHJlLXJlcXVpc2l0ZXMuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggTVBUQ1AsIHNvIGBDT05GSUdfTVBUQ1BgICpoYXMqIHRvIGJlIGVuYWJsZWQuIEFuZCBpdCYjMzk7cyBgSVBWNl9UQ0xBU1NgIHNvIGBDT05GSUdfSVBWNmAgbXVzdCBiZSBlbmFibGVkLiBUaGF0JiMzOTtzIGEgZ2l2ZW4uCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayBgbmV0L21wdGNwL3NvY2tvcHQuY2AgZm9yIGFueSBvdGhlciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvciBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gVGhlcmUgY291bGQgYmUgc29tZSBzdWJ0bGUgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgc29ja2V0IG9wdGlvbnMgb3IgZXZlbiBNUFRDUCBmZWF0dXJlcyB0aGF0IHdlIG5lZWQgdG8ga2VlcCBpbiBtaW5kLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgZnVsbCBwaWN0dXJlIGJlZm9yZSBkaXZpbmcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxODo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTVBUQ1AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbm5ldC9tcHRjcC9NYWtlZmlsZToyOm9iai0kKENPTkZJR19NUFRDUCkgJiM0Mzs9IG1wdGNwLm9cbm5ldC9tcHRjcC9NYWtlZmlsZS0zLVxuLS1cbm5ldC9tcHRjcC9NYWtlZmlsZT0xMj1tcHRjcF90b2tlbl90ZXN0LW9ianMgOj0gdG9rZW5fdGVzdC5vXG5uZXQvbXB0Y3AvTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX01QVENQX0tVTklUX1RFU1QpICYjNDM7PSBtcHRjcF9jcnlwdG9fdGVzdC5vIG1wdGNwX3Rva2VuX3Rlc3Qub1xubmV0L21wdGNwL01ha2VmaWxlLTE0LVxuLS1cbm5ldC9tcHRjcC9jcnlwdG8uYz00Mz12b2lkIG1wdGNwX2NyeXB0b19obWFjX3NoYSh1NjQga2V5MSwgdTY0IGtleTIsIHU4ICptc2csIGludCBsZW4sIHZvaWQgKmhtYWMpXG4tLVxubmV0L21wdGNwL2NyeXB0by5jLTQ5LVxubmV0L21wdGNwL2NyeXB0by5jOjUwOiNpZiBJU19NT0RVTEUoQ09ORklHX01QVENQX0tVTklUX1RFU1QpXG5uZXQvbXB0Y3AvY3J5cHRvLmMtNTEtRVhQT1JUX1NZTUJPTF9HUEwobXB0Y3BfY3J5cHRvX2htYWNfc2hhKTtcbi0tXG5uZXQvbXB0Y3AvY3RybC5jPTU4Nz12b2lkIF9faW5pdCBtcHRjcF9pbml0KHZvaWQpXG4tLVxubmV0L21wdGNwL2N0cmwuYy01OTUtXG5uZXQvbXB0Y3AvY3RybC5jOjU5NjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9jdHJsLmMtNTk3LWludCBfX2luaXQgbXB0Y3B2Nl9pbml0KHZvaWQpXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYz0yMz1zdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTI0MS1cdFx0XHRcdG1wX29wdC1cdTAwM2VhZGRyLmZhbWlseSA9IEFGX0lORVQ7XG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjI0MjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9vcHRpb25zLmMtMjQzLVx0XHRcdGVsc2UgaWYgKG9wc2l6ZSA9PSBUQ1BPTEVOX01QVENQX0FERF9BRERSNiB8fFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtMjUyLVx0XHRcdFx0bXBfb3B0LVx1MDAzZWFkZHIuZmFtaWx5ID0gQUZfSU5FVDtcbm5ldC9tcHRjcC9vcHRpb25zLmM6MjUzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL29wdGlvbnMuYy0yNTQtXHRcdFx0ZWxzZSBpZiAob3BzaXplID09IFRDUE9MRU5fTVBUQ1BfQUREX0FERFI2X0JBU0UgfHxcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTI3NC1cdFx0fVxubmV0L21wdGNwL29wdGlvbnMuYzoyNzU6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTI3Ni1cdFx0ZWxzZSB7XG4tLVxubmV0L21wdGNwL29wdGlvbnMuYz02MzI9c3RhdGljIHU2NCBhZGRfYWRkcl9nZW5lcmF0ZV9obWFjKHU2NCBrZXkxLCB1NjQga2V5Mixcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTY0NC1cdH1cbm5ldC9tcHRjcC9vcHRpb25zLmM6NjQ1OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL29wdGlvbnMuYy02NDYtXHRlbHNlIGlmIChhZGRyLVx1MDAzZWZhbWlseSA9PSBBRl9JTkVUNikge1xuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmM9MTM4ND12b2lkIG1wdGNwX3dyaXRlX29wdGlvbnMoc3RydWN0IHRjcGhkciAqdGgsIF9fYmUzMiAqcHRyLCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtMTU2Ny1cbm5ldC9tcHRjcC9vcHRpb25zLmM6MTU2ODojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTU2OS1cdFx0aWYgKG9wdHMtXHUwMDNlYWRkci5mYW1pbHkgPT0gQUZfSU5FVDYpXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy0xNTg2LVx0XHR9XG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjE1ODc6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTE1ODgtXHRcdGVsc2UgaWYgKG9wdHMtXHUwMDNlYWRkci5mYW1pbHkgPT0gQUZfSU5FVDYpIHtcbi0tXG5uZXQvbXB0Y3AvcG0uYz0zMz1ib29sIG1wdGNwX3BtX2FkZHJfZmFtaWxpZXNfbWF0Y2goY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9tcHRjcC9wbS5jLTM4LVxubmV0L21wdGNwL3BtLmM6Mzk6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcG0uYy00MC1cdGJvb2wgbG9jX2lzX3Y0ID0gbG9jLVx1MDAzZWZhbWlseSA9PSBBRl9JTkVUIHx8IGlwdjZfYWRkcl92NG1hcHBlZChcdTAwMjZsb2MtXHUwMDNlYWRkcjYpO1xuLS1cbm5ldC9tcHRjcC9wbS5jPTU1PWJvb2wgbXB0Y3BfYWRkcmVzc2VzX2VxdWFsKGNvbnN0IHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKmEsXG4tLVxubmV0L21wdGNwL3BtLmMtNjItXHRcdFx0YWRkcl9lcXVhbHMgPSBhLVx1MDAzZWFkZHIuc19hZGRyID09IGItXHUwMDNlYWRkci5zX2FkZHI7XG5uZXQvbXB0Y3AvcG0uYzo2MzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbS5jLTY0LVx0XHRlbHNlXG4tLVxubmV0L21wdGNwL3BtLmM9ODM9dm9pZCBtcHRjcF9sb2NhbF9hZGRyZXNzKGNvbnN0IHN0cnVjdCBzb2NrX2NvbW1vbiAqc2tjLFxuLS1cbm5ldC9tcHRjcC9wbS5jLTg5LVx0XHRhZGRyLVx1MDAzZWFkZHIuc19hZGRyID0gc2tjLVx1MDAzZXNrY19yY3Zfc2FkZHI7XG5uZXQvbXB0Y3AvcG0uYzo5MDojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbS5jLTkxLVx0ZWxzZSBpZiAoYWRkci1cdTAwM2VmYW1pbHkgPT0gQUZfSU5FVDYpXG4tLVxubmV0L21wdGNwL3BtLmM9OTY9dm9pZCBtcHRjcF9yZW1vdGVfYWRkcmVzcyhjb25zdCBzdHJ1Y3Qgc29ja19jb21tb24gKnNrYyxcbi0tXG5uZXQvbXB0Y3AvcG0uYy0xMDItXHRcdGFkZHItXHUwMDNlYWRkci5zX2FkZHIgPSBza2MtXHUwMDNlc2tjX2RhZGRyO1xubmV0L21wdGNwL3BtLmM6MTAzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3BtLmMtMTA0LVx0ZWxzZSBpZiAoYWRkci1cdTAwM2VmYW1pbHkgPT0gQUZfSU5FVDYpXG4tLVxubmV0L21wdGNwL3BtX2tlcm5lbC5jPTYwNj1maWxsX2xvY2FsX2FkZHJlc3NfYW55KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKnJlbW90ZSxcbi0tXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtNjEyLVx0bG9jYWwtXHUwMDNlYWRkci5mYW1pbHkgPVxubmV0L21wdGNwL3BtX2tlcm5lbC5jOjYxMzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy02MTQtXHRcdFx0cmVtb3RlLVx1MDAzZWZhbWlseSA9PSBBRl9JTkVUNiBcdTAwMjZcdTAwMjZcbi0tXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM9ODUyPXN0YXRpYyBpbnQgbXB0Y3BfcG1fbmxfY3JlYXRlX2xpc3Rlbl9zb2NrZXQoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy04ODktXHRtcHRjcF9pbmZvMnNvY2thZGRyKFx1MDAyNmVudHJ5LVx1MDAzZWFkZHIsIFx1MDAyNmFkZHIsIGVudHJ5LVx1MDAzZWFkZHIuZmFtaWx5KTtcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYzo4OTA6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtODkxLVx0aWYgKGVudHJ5LVx1MDAzZWFkZHIuZmFtaWx5ID09IEFGX0lORVQ2KVxuLS1cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy04OTUtXHRcdGVyciA9IGluZXRfYmluZF9zayhzc2ssIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKVx1MDAyNmFkZHIsIGFkZHJsZW4pO1xubmV0L21wdGNwL3BtX2tlcm5lbC5jOjg5NjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy04OTctXHRlbHNlIGlmIChzc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxuLS1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9MjI9c3RhdGljIGludCBtcHRjcF9wbV9mYW1pbHlfdG9fYWRkcihpbnQgZmFtaWx5KVxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0yMy17XG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jOjI0OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0yNS1cdGlmIChmYW1pbHkgPT0gQUZfSU5FVDYpXG4tLVxubmV0L21wdGNwL3BtX25ldGxpbmsuYz0zMT1zdGF0aWMgaW50IG1wdGNwX3BtX3BhcnNlX3BtX2FkZHJfYXR0cihzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNjMtXHRpZiAoYWRkci1cdTAwM2VmYW1pbHkgIT0gQUZfSU5FVFxubmV0L21wdGNwL3BtX25ldGxpbmsuYzo2NDojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNjUtXHQgICAgXHUwMDI2XHUwMDI2IGFkZHItXHUwMDNlZmFtaWx5ICE9IEFGX0lORVQ2XG4tLVxubmV0L21wdGNwL3BtX25ldGxpbmsuYy03OC1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM6Nzk6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTgwLVx0aWYgKGFkZHItXHUwMDNlZmFtaWx5ID09IEFGX0lORVQ2KVxuLS1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9MTMxPXN0YXRpYyBpbnQgbXB0Y3BfbmxfZmlsbF9hZGRyKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0xNTYtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xubmV0L21wdGNwL3BtX25ldGxpbmsuYzoxNTc6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTE1OC1cdGVsc2UgaWYgKGFkZHItXHUwMDNlZmFtaWx5ID09IEFGX0lORVQ2IFx1MDAyNlx1MDAyNlxuLS1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9Mjk4PXN0YXRpYyBpbnQgbXB0Y3BfZXZlbnRfYWRkX3N1YmZsb3coc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHNvY2sgKnNzaylcbi0tXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTMxMi1cdFx0YnJlYWs7XG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jOjMxMzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtMzE0LVx0Y2FzZSBBRl9JTkVUNjoge1xuLS1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9NDY1PXZvaWQgbXB0Y3BfZXZlbnRfYWRkcl9hbm5vdW5jZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNzayxcbi0tXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTUwMi1cdFx0YnJlYWs7XG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jOjUwMzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNTA0LVx0Y2FzZSBBRl9JTkVUNjpcbi0tXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jPTUyMj12b2lkIG1wdGNwX2V2ZW50X3BtX2xpc3RlbmVyKGNvbnN0IHN0cnVjdCBzb2NrICpzc2ssXG4tLVxubmV0L21wdGNwL3BtX25ldGxpbmsuYy01NTEtXHRcdGJyZWFrO1xubmV0L21wdGNwL3BtX25ldGxpbmsuYzo1NTI6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTU1My1cdGNhc2UgQUZfSU5FVDY6IHtcbi0tXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM9NDMyPXN0YXRpYyBzdHJ1Y3Qgc29jayAqbXB0Y3BfbmxfZmluZF9zc2soc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbi0tXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtNDU3LVx0XHRcdGJyZWFrO1xubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jOjQ1ODojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy00NTktXHRcdGNhc2UgQUZfSU5FVDY6IHtcbi0tXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM9NDc4PWludCBtcHRjcF9wbV9ubF9zdWJmbG93X2Rlc3Ryb3lfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy01MDYtXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM6NTA3OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTUwOC1cdGlmIChhZGRyX2wuYWRkci5mYW1pbHkgPT0gQUZfSU5FVCBcdTAwMjZcdTAwMjYgaXB2Nl9hZGRyX3Y0bWFwcGVkKFx1MDAyNmFkZHJfci5hZGRyNikpIHtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMC0jaW5jbHVkZSBcdTAwM2NuZXQvdGNwX3N0YXRlcy5oXHUwMDNlXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyMTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIyLSNpbmNsdWRlIFx1MDAzY25ldC90cmFuc3BfdjYuaFx1MDAzZVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTMxPXN0YXRpYyB1bnNpZ25lZCBpbnQgbXB0Y3BfaW5xX2hpbnQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM2OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzctc3RydWN0IG1wdGNwNl9zb2NrIHtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz02ND1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyAqbXB0Y3BfZmFsbGJhY2tfdGNwX29wcyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtNjctXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo2ODojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTY5LVx0aWYgKGZhbWlseSA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zMzk3PXN0YXRpYyB2b2lkIG1wdGNwX2NvcHlfaW5hZGRycyhzdHJ1Y3Qgc29jayAqbXNrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc3NrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzM5OC17XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozMzk5OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzQwMC1cdGNvbnN0IHN0cnVjdCBpcHY2X3BpbmZvICpzc2s2ID0gaW5ldDZfc2soc3NrKTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zNDQyPXN0YXRpYyBpbnQgbXB0Y3BfZGlzY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNTA0LVxubmV0L21wdGNwL3Byb3RvY29sLmM6MzUwNTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM1MDYtc3RhdGljIHN0cnVjdCBpcHY2X3BpbmZvICptcHRjcF9pbmV0Nl9zayhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MzU1Mz1zdHJ1Y3Qgc29jayAqbXB0Y3Bfc2tfY2xvbmVfaW5pdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzU2NS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM1NjY6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNTY3LVx0aWYgKG5zay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzU3Mi1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM1NzM6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNTc0LVx0aWYgKG5zay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9NDA5OT1zdGF0aWMgaW50IG1wdGNwX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLCBpbnQgYWRkcl9sZW4pXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtNDExMy1cdFx0ZXJyID0gaW5ldF9iaW5kX3NrKHNzaywgdWFkZHIsIGFkZHJfbGVuKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQxMTQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MTE1LVx0ZWxzZSBpZiAoc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTQ2MzU9dm9pZCBfX2luaXQgbXB0Y3BfcHJvdG9faW5pdCh2b2lkKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ2NzQtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0Njc1OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3Byb3RvY29sLmMtNDY3Ni1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBtcHRjcF92Nl9zdHJlYW1fb3BzID0ge1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oPTkxMj12b2lkIF9faW5pdCBtcHRjcF9wcm90b19pbml0KHZvaWQpO1xubmV0L21wdGNwL3Byb3RvY29sLmg6OTEzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3Byb3RvY29sLmgtOTE0LWludCBfX2luaXQgbXB0Y3BfcHJvdG9fdjZfaW5pdCh2b2lkKTtcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE3LSNpbmNsdWRlIFx1MDAzY25ldC9wcm90b2NvbC5oXHUwMDNlXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE4OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3N1YmZsb3cuYy0xOS0jaW5jbHVkZSBcdTAwM2NuZXQvaXA2X3JvdXRlLmhcdTAwM2Vcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTM1OD1zdGF0aWMgaW50IHN1YmZsb3dfdjRfc2VuZF9zeW5hY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0zNzAtXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjM3MTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9zdWJmbG93LmMtMzcyLXN0YXRpYyBpbnQgc3ViZmxvd192Nl9zZW5kX3N5bmFjayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTY0OT1zdGF0aWMgaW50IHN1YmZsb3dfcmVidWlsZF9oZWFkZXIoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtNjU4LVxubmV0L21wdGNwL3N1YmZsb3cuYzo2NTk6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTY2MC1zdGF0aWMgaW50IHN1YmZsb3dfdjZfcmVidWlsZF9oZWFkZXIoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9NjkyPXN0YXRpYyB2b2lkIHN1YmZsb3dfdjRfcmVxX2Rlc3RydWN0b3Ioc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtNjk3LVxubmV0L21wdGNwL3N1YmZsb3cuYzo2OTg6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTY5OS1zdGF0aWMgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgbXB0Y3Bfc3ViZmxvd192Nl9yZXF1ZXN0X3NvY2tfb3BzIF9fcm9fYWZ0ZXJfaW5pdDtcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTczNz1zdHJ1Y3QgcmVxdWVzdF9zb2NrICptcHRjcF9zdWJmbG93X3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy03NDItXHRcdG9wcyA9IFx1MDAyNm1wdGNwX3N1YmZsb3dfdjRfcmVxdWVzdF9zb2NrX29wcztcbm5ldC9tcHRjcC9zdWJmbG93LmM6NzQzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3N1YmZsb3cuYy03NDQtXHRlbHNlIGlmIChvcHMtXHUwMDNlZmFtaWx5ID09IEFGX0lORVQ2KVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MTU1Mz1zdWJmbG93X2RlZmF1bHRfYWZfb3BzKHN0cnVjdCBzb2NrICpzaylcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU1NC17XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE1NTU6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE1NTYtXHRpZiAoc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU2MS1cbm5ldC9tcHRjcC9zdWJmbG93LmM6MTU2MjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU2My12b2lkIG1wdGNwdjZfaGFuZGxlX21hcHBlZChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgbWFwcGVkKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MTU4Mj12b2lkIG1wdGNwX2luZm8yc29ja2FkZHIoY29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqaW5mbyxcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE1OTItXHRcdFx0aW5fYWRkci1cdTAwM2VzaW5fYWRkciA9IGluZm8tXHUwMDNlYWRkcjtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTU5MzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU5NC1cdFx0ZWxzZSBpZiAoaXB2Nl9hZGRyX3Y0bWFwcGVkKFx1MDAyNmluZm8tXHUwMDNlYWRkcjYpKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU5OC1cdH1cbm5ldC9tcHRjcC9zdWJmbG93LmM6MTU5OTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTYwMC1cdGVsc2UgaWYgKGFkZHItXHUwMDNlc3NfZmFtaWx5ID09IEFGX0lORVQ2KSB7XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0xNjEzPWludCBfX21wdGNwX3N1YmZsb3dfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBtcHRjcF9wbV9sb2NhbCAqbG9jYWwsXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0xNjQ4LVx0XHRcdGxvY2FsX2lkID0gLTE7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE2NDk6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2NTAtXHR9IGVsc2UgaWYgKHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNikge1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMTY2NS1cdGFkZHJsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTY2NjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTY2Ny1cdGlmIChhZGRyLnNzX2ZhbWlseSA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE3NTY9c3RhdGljIHZvaWQgbXB0Y3Bfc3ViZmxvd19vcHNfb3ZlcnJpZGUoc3RydWN0IHNvY2sgKnNzaylcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTc1Ny17XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE3NTg6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE3NTktXHRpZiAoc3NrLVx1MDAzZXNrX3Byb3QgPT0gXHUwMDI2dGNwdjZfcHJvdClcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE3NjY9c3RhdGljIHZvaWQgbXB0Y3Bfc3ViZmxvd19vcHNfdW5kb19vdmVycmlkZShzdHJ1Y3Qgc29jayAqc3NrKVxubmV0L21wdGNwL3N1YmZsb3cuYy0xNzY3LXtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTc2ODojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTc2OS1cdGlmIChzc2stXHUwMDNlc2tfcHJvdCA9PSBcdTAwMjZ0Y3B2Nl9wcm90X292ZXJyaWRlKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MjE0MT12b2lkIF9faW5pdCBtcHRjcF9zdWJmbG93X2luaXQodm9pZClcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNzMtXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIxNzQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNzUtdm9pZCBfX2luaXQgbXB0Y3Bfc3ViZmxvd192Nl9pbml0KHZvaWQpXG4tLVxubmV0L21wdGNwL3Rva2VuLmM9Mzk4PXZvaWQgX19pbml0IG1wdGNwX3Rva2VuX2luaXQodm9pZClcbi0tXG5uZXQvbXB0Y3AvdG9rZW4uYy00MTctXG5uZXQvbXB0Y3AvdG9rZW4uYzo0MTg6I2lmIElTX01PRFVMRShDT05GSUdfTVBUQ1BfS1VOSVRfVEVTVClcbm5ldC9tcHRjcC90b2tlbi5jLTQxOS1FWFBPUlRfU1lNQk9MX0dQTChtcHRjcF90b2tlbl9uZXdfcmVxdWVzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTg6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY2NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1QVENQIElQVjZfVENMQVNTIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L21wdGNwL3NvY2tvcHQuY2AuIEl0JiMzOTtzIGludHJvZHVjaW5nIGBJUFY2X1RDTEFTU2Agc3VwcG9ydCBzcGVjaWZpY2FsbHkgZm9yIE1QVENQIHNvY2tldHMuIFRoYXQmIzM5O3MgZ29vZCwgc2VlaW5nIGFzIHdlIHNob3VsZCBiZSBhYmxlIHRvIG1ha2UgdXNlIG9mIHRyYWZmaWMgY2xhc3MgZGlmZmVyZW50aWF0aW9ucyBmb3IgTVBUQ1AgaW4gYW4gSVB2NiBlbnZpcm9ubWVudC4KCk5vdywgdGhlIGNvZGUgaXRzZWxmIGlzIHVzaW5nIGEgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSwgYCNpZiAhSVNfRU5BQkxFRChDT05GSUdfSVBWNilgLCB3aXRoaW4gYG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzc2AuIFRoYXQmIzM5O3MgYSBiaXQgb2RkLiBJIHdvdWxkIGhhdmUgZXhwZWN0ZWQgYSBjaGVjayAqZm9yKiBJUHY2IHRvIGluY2x1ZGUgdGhpcyBmZWF0dXJlLCBub3QgZXhjbHVkZSBpdC4gU28sIGEgZ3VhcmQgbGlrZSBgQ09ORklHX0lQVjZgIHNlZW1zIGxvZ2ljYWw7IHRoZSBgIWAgbmVnYXRlcyBteSBpbml0aWFsIGltcHJlc3Npb24uCgpCZWZvcmUgSSBqdW1wIHRvIGNvbmNsdXNpb25zLCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgQ09ORklHX0lQVjZgIGFuZCBwb3RlbnRpYWxseSBgQ09ORklHX01QVENQX0lQVjZgIGFyZSBiZWluZyB1c2VkIGluIHRoaXMgZmlsZS4gVGhlcmUgbWlnaHQgYmUgYSBzdWJ0bGUgcmVhc29uIGZvciB0aGlzIGNvbmRpdGlvbmFsIGxvZ2ljLCBvciBwZXJoYXBzIGl0JiMzOTtzIGFuIG92ZXJzaWdodC4gVGltZSB0byBzY2FuIGBuZXQvbXB0Y3Avc29ja29wdC5jYCBmb3IgdGhvc2UgY29uZmlnIHN5bWJvbHMgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE4OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19JUFY2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3NvY2tvcHQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3Avc29ja29wdC5jPTM5Nz1zdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzcyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jLTM5OS17XG5uZXQvbXB0Y3Avc29ja29wdC5jOjQwMDojaWYgIUlTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvbXB0Y3Avc29ja29wdC5jLTQwMS1cdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jPTEyMDY9c3RhdGljIHZvaWQgbXB0Y3BfZ2V0X3N1Yl9hZGRycyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtcHRjcF9zdWJmbG93X2FkZHJzICphKVxuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTIyMi1cdFx0YS1cdTAwM2VzaW5fcmVtb3RlLnNpbl9hZGRyLnNfYWRkciA9IGluZXQtXHUwMDNlaW5ldF9kYWRkcjtcbm5ldC9tcHRjcC9zb2Nrb3B0LmM6MTIyMzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTIyNC1cdH0gZWxzZSBpZiAoc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTg6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM2MAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFByb3Bvc2VkIE1QVENQIGFuZCBJUHY2IEludGVncmF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGludGVncmF0aW5nIFRyYWZmaWMgQ2xhc3MgKFRDTEFTUykgc2V0dGluZyB3aXRoIE1QVENQIG92ZXIgSVB2Ni4gVGhlIGZ1bmRhbWVudGFsIGNvbmZpZ3MgcmVxdWlyZWQgYXJlLCBvYnZpb3VzbHksIGBNUFRDUGAgYW5kIGBJUFY2YC4gV2UgYXJlIHdvcmtpbmcgd2l0aCB0aHJlZSBmdW5jdGlvbnMgaGVyZTogYG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzc2Agd2hpY2ggaXMgYSBuZXcgZnVuY3Rpb24sIGFuZCBgbXB0Y3Bfc2V0c29ja29wdF92NmAgYW5kIGBtcHRjcF9nZXRzb2Nrb3B0X3Y2YCwgd2hpY2ggYXJlIGV4aXN0aW5nIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZC4KClRoZSBrZXkgaXMgaG93IHRoZXNlIHBpZWNlcyB3aWxsIGZpdCB0b2dldGhlci4gRmlyc3QsIGl0IGxvb2tzIGxpa2UgYElQVjZfVENMQVNTYCBzaG91bGQgYmUgYWNjZXNzaWJsZS4gVGhlIGV4aXN0aW5nIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2YCBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBgbXB0Y3Bfc2V0c29ja29wdGAgd2hlbiB0aGUgc29ja2V0IG9wdGlvbiBsZXZlbCBpcyBgU09MX0lQVjZgLCBhbmQgdGhlIGBtcHRjcF9nZXRzb2Nrb3B0X3Y2YCBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBgbXB0Y3BfZ2V0c29ja29wdGAgd2hlbiB0aGUgc29ja2V0IG9wdGlvbiBsZXZlbCBpcyBgU09MX0lQVjZgIC0gdGhhdCBtZWFucyBpdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gaG9vayBpbi4KCk5vdywgbGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byBgbXB0Y3Bfc2V0c29ja29wdF92NmAgYW5kIGBtcHRjcF9nZXRzb2Nrb3B0X3Y2YCBhbmQgc2VlIGhvdyB0aGUgbmV3IGBtcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3NgIGZ1bmN0aW9uIGlzIGNhbGxlZCBvciB3aWxsIGludGVyZmFjZSB3aXRoIHRoZW0uIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgcmVsZXZhbnQgY29kZSBpbiBkZXRhaWwgYW5kIHZlcmlmeSBwcm9wZXIgZXJyb3IgaGFuZGxpbmcsIGRhdGEgc3RydWN0dXJlIGludGVyYWN0aW9ucywgYW5kIG92ZXJhbGwgaW1wYWN0IG9uIGV4aXN0aW5nIE1QVENQL0lQdjYgZnVuY3Rpb25hbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxODo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9zZXRzb2Nrb3B0X3Y2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3NvY2tvcHQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3Avc29ja29wdC5jPTMwMD1zdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfc29sX3NvY2tldChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jLTM5Ni1cbm5ldC9tcHRjcC9zb2Nrb3B0LmM6Mzk3OnN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxubmV0L21wdGNwL3NvY2tvcHQuYy0zOTgtXHRcdFx0XHRcdCAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jLTQyOS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmM6NDMwOnN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF92NihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNDMxLVx0XHRcdCAgICAgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNDcyLVx0Y2FzZSBJUFY2X1RDTEFTUzpcbm5ldC9tcHRjcC9zb2Nrb3B0LmM6NDczOlx0XHRyZXR1cm4gbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzKG1zaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xubmV0L21wdGNwL3NvY2tvcHQuYy00NzQtXHR9XG4tLVxubmV0L21wdGNwL3NvY2tvcHQuYz05NDI9aW50IG1wdGNwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmMtOTcxLVx0aWYgKGxldmVsID09IFNPTF9JUFY2KVxubmV0L21wdGNwL3NvY2tvcHQuYzo5NzI6XHRcdHJldHVybiBtcHRjcF9zZXRzb2Nrb3B0X3Y2KG1zaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xubmV0L21wdGNwL3NvY2tvcHQuYy05NzMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTg6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0MTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBQbGFuOiBNUFRDUCBTb2NrZXQgVENMQVNTIEhhbmRsaW5nKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzb21lIGtlcm5lbCBjaGFuZ2VzIOKAkyBzcGVjaWZpY2FsbHksIHRoZSBhYmlsaXR5IHRvIHNldCBhbmQgZ2V0IGBJUFY2X1RDTEFTU2Agb24gTVBUQ1Agc29ja2V0cy4gVGhpcyBpcyBwcmltZSBmdXp6aW5nIHRlcnJpdG9yeS4gV2UmIzM5O3ZlIGdvdCBhIG5ldyBzdXJmYWNlIGFyZWEgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGFuZCB3ZSBuZWVkIHRvIGV4cGxvcmUgaXQgdGhvcm91Z2hseS4KCk15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB0aGUga2V5IHN5bWJvbHMgdGhhdCBhcmUgaW50cm9kdWNlZDogYG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzc2AsIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2YCwgYW5kIGBtcHRjcF9nZXRzb2Nrb3B0X3Y2YC4gVGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMgd2UgbmVlZCB0byB0YXJnZXQgZHVyaW5nIGZ1enppbmcuCgpCZWZvcmUgSSBraWNrIHRoaW5ncyBvZmYsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSByaWdodCBrZXJuZWwgY29uZmlncyBpbiBwbGFjZS4gV2UmIzM5O2xsIG5lZWQgYE1QVENQYCBhbmQgYElQVjZgIGVuYWJsZWQsIG9idmlvdXNseS4gSSYjMzk7bSBnb2luZyB0byBkb3VibGUgY2hlY2sgaWYgYE1QVENQX0lQVjZgIGlzIGFsc28gYSBkZXBlbmRlbmN5OyBtaWdodCBhcyB3ZWxsIGdldCB0aGF0IHN0cmFpZ2h0ZW5lZCBvdXQgYmVmb3JlIEkgc3RhcnQuIEkmIzM5O2xsIHRha2UgYSBxdWljayBsb29rIGluIGBuZXQvbXB0Y3AvS2NvbmZpZ2AgdG8gY29uZmlybS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBvdXIgZm91bmRhdGlvbiBpcyBzb2xpZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTg6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1QVENQX0lQVjYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9LY29uZmlnPTE2PWNvbmZpZyBJTkVUX01QVENQX0RJQUdcbi0tXG5uZXQvbXB0Y3AvS2NvbmZpZy0xOS1cbm5ldC9tcHRjcC9LY29uZmlnOjIwOmNvbmZpZyBNUFRDUF9JUFY2XG5uZXQvbXB0Y3AvS2NvbmZpZy0yMS1cdGJvb2wgXCYjMzQ7TVBUQ1A6IElQdjYgc3VwcG9ydCBmb3IgTXVsdGlwYXRoIFRDUFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxODo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDkyMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYE1QVENQX0lQVjZgIENvbmZpZ3VyYXRpb24gT3B0aW9uKioKClJpZ2h0LCBzbyBgTVBUQ1BfSVBWNmAgaXMgYSBkZWZpbmVkIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhpcyBzeXN0ZW0uIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBkcmlsbCBkb3duIGFuZCBleGFtaW5lIGl0cyBkZXBlbmRlbmNpZXMuIEtub3dpbmcgaXRzIHJlbGF0aW9uc2hpcCB3aXRoIG90aGVyIGZlYXR1cmVzIGFuZCBtb2R1bGVzIHdpbGwgcHJvdmlkZSB0aGUgY3J1Y2lhbCBjb250ZXh0LiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmN5IHRyZWUgd2lsbCBwYWludCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGVuYWJsaW5nIG9yIGRpc2FibGluZyBgTVBUQ1BfSVBWNmAgbWlnaHQgY2FzY2FkZSB0aHJvdWdob3V0IHRoZSBjb25maWd1cmF0aW9uIGFuZCB0aGUgc3lzdGVtJiMzOTtzIG92ZXJhbGwgZnVuY3Rpb25hbGl0eS4gSXQmIzM5O3MgdGltZSB0byBtYXAgb3V0IHRoZSBuZXR3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxODo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tcHRjcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0XG4gICAyOlx0Y29uZmlnIE1QVENQXG4gICAzOlx0XHRib29sIFwmIzM0O01QVENQOiBNdWx0aXBhdGggVENQXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDU6XHRcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xuICAgNjpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XG4gICA3Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xuICAgODpcdFx0aGVscFxuICAgOTpcdFx0ICBNdWx0aXBhdGggVENQIChNUFRDUCkgY29ubmVjdGlvbnMgc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIG92ZXIgbXVsdGlwbGVcbiAgMTA6XHRcdCAgc3ViZmxvd3MgaW4gb3JkZXIgdG8gdXRpbGl6ZSBtdWx0aXBsZSBuZXR3b3JrIHBhdGhzLiBFYWNoIHN1YmZsb3dcbiAgMTE6XHRcdCAgdXNlcyB0aGUgVENQIHByb3RvY29sLCBhbmQgVENQIG9wdGlvbnMgY2FycnkgaGVhZGVyIGluZm9ybWF0aW9uIGZvclxuICAxMjpcdFx0ICBNUFRDUC5cbiAgMTM6XHRcbiAgMTQ6XHRpZiBNUFRDUFxuICAxNTpcdFxuICAxNjpcdGNvbmZpZyBJTkVUX01QVENQX0RJQUdcbiAgMTc6XHRcdGRlcGVuZHMgb24gSU5FVF9ESUFHXG4gIDE4Olx0XHRkZWZfdHJpc3RhdGUgSU5FVF9ESUFHXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIE1QVENQX0lQVjZcbiAgMjE6XHRcdGJvb2wgXCYjMzQ7TVBUQ1A6IElQdjYgc3VwcG9ydCBmb3IgTXVsdGlwYXRoIFRDUFwmIzM0O1xuICAyMjpcdFx0ZGVwZW5kcyBvbiBJUFY2PXlcbiAgMjM6XHRcdGRlZmF1bHQgeVxuICAyNDpcdFxuICAyNTpcdGNvbmZpZyBNUFRDUF9LVU5JVF9URVNUXG4gIDI2Olx0XHR0cmlzdGF0ZSBcJiMzNDtUaGlzIGJ1aWxkcyB0aGUgTVBUQ1AgS1VuaXQgdGVzdHNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuICAyNzpcdFx0ZGVwZW5kcyBvbiBLVU5JVFxuICAyODpcdFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiAgMjk6XHRcdGhlbHBcbiAgMzA6XHRcdCAgQ3VycmVudGx5IGNvdmVycyB0aGUgTVBUQ1AgY3J5cHRvIGFuZCB0b2tlbiBoZWxwZXJzLlxuICAzMTpcdFx0ICBPbmx5IHVzZWZ1bCBmb3Iga2VybmVsIGRldnMgcnVubmluZyBLVW5pdCB0ZXN0IGhhcm5lc3MgYW5kIGFyZSBub3RcbiAgMzI6XHRcdCAgZm9yIGluY2x1c2lvbiBpbnRvIGEgcHJvZHVjdGlvbiBidWlsZC5cbiAgMzM6XHRcbiAgMzQ6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCBwbGVhc2UgcmVmZXJcbiAgMzU6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24gaW4gRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva3VuaXQvLlxuICAzNjpcdFxuICAzNzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAzODpcdFxuICAzOTpcdGVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE4OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjA3CgkJCQkJCQlvdXRwdXQ6IDE0NwoJCQkJCQkJdGhvdWdodHM6IDIzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBNUFRDUCBTb2NrZXQgT3B0aW9ucyB3aXRoIElQdjYgVENMQVNTKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYE1QVENQX0lQVjZgIHJlbGllcyBvbiBgSVBWNj15YCBhbmQgaXMsIGJ5IGRlZmF1bHQsIGVuYWJsZWQuIE1ha2VzIHNlbnNlLiBTbywgaW4gdGVybXMgb2YgZW5hYmxpbmcgY29uZmlndXJhdGlvbnMgZm9yIGZ1enppbmcsIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7dmUgZ290IGEgY291cGxlIG9mIHNvbGlkIG9wdGlvbnM6IGVpdGhlciBJIGNhbiBpbmNsdWRlIGBNUFRDUGAgYW5kIGBJUFY2YCwgb3IgSSBjYW4gYmUgYSBiaXQgbW9yZSBleHBsaWNpdCBhbmQgZW5hYmxlIGBNUFRDUGAsIGBJUFY2YCwgKmFuZCogYE1QVENQX0lQVjZgLiBFbmFibGluZyBgTVBUQ1BfSVBWNmAgaXMgdGVjaG5pY2FsbHkgcmVkdW5kYW50LCBzaW5jZSBpdCB3aWxsIGJlIGVuYWJsZWQgd2l0aCBgSVBWNj15YCwgYnV0IGl0IGRvZXNuJiMzOTt0IGh1cnQuCgpUaGUgY29kZSYjMzk7cyBnb3QgdGhpcyBgI2lmICFJU19FTkFCTEVEKENPTkZJR19JUFY2KWAgaW4gYG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzc2AsIGFuZCB0aGF0IGNvbmZpcm1zIHRoYXQgYElQVjZgIGlzIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gaXRlbSBoZXJlLgoKU28sIGhlcmUmIzM5O3MgbXkgc3VtbWFyaXplZCBhcHByb2FjaDoKCiogICAqKldvcnRoRnV6emluZzoqKiBBYnNvbHV0ZWx5IQoqICAgKipGb2N1cyBTeW1ib2xzOioqIEkmIzM5O20gemVyb2luZyBpbiBvbjoKICAgICogICBgbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzYCAoVGhpcyBpcyB3aGVyZSB0aGUgbmV3IGNvZGUgaXMsIGFuZCBpcyBteSBtYWluIGZvY3VzKQogICAgKiAgIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2YCAoSXQgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgdG8gc2V0dGluZyBvcHRpb25zLCBzbyBpdCBpcyByZXF1aXJlZCkKICAgICogICBgbXB0Y3BfZ2V0c29ja29wdF92NmAgKE5lZWQgdG8gbWFrZSBzdXJlIGdldHNvY2tvcHQgd29ya3MgdG9vLCBhbmQgaXMgcmVsZXZhbnQgdG8gdGhlIG5ldyBjb2RlKS4KKiAgICoqRW5hYmxlQ29uZmlnczoqKiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZToKICAgICogICBgTVBUQ1BgCiAgICAqICAgYElQVjZgCiAgICAqICAgYE1QVENQX0lQVjZgIChPcHRpb25hbCwgYnV0IGdvb2QgdG8gaW5jbHVkZSwgZXZlbiBpZiByZWR1bmRhbnQuKQoKKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igc2V0dGluZyBhbmQgZ2V0dGluZyB0aGUgYElQVjZfVENMQVNTYCBzb2NrZXQgb3B0aW9uIHNwZWNpZmljYWxseSBmb3IgTVBUQ1Agc29ja2V0cy4gVGhpcyBtZWFucyBuZXcgY29kZSBwYXRocyBhcmUgbm93IHJlYWNoYWJsZSBpbiB0aGUgTVBUQ1Agc29ja2V0IG9wdGlvbnMgbG9naWMuIEkgbmVlZCB0byBmdXp6IHRoZXNlIHRvIHRob3JvdWdobHkgdGVzdCBob3cgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eSBpbnRlcmFjdHMgd2l0aCB2YXJpb3VzIGlucHV0cywgYW5kIGFsbCB0aGUgc3RhdGVzIHRoYXQgYXJlIHBvc3NpYmxlIHdpdGggc3ViZmxvd3MuIE1ha2luZyBzdXJlIGV2ZXJ5dGhpbmcgaXMgaGFuZGxlZCBjb3JyZWN0bHkgaXMga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxODo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVBUQ1AmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtNUFRDUF9JUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzJiMzNDssCiAgICAmIzM0O21wdGNwX3NldHNvY2tvcHRfdjYmIzM0OywKICAgICYjMzQ7bXB0Y3BfZ2V0c29ja29wdF92NiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHNldHRpbmcgYW5kIGdldHRpbmcgdGhlIElQVjZfVENMQVNTIHNvY2tldCBvcHRpb24gb24gTVBUQ1Agc29ja2V0cy4gVGhpcyBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgY29kZSBpbiB0aGUgTVBUQ1Agc29ja2V0IG9wdGlvbnMgaGFuZGxpbmcgbG9naWMsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBoYW5kbGVzIHZhcmlvdXMgaW5wdXRzIGFuZCBzdWJmbG93IHN0YXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVBUQ1AmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtNUFRDUF9JUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzJiMzNDssCiAgICAmIzM0O21wdGNwX3NldHNvY2tvcHRfdjYmIzM0OywKICAgICYjMzQ7bXB0Y3BfZ2V0c29ja29wdF92NiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHNldHRpbmcgYW5kIGdldHRpbmcgdGhlIElQVjZfVENMQVNTIHNvY2tldCBvcHRpb24gb24gTVBUQ1Agc29ja2V0cy4gVGhpcyBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgY29kZSBpbiB0aGUgTVBUQ1Agc29ja2V0IG9wdGlvbnMgaGFuZGxpbmcgbG9naWMsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBoYW5kbGVzIHZhcmlvdXMgaW5wdXRzIGFuZCBzdWJmbG93IHN0YXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE4OjUzOjM2LjY3ODkyMzQwMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjU5MTEwNTA3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUFRDUFwiLFxuICAgIFwiSVBWNlwiLFxuICAgIFwiTVBUQ1BfSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzc1wiLFxuICAgIFwibXB0Y3Bfc2V0c29ja29wdF92NlwiLFxuICAgIFwibXB0Y3BfZ2V0c29ja29wdF92NlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igc2V0dGluZyBhbmQgZ2V0dGluZyB0aGUgSVBWNl9UQ0xBU1Mgc29ja2V0IG9wdGlvbiBvbiBNUFRDUCBzb2NrZXRzLiBUaGlzIGludHJvZHVjZXMgbmV3IHJlYWNoYWJsZSBjb2RlIGluIHRoZSBNUFRDUCBzb2NrZXQgb3B0aW9ucyBoYW5kbGluZyBsb2dpYywgd2hpY2ggc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgY29ycmVjdGx5IGhhbmRsZXMgdmFyaW91cyBpbnB1dHMgYW5kIHN1YmZsb3cgc3RhdGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxODo1MzozNi42Nzg5MzE3ODFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NjAyNzQwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGZlN2E2NTIyN2MwMjFiYTNkZTMzYzBlNjg4ZGY5NTk3N2EzZWI1NzRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgMTMgMTg6NTM6MzQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3NvY2tvcHQuYyBiL25ldC9tcHRjcC9zb2Nrb3B0LmNcXG5pbmRleCBmY2Y2ZmViMmE5ZWI1ZC4uMWI4M2JiYTBiNThlMDUgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL3NvY2tvcHQuY1xcbisrKyBiL25ldC9tcHRjcC9zb2Nrb3B0LmNcXG5AQCAtMzk0LDYgKzM5NCwzOSBAQCBzdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfc29sX3NvY2tldChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcXG4gXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzcyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbit7XFxuKyNpZiAhSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4rXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbisjZWxzZVxcbitcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93O1xcbitcXHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltc2s7XFxuK1xcdGludCBlcnIsIHZhbDtcXG4rXFxuK1xcdGVyciA9IGlwdjZfc2V0c29ja29wdChzaywgU09MX0lQVjYsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcXG4rXFxuK1xcdGlmIChlcnIgIT0gMClcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdGxvY2tfc29jayhzayk7XFxuK1xcdHNvY2tvcHRfc2VxX2luYyhtc2spO1xcbitcXHR2YWwgPSBSRUFEX09OQ0UoaW5ldDZfc2soc2spLVxcdTAwM2V0Y2xhc3MpO1xcbitcXHRtcHRjcF9mb3JfZWFjaF9zdWJmbG93KG1zaywgc3ViZmxvdykge1xcbitcXHRcXHRzdHJ1Y3Qgc29jayAqc3NrID0gbXB0Y3Bfc3ViZmxvd190Y3Bfc29jayhzdWJmbG93KTtcXG4rXFx0XFx0Ym9vbCBzbG93O1xcbitcXG4rXFx0XFx0c2xvdyA9IGxvY2tfc29ja19mYXN0KHNzayk7XFxuK1xcdFxcdGluZXQ2X3NrKHNzayktXFx1MDAzZXRjbGFzcyA9IHZhbDtcXG4rXFx0XFx0c2tfZHN0X3Jlc2V0KHNzayk7XFxuK1xcdFxcdHVubG9ja19zb2NrX2Zhc3Qoc3NrLCBzbG93KTtcXG4rXFx0fVxcbitcXHRyZWxlYXNlX3NvY2soc2spO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuKyNlbmRpZlxcbit9XFxuK1xcbiBzdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfdjYoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsXFxuIFxcdFxcdFxcdCAgICAgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbiB7XFxuQEAgLTQzNiw2ICs0NjksOCBAQCBzdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfdjYoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsXFxuIFxcbiBcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbiBcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBJUFY2X1RDTEFTUzpcXG4rXFx0XFx0cmV0dXJuIG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzcyhtc2ssIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG5AQCAtMTQ4NSw2ICsxNTIwLDkgQEAgc3RhdGljIGludCBtcHRjcF9nZXRzb2Nrb3B0X3Y2KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxcbiBcXHRzdHJ1Y3Qgc29jayAqc2sgPSAodm9pZCAqKW1zaztcXG4gXFxuIFxcdHN3aXRjaCAob3B0bmFtZSkge1xcbitcXHRjYXNlIElQVjZfVENMQVNTOlxcbitcXHRcXHRyZXR1cm4gbXB0Y3BfcHV0X2ludF9vcHRpb24obXNrLCBvcHR2YWwsIG9wdGxlbixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFJFQURfT05DRShpbmV0Nl9zayhzayktXFx1MDAzZXRjbGFzcykpO1xcbiBcXHRjYXNlIElQVjZfVjZPTkxZOlxcbiBcXHRcXHRyZXR1cm4gbXB0Y3BfcHV0X2ludF9vcHRpb24obXNrLCBvcHR2YWwsIG9wdGxlbixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIHNrLVxcdTAwM2Vza19pcHY2b25seSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE4OjUzOjM3LjMyNzEzMjEwMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTExOTQyODg2OTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1QVENQXCIsXG4gICAgXCJJUFY2XCIsXG4gICAgXCJNUFRDUF9JUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzXCIsXG4gICAgXCJtcHRjcF9zZXRzb2Nrb3B0X3Y2XCIsXG4gICAgXCJtcHRjcF9nZXRzb2Nrb3B0X3Y2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBzZXR0aW5nIGFuZCBnZXR0aW5nIHRoZSBJUFY2X1RDTEFTUyBzb2NrZXQgb3B0aW9uIG9uIE1QVENQIHNvY2tldHMuIFRoaXMgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGNvZGUgaW4gdGhlIE1QVENQIHNvY2tldCBvcHRpb25zIGhhbmRsaW5nIGxvZ2ljLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgaGFuZGxlcyB2YXJpb3VzIGlucHV0cyBhbmQgc3ViZmxvdyBzdGF0ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZmU3YTY1MjI3YzAyMWJhM2RlMzNjMGU2ODhkZjk1OTc3YTNlYjU3NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDEzIDE4OjUzOjM0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3NvY2tvcHQuYyBiL25ldC9tcHRjcC9zb2Nrb3B0LmNcbmluZGV4IGZjZjZmZWIyYTllYjVkLi4xYjgzYmJhMGI1OGUwNSAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9zb2Nrb3B0LmNcbisrKyBiL25ldC9tcHRjcC9zb2Nrb3B0LmNcbkBAIC0zOTQsNiArMzk0LDM5IEBAIHN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF9zb2xfc29ja2V0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxuIFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIH1cbiBcbitzdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzcyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbitcdFx0XHRcdFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuK3tcbisjaWYgIUlTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rI2Vsc2VcbitcdHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3c7XG4rXHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltc2s7XG4rXHRpbnQgZXJyLCB2YWw7XG4rXG4rXHRlcnIgPSBpcHY2X3NldHNvY2tvcHQoc2ssIFNPTF9JUFY2LCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4rXG4rXHRpZiAoZXJyICE9IDApXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRsb2NrX3NvY2soc2spO1xuK1x0c29ja29wdF9zZXFfaW5jKG1zayk7XG4rXHR2YWwgPSBSRUFEX09OQ0UoaW5ldDZfc2soc2spLVx1MDAzZXRjbGFzcyk7XG4rXHRtcHRjcF9mb3JfZWFjaF9zdWJmbG93KG1zaywgc3ViZmxvdykge1xuK1x0XHRzdHJ1Y3Qgc29jayAqc3NrID0gbXB0Y3Bfc3ViZmxvd190Y3Bfc29jayhzdWJmbG93KTtcbitcdFx0Ym9vbCBzbG93O1xuK1xuK1x0XHRzbG93ID0gbG9ja19zb2NrX2Zhc3Qoc3NrKTtcbitcdFx0aW5ldDZfc2soc3NrKS1cdTAwM2V0Y2xhc3MgPSB2YWw7XG4rXHRcdHNrX2RzdF9yZXNldChzc2spO1xuK1x0XHR1bmxvY2tfc29ja19mYXN0KHNzaywgc2xvdyk7XG4rXHR9XG4rXHRyZWxlYXNlX3NvY2soc2spO1xuK1xuK1x0cmV0dXJuIDA7XG4rI2VuZGlmXG4rfVxuK1xuIHN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF92NihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbiBcdFx0XHQgICAgICAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcbiB7XG5AQCAtNDM2LDYgKzQ2OSw4IEBAIHN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF92NihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbiBcbiBcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiBcdFx0YnJlYWs7XG4rXHRjYXNlIElQVjZfVENMQVNTOlxuK1x0XHRyZXR1cm4gbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzKG1zaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xuIFx0fVxuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC0xNDg1LDYgKzE1MjAsOSBAQCBzdGF0aWMgaW50IG1wdGNwX2dldHNvY2tvcHRfdjYoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsXG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSAodm9pZCAqKW1zaztcbiBcbiBcdHN3aXRjaCAob3B0bmFtZSkge1xuK1x0Y2FzZSBJUFY2X1RDTEFTUzpcbitcdFx0cmV0dXJuIG1wdGNwX3B1dF9pbnRfb3B0aW9uKG1zaywgb3B0dmFsLCBvcHRsZW4sXG4rXHRcdFx0XHRcdCAgICBSRUFEX09OQ0UoaW5ldDZfc2soc2spLVx1MDAzZXRjbGFzcykpO1xuIFx0Y2FzZSBJUFY2X1Y2T05MWTpcbiBcdFx0cmV0dXJuIG1wdGNwX3B1dF9pbnRfb3B0aW9uKG1zaywgb3B0dmFsLCBvcHRsZW4sXG4gXHRcdFx0XHRcdCAgICBzay1cdTAwM2Vza19pcHY2b25seSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxODo1MzozNy4zMjcxMzQ4MDFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTk1ODk4NTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIE1QVENQIElQVjZfVENMQVNTIFBhdGNoKipcblxuQWxyaWdodCwgc28gd2UndmUgZ290IGEgcGF0Y2ggdGhhdCdzIGludHJvZHVjaW5nIHN1cHBvcnQgZm9yIGBJUFY2X1RDTEFTU2Agd2l0aGluIE1QVENQIHNvY2tldHMuIFRoZSBjb3JlIGNoYW5nZXMgYXJlLCBhcyBleHBlY3RlZCwgd2l0aGluIGBuZXQvbXB0Y3Avc29ja29wdC5jYC4gU3BlY2lmaWNhbGx5LCB0aGV5J3ZlIHRvdWNoZWQgYG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzc2AsIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2YCwgYW5kIGBtcHRjcF9nZXRzb2Nrb3B0X3Y2YC4gVGhhdCBzZWVtcyBsb2dpY2FsOyBgc2V0c29ja29wdGAgYW5kIGBnZXRzb2Nrb3B0YCB3b3VsZCBiZSB0aGUgcHJpbWFyeSBpbnRlcmZhY2VzIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHksIHdpdGggdGhlIGRlZGljYXRlZCBgbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzYCBiZWluZyBhZGRlZCwgcHJlc3VtYWJseSB0byBoYW5kbGUgdGhlIGBJUFY2X1RDTEFTU2Agb3B0aW9uIGluIHBhcnRpY3VsYXIsIGZvciB0aGUgSVB2Ni1zcGVjaWZpYyBzb2NrZXQgb3B0aW9ucyBmb3IgTVBUQ1AuXG5cbk5vdywgYmVmb3JlIEkgZGlnIGludG8gdGhlIGNvZGUgaXRzZWxmLCBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSB0aGUgcHJlLXJlcXVpc2l0ZXMuIFdlJ3JlIGRlYWxpbmcgd2l0aCBNUFRDUCwgc28gYENPTkZJR19NUFRDUGAgKmhhcyogdG8gYmUgZW5hYmxlZC4gQW5kIGl0J3MgYElQVjZfVENMQVNTYCBzbyBgQ09ORklHX0lQVjZgIG11c3QgYmUgZW5hYmxlZC4gVGhhdCdzIGEgZ2l2ZW4uXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgYG5ldC9tcHRjcC9zb2Nrb3B0LmNgIGZvciBhbnkgb3RoZXIgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3IgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIFRoZXJlIGNvdWxkIGJlIHNvbWUgc3VidGxlIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHNvY2tldCBvcHRpb25zIG9yIGV2ZW4gTVBUQ1AgZmVhdHVyZXMgdGhhdCB3ZSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIGZ1bGwgcGljdHVyZSBiZWZvcmUgZGl2aW5nIGludG8gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MjgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxODo1Mzo0Mi4zMjMwMzYzOTlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5Njk4MTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19NUFRDUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXB0Y3AvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5uZXQvbXB0Y3AvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfTVBUQ1ApICs9IG1wdGNwLm9cXG5uZXQvbXB0Y3AvTWFrZWZpbGUtMy1cXG4tLVxcbm5ldC9tcHRjcC9NYWtlZmlsZT0xMj1tcHRjcF90b2tlbl90ZXN0LW9ianMgOj0gdG9rZW5fdGVzdC5vXFxubmV0L21wdGNwL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19NUFRDUF9LVU5JVF9URVNUKSArPSBtcHRjcF9jcnlwdG9fdGVzdC5vIG1wdGNwX3Rva2VuX3Rlc3Qub1xcbm5ldC9tcHRjcC9NYWtlZmlsZS0xNC1cXG4tLVxcbm5ldC9tcHRjcC9jcnlwdG8uYz00Mz12b2lkIG1wdGNwX2NyeXB0b19obWFjX3NoYSh1NjQga2V5MSwgdTY0IGtleTIsIHU4ICptc2csIGludCBsZW4sIHZvaWQgKmhtYWMpXFxuLS1cXG5uZXQvbXB0Y3AvY3J5cHRvLmMtNDktXFxubmV0L21wdGNwL2NyeXB0by5jOjUwOiNpZiBJU19NT0RVTEUoQ09ORklHX01QVENQX0tVTklUX1RFU1QpXFxubmV0L21wdGNwL2NyeXB0by5jLTUxLUVYUE9SVF9TWU1CT0xfR1BMKG1wdGNwX2NyeXB0b19obWFjX3NoYSk7XFxuLS1cXG5uZXQvbXB0Y3AvY3RybC5jPTU4Nz12b2lkIF9faW5pdCBtcHRjcF9pbml0KHZvaWQpXFxuLS1cXG5uZXQvbXB0Y3AvY3RybC5jLTU5NS1cXG5uZXQvbXB0Y3AvY3RybC5jOjU5NjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvY3RybC5jLTU5Ny1pbnQgX19pbml0IG1wdGNwdjZfaW5pdCh2b2lkKVxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYz0yMz1zdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMjQxLVxcdFxcdFxcdFxcdG1wX29wdC1cXHUwMDNlYWRkci5mYW1pbHkgPSBBRl9JTkVUO1xcbm5ldC9tcHRjcC9vcHRpb25zLmM6MjQyOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMjQzLVxcdFxcdFxcdGVsc2UgaWYgKG9wc2l6ZSA9PSBUQ1BPTEVOX01QVENQX0FERF9BRERSNiB8fFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy0yNTItXFx0XFx0XFx0XFx0bXBfb3B0LVxcdTAwM2VhZGRyLmZhbWlseSA9IEFGX0lORVQ7XFxubmV0L21wdGNwL29wdGlvbnMuYzoyNTM6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL29wdGlvbnMuYy0yNTQtXFx0XFx0XFx0ZWxzZSBpZiAob3BzaXplID09IFRDUE9MRU5fTVBUQ1BfQUREX0FERFI2X0JBU0UgfHxcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMjc0LVxcdFxcdH1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjI3NTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTI3Ni1cXHRcXHRlbHNlIHtcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmM9NjMyPXN0YXRpYyB1NjQgYWRkX2FkZHJfZ2VuZXJhdGVfaG1hYyh1NjQga2V5MSwgdTY0IGtleTIsXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTY0NC1cXHR9XFxubmV0L21wdGNwL29wdGlvbnMuYzo2NDU6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL29wdGlvbnMuYy02NDYtXFx0ZWxzZSBpZiAoYWRkci1cXHUwMDNlZmFtaWx5ID09IEFGX0lORVQ2KSB7XFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTEzODQ9dm9pZCBtcHRjcF93cml0ZV9vcHRpb25zKHN0cnVjdCB0Y3BoZHIgKnRoLCBfX2JlMzIgKnB0ciwgc3RydWN0IHRjcF9zb2NrICp0cCxcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTU2Ny1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjE1Njg6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL29wdGlvbnMuYy0xNTY5LVxcdFxcdGlmIChvcHRzLVxcdTAwM2VhZGRyLmZhbWlseSA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTU4Ni1cXHRcXHR9XFxubmV0L21wdGNwL29wdGlvbnMuYzoxNTg3OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTU4OC1cXHRcXHRlbHNlIGlmIChvcHRzLVxcdTAwM2VhZGRyLmZhbWlseSA9PSBBRl9JTkVUNikge1xcbi0tXFxubmV0L21wdGNwL3BtLmM9MzM9Ym9vbCBtcHRjcF9wbV9hZGRyX2ZhbWlsaWVzX21hdGNoKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9tcHRjcC9wbS5jLTM4LVxcbm5ldC9tcHRjcC9wbS5jOjM5OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wbS5jLTQwLVxcdGJvb2wgbG9jX2lzX3Y0ID0gbG9jLVxcdTAwM2VmYW1pbHkgPT0gQUZfSU5FVCB8fCBpcHY2X2FkZHJfdjRtYXBwZWQoXFx1MDAyNmxvYy1cXHUwMDNlYWRkcjYpO1xcbi0tXFxubmV0L21wdGNwL3BtLmM9NTU9Ym9vbCBtcHRjcF9hZGRyZXNzZXNfZXF1YWwoY29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqYSxcXG4tLVxcbm5ldC9tcHRjcC9wbS5jLTYyLVxcdFxcdFxcdGFkZHJfZXF1YWxzID0gYS1cXHUwMDNlYWRkci5zX2FkZHIgPT0gYi1cXHUwMDNlYWRkci5zX2FkZHI7XFxubmV0L21wdGNwL3BtLmM6NjM6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3BtLmMtNjQtXFx0XFx0ZWxzZVxcbi0tXFxubmV0L21wdGNwL3BtLmM9ODM9dm9pZCBtcHRjcF9sb2NhbF9hZGRyZXNzKGNvbnN0IHN0cnVjdCBzb2NrX2NvbW1vbiAqc2tjLFxcbi0tXFxubmV0L21wdGNwL3BtLmMtODktXFx0XFx0YWRkci1cXHUwMDNlYWRkci5zX2FkZHIgPSBza2MtXFx1MDAzZXNrY19yY3Zfc2FkZHI7XFxubmV0L21wdGNwL3BtLmM6OTA6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3BtLmMtOTEtXFx0ZWxzZSBpZiAoYWRkci1cXHUwMDNlZmFtaWx5ID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L21wdGNwL3BtLmM9OTY9dm9pZCBtcHRjcF9yZW1vdGVfYWRkcmVzcyhjb25zdCBzdHJ1Y3Qgc29ja19jb21tb24gKnNrYyxcXG4tLVxcbm5ldC9tcHRjcC9wbS5jLTEwMi1cXHRcXHRhZGRyLVxcdTAwM2VhZGRyLnNfYWRkciA9IHNrYy1cXHUwMDNlc2tjX2RhZGRyO1xcbm5ldC9tcHRjcC9wbS5jOjEwMzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcG0uYy0xMDQtXFx0ZWxzZSBpZiAoYWRkci1cXHUwMDNlZmFtaWx5ID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jPTYwNj1maWxsX2xvY2FsX2FkZHJlc3NfYW55KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKnJlbW90ZSxcXG4tLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy02MTItXFx0bG9jYWwtXFx1MDAzZWFkZHIuZmFtaWx5ID1cXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6NjEzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy02MTQtXFx0XFx0XFx0cmVtb3RlLVxcdTAwM2VmYW1pbHkgPT0gQUZfSU5FVDYgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYz04NTI9c3RhdGljIGludCBtcHRjcF9wbV9ubF9jcmVhdGVfbGlzdGVuX3NvY2tldChzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtODg5LVxcdG1wdGNwX2luZm8yc29ja2FkZHIoXFx1MDAyNmVudHJ5LVxcdTAwM2VhZGRyLCBcXHUwMDI2YWRkciwgZW50cnktXFx1MDAzZWFkZHIuZmFtaWx5KTtcXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6ODkwOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy04OTEtXFx0aWYgKGVudHJ5LVxcdTAwM2VhZGRyLmZhbWlseSA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy04OTUtXFx0XFx0ZXJyID0gaW5ldF9iaW5kX3NrKHNzaywgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopXFx1MDAyNmFkZHIsIGFkZHJsZW4pO1xcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYzo4OTY6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTg5Ny1cXHRlbHNlIGlmIChzc2stXFx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9MjI9c3RhdGljIGludCBtcHRjcF9wbV9mYW1pbHlfdG9fYWRkcihpbnQgZmFtaWx5KVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtMjMte1xcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM6MjQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0yNS1cXHRpZiAoZmFtaWx5ID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYz0zMT1zdGF0aWMgaW50IG1wdGNwX3BtX3BhcnNlX3BtX2FkZHJfYXR0cihzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy02My1cXHRpZiAoYWRkci1cXHUwMDNlZmFtaWx5ICE9IEFGX0lORVRcXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jOjY0OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNjUtXFx0ICAgIFxcdTAwMjZcXHUwMDI2IGFkZHItXFx1MDAzZWZhbWlseSAhPSBBRl9JTkVUNlxcbi0tXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy03OC1cXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jOjc5OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtODAtXFx0aWYgKGFkZHItXFx1MDAzZWZhbWlseSA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9MTMxPXN0YXRpYyBpbnQgbXB0Y3BfbmxfZmlsbF9hZGRyKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTE1Ni1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jOjE1NzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTE1OC1cXHRlbHNlIGlmIChhZGRyLVxcdTAwM2VmYW1pbHkgPT0gQUZfSU5FVDYgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9Mjk4PXN0YXRpYyBpbnQgbXB0Y3BfZXZlbnRfYWRkX3N1YmZsb3coc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHNvY2sgKnNzaylcXG4tLVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtMzEyLVxcdFxcdGJyZWFrO1xcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM6MzEzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtMzE0LVxcdGNhc2UgQUZfSU5FVDY6IHtcXG4tLVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9NDY1PXZvaWQgbXB0Y3BfZXZlbnRfYWRkcl9hbm5vdW5jZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNzayxcXG4tLVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNTAyLVxcdFxcdGJyZWFrO1xcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM6NTAzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNTA0LVxcdGNhc2UgQUZfSU5FVDY6XFxuLS1cXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jPTUyMj12b2lkIG1wdGNwX2V2ZW50X3BtX2xpc3RlbmVyKGNvbnN0IHN0cnVjdCBzb2NrICpzc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTU1MS1cXHRcXHRicmVhaztcXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jOjU1MjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTU1My1cXHRjYXNlIEFGX0lORVQ2OiB7XFxuLS1cXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM9NDMyPXN0YXRpYyBzdHJ1Y3Qgc29jayAqbXB0Y3BfbmxfZmluZF9zc2soc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4tLVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy00NTctXFx0XFx0XFx0YnJlYWs7XFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jOjQ1ODojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtNDU5LVxcdFxcdGNhc2UgQUZfSU5FVDY6IHtcXG4tLVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYz00Nzg9aW50IG1wdGNwX3BtX25sX3N1YmZsb3dfZGVzdHJveV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtNTA2LVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYzo1MDc6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTUwOC1cXHRpZiAoYWRkcl9sLmFkZHIuZmFtaWx5ID09IEFGX0lORVQgXFx1MDAyNlxcdTAwMjYgaXB2Nl9hZGRyX3Y0bWFwcGVkKFxcdTAwMjZhZGRyX3IuYWRkcjYpKSB7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMC0jaW5jbHVkZSBcXHUwMDNjbmV0L3RjcF9zdGF0ZXMuaFxcdTAwM2VcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyMTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMi0jaW5jbHVkZSBcXHUwMDNjbmV0L3RyYW5zcF92Ni5oXFx1MDAzZVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MzE9c3RhdGljIHVuc2lnbmVkIGludCBtcHRjcF9pbnFfaGludChjb25zdCBzdHJ1Y3Qgc29jayAqc2spO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzUtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzY6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzctc3RydWN0IG1wdGNwNl9zb2NrIHtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTY0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzICptcHRjcF9mYWxsYmFja190Y3Bfb3BzKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTY3LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjY4OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTY5LVxcdGlmIChmYW1pbHkgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zMzk3PXN0YXRpYyB2b2lkIG1wdGNwX2NvcHlfaW5hZGRycyhzdHJ1Y3Qgc29jayAqbXNrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc3NrKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMzOTgte1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjMzOTk6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzQwMC1cXHRjb25zdCBzdHJ1Y3QgaXB2Nl9waW5mbyAqc3NrNiA9IGluZXQ2X3NrKHNzayk7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zNDQyPXN0YXRpYyBpbnQgbXB0Y3BfZGlzY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM1MDQtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzUwNTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNTA2LXN0YXRpYyBzdHJ1Y3QgaXB2Nl9waW5mbyAqbXB0Y3BfaW5ldDZfc2soY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MzU1Mz1zdHJ1Y3Qgc29jayAqbXB0Y3Bfc2tfY2xvbmVfaW5pdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNTY1LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM1NjY6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzU2Ny1cXHRpZiAobnNrLVxcdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNTcyLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM1NzM6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzU3NC1cXHRpZiAobnNrLVxcdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz00MDk5PXN0YXRpYyBpbnQgbXB0Y3BfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsIGludCBhZGRyX2xlbilcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQxMTMtXFx0XFx0ZXJyID0gaW5ldF9iaW5kX3NrKHNzaywgdWFkZHIsIGFkZHJfbGVuKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0MTE0OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQxMTUtXFx0ZWxzZSBpZiAoc2stXFx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTQ2MzU9dm9pZCBfX2luaXQgbXB0Y3BfcHJvdG9faW5pdCh2b2lkKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDY3NC1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0Njc1OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ2NzYtc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbXB0Y3BfdjZfc3RyZWFtX29wcyA9IHtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oPTkxMj12b2lkIF9faW5pdCBtcHRjcF9wcm90b19pbml0KHZvaWQpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjkxMzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC05MTQtaW50IF9faW5pdCBtcHRjcF9wcm90b192Nl9pbml0KHZvaWQpO1xcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNy0jaW5jbHVkZSBcXHUwMDNjbmV0L3Byb3RvY29sLmhcXHUwMDNlXFxubmV0L21wdGNwL3N1YmZsb3cuYzoxODojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE5LSNpbmNsdWRlIFxcdTAwM2NuZXQvaXA2X3JvdXRlLmhcXHUwMDNlXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTM1OD1zdGF0aWMgaW50IHN1YmZsb3dfdjRfc2VuZF9zeW5hY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTM3MC1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjM3MTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTM3Mi1zdGF0aWMgaW50IHN1YmZsb3dfdjZfc2VuZF9zeW5hY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTY0OT1zdGF0aWMgaW50IHN1YmZsb3dfcmVidWlsZF9oZWFkZXIoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy02NTgtXFxubmV0L21wdGNwL3N1YmZsb3cuYzo2NTk6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3N1YmZsb3cuYy02NjAtc3RhdGljIGludCBzdWJmbG93X3Y2X3JlYnVpbGRfaGVhZGVyKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9NjkyPXN0YXRpYyB2b2lkIHN1YmZsb3dfdjRfcmVxX2Rlc3RydWN0b3Ioc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy02OTctXFxubmV0L21wdGNwL3N1YmZsb3cuYzo2OTg6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3N1YmZsb3cuYy02OTktc3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzIG1wdGNwX3N1YmZsb3dfdjZfcmVxdWVzdF9zb2NrX29wcyBfX3JvX2FmdGVyX2luaXQ7XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTczNz1zdHJ1Y3QgcmVxdWVzdF9zb2NrICptcHRjcF9zdWJmbG93X3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTc0Mi1cXHRcXHRvcHMgPSBcXHUwMDI2bXB0Y3Bfc3ViZmxvd192NF9yZXF1ZXN0X3NvY2tfb3BzO1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6NzQzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNzQ0LVxcdGVsc2UgaWYgKG9wcy1cXHUwMDNlZmFtaWx5ID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0xNTUzPXN1YmZsb3dfZGVmYXVsdF9hZl9vcHMoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU1NC17XFxubmV0L21wdGNwL3N1YmZsb3cuYzoxNTU1OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU1Ni1cXHRpZiAoc2stXFx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU2MS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE1NjI6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNTYzLXZvaWQgbXB0Y3B2Nl9oYW5kbGVfbWFwcGVkKHN0cnVjdCBzb2NrICpzaywgYm9vbCBtYXBwZWQpXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE1ODI9dm9pZCBtcHRjcF9pbmZvMnNvY2thZGRyKGNvbnN0IHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE1OTItXFx0XFx0XFx0aW5fYWRkci1cXHUwMDNlc2luX2FkZHIgPSBpbmZvLVxcdTAwM2VhZGRyO1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTU5MzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE1OTQtXFx0XFx0ZWxzZSBpZiAoaXB2Nl9hZGRyX3Y0bWFwcGVkKFxcdTAwMjZpbmZvLVxcdTAwM2VhZGRyNikpXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE1OTgtXFx0fVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTU5OTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2MDAtXFx0ZWxzZSBpZiAoYWRkci1cXHUwMDNlc3NfZmFtaWx5ID09IEFGX0lORVQ2KSB7XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE2MTM9aW50IF9fbXB0Y3Bfc3ViZmxvd19jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IG1wdGNwX3BtX2xvY2FsICpsb2NhbCxcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTY0OC1cXHRcXHRcXHRsb2NhbF9pZCA9IC0xO1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTY0OTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2NTAtXFx0fSBlbHNlIGlmIChzay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KSB7XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2NjUtXFx0YWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pO1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTY2NjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2NjctXFx0aWYgKGFkZHIuc3NfZmFtaWx5ID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0xNzU2PXN0YXRpYyB2b2lkIG1wdGNwX3N1YmZsb3dfb3BzX292ZXJyaWRlKHN0cnVjdCBzb2NrICpzc2spXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNzU3LXtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE3NTg6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNzU5LVxcdGlmIChzc2stXFx1MDAzZXNrX3Byb3QgPT0gXFx1MDAyNnRjcHY2X3Byb3QpXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE3NjY9c3RhdGljIHZvaWQgbXB0Y3Bfc3ViZmxvd19vcHNfdW5kb19vdmVycmlkZShzdHJ1Y3Qgc29jayAqc3NrKVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTc2Ny17XFxubmV0L21wdGNwL3N1YmZsb3cuYzoxNzY4OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTc2OS1cXHRpZiAoc3NrLVxcdTAwM2Vza19wcm90ID09IFxcdTAwMjZ0Y3B2Nl9wcm90X292ZXJyaWRlKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0yMTQxPXZvaWQgX19pbml0IG1wdGNwX3N1YmZsb3dfaW5pdCh2b2lkKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yMTczLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjE3NDojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNzUtdm9pZCBfX2luaXQgbXB0Y3Bfc3ViZmxvd192Nl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvbXB0Y3AvdG9rZW4uYz0zOTg9dm9pZCBfX2luaXQgbXB0Y3BfdG9rZW5faW5pdCh2b2lkKVxcbi0tXFxubmV0L21wdGNwL3Rva2VuLmMtNDE3LVxcbm5ldC9tcHRjcC90b2tlbi5jOjQxODojaWYgSVNfTU9EVUxFKENPTkZJR19NUFRDUF9LVU5JVF9URVNUKVxcbm5ldC9tcHRjcC90b2tlbi5jLTQxOS1FWFBPUlRfU1lNQk9MX0dQTChtcHRjcF90b2tlbl9uZXdfcmVxdWVzdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE4OjUzOjQyLjQ2Mjc0NjMzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODIxOTE5MDA0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1QVENQIElQVjZfVENMQVNTIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9tcHRjcC9zb2Nrb3B0LmNgLiBJdCdzIGludHJvZHVjaW5nIGBJUFY2X1RDTEFTU2Agc3VwcG9ydCBzcGVjaWZpY2FsbHkgZm9yIE1QVENQIHNvY2tldHMuIFRoYXQncyBnb29kLCBzZWVpbmcgYXMgd2Ugc2hvdWxkIGJlIGFibGUgdG8gbWFrZSB1c2Ugb2YgdHJhZmZpYyBjbGFzcyBkaWZmZXJlbnRpYXRpb25zIGZvciBNUFRDUCBpbiBhbiBJUHY2IGVudmlyb25tZW50LlxuXG5Ob3csIHRoZSBjb2RlIGl0c2VsZiBpcyB1c2luZyBhIHByZXByb2Nlc3NvciBkaXJlY3RpdmUsIGAjaWYgIUlTX0VOQUJMRUQoQ09ORklHX0lQVjYpYCwgd2l0aGluIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3NgLiBUaGF0J3MgYSBiaXQgb2RkLiBJIHdvdWxkIGhhdmUgZXhwZWN0ZWQgYSBjaGVjayAqZm9yKiBJUHY2IHRvIGluY2x1ZGUgdGhpcyBmZWF0dXJlLCBub3QgZXhjbHVkZSBpdC4gU28sIGEgZ3VhcmQgbGlrZSBgQ09ORklHX0lQVjZgIHNlZW1zIGxvZ2ljYWw7IHRoZSBgIWAgbmVnYXRlcyBteSBpbml0aWFsIGltcHJlc3Npb24uXG5cbkJlZm9yZSBJIGp1bXAgdG8gY29uY2x1c2lvbnMsIEkgbmVlZCB0byB2ZXJpZnkgaG93IGBDT05GSUdfSVBWNmAgYW5kIHBvdGVudGlhbGx5IGBDT05GSUdfTVBUQ1BfSVBWNmAgYXJlIGJlaW5nIHVzZWQgaW4gdGhpcyBmaWxlLiBUaGVyZSBtaWdodCBiZSBhIHN1YnRsZSByZWFzb24gZm9yIHRoaXMgY29uZGl0aW9uYWwgbG9naWMsIG9yIHBlcmhhcHMgaXQncyBhbiBvdmVyc2lnaHQuIFRpbWUgdG8gc2NhbiBgbmV0L21wdGNwL3NvY2tvcHQuY2AgZm9yIHRob3NlIGNvbmZpZyBzeW1ib2xzIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY2NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxODo1Mzo1MC42ODE5MzkwMzJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODMwOTk1MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0lQVjZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL3NvY2tvcHQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3Avc29ja29wdC5jPTM5Nz1zdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzcyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMzk5LXtcXG5uZXQvbXB0Y3Avc29ja29wdC5jOjQwMDojaWYgIUlTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L21wdGNwL3NvY2tvcHQuYy00MDEtXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L21wdGNwL3NvY2tvcHQuYz0xMjA2PXN0YXRpYyB2b2lkIG1wdGNwX2dldF9zdWJfYWRkcnMoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19hZGRycyAqYSlcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTIyMi1cXHRcXHRhLVxcdTAwM2VzaW5fcmVtb3RlLnNpbl9hZGRyLnNfYWRkciA9IGluZXQtXFx1MDAzZWluZXRfZGFkZHI7XFxubmV0L21wdGNwL3NvY2tvcHQuYzoxMjIzOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTIyNC1cXHR9IGVsc2UgaWYgKHNrLVxcdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTg6NTM6NTAuNzY1MDQ0NDI3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg2MjA4MTU2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFByb3Bvc2VkIE1QVENQIGFuZCBJUHY2IEludGVncmF0aW9uKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBpbnRlZ3JhdGluZyBUcmFmZmljIENsYXNzIChUQ0xBU1MpIHNldHRpbmcgd2l0aCBNUFRDUCBvdmVyIElQdjYuIFRoZSBmdW5kYW1lbnRhbCBjb25maWdzIHJlcXVpcmVkIGFyZSwgb2J2aW91c2x5LCBgTVBUQ1BgIGFuZCBgSVBWNmAuIFdlIGFyZSB3b3JraW5nIHdpdGggdGhyZWUgZnVuY3Rpb25zIGhlcmU6IGBtcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3NgIHdoaWNoIGlzIGEgbmV3IGZ1bmN0aW9uLCBhbmQgYG1wdGNwX3NldHNvY2tvcHRfdjZgIGFuZCBgbXB0Y3BfZ2V0c29ja29wdF92NmAsIHdoaWNoIGFyZSBleGlzdGluZyBmdW5jdGlvbnMgYmVpbmcgbW9kaWZpZWQuXG5cblRoZSBrZXkgaXMgaG93IHRoZXNlIHBpZWNlcyB3aWxsIGZpdCB0b2dldGhlci4gRmlyc3QsIGl0IGxvb2tzIGxpa2UgYElQVjZfVENMQVNTYCBzaG91bGQgYmUgYWNjZXNzaWJsZS4gVGhlIGV4aXN0aW5nIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2YCBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBgbXB0Y3Bfc2V0c29ja29wdGAgd2hlbiB0aGUgc29ja2V0IG9wdGlvbiBsZXZlbCBpcyBgU09MX0lQVjZgLCBhbmQgdGhlIGBtcHRjcF9nZXRzb2Nrb3B0X3Y2YCBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBgbXB0Y3BfZ2V0c29ja29wdGAgd2hlbiB0aGUgc29ja2V0IG9wdGlvbiBsZXZlbCBpcyBgU09MX0lQVjZgIC0gdGhhdCBtZWFucyBpdCdzIGEgZ29vZCBwbGFjZSB0byBob29rIGluLlxuXG5Ob3csIGxldCdzIGRyaWxsIGRvd24gaW50byBgbXB0Y3Bfc2V0c29ja29wdF92NmAgYW5kIGBtcHRjcF9nZXRzb2Nrb3B0X3Y2YCBhbmQgc2VlIGhvdyB0aGUgbmV3IGBtcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3NgIGZ1bmN0aW9uIGlzIGNhbGxlZCBvciB3aWxsIGludGVyZmFjZSB3aXRoIHRoZW0uIEknbGwgbmVlZCB0byBsb29rIGF0IHRoZSByZWxldmFudCBjb2RlIGluIGRldGFpbCBhbmQgdmVyaWZ5IHByb3BlciBlcnJvciBoYW5kbGluZywgZGF0YSBzdHJ1Y3R1cmUgaW50ZXJhY3Rpb25zLCBhbmQgb3ZlcmFsbCBpbXBhY3Qgb24gZXhpc3RpbmcgTVBUQ1AvSVB2NiBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzYwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE4OjUzOjU2LjYyNzEzMTQ4MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzYzODk5MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3Bfc2V0c29ja29wdF92NlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXB0Y3Avc29ja29wdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9zb2Nrb3B0LmM9MzAwPXN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF9zb2xfc29ja2V0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L21wdGNwL3NvY2tvcHQuYy0zOTYtXFxubmV0L21wdGNwL3NvY2tvcHQuYzozOTc6c3RhdGljIGludCBtcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3Moc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsXFxubmV0L21wdGNwL3NvY2tvcHQuYy0zOTgtXFx0XFx0XFx0XFx0XFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L21wdGNwL3NvY2tvcHQuYy00MjktXFxubmV0L21wdGNwL3NvY2tvcHQuYzo0MzA6c3RhdGljIGludCBtcHRjcF9zZXRzb2Nrb3B0X3Y2KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNDMxLVxcdFxcdFxcdCAgICAgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L21wdGNwL3NvY2tvcHQuYy00NzItXFx0Y2FzZSBJUFY2X1RDTEFTUzpcXG5uZXQvbXB0Y3Avc29ja29wdC5jOjQ3MzpcXHRcXHRyZXR1cm4gbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzKG1zaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNDc0LVxcdH1cXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM9OTQyPWludCBtcHRjcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtOTcxLVxcdGlmIChsZXZlbCA9PSBTT0xfSVBWNilcXG5uZXQvbXB0Y3Avc29ja29wdC5jOjk3MjpcXHRcXHRyZXR1cm4gbXB0Y3Bfc2V0c29ja29wdF92Nihtc2ssIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcXG5uZXQvbXB0Y3Avc29ja29wdC5jLTk3My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTg6NTM6NTYuNzYzNTI4NzU0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTExNTY4Mzc2NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBQbGFuOiBNUFRDUCBTb2NrZXQgVENMQVNTIEhhbmRsaW5nKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHNvbWUga2VybmVsIGNoYW5nZXMg4oCTIHNwZWNpZmljYWxseSwgdGhlIGFiaWxpdHkgdG8gc2V0IGFuZCBnZXQgYElQVjZfVENMQVNTYCBvbiBNUFRDUCBzb2NrZXRzLiBUaGlzIGlzIHByaW1lIGZ1enppbmcgdGVycml0b3J5LiBXZSd2ZSBnb3QgYSBuZXcgc3VyZmFjZSBhcmVhIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBhbmQgd2UgbmVlZCB0byBleHBsb3JlIGl0IHRob3JvdWdobHkuXG5cbk15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB0aGUga2V5IHN5bWJvbHMgdGhhdCBhcmUgaW50cm9kdWNlZDogYG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzc2AsIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2YCwgYW5kIGBtcHRjcF9nZXRzb2Nrb3B0X3Y2YC4gVGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMgd2UgbmVlZCB0byB0YXJnZXQgZHVyaW5nIGZ1enppbmcuXG5cbkJlZm9yZSBJIGtpY2sgdGhpbmdzIG9mZiwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWdzIGluIHBsYWNlLiBXZSdsbCBuZWVkIGBNUFRDUGAgYW5kIGBJUFY2YCBlbmFibGVkLCBvYnZpb3VzbHkuIEknbSBnb2luZyB0byBkb3VibGUgY2hlY2sgaWYgYE1QVENQX0lQVjZgIGlzIGFsc28gYSBkZXBlbmRlbmN5OyBtaWdodCBhcyB3ZWxsIGdldCB0aGF0IHN0cmFpZ2h0ZW5lZCBvdXQgYmVmb3JlIEkgc3RhcnQuIEknbGwgdGFrZSBhIHF1aWNrIGxvb2sgaW4gYG5ldC9tcHRjcC9LY29uZmlnYCB0byBjb25maXJtLiBMZXQncyBtYWtlIHN1cmUgb3VyIGZvdW5kYXRpb24gaXMgc29saWQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDEyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE4OjU0OjA3LjkyMDM3MTYzOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2NTcyMDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNUFRDUF9JUFY2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL0tjb25maWc9MTY9Y29uZmlnIElORVRfTVBUQ1BfRElBR1xcbi0tXFxubmV0L21wdGNwL0tjb25maWctMTktXFxubmV0L21wdGNwL0tjb25maWc6MjA6Y29uZmlnIE1QVENQX0lQVjZcXG5uZXQvbXB0Y3AvS2NvbmZpZy0yMS1cXHRib29sIFxcXCJNUFRDUDogSVB2NiBzdXBwb3J0IGZvciBNdWx0aXBhdGggVENQXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxODo1NDowOC4wNTY5NTExNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDQ3OTY2NTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBNUFRDUF9JUFY2YCBDb25maWd1cmF0aW9uIE9wdGlvbioqXG5cblJpZ2h0LCBzbyBgTVBUQ1BfSVBWNmAgaXMgYSBkZWZpbmVkIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhpcyBzeXN0ZW0uIEknbSBnb2luZyB0byBxdWlja2x5IGRyaWxsIGRvd24gYW5kIGV4YW1pbmUgaXRzIGRlcGVuZGVuY2llcy4gS25vd2luZyBpdHMgcmVsYXRpb25zaGlwIHdpdGggb3RoZXIgZmVhdHVyZXMgYW5kIG1vZHVsZXMgd2lsbCBwcm92aWRlIHRoZSBjcnVjaWFsIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY3kgdHJlZSB3aWxsIHBhaW50IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGBNUFRDUF9JUFY2YCBtaWdodCBjYXNjYWRlIHRocm91Z2hvdXQgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBzeXN0ZW0ncyBvdmVyYWxsIGZ1bmN0aW9uYWxpdHkuIEl0J3MgdGltZSB0byBtYXAgb3V0IHRoZSBuZXR3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDkyMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE4OjU0OjExLjUwNDkyMDg0MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHRcXG4gICAyOlxcdGNvbmZpZyBNUFRDUFxcbiAgIDM6XFx0XFx0Ym9vbCBcXFwiTVBUQ1A6IE11bHRpcGF0aCBUQ1BcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA1OlxcdFxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbiAgIDY6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XFxuICAgNzpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBNdWx0aXBhdGggVENQIChNUFRDUCkgY29ubmVjdGlvbnMgc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIG92ZXIgbXVsdGlwbGVcXG4gIDEwOlxcdFxcdCAgc3ViZmxvd3MgaW4gb3JkZXIgdG8gdXRpbGl6ZSBtdWx0aXBsZSBuZXR3b3JrIHBhdGhzLiBFYWNoIHN1YmZsb3dcXG4gIDExOlxcdFxcdCAgdXNlcyB0aGUgVENQIHByb3RvY29sLCBhbmQgVENQIG9wdGlvbnMgY2FycnkgaGVhZGVyIGluZm9ybWF0aW9uIGZvclxcbiAgMTI6XFx0XFx0ICBNUFRDUC5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0aWYgTVBUQ1BcXG4gIDE1OlxcdFxcbiAgMTY6XFx0Y29uZmlnIElORVRfTVBUQ1BfRElBR1xcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcXG4gIDE4OlxcdFxcdGRlZl90cmlzdGF0ZSBJTkVUX0RJQUdcXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIE1QVENQX0lQVjZcXG4gIDIxOlxcdFxcdGJvb2wgXFxcIk1QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcXFwiXFxuICAyMjpcXHRcXHRkZXBlbmRzIG9uIElQVjY9eVxcbiAgMjM6XFx0XFx0ZGVmYXVsdCB5XFxuICAyNDpcXHRcXG4gIDI1OlxcdGNvbmZpZyBNUFRDUF9LVU5JVF9URVNUXFxuICAyNjpcXHRcXHR0cmlzdGF0ZSBcXFwiVGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICAyNzpcXHRcXHRkZXBlbmRzIG9uIEtVTklUXFxuICAyODpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgMjk6XFx0XFx0aGVscFxcbiAgMzA6XFx0XFx0ICBDdXJyZW50bHkgY292ZXJzIHRoZSBNUFRDUCBjcnlwdG8gYW5kIHRva2VuIGhlbHBlcnMuXFxuICAzMTpcXHRcXHQgIE9ubHkgdXNlZnVsIGZvciBrZXJuZWwgZGV2cyBydW5uaW5nIEtVbml0IHRlc3QgaGFybmVzcyBhbmQgYXJlIG5vdFxcbiAgMzI6XFx0XFx0ICBmb3IgaW5jbHVzaW9uIGludG8gYSBwcm9kdWN0aW9uIGJ1aWxkLlxcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwgcGxlYXNlIHJlZmVyXFxuICAzNTpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uIGluIERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0Ly5cXG4gIDM2OlxcdFxcbiAgMzc6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMzg6XFx0XFxuICAzOTpcXHRlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxODo1NDoxMS41MDUwMzQ3MDFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzc1ODgxMjIzMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgTVBUQ1AgU29ja2V0IE9wdGlvbnMgd2l0aCBJUHY2IFRDTEFTUyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgTVBUQ1BfSVBWNmAgcmVsaWVzIG9uIGBJUFY2PXlgIGFuZCBpcywgYnkgZGVmYXVsdCwgZW5hYmxlZC4gTWFrZXMgc2Vuc2UuIFNvLCBpbiB0ZXJtcyBvZiBlbmFibGluZyBjb25maWd1cmF0aW9ucyBmb3IgZnV6emluZywgSSdtIHRoaW5raW5nIEkndmUgZ290IGEgY291cGxlIG9mIHNvbGlkIG9wdGlvbnM6IGVpdGhlciBJIGNhbiBpbmNsdWRlIGBNUFRDUGAgYW5kIGBJUFY2YCwgb3IgSSBjYW4gYmUgYSBiaXQgbW9yZSBleHBsaWNpdCBhbmQgZW5hYmxlIGBNUFRDUGAsIGBJUFY2YCwgKmFuZCogYE1QVENQX0lQVjZgLiBFbmFibGluZyBgTVBUQ1BfSVBWNmAgaXMgdGVjaG5pY2FsbHkgcmVkdW5kYW50LCBzaW5jZSBpdCB3aWxsIGJlIGVuYWJsZWQgd2l0aCBgSVBWNj15YCwgYnV0IGl0IGRvZXNuJ3QgaHVydC5cblxuVGhlIGNvZGUncyBnb3QgdGhpcyBgI2lmICFJU19FTkFCTEVEKENPTkZJR19JUFY2KWAgaW4gYG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzc2AsIGFuZCB0aGF0IGNvbmZpcm1zIHRoYXQgYElQVjZgIGlzIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gaXRlbSBoZXJlLlxuXG5TbywgaGVyZSdzIG15IHN1bW1hcml6ZWQgYXBwcm9hY2g6XG5cbiogICAqKldvcnRoRnV6emluZzoqKiBBYnNvbHV0ZWx5IVxuKiAgICoqRm9jdXMgU3ltYm9sczoqKiBJJ20gemVyb2luZyBpbiBvbjpcbiAgICAqICAgYG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzc2AgKFRoaXMgaXMgd2hlcmUgdGhlIG5ldyBjb2RlIGlzLCBhbmQgaXMgbXkgbWFpbiBmb2N1cylcbiAgICAqICAgYG1wdGNwX3NldHNvY2tvcHRfdjZgIChJdCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byBzZXR0aW5nIG9wdGlvbnMsIHNvIGl0IGlzIHJlcXVpcmVkKVxuICAgICogICBgbXB0Y3BfZ2V0c29ja29wdF92NmAgKE5lZWQgdG8gbWFrZSBzdXJlIGdldHNvY2tvcHQgd29ya3MgdG9vLCBhbmQgaXMgcmVsZXZhbnQgdG8gdGhlIG5ldyBjb2RlKS5cbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmU6XG4gICAgKiAgIGBNUFRDUGBcbiAgICAqICAgYElQVjZgXG4gICAgKiAgIGBNUFRDUF9JUFY2YCAoT3B0aW9uYWwsIGJ1dCBnb29kIHRvIGluY2x1ZGUsIGV2ZW4gaWYgcmVkdW5kYW50LilcblxuKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igc2V0dGluZyBhbmQgZ2V0dGluZyB0aGUgYElQVjZfVENMQVNTYCBzb2NrZXQgb3B0aW9uIHNwZWNpZmljYWxseSBmb3IgTVBUQ1Agc29ja2V0cy4gVGhpcyBtZWFucyBuZXcgY29kZSBwYXRocyBhcmUgbm93IHJlYWNoYWJsZSBpbiB0aGUgTVBUQ1Agc29ja2V0IG9wdGlvbnMgbG9naWMuIEkgbmVlZCB0byBmdXp6IHRoZXNlIHRvIHRob3JvdWdobHkgdGVzdCBob3cgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eSBpbnRlcmFjdHMgd2l0aCB2YXJpb3VzIGlucHV0cywgYW5kIGFsbCB0aGUgc3RhdGVzIHRoYXQgYXJlIHBvc3NpYmxlIHdpdGggc3ViZmxvd3MuIE1ha2luZyBzdXJlIGV2ZXJ5dGhpbmcgaXMgaGFuZGxlZCBjb3JyZWN0bHkgaXMga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYwNywiT3V0cHV0VG9rZW5zIjoxNDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxODo1NToyOS4wOTMxNjA4ODFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzY4NTIxNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1QVENQXCIsXG4gICAgXCJJUFY2XCIsXG4gICAgXCJNUFRDUF9JUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzXCIsXG4gICAgXCJtcHRjcF9zZXRzb2Nrb3B0X3Y2XCIsXG4gICAgXCJtcHRjcF9nZXRzb2Nrb3B0X3Y2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBzZXR0aW5nIGFuZCBnZXR0aW5nIHRoZSBJUFY2X1RDTEFTUyBzb2NrZXQgb3B0aW9uIG9uIE1QVENQIHNvY2tldHMuIFRoaXMgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGNvZGUgaW4gdGhlIE1QVENQIHNvY2tldCBvcHRpb25zIGhhbmRsaW5nIGxvZ2ljLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgaGFuZGxlcyB2YXJpb3VzIGlucHV0cyBhbmQgc3ViZmxvdyBzdGF0ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVBUQ1BcIixcbiAgICBcIklQVjZcIixcbiAgICBcIk1QVENQX0lQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3NcIixcbiAgICBcIm1wdGNwX3NldHNvY2tvcHRfdjZcIixcbiAgICBcIm1wdGNwX2dldHNvY2tvcHRfdjZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHNldHRpbmcgYW5kIGdldHRpbmcgdGhlIElQVjZfVENMQVNTIHNvY2tldCBvcHRpb24gb24gTVBUQ1Agc29ja2V0cy4gVGhpcyBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgY29kZSBpbiB0aGUgTVBUQ1Agc29ja2V0IG9wdGlvbnMgaGFuZGxpbmcgbG9naWMsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBoYW5kbGVzIHZhcmlvdXMgaW5wdXRzIGFuZCBzdWJmbG93IHN0YXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkff4t[1] Phase: Succeeded StartedAt: 2026-07-13 18:55:40 +0000 UTC FinishedAt: 2026-07-13 18:55:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkff4t[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-13 18:55:40 +0000 UTC FinishedAt: 2026-07-13 18:55:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkff4t[2] Phase: Succeeded StartedAt: 2026-07-13 18:55:40 +0000 UTC FinishedAt: 2026-07-13 23:22:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkff4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"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":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"series_id":"45cfca61-f372-4c92-b8fa-022b797bbd55","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-07-13 18:55:40 +0000 UTC FinishedAt: 2026-07-13 23:22:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"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":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"series_id":"45cfca61-f372-4c92-b8fa-022b797bbd55","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-workflowkff4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"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":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"series_id":"45cfca61-f372-4c92-b8fa-022b797bbd55","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-07-13 18:55:40 +0000 UTC FinishedAt: 2026-07-13 18:56:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkff4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"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":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"series_id":"45cfca61-f372-4c92-b8fa-022b797bbd55","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-07-13 18:55:40 +0000 UTC FinishedAt: 2026-07-13 18:55:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"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-workflowkff4t/series-workflowkff4t-convert-artifact-3972896350/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkff4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"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":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"series_id":"45cfca61-f372-4c92-b8fa-022b797bbd55","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-07-13 18:56:02 +0000 UTC FinishedAt: 2026-07-13 19:28:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkff4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"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":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"series_id":"45cfca61-f372-4c92-b8fa-022b797bbd55","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-07-13 18:56:02 +0000 UTC FinishedAt: 2026-07-13 19:28:45 +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:*3084eff2-4e0c-4ba2-960f-6f5cc7bc7ea5,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-workflowkff4t/series-workflowkff4t-convert-artifact-3972896350/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": "65f45487-3680-447c-92a6-f40339cc7c2e", "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-workflowkff4t/series-workflowkff4t-build-action-3259610948/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkff4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"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":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"series_id":"45cfca61-f372-4c92-b8fa-022b797bbd55","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-07-13 18:56:02 +0000 UTC FinishedAt: 2026-07-13 19:28:33 +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:*3084eff2-4e0c-4ba2-960f-6f5cc7bc7ea5,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-workflowkff4t/series-workflowkff4t-convert-artifact-3972896350/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": "65f45487-3680-447c-92a6-f40339cc7c2e", "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-workflowkff4t/series-workflowkff4t-build-action-3259610948/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkff4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"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":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"series_id":"45cfca61-f372-4c92-b8fa-022b797bbd55","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-07-13 19:28:45 +0000 UTC FinishedAt: 2026-07-13 19:28:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkff4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"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":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"series_id":"45cfca61-f372-4c92-b8fa-022b797bbd55","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-07-13 19:28:45 +0000 UTC FinishedAt: 2026-07-13 19:28:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkff4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"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":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"series_id":"45cfca61-f372-4c92-b8fa-022b797bbd55","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-07-13 19:28:45 +0000 UTC FinishedAt: 2026-07-13 19:28:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkff4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"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":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"series_id":"45cfca61-f372-4c92-b8fa-022b797bbd55","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-07-13 19:28:45 +0000 UTC FinishedAt: 2026-07-13 19:28:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"series_id":"45cfca61-f372-4c92-b8fa-022b797bbd55","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-workflowkff4t/series-workflowkff4t-convert-artifact-878450449/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkff4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"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":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"series_id":"45cfca61-f372-4c92-b8fa-022b797bbd55","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-07-13 19:28:56 +0000 UTC FinishedAt: 2026-07-13 19:31:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkff4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"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":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"series_id":"45cfca61-f372-4c92-b8fa-022b797bbd55","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-07-13 19:28:56 +0000 UTC FinishedAt: 2026-07-13 19:30:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*65f45487-3680-447c-92a6-f40339cc7c2e,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-workflowkff4t/series-workflowkff4t-build-action-3259610948/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-workflowkff4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"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":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"series_id":"45cfca61-f372-4c92-b8fa-022b797bbd55","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-07-13 19:31:09 +0000 UTC FinishedAt: 2026-07-13 19:31:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkff4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"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":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"series_id":"45cfca61-f372-4c92-b8fa-022b797bbd55","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-07-13 19:31:09 +0000 UTC FinishedAt: 2026-07-13 19:31:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkff4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"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":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"series_id":"45cfca61-f372-4c92-b8fa-022b797bbd55","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-07-13 19:31:09 +0000 UTC FinishedAt: 2026-07-13 20:15:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkff4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"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":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"series_id":"45cfca61-f372-4c92-b8fa-022b797bbd55","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-07-13 19:31:09 +0000 UTC FinishedAt: 2026-07-13 20:15:34 +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:*3084eff2-4e0c-4ba2-960f-6f5cc7bc7ea5,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-workflowkff4t/series-workflowkff4t-convert-artifact-878450449/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": "cd51eb37-5875-42b9-8316-ba68d6d277d2", "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-workflowkff4t/series-workflowkff4t-build-action-3933406941/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkff4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"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":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"series_id":"45cfca61-f372-4c92-b8fa-022b797bbd55","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-07-13 19:31:09 +0000 UTC FinishedAt: 2026-07-13 20:15:18 +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:*3084eff2-4e0c-4ba2-960f-6f5cc7bc7ea5,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-workflowkff4t/series-workflowkff4t-convert-artifact-878450449/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": "cd51eb37-5875-42b9-8316-ba68d6d277d2", "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-workflowkff4t/series-workflowkff4t-build-action-3933406941/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkff4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"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":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"series_id":"45cfca61-f372-4c92-b8fa-022b797bbd55","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-07-13 20:15:34 +0000 UTC FinishedAt: 2026-07-13 20:15:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkff4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"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":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"series_id":"45cfca61-f372-4c92-b8fa-022b797bbd55","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-07-13 20:15:34 +0000 UTC FinishedAt: 2026-07-13 20:15:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkff4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"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":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"series_id":"45cfca61-f372-4c92-b8fa-022b797bbd55","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-07-13 20:15:34 +0000 UTC FinishedAt: 2026-07-13 20:18:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkff4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"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":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"series_id":"45cfca61-f372-4c92-b8fa-022b797bbd55","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-07-13 20:15:34 +0000 UTC FinishedAt: 2026-07-13 20:17:39 +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:*cd51eb37-5875-42b9-8316-ba68d6d277d2,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-workflowkff4t/series-workflowkff4t-build-action-3933406941/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-workflowkff4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"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":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"series_id":"45cfca61-f372-4c92-b8fa-022b797bbd55","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-07-13 20:18:45 +0000 UTC FinishedAt: 2026-07-13 20:18:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkff4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"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":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"series_id":"45cfca61-f372-4c92-b8fa-022b797bbd55","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-07-13 20:18:46 +0000 UTC FinishedAt: 2026-07-13 23:22:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkff4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"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":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"series_id":"45cfca61-f372-4c92-b8fa-022b797bbd55","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-07-13 20:18:46 +0000 UTC FinishedAt: 2026-07-13 20:18:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkff4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"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":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"series_id":"45cfca61-f372-4c92-b8fa-022b797bbd55","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-07-13 20:18:47 +0000 UTC FinishedAt: 2026-07-13 23:22:40 +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":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"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:*65f45487-3680-447c-92a6-f40339cc7c2e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cd51eb37-5875-42b9-8316-ba68d6d277d2,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-workflowkff4t/series-workflowkff4t-build-action-3259610948/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-workflowkff4t/series-workflowkff4t-build-action-3933406941/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowkff4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"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":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"series_id":"45cfca61-f372-4c92-b8fa-022b797bbd55","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-07-13 20:18:48 +0000 UTC FinishedAt: 2026-07-13 20:21:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkff4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"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":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"series_id":"45cfca61-f372-4c92-b8fa-022b797bbd55","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-07-13 20:18:48 +0000 UTC FinishedAt: 2026-07-13 20:19:43 +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":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"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-workflowkff4t/series-workflowkff4t-convert-artifact-2092931398/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkff4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"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":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"series_id":"45cfca61-f372-4c92-b8fa-022b797bbd55","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-07-13 20:18:48 +0000 UTC FinishedAt: 2026-07-13 20:18:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkff4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"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":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"series_id":"45cfca61-f372-4c92-b8fa-022b797bbd55","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-07-13 20:21:16 +0000 UTC FinishedAt: 2026-07-13 23:22:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkff4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"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":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","IPV6","MPTCP_IPV6"],"series_id":"45cfca61-f372-4c92-b8fa-022b797bbd55","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-07-13 20:21:16 +0000 UTC FinishedAt: 2026-07-13 23:22:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*65f45487-3680-447c-92a6-f40339cc7c2e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cd51eb37-5875-42b9-8316-ba68d6d277d2,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-workflowkff4t/series-workflowkff4t-build-action-3259610948/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-workflowkff4t/series-workflowkff4t-build-action-3933406941/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-workflowkff4t/series-workflowkff4t-convert-artifact-2092931398/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,}