Name: series-workflowmf6vd Phase: Succeeded StartedAt: 2026-07-15 17:55:21 +0000 UTC FinishedAt: 2026-07-15 22:20:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmf6vd[0] Phase: Succeeded StartedAt: 2026-07-15 17:55:21 +0000 UTC FinishedAt: 2026-07-15 18:12:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmf6vd[0].run-triage Phase: Succeeded StartedAt: 2026-07-15 17:55:21 +0000 UTC FinishedAt: 2026-07-15 18:12:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "58717b2a1365d06c8c64b72aa948541b53fe31eb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_THROTTLING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "58717b2a1365d06c8c64b72aa948541b53fe31eb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_THROTTLING" ], "series_id": "c4fbc5f2-52af-432a-a2a7-391c1e4c3894" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "tg_set_conf_u64", "tg_set_conf_uint", "tg_set_limit", "__blk_throtl_bio" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDE4OjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfVEhST1RUTElORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RnX3NldF9jb25mX3U2NCYjMzQ7LAogICAgJiMzNDt0Z19zZXRfY29uZl91aW50JiMzNDssCiAgICAmIzM0O3RnX3NldF9saW1pdCYjMzQ7LAogICAgJiMzNDtfX2Jsa190aHJvdGxfYmlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZGl2aWRlLWJ5LXplcm8gYnVnIGluIHRoZSBibG9jayBsYXllciYjMzk7cyBiaW8gdGhyb3R0bGluZyBsb2dpYyAoYmxrLXRocm90dGxlKSBhbmQgYW4gaW50ZWdlciB0cnVuY2F0aW9uIGlzc3VlIHdoZW4gc2V0dGluZyBjZ3JvdXAgbGltaXRzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHJlYWNoYWJsZSB2aWEgY2dyb3VwZnMgd3JpdGVzIGFuZCBibG9jayBJTyBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDE4OjExPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDU5MGFkZjU4YTI0YzZmNjJjMjE3ODM4NGNhMjg3NTI2ZmM4N2JjM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDE1IDE4OjExOjAxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay10aHJvdHRsZS5jIGIvYmxvY2svYmxrLXRocm90dGxlLmNcbmluZGV4IGZmYzNiNzAwNjVkNGIxLi45OTAwNDQzYjBhZDUyNiAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay10aHJvdHRsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstdGhyb3R0bGUuY1xuQEAgLTg4Myw3ICYjNDM7ODgzLDEyIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHRnX2Rpc3BhdGNoX2lvcHNfdGltZShzdHJ1Y3QgdGhyb3RsX2dycCAqdGcsIHN0cnVjdCBiaW8gKmJpXG4gXHR1MzIgaW9wc19saW1pdCA9IHRnX2lvcHNfbGltaXQodGcsIHJ3KTtcbiBcdHVuc2lnbmVkIGxvbmcgaW9wc193YWl0O1xuIFxuLVx0aWYgKGlvcHNfbGltaXQgPT0gVUlOVF9NQVggfHwgdGctXHUwMDNlZmxhZ3MgXHUwMDI2IFRIUk9UTF9UR19DQU5DRUxJTkcpXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBpb3BzX2xpbWl0ID09IDAgaXMgbm90IGEgdmFsaWQgbGltaXQuIFRyZWF0IGl0IGFzIHVubGltaXRlZCBzbyB3ZVxuJiM0MztcdCAqIG5ldmVyIHJlYWNoIHRoZSBIWiAvIGlvcHNfbGltaXQgZGl2aWRlIGluIHRnX3dpdGhpbl9pb3BzX2xpbWl0KCkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGlvcHNfbGltaXQgPT0gVUlOVF9NQVggfHwgaW9wc19saW1pdCA9PSAwIHx8XG4mIzQzO1x0ICAgIHRnLVx1MDAzZWZsYWdzIFx1MDAyNiBUSFJPVExfVEdfQ0FOQ0VMSU5HKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdHRnX3VwZGF0ZV9zbGljZSh0ZywgcncpO1xuQEAgLTEzODMsMTAgJiM0MzsxMzg4LDEyIEBAIHN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbiBcdHRnID0gYmxrZ190b190ZyhjdHguYmxrZyk7XG4gXHR0Z191cGRhdGVfY2FycnlvdmVyKHRnKTtcbiBcbiYjNDM7XHR2b2lkICpmaWVsZCA9ICh2b2lkICopdGcgJiM0Mzsgb2ZfY2Z0KG9mKS1cdTAwM2Vwcml2YXRlO1xuJiM0MztcbiBcdGlmIChpc191NjQpXG4tXHRcdCoodTY0ICopKCh2b2lkICopdGcgJiM0Mzsgb2ZfY2Z0KG9mKS1cdTAwM2Vwcml2YXRlKSA9IHY7XG4mIzQzO1x0XHQqKHU2NCAqKWZpZWxkID0gdjtcbiBcdGVsc2Vcbi1cdFx0Kih1bnNpZ25lZCBpbnQgKikoKHZvaWQgKil0ZyAmIzQzOyBvZl9jZnQob2YpLVx1MDAzZXByaXZhdGUpID0gdjtcbiYjNDM7XHRcdCoodW5zaWduZWQgaW50ICopZmllbGQgPSBtaW4odiwgKHU2NClVSU5UX01BWCk7XG4gXG4gXHR0Z19jb25mX3VwZGF0ZWQodGcsIGZhbHNlKTtcbiBcdHJldCA9IDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMTg6MTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9USFJPVFRMSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGdfc2V0X2NvbmZfdTY0JiMzNDssCiAgICAmIzM0O3RnX3NldF9jb25mX3VpbnQmIzM0OywKICAgICYjMzQ7dGdfc2V0X2xpbWl0JiMzNDssCiAgICAmIzM0O19fYmxrX3Rocm90bF9iaW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBkaXZpZGUtYnktemVybyBidWcgaW4gdGhlIGJsb2NrIGxheWVyJiMzOTtzIGJpbyB0aHJvdHRsaW5nIGxvZ2ljIChibGstdGhyb3R0bGUpIGFuZCBhbiBpbnRlZ2VyIHRydW5jYXRpb24gaXNzdWUgd2hlbiBzZXR0aW5nIGNncm91cCBsaW1pdHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgcmVhY2hhYmxlIHZpYSBjZ3JvdXBmcyB3cml0ZXMgYW5kIGJsb2NrIElPIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDA1OTBhZGY1OGEyNGM2ZjYyYzIxNzgzODRjYTI4NzUyNmZjODdiYzMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAxNSAxODoxMTowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay10aHJvdHRsZS5jIGIvYmxvY2svYmxrLXRocm90dGxlLmMKaW5kZXggZmZjM2I3MDA2NWQ0YjEuLjk5MDA0NDNiMGFkNTI2IDEwMDY0NAotLS0gYS9ibG9jay9ibGstdGhyb3R0bGUuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstdGhyb3R0bGUuYwpAQCAtODgzLDcgJiM0Mzs4ODMsMTIgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgdGdfZGlzcGF0Y2hfaW9wc190aW1lKHN0cnVjdCB0aHJvdGxfZ3JwICp0Zywgc3RydWN0IGJpbyAqYmkKIAl1MzIgaW9wc19saW1pdCA9IHRnX2lvcHNfbGltaXQodGcsIHJ3KTsKIAl1bnNpZ25lZCBsb25nIGlvcHNfd2FpdDsKIAotCWlmIChpb3BzX2xpbWl0ID09IFVJTlRfTUFYIHx8IHRnLSZndDtmbGFncyAmYW1wOyBUSFJPVExfVEdfQ0FOQ0VMSU5HKQomIzQzOwkvKgomIzQzOwkgKiBpb3BzX2xpbWl0ID09IDAgaXMgbm90IGEgdmFsaWQgbGltaXQuIFRyZWF0IGl0IGFzIHVubGltaXRlZCBzbyB3ZQomIzQzOwkgKiBuZXZlciByZWFjaCB0aGUgSFogLyBpb3BzX2xpbWl0IGRpdmlkZSBpbiB0Z193aXRoaW5faW9wc19saW1pdCgpLgomIzQzOwkgKi8KJiM0MzsJaWYgKGlvcHNfbGltaXQgPT0gVUlOVF9NQVggfHwgaW9wc19saW1pdCA9PSAwIHx8CiYjNDM7CSAgICB0Zy0mZ3Q7ZmxhZ3MgJmFtcDsgVEhST1RMX1RHX0NBTkNFTElORykKIAkJcmV0dXJuIDA7CiAKIAl0Z191cGRhdGVfc2xpY2UodGcsIHJ3KTsKQEAgLTEzODMsMTAgJiM0MzsxMzg4LDEyIEBAIHN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwKIAl0ZyA9IGJsa2dfdG9fdGcoY3R4LmJsa2cpOwogCXRnX3VwZGF0ZV9jYXJyeW92ZXIodGcpOwogCiYjNDM7CXZvaWQgKmZpZWxkID0gKHZvaWQgKil0ZyAmIzQzOyBvZl9jZnQob2YpLSZndDtwcml2YXRlOwomIzQzOwogCWlmIChpc191NjQpCi0JCSoodTY0ICopKCh2b2lkICopdGcgJiM0Mzsgb2ZfY2Z0KG9mKS0mZ3Q7cHJpdmF0ZSkgPSB2OwomIzQzOwkJKih1NjQgKilmaWVsZCA9IHY7CiAJZWxzZQotCQkqKHVuc2lnbmVkIGludCAqKSgodm9pZCAqKXRnICYjNDM7IG9mX2NmdChvZiktJmd0O3ByaXZhdGUpID0gdjsKJiM0MzsJCSoodW5zaWduZWQgaW50ICopZmllbGQgPSBtaW4odiwgKHU2NClVSU5UX01BWCk7CiAKIAl0Z19jb25mX3VwZGF0ZWQodGcsIGZhbHNlKTsKIAlyZXQgPSAwOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAxODoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTMzCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCbGstVGhyb3R0bGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIGBibG9jay9ibGstdGhyb3R0bGUuY2AuIEl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2ggYXQgZmlyc3QgZ2xhbmNlLiBJdCYjMzk7cyBtb2RpZnlpbmcgYSBjb3VwbGUgb2YgZnVuY3Rpb25zOiBgdGdfZGlzcGF0Y2hfaW9wc190aW1lYCBhbmQgYHRnX3NldF9jb25mYC4gVGhlIGtleSB0aGluZyBoZXJlIGlzIHRoZSBoYW5kbGluZyBvZiB0aGUgSU9QUyBsaW1pdC4gVGhlIHBhdGNoIHN1Z2dlc3RzIHRoYXQgaWYgYGlvcHNfbGltaXRgIGlzIHNldCB0byB6ZXJvLCBpdCBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgZWZmZWN0aXZlbHkgdW5saW1pdGVkLiBUaGF0JiMzOTtzIGEgY29tbW9uIHBhdHRlcm4sIGFuZCBtYWtlcyBzZW5zZSAtIHplcm8gaXMgb2Z0ZW4gdXNlZCBhcyBhIHNwZWNpYWwgdmFsdWUgdG8gZGlzYWJsZSBhIGZlYXR1cmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBoYW5kbGVkIGNvcnJlY3RseSBhY3Jvc3MgdGhlIGJvYXJkLCB0aG91Z2gsIGVzcGVjaWFsbHkgaW4gZWRnZSBjYXNlcy4KClRoZW4sIHRoZSBzZWNvbmQgcGFydCBvZiB0aGUgcGF0Y2ggYWRkcmVzc2VzIGB0Z19zZXRfY29uZmAuIEl0IGFwcGVhcnMgdG8gYmUgYWRkaW5nIGEgY2FwIHRvIHRoZSB2YWx1ZSBgdmAgYmVmb3JlIGl0JiMzOTtzIGFzc2lnbmVkIHRvIGFuIGB1bnNpZ25lZCBpbnRgIGZpZWxkLiBTcGVjaWZpY2FsbHksIHRoZSBjYXAgaXMgYFVJTlRfTUFYYC4gVGhpcyBpcyBpbXBvcnRhbnQsIHByZXZlbnRpbmcgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzIGR1cmluZyBjb25maWd1cmF0aW9uLCB3aGljaCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiBJdCYjMzk7cyBnb29kIHByYWN0aWNlIHRvIGVuc3VyZSB0aGUgc2FuaXR5IG9mIHRoZSBpbnB1dCBkYXRhLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHVuc2lnbmVkIGludGVnZXIgdHlwZXMgYW5kIHBvdGVudGlhbCB1c2VyIGNvbmZpZ3VyYXRpb24uIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBgdmAgYW5kIHRoaXMgYXNzaWdubWVudC4gSSB3YW50IHRvIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXNlIGd1YXJkcmFpbHMgYXJlIHN1ZmZpY2llbnQgZm9yIHRoZSBraW5kcyBvZiB2YWx1ZXMgd2UgZXhwZWN0IGFuZCB0aGUgcmFuZ2Ugb2YgdmFsdWVzIHRoZSB1bnNpZ25lZCBpbnRlZ2VyIGNhbiBoYW5kbGUuIEkgc2hvdWxkIHByb2JhYmx5IGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIG5vdyB0byBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbi4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAxODoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Z19kaXNwYXRjaF9pb3BzX3RpbWUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLXRocm90dGxlLmM9ODYxPXN0YXRpYyB1bnNpZ25lZCBsb25nIHRnX2Rpc3BhdGNoX2Jwc190aW1lKHN0cnVjdCB0aHJvdGxfZ3JwICp0Zywgc3RydWN0IGJpbyAqYmlvKVxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTg3OS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jOjg4MDpzdGF0aWMgdW5zaWduZWQgbG9uZyB0Z19kaXNwYXRjaF9pb3BzX3RpbWUoc3RydWN0IHRocm90bF9ncnAgKnRnLCBzdHJ1Y3QgYmlvICpiaW8pXG5ibG9jay9ibGstdGhyb3R0bGUuYy04ODEte1xuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jPTkwNT1zdGF0aWMgdW5zaWduZWQgbG9uZyB0Z19kaXNwYXRjaF90aW1lKHN0cnVjdCB0aHJvdGxfZ3JwICp0Zywgc3RydWN0IGJpbyAqYmlvKVxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTkyOC1cbmJsb2NrL2Jsay10aHJvdHRsZS5jOjkyOTpcdHJldHVybiB0Z19kaXNwYXRjaF9pb3BzX3RpbWUodGcsIGJpbyk7XG5ibG9jay9ibGstdGhyb3R0bGUuYy05MzAtfVxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jPTE3NzE9c3RhdGljIGJvb2wgdGdfd2l0aGluX2xpbWl0KHN0cnVjdCB0aHJvdGxfZ3JwICp0Zywgc3RydWN0IGJpbyAqYmlvLCBib29sIHJ3KVxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE3ODAtXHRcdHJldHVybiBzcS1cdTAwM2Vucl9xdWV1ZWRfaW9wc1tyd10gPT0gMCBcdTAwMjZcdTAwMjZcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE3ODE6XHRcdFx0XHR0Z19kaXNwYXRjaF9pb3BzX3RpbWUodGcsIGJpbykgPT0gMDtcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE3ODItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMTg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGdfc2V0X2NvbmYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLXRocm90dGxlLmM9MTMyMz1zdGF0aWMgaW50IGJsa190aHJvdGxfaW5pdChzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xMzU2LVxuYmxvY2svYmxrLXRocm90dGxlLmM6MTM1NzpzdGF0aWMgc3NpemVfdCB0Z19zZXRfY29uZihzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xMzU4LVx0XHRcdCAgIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZiwgYm9vbCBpc191NjQpXG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQwOC1cbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0MDk6c3RhdGljIHNzaXplX3QgdGdfc2V0X2NvbmZfdTY0KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MTAtXHRcdFx0ICAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MTEte1xuYmxvY2svYmxrLXRocm90dGxlLmM6MTQxMjpcdHJldHVybiB0Z19zZXRfY29uZihvZiwgYnVmLCBuYnl0ZXMsIG9mZiwgdHJ1ZSk7XG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDEzLX1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MTQtXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDE1OnN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mX3VpbnQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQxNi1cdFx0XHRcdGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MTcte1xuYmxvY2svYmxrLXRocm90dGxlLmM6MTQxODpcdHJldHVybiB0Z19zZXRfY29uZihvZiwgYnVmLCBuYnl0ZXMsIG9mZiwgZmFsc2UpO1xuYmxvY2svYmxrLXRocm90dGxlLmMtMTQxOS19XG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmM9MTQ0Nz1zdGF0aWMgc3RydWN0IGNmdHlwZSB0aHJvdGxfbGVnYWN5X2ZpbGVzW10gPSB7XG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ1MS1cdFx0LnNlcV9zaG93ID0gdGdfcHJpbnRfY29uZl91NjQsXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDUyOlx0XHQud3JpdGUgPSB0Z19zZXRfY29uZl91NjQsXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDUzLVx0fSxcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDU3LVx0XHQuc2VxX3Nob3cgPSB0Z19wcmludF9jb25mX3U2NCxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0NTg6XHRcdC53cml0ZSA9IHRnX3NldF9jb25mX3U2NCxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NTktXHR9LFxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NjMtXHRcdC5zZXFfc2hvdyA9IHRnX3ByaW50X2NvbmZfdWludCxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0NjQ6XHRcdC53cml0ZSA9IHRnX3NldF9jb25mX3VpbnQsXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDY1LVx0fSxcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDY5LVx0XHQuc2VxX3Nob3cgPSB0Z19wcmludF9jb25mX3VpbnQsXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDcwOlx0XHQud3JpdGUgPSB0Z19zZXRfY29uZl91aW50LFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ3MS1cdH0sXG4tLVxuZHJpdmVycy9ncHUvZHJtL3N0aS9zdGlfY3J0Yy5jPTQ5PXN0aV9jcnRjX21vZGVfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3N0aS9zdGlfY3J0Yy5jLTg1LVxuZHJpdmVycy9ncHUvZHJtL3N0aS9zdGlfY3J0Yy5jOjg2Olx0c3RpX3Z0Z19zZXRfY29uZmlnKGNvbXBvLVx1MDAzZXZ0Z1ttaXhlci1cdTAwM2VpZF0sIFx1MDAyNmNydGMtXHUwMDNlbW9kZSk7XG5kcml2ZXJzL2dwdS9kcm0vc3RpL3N0aV9jcnRjLmMtODctXG4tLVxuZHJpdmVycy9ncHUvZHJtL3N0aS9zdGlfdnRnLmM9Mjg5PXN0YXRpYyB2b2lkIHZ0Z19lbmFibGVfaXJxKHN0cnVjdCBzdGlfdnRnICp2dGcpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3N0aS9zdGlfdnRnLmMtMjk2LVxuZHJpdmVycy9ncHUvZHJtL3N0aS9zdGlfdnRnLmM6Mjk3OnZvaWQgc3RpX3Z0Z19zZXRfY29uZmlnKHN0cnVjdCBzdGlfdnRnICp2dGcsXG5kcml2ZXJzL2dwdS9kcm0vc3RpL3N0aV92dGcuYy0yOTgtXHRcdGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9zdGkvc3RpX3Z0Zy5oPTIzPXN0cnVjdCBzdGlfdnRnICpvZl92dGdfZmluZChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTtcbmRyaXZlcnMvZ3B1L2RybS9zdGkvc3RpX3Z0Zy5oOjI0OnZvaWQgc3RpX3Z0Z19zZXRfY29uZmlnKHN0cnVjdCBzdGlfdnRnICp2dGcsXG5kcml2ZXJzL2dwdS9kcm0vc3RpL3N0aV92dGcuaC0yNS1cdFx0Y29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDE4OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMzIKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQmxrLVRocm90dGxlIEJ1ZyBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtBaCwgYSBjbGFzc2ljIGRpdmlkZS1ieS16ZXJvIHZ1bG5lcmFiaWxpdHkhJiMzNDsgVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gc2VlbXMgdG8gYmUgaW4gYGJsb2NrL2Jsay10aHJvdHRsZS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGlvcHNfbGltaXRgIHZhcmlhYmxlLiBJdCBhcHBlYXJzIHRoZXJlIHdhcyBhIHNjZW5hcmlvIHdoZXJlIHRoaXMgY291bGQgYmUgaW5pdGlhbGl6ZWQgdG8gemVybywgd2hpY2ggdGhlbiBsZWQgdG8gYSBuYXN0eSBkaXZpZGUtYnktemVybyBlcnJvciB3aXRoaW4gdGhlIGB0Z193aXRoaW5faW9wc19saW1pdCgpYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyBhIHRleHRib29rIGV4YW1wbGUgb2YgYSBwcmV2ZW50YWJsZSBjb2RpbmcgZXJyb3IgdGhhdCBuZWVkcyB0byBiZSBhZGRyZXNzZWQgaW1tZWRpYXRlbHkuCgpUaGUgcGF0Y2ggc2VlbXMgdG8gdGFrZSBhIHR3by1wcm9uZ2VkIGFwcHJvYWNoLiBGaXJzdCwgaXQgZGlyZWN0bHkgZml4ZXMgdGhlIGBpb3BzX2xpbWl0YCBpc3N1ZSB0byBwcmV2ZW50IHRoZSBkaXZpc2lvbiBieSB6ZXJvLiBTZWNvbmRseSwgSSYjMzk7bSBub3RpbmcgdGhlIGNhcCBvbiBgdmAgdG8gYFVJTlRfTUFYYCB3aXRoaW4gYHRnX3NldF9jb25mYCB3aGVuIGFzc2lnbmluZyB0byBhbiBgdW5zaWduZWQgaW50YCBmaWVsZC4gQSB3aXNlIG1vdmUsIHByZXZlbnRpbmcgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzIGFuZCB1bmV4cGVjdGVkIGJlaGF2aW9yLiBUaGlzIGlzIGNydWNpYWwgZm9yIG1haW50YWluaW5nIGRhdGEgaW50ZWdyaXR5IHdoZW4gZGVhbGluZyB3aXRoIGxpbWl0cyBhbmQgdGhyb3R0bGluZyBjb25maWd1cmF0aW9ucy4KCkZyb20gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgYmxvY2sgbGF5ZXIsIHRoaXMgcGF0Y2ggaXMgdGFyZ2V0aW5nIGEgZnVuY3Rpb25hbCBhcmVhIHdpdGhpbiB0aGUgYmxrLXRocm90dGxlIGNncm91cCBzdWJzeXN0ZW0uIFRoZSBleHBvc3VyZSBpcyB2aWEgY2dyb3VwZnMgd3JpdGVzIHRvIGNvbnRyb2wgdGhlIHRocm90dGxpbmcgYmVoYXZpb3IsIGxpa2UgYGJsa2lvLnRocm90dGxlLnJlYWRfaW9wc19kZXZpY2VgIG9yIGBibGtpby50aHJvdHRsZS53cml0ZV9pb3BzX2RldmljZWAgYW5kIHNpbWlsYXIgZmlsZXMuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93IGJlY2F1c2UgaXQgdGVsbHMgbWUgd2hlcmUgdGhpcyBidWcgaXMgcmVhY2hhYmxlLgoKTm93LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBlbmFibGVkLiBJIHNob3VsZCBxdWlja2x5IGNoZWNrIGlmIGBDT05GSUdfQkxLX0RFVl9USFJPVFRMSU5HYCBpcyBzZXQsIHNpbmNlIHRoYXQgd291bGQgYmUgdGhlIGtleSBpbmRpY2F0b3IgdGhhdCB0aGlzIHBhcnRpY3VsYXIgY29kZSBwYXRoIGlzIGV2ZW4gYWN0aXZlIGluIGEgZ2l2ZW4ga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoaXMgd2lsbCBnaXZlIG1lIGZ1cnRoZXIgY29udGV4dCBhYm91dCB0aGUgaW1wYWN0IGFuZCBsaWtlbHkgc2V2ZXJpdHkgb2YgdGhpcyBmaXggaW4gdGhlIHJlYWwgd29ybGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMTg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QkxLX0RFVl9USFJPVFRMSU5HJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2Jsa2lvLWNvbnRyb2xsZXIucnN0PTI3PUVuYWJsZSB0aHJvdHRsaW5nIGluIGJsb2NrIGxheWVyOjpcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2Jsa2lvLWNvbnRyb2xsZXIucnN0LTI4LVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvYmxraW8tY29udHJvbGxlci5yc3Q6Mjk6XHRDT05GSUdfQkxLX0RFVl9USFJPVFRMSU5HPXlcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2Jsa2lvLWNvbnRyb2xsZXIucnN0LTMwLVxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2Jsa2lvLWNvbnRyb2xsZXIucnN0PTgxPVZhcmlvdXMgdXNlciB2aXNpYmxlIGNvbmZpZyBvcHRpb25zXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvYmxraW8tY29udHJvbGxlci5yc3QtOTAtXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9ibGtpby1jb250cm9sbGVyLnJzdDo5MTogIENPTkZJR19CTEtfREVWX1RIUk9UVExJTkdcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2Jsa2lvLWNvbnRyb2xsZXIucnN0LTkyLVx0ICBFbmFibGUgYmxvY2sgZGV2aWNlIHRocm90dGxpbmcgc3VwcG9ydCBpbiBibG9jayBsYXllci5cbi0tXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnPTc5PUNPTkZJR19CTEtfREVWX1pPTkVEPXlcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWc6ODA6Q09ORklHX0JMS19ERVZfVEhST1RUTElORz15XG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnLTgxLUNPTkZJR19CTEtfV0JUPXlcbi0tXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnPTk0PUNPTkZJR19CTEtfREVWX1pPTkVEPXlcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc6OTU6Q09ORklHX0JMS19ERVZfVEhST1RUTElORz15XG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnLTk2LUNPTkZJR19CTEtfV0JUPXlcbi0tXG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnPTUzPUNPTkZJR19NT0RVTEVfVU5MT0FEPXlcbmFyY2gvcmlzY3YvY29uZmlncy9kZWZjb25maWc6NTQ6Q09ORklHX0JMS19ERVZfVEhST1RUTElORz15XG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnLTU1LUNPTkZJR19TUEFSU0VNRU1fTUFOVUFMPXlcbi0tXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc9ODQ9Q09ORklHX01PRFVMRV9TSUdfU0hBMjU2PXlcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZzo4NTpDT05GSUdfQkxLX0RFVl9USFJPVFRMSU5HPXlcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZy04Ni1DT05GSUdfQkxLX1dCVD15XG4tLVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnPTc4PUNPTkZJR19NT0RVTEVfU0lHX1NIQTI1Nj15XG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6Nzk6Q09ORklHX0JMS19ERVZfVEhST1RUTElORz15XG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWctODAtQ09ORklHX0JMS19XQlQ9eVxuLS1cbmJsb2NrL0tjb25maWc9OTc9Y29uZmlnIEJMS19ERVZfWk9ORURcbi0tXG5ibG9jay9LY29uZmlnLTEwNS1cbmJsb2NrL0tjb25maWc6MTA2OmNvbmZpZyBCTEtfREVWX1RIUk9UVExJTkdcbmJsb2NrL0tjb25maWctMTA3LVx0Ym9vbCBcJiMzNDtCbG9jayBsYXllciBiaW8gdGhyb3R0bGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxuYmxvY2svTWFrZWZpbGU9MjE9b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfRkNfQVBQSUQpICYjNDM7PSBibGstY2dyb3VwLWZjLWFwcGlkLm9cbmJsb2NrL01ha2VmaWxlOjIyOm9iai0kKENPTkZJR19CTEtfREVWX1RIUk9UVExJTkcpXHQmIzQzOz0gYmxrLXRocm90dGxlLm9cbmJsb2NrL01ha2VmaWxlLTIzLW9iai0kKENPTkZJR19CTEtfQ0dST1VQX0lPUFJJTylcdCYjNDM7PSBibGstaW9wcmlvLm9cbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuaD0xNDA9c3RhdGljIGlubGluZSBzdHJ1Y3QgdGhyb3RsX2dycCAqYmxrZ190b190ZyhzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2cpXG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmgtMTQ3LSAqL1xuYmxvY2svYmxrLXRocm90dGxlLmg6MTQ4OiNpZm5kZWYgQ09ORklHX0JMS19ERVZfVEhST1RUTElOR1xuYmxvY2svYmxrLXRocm90dGxlLmgtMTQ5LXN0YXRpYyBpbmxpbmUgdm9pZCBibGtfdGhyb3RsX2V4aXQoc3RydWN0IGdlbmRpc2sgKmRpc2spIHsgfVxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5oPTE1MT1zdGF0aWMgaW5saW5lIHZvaWQgYmxrX3Rocm90bF9jYW5jZWxfYmlvcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykgeyB9XG5ibG9jay9ibGstdGhyb3R0bGUuaDoxNTI6I2Vsc2UgLyogQ09ORklHX0JMS19ERVZfVEhST1RUTElORyAqL1xuYmxvY2svYmxrLXRocm90dGxlLmgtMTUzLXZvaWQgYmxrX3Rocm90bF9leGl0KHN0cnVjdCBnZW5kaXNrICpkaXNrKTtcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuaD0xOTY9c3RhdGljIGlubGluZSBib29sIGJsa190aHJvdGxfYmlvKHN0cnVjdCBiaW8gKmJpbylcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuaC0yMDYtfVxuYmxvY2svYmxrLXRocm90dGxlLmg6MjA3OiNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9USFJPVFRMSU5HICovXG5ibG9jay9ibGstdGhyb3R0bGUuaC0yMDgtXG4tLVxuaW5jbHVkZS9saW51eC9ibGtkZXYuaD00OTA9c3RydWN0IHJlcXVlc3RfcXVldWUge1xuLS1cbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtNjI5LVxuaW5jbHVkZS9saW51eC9ibGtkZXYuaDo2MzA6I2lmZGVmIENPTkZJR19CTEtfREVWX1RIUk9UVExJTkdcbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtNjMxLVx0LyogVGhyb3R0bGUgZGF0YSAqL1xuLS1cbmluaXQvS2NvbmZpZz0xMTEzPWNvbmZpZyBCTEtfQ0dST1VQXG4tLVxuaW5pdC9LY29uZmlnLTExMzAtXHRDT05GSUdfQkZRX0dST1VQX0lPU0NIRUQ9eTsgZm9yIGVuYWJsaW5nIHRocm90dGxpbmcgcG9saWN5LCBzZXRcbmluaXQvS2NvbmZpZzoxMTMxOlx0Q09ORklHX0JMS19ERVZfVEhST1RUTElORz15LlxuaW5pdC9LY29uZmlnLTExMzItXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy54ODZfNjQ9MTU9Q09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTYzODRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcueDg2XzY0OjE2OkNPTkZJR19CTEtfREVWX1RIUk9UVExJTkc9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy54ODZfNjQtMTctQ09ORklHX0JPTkRJTkc9eVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9jb25maWcuY29tbW9uPTExPUNPTkZJR19CTEtfREVWX1JBTT15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvY29uZmlnLmNvbW1vbjoxMjpDT05GSUdfQkxLX0RFVl9USFJPVFRMSU5HPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9jb25maWcuY29tbW9uLTEzLUNPTkZJR19CT05ESU5HPXlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAxODoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTAxCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQmxvY2sgRGV2aWNlIFRocm90dGxpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0aGUgZm9jdXMgaXMgY2xlYXJseSBvbiBgQkxLX0RFVl9USFJPVFRMSU5HYC4gUmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIHRvdWNoZWQgYXJlIGB0Z19kaXNwYXRjaF9pb3BzX3RpbWVgIGFuZCBgdGdfc2V0X2NvbmZgLiBOb3csIGB0Z19kaXNwYXRjaF9pb3BzX3RpbWVgIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQmIzM5O3MgY2FsbGVkIGJ5IGB0Z19kaXNwYXRjaF90aW1lYCwgd2hpY2gsIGluIHR1cm4sIGlzIGNhbGxlZCBieSBgdGdfZGlzcGF0Y2hfb25lX2Jpb2AgYW5kIGB0Z193aXRoaW5fbGltaXRgLiBUaGF0JiMzOTtzIHRoZSBmbG93LiBBbmQgYHRnX3NldF9jb25mYCBnZXRzIGNhbGxlZCBmcm9tIGB0Z19zZXRfY29uZl91NjRgIGFuZCBgdGdfc2V0X2NvbmZfdWludGAuCgpOb3cgdGhlIHF1ZXN0aW9uIGlzLCB3aGF0JiMzOTtzIGV4cG9zZWQsIGFuZCB3aGF0JiMzOTtzIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmc/IExldCYjMzk7cyBzZWUuLi4gYHRnX3NldF9jb25mX3U2NGAgYW5kIGB0Z19zZXRfY29uZl91aW50YCBhcmUgd3JpdGUgaGFuZGxlcnMgZm9yIGNncm91cCBmaWxlcy4gVGhhdCBtYWtlcyB0aGVtIGV4Y2VsbGVudCBjYW5kaWRhdGVzLCBnaXZlbiB0aGUgbmF0dXJlIG9mIGNncm91cHMuIFRoZXkmIzM5O3JlIGRlZmluaXRlbHkgZXhwb3NlZC4gQW5kLCBJIHNlZSBgYmxrX3Rocm90bF9iaW9gLCB3aGljaCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgYmlvIHRocm90dGxpbmcuCgpSaWdodCwgc28gYGJsa190aHJvdGxfYmlvYCBsb29rcyBsaWtlIHRoZSBvYnZpb3VzIG5leHQgc3RlcCBmb3IgY2xvc2VyIGluc3BlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMTg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrX3Rocm90bF9iaW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLWNvcmUuYz04MTc9dm9pZCBzdWJtaXRfYmlvX25vYWNjdChzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuYmxvY2svYmxrLWNvcmUuYy05MTgtXG5ibG9jay9ibGstY29yZS5jOjkxOTpcdGlmIChibGtfdGhyb3RsX2JpbyhiaW8pKVxuYmxvY2svYmxrLWNvcmUuYy05MjAtXHRcdHJldHVybjtcbi0tXG5ibG9jay9ibGstbWVyZ2UuYz0xMTk9c3RydWN0IGJpbyAqYmlvX3N1Ym1pdF9zcGxpdF9iaW9zZXQoc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBpbnQgc3BsaXRfc2VjdG9ycyxcbi0tXG5ibG9jay9ibGstbWVyZ2UuYy0xMzQtXHRcdGJpb19pb19lcnJvcihiaW8pO1xuYmxvY2svYmxrLW1lcmdlLmM6MTM1Olx0ZWxzZSBpZiAoIWJsa190aHJvdGxfYmlvKGJpbykpXG5ibG9jay9ibGstbWVyZ2UuYy0xMzYtXHRcdHN1Ym1pdF9iaW9fbm9hY2N0X25vY2hlY2soYmlvLCB0cnVlKTtcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYz0xNzcxPXN0YXRpYyBib29sIHRnX3dpdGhpbl9saW1pdChzdHJ1Y3QgdGhyb3RsX2dycCAqdGcsIHN0cnVjdCBiaW8gKmJpbywgYm9vbCBydylcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNzk4LVxuYmxvY2svYmxrLXRocm90dGxlLmM6MTc5OTpib29sIF9fYmxrX3Rocm90bF9iaW8oc3RydWN0IGJpbyAqYmlvKVxuYmxvY2svYmxrLXRocm90dGxlLmMtMTgwMC17XG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmg9MTQ5PXN0YXRpYyBpbmxpbmUgdm9pZCBibGtfdGhyb3RsX2V4aXQoc3RydWN0IGdlbmRpc2sgKmRpc2spIHsgfVxuYmxvY2svYmxrLXRocm90dGxlLmg6MTUwOnN0YXRpYyBpbmxpbmUgYm9vbCBibGtfdGhyb3RsX2JpbyhzdHJ1Y3QgYmlvICpiaW8pIHsgcmV0dXJuIGZhbHNlOyB9XG5ibG9jay9ibGstdGhyb3R0bGUuaC0xNTEtc3RhdGljIGlubGluZSB2b2lkIGJsa190aHJvdGxfY2FuY2VsX2Jpb3Moc3RydWN0IGdlbmRpc2sgKmRpc2spIHsgfVxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5oPTE1Mz12b2lkIGJsa190aHJvdGxfZXhpdChzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7XG5ibG9jay9ibGstdGhyb3R0bGUuaDoxNTQ6Ym9vbCBfX2Jsa190aHJvdGxfYmlvKHN0cnVjdCBiaW8gKmJpbyk7XG5ibG9jay9ibGstdGhyb3R0bGUuaC0xNTUtdm9pZCBibGtfdGhyb3RsX2NhbmNlbF9iaW9zKHN0cnVjdCBnZW5kaXNrICpkaXNrKTtcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuaD0xNjg9c3RhdGljIGlubGluZSBib29sIGJsa19zaG91bGRfdGhyb3RsKHN0cnVjdCBiaW8gKmJpbylcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuaC0xOTUtXG5ibG9jay9ibGstdGhyb3R0bGUuaDoxOTY6c3RhdGljIGlubGluZSBib29sIGJsa190aHJvdGxfYmlvKHN0cnVjdCBiaW8gKmJpbylcbmJsb2NrL2Jsay10aHJvdHRsZS5oLTE5Ny17XG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmgtMjA0LVxuYmxvY2svYmxrLXRocm90dGxlLmg6MjA1Olx0cmV0dXJuIF9fYmxrX3Rocm90bF9iaW8oYmlvKTtcbmJsb2NrL2Jsay10aHJvdHRsZS5oLTIwNi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDE4OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMzUKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYHRnX3NldF9jb25mYCBsb29rcyBwcm9taXNpbmcgZm9yIGZ1enppbmcuIEhvd2V2ZXIsIGEgc3RhdGljIGFuYWx5c2lzIHJldmVhbHMgdGhhdCBpdCYjMzk7cyBtb3JlIG9mIGEgd3JhcHBlciwgbm90IHRoZSBjb3JlIGZ1bmN0aW9uLiBUaGUgcmVhbCB3b3JrIGlzIGRvbmUgYnkgYHRnX3NldF9jb25mX3U2NGAgYW5kIGB0Z19zZXRfY29uZl91aW50YC4gV2UmIzM5O2xsIG5lZWQgdG8gZm9jdXMgb24gdGhvc2UuIFRoZSBzdGF0aWMgbmF0dXJlIG9mIGB0Z19kaXNwYXRjaF9pb3BzX3RpbWVgIG1ha2VzIGl0IGxlc3MgYXBwZWFsaW5nIGFzIGEgZnV6eiB0YXJnZXQsIHNvIHdlJiMzOTtsbCBieXBhc3MgaXQuIEkgbmVlZCB0byBkaWcgaW50byBgdGdfc2V0X2NvbmZfdTY0YCBhbmQgYHRnX3NldF9jb25mX3VpbnRgIHRvIHVuZGVyc3RhbmQgdGhlIGlucHV0cyBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMTg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGdfc2V0X2NvbmZfdTY0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay10aHJvdHRsZS5jPTEzNTc9c3RhdGljIHNzaXplX3QgdGdfc2V0X2NvbmYoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MDgtXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDA5OnN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mX3U2NChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDEwLVx0XHRcdCAgICAgICBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmM9MTQ0Nz1zdGF0aWMgc3RydWN0IGNmdHlwZSB0aHJvdGxfbGVnYWN5X2ZpbGVzW10gPSB7XG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ1MS1cdFx0LnNlcV9zaG93ID0gdGdfcHJpbnRfY29uZl91NjQsXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDUyOlx0XHQud3JpdGUgPSB0Z19zZXRfY29uZl91NjQsXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDUzLVx0fSxcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDU3LVx0XHQuc2VxX3Nob3cgPSB0Z19wcmludF9jb25mX3U2NCxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0NTg6XHRcdC53cml0ZSA9IHRnX3NldF9jb25mX3U2NCxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NTktXHR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAxODoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Z19zZXRfY29uZl91aW50JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay10aHJvdHRsZS5jPTE0MDk9c3RhdGljIHNzaXplX3QgdGdfc2V0X2NvbmZfdTY0KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDE0LVxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQxNTpzdGF0aWMgc3NpemVfdCB0Z19zZXRfY29uZl91aW50KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MTYtXHRcdFx0XHRjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmM9MTQ0Nz1zdGF0aWMgc3RydWN0IGNmdHlwZSB0aHJvdGxfbGVnYWN5X2ZpbGVzW10gPSB7XG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ2My1cdFx0LnNlcV9zaG93ID0gdGdfcHJpbnRfY29uZl91aW50LFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQ2NDpcdFx0LndyaXRlID0gdGdfc2V0X2NvbmZfdWludCxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NjUtXHR9LFxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NjktXHRcdC5zZXFfc2hvdyA9IHRnX3ByaW50X2NvbmZfdWludCxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0NzA6XHRcdC53cml0ZSA9IHRnX3NldF9jb25mX3VpbnQsXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDcxLVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMTg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE0MQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGJyZWFrZG93biBvZiB3aGF0IEkmIzM5O20gbG9va2luZyBhdDoKCioqSWRlbnRpZnlpbmcgdGhlIEtleSBUaHJvdHRsaW5nIENvbmZpZ3VyYXRpb24gRnVuY3Rpb25zKioKClJpZ2h0LCBzbyBJJiMzOTt2ZSB6ZXJvZWQgaW4gb24gYHRnX3NldF9jb25mX3U2NGAgYW5kIGB0Z19zZXRfY29uZl91aW50YC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBjcnVjaWFsIGZ1bmN0aW9ucyBmb3Igc2V0dGluZyB0aGUgdTY0IGFuZCB1aW50IGNvbmZpZ3VyYXRpb25zLCByZXNwZWN0aXZlbHksIHdpdGhpbiB0aGUgdGhyb3R0bGluZyBtZWNoYW5pc20uIEFuZCwgYXMgZXhwZWN0ZWQsIGBfX2Jsa190aHJvdGxfYmlvYCBpcyB0aGUgYmlnIG9uZSAtIHRoYXQmIzM5O3MgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIGFjdHVhbGx5IGFwcGx5aW5nIHRoZSBiaW8gdGhyb3R0bGluZyBsb2dpYy4gTm93LCBsZXQmIzM5O3MganVzdCBkb3VibGUtY2hlY2sgdGhhdCB0aG9zZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucyBhcmUgYWxzbyB1c2VkIGluIHRoZSBgdGhyb3RsX2ZpbGVzYCBjb250ZXh0LCBqdXN0IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAxODoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aHJvdGxfZmlsZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLXRocm90dGxlLmM9MTU0Nz1zdGF0aWMgc3NpemVfdCB0Z19zZXRfbGltaXQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE2MjgtXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNjI5OnN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHRocm90bF9maWxlc1tdID0ge1xuYmxvY2svYmxrLXRocm90dGxlLmMtMTYzMC1cdHtcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYz0xNjgyPXN0cnVjdCBibGtjZ19wb2xpY3kgYmxrY2dfcG9saWN5X3Rocm90bCA9IHtcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE2ODM6XHQuZGZsX2NmdHlwZXNcdFx0PSB0aHJvdGxfZmlsZXMsXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNjg0LVx0LmxlZ2FjeV9jZnR5cGVzXHRcdD0gdGhyb3RsX2xlZ2FjeV9maWxlcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMTg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU4OQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgVGhyb3R0bGluZyBDb25maWd1cmF0aW9uIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgdGhyb3R0bGluZyBjb2RlIGFuZCBub3RpY2luZyBzb21ldGhpbmcuIGB0Z19zZXRfY29uZl91NjRgIGFuZCBgdGdfc2V0X2NvbmZfdWludGAgYXJlIG5lc3RsZWQgcmlnaHQgdGhlcmUgaW4gYHRocm90bF9sZWdhY3lfZmlsZXNgLiBJbnRlcmVzdGluZy4gQnV0IHdhaXQsIGB0Z19zZXRfbGltaXRgIGlzIG92ZXIgaW4gYHRocm90bF9maWxlc2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLCBhbmQgcmlnaHQgbm93IGB0Z19zZXRfbGltaXRgIHNlZW1zIGxpa2UgdGhlIGtleS4gSSYjMzk7bGwgZm9jdXMgb24gdW5kZXJzdGFuZGluZyB0aGF0IG9uZSBmaXJzdCwgdGhlbiBtYXliZSBJJiMzOTtsbCBoYXZlIGEgYmV0dGVyIHBpY3R1cmUgb2YgdGhlIHdob2xlIHNldHVwLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gYHRnX3NldF9saW1pdGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDE4OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RnX3NldF9saW1pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstdGhyb3R0bGUuYz0xNTQwPXN0YXRpYyBpbnQgdGdfcHJpbnRfbGltaXQoc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNTQ2LVxuYmxvY2svYmxrLXRocm90dGxlLmM6MTU0NzpzdGF0aWMgc3NpemVfdCB0Z19zZXRfbGltaXQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTU0OC1cdFx0XHQgIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYz0xNjI5PXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHRocm90bF9maWxlc1tdID0ge1xuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE2MzMtXHRcdC5zZXFfc2hvdyA9IHRnX3ByaW50X2xpbWl0LFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTYzNDpcdFx0LndyaXRlID0gdGdfc2V0X2xpbWl0LFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTYzNS1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDE4OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNDEKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUaHJvdHRsaW5nIENvbmZpZ3VyYXRpb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGB0Z19zZXRfbGltaXRgIGlzIHRoZSB3cml0ZSBoYW5kbGVyIGZvciBjZ3JvdXAgdjIuIFdlJiMzOTtyZSBhbHNvIGRlYWxpbmcgd2l0aCBgdGdfc2V0X2NvbmZfdTY0YCBhbmQgYHRnX3NldF9jb25mX3VpbnRgLCB3aGljaCBhcmUgdGhlIGNncm91cCB2MSB3cml0ZSBoYW5kbGVycy4gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGhvbmluZyBpbiBvbiBgdGdfc2V0X2NvbmZgLCB3aGljaCBpcyBhIGtleSBmdW5jdGlvbiBhcyBpdCYjMzk7cyB0aGUgb25lIGNhbGxlZCBieSBib3RoIG9mIHRoZSB2MSBoYW5kbGVycy4gVGhhdOKAmXMgcHJvYmFibHkgd2hlcmUgdGhleSYjMzk7cmUgdHJ5aW5nIHRvIHVuaWZ5IG9yIG1vZGlmeSBzb21ldGhpbmcgZnVuZGFtZW50YWwuCgpJdCYjMzk7cyBhbHNvIHRvdWNoaW5nIGB0Z19kaXNwYXRjaF9pb3BzX3RpbWVgLCB3aGljaCBpbW1lZGlhdGVseSBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIElPIHNjaGVkdWxpbmcgb3IgYWNjb3VudGluZy4gVGhlIGNlbnRyYWwgcG9pbnQgc2VlbXMgdG8gYmUgdGhyb3R0bGluZywgYW5kIEkgc2VlIHRoZSBjb25maWdzIGludm9sdmVkIGFyZSBgQkxLX0RFVl9USFJPVFRMSU5HYC4gTm93LCBzaW5jZSB0aGUgdGhyb3R0bGluZyBpcyBwcm9iYWJseSB0aWVkIHRvIGJsb2NrIGRldmljZXMsIGBCTEtfQ0dST1VQYCBpcyB2ZXJ5IGxpa2VseSBhIHByZXJlcXVpc2l0ZSBvciBhIGRlcGVuZGVudCBmZWF0dXJlIG9mIGBCTEtfREVWX1RIUk9UVExJTkdgLiBUaW1lIHRvIGNvbmZpcm0gdGhhdCBkZXBlbmRlbmN5LCBqdXN0IHRvIGJlIHN1cmUuIEkgbmVlZCB0byBlbnN1cmUgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBkZXBlbmRlbmNpZXMgaXMgcHJlc2VudCBiZWZvcmUgbW92aW5nIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDE4OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX1RIUk9UVExJTkcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZz05Nz1jb25maWcgQkxLX0RFVl9aT05FRFxuLS1cbmJsb2NrL0tjb25maWctMTA1LVxuYmxvY2svS2NvbmZpZzoxMDY6Y29uZmlnIEJMS19ERVZfVEhST1RUTElOR1xuYmxvY2svS2NvbmZpZy0xMDctXHRib29sIFwmIzM0O0Jsb2NrIGxheWVyIGJpbyB0aHJvdHRsaW5nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMTg6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUzOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgbGlrZSB5b3U6CgoqKkRpdmluZyBpbnRvIEJsb2NrIERldmljZSBUaHJvdHRsaW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBpbnZlc3RpZ2F0ZSBob3cgYEJMS19ERVZfVEhST1RUTElOR2AgaXMgY29uZmlndXJlZC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCBpbnRvIGBibG9jay9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGNvcmUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGJsb2NrIGRldmljZXMgYXJlIHR5cGljYWxseSBkZWZpbmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGF0IHNldHRpbmcuIEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzPyBXaGF0IGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMgYW5kIHdoYXQgYXJjaGl0ZWN0dXJlcyBvciBmZWF0dXJlcyBpcyBpdCB0aWVkIHRvPyBJcyBpdCBhIHRyaXN0YXRlIG9yIGEgYm9vbGVhbj8gVW5kZXJzdGFuZGluZyB0aGUgS2NvbmZpZyBzdHJ1Y3R1cmUgd2lsbCBnaXZlIG1lIHRoZSBmb3VuZGF0aW9uYWwgY29udGV4dCBJIG5lZWQgdG8gY29uc2lkZXIgYW55IHJlbGF0ZWQgY29kZSBwYXRocyBhbmQgaG93IHRocm90dGxpbmcgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4gVGhpcyBpcyB0aGUganVtcGluZyBvZmYgcG9pbnQgdG8gYXNzZXNzIGhvdyB0aGlzIHNwZWNpZmljIGZlYXR1cmUgYmVoYXZlcyBpbiB0aGUgd2lkZXIgYmxvY2sgZGV2aWNlIGNvbnRleHQsIGFuZCBob3cgaXQgbWlnaHQgaW50ZXJhY3Qgd2l0aCBvdGhlciBjb250cm9sIG1lY2hhbmlzbXMgd2l0aGluIHRoZSBJTyBzdWJzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDE4OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAwOlx0XHRCbG9jayBsYXllciB6b25lZCBibG9jayBkZXZpY2Ugc3VwcG9ydC4gVGhpcyBvcHRpb24gZW5hYmxlc1xuIDEwMTpcdFx0c3VwcG9ydCBmb3IgWkFDL1pCQy9aTlMgaG9zdC1tYW5hZ2VkIGFuZCBob3N0LWF3YXJlIHpvbmVkIGJsb2NrXG4gMTAyOlx0XHRkZXZpY2VzLlxuIDEwMzpcdFxuIDEwNDpcdFx0U2F5IHllcyBoZXJlIGlmIHlvdSBoYXZlIGEgWkFDLCBaQkMsIG9yIFpOUyBzdG9yYWdlIGRldmljZS5cbiAxMDU6XHRcbiAxMDY6XHRjb25maWcgQkxLX0RFVl9USFJPVFRMSU5HXG4gMTA3Olx0XHRib29sIFwmIzM0O0Jsb2NrIGxheWVyIGJpbyB0aHJvdHRsaW5nIHN1cHBvcnRcJiMzNDtcbiAxMDg6XHRcdGRlcGVuZHMgb24gQkxLX0NHUk9VUFxuIDEwOTpcdFx0c2VsZWN0IEJMS19DR1JPVVBfUldTVEFUXG4gMTEwOlx0XHRoZWxwXG4gMTExOlx0XHRCbG9jayBsYXllciBiaW8gdGhyb3R0bGluZyBzdXBwb3J0LiBJdCBjYW4gYmUgdXNlZCB0byBsaW1pdFxuIDExMjpcdFx0dGhlIElPIHJhdGUgdG8gYSBkZXZpY2UuIElPIHJhdGUgcG9saWNpZXMgYXJlIHBlciBjZ3JvdXAgYW5kXG4gMTEzOlx0XHRvbmUgbmVlZHMgdG8gbW91bnQgYW5kIHVzZSBibGtpbyBjZ3JvdXAgY29udHJvbGxlciBmb3IgY3JlYXRpbmdcbiAxMTQ6XHRcdGNncm91cHMgYW5kIHNwZWNpZnlpbmcgcGVyIGRldmljZSBJTyByYXRlIHBvbGljaWVzLlxuIDExNTpcdFxuIDExNjpcdFx0U2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2Jsa2lvLWNvbnRyb2xsZXIucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIDExNzpcdFxuIDExODpcdGNvbmZpZyBCTEtfV0JUXG4gMTE5Olx0XHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBibG9jayBkZXZpY2Ugd3JpdGViYWNrIHRocm90dGxpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMTg6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMDUKCQkJCQkJCW91dHB1dDogMTMwCgkJCQkJCQl0aG91Z2h0czogNDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCbG9jayBUaHJvdHRsaW5nIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgcmVsYXRlZCB0byBibG9jayBkZXZpY2UgdGhyb3R0bGluZywgd2hpY2ggaGluZ2VzIG9uIHRoZSBgQkxLX0NHUk9VUGAgYW5kLCBtb3JlIHNwZWNpZmljYWxseSwgZW5hYmxpbmcgYEJMS19ERVZfVEhST1RUTElOR2AuIE15IGZvY3VzIG5lZWRzIHRvIGJlIG9uIGEgZmV3IGtleSBzeW1ib2xzOiBgdGdfc2V0X2NvbmZfdTY0YCwgYHRnX3NldF9jb25mX3VpbnRgLCBgdGdfc2V0X2xpbWl0YCwgYW5kIGBfX2Jsa190aHJvdGxfYmlvYC4KCkkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGB0Z19zZXRfY29uZl91NjRgIGFuZCBgdGdfc2V0X2NvbmZfdWludGAgYXJlIGluZGVlZCBjZ3JvdXAgdjEgd3JpdGUgaGFuZGxlcnMsIGFuZCBgdGdfc2V0X2xpbWl0YCBpcyBhIGNncm91cCB2MiB3cml0ZSBoYW5kbGVyLiBgX19ibGtfdGhyb3RsX2Jpb2AgaXMgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50IGZvciBiaW8gdGhyb3R0bGluZywgc28gdGhhdOKAmXMgYSBwcmltYXJ5IHRhcmdldC4KCkkgYWxzbyBjaGVja2VkIGZvciBvdGhlciByZWxldmFudCBmdW5jdGlvbnMuIEkgZm91bmQgYHRnX2Rpc3BhdGNoX2lvcHNfdGltZWAsIGJ1dCB0aGF0JiMzOTtzIHN0YXRpYywgc28gbXkgZm9jdXMgcmVtYWlucyBvbiBgX19ibGtfdGhyb3RsX2Jpb2Agc2luY2UgdGhhdCBpcyB3aGF0IGNhbGxzIGl0LgoKVGhlIGFjdHVhbCBjaGFuZ2VzIGludm9sdmUgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBkaXZpZGUtYnktemVybyBlcnJvciBpbiBgdGdfd2l0aGluX2lvcHNfbGltaXQoKWAgd2l0aGluIGB0Z19kaXNwYXRjaF9pb3BzX3RpbWUoKWAuIEl0IGhhbmRsZXMgdGhlIGBpb3BzX2xpbWl0ID09IDBgIGNhc2UgY29ycmVjdGx5IG5vdywgdHJlYXRpbmcgaXQgYXMgdW5saW1pdGVkLiBBZGRpdGlvbmFsbHksIHRoZXkmIzM5O3ZlIGZpeGVkIGEgcG90ZW50aWFsIHRydW5jYXRpb24gaXNzdWUgaW4gYHRnX3NldF9jb25mKClgIGJ5IHVzaW5nIGBtaW4odiwgKHU2NClVSU5UX01BWClgIHdoZW4gY2FzdGluZy4KClRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZTsgaXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIGFuZCB0aG9zZSBmb2N1cyBzeW1ib2xzIHdpbGwgYmUgdGhlIGtleSB0byB0cmlnZ2VyaW5nIGFuZCB0ZXN0aW5nIGl0LiBJJiMzOTt2ZSBhbHNvIGNoZWNrZWQgYW5kIHZlcmlmaWVkIHRoYXQgdGhvc2UgZnVuY3Rpb25zLCBgdGdfc2V0X2NvbmZfdTY0YCBhbmQgYHRnX3NldF9jb25mX3VpbnRgIGFyZSBkZWZpbmVkIGluIHRoZSBgYmxvY2svYmxrLXRocm90dGxlLmNgIGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDE4OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX1RIUk9UVExJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Z19zZXRfY29uZl91NjQmIzM0OywKICAgICYjMzQ7dGdfc2V0X2NvbmZfdWludCYjMzQ7LAogICAgJiMzNDt0Z19zZXRfbGltaXQmIzM0OywKICAgICYjMzQ7X19ibGtfdGhyb3RsX2JpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGRpdmlkZS1ieS16ZXJvIGJ1ZyBpbiB0aGUgYmxvY2sgbGF5ZXImIzM5O3MgYmlvIHRocm90dGxpbmcgbG9naWMgKGJsay10aHJvdHRsZSkgYW5kIGFuIGludGVnZXIgdHJ1bmNhdGlvbiBpc3N1ZSB3aGVuIHNldHRpbmcgY2dyb3VwIGxpbWl0cy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyByZWFjaGFibGUgdmlhIGNncm91cGZzIHdyaXRlcyBhbmQgYmxvY2sgSU8gb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9USFJPVFRMSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGdfc2V0X2NvbmZfdTY0JiMzNDssCiAgICAmIzM0O3RnX3NldF9jb25mX3VpbnQmIzM0OywKICAgICYjMzQ7dGdfc2V0X2xpbWl0JiMzNDssCiAgICAmIzM0O19fYmxrX3Rocm90bF9iaW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBkaXZpZGUtYnktemVybyBidWcgaW4gdGhlIGJsb2NrIGxheWVyJiMzOTtzIGJpbyB0aHJvdHRsaW5nIGxvZ2ljIChibGstdGhyb3R0bGUpIGFuZCBhbiBpbnRlZ2VyIHRydW5jYXRpb24gaXNzdWUgd2hlbiBzZXR0aW5nIGNncm91cCBsaW1pdHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgcmVhY2hhYmxlIHZpYSBjZ3JvdXBmcyB3cml0ZXMgYW5kIGJsb2NrIElPIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xNVQxODoxMTowMi45NDI5NDkzMDZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA3OTcwNjM4NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9USFJPVFRMSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGdfc2V0X2NvbmZfdTY0XCIsXG4gICAgXCJ0Z19zZXRfY29uZl91aW50XCIsXG4gICAgXCJ0Z19zZXRfbGltaXRcIixcbiAgICBcIl9fYmxrX3Rocm90bF9iaW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRpdmlkZS1ieS16ZXJvIGJ1ZyBpbiB0aGUgYmxvY2sgbGF5ZXIncyBiaW8gdGhyb3R0bGluZyBsb2dpYyAoYmxrLXRocm90dGxlKSBhbmQgYW4gaW50ZWdlciB0cnVuY2F0aW9uIGlzc3VlIHdoZW4gc2V0dGluZyBjZ3JvdXAgbGltaXRzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHJlYWNoYWJsZSB2aWEgY2dyb3VwZnMgd3JpdGVzIGFuZCBibG9jayBJTyBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQxODoxMTowMi45NDI5NTM3NzZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMTkxNTcxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDA1OTBhZGY1OGEyNGM2ZjYyYzIxNzgzODRjYTI4NzUyNmZjODdiYzNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMTUgMTg6MTE6MDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXRocm90dGxlLmMgYi9ibG9jay9ibGstdGhyb3R0bGUuY1xcbmluZGV4IGZmYzNiNzAwNjVkNGIxLi45OTAwNDQzYjBhZDUyNiAxMDA2NDRcXG4tLS0gYS9ibG9jay9ibGstdGhyb3R0bGUuY1xcbisrKyBiL2Jsb2NrL2Jsay10aHJvdHRsZS5jXFxuQEAgLTg4Myw3ICs4ODMsMTIgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgdGdfZGlzcGF0Y2hfaW9wc190aW1lKHN0cnVjdCB0aHJvdGxfZ3JwICp0Zywgc3RydWN0IGJpbyAqYmlcXG4gXFx0dTMyIGlvcHNfbGltaXQgPSB0Z19pb3BzX2xpbWl0KHRnLCBydyk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgaW9wc193YWl0O1xcbiBcXG4tXFx0aWYgKGlvcHNfbGltaXQgPT0gVUlOVF9NQVggfHwgdGctXFx1MDAzZWZsYWdzIFxcdTAwMjYgVEhST1RMX1RHX0NBTkNFTElORylcXG4rXFx0LypcXG4rXFx0ICogaW9wc19saW1pdCA9PSAwIGlzIG5vdCBhIHZhbGlkIGxpbWl0LiBUcmVhdCBpdCBhcyB1bmxpbWl0ZWQgc28gd2VcXG4rXFx0ICogbmV2ZXIgcmVhY2ggdGhlIEhaIC8gaW9wc19saW1pdCBkaXZpZGUgaW4gdGdfd2l0aGluX2lvcHNfbGltaXQoKS5cXG4rXFx0ICovXFxuK1xcdGlmIChpb3BzX2xpbWl0ID09IFVJTlRfTUFYIHx8IGlvcHNfbGltaXQgPT0gMCB8fFxcbitcXHQgICAgdGctXFx1MDAzZWZsYWdzIFxcdTAwMjYgVEhST1RMX1RHX0NBTkNFTElORylcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHR0Z191cGRhdGVfc2xpY2UodGcsIHJ3KTtcXG5AQCAtMTM4MywxMCArMTM4OCwxMiBAQCBzdGF0aWMgc3NpemVfdCB0Z19zZXRfY29uZihzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuIFxcdHRnID0gYmxrZ190b190ZyhjdHguYmxrZyk7XFxuIFxcdHRnX3VwZGF0ZV9jYXJyeW92ZXIodGcpO1xcbiBcXG4rXFx0dm9pZCAqZmllbGQgPSAodm9pZCAqKXRnICsgb2ZfY2Z0KG9mKS1cXHUwMDNlcHJpdmF0ZTtcXG4rXFxuIFxcdGlmIChpc191NjQpXFxuLVxcdFxcdCoodTY0ICopKCh2b2lkICopdGcgKyBvZl9jZnQob2YpLVxcdTAwM2Vwcml2YXRlKSA9IHY7XFxuK1xcdFxcdCoodTY0ICopZmllbGQgPSB2O1xcbiBcXHRlbHNlXFxuLVxcdFxcdCoodW5zaWduZWQgaW50ICopKCh2b2lkICopdGcgKyBvZl9jZnQob2YpLVxcdTAwM2Vwcml2YXRlKSA9IHY7XFxuK1xcdFxcdCoodW5zaWduZWQgaW50ICopZmllbGQgPSBtaW4odiwgKHU2NClVSU5UX01BWCk7XFxuIFxcbiBcXHR0Z19jb25mX3VwZGF0ZWQodGcsIGZhbHNlKTtcXG4gXFx0cmV0ID0gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMTg6MTE6MDMuNDY1NjQxMzIzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDAyNzQzNjA5NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9USFJPVFRMSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGdfc2V0X2NvbmZfdTY0XCIsXG4gICAgXCJ0Z19zZXRfY29uZl91aW50XCIsXG4gICAgXCJ0Z19zZXRfbGltaXRcIixcbiAgICBcIl9fYmxrX3Rocm90bF9iaW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRpdmlkZS1ieS16ZXJvIGJ1ZyBpbiB0aGUgYmxvY2sgbGF5ZXIncyBiaW8gdGhyb3R0bGluZyBsb2dpYyAoYmxrLXRocm90dGxlKSBhbmQgYW4gaW50ZWdlciB0cnVuY2F0aW9uIGlzc3VlIHdoZW4gc2V0dGluZyBjZ3JvdXAgbGltaXRzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHJlYWNoYWJsZSB2aWEgY2dyb3VwZnMgd3JpdGVzIGFuZCBibG9jayBJTyBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA1OTBhZGY1OGEyNGM2ZjYyYzIxNzgzODRjYTI4NzUyNmZjODdiYzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxNSAxODoxMTowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay10aHJvdHRsZS5jIGIvYmxvY2svYmxrLXRocm90dGxlLmNcbmluZGV4IGZmYzNiNzAwNjVkNGIxLi45OTAwNDQzYjBhZDUyNiAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay10aHJvdHRsZS5jXG4rKysgYi9ibG9jay9ibGstdGhyb3R0bGUuY1xuQEAgLTg4Myw3ICs4ODMsMTIgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgdGdfZGlzcGF0Y2hfaW9wc190aW1lKHN0cnVjdCB0aHJvdGxfZ3JwICp0Zywgc3RydWN0IGJpbyAqYmlcbiBcdHUzMiBpb3BzX2xpbWl0ID0gdGdfaW9wc19saW1pdCh0ZywgcncpO1xuIFx0dW5zaWduZWQgbG9uZyBpb3BzX3dhaXQ7XG4gXG4tXHRpZiAoaW9wc19saW1pdCA9PSBVSU5UX01BWCB8fCB0Zy1cdTAwM2VmbGFncyBcdTAwMjYgVEhST1RMX1RHX0NBTkNFTElORylcbitcdC8qXG4rXHQgKiBpb3BzX2xpbWl0ID09IDAgaXMgbm90IGEgdmFsaWQgbGltaXQuIFRyZWF0IGl0IGFzIHVubGltaXRlZCBzbyB3ZVxuK1x0ICogbmV2ZXIgcmVhY2ggdGhlIEhaIC8gaW9wc19saW1pdCBkaXZpZGUgaW4gdGdfd2l0aGluX2lvcHNfbGltaXQoKS5cbitcdCAqL1xuK1x0aWYgKGlvcHNfbGltaXQgPT0gVUlOVF9NQVggfHwgaW9wc19saW1pdCA9PSAwIHx8XG4rXHQgICAgdGctXHUwMDNlZmxhZ3MgXHUwMDI2IFRIUk9UTF9UR19DQU5DRUxJTkcpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0dGdfdXBkYXRlX3NsaWNlKHRnLCBydyk7XG5AQCAtMTM4MywxMCArMTM4OCwxMiBAQCBzdGF0aWMgc3NpemVfdCB0Z19zZXRfY29uZihzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG4gXHR0ZyA9IGJsa2dfdG9fdGcoY3R4LmJsa2cpO1xuIFx0dGdfdXBkYXRlX2NhcnJ5b3Zlcih0Zyk7XG4gXG4rXHR2b2lkICpmaWVsZCA9ICh2b2lkICopdGcgKyBvZl9jZnQob2YpLVx1MDAzZXByaXZhdGU7XG4rXG4gXHRpZiAoaXNfdTY0KVxuLVx0XHQqKHU2NCAqKSgodm9pZCAqKXRnICsgb2ZfY2Z0KG9mKS1cdTAwM2Vwcml2YXRlKSA9IHY7XG4rXHRcdCoodTY0ICopZmllbGQgPSB2O1xuIFx0ZWxzZVxuLVx0XHQqKHVuc2lnbmVkIGludCAqKSgodm9pZCAqKXRnICsgb2ZfY2Z0KG9mKS1cdTAwM2Vwcml2YXRlKSA9IHY7XG4rXHRcdCoodW5zaWduZWQgaW50ICopZmllbGQgPSBtaW4odiwgKHU2NClVSU5UX01BWCk7XG4gXG4gXHR0Z19jb25mX3VwZGF0ZWQodGcsIGZhbHNlKTtcbiBcdHJldCA9IDA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQxODoxMTowMy40NjU2NDMxNTRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTIzNTczNTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQmxrLVRocm90dGxlIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCBmb3IgYGJsb2NrL2Jsay10aHJvdHRsZS5jYC4gSXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCBhdCBmaXJzdCBnbGFuY2UuIEl0J3MgbW9kaWZ5aW5nIGEgY291cGxlIG9mIGZ1bmN0aW9uczogYHRnX2Rpc3BhdGNoX2lvcHNfdGltZWAgYW5kIGB0Z19zZXRfY29uZmAuIFRoZSBrZXkgdGhpbmcgaGVyZSBpcyB0aGUgaGFuZGxpbmcgb2YgdGhlIElPUFMgbGltaXQuIFRoZSBwYXRjaCBzdWdnZXN0cyB0aGF0IGlmIGBpb3BzX2xpbWl0YCBpcyBzZXQgdG8gemVybywgaXQgc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGVmZmVjdGl2ZWx5IHVubGltaXRlZC4gVGhhdCdzIGEgY29tbW9uIHBhdHRlcm4sIGFuZCBtYWtlcyBzZW5zZSAtIHplcm8gaXMgb2Z0ZW4gdXNlZCBhcyBhIHNwZWNpYWwgdmFsdWUgdG8gZGlzYWJsZSBhIGZlYXR1cmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBoYW5kbGVkIGNvcnJlY3RseSBhY3Jvc3MgdGhlIGJvYXJkLCB0aG91Z2gsIGVzcGVjaWFsbHkgaW4gZWRnZSBjYXNlcy5cblxuVGhlbiwgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBwYXRjaCBhZGRyZXNzZXMgYHRnX3NldF9jb25mYC4gSXQgYXBwZWFycyB0byBiZSBhZGRpbmcgYSBjYXAgdG8gdGhlIHZhbHVlIGB2YCBiZWZvcmUgaXQncyBhc3NpZ25lZCB0byBhbiBgdW5zaWduZWQgaW50YCBmaWVsZC4gU3BlY2lmaWNhbGx5LCB0aGUgY2FwIGlzIGBVSU5UX01BWGAuIFRoaXMgaXMgaW1wb3J0YW50LCBwcmV2ZW50aW5nIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93cyBkdXJpbmcgY29uZmlndXJhdGlvbiwgd2hpY2ggY291bGQgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIG9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSXQncyBnb29kIHByYWN0aWNlIHRvIGVuc3VyZSB0aGUgc2FuaXR5IG9mIHRoZSBpbnB1dCBkYXRhLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHVuc2lnbmVkIGludGVnZXIgdHlwZXMgYW5kIHBvdGVudGlhbCB1c2VyIGNvbmZpZ3VyYXRpb24uIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBgdmAgYW5kIHRoaXMgYXNzaWdubWVudC4gSSB3YW50IHRvIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXNlIGd1YXJkcmFpbHMgYXJlIHN1ZmZpY2llbnQgZm9yIHRoZSBraW5kcyBvZiB2YWx1ZXMgd2UgZXhwZWN0IGFuZCB0aGUgcmFuZ2Ugb2YgdmFsdWVzIHRoZSB1bnNpZ25lZCBpbnRlZ2VyIGNhbiBoYW5kbGUuIEkgc2hvdWxkIHByb2JhYmx5IGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIG5vdyB0byBzZWUgd2hhdCdzIGdvaW5nIG9uLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMzMsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDE4OjExOjA3LjU4OTIxODY1OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzYzNTA2OTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRnX2Rpc3BhdGNoX2lvcHNfdGltZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstdGhyb3R0bGUuYz04NjE9c3RhdGljIHVuc2lnbmVkIGxvbmcgdGdfZGlzcGF0Y2hfYnBzX3RpbWUoc3RydWN0IHRocm90bF9ncnAgKnRnLCBzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy04NzktXFxuYmxvY2svYmxrLXRocm90dGxlLmM6ODgwOnN0YXRpYyB1bnNpZ25lZCBsb25nIHRnX2Rpc3BhdGNoX2lvcHNfdGltZShzdHJ1Y3QgdGhyb3RsX2dycCAqdGcsIHN0cnVjdCBiaW8gKmJpbylcXG5ibG9jay9ibGstdGhyb3R0bGUuYy04ODEte1xcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmM9OTA1PXN0YXRpYyB1bnNpZ25lZCBsb25nIHRnX2Rpc3BhdGNoX3RpbWUoc3RydWN0IHRocm90bF9ncnAgKnRnLCBzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy05MjgtXFxuYmxvY2svYmxrLXRocm90dGxlLmM6OTI5OlxcdHJldHVybiB0Z19kaXNwYXRjaF9pb3BzX3RpbWUodGcsIGJpbyk7XFxuYmxvY2svYmxrLXRocm90dGxlLmMtOTMwLX1cXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jPTE3NzE9c3RhdGljIGJvb2wgdGdfd2l0aGluX2xpbWl0KHN0cnVjdCB0aHJvdGxfZ3JwICp0Zywgc3RydWN0IGJpbyAqYmlvLCBib29sIHJ3KVxcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTc4MC1cXHRcXHRyZXR1cm4gc3EtXFx1MDAzZW5yX3F1ZXVlZF9pb3BzW3J3XSA9PSAwIFxcdTAwMjZcXHUwMDI2XFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTc4MTpcXHRcXHRcXHRcXHR0Z19kaXNwYXRjaF9pb3BzX3RpbWUodGcsIGJpbykgPT0gMDtcXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNzgyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQxODoxMTowOS45NTI3MjkxOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTMyNDA4MTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRnX3NldF9jb25mXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay10aHJvdHRsZS5jPTEzMjM9c3RhdGljIGludCBibGtfdGhyb3RsX2luaXQoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xMzU2LVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjEzNTc6c3RhdGljIHNzaXplX3QgdGdfc2V0X2NvbmYoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTEzNTgtXFx0XFx0XFx0ICAgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmLCBib29sIGlzX3U2NClcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MDgtXFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQwOTpzdGF0aWMgc3NpemVfdCB0Z19zZXRfY29uZl91NjQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MTAtXFx0XFx0XFx0ICAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDExLXtcXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDEyOlxcdHJldHVybiB0Z19zZXRfY29uZihvZiwgYnVmLCBuYnl0ZXMsIG9mZiwgdHJ1ZSk7XFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQxMy19XFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQxNC1cXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDE1OnN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mX3VpbnQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MTYtXFx0XFx0XFx0XFx0Y2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MTcte1xcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0MTg6XFx0cmV0dXJuIHRnX3NldF9jb25mKG9mLCBidWYsIG5ieXRlcywgb2ZmLCBmYWxzZSk7XFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQxOS19XFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYz0xNDQ3PXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHRocm90bF9sZWdhY3lfZmlsZXNbXSA9IHtcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NTEtXFx0XFx0LnNlcV9zaG93ID0gdGdfcHJpbnRfY29uZl91NjQsXFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQ1MjpcXHRcXHQud3JpdGUgPSB0Z19zZXRfY29uZl91NjQsXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ1My1cXHR9LFxcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ1Ny1cXHRcXHQuc2VxX3Nob3cgPSB0Z19wcmludF9jb25mX3U2NCxcXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDU4OlxcdFxcdC53cml0ZSA9IHRnX3NldF9jb25mX3U2NCxcXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDU5LVxcdH0sXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDYzLVxcdFxcdC5zZXFfc2hvdyA9IHRnX3ByaW50X2NvbmZfdWludCxcXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDY0OlxcdFxcdC53cml0ZSA9IHRnX3NldF9jb25mX3VpbnQsXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ2NS1cXHR9LFxcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ2OS1cXHRcXHQuc2VxX3Nob3cgPSB0Z19wcmludF9jb25mX3VpbnQsXFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQ3MDpcXHRcXHQud3JpdGUgPSB0Z19zZXRfY29uZl91aW50LFxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NzEtXFx0fSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9zdGkvc3RpX2NydGMuYz00OT1zdGlfY3J0Y19tb2RlX3NldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3N0aS9zdGlfY3J0Yy5jLTg1LVxcbmRyaXZlcnMvZ3B1L2RybS9zdGkvc3RpX2NydGMuYzo4NjpcXHRzdGlfdnRnX3NldF9jb25maWcoY29tcG8tXFx1MDAzZXZ0Z1ttaXhlci1cXHUwMDNlaWRdLCBcXHUwMDI2Y3J0Yy1cXHUwMDNlbW9kZSk7XFxuZHJpdmVycy9ncHUvZHJtL3N0aS9zdGlfY3J0Yy5jLTg3LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3N0aS9zdGlfdnRnLmM9Mjg5PXN0YXRpYyB2b2lkIHZ0Z19lbmFibGVfaXJxKHN0cnVjdCBzdGlfdnRnICp2dGcpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vc3RpL3N0aV92dGcuYy0yOTYtXFxuZHJpdmVycy9ncHUvZHJtL3N0aS9zdGlfdnRnLmM6Mjk3OnZvaWQgc3RpX3Z0Z19zZXRfY29uZmlnKHN0cnVjdCBzdGlfdnRnICp2dGcsXFxuZHJpdmVycy9ncHUvZHJtL3N0aS9zdGlfdnRnLmMtMjk4LVxcdFxcdGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3N0aS9zdGlfdnRnLmg9MjM9c3RydWN0IHN0aV92dGcgKm9mX3Z0Z19maW5kKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApO1xcbmRyaXZlcnMvZ3B1L2RybS9zdGkvc3RpX3Z0Zy5oOjI0OnZvaWQgc3RpX3Z0Z19zZXRfY29uZmlnKHN0cnVjdCBzdGlfdnRnICp2dGcsXFxuZHJpdmVycy9ncHUvZHJtL3N0aS9zdGlfdnRnLmgtMjUtXFx0XFx0Y29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQxODoxMToxMi4wODUxNDQ3NDVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODU1NDc3NjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJsay1UaHJvdHRsZSBCdWcgRml4KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkFoLCBhIGNsYXNzaWMgZGl2aWRlLWJ5LXplcm8gdnVsbmVyYWJpbGl0eSFcIiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBzZWVtcyB0byBiZSBpbiBgYmxvY2svYmxrLXRocm90dGxlLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgaW9wc19saW1pdGAgdmFyaWFibGUuIEl0IGFwcGVhcnMgdGhlcmUgd2FzIGEgc2NlbmFyaW8gd2hlcmUgdGhpcyBjb3VsZCBiZSBpbml0aWFsaXplZCB0byB6ZXJvLCB3aGljaCB0aGVuIGxlZCB0byBhIG5hc3R5IGRpdmlkZS1ieS16ZXJvIGVycm9yIHdpdGhpbiB0aGUgYHRnX3dpdGhpbl9pb3BzX2xpbWl0KClgIGZ1bmN0aW9uLiBUaGF0J3MgYSB0ZXh0Ym9vayBleGFtcGxlIG9mIGEgcHJldmVudGFibGUgY29kaW5nIGVycm9yIHRoYXQgbmVlZHMgdG8gYmUgYWRkcmVzc2VkIGltbWVkaWF0ZWx5LlxuXG5UaGUgcGF0Y2ggc2VlbXMgdG8gdGFrZSBhIHR3by1wcm9uZ2VkIGFwcHJvYWNoLiBGaXJzdCwgaXQgZGlyZWN0bHkgZml4ZXMgdGhlIGBpb3BzX2xpbWl0YCBpc3N1ZSB0byBwcmV2ZW50IHRoZSBkaXZpc2lvbiBieSB6ZXJvLiBTZWNvbmRseSwgSSdtIG5vdGluZyB0aGUgY2FwIG9uIGB2YCB0byBgVUlOVF9NQVhgIHdpdGhpbiBgdGdfc2V0X2NvbmZgIHdoZW4gYXNzaWduaW5nIHRvIGFuIGB1bnNpZ25lZCBpbnRgIGZpZWxkLiBBIHdpc2UgbW92ZSwgcHJldmVudGluZyBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3MgYW5kIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgbWFpbnRhaW5pbmcgZGF0YSBpbnRlZ3JpdHkgd2hlbiBkZWFsaW5nIHdpdGggbGltaXRzIGFuZCB0aHJvdHRsaW5nIGNvbmZpZ3VyYXRpb25zLlxuXG5Gcm9tIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGJsb2NrIGxheWVyLCB0aGlzIHBhdGNoIGlzIHRhcmdldGluZyBhIGZ1bmN0aW9uYWwgYXJlYSB3aXRoaW4gdGhlIGJsay10aHJvdHRsZSBjZ3JvdXAgc3Vic3lzdGVtLiBUaGUgZXhwb3N1cmUgaXMgdmlhIGNncm91cGZzIHdyaXRlcyB0byBjb250cm9sIHRoZSB0aHJvdHRsaW5nIGJlaGF2aW9yLCBsaWtlIGBibGtpby50aHJvdHRsZS5yZWFkX2lvcHNfZGV2aWNlYCBvciBgYmxraW8udGhyb3R0bGUud3JpdGVfaW9wc19kZXZpY2VgIGFuZCBzaW1pbGFyIGZpbGVzLiBUaGF0J3MgZ29vZCB0byBrbm93IGJlY2F1c2UgaXQgdGVsbHMgbWUgd2hlcmUgdGhpcyBidWcgaXMgcmVhY2hhYmxlLlxuXG5Ob3csIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGVuYWJsZWQuIEkgc2hvdWxkIHF1aWNrbHkgY2hlY2sgaWYgYENPTkZJR19CTEtfREVWX1RIUk9UVExJTkdgIGlzIHNldCwgc2luY2UgdGhhdCB3b3VsZCBiZSB0aGUga2V5IGluZGljYXRvciB0aGF0IHRoaXMgcGFydGljdWxhciBjb2RlIHBhdGggaXMgZXZlbiBhY3RpdmUgaW4gYSBnaXZlbiBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhpcyB3aWxsIGdpdmUgbWUgZnVydGhlciBjb250ZXh0IGFib3V0IHRoZSBpbXBhY3QgYW5kIGxpa2VseSBzZXZlcml0eSBvZiB0aGlzIGZpeCBpbiB0aGUgcmVhbCB3b3JsZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAzMiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiLCJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMTg6MTE6MTYuOTQwNjI0MTI2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTExMzU2MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQkxLX0RFVl9USFJPVFRMSU5HXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2Jsa2lvLWNvbnRyb2xsZXIucnN0PTI3PUVuYWJsZSB0aHJvdHRsaW5nIGluIGJsb2NrIGxheWVyOjpcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9ibGtpby1jb250cm9sbGVyLnJzdC0yOC1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9ibGtpby1jb250cm9sbGVyLnJzdDoyOTpcXHRDT05GSUdfQkxLX0RFVl9USFJPVFRMSU5HPXlcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9ibGtpby1jb250cm9sbGVyLnJzdC0zMC1cXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2Jsa2lvLWNvbnRyb2xsZXIucnN0PTgxPVZhcmlvdXMgdXNlciB2aXNpYmxlIGNvbmZpZyBvcHRpb25zXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9ibGtpby1jb250cm9sbGVyLnJzdC05MC1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9ibGtpby1jb250cm9sbGVyLnJzdDo5MTogIENPTkZJR19CTEtfREVWX1RIUk9UVExJTkdcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9ibGtpby1jb250cm9sbGVyLnJzdC05Mi1cXHQgIEVuYWJsZSBibG9jayBkZXZpY2UgdGhyb3R0bGluZyBzdXBwb3J0IGluIGJsb2NrIGxheWVyLlxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZz03OT1DT05GSUdfQkxLX0RFVl9aT05FRD15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZzo4MDpDT05GSUdfQkxLX0RFVl9USFJPVFRMSU5HPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnLTgxLUNPTkZJR19CTEtfV0JUPXlcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc9OTQ9Q09ORklHX0JMS19ERVZfWk9ORUQ9eVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc6OTU6Q09ORklHX0JMS19ERVZfVEhST1RUTElORz15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy05Ni1DT05GSUdfQkxLX1dCVD15XFxuLS1cXG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnPTUzPUNPTkZJR19NT0RVTEVfVU5MT0FEPXlcXG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnOjU0OkNPTkZJR19CTEtfREVWX1RIUk9UVExJTkc9eVxcbmFyY2gvcmlzY3YvY29uZmlncy9kZWZjb25maWctNTUtQ09ORklHX1NQQVJTRU1FTV9NQU5VQUw9eVxcbi0tXFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnPTg0PUNPTkZJR19NT0RVTEVfU0lHX1NIQTI1Nj15XFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnOjg1OkNPTkZJR19CTEtfREVWX1RIUk9UVExJTkc9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZy04Ni1DT05GSUdfQkxLX1dCVD15XFxuLS1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc9Nzg9Q09ORklHX01PRFVMRV9TSUdfU0hBMjU2PXlcXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6Nzk6Q09ORklHX0JMS19ERVZfVEhST1RUTElORz15XFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnLTgwLUNPTkZJR19CTEtfV0JUPXlcXG4tLVxcbmJsb2NrL0tjb25maWc9OTc9Y29uZmlnIEJMS19ERVZfWk9ORURcXG4tLVxcbmJsb2NrL0tjb25maWctMTA1LVxcbmJsb2NrL0tjb25maWc6MTA2OmNvbmZpZyBCTEtfREVWX1RIUk9UVExJTkdcXG5ibG9jay9LY29uZmlnLTEwNy1cXHRib29sIFxcXCJCbG9jayBsYXllciBiaW8gdGhyb3R0bGluZyBzdXBwb3J0XFxcIlxcbi0tXFxuYmxvY2svTWFrZWZpbGU9MjE9b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfRkNfQVBQSUQpICs9IGJsay1jZ3JvdXAtZmMtYXBwaWQub1xcbmJsb2NrL01ha2VmaWxlOjIyOm9iai0kKENPTkZJR19CTEtfREVWX1RIUk9UVExJTkcpXFx0Kz0gYmxrLXRocm90dGxlLm9cXG5ibG9jay9NYWtlZmlsZS0yMy1vYmotJChDT05GSUdfQkxLX0NHUk9VUF9JT1BSSU8pXFx0Kz0gYmxrLWlvcHJpby5vXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuaD0xNDA9c3RhdGljIGlubGluZSBzdHJ1Y3QgdGhyb3RsX2dycCAqYmxrZ190b190ZyhzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2cpXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuaC0xNDctICovXFxuYmxvY2svYmxrLXRocm90dGxlLmg6MTQ4OiNpZm5kZWYgQ09ORklHX0JMS19ERVZfVEhST1RUTElOR1xcbmJsb2NrL2Jsay10aHJvdHRsZS5oLTE0OS1zdGF0aWMgaW5saW5lIHZvaWQgYmxrX3Rocm90bF9leGl0KHN0cnVjdCBnZW5kaXNrICpkaXNrKSB7IH1cXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5oPTE1MT1zdGF0aWMgaW5saW5lIHZvaWQgYmxrX3Rocm90bF9jYW5jZWxfYmlvcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykgeyB9XFxuYmxvY2svYmxrLXRocm90dGxlLmg6MTUyOiNlbHNlIC8qIENPTkZJR19CTEtfREVWX1RIUk9UVExJTkcgKi9cXG5ibG9jay9ibGstdGhyb3R0bGUuaC0xNTMtdm9pZCBibGtfdGhyb3RsX2V4aXQoc3RydWN0IGdlbmRpc2sgKmRpc2spO1xcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmg9MTk2PXN0YXRpYyBpbmxpbmUgYm9vbCBibGtfdGhyb3RsX2JpbyhzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuaC0yMDYtfVxcbmJsb2NrL2Jsay10aHJvdHRsZS5oOjIwNzojZW5kaWYgLyogQ09ORklHX0JMS19ERVZfVEhST1RUTElORyAqL1xcbmJsb2NrL2Jsay10aHJvdHRsZS5oLTIwOC1cXG4tLVxcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg9NDkwPXN0cnVjdCByZXF1ZXN0X3F1ZXVlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtNjI5LVxcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6NjMwOiNpZmRlZiBDT05GSUdfQkxLX0RFVl9USFJPVFRMSU5HXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC02MzEtXFx0LyogVGhyb3R0bGUgZGF0YSAqL1xcbi0tXFxuaW5pdC9LY29uZmlnPTExMTM9Y29uZmlnIEJMS19DR1JPVVBcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTMwLVxcdENPTkZJR19CRlFfR1JPVVBfSU9TQ0hFRD15OyBmb3IgZW5hYmxpbmcgdGhyb3R0bGluZyBwb2xpY3ksIHNldFxcbmluaXQvS2NvbmZpZzoxMTMxOlxcdENPTkZJR19CTEtfREVWX1RIUk9UVExJTkc9eS5cXG5pbml0L0tjb25maWctMTEzMi1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcueDg2XzY0PTE1PUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTE2Mzg0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy54ODZfNjQ6MTY6Q09ORklHX0JMS19ERVZfVEhST1RUTElORz15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy54ODZfNjQtMTctQ09ORklHX0JPTkRJTkc9eVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkL2NvbmZpZy5jb21tb249MTE9Q09ORklHX0JMS19ERVZfUkFNPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvY29uZmlnLmNvbW1vbjoxMjpDT05GSUdfQkxLX0RFVl9USFJPVFRMSU5HPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvY29uZmlnLmNvbW1vbi0xMy1DT05GSUdfQk9ORElORz15XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDE4OjExOjE4Ljg5MTc2NjEyOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MjQyMzgxOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCbG9jayBEZXZpY2UgVGhyb3R0bGluZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0aGUgZm9jdXMgaXMgY2xlYXJseSBvbiBgQkxLX0RFVl9USFJPVFRMSU5HYC4gUmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGtleSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gdG91Y2hlZCBhcmUgYHRnX2Rpc3BhdGNoX2lvcHNfdGltZWAgYW5kIGB0Z19zZXRfY29uZmAuIE5vdywgYHRnX2Rpc3BhdGNoX2lvcHNfdGltZWAgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCdzIGNhbGxlZCBieSBgdGdfZGlzcGF0Y2hfdGltZWAsIHdoaWNoLCBpbiB0dXJuLCBpcyBjYWxsZWQgYnkgYHRnX2Rpc3BhdGNoX29uZV9iaW9gIGFuZCBgdGdfd2l0aGluX2xpbWl0YC4gVGhhdCdzIHRoZSBmbG93LiBBbmQgYHRnX3NldF9jb25mYCBnZXRzIGNhbGxlZCBmcm9tIGB0Z19zZXRfY29uZl91NjRgIGFuZCBgdGdfc2V0X2NvbmZfdWludGAuXG5cbk5vdyB0aGUgcXVlc3Rpb24gaXMsIHdoYXQncyBleHBvc2VkLCBhbmQgd2hhdCdzIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmc/IExldCdzIHNlZS4uLiBgdGdfc2V0X2NvbmZfdTY0YCBhbmQgYHRnX3NldF9jb25mX3VpbnRgIGFyZSB3cml0ZSBoYW5kbGVycyBmb3IgY2dyb3VwIGZpbGVzLiBUaGF0IG1ha2VzIHRoZW0gZXhjZWxsZW50IGNhbmRpZGF0ZXMsIGdpdmVuIHRoZSBuYXR1cmUgb2YgY2dyb3Vwcy4gVGhleSdyZSBkZWZpbml0ZWx5IGV4cG9zZWQuIEFuZCwgSSBzZWUgYGJsa190aHJvdGxfYmlvYCwgd2hpY2ggaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIGJpbyB0aHJvdHRsaW5nLlxuXG5SaWdodCwgc28gYGJsa190aHJvdGxfYmlvYCBsb29rcyBsaWtlIHRoZSBvYnZpb3VzIG5leHQgc3RlcCBmb3IgY2xvc2VyIGluc3BlY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMDEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMTg6MTE6MjMuNDE2MDA2ODczWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5Nzc3NDcxMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrX3Rocm90bF9iaW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLWNvcmUuYz04MTc9dm9pZCBzdWJtaXRfYmlvX25vYWNjdChzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5ibG9jay9ibGstY29yZS5jLTkxOC1cXG5ibG9jay9ibGstY29yZS5jOjkxOTpcXHRpZiAoYmxrX3Rocm90bF9iaW8oYmlvKSlcXG5ibG9jay9ibGstY29yZS5jLTkyMC1cXHRcXHRyZXR1cm47XFxuLS1cXG5ibG9jay9ibGstbWVyZ2UuYz0xMTk9c3RydWN0IGJpbyAqYmlvX3N1Ym1pdF9zcGxpdF9iaW9zZXQoc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBpbnQgc3BsaXRfc2VjdG9ycyxcXG4tLVxcbmJsb2NrL2Jsay1tZXJnZS5jLTEzNC1cXHRcXHRiaW9faW9fZXJyb3IoYmlvKTtcXG5ibG9jay9ibGstbWVyZ2UuYzoxMzU6XFx0ZWxzZSBpZiAoIWJsa190aHJvdGxfYmlvKGJpbykpXFxuYmxvY2svYmxrLW1lcmdlLmMtMTM2LVxcdFxcdHN1Ym1pdF9iaW9fbm9hY2N0X25vY2hlY2soYmlvLCB0cnVlKTtcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jPTE3NzE9c3RhdGljIGJvb2wgdGdfd2l0aGluX2xpbWl0KHN0cnVjdCB0aHJvdGxfZ3JwICp0Zywgc3RydWN0IGJpbyAqYmlvLCBib29sIHJ3KVxcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTc5OC1cXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNzk5OmJvb2wgX19ibGtfdGhyb3RsX2JpbyhzdHJ1Y3QgYmlvICpiaW8pXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTgwMC17XFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuaD0xNDk9c3RhdGljIGlubGluZSB2b2lkIGJsa190aHJvdGxfZXhpdChzdHJ1Y3QgZ2VuZGlzayAqZGlzaykgeyB9XFxuYmxvY2svYmxrLXRocm90dGxlLmg6MTUwOnN0YXRpYyBpbmxpbmUgYm9vbCBibGtfdGhyb3RsX2JpbyhzdHJ1Y3QgYmlvICpiaW8pIHsgcmV0dXJuIGZhbHNlOyB9XFxuYmxvY2svYmxrLXRocm90dGxlLmgtMTUxLXN0YXRpYyBpbmxpbmUgdm9pZCBibGtfdGhyb3RsX2NhbmNlbF9iaW9zKHN0cnVjdCBnZW5kaXNrICpkaXNrKSB7IH1cXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5oPTE1Mz12b2lkIGJsa190aHJvdGxfZXhpdChzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7XFxuYmxvY2svYmxrLXRocm90dGxlLmg6MTU0OmJvb2wgX19ibGtfdGhyb3RsX2JpbyhzdHJ1Y3QgYmlvICpiaW8pO1xcbmJsb2NrL2Jsay10aHJvdHRsZS5oLTE1NS12b2lkIGJsa190aHJvdGxfY2FuY2VsX2Jpb3Moc3RydWN0IGdlbmRpc2sgKmRpc2spO1xcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmg9MTY4PXN0YXRpYyBpbmxpbmUgYm9vbCBibGtfc2hvdWxkX3Rocm90bChzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuaC0xOTUtXFxuYmxvY2svYmxrLXRocm90dGxlLmg6MTk2OnN0YXRpYyBpbmxpbmUgYm9vbCBibGtfdGhyb3RsX2JpbyhzdHJ1Y3QgYmlvICpiaW8pXFxuYmxvY2svYmxrLXRocm90dGxlLmgtMTk3LXtcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5oLTIwNC1cXG5ibG9jay9ibGstdGhyb3R0bGUuaDoyMDU6XFx0cmV0dXJuIF9fYmxrX3Rocm90bF9iaW8oYmlvKTtcXG5ibG9jay9ibGstdGhyb3R0bGUuaC0yMDYtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQxODoxMToyNS4zOTM3NTg1MDRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTAwNTYxNTkzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKipcblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYHRnX3NldF9jb25mYCBsb29rcyBwcm9taXNpbmcgZm9yIGZ1enppbmcuIEhvd2V2ZXIsIGEgc3RhdGljIGFuYWx5c2lzIHJldmVhbHMgdGhhdCBpdCdzIG1vcmUgb2YgYSB3cmFwcGVyLCBub3QgdGhlIGNvcmUgZnVuY3Rpb24uIFRoZSByZWFsIHdvcmsgaXMgZG9uZSBieSBgdGdfc2V0X2NvbmZfdTY0YCBhbmQgYHRnX3NldF9jb25mX3VpbnRgLiBXZSdsbCBuZWVkIHRvIGZvY3VzIG9uIHRob3NlLiBUaGUgc3RhdGljIG5hdHVyZSBvZiBgdGdfZGlzcGF0Y2hfaW9wc190aW1lYCBtYWtlcyBpdCBsZXNzIGFwcGVhbGluZyBhcyBhIGZ1enogdGFyZ2V0LCBzbyB3ZSdsbCBieXBhc3MgaXQuIEkgbmVlZCB0byBkaWcgaW50byBgdGdfc2V0X2NvbmZfdTY0YCBhbmQgYHRnX3NldF9jb25mX3VpbnRgIHRvIHVuZGVyc3RhbmQgdGhlIGlucHV0cyBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzIzNSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDE4OjExOjM0LjM5OTM3NjM0N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2NzA4NDI0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Z19zZXRfY29uZl91NjRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLXRocm90dGxlLmM9MTM1Nz1zdGF0aWMgc3NpemVfdCB0Z19zZXRfY29uZihzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDA4LVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0MDk6c3RhdGljIHNzaXplX3QgdGdfc2V0X2NvbmZfdTY0KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDEwLVxcdFxcdFxcdCAgICAgICBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYz0xNDQ3PXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHRocm90bF9sZWdhY3lfZmlsZXNbXSA9IHtcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NTEtXFx0XFx0LnNlcV9zaG93ID0gdGdfcHJpbnRfY29uZl91NjQsXFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQ1MjpcXHRcXHQud3JpdGUgPSB0Z19zZXRfY29uZl91NjQsXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ1My1cXHR9LFxcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ1Ny1cXHRcXHQuc2VxX3Nob3cgPSB0Z19wcmludF9jb25mX3U2NCxcXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDU4OlxcdFxcdC53cml0ZSA9IHRnX3NldF9jb25mX3U2NCxcXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDU5LVxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDE4OjExOjM2LjQ2NjQ2NDQ1OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExMzcwMzA5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Z19zZXRfY29uZl91aW50XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay10aHJvdHRsZS5jPTE0MDk9c3RhdGljIHNzaXplX3QgdGdfc2V0X2NvbmZfdTY0KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MTQtXFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQxNTpzdGF0aWMgc3NpemVfdCB0Z19zZXRfY29uZl91aW50KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDE2LVxcdFxcdFxcdFxcdGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jPTE0NDc9c3RhdGljIHN0cnVjdCBjZnR5cGUgdGhyb3RsX2xlZ2FjeV9maWxlc1tdID0ge1xcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ2My1cXHRcXHQuc2VxX3Nob3cgPSB0Z19wcmludF9jb25mX3VpbnQsXFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQ2NDpcXHRcXHQud3JpdGUgPSB0Z19zZXRfY29uZl91aW50LFxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NjUtXFx0fSxcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NjktXFx0XFx0LnNlcV9zaG93ID0gdGdfcHJpbnRfY29uZl91aW50LFxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0NzA6XFx0XFx0LndyaXRlID0gdGdfc2V0X2NvbmZfdWludCxcXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDcxLVxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDE4OjExOjM4LjU4MDE3NDA4NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjM3MTM4MzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYnJlYWtkb3duIG9mIHdoYXQgSSdtIGxvb2tpbmcgYXQ6XG5cbioqSWRlbnRpZnlpbmcgdGhlIEtleSBUaHJvdHRsaW5nIENvbmZpZ3VyYXRpb24gRnVuY3Rpb25zKipcblxuUmlnaHQsIHNvIEkndmUgemVyb2VkIGluIG9uIGB0Z19zZXRfY29uZl91NjRgIGFuZCBgdGdfc2V0X2NvbmZfdWludGAuIFRob3NlIHNlZW0gbGlrZSB0aGUgY3J1Y2lhbCBmdW5jdGlvbnMgZm9yIHNldHRpbmcgdGhlIHU2NCBhbmQgdWludCBjb25maWd1cmF0aW9ucywgcmVzcGVjdGl2ZWx5LCB3aXRoaW4gdGhlIHRocm90dGxpbmcgbWVjaGFuaXNtLiBBbmQsIGFzIGV4cGVjdGVkLCBgX19ibGtfdGhyb3RsX2Jpb2AgaXMgdGhlIGJpZyBvbmUgLSB0aGF0J3MgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIGFjdHVhbGx5IGFwcGx5aW5nIHRoZSBiaW8gdGhyb3R0bGluZyBsb2dpYy4gTm93LCBsZXQncyBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IHRob3NlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zIGFyZSBhbHNvIHVzZWQgaW4gdGhlIGB0aHJvdGxfZmlsZXNgIGNvbnRleHQsIGp1c3QgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE0MSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQxODoxMTo0MS44MTczMTU2OTlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTM2NTM3MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGhyb3RsX2ZpbGVzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay10aHJvdHRsZS5jPTE1NDc9c3RhdGljIHNzaXplX3QgdGdfc2V0X2xpbWl0KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE2MjgtXFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTYyOTpzdGF0aWMgc3RydWN0IGNmdHlwZSB0aHJvdGxfZmlsZXNbXSA9IHtcXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNjMwLVxcdHtcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jPTE2ODI9c3RydWN0IGJsa2NnX3BvbGljeSBibGtjZ19wb2xpY3lfdGhyb3RsID0ge1xcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE2ODM6XFx0LmRmbF9jZnR5cGVzXFx0XFx0PSB0aHJvdGxfZmlsZXMsXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTY4NC1cXHQubGVnYWN5X2NmdHlwZXNcXHRcXHQ9IHRocm90bF9sZWdhY3lfZmlsZXMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDE4OjExOjQzLjg3MDk3ODE0M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTk2MzQwMjgxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIFRocm90dGxpbmcgQ29uZmlndXJhdGlvbiBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyB0aHJvdHRsaW5nIGNvZGUgYW5kIG5vdGljaW5nIHNvbWV0aGluZy4gYHRnX3NldF9jb25mX3U2NGAgYW5kIGB0Z19zZXRfY29uZl91aW50YCBhcmUgbmVzdGxlZCByaWdodCB0aGVyZSBpbiBgdGhyb3RsX2xlZ2FjeV9maWxlc2AuIEludGVyZXN0aW5nLiBCdXQgd2FpdCwgYHRnX3NldF9saW1pdGAgaXMgb3ZlciBpbiBgdGhyb3RsX2ZpbGVzYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIsIGFuZCByaWdodCBub3cgYHRnX3NldF9saW1pdGAgc2VlbXMgbGlrZSB0aGUga2V5LiBJJ2xsIGZvY3VzIG9uIHVuZGVyc3RhbmRpbmcgdGhhdCBvbmUgZmlyc3QsIHRoZW4gbWF5YmUgSSdsbCBoYXZlIGEgYmV0dGVyIHBpY3R1cmUgb2YgdGhlIHdob2xlIHNldHVwLiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uIGluIGB0Z19zZXRfbGltaXRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTg5LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMTg6MTI6MjMuODM0MzgyODlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzM4MTk5NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGdfc2V0X2xpbWl0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay10aHJvdHRsZS5jPTE1NDA9c3RhdGljIGludCB0Z19wcmludF9saW1pdChzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTU0Ni1cXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNTQ3OnN0YXRpYyBzc2l6ZV90IHRnX3NldF9saW1pdChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTU0OC1cXHRcXHRcXHQgIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jPTE2Mjk9c3RhdGljIHN0cnVjdCBjZnR5cGUgdGhyb3RsX2ZpbGVzW10gPSB7XFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNjMzLVxcdFxcdC5zZXFfc2hvdyA9IHRnX3ByaW50X2xpbWl0LFxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE2MzQ6XFx0XFx0LndyaXRlID0gdGdfc2V0X2xpbWl0LFxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE2MzUtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMTg6MTI6MjYuMDY4MjA5Njk2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjA0MzczNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUaHJvdHRsaW5nIENvbmZpZ3VyYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgdGdfc2V0X2xpbWl0YCBpcyB0aGUgd3JpdGUgaGFuZGxlciBmb3IgY2dyb3VwIHYyLiBXZSdyZSBhbHNvIGRlYWxpbmcgd2l0aCBgdGdfc2V0X2NvbmZfdTY0YCBhbmQgYHRnX3NldF9jb25mX3VpbnRgLCB3aGljaCBhcmUgdGhlIGNncm91cCB2MSB3cml0ZSBoYW5kbGVycy4gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGhvbmluZyBpbiBvbiBgdGdfc2V0X2NvbmZgLCB3aGljaCBpcyBhIGtleSBmdW5jdGlvbiBhcyBpdCdzIHRoZSBvbmUgY2FsbGVkIGJ5IGJvdGggb2YgdGhlIHYxIGhhbmRsZXJzLiBUaGF04oCZcyBwcm9iYWJseSB3aGVyZSB0aGV5J3JlIHRyeWluZyB0byB1bmlmeSBvciBtb2RpZnkgc29tZXRoaW5nIGZ1bmRhbWVudGFsLlxuXG5JdCdzIGFsc28gdG91Y2hpbmcgYHRnX2Rpc3BhdGNoX2lvcHNfdGltZWAsIHdoaWNoIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBJTyBzY2hlZHVsaW5nIG9yIGFjY291bnRpbmcuIFRoZSBjZW50cmFsIHBvaW50IHNlZW1zIHRvIGJlIHRocm90dGxpbmcsIGFuZCBJIHNlZSB0aGUgY29uZmlncyBpbnZvbHZlZCBhcmUgYEJMS19ERVZfVEhST1RUTElOR2AuIE5vdywgc2luY2UgdGhlIHRocm90dGxpbmcgaXMgcHJvYmFibHkgdGllZCB0byBibG9jayBkZXZpY2VzLCBgQkxLX0NHUk9VUGAgaXMgdmVyeSBsaWtlbHkgYSBwcmVyZXF1aXNpdGUgb3IgYSBkZXBlbmRlbnQgZmVhdHVyZSBvZiBgQkxLX0RFVl9USFJPVFRMSU5HYC4gVGltZSB0byBjb25maXJtIHRoYXQgZGVwZW5kZW5jeSwganVzdCB0byBiZSBzdXJlLiBJIG5lZWQgdG8gZW5zdXJlIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgZGVwZW5kZW5jaWVzIGlzIHByZXNlbnQgYmVmb3JlIG1vdmluZyBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDQxLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDE4OjEyOjMwLjEyODY0ODU1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODU5OTE3MjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX1RIUk9UVExJTkdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZz05Nz1jb25maWcgQkxLX0RFVl9aT05FRFxcbi0tXFxuYmxvY2svS2NvbmZpZy0xMDUtXFxuYmxvY2svS2NvbmZpZzoxMDY6Y29uZmlnIEJMS19ERVZfVEhST1RUTElOR1xcbmJsb2NrL0tjb25maWctMTA3LVxcdGJvb2wgXFxcIkJsb2NrIGxheWVyIGJpbyB0aHJvdHRsaW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDE4OjEyOjMxLjk4ODU3MDc4M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDExNDg1NTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBsaWtlIHlvdTpcblxuKipEaXZpbmcgaW50byBCbG9jayBEZXZpY2UgVGhyb3R0bGluZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBpbnZlc3RpZ2F0ZSBob3cgYEJMS19ERVZfVEhST1RUTElOR2AgaXMgY29uZmlndXJlZC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCBpbnRvIGBibG9jay9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgY29yZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYmxvY2sgZGV2aWNlcyBhcmUgdHlwaWNhbGx5IGRlZmluZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoYXQgc2V0dGluZy4gQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXM/IFdoYXQgYXJlIHRoZSBkZWZhdWx0IHZhbHVlcyBhbmQgd2hhdCBhcmNoaXRlY3R1cmVzIG9yIGZlYXR1cmVzIGlzIGl0IHRpZWQgdG8/IElzIGl0IGEgdHJpc3RhdGUgb3IgYSBib29sZWFuPyBVbmRlcnN0YW5kaW5nIHRoZSBLY29uZmlnIHN0cnVjdHVyZSB3aWxsIGdpdmUgbWUgdGhlIGZvdW5kYXRpb25hbCBjb250ZXh0IEkgbmVlZCB0byBjb25zaWRlciBhbnkgcmVsYXRlZCBjb2RlIHBhdGhzIGFuZCBob3cgdGhyb3R0bGluZyBpcyBlbmFibGVkIG9yIGRpc2FibGVkLiBUaGlzIGlzIHRoZSBqdW1waW5nIG9mZiBwb2ludCB0byBhc3Nlc3MgaG93IHRoaXMgc3BlY2lmaWMgZmVhdHVyZSBiZWhhdmVzIGluIHRoZSB3aWRlciBibG9jayBkZXZpY2UgY29udGV4dCwgYW5kIGhvdyBpdCBtaWdodCBpbnRlcmFjdCB3aXRoIG90aGVyIGNvbnRyb2wgbWVjaGFuaXNtcyB3aXRoaW4gdGhlIElPIHN1YnN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUzOCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDE4OjEyOjM1LjQwMDA1ODE3MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMDpcXHRcXHRCbG9jayBsYXllciB6b25lZCBibG9jayBkZXZpY2Ugc3VwcG9ydC4gVGhpcyBvcHRpb24gZW5hYmxlc1xcbiAxMDE6XFx0XFx0c3VwcG9ydCBmb3IgWkFDL1pCQy9aTlMgaG9zdC1tYW5hZ2VkIGFuZCBob3N0LWF3YXJlIHpvbmVkIGJsb2NrXFxuIDEwMjpcXHRcXHRkZXZpY2VzLlxcbiAxMDM6XFx0XFxuIDEwNDpcXHRcXHRTYXkgeWVzIGhlcmUgaWYgeW91IGhhdmUgYSBaQUMsIFpCQywgb3IgWk5TIHN0b3JhZ2UgZGV2aWNlLlxcbiAxMDU6XFx0XFxuIDEwNjpcXHRjb25maWcgQkxLX0RFVl9USFJPVFRMSU5HXFxuIDEwNzpcXHRcXHRib29sIFxcXCJCbG9jayBsYXllciBiaW8gdGhyb3R0bGluZyBzdXBwb3J0XFxcIlxcbiAxMDg6XFx0XFx0ZGVwZW5kcyBvbiBCTEtfQ0dST1VQXFxuIDEwOTpcXHRcXHRzZWxlY3QgQkxLX0NHUk9VUF9SV1NUQVRcXG4gMTEwOlxcdFxcdGhlbHBcXG4gMTExOlxcdFxcdEJsb2NrIGxheWVyIGJpbyB0aHJvdHRsaW5nIHN1cHBvcnQuIEl0IGNhbiBiZSB1c2VkIHRvIGxpbWl0XFxuIDExMjpcXHRcXHR0aGUgSU8gcmF0ZSB0byBhIGRldmljZS4gSU8gcmF0ZSBwb2xpY2llcyBhcmUgcGVyIGNncm91cCBhbmRcXG4gMTEzOlxcdFxcdG9uZSBuZWVkcyB0byBtb3VudCBhbmQgdXNlIGJsa2lvIGNncm91cCBjb250cm9sbGVyIGZvciBjcmVhdGluZ1xcbiAxMTQ6XFx0XFx0Y2dyb3VwcyBhbmQgc3BlY2lmeWluZyBwZXIgZGV2aWNlIElPIHJhdGUgcG9saWNpZXMuXFxuIDExNTpcXHRcXG4gMTE2OlxcdFxcdFNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9ibGtpby1jb250cm9sbGVyLnJzdCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cXG4gMTE3OlxcdFxcbiAxMTg6XFx0Y29uZmlnIEJMS19XQlRcXG4gMTE5OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBibG9jayBkZXZpY2Ugd3JpdGViYWNrIHRocm90dGxpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDE4OjEyOjM1LjQwMDEyODczMVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjU5NzA3OTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCbG9jayBUaHJvdHRsaW5nIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyByZWxhdGVkIHRvIGJsb2NrIGRldmljZSB0aHJvdHRsaW5nLCB3aGljaCBoaW5nZXMgb24gdGhlIGBCTEtfQ0dST1VQYCBhbmQsIG1vcmUgc3BlY2lmaWNhbGx5LCBlbmFibGluZyBgQkxLX0RFVl9USFJPVFRMSU5HYC4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gYSBmZXcga2V5IHN5bWJvbHM6IGB0Z19zZXRfY29uZl91NjRgLCBgdGdfc2V0X2NvbmZfdWludGAsIGB0Z19zZXRfbGltaXRgLCBhbmQgYF9fYmxrX3Rocm90bF9iaW9gLlxuXG5JJ3ZlIGNvbmZpcm1lZCB0aGF0IGB0Z19zZXRfY29uZl91NjRgIGFuZCBgdGdfc2V0X2NvbmZfdWludGAgYXJlIGluZGVlZCBjZ3JvdXAgdjEgd3JpdGUgaGFuZGxlcnMsIGFuZCBgdGdfc2V0X2xpbWl0YCBpcyBhIGNncm91cCB2MiB3cml0ZSBoYW5kbGVyLiBgX19ibGtfdGhyb3RsX2Jpb2AgaXMgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50IGZvciBiaW8gdGhyb3R0bGluZywgc28gdGhhdOKAmXMgYSBwcmltYXJ5IHRhcmdldC5cblxuSSBhbHNvIGNoZWNrZWQgZm9yIG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucy4gSSBmb3VuZCBgdGdfZGlzcGF0Y2hfaW9wc190aW1lYCwgYnV0IHRoYXQncyBzdGF0aWMsIHNvIG15IGZvY3VzIHJlbWFpbnMgb24gYF9fYmxrX3Rocm90bF9iaW9gIHNpbmNlIHRoYXQgaXMgd2hhdCBjYWxscyBpdC5cblxuVGhlIGFjdHVhbCBjaGFuZ2VzIGludm9sdmUgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBkaXZpZGUtYnktemVybyBlcnJvciBpbiBgdGdfd2l0aGluX2lvcHNfbGltaXQoKWAgd2l0aGluIGB0Z19kaXNwYXRjaF9pb3BzX3RpbWUoKWAuIEl0IGhhbmRsZXMgdGhlIGBpb3BzX2xpbWl0ID09IDBgIGNhc2UgY29ycmVjdGx5IG5vdywgdHJlYXRpbmcgaXQgYXMgdW5saW1pdGVkLiBBZGRpdGlvbmFsbHksIHRoZXkndmUgZml4ZWQgYSBwb3RlbnRpYWwgdHJ1bmNhdGlvbiBpc3N1ZSBpbiBgdGdfc2V0X2NvbmYoKWAgYnkgdXNpbmcgYG1pbih2LCAodTY0KVVJTlRfTUFYKWAgd2hlbiBjYXN0aW5nLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2U7IGl0J3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIGFuZCB0aG9zZSBmb2N1cyBzeW1ib2xzIHdpbGwgYmUgdGhlIGtleSB0byB0cmlnZ2VyaW5nIGFuZCB0ZXN0aW5nIGl0LiBJJ3ZlIGFsc28gY2hlY2tlZCBhbmQgdmVyaWZpZWQgdGhhdCB0aG9zZSBmdW5jdGlvbnMsIGB0Z19zZXRfY29uZl91NjRgIGFuZCBgdGdfc2V0X2NvbmZfdWludGAgYXJlIGRlZmluZWQgaW4gdGhlIGBibG9jay9ibGstdGhyb3R0bGUuY2AgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxMDUsIk91dHB1dFRva2VucyI6MTMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMTg6MTI6NDMuNjU5ODM4NTI1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAxNTYyMTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfVEhST1RUTElOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRnX3NldF9jb25mX3U2NFwiLFxuICAgIFwidGdfc2V0X2NvbmZfdWludFwiLFxuICAgIFwidGdfc2V0X2xpbWl0XCIsXG4gICAgXCJfX2Jsa190aHJvdGxfYmlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBkaXZpZGUtYnktemVybyBidWcgaW4gdGhlIGJsb2NrIGxheWVyJ3MgYmlvIHRocm90dGxpbmcgbG9naWMgKGJsay10aHJvdHRsZSkgYW5kIGFuIGludGVnZXIgdHJ1bmNhdGlvbiBpc3N1ZSB3aGVuIHNldHRpbmcgY2dyb3VwIGxpbWl0cy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyByZWFjaGFibGUgdmlhIGNncm91cGZzIHdyaXRlcyBhbmQgYmxvY2sgSU8gb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX1RIUk9UVExJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Z19zZXRfY29uZl91NjRcIixcbiAgICBcInRnX3NldF9jb25mX3VpbnRcIixcbiAgICBcInRnX3NldF9saW1pdFwiLFxuICAgIFwiX19ibGtfdGhyb3RsX2Jpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgZGl2aWRlLWJ5LXplcm8gYnVnIGluIHRoZSBibG9jayBsYXllcidzIGJpbyB0aHJvdHRsaW5nIGxvZ2ljIChibGstdGhyb3R0bGUpIGFuZCBhbiBpbnRlZ2VyIHRydW5jYXRpb24gaXNzdWUgd2hlbiBzZXR0aW5nIGNncm91cCBsaW1pdHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgcmVhY2hhYmxlIHZpYSBjZ3JvdXBmcyB3cml0ZXMgYW5kIGJsb2NrIElPIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmf6vd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-15 17:55:21 +0000 UTC FinishedAt: 2026-07-15 18:12:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "58717b2a1365d06c8c64b72aa948541b53fe31eb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_THROTTLING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "58717b2a1365d06c8c64b72aa948541b53fe31eb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_THROTTLING" ], "series_id": "c4fbc5f2-52af-432a-a2a7-391c1e4c3894" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "tg_set_conf_u64", "tg_set_conf_uint", "tg_set_limit", "__blk_throtl_bio" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDE4OjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfVEhST1RUTElORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RnX3NldF9jb25mX3U2NCYjMzQ7LAogICAgJiMzNDt0Z19zZXRfY29uZl91aW50JiMzNDssCiAgICAmIzM0O3RnX3NldF9saW1pdCYjMzQ7LAogICAgJiMzNDtfX2Jsa190aHJvdGxfYmlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZGl2aWRlLWJ5LXplcm8gYnVnIGluIHRoZSBibG9jayBsYXllciYjMzk7cyBiaW8gdGhyb3R0bGluZyBsb2dpYyAoYmxrLXRocm90dGxlKSBhbmQgYW4gaW50ZWdlciB0cnVuY2F0aW9uIGlzc3VlIHdoZW4gc2V0dGluZyBjZ3JvdXAgbGltaXRzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHJlYWNoYWJsZSB2aWEgY2dyb3VwZnMgd3JpdGVzIGFuZCBibG9jayBJTyBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDE4OjExPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDU5MGFkZjU4YTI0YzZmNjJjMjE3ODM4NGNhMjg3NTI2ZmM4N2JjM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDE1IDE4OjExOjAxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay10aHJvdHRsZS5jIGIvYmxvY2svYmxrLXRocm90dGxlLmNcbmluZGV4IGZmYzNiNzAwNjVkNGIxLi45OTAwNDQzYjBhZDUyNiAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay10aHJvdHRsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstdGhyb3R0bGUuY1xuQEAgLTg4Myw3ICYjNDM7ODgzLDEyIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHRnX2Rpc3BhdGNoX2lvcHNfdGltZShzdHJ1Y3QgdGhyb3RsX2dycCAqdGcsIHN0cnVjdCBiaW8gKmJpXG4gXHR1MzIgaW9wc19saW1pdCA9IHRnX2lvcHNfbGltaXQodGcsIHJ3KTtcbiBcdHVuc2lnbmVkIGxvbmcgaW9wc193YWl0O1xuIFxuLVx0aWYgKGlvcHNfbGltaXQgPT0gVUlOVF9NQVggfHwgdGctXHUwMDNlZmxhZ3MgXHUwMDI2IFRIUk9UTF9UR19DQU5DRUxJTkcpXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBpb3BzX2xpbWl0ID09IDAgaXMgbm90IGEgdmFsaWQgbGltaXQuIFRyZWF0IGl0IGFzIHVubGltaXRlZCBzbyB3ZVxuJiM0MztcdCAqIG5ldmVyIHJlYWNoIHRoZSBIWiAvIGlvcHNfbGltaXQgZGl2aWRlIGluIHRnX3dpdGhpbl9pb3BzX2xpbWl0KCkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGlvcHNfbGltaXQgPT0gVUlOVF9NQVggfHwgaW9wc19saW1pdCA9PSAwIHx8XG4mIzQzO1x0ICAgIHRnLVx1MDAzZWZsYWdzIFx1MDAyNiBUSFJPVExfVEdfQ0FOQ0VMSU5HKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdHRnX3VwZGF0ZV9zbGljZSh0ZywgcncpO1xuQEAgLTEzODMsMTAgJiM0MzsxMzg4LDEyIEBAIHN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbiBcdHRnID0gYmxrZ190b190ZyhjdHguYmxrZyk7XG4gXHR0Z191cGRhdGVfY2FycnlvdmVyKHRnKTtcbiBcbiYjNDM7XHR2b2lkICpmaWVsZCA9ICh2b2lkICopdGcgJiM0Mzsgb2ZfY2Z0KG9mKS1cdTAwM2Vwcml2YXRlO1xuJiM0MztcbiBcdGlmIChpc191NjQpXG4tXHRcdCoodTY0ICopKCh2b2lkICopdGcgJiM0Mzsgb2ZfY2Z0KG9mKS1cdTAwM2Vwcml2YXRlKSA9IHY7XG4mIzQzO1x0XHQqKHU2NCAqKWZpZWxkID0gdjtcbiBcdGVsc2Vcbi1cdFx0Kih1bnNpZ25lZCBpbnQgKikoKHZvaWQgKil0ZyAmIzQzOyBvZl9jZnQob2YpLVx1MDAzZXByaXZhdGUpID0gdjtcbiYjNDM7XHRcdCoodW5zaWduZWQgaW50ICopZmllbGQgPSBtaW4odiwgKHU2NClVSU5UX01BWCk7XG4gXG4gXHR0Z19jb25mX3VwZGF0ZWQodGcsIGZhbHNlKTtcbiBcdHJldCA9IDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMTg6MTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9USFJPVFRMSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGdfc2V0X2NvbmZfdTY0JiMzNDssCiAgICAmIzM0O3RnX3NldF9jb25mX3VpbnQmIzM0OywKICAgICYjMzQ7dGdfc2V0X2xpbWl0JiMzNDssCiAgICAmIzM0O19fYmxrX3Rocm90bF9iaW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBkaXZpZGUtYnktemVybyBidWcgaW4gdGhlIGJsb2NrIGxheWVyJiMzOTtzIGJpbyB0aHJvdHRsaW5nIGxvZ2ljIChibGstdGhyb3R0bGUpIGFuZCBhbiBpbnRlZ2VyIHRydW5jYXRpb24gaXNzdWUgd2hlbiBzZXR0aW5nIGNncm91cCBsaW1pdHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgcmVhY2hhYmxlIHZpYSBjZ3JvdXBmcyB3cml0ZXMgYW5kIGJsb2NrIElPIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDA1OTBhZGY1OGEyNGM2ZjYyYzIxNzgzODRjYTI4NzUyNmZjODdiYzMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAxNSAxODoxMTowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay10aHJvdHRsZS5jIGIvYmxvY2svYmxrLXRocm90dGxlLmMKaW5kZXggZmZjM2I3MDA2NWQ0YjEuLjk5MDA0NDNiMGFkNTI2IDEwMDY0NAotLS0gYS9ibG9jay9ibGstdGhyb3R0bGUuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstdGhyb3R0bGUuYwpAQCAtODgzLDcgJiM0Mzs4ODMsMTIgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgdGdfZGlzcGF0Y2hfaW9wc190aW1lKHN0cnVjdCB0aHJvdGxfZ3JwICp0Zywgc3RydWN0IGJpbyAqYmkKIAl1MzIgaW9wc19saW1pdCA9IHRnX2lvcHNfbGltaXQodGcsIHJ3KTsKIAl1bnNpZ25lZCBsb25nIGlvcHNfd2FpdDsKIAotCWlmIChpb3BzX2xpbWl0ID09IFVJTlRfTUFYIHx8IHRnLSZndDtmbGFncyAmYW1wOyBUSFJPVExfVEdfQ0FOQ0VMSU5HKQomIzQzOwkvKgomIzQzOwkgKiBpb3BzX2xpbWl0ID09IDAgaXMgbm90IGEgdmFsaWQgbGltaXQuIFRyZWF0IGl0IGFzIHVubGltaXRlZCBzbyB3ZQomIzQzOwkgKiBuZXZlciByZWFjaCB0aGUgSFogLyBpb3BzX2xpbWl0IGRpdmlkZSBpbiB0Z193aXRoaW5faW9wc19saW1pdCgpLgomIzQzOwkgKi8KJiM0MzsJaWYgKGlvcHNfbGltaXQgPT0gVUlOVF9NQVggfHwgaW9wc19saW1pdCA9PSAwIHx8CiYjNDM7CSAgICB0Zy0mZ3Q7ZmxhZ3MgJmFtcDsgVEhST1RMX1RHX0NBTkNFTElORykKIAkJcmV0dXJuIDA7CiAKIAl0Z191cGRhdGVfc2xpY2UodGcsIHJ3KTsKQEAgLTEzODMsMTAgJiM0MzsxMzg4LDEyIEBAIHN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwKIAl0ZyA9IGJsa2dfdG9fdGcoY3R4LmJsa2cpOwogCXRnX3VwZGF0ZV9jYXJyeW92ZXIodGcpOwogCiYjNDM7CXZvaWQgKmZpZWxkID0gKHZvaWQgKil0ZyAmIzQzOyBvZl9jZnQob2YpLSZndDtwcml2YXRlOwomIzQzOwogCWlmIChpc191NjQpCi0JCSoodTY0ICopKCh2b2lkICopdGcgJiM0Mzsgb2ZfY2Z0KG9mKS0mZ3Q7cHJpdmF0ZSkgPSB2OwomIzQzOwkJKih1NjQgKilmaWVsZCA9IHY7CiAJZWxzZQotCQkqKHVuc2lnbmVkIGludCAqKSgodm9pZCAqKXRnICYjNDM7IG9mX2NmdChvZiktJmd0O3ByaXZhdGUpID0gdjsKJiM0MzsJCSoodW5zaWduZWQgaW50ICopZmllbGQgPSBtaW4odiwgKHU2NClVSU5UX01BWCk7CiAKIAl0Z19jb25mX3VwZGF0ZWQodGcsIGZhbHNlKTsKIAlyZXQgPSAwOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAxODoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTMzCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCbGstVGhyb3R0bGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIGBibG9jay9ibGstdGhyb3R0bGUuY2AuIEl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2ggYXQgZmlyc3QgZ2xhbmNlLiBJdCYjMzk7cyBtb2RpZnlpbmcgYSBjb3VwbGUgb2YgZnVuY3Rpb25zOiBgdGdfZGlzcGF0Y2hfaW9wc190aW1lYCBhbmQgYHRnX3NldF9jb25mYC4gVGhlIGtleSB0aGluZyBoZXJlIGlzIHRoZSBoYW5kbGluZyBvZiB0aGUgSU9QUyBsaW1pdC4gVGhlIHBhdGNoIHN1Z2dlc3RzIHRoYXQgaWYgYGlvcHNfbGltaXRgIGlzIHNldCB0byB6ZXJvLCBpdCBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgZWZmZWN0aXZlbHkgdW5saW1pdGVkLiBUaGF0JiMzOTtzIGEgY29tbW9uIHBhdHRlcm4sIGFuZCBtYWtlcyBzZW5zZSAtIHplcm8gaXMgb2Z0ZW4gdXNlZCBhcyBhIHNwZWNpYWwgdmFsdWUgdG8gZGlzYWJsZSBhIGZlYXR1cmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBoYW5kbGVkIGNvcnJlY3RseSBhY3Jvc3MgdGhlIGJvYXJkLCB0aG91Z2gsIGVzcGVjaWFsbHkgaW4gZWRnZSBjYXNlcy4KClRoZW4sIHRoZSBzZWNvbmQgcGFydCBvZiB0aGUgcGF0Y2ggYWRkcmVzc2VzIGB0Z19zZXRfY29uZmAuIEl0IGFwcGVhcnMgdG8gYmUgYWRkaW5nIGEgY2FwIHRvIHRoZSB2YWx1ZSBgdmAgYmVmb3JlIGl0JiMzOTtzIGFzc2lnbmVkIHRvIGFuIGB1bnNpZ25lZCBpbnRgIGZpZWxkLiBTcGVjaWZpY2FsbHksIHRoZSBjYXAgaXMgYFVJTlRfTUFYYC4gVGhpcyBpcyBpbXBvcnRhbnQsIHByZXZlbnRpbmcgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzIGR1cmluZyBjb25maWd1cmF0aW9uLCB3aGljaCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiBJdCYjMzk7cyBnb29kIHByYWN0aWNlIHRvIGVuc3VyZSB0aGUgc2FuaXR5IG9mIHRoZSBpbnB1dCBkYXRhLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHVuc2lnbmVkIGludGVnZXIgdHlwZXMgYW5kIHBvdGVudGlhbCB1c2VyIGNvbmZpZ3VyYXRpb24uIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBgdmAgYW5kIHRoaXMgYXNzaWdubWVudC4gSSB3YW50IHRvIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXNlIGd1YXJkcmFpbHMgYXJlIHN1ZmZpY2llbnQgZm9yIHRoZSBraW5kcyBvZiB2YWx1ZXMgd2UgZXhwZWN0IGFuZCB0aGUgcmFuZ2Ugb2YgdmFsdWVzIHRoZSB1bnNpZ25lZCBpbnRlZ2VyIGNhbiBoYW5kbGUuIEkgc2hvdWxkIHByb2JhYmx5IGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIG5vdyB0byBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbi4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAxODoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Z19kaXNwYXRjaF9pb3BzX3RpbWUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLXRocm90dGxlLmM9ODYxPXN0YXRpYyB1bnNpZ25lZCBsb25nIHRnX2Rpc3BhdGNoX2Jwc190aW1lKHN0cnVjdCB0aHJvdGxfZ3JwICp0Zywgc3RydWN0IGJpbyAqYmlvKVxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTg3OS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jOjg4MDpzdGF0aWMgdW5zaWduZWQgbG9uZyB0Z19kaXNwYXRjaF9pb3BzX3RpbWUoc3RydWN0IHRocm90bF9ncnAgKnRnLCBzdHJ1Y3QgYmlvICpiaW8pXG5ibG9jay9ibGstdGhyb3R0bGUuYy04ODEte1xuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jPTkwNT1zdGF0aWMgdW5zaWduZWQgbG9uZyB0Z19kaXNwYXRjaF90aW1lKHN0cnVjdCB0aHJvdGxfZ3JwICp0Zywgc3RydWN0IGJpbyAqYmlvKVxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTkyOC1cbmJsb2NrL2Jsay10aHJvdHRsZS5jOjkyOTpcdHJldHVybiB0Z19kaXNwYXRjaF9pb3BzX3RpbWUodGcsIGJpbyk7XG5ibG9jay9ibGstdGhyb3R0bGUuYy05MzAtfVxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jPTE3NzE9c3RhdGljIGJvb2wgdGdfd2l0aGluX2xpbWl0KHN0cnVjdCB0aHJvdGxfZ3JwICp0Zywgc3RydWN0IGJpbyAqYmlvLCBib29sIHJ3KVxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE3ODAtXHRcdHJldHVybiBzcS1cdTAwM2Vucl9xdWV1ZWRfaW9wc1tyd10gPT0gMCBcdTAwMjZcdTAwMjZcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE3ODE6XHRcdFx0XHR0Z19kaXNwYXRjaF9pb3BzX3RpbWUodGcsIGJpbykgPT0gMDtcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE3ODItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMTg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGdfc2V0X2NvbmYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLXRocm90dGxlLmM9MTMyMz1zdGF0aWMgaW50IGJsa190aHJvdGxfaW5pdChzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xMzU2LVxuYmxvY2svYmxrLXRocm90dGxlLmM6MTM1NzpzdGF0aWMgc3NpemVfdCB0Z19zZXRfY29uZihzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xMzU4LVx0XHRcdCAgIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZiwgYm9vbCBpc191NjQpXG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQwOC1cbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0MDk6c3RhdGljIHNzaXplX3QgdGdfc2V0X2NvbmZfdTY0KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MTAtXHRcdFx0ICAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MTEte1xuYmxvY2svYmxrLXRocm90dGxlLmM6MTQxMjpcdHJldHVybiB0Z19zZXRfY29uZihvZiwgYnVmLCBuYnl0ZXMsIG9mZiwgdHJ1ZSk7XG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDEzLX1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MTQtXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDE1OnN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mX3VpbnQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQxNi1cdFx0XHRcdGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MTcte1xuYmxvY2svYmxrLXRocm90dGxlLmM6MTQxODpcdHJldHVybiB0Z19zZXRfY29uZihvZiwgYnVmLCBuYnl0ZXMsIG9mZiwgZmFsc2UpO1xuYmxvY2svYmxrLXRocm90dGxlLmMtMTQxOS19XG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmM9MTQ0Nz1zdGF0aWMgc3RydWN0IGNmdHlwZSB0aHJvdGxfbGVnYWN5X2ZpbGVzW10gPSB7XG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ1MS1cdFx0LnNlcV9zaG93ID0gdGdfcHJpbnRfY29uZl91NjQsXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDUyOlx0XHQud3JpdGUgPSB0Z19zZXRfY29uZl91NjQsXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDUzLVx0fSxcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDU3LVx0XHQuc2VxX3Nob3cgPSB0Z19wcmludF9jb25mX3U2NCxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0NTg6XHRcdC53cml0ZSA9IHRnX3NldF9jb25mX3U2NCxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NTktXHR9LFxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NjMtXHRcdC5zZXFfc2hvdyA9IHRnX3ByaW50X2NvbmZfdWludCxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0NjQ6XHRcdC53cml0ZSA9IHRnX3NldF9jb25mX3VpbnQsXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDY1LVx0fSxcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDY5LVx0XHQuc2VxX3Nob3cgPSB0Z19wcmludF9jb25mX3VpbnQsXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDcwOlx0XHQud3JpdGUgPSB0Z19zZXRfY29uZl91aW50LFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ3MS1cdH0sXG4tLVxuZHJpdmVycy9ncHUvZHJtL3N0aS9zdGlfY3J0Yy5jPTQ5PXN0aV9jcnRjX21vZGVfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3N0aS9zdGlfY3J0Yy5jLTg1LVxuZHJpdmVycy9ncHUvZHJtL3N0aS9zdGlfY3J0Yy5jOjg2Olx0c3RpX3Z0Z19zZXRfY29uZmlnKGNvbXBvLVx1MDAzZXZ0Z1ttaXhlci1cdTAwM2VpZF0sIFx1MDAyNmNydGMtXHUwMDNlbW9kZSk7XG5kcml2ZXJzL2dwdS9kcm0vc3RpL3N0aV9jcnRjLmMtODctXG4tLVxuZHJpdmVycy9ncHUvZHJtL3N0aS9zdGlfdnRnLmM9Mjg5PXN0YXRpYyB2b2lkIHZ0Z19lbmFibGVfaXJxKHN0cnVjdCBzdGlfdnRnICp2dGcpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3N0aS9zdGlfdnRnLmMtMjk2LVxuZHJpdmVycy9ncHUvZHJtL3N0aS9zdGlfdnRnLmM6Mjk3OnZvaWQgc3RpX3Z0Z19zZXRfY29uZmlnKHN0cnVjdCBzdGlfdnRnICp2dGcsXG5kcml2ZXJzL2dwdS9kcm0vc3RpL3N0aV92dGcuYy0yOTgtXHRcdGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9zdGkvc3RpX3Z0Zy5oPTIzPXN0cnVjdCBzdGlfdnRnICpvZl92dGdfZmluZChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTtcbmRyaXZlcnMvZ3B1L2RybS9zdGkvc3RpX3Z0Zy5oOjI0OnZvaWQgc3RpX3Z0Z19zZXRfY29uZmlnKHN0cnVjdCBzdGlfdnRnICp2dGcsXG5kcml2ZXJzL2dwdS9kcm0vc3RpL3N0aV92dGcuaC0yNS1cdFx0Y29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDE4OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMzIKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQmxrLVRocm90dGxlIEJ1ZyBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtBaCwgYSBjbGFzc2ljIGRpdmlkZS1ieS16ZXJvIHZ1bG5lcmFiaWxpdHkhJiMzNDsgVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gc2VlbXMgdG8gYmUgaW4gYGJsb2NrL2Jsay10aHJvdHRsZS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGlvcHNfbGltaXRgIHZhcmlhYmxlLiBJdCBhcHBlYXJzIHRoZXJlIHdhcyBhIHNjZW5hcmlvIHdoZXJlIHRoaXMgY291bGQgYmUgaW5pdGlhbGl6ZWQgdG8gemVybywgd2hpY2ggdGhlbiBsZWQgdG8gYSBuYXN0eSBkaXZpZGUtYnktemVybyBlcnJvciB3aXRoaW4gdGhlIGB0Z193aXRoaW5faW9wc19saW1pdCgpYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyBhIHRleHRib29rIGV4YW1wbGUgb2YgYSBwcmV2ZW50YWJsZSBjb2RpbmcgZXJyb3IgdGhhdCBuZWVkcyB0byBiZSBhZGRyZXNzZWQgaW1tZWRpYXRlbHkuCgpUaGUgcGF0Y2ggc2VlbXMgdG8gdGFrZSBhIHR3by1wcm9uZ2VkIGFwcHJvYWNoLiBGaXJzdCwgaXQgZGlyZWN0bHkgZml4ZXMgdGhlIGBpb3BzX2xpbWl0YCBpc3N1ZSB0byBwcmV2ZW50IHRoZSBkaXZpc2lvbiBieSB6ZXJvLiBTZWNvbmRseSwgSSYjMzk7bSBub3RpbmcgdGhlIGNhcCBvbiBgdmAgdG8gYFVJTlRfTUFYYCB3aXRoaW4gYHRnX3NldF9jb25mYCB3aGVuIGFzc2lnbmluZyB0byBhbiBgdW5zaWduZWQgaW50YCBmaWVsZC4gQSB3aXNlIG1vdmUsIHByZXZlbnRpbmcgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzIGFuZCB1bmV4cGVjdGVkIGJlaGF2aW9yLiBUaGlzIGlzIGNydWNpYWwgZm9yIG1haW50YWluaW5nIGRhdGEgaW50ZWdyaXR5IHdoZW4gZGVhbGluZyB3aXRoIGxpbWl0cyBhbmQgdGhyb3R0bGluZyBjb25maWd1cmF0aW9ucy4KCkZyb20gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgYmxvY2sgbGF5ZXIsIHRoaXMgcGF0Y2ggaXMgdGFyZ2V0aW5nIGEgZnVuY3Rpb25hbCBhcmVhIHdpdGhpbiB0aGUgYmxrLXRocm90dGxlIGNncm91cCBzdWJzeXN0ZW0uIFRoZSBleHBvc3VyZSBpcyB2aWEgY2dyb3VwZnMgd3JpdGVzIHRvIGNvbnRyb2wgdGhlIHRocm90dGxpbmcgYmVoYXZpb3IsIGxpa2UgYGJsa2lvLnRocm90dGxlLnJlYWRfaW9wc19kZXZpY2VgIG9yIGBibGtpby50aHJvdHRsZS53cml0ZV9pb3BzX2RldmljZWAgYW5kIHNpbWlsYXIgZmlsZXMuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93IGJlY2F1c2UgaXQgdGVsbHMgbWUgd2hlcmUgdGhpcyBidWcgaXMgcmVhY2hhYmxlLgoKTm93LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBlbmFibGVkLiBJIHNob3VsZCBxdWlja2x5IGNoZWNrIGlmIGBDT05GSUdfQkxLX0RFVl9USFJPVFRMSU5HYCBpcyBzZXQsIHNpbmNlIHRoYXQgd291bGQgYmUgdGhlIGtleSBpbmRpY2F0b3IgdGhhdCB0aGlzIHBhcnRpY3VsYXIgY29kZSBwYXRoIGlzIGV2ZW4gYWN0aXZlIGluIGEgZ2l2ZW4ga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoaXMgd2lsbCBnaXZlIG1lIGZ1cnRoZXIgY29udGV4dCBhYm91dCB0aGUgaW1wYWN0IGFuZCBsaWtlbHkgc2V2ZXJpdHkgb2YgdGhpcyBmaXggaW4gdGhlIHJlYWwgd29ybGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMTg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QkxLX0RFVl9USFJPVFRMSU5HJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2Jsa2lvLWNvbnRyb2xsZXIucnN0PTI3PUVuYWJsZSB0aHJvdHRsaW5nIGluIGJsb2NrIGxheWVyOjpcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2Jsa2lvLWNvbnRyb2xsZXIucnN0LTI4LVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvYmxraW8tY29udHJvbGxlci5yc3Q6Mjk6XHRDT05GSUdfQkxLX0RFVl9USFJPVFRMSU5HPXlcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2Jsa2lvLWNvbnRyb2xsZXIucnN0LTMwLVxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2Jsa2lvLWNvbnRyb2xsZXIucnN0PTgxPVZhcmlvdXMgdXNlciB2aXNpYmxlIGNvbmZpZyBvcHRpb25zXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvYmxraW8tY29udHJvbGxlci5yc3QtOTAtXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9ibGtpby1jb250cm9sbGVyLnJzdDo5MTogIENPTkZJR19CTEtfREVWX1RIUk9UVExJTkdcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2Jsa2lvLWNvbnRyb2xsZXIucnN0LTkyLVx0ICBFbmFibGUgYmxvY2sgZGV2aWNlIHRocm90dGxpbmcgc3VwcG9ydCBpbiBibG9jayBsYXllci5cbi0tXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnPTc5PUNPTkZJR19CTEtfREVWX1pPTkVEPXlcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWc6ODA6Q09ORklHX0JMS19ERVZfVEhST1RUTElORz15XG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnLTgxLUNPTkZJR19CTEtfV0JUPXlcbi0tXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnPTk0PUNPTkZJR19CTEtfREVWX1pPTkVEPXlcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc6OTU6Q09ORklHX0JMS19ERVZfVEhST1RUTElORz15XG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnLTk2LUNPTkZJR19CTEtfV0JUPXlcbi0tXG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnPTUzPUNPTkZJR19NT0RVTEVfVU5MT0FEPXlcbmFyY2gvcmlzY3YvY29uZmlncy9kZWZjb25maWc6NTQ6Q09ORklHX0JMS19ERVZfVEhST1RUTElORz15XG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnLTU1LUNPTkZJR19TUEFSU0VNRU1fTUFOVUFMPXlcbi0tXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc9ODQ9Q09ORklHX01PRFVMRV9TSUdfU0hBMjU2PXlcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZzo4NTpDT05GSUdfQkxLX0RFVl9USFJPVFRMSU5HPXlcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZy04Ni1DT05GSUdfQkxLX1dCVD15XG4tLVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnPTc4PUNPTkZJR19NT0RVTEVfU0lHX1NIQTI1Nj15XG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6Nzk6Q09ORklHX0JMS19ERVZfVEhST1RUTElORz15XG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWctODAtQ09ORklHX0JMS19XQlQ9eVxuLS1cbmJsb2NrL0tjb25maWc9OTc9Y29uZmlnIEJMS19ERVZfWk9ORURcbi0tXG5ibG9jay9LY29uZmlnLTEwNS1cbmJsb2NrL0tjb25maWc6MTA2OmNvbmZpZyBCTEtfREVWX1RIUk9UVExJTkdcbmJsb2NrL0tjb25maWctMTA3LVx0Ym9vbCBcJiMzNDtCbG9jayBsYXllciBiaW8gdGhyb3R0bGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxuYmxvY2svTWFrZWZpbGU9MjE9b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfRkNfQVBQSUQpICYjNDM7PSBibGstY2dyb3VwLWZjLWFwcGlkLm9cbmJsb2NrL01ha2VmaWxlOjIyOm9iai0kKENPTkZJR19CTEtfREVWX1RIUk9UVExJTkcpXHQmIzQzOz0gYmxrLXRocm90dGxlLm9cbmJsb2NrL01ha2VmaWxlLTIzLW9iai0kKENPTkZJR19CTEtfQ0dST1VQX0lPUFJJTylcdCYjNDM7PSBibGstaW9wcmlvLm9cbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuaD0xNDA9c3RhdGljIGlubGluZSBzdHJ1Y3QgdGhyb3RsX2dycCAqYmxrZ190b190ZyhzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2cpXG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmgtMTQ3LSAqL1xuYmxvY2svYmxrLXRocm90dGxlLmg6MTQ4OiNpZm5kZWYgQ09ORklHX0JMS19ERVZfVEhST1RUTElOR1xuYmxvY2svYmxrLXRocm90dGxlLmgtMTQ5LXN0YXRpYyBpbmxpbmUgdm9pZCBibGtfdGhyb3RsX2V4aXQoc3RydWN0IGdlbmRpc2sgKmRpc2spIHsgfVxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5oPTE1MT1zdGF0aWMgaW5saW5lIHZvaWQgYmxrX3Rocm90bF9jYW5jZWxfYmlvcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykgeyB9XG5ibG9jay9ibGstdGhyb3R0bGUuaDoxNTI6I2Vsc2UgLyogQ09ORklHX0JMS19ERVZfVEhST1RUTElORyAqL1xuYmxvY2svYmxrLXRocm90dGxlLmgtMTUzLXZvaWQgYmxrX3Rocm90bF9leGl0KHN0cnVjdCBnZW5kaXNrICpkaXNrKTtcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuaD0xOTY9c3RhdGljIGlubGluZSBib29sIGJsa190aHJvdGxfYmlvKHN0cnVjdCBiaW8gKmJpbylcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuaC0yMDYtfVxuYmxvY2svYmxrLXRocm90dGxlLmg6MjA3OiNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9USFJPVFRMSU5HICovXG5ibG9jay9ibGstdGhyb3R0bGUuaC0yMDgtXG4tLVxuaW5jbHVkZS9saW51eC9ibGtkZXYuaD00OTA9c3RydWN0IHJlcXVlc3RfcXVldWUge1xuLS1cbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtNjI5LVxuaW5jbHVkZS9saW51eC9ibGtkZXYuaDo2MzA6I2lmZGVmIENPTkZJR19CTEtfREVWX1RIUk9UVExJTkdcbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtNjMxLVx0LyogVGhyb3R0bGUgZGF0YSAqL1xuLS1cbmluaXQvS2NvbmZpZz0xMTEzPWNvbmZpZyBCTEtfQ0dST1VQXG4tLVxuaW5pdC9LY29uZmlnLTExMzAtXHRDT05GSUdfQkZRX0dST1VQX0lPU0NIRUQ9eTsgZm9yIGVuYWJsaW5nIHRocm90dGxpbmcgcG9saWN5LCBzZXRcbmluaXQvS2NvbmZpZzoxMTMxOlx0Q09ORklHX0JMS19ERVZfVEhST1RUTElORz15LlxuaW5pdC9LY29uZmlnLTExMzItXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy54ODZfNjQ9MTU9Q09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTYzODRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcueDg2XzY0OjE2OkNPTkZJR19CTEtfREVWX1RIUk9UVExJTkc9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy54ODZfNjQtMTctQ09ORklHX0JPTkRJTkc9eVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9jb25maWcuY29tbW9uPTExPUNPTkZJR19CTEtfREVWX1JBTT15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvY29uZmlnLmNvbW1vbjoxMjpDT05GSUdfQkxLX0RFVl9USFJPVFRMSU5HPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9jb25maWcuY29tbW9uLTEzLUNPTkZJR19CT05ESU5HPXlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAxODoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTAxCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQmxvY2sgRGV2aWNlIFRocm90dGxpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0aGUgZm9jdXMgaXMgY2xlYXJseSBvbiBgQkxLX0RFVl9USFJPVFRMSU5HYC4gUmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIHRvdWNoZWQgYXJlIGB0Z19kaXNwYXRjaF9pb3BzX3RpbWVgIGFuZCBgdGdfc2V0X2NvbmZgLiBOb3csIGB0Z19kaXNwYXRjaF9pb3BzX3RpbWVgIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQmIzM5O3MgY2FsbGVkIGJ5IGB0Z19kaXNwYXRjaF90aW1lYCwgd2hpY2gsIGluIHR1cm4sIGlzIGNhbGxlZCBieSBgdGdfZGlzcGF0Y2hfb25lX2Jpb2AgYW5kIGB0Z193aXRoaW5fbGltaXRgLiBUaGF0JiMzOTtzIHRoZSBmbG93LiBBbmQgYHRnX3NldF9jb25mYCBnZXRzIGNhbGxlZCBmcm9tIGB0Z19zZXRfY29uZl91NjRgIGFuZCBgdGdfc2V0X2NvbmZfdWludGAuCgpOb3cgdGhlIHF1ZXN0aW9uIGlzLCB3aGF0JiMzOTtzIGV4cG9zZWQsIGFuZCB3aGF0JiMzOTtzIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmc/IExldCYjMzk7cyBzZWUuLi4gYHRnX3NldF9jb25mX3U2NGAgYW5kIGB0Z19zZXRfY29uZl91aW50YCBhcmUgd3JpdGUgaGFuZGxlcnMgZm9yIGNncm91cCBmaWxlcy4gVGhhdCBtYWtlcyB0aGVtIGV4Y2VsbGVudCBjYW5kaWRhdGVzLCBnaXZlbiB0aGUgbmF0dXJlIG9mIGNncm91cHMuIFRoZXkmIzM5O3JlIGRlZmluaXRlbHkgZXhwb3NlZC4gQW5kLCBJIHNlZSBgYmxrX3Rocm90bF9iaW9gLCB3aGljaCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgYmlvIHRocm90dGxpbmcuCgpSaWdodCwgc28gYGJsa190aHJvdGxfYmlvYCBsb29rcyBsaWtlIHRoZSBvYnZpb3VzIG5leHQgc3RlcCBmb3IgY2xvc2VyIGluc3BlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMTg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrX3Rocm90bF9iaW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLWNvcmUuYz04MTc9dm9pZCBzdWJtaXRfYmlvX25vYWNjdChzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuYmxvY2svYmxrLWNvcmUuYy05MTgtXG5ibG9jay9ibGstY29yZS5jOjkxOTpcdGlmIChibGtfdGhyb3RsX2JpbyhiaW8pKVxuYmxvY2svYmxrLWNvcmUuYy05MjAtXHRcdHJldHVybjtcbi0tXG5ibG9jay9ibGstbWVyZ2UuYz0xMTk9c3RydWN0IGJpbyAqYmlvX3N1Ym1pdF9zcGxpdF9iaW9zZXQoc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBpbnQgc3BsaXRfc2VjdG9ycyxcbi0tXG5ibG9jay9ibGstbWVyZ2UuYy0xMzQtXHRcdGJpb19pb19lcnJvcihiaW8pO1xuYmxvY2svYmxrLW1lcmdlLmM6MTM1Olx0ZWxzZSBpZiAoIWJsa190aHJvdGxfYmlvKGJpbykpXG5ibG9jay9ibGstbWVyZ2UuYy0xMzYtXHRcdHN1Ym1pdF9iaW9fbm9hY2N0X25vY2hlY2soYmlvLCB0cnVlKTtcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYz0xNzcxPXN0YXRpYyBib29sIHRnX3dpdGhpbl9saW1pdChzdHJ1Y3QgdGhyb3RsX2dycCAqdGcsIHN0cnVjdCBiaW8gKmJpbywgYm9vbCBydylcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNzk4LVxuYmxvY2svYmxrLXRocm90dGxlLmM6MTc5OTpib29sIF9fYmxrX3Rocm90bF9iaW8oc3RydWN0IGJpbyAqYmlvKVxuYmxvY2svYmxrLXRocm90dGxlLmMtMTgwMC17XG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmg9MTQ5PXN0YXRpYyBpbmxpbmUgdm9pZCBibGtfdGhyb3RsX2V4aXQoc3RydWN0IGdlbmRpc2sgKmRpc2spIHsgfVxuYmxvY2svYmxrLXRocm90dGxlLmg6MTUwOnN0YXRpYyBpbmxpbmUgYm9vbCBibGtfdGhyb3RsX2JpbyhzdHJ1Y3QgYmlvICpiaW8pIHsgcmV0dXJuIGZhbHNlOyB9XG5ibG9jay9ibGstdGhyb3R0bGUuaC0xNTEtc3RhdGljIGlubGluZSB2b2lkIGJsa190aHJvdGxfY2FuY2VsX2Jpb3Moc3RydWN0IGdlbmRpc2sgKmRpc2spIHsgfVxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5oPTE1Mz12b2lkIGJsa190aHJvdGxfZXhpdChzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7XG5ibG9jay9ibGstdGhyb3R0bGUuaDoxNTQ6Ym9vbCBfX2Jsa190aHJvdGxfYmlvKHN0cnVjdCBiaW8gKmJpbyk7XG5ibG9jay9ibGstdGhyb3R0bGUuaC0xNTUtdm9pZCBibGtfdGhyb3RsX2NhbmNlbF9iaW9zKHN0cnVjdCBnZW5kaXNrICpkaXNrKTtcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuaD0xNjg9c3RhdGljIGlubGluZSBib29sIGJsa19zaG91bGRfdGhyb3RsKHN0cnVjdCBiaW8gKmJpbylcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuaC0xOTUtXG5ibG9jay9ibGstdGhyb3R0bGUuaDoxOTY6c3RhdGljIGlubGluZSBib29sIGJsa190aHJvdGxfYmlvKHN0cnVjdCBiaW8gKmJpbylcbmJsb2NrL2Jsay10aHJvdHRsZS5oLTE5Ny17XG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmgtMjA0LVxuYmxvY2svYmxrLXRocm90dGxlLmg6MjA1Olx0cmV0dXJuIF9fYmxrX3Rocm90bF9iaW8oYmlvKTtcbmJsb2NrL2Jsay10aHJvdHRsZS5oLTIwNi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDE4OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMzUKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYHRnX3NldF9jb25mYCBsb29rcyBwcm9taXNpbmcgZm9yIGZ1enppbmcuIEhvd2V2ZXIsIGEgc3RhdGljIGFuYWx5c2lzIHJldmVhbHMgdGhhdCBpdCYjMzk7cyBtb3JlIG9mIGEgd3JhcHBlciwgbm90IHRoZSBjb3JlIGZ1bmN0aW9uLiBUaGUgcmVhbCB3b3JrIGlzIGRvbmUgYnkgYHRnX3NldF9jb25mX3U2NGAgYW5kIGB0Z19zZXRfY29uZl91aW50YC4gV2UmIzM5O2xsIG5lZWQgdG8gZm9jdXMgb24gdGhvc2UuIFRoZSBzdGF0aWMgbmF0dXJlIG9mIGB0Z19kaXNwYXRjaF9pb3BzX3RpbWVgIG1ha2VzIGl0IGxlc3MgYXBwZWFsaW5nIGFzIGEgZnV6eiB0YXJnZXQsIHNvIHdlJiMzOTtsbCBieXBhc3MgaXQuIEkgbmVlZCB0byBkaWcgaW50byBgdGdfc2V0X2NvbmZfdTY0YCBhbmQgYHRnX3NldF9jb25mX3VpbnRgIHRvIHVuZGVyc3RhbmQgdGhlIGlucHV0cyBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMTg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGdfc2V0X2NvbmZfdTY0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay10aHJvdHRsZS5jPTEzNTc9c3RhdGljIHNzaXplX3QgdGdfc2V0X2NvbmYoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MDgtXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDA5OnN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mX3U2NChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDEwLVx0XHRcdCAgICAgICBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmM9MTQ0Nz1zdGF0aWMgc3RydWN0IGNmdHlwZSB0aHJvdGxfbGVnYWN5X2ZpbGVzW10gPSB7XG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ1MS1cdFx0LnNlcV9zaG93ID0gdGdfcHJpbnRfY29uZl91NjQsXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDUyOlx0XHQud3JpdGUgPSB0Z19zZXRfY29uZl91NjQsXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDUzLVx0fSxcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDU3LVx0XHQuc2VxX3Nob3cgPSB0Z19wcmludF9jb25mX3U2NCxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0NTg6XHRcdC53cml0ZSA9IHRnX3NldF9jb25mX3U2NCxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NTktXHR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAxODoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Z19zZXRfY29uZl91aW50JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay10aHJvdHRsZS5jPTE0MDk9c3RhdGljIHNzaXplX3QgdGdfc2V0X2NvbmZfdTY0KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDE0LVxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQxNTpzdGF0aWMgc3NpemVfdCB0Z19zZXRfY29uZl91aW50KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MTYtXHRcdFx0XHRjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmM9MTQ0Nz1zdGF0aWMgc3RydWN0IGNmdHlwZSB0aHJvdGxfbGVnYWN5X2ZpbGVzW10gPSB7XG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ2My1cdFx0LnNlcV9zaG93ID0gdGdfcHJpbnRfY29uZl91aW50LFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQ2NDpcdFx0LndyaXRlID0gdGdfc2V0X2NvbmZfdWludCxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NjUtXHR9LFxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NjktXHRcdC5zZXFfc2hvdyA9IHRnX3ByaW50X2NvbmZfdWludCxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0NzA6XHRcdC53cml0ZSA9IHRnX3NldF9jb25mX3VpbnQsXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDcxLVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMTg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE0MQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGJyZWFrZG93biBvZiB3aGF0IEkmIzM5O20gbG9va2luZyBhdDoKCioqSWRlbnRpZnlpbmcgdGhlIEtleSBUaHJvdHRsaW5nIENvbmZpZ3VyYXRpb24gRnVuY3Rpb25zKioKClJpZ2h0LCBzbyBJJiMzOTt2ZSB6ZXJvZWQgaW4gb24gYHRnX3NldF9jb25mX3U2NGAgYW5kIGB0Z19zZXRfY29uZl91aW50YC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBjcnVjaWFsIGZ1bmN0aW9ucyBmb3Igc2V0dGluZyB0aGUgdTY0IGFuZCB1aW50IGNvbmZpZ3VyYXRpb25zLCByZXNwZWN0aXZlbHksIHdpdGhpbiB0aGUgdGhyb3R0bGluZyBtZWNoYW5pc20uIEFuZCwgYXMgZXhwZWN0ZWQsIGBfX2Jsa190aHJvdGxfYmlvYCBpcyB0aGUgYmlnIG9uZSAtIHRoYXQmIzM5O3MgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIGFjdHVhbGx5IGFwcGx5aW5nIHRoZSBiaW8gdGhyb3R0bGluZyBsb2dpYy4gTm93LCBsZXQmIzM5O3MganVzdCBkb3VibGUtY2hlY2sgdGhhdCB0aG9zZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucyBhcmUgYWxzbyB1c2VkIGluIHRoZSBgdGhyb3RsX2ZpbGVzYCBjb250ZXh0LCBqdXN0IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAxODoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aHJvdGxfZmlsZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLXRocm90dGxlLmM9MTU0Nz1zdGF0aWMgc3NpemVfdCB0Z19zZXRfbGltaXQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE2MjgtXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNjI5OnN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHRocm90bF9maWxlc1tdID0ge1xuYmxvY2svYmxrLXRocm90dGxlLmMtMTYzMC1cdHtcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYz0xNjgyPXN0cnVjdCBibGtjZ19wb2xpY3kgYmxrY2dfcG9saWN5X3Rocm90bCA9IHtcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE2ODM6XHQuZGZsX2NmdHlwZXNcdFx0PSB0aHJvdGxfZmlsZXMsXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNjg0LVx0LmxlZ2FjeV9jZnR5cGVzXHRcdD0gdGhyb3RsX2xlZ2FjeV9maWxlcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMTg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU4OQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgVGhyb3R0bGluZyBDb25maWd1cmF0aW9uIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgdGhyb3R0bGluZyBjb2RlIGFuZCBub3RpY2luZyBzb21ldGhpbmcuIGB0Z19zZXRfY29uZl91NjRgIGFuZCBgdGdfc2V0X2NvbmZfdWludGAgYXJlIG5lc3RsZWQgcmlnaHQgdGhlcmUgaW4gYHRocm90bF9sZWdhY3lfZmlsZXNgLiBJbnRlcmVzdGluZy4gQnV0IHdhaXQsIGB0Z19zZXRfbGltaXRgIGlzIG92ZXIgaW4gYHRocm90bF9maWxlc2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLCBhbmQgcmlnaHQgbm93IGB0Z19zZXRfbGltaXRgIHNlZW1zIGxpa2UgdGhlIGtleS4gSSYjMzk7bGwgZm9jdXMgb24gdW5kZXJzdGFuZGluZyB0aGF0IG9uZSBmaXJzdCwgdGhlbiBtYXliZSBJJiMzOTtsbCBoYXZlIGEgYmV0dGVyIHBpY3R1cmUgb2YgdGhlIHdob2xlIHNldHVwLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gYHRnX3NldF9saW1pdGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDE4OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RnX3NldF9saW1pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstdGhyb3R0bGUuYz0xNTQwPXN0YXRpYyBpbnQgdGdfcHJpbnRfbGltaXQoc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNTQ2LVxuYmxvY2svYmxrLXRocm90dGxlLmM6MTU0NzpzdGF0aWMgc3NpemVfdCB0Z19zZXRfbGltaXQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTU0OC1cdFx0XHQgIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYz0xNjI5PXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHRocm90bF9maWxlc1tdID0ge1xuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE2MzMtXHRcdC5zZXFfc2hvdyA9IHRnX3ByaW50X2xpbWl0LFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTYzNDpcdFx0LndyaXRlID0gdGdfc2V0X2xpbWl0LFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTYzNS1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDE4OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNDEKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUaHJvdHRsaW5nIENvbmZpZ3VyYXRpb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGB0Z19zZXRfbGltaXRgIGlzIHRoZSB3cml0ZSBoYW5kbGVyIGZvciBjZ3JvdXAgdjIuIFdlJiMzOTtyZSBhbHNvIGRlYWxpbmcgd2l0aCBgdGdfc2V0X2NvbmZfdTY0YCBhbmQgYHRnX3NldF9jb25mX3VpbnRgLCB3aGljaCBhcmUgdGhlIGNncm91cCB2MSB3cml0ZSBoYW5kbGVycy4gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGhvbmluZyBpbiBvbiBgdGdfc2V0X2NvbmZgLCB3aGljaCBpcyBhIGtleSBmdW5jdGlvbiBhcyBpdCYjMzk7cyB0aGUgb25lIGNhbGxlZCBieSBib3RoIG9mIHRoZSB2MSBoYW5kbGVycy4gVGhhdOKAmXMgcHJvYmFibHkgd2hlcmUgdGhleSYjMzk7cmUgdHJ5aW5nIHRvIHVuaWZ5IG9yIG1vZGlmeSBzb21ldGhpbmcgZnVuZGFtZW50YWwuCgpJdCYjMzk7cyBhbHNvIHRvdWNoaW5nIGB0Z19kaXNwYXRjaF9pb3BzX3RpbWVgLCB3aGljaCBpbW1lZGlhdGVseSBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIElPIHNjaGVkdWxpbmcgb3IgYWNjb3VudGluZy4gVGhlIGNlbnRyYWwgcG9pbnQgc2VlbXMgdG8gYmUgdGhyb3R0bGluZywgYW5kIEkgc2VlIHRoZSBjb25maWdzIGludm9sdmVkIGFyZSBgQkxLX0RFVl9USFJPVFRMSU5HYC4gTm93LCBzaW5jZSB0aGUgdGhyb3R0bGluZyBpcyBwcm9iYWJseSB0aWVkIHRvIGJsb2NrIGRldmljZXMsIGBCTEtfQ0dST1VQYCBpcyB2ZXJ5IGxpa2VseSBhIHByZXJlcXVpc2l0ZSBvciBhIGRlcGVuZGVudCBmZWF0dXJlIG9mIGBCTEtfREVWX1RIUk9UVExJTkdgLiBUaW1lIHRvIGNvbmZpcm0gdGhhdCBkZXBlbmRlbmN5LCBqdXN0IHRvIGJlIHN1cmUuIEkgbmVlZCB0byBlbnN1cmUgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBkZXBlbmRlbmNpZXMgaXMgcHJlc2VudCBiZWZvcmUgbW92aW5nIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDE4OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX1RIUk9UVExJTkcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZz05Nz1jb25maWcgQkxLX0RFVl9aT05FRFxuLS1cbmJsb2NrL0tjb25maWctMTA1LVxuYmxvY2svS2NvbmZpZzoxMDY6Y29uZmlnIEJMS19ERVZfVEhST1RUTElOR1xuYmxvY2svS2NvbmZpZy0xMDctXHRib29sIFwmIzM0O0Jsb2NrIGxheWVyIGJpbyB0aHJvdHRsaW5nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMTg6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUzOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgbGlrZSB5b3U6CgoqKkRpdmluZyBpbnRvIEJsb2NrIERldmljZSBUaHJvdHRsaW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBpbnZlc3RpZ2F0ZSBob3cgYEJMS19ERVZfVEhST1RUTElOR2AgaXMgY29uZmlndXJlZC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCBpbnRvIGBibG9jay9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGNvcmUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGJsb2NrIGRldmljZXMgYXJlIHR5cGljYWxseSBkZWZpbmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGF0IHNldHRpbmcuIEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzPyBXaGF0IGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMgYW5kIHdoYXQgYXJjaGl0ZWN0dXJlcyBvciBmZWF0dXJlcyBpcyBpdCB0aWVkIHRvPyBJcyBpdCBhIHRyaXN0YXRlIG9yIGEgYm9vbGVhbj8gVW5kZXJzdGFuZGluZyB0aGUgS2NvbmZpZyBzdHJ1Y3R1cmUgd2lsbCBnaXZlIG1lIHRoZSBmb3VuZGF0aW9uYWwgY29udGV4dCBJIG5lZWQgdG8gY29uc2lkZXIgYW55IHJlbGF0ZWQgY29kZSBwYXRocyBhbmQgaG93IHRocm90dGxpbmcgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4gVGhpcyBpcyB0aGUganVtcGluZyBvZmYgcG9pbnQgdG8gYXNzZXNzIGhvdyB0aGlzIHNwZWNpZmljIGZlYXR1cmUgYmVoYXZlcyBpbiB0aGUgd2lkZXIgYmxvY2sgZGV2aWNlIGNvbnRleHQsIGFuZCBob3cgaXQgbWlnaHQgaW50ZXJhY3Qgd2l0aCBvdGhlciBjb250cm9sIG1lY2hhbmlzbXMgd2l0aGluIHRoZSBJTyBzdWJzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDE4OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAwOlx0XHRCbG9jayBsYXllciB6b25lZCBibG9jayBkZXZpY2Ugc3VwcG9ydC4gVGhpcyBvcHRpb24gZW5hYmxlc1xuIDEwMTpcdFx0c3VwcG9ydCBmb3IgWkFDL1pCQy9aTlMgaG9zdC1tYW5hZ2VkIGFuZCBob3N0LWF3YXJlIHpvbmVkIGJsb2NrXG4gMTAyOlx0XHRkZXZpY2VzLlxuIDEwMzpcdFxuIDEwNDpcdFx0U2F5IHllcyBoZXJlIGlmIHlvdSBoYXZlIGEgWkFDLCBaQkMsIG9yIFpOUyBzdG9yYWdlIGRldmljZS5cbiAxMDU6XHRcbiAxMDY6XHRjb25maWcgQkxLX0RFVl9USFJPVFRMSU5HXG4gMTA3Olx0XHRib29sIFwmIzM0O0Jsb2NrIGxheWVyIGJpbyB0aHJvdHRsaW5nIHN1cHBvcnRcJiMzNDtcbiAxMDg6XHRcdGRlcGVuZHMgb24gQkxLX0NHUk9VUFxuIDEwOTpcdFx0c2VsZWN0IEJMS19DR1JPVVBfUldTVEFUXG4gMTEwOlx0XHRoZWxwXG4gMTExOlx0XHRCbG9jayBsYXllciBiaW8gdGhyb3R0bGluZyBzdXBwb3J0LiBJdCBjYW4gYmUgdXNlZCB0byBsaW1pdFxuIDExMjpcdFx0dGhlIElPIHJhdGUgdG8gYSBkZXZpY2UuIElPIHJhdGUgcG9saWNpZXMgYXJlIHBlciBjZ3JvdXAgYW5kXG4gMTEzOlx0XHRvbmUgbmVlZHMgdG8gbW91bnQgYW5kIHVzZSBibGtpbyBjZ3JvdXAgY29udHJvbGxlciBmb3IgY3JlYXRpbmdcbiAxMTQ6XHRcdGNncm91cHMgYW5kIHNwZWNpZnlpbmcgcGVyIGRldmljZSBJTyByYXRlIHBvbGljaWVzLlxuIDExNTpcdFxuIDExNjpcdFx0U2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2Jsa2lvLWNvbnRyb2xsZXIucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIDExNzpcdFxuIDExODpcdGNvbmZpZyBCTEtfV0JUXG4gMTE5Olx0XHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBibG9jayBkZXZpY2Ugd3JpdGViYWNrIHRocm90dGxpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMTg6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMDUKCQkJCQkJCW91dHB1dDogMTMwCgkJCQkJCQl0aG91Z2h0czogNDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCbG9jayBUaHJvdHRsaW5nIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgcmVsYXRlZCB0byBibG9jayBkZXZpY2UgdGhyb3R0bGluZywgd2hpY2ggaGluZ2VzIG9uIHRoZSBgQkxLX0NHUk9VUGAgYW5kLCBtb3JlIHNwZWNpZmljYWxseSwgZW5hYmxpbmcgYEJMS19ERVZfVEhST1RUTElOR2AuIE15IGZvY3VzIG5lZWRzIHRvIGJlIG9uIGEgZmV3IGtleSBzeW1ib2xzOiBgdGdfc2V0X2NvbmZfdTY0YCwgYHRnX3NldF9jb25mX3VpbnRgLCBgdGdfc2V0X2xpbWl0YCwgYW5kIGBfX2Jsa190aHJvdGxfYmlvYC4KCkkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGB0Z19zZXRfY29uZl91NjRgIGFuZCBgdGdfc2V0X2NvbmZfdWludGAgYXJlIGluZGVlZCBjZ3JvdXAgdjEgd3JpdGUgaGFuZGxlcnMsIGFuZCBgdGdfc2V0X2xpbWl0YCBpcyBhIGNncm91cCB2MiB3cml0ZSBoYW5kbGVyLiBgX19ibGtfdGhyb3RsX2Jpb2AgaXMgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50IGZvciBiaW8gdGhyb3R0bGluZywgc28gdGhhdOKAmXMgYSBwcmltYXJ5IHRhcmdldC4KCkkgYWxzbyBjaGVja2VkIGZvciBvdGhlciByZWxldmFudCBmdW5jdGlvbnMuIEkgZm91bmQgYHRnX2Rpc3BhdGNoX2lvcHNfdGltZWAsIGJ1dCB0aGF0JiMzOTtzIHN0YXRpYywgc28gbXkgZm9jdXMgcmVtYWlucyBvbiBgX19ibGtfdGhyb3RsX2Jpb2Agc2luY2UgdGhhdCBpcyB3aGF0IGNhbGxzIGl0LgoKVGhlIGFjdHVhbCBjaGFuZ2VzIGludm9sdmUgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBkaXZpZGUtYnktemVybyBlcnJvciBpbiBgdGdfd2l0aGluX2lvcHNfbGltaXQoKWAgd2l0aGluIGB0Z19kaXNwYXRjaF9pb3BzX3RpbWUoKWAuIEl0IGhhbmRsZXMgdGhlIGBpb3BzX2xpbWl0ID09IDBgIGNhc2UgY29ycmVjdGx5IG5vdywgdHJlYXRpbmcgaXQgYXMgdW5saW1pdGVkLiBBZGRpdGlvbmFsbHksIHRoZXkmIzM5O3ZlIGZpeGVkIGEgcG90ZW50aWFsIHRydW5jYXRpb24gaXNzdWUgaW4gYHRnX3NldF9jb25mKClgIGJ5IHVzaW5nIGBtaW4odiwgKHU2NClVSU5UX01BWClgIHdoZW4gY2FzdGluZy4KClRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZTsgaXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIGFuZCB0aG9zZSBmb2N1cyBzeW1ib2xzIHdpbGwgYmUgdGhlIGtleSB0byB0cmlnZ2VyaW5nIGFuZCB0ZXN0aW5nIGl0LiBJJiMzOTt2ZSBhbHNvIGNoZWNrZWQgYW5kIHZlcmlmaWVkIHRoYXQgdGhvc2UgZnVuY3Rpb25zLCBgdGdfc2V0X2NvbmZfdTY0YCBhbmQgYHRnX3NldF9jb25mX3VpbnRgIGFyZSBkZWZpbmVkIGluIHRoZSBgYmxvY2svYmxrLXRocm90dGxlLmNgIGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDE4OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX1RIUk9UVExJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Z19zZXRfY29uZl91NjQmIzM0OywKICAgICYjMzQ7dGdfc2V0X2NvbmZfdWludCYjMzQ7LAogICAgJiMzNDt0Z19zZXRfbGltaXQmIzM0OywKICAgICYjMzQ7X19ibGtfdGhyb3RsX2JpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGRpdmlkZS1ieS16ZXJvIGJ1ZyBpbiB0aGUgYmxvY2sgbGF5ZXImIzM5O3MgYmlvIHRocm90dGxpbmcgbG9naWMgKGJsay10aHJvdHRsZSkgYW5kIGFuIGludGVnZXIgdHJ1bmNhdGlvbiBpc3N1ZSB3aGVuIHNldHRpbmcgY2dyb3VwIGxpbWl0cy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyByZWFjaGFibGUgdmlhIGNncm91cGZzIHdyaXRlcyBhbmQgYmxvY2sgSU8gb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9USFJPVFRMSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGdfc2V0X2NvbmZfdTY0JiMzNDssCiAgICAmIzM0O3RnX3NldF9jb25mX3VpbnQmIzM0OywKICAgICYjMzQ7dGdfc2V0X2xpbWl0JiMzNDssCiAgICAmIzM0O19fYmxrX3Rocm90bF9iaW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBkaXZpZGUtYnktemVybyBidWcgaW4gdGhlIGJsb2NrIGxheWVyJiMzOTtzIGJpbyB0aHJvdHRsaW5nIGxvZ2ljIChibGstdGhyb3R0bGUpIGFuZCBhbiBpbnRlZ2VyIHRydW5jYXRpb24gaXNzdWUgd2hlbiBzZXR0aW5nIGNncm91cCBsaW1pdHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgcmVhY2hhYmxlIHZpYSBjZ3JvdXBmcyB3cml0ZXMgYW5kIGJsb2NrIElPIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xNVQxODoxMTowMi45NDI5NDkzMDZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA3OTcwNjM4NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9USFJPVFRMSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGdfc2V0X2NvbmZfdTY0XCIsXG4gICAgXCJ0Z19zZXRfY29uZl91aW50XCIsXG4gICAgXCJ0Z19zZXRfbGltaXRcIixcbiAgICBcIl9fYmxrX3Rocm90bF9iaW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRpdmlkZS1ieS16ZXJvIGJ1ZyBpbiB0aGUgYmxvY2sgbGF5ZXIncyBiaW8gdGhyb3R0bGluZyBsb2dpYyAoYmxrLXRocm90dGxlKSBhbmQgYW4gaW50ZWdlciB0cnVuY2F0aW9uIGlzc3VlIHdoZW4gc2V0dGluZyBjZ3JvdXAgbGltaXRzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHJlYWNoYWJsZSB2aWEgY2dyb3VwZnMgd3JpdGVzIGFuZCBibG9jayBJTyBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQxODoxMTowMi45NDI5NTM3NzZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMTkxNTcxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDA1OTBhZGY1OGEyNGM2ZjYyYzIxNzgzODRjYTI4NzUyNmZjODdiYzNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMTUgMTg6MTE6MDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXRocm90dGxlLmMgYi9ibG9jay9ibGstdGhyb3R0bGUuY1xcbmluZGV4IGZmYzNiNzAwNjVkNGIxLi45OTAwNDQzYjBhZDUyNiAxMDA2NDRcXG4tLS0gYS9ibG9jay9ibGstdGhyb3R0bGUuY1xcbisrKyBiL2Jsb2NrL2Jsay10aHJvdHRsZS5jXFxuQEAgLTg4Myw3ICs4ODMsMTIgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgdGdfZGlzcGF0Y2hfaW9wc190aW1lKHN0cnVjdCB0aHJvdGxfZ3JwICp0Zywgc3RydWN0IGJpbyAqYmlcXG4gXFx0dTMyIGlvcHNfbGltaXQgPSB0Z19pb3BzX2xpbWl0KHRnLCBydyk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgaW9wc193YWl0O1xcbiBcXG4tXFx0aWYgKGlvcHNfbGltaXQgPT0gVUlOVF9NQVggfHwgdGctXFx1MDAzZWZsYWdzIFxcdTAwMjYgVEhST1RMX1RHX0NBTkNFTElORylcXG4rXFx0LypcXG4rXFx0ICogaW9wc19saW1pdCA9PSAwIGlzIG5vdCBhIHZhbGlkIGxpbWl0LiBUcmVhdCBpdCBhcyB1bmxpbWl0ZWQgc28gd2VcXG4rXFx0ICogbmV2ZXIgcmVhY2ggdGhlIEhaIC8gaW9wc19saW1pdCBkaXZpZGUgaW4gdGdfd2l0aGluX2lvcHNfbGltaXQoKS5cXG4rXFx0ICovXFxuK1xcdGlmIChpb3BzX2xpbWl0ID09IFVJTlRfTUFYIHx8IGlvcHNfbGltaXQgPT0gMCB8fFxcbitcXHQgICAgdGctXFx1MDAzZWZsYWdzIFxcdTAwMjYgVEhST1RMX1RHX0NBTkNFTElORylcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHR0Z191cGRhdGVfc2xpY2UodGcsIHJ3KTtcXG5AQCAtMTM4MywxMCArMTM4OCwxMiBAQCBzdGF0aWMgc3NpemVfdCB0Z19zZXRfY29uZihzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuIFxcdHRnID0gYmxrZ190b190ZyhjdHguYmxrZyk7XFxuIFxcdHRnX3VwZGF0ZV9jYXJyeW92ZXIodGcpO1xcbiBcXG4rXFx0dm9pZCAqZmllbGQgPSAodm9pZCAqKXRnICsgb2ZfY2Z0KG9mKS1cXHUwMDNlcHJpdmF0ZTtcXG4rXFxuIFxcdGlmIChpc191NjQpXFxuLVxcdFxcdCoodTY0ICopKCh2b2lkICopdGcgKyBvZl9jZnQob2YpLVxcdTAwM2Vwcml2YXRlKSA9IHY7XFxuK1xcdFxcdCoodTY0ICopZmllbGQgPSB2O1xcbiBcXHRlbHNlXFxuLVxcdFxcdCoodW5zaWduZWQgaW50ICopKCh2b2lkICopdGcgKyBvZl9jZnQob2YpLVxcdTAwM2Vwcml2YXRlKSA9IHY7XFxuK1xcdFxcdCoodW5zaWduZWQgaW50ICopZmllbGQgPSBtaW4odiwgKHU2NClVSU5UX01BWCk7XFxuIFxcbiBcXHR0Z19jb25mX3VwZGF0ZWQodGcsIGZhbHNlKTtcXG4gXFx0cmV0ID0gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMTg6MTE6MDMuNDY1NjQxMzIzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDAyNzQzNjA5NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9USFJPVFRMSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGdfc2V0X2NvbmZfdTY0XCIsXG4gICAgXCJ0Z19zZXRfY29uZl91aW50XCIsXG4gICAgXCJ0Z19zZXRfbGltaXRcIixcbiAgICBcIl9fYmxrX3Rocm90bF9iaW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRpdmlkZS1ieS16ZXJvIGJ1ZyBpbiB0aGUgYmxvY2sgbGF5ZXIncyBiaW8gdGhyb3R0bGluZyBsb2dpYyAoYmxrLXRocm90dGxlKSBhbmQgYW4gaW50ZWdlciB0cnVuY2F0aW9uIGlzc3VlIHdoZW4gc2V0dGluZyBjZ3JvdXAgbGltaXRzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHJlYWNoYWJsZSB2aWEgY2dyb3VwZnMgd3JpdGVzIGFuZCBibG9jayBJTyBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA1OTBhZGY1OGEyNGM2ZjYyYzIxNzgzODRjYTI4NzUyNmZjODdiYzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxNSAxODoxMTowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay10aHJvdHRsZS5jIGIvYmxvY2svYmxrLXRocm90dGxlLmNcbmluZGV4IGZmYzNiNzAwNjVkNGIxLi45OTAwNDQzYjBhZDUyNiAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay10aHJvdHRsZS5jXG4rKysgYi9ibG9jay9ibGstdGhyb3R0bGUuY1xuQEAgLTg4Myw3ICs4ODMsMTIgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgdGdfZGlzcGF0Y2hfaW9wc190aW1lKHN0cnVjdCB0aHJvdGxfZ3JwICp0Zywgc3RydWN0IGJpbyAqYmlcbiBcdHUzMiBpb3BzX2xpbWl0ID0gdGdfaW9wc19saW1pdCh0ZywgcncpO1xuIFx0dW5zaWduZWQgbG9uZyBpb3BzX3dhaXQ7XG4gXG4tXHRpZiAoaW9wc19saW1pdCA9PSBVSU5UX01BWCB8fCB0Zy1cdTAwM2VmbGFncyBcdTAwMjYgVEhST1RMX1RHX0NBTkNFTElORylcbitcdC8qXG4rXHQgKiBpb3BzX2xpbWl0ID09IDAgaXMgbm90IGEgdmFsaWQgbGltaXQuIFRyZWF0IGl0IGFzIHVubGltaXRlZCBzbyB3ZVxuK1x0ICogbmV2ZXIgcmVhY2ggdGhlIEhaIC8gaW9wc19saW1pdCBkaXZpZGUgaW4gdGdfd2l0aGluX2lvcHNfbGltaXQoKS5cbitcdCAqL1xuK1x0aWYgKGlvcHNfbGltaXQgPT0gVUlOVF9NQVggfHwgaW9wc19saW1pdCA9PSAwIHx8XG4rXHQgICAgdGctXHUwMDNlZmxhZ3MgXHUwMDI2IFRIUk9UTF9UR19DQU5DRUxJTkcpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0dGdfdXBkYXRlX3NsaWNlKHRnLCBydyk7XG5AQCAtMTM4MywxMCArMTM4OCwxMiBAQCBzdGF0aWMgc3NpemVfdCB0Z19zZXRfY29uZihzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG4gXHR0ZyA9IGJsa2dfdG9fdGcoY3R4LmJsa2cpO1xuIFx0dGdfdXBkYXRlX2NhcnJ5b3Zlcih0Zyk7XG4gXG4rXHR2b2lkICpmaWVsZCA9ICh2b2lkICopdGcgKyBvZl9jZnQob2YpLVx1MDAzZXByaXZhdGU7XG4rXG4gXHRpZiAoaXNfdTY0KVxuLVx0XHQqKHU2NCAqKSgodm9pZCAqKXRnICsgb2ZfY2Z0KG9mKS1cdTAwM2Vwcml2YXRlKSA9IHY7XG4rXHRcdCoodTY0ICopZmllbGQgPSB2O1xuIFx0ZWxzZVxuLVx0XHQqKHVuc2lnbmVkIGludCAqKSgodm9pZCAqKXRnICsgb2ZfY2Z0KG9mKS1cdTAwM2Vwcml2YXRlKSA9IHY7XG4rXHRcdCoodW5zaWduZWQgaW50ICopZmllbGQgPSBtaW4odiwgKHU2NClVSU5UX01BWCk7XG4gXG4gXHR0Z19jb25mX3VwZGF0ZWQodGcsIGZhbHNlKTtcbiBcdHJldCA9IDA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQxODoxMTowMy40NjU2NDMxNTRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTIzNTczNTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQmxrLVRocm90dGxlIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCBmb3IgYGJsb2NrL2Jsay10aHJvdHRsZS5jYC4gSXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCBhdCBmaXJzdCBnbGFuY2UuIEl0J3MgbW9kaWZ5aW5nIGEgY291cGxlIG9mIGZ1bmN0aW9uczogYHRnX2Rpc3BhdGNoX2lvcHNfdGltZWAgYW5kIGB0Z19zZXRfY29uZmAuIFRoZSBrZXkgdGhpbmcgaGVyZSBpcyB0aGUgaGFuZGxpbmcgb2YgdGhlIElPUFMgbGltaXQuIFRoZSBwYXRjaCBzdWdnZXN0cyB0aGF0IGlmIGBpb3BzX2xpbWl0YCBpcyBzZXQgdG8gemVybywgaXQgc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGVmZmVjdGl2ZWx5IHVubGltaXRlZC4gVGhhdCdzIGEgY29tbW9uIHBhdHRlcm4sIGFuZCBtYWtlcyBzZW5zZSAtIHplcm8gaXMgb2Z0ZW4gdXNlZCBhcyBhIHNwZWNpYWwgdmFsdWUgdG8gZGlzYWJsZSBhIGZlYXR1cmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBoYW5kbGVkIGNvcnJlY3RseSBhY3Jvc3MgdGhlIGJvYXJkLCB0aG91Z2gsIGVzcGVjaWFsbHkgaW4gZWRnZSBjYXNlcy5cblxuVGhlbiwgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBwYXRjaCBhZGRyZXNzZXMgYHRnX3NldF9jb25mYC4gSXQgYXBwZWFycyB0byBiZSBhZGRpbmcgYSBjYXAgdG8gdGhlIHZhbHVlIGB2YCBiZWZvcmUgaXQncyBhc3NpZ25lZCB0byBhbiBgdW5zaWduZWQgaW50YCBmaWVsZC4gU3BlY2lmaWNhbGx5LCB0aGUgY2FwIGlzIGBVSU5UX01BWGAuIFRoaXMgaXMgaW1wb3J0YW50LCBwcmV2ZW50aW5nIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93cyBkdXJpbmcgY29uZmlndXJhdGlvbiwgd2hpY2ggY291bGQgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIG9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSXQncyBnb29kIHByYWN0aWNlIHRvIGVuc3VyZSB0aGUgc2FuaXR5IG9mIHRoZSBpbnB1dCBkYXRhLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHVuc2lnbmVkIGludGVnZXIgdHlwZXMgYW5kIHBvdGVudGlhbCB1c2VyIGNvbmZpZ3VyYXRpb24uIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBgdmAgYW5kIHRoaXMgYXNzaWdubWVudC4gSSB3YW50IHRvIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXNlIGd1YXJkcmFpbHMgYXJlIHN1ZmZpY2llbnQgZm9yIHRoZSBraW5kcyBvZiB2YWx1ZXMgd2UgZXhwZWN0IGFuZCB0aGUgcmFuZ2Ugb2YgdmFsdWVzIHRoZSB1bnNpZ25lZCBpbnRlZ2VyIGNhbiBoYW5kbGUuIEkgc2hvdWxkIHByb2JhYmx5IGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIG5vdyB0byBzZWUgd2hhdCdzIGdvaW5nIG9uLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMzMsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDE4OjExOjA3LjU4OTIxODY1OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzYzNTA2OTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRnX2Rpc3BhdGNoX2lvcHNfdGltZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstdGhyb3R0bGUuYz04NjE9c3RhdGljIHVuc2lnbmVkIGxvbmcgdGdfZGlzcGF0Y2hfYnBzX3RpbWUoc3RydWN0IHRocm90bF9ncnAgKnRnLCBzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy04NzktXFxuYmxvY2svYmxrLXRocm90dGxlLmM6ODgwOnN0YXRpYyB1bnNpZ25lZCBsb25nIHRnX2Rpc3BhdGNoX2lvcHNfdGltZShzdHJ1Y3QgdGhyb3RsX2dycCAqdGcsIHN0cnVjdCBiaW8gKmJpbylcXG5ibG9jay9ibGstdGhyb3R0bGUuYy04ODEte1xcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmM9OTA1PXN0YXRpYyB1bnNpZ25lZCBsb25nIHRnX2Rpc3BhdGNoX3RpbWUoc3RydWN0IHRocm90bF9ncnAgKnRnLCBzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy05MjgtXFxuYmxvY2svYmxrLXRocm90dGxlLmM6OTI5OlxcdHJldHVybiB0Z19kaXNwYXRjaF9pb3BzX3RpbWUodGcsIGJpbyk7XFxuYmxvY2svYmxrLXRocm90dGxlLmMtOTMwLX1cXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jPTE3NzE9c3RhdGljIGJvb2wgdGdfd2l0aGluX2xpbWl0KHN0cnVjdCB0aHJvdGxfZ3JwICp0Zywgc3RydWN0IGJpbyAqYmlvLCBib29sIHJ3KVxcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTc4MC1cXHRcXHRyZXR1cm4gc3EtXFx1MDAzZW5yX3F1ZXVlZF9pb3BzW3J3XSA9PSAwIFxcdTAwMjZcXHUwMDI2XFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTc4MTpcXHRcXHRcXHRcXHR0Z19kaXNwYXRjaF9pb3BzX3RpbWUodGcsIGJpbykgPT0gMDtcXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNzgyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQxODoxMTowOS45NTI3MjkxOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTMyNDA4MTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRnX3NldF9jb25mXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay10aHJvdHRsZS5jPTEzMjM9c3RhdGljIGludCBibGtfdGhyb3RsX2luaXQoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xMzU2LVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjEzNTc6c3RhdGljIHNzaXplX3QgdGdfc2V0X2NvbmYoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTEzNTgtXFx0XFx0XFx0ICAgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmLCBib29sIGlzX3U2NClcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MDgtXFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQwOTpzdGF0aWMgc3NpemVfdCB0Z19zZXRfY29uZl91NjQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MTAtXFx0XFx0XFx0ICAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDExLXtcXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDEyOlxcdHJldHVybiB0Z19zZXRfY29uZihvZiwgYnVmLCBuYnl0ZXMsIG9mZiwgdHJ1ZSk7XFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQxMy19XFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQxNC1cXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDE1OnN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mX3VpbnQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MTYtXFx0XFx0XFx0XFx0Y2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MTcte1xcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0MTg6XFx0cmV0dXJuIHRnX3NldF9jb25mKG9mLCBidWYsIG5ieXRlcywgb2ZmLCBmYWxzZSk7XFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQxOS19XFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYz0xNDQ3PXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHRocm90bF9sZWdhY3lfZmlsZXNbXSA9IHtcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NTEtXFx0XFx0LnNlcV9zaG93ID0gdGdfcHJpbnRfY29uZl91NjQsXFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQ1MjpcXHRcXHQud3JpdGUgPSB0Z19zZXRfY29uZl91NjQsXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ1My1cXHR9LFxcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ1Ny1cXHRcXHQuc2VxX3Nob3cgPSB0Z19wcmludF9jb25mX3U2NCxcXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDU4OlxcdFxcdC53cml0ZSA9IHRnX3NldF9jb25mX3U2NCxcXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDU5LVxcdH0sXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDYzLVxcdFxcdC5zZXFfc2hvdyA9IHRnX3ByaW50X2NvbmZfdWludCxcXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDY0OlxcdFxcdC53cml0ZSA9IHRnX3NldF9jb25mX3VpbnQsXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ2NS1cXHR9LFxcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ2OS1cXHRcXHQuc2VxX3Nob3cgPSB0Z19wcmludF9jb25mX3VpbnQsXFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQ3MDpcXHRcXHQud3JpdGUgPSB0Z19zZXRfY29uZl91aW50LFxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NzEtXFx0fSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9zdGkvc3RpX2NydGMuYz00OT1zdGlfY3J0Y19tb2RlX3NldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3N0aS9zdGlfY3J0Yy5jLTg1LVxcbmRyaXZlcnMvZ3B1L2RybS9zdGkvc3RpX2NydGMuYzo4NjpcXHRzdGlfdnRnX3NldF9jb25maWcoY29tcG8tXFx1MDAzZXZ0Z1ttaXhlci1cXHUwMDNlaWRdLCBcXHUwMDI2Y3J0Yy1cXHUwMDNlbW9kZSk7XFxuZHJpdmVycy9ncHUvZHJtL3N0aS9zdGlfY3J0Yy5jLTg3LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3N0aS9zdGlfdnRnLmM9Mjg5PXN0YXRpYyB2b2lkIHZ0Z19lbmFibGVfaXJxKHN0cnVjdCBzdGlfdnRnICp2dGcpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vc3RpL3N0aV92dGcuYy0yOTYtXFxuZHJpdmVycy9ncHUvZHJtL3N0aS9zdGlfdnRnLmM6Mjk3OnZvaWQgc3RpX3Z0Z19zZXRfY29uZmlnKHN0cnVjdCBzdGlfdnRnICp2dGcsXFxuZHJpdmVycy9ncHUvZHJtL3N0aS9zdGlfdnRnLmMtMjk4LVxcdFxcdGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3N0aS9zdGlfdnRnLmg9MjM9c3RydWN0IHN0aV92dGcgKm9mX3Z0Z19maW5kKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApO1xcbmRyaXZlcnMvZ3B1L2RybS9zdGkvc3RpX3Z0Zy5oOjI0OnZvaWQgc3RpX3Z0Z19zZXRfY29uZmlnKHN0cnVjdCBzdGlfdnRnICp2dGcsXFxuZHJpdmVycy9ncHUvZHJtL3N0aS9zdGlfdnRnLmgtMjUtXFx0XFx0Y29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQxODoxMToxMi4wODUxNDQ3NDVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODU1NDc3NjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJsay1UaHJvdHRsZSBCdWcgRml4KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkFoLCBhIGNsYXNzaWMgZGl2aWRlLWJ5LXplcm8gdnVsbmVyYWJpbGl0eSFcIiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBzZWVtcyB0byBiZSBpbiBgYmxvY2svYmxrLXRocm90dGxlLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgaW9wc19saW1pdGAgdmFyaWFibGUuIEl0IGFwcGVhcnMgdGhlcmUgd2FzIGEgc2NlbmFyaW8gd2hlcmUgdGhpcyBjb3VsZCBiZSBpbml0aWFsaXplZCB0byB6ZXJvLCB3aGljaCB0aGVuIGxlZCB0byBhIG5hc3R5IGRpdmlkZS1ieS16ZXJvIGVycm9yIHdpdGhpbiB0aGUgYHRnX3dpdGhpbl9pb3BzX2xpbWl0KClgIGZ1bmN0aW9uLiBUaGF0J3MgYSB0ZXh0Ym9vayBleGFtcGxlIG9mIGEgcHJldmVudGFibGUgY29kaW5nIGVycm9yIHRoYXQgbmVlZHMgdG8gYmUgYWRkcmVzc2VkIGltbWVkaWF0ZWx5LlxuXG5UaGUgcGF0Y2ggc2VlbXMgdG8gdGFrZSBhIHR3by1wcm9uZ2VkIGFwcHJvYWNoLiBGaXJzdCwgaXQgZGlyZWN0bHkgZml4ZXMgdGhlIGBpb3BzX2xpbWl0YCBpc3N1ZSB0byBwcmV2ZW50IHRoZSBkaXZpc2lvbiBieSB6ZXJvLiBTZWNvbmRseSwgSSdtIG5vdGluZyB0aGUgY2FwIG9uIGB2YCB0byBgVUlOVF9NQVhgIHdpdGhpbiBgdGdfc2V0X2NvbmZgIHdoZW4gYXNzaWduaW5nIHRvIGFuIGB1bnNpZ25lZCBpbnRgIGZpZWxkLiBBIHdpc2UgbW92ZSwgcHJldmVudGluZyBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3MgYW5kIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgbWFpbnRhaW5pbmcgZGF0YSBpbnRlZ3JpdHkgd2hlbiBkZWFsaW5nIHdpdGggbGltaXRzIGFuZCB0aHJvdHRsaW5nIGNvbmZpZ3VyYXRpb25zLlxuXG5Gcm9tIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGJsb2NrIGxheWVyLCB0aGlzIHBhdGNoIGlzIHRhcmdldGluZyBhIGZ1bmN0aW9uYWwgYXJlYSB3aXRoaW4gdGhlIGJsay10aHJvdHRsZSBjZ3JvdXAgc3Vic3lzdGVtLiBUaGUgZXhwb3N1cmUgaXMgdmlhIGNncm91cGZzIHdyaXRlcyB0byBjb250cm9sIHRoZSB0aHJvdHRsaW5nIGJlaGF2aW9yLCBsaWtlIGBibGtpby50aHJvdHRsZS5yZWFkX2lvcHNfZGV2aWNlYCBvciBgYmxraW8udGhyb3R0bGUud3JpdGVfaW9wc19kZXZpY2VgIGFuZCBzaW1pbGFyIGZpbGVzLiBUaGF0J3MgZ29vZCB0byBrbm93IGJlY2F1c2UgaXQgdGVsbHMgbWUgd2hlcmUgdGhpcyBidWcgaXMgcmVhY2hhYmxlLlxuXG5Ob3csIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGVuYWJsZWQuIEkgc2hvdWxkIHF1aWNrbHkgY2hlY2sgaWYgYENPTkZJR19CTEtfREVWX1RIUk9UVExJTkdgIGlzIHNldCwgc2luY2UgdGhhdCB3b3VsZCBiZSB0aGUga2V5IGluZGljYXRvciB0aGF0IHRoaXMgcGFydGljdWxhciBjb2RlIHBhdGggaXMgZXZlbiBhY3RpdmUgaW4gYSBnaXZlbiBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhpcyB3aWxsIGdpdmUgbWUgZnVydGhlciBjb250ZXh0IGFib3V0IHRoZSBpbXBhY3QgYW5kIGxpa2VseSBzZXZlcml0eSBvZiB0aGlzIGZpeCBpbiB0aGUgcmVhbCB3b3JsZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAzMiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiLCJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMTg6MTE6MTYuOTQwNjI0MTI2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTExMzU2MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQkxLX0RFVl9USFJPVFRMSU5HXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2Jsa2lvLWNvbnRyb2xsZXIucnN0PTI3PUVuYWJsZSB0aHJvdHRsaW5nIGluIGJsb2NrIGxheWVyOjpcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9ibGtpby1jb250cm9sbGVyLnJzdC0yOC1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9ibGtpby1jb250cm9sbGVyLnJzdDoyOTpcXHRDT05GSUdfQkxLX0RFVl9USFJPVFRMSU5HPXlcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9ibGtpby1jb250cm9sbGVyLnJzdC0zMC1cXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2Jsa2lvLWNvbnRyb2xsZXIucnN0PTgxPVZhcmlvdXMgdXNlciB2aXNpYmxlIGNvbmZpZyBvcHRpb25zXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9ibGtpby1jb250cm9sbGVyLnJzdC05MC1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9ibGtpby1jb250cm9sbGVyLnJzdDo5MTogIENPTkZJR19CTEtfREVWX1RIUk9UVExJTkdcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9ibGtpby1jb250cm9sbGVyLnJzdC05Mi1cXHQgIEVuYWJsZSBibG9jayBkZXZpY2UgdGhyb3R0bGluZyBzdXBwb3J0IGluIGJsb2NrIGxheWVyLlxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZz03OT1DT05GSUdfQkxLX0RFVl9aT05FRD15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZzo4MDpDT05GSUdfQkxLX0RFVl9USFJPVFRMSU5HPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnLTgxLUNPTkZJR19CTEtfV0JUPXlcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc9OTQ9Q09ORklHX0JMS19ERVZfWk9ORUQ9eVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc6OTU6Q09ORklHX0JMS19ERVZfVEhST1RUTElORz15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy05Ni1DT05GSUdfQkxLX1dCVD15XFxuLS1cXG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnPTUzPUNPTkZJR19NT0RVTEVfVU5MT0FEPXlcXG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnOjU0OkNPTkZJR19CTEtfREVWX1RIUk9UVExJTkc9eVxcbmFyY2gvcmlzY3YvY29uZmlncy9kZWZjb25maWctNTUtQ09ORklHX1NQQVJTRU1FTV9NQU5VQUw9eVxcbi0tXFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnPTg0PUNPTkZJR19NT0RVTEVfU0lHX1NIQTI1Nj15XFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnOjg1OkNPTkZJR19CTEtfREVWX1RIUk9UVExJTkc9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZy04Ni1DT05GSUdfQkxLX1dCVD15XFxuLS1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc9Nzg9Q09ORklHX01PRFVMRV9TSUdfU0hBMjU2PXlcXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6Nzk6Q09ORklHX0JMS19ERVZfVEhST1RUTElORz15XFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnLTgwLUNPTkZJR19CTEtfV0JUPXlcXG4tLVxcbmJsb2NrL0tjb25maWc9OTc9Y29uZmlnIEJMS19ERVZfWk9ORURcXG4tLVxcbmJsb2NrL0tjb25maWctMTA1LVxcbmJsb2NrL0tjb25maWc6MTA2OmNvbmZpZyBCTEtfREVWX1RIUk9UVExJTkdcXG5ibG9jay9LY29uZmlnLTEwNy1cXHRib29sIFxcXCJCbG9jayBsYXllciBiaW8gdGhyb3R0bGluZyBzdXBwb3J0XFxcIlxcbi0tXFxuYmxvY2svTWFrZWZpbGU9MjE9b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfRkNfQVBQSUQpICs9IGJsay1jZ3JvdXAtZmMtYXBwaWQub1xcbmJsb2NrL01ha2VmaWxlOjIyOm9iai0kKENPTkZJR19CTEtfREVWX1RIUk9UVExJTkcpXFx0Kz0gYmxrLXRocm90dGxlLm9cXG5ibG9jay9NYWtlZmlsZS0yMy1vYmotJChDT05GSUdfQkxLX0NHUk9VUF9JT1BSSU8pXFx0Kz0gYmxrLWlvcHJpby5vXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuaD0xNDA9c3RhdGljIGlubGluZSBzdHJ1Y3QgdGhyb3RsX2dycCAqYmxrZ190b190ZyhzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2cpXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuaC0xNDctICovXFxuYmxvY2svYmxrLXRocm90dGxlLmg6MTQ4OiNpZm5kZWYgQ09ORklHX0JMS19ERVZfVEhST1RUTElOR1xcbmJsb2NrL2Jsay10aHJvdHRsZS5oLTE0OS1zdGF0aWMgaW5saW5lIHZvaWQgYmxrX3Rocm90bF9leGl0KHN0cnVjdCBnZW5kaXNrICpkaXNrKSB7IH1cXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5oPTE1MT1zdGF0aWMgaW5saW5lIHZvaWQgYmxrX3Rocm90bF9jYW5jZWxfYmlvcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykgeyB9XFxuYmxvY2svYmxrLXRocm90dGxlLmg6MTUyOiNlbHNlIC8qIENPTkZJR19CTEtfREVWX1RIUk9UVExJTkcgKi9cXG5ibG9jay9ibGstdGhyb3R0bGUuaC0xNTMtdm9pZCBibGtfdGhyb3RsX2V4aXQoc3RydWN0IGdlbmRpc2sgKmRpc2spO1xcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmg9MTk2PXN0YXRpYyBpbmxpbmUgYm9vbCBibGtfdGhyb3RsX2JpbyhzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuaC0yMDYtfVxcbmJsb2NrL2Jsay10aHJvdHRsZS5oOjIwNzojZW5kaWYgLyogQ09ORklHX0JMS19ERVZfVEhST1RUTElORyAqL1xcbmJsb2NrL2Jsay10aHJvdHRsZS5oLTIwOC1cXG4tLVxcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg9NDkwPXN0cnVjdCByZXF1ZXN0X3F1ZXVlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtNjI5LVxcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6NjMwOiNpZmRlZiBDT05GSUdfQkxLX0RFVl9USFJPVFRMSU5HXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC02MzEtXFx0LyogVGhyb3R0bGUgZGF0YSAqL1xcbi0tXFxuaW5pdC9LY29uZmlnPTExMTM9Y29uZmlnIEJMS19DR1JPVVBcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTMwLVxcdENPTkZJR19CRlFfR1JPVVBfSU9TQ0hFRD15OyBmb3IgZW5hYmxpbmcgdGhyb3R0bGluZyBwb2xpY3ksIHNldFxcbmluaXQvS2NvbmZpZzoxMTMxOlxcdENPTkZJR19CTEtfREVWX1RIUk9UVExJTkc9eS5cXG5pbml0L0tjb25maWctMTEzMi1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcueDg2XzY0PTE1PUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTE2Mzg0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy54ODZfNjQ6MTY6Q09ORklHX0JMS19ERVZfVEhST1RUTElORz15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy54ODZfNjQtMTctQ09ORklHX0JPTkRJTkc9eVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkL2NvbmZpZy5jb21tb249MTE9Q09ORklHX0JMS19ERVZfUkFNPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvY29uZmlnLmNvbW1vbjoxMjpDT05GSUdfQkxLX0RFVl9USFJPVFRMSU5HPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvY29uZmlnLmNvbW1vbi0xMy1DT05GSUdfQk9ORElORz15XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDE4OjExOjE4Ljg5MTc2NjEyOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MjQyMzgxOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCbG9jayBEZXZpY2UgVGhyb3R0bGluZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0aGUgZm9jdXMgaXMgY2xlYXJseSBvbiBgQkxLX0RFVl9USFJPVFRMSU5HYC4gUmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGtleSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gdG91Y2hlZCBhcmUgYHRnX2Rpc3BhdGNoX2lvcHNfdGltZWAgYW5kIGB0Z19zZXRfY29uZmAuIE5vdywgYHRnX2Rpc3BhdGNoX2lvcHNfdGltZWAgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCdzIGNhbGxlZCBieSBgdGdfZGlzcGF0Y2hfdGltZWAsIHdoaWNoLCBpbiB0dXJuLCBpcyBjYWxsZWQgYnkgYHRnX2Rpc3BhdGNoX29uZV9iaW9gIGFuZCBgdGdfd2l0aGluX2xpbWl0YC4gVGhhdCdzIHRoZSBmbG93LiBBbmQgYHRnX3NldF9jb25mYCBnZXRzIGNhbGxlZCBmcm9tIGB0Z19zZXRfY29uZl91NjRgIGFuZCBgdGdfc2V0X2NvbmZfdWludGAuXG5cbk5vdyB0aGUgcXVlc3Rpb24gaXMsIHdoYXQncyBleHBvc2VkLCBhbmQgd2hhdCdzIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmc/IExldCdzIHNlZS4uLiBgdGdfc2V0X2NvbmZfdTY0YCBhbmQgYHRnX3NldF9jb25mX3VpbnRgIGFyZSB3cml0ZSBoYW5kbGVycyBmb3IgY2dyb3VwIGZpbGVzLiBUaGF0IG1ha2VzIHRoZW0gZXhjZWxsZW50IGNhbmRpZGF0ZXMsIGdpdmVuIHRoZSBuYXR1cmUgb2YgY2dyb3Vwcy4gVGhleSdyZSBkZWZpbml0ZWx5IGV4cG9zZWQuIEFuZCwgSSBzZWUgYGJsa190aHJvdGxfYmlvYCwgd2hpY2ggaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIGJpbyB0aHJvdHRsaW5nLlxuXG5SaWdodCwgc28gYGJsa190aHJvdGxfYmlvYCBsb29rcyBsaWtlIHRoZSBvYnZpb3VzIG5leHQgc3RlcCBmb3IgY2xvc2VyIGluc3BlY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMDEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMTg6MTE6MjMuNDE2MDA2ODczWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5Nzc3NDcxMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrX3Rocm90bF9iaW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLWNvcmUuYz04MTc9dm9pZCBzdWJtaXRfYmlvX25vYWNjdChzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5ibG9jay9ibGstY29yZS5jLTkxOC1cXG5ibG9jay9ibGstY29yZS5jOjkxOTpcXHRpZiAoYmxrX3Rocm90bF9iaW8oYmlvKSlcXG5ibG9jay9ibGstY29yZS5jLTkyMC1cXHRcXHRyZXR1cm47XFxuLS1cXG5ibG9jay9ibGstbWVyZ2UuYz0xMTk9c3RydWN0IGJpbyAqYmlvX3N1Ym1pdF9zcGxpdF9iaW9zZXQoc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBpbnQgc3BsaXRfc2VjdG9ycyxcXG4tLVxcbmJsb2NrL2Jsay1tZXJnZS5jLTEzNC1cXHRcXHRiaW9faW9fZXJyb3IoYmlvKTtcXG5ibG9jay9ibGstbWVyZ2UuYzoxMzU6XFx0ZWxzZSBpZiAoIWJsa190aHJvdGxfYmlvKGJpbykpXFxuYmxvY2svYmxrLW1lcmdlLmMtMTM2LVxcdFxcdHN1Ym1pdF9iaW9fbm9hY2N0X25vY2hlY2soYmlvLCB0cnVlKTtcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jPTE3NzE9c3RhdGljIGJvb2wgdGdfd2l0aGluX2xpbWl0KHN0cnVjdCB0aHJvdGxfZ3JwICp0Zywgc3RydWN0IGJpbyAqYmlvLCBib29sIHJ3KVxcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTc5OC1cXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNzk5OmJvb2wgX19ibGtfdGhyb3RsX2JpbyhzdHJ1Y3QgYmlvICpiaW8pXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTgwMC17XFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuaD0xNDk9c3RhdGljIGlubGluZSB2b2lkIGJsa190aHJvdGxfZXhpdChzdHJ1Y3QgZ2VuZGlzayAqZGlzaykgeyB9XFxuYmxvY2svYmxrLXRocm90dGxlLmg6MTUwOnN0YXRpYyBpbmxpbmUgYm9vbCBibGtfdGhyb3RsX2JpbyhzdHJ1Y3QgYmlvICpiaW8pIHsgcmV0dXJuIGZhbHNlOyB9XFxuYmxvY2svYmxrLXRocm90dGxlLmgtMTUxLXN0YXRpYyBpbmxpbmUgdm9pZCBibGtfdGhyb3RsX2NhbmNlbF9iaW9zKHN0cnVjdCBnZW5kaXNrICpkaXNrKSB7IH1cXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5oPTE1Mz12b2lkIGJsa190aHJvdGxfZXhpdChzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7XFxuYmxvY2svYmxrLXRocm90dGxlLmg6MTU0OmJvb2wgX19ibGtfdGhyb3RsX2JpbyhzdHJ1Y3QgYmlvICpiaW8pO1xcbmJsb2NrL2Jsay10aHJvdHRsZS5oLTE1NS12b2lkIGJsa190aHJvdGxfY2FuY2VsX2Jpb3Moc3RydWN0IGdlbmRpc2sgKmRpc2spO1xcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmg9MTY4PXN0YXRpYyBpbmxpbmUgYm9vbCBibGtfc2hvdWxkX3Rocm90bChzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuaC0xOTUtXFxuYmxvY2svYmxrLXRocm90dGxlLmg6MTk2OnN0YXRpYyBpbmxpbmUgYm9vbCBibGtfdGhyb3RsX2JpbyhzdHJ1Y3QgYmlvICpiaW8pXFxuYmxvY2svYmxrLXRocm90dGxlLmgtMTk3LXtcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5oLTIwNC1cXG5ibG9jay9ibGstdGhyb3R0bGUuaDoyMDU6XFx0cmV0dXJuIF9fYmxrX3Rocm90bF9iaW8oYmlvKTtcXG5ibG9jay9ibGstdGhyb3R0bGUuaC0yMDYtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQxODoxMToyNS4zOTM3NTg1MDRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTAwNTYxNTkzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKipcblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYHRnX3NldF9jb25mYCBsb29rcyBwcm9taXNpbmcgZm9yIGZ1enppbmcuIEhvd2V2ZXIsIGEgc3RhdGljIGFuYWx5c2lzIHJldmVhbHMgdGhhdCBpdCdzIG1vcmUgb2YgYSB3cmFwcGVyLCBub3QgdGhlIGNvcmUgZnVuY3Rpb24uIFRoZSByZWFsIHdvcmsgaXMgZG9uZSBieSBgdGdfc2V0X2NvbmZfdTY0YCBhbmQgYHRnX3NldF9jb25mX3VpbnRgLiBXZSdsbCBuZWVkIHRvIGZvY3VzIG9uIHRob3NlLiBUaGUgc3RhdGljIG5hdHVyZSBvZiBgdGdfZGlzcGF0Y2hfaW9wc190aW1lYCBtYWtlcyBpdCBsZXNzIGFwcGVhbGluZyBhcyBhIGZ1enogdGFyZ2V0LCBzbyB3ZSdsbCBieXBhc3MgaXQuIEkgbmVlZCB0byBkaWcgaW50byBgdGdfc2V0X2NvbmZfdTY0YCBhbmQgYHRnX3NldF9jb25mX3VpbnRgIHRvIHVuZGVyc3RhbmQgdGhlIGlucHV0cyBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzIzNSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDE4OjExOjM0LjM5OTM3NjM0N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2NzA4NDI0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Z19zZXRfY29uZl91NjRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLXRocm90dGxlLmM9MTM1Nz1zdGF0aWMgc3NpemVfdCB0Z19zZXRfY29uZihzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDA4LVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0MDk6c3RhdGljIHNzaXplX3QgdGdfc2V0X2NvbmZfdTY0KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDEwLVxcdFxcdFxcdCAgICAgICBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYz0xNDQ3PXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHRocm90bF9sZWdhY3lfZmlsZXNbXSA9IHtcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NTEtXFx0XFx0LnNlcV9zaG93ID0gdGdfcHJpbnRfY29uZl91NjQsXFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQ1MjpcXHRcXHQud3JpdGUgPSB0Z19zZXRfY29uZl91NjQsXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ1My1cXHR9LFxcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ1Ny1cXHRcXHQuc2VxX3Nob3cgPSB0Z19wcmludF9jb25mX3U2NCxcXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNDU4OlxcdFxcdC53cml0ZSA9IHRnX3NldF9jb25mX3U2NCxcXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDU5LVxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDE4OjExOjM2LjQ2NjQ2NDQ1OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExMzcwMzA5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Z19zZXRfY29uZl91aW50XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay10aHJvdHRsZS5jPTE0MDk9c3RhdGljIHNzaXplX3QgdGdfc2V0X2NvbmZfdTY0KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0MTQtXFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQxNTpzdGF0aWMgc3NpemVfdCB0Z19zZXRfY29uZl91aW50KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDE2LVxcdFxcdFxcdFxcdGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jPTE0NDc9c3RhdGljIHN0cnVjdCBjZnR5cGUgdGhyb3RsX2xlZ2FjeV9maWxlc1tdID0ge1xcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTQ2My1cXHRcXHQuc2VxX3Nob3cgPSB0Z19wcmludF9jb25mX3VpbnQsXFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTQ2NDpcXHRcXHQud3JpdGUgPSB0Z19zZXRfY29uZl91aW50LFxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NjUtXFx0fSxcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE0NjktXFx0XFx0LnNlcV9zaG93ID0gdGdfcHJpbnRfY29uZl91aW50LFxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE0NzA6XFx0XFx0LndyaXRlID0gdGdfc2V0X2NvbmZfdWludCxcXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNDcxLVxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDE4OjExOjM4LjU4MDE3NDA4NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjM3MTM4MzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYnJlYWtkb3duIG9mIHdoYXQgSSdtIGxvb2tpbmcgYXQ6XG5cbioqSWRlbnRpZnlpbmcgdGhlIEtleSBUaHJvdHRsaW5nIENvbmZpZ3VyYXRpb24gRnVuY3Rpb25zKipcblxuUmlnaHQsIHNvIEkndmUgemVyb2VkIGluIG9uIGB0Z19zZXRfY29uZl91NjRgIGFuZCBgdGdfc2V0X2NvbmZfdWludGAuIFRob3NlIHNlZW0gbGlrZSB0aGUgY3J1Y2lhbCBmdW5jdGlvbnMgZm9yIHNldHRpbmcgdGhlIHU2NCBhbmQgdWludCBjb25maWd1cmF0aW9ucywgcmVzcGVjdGl2ZWx5LCB3aXRoaW4gdGhlIHRocm90dGxpbmcgbWVjaGFuaXNtLiBBbmQsIGFzIGV4cGVjdGVkLCBgX19ibGtfdGhyb3RsX2Jpb2AgaXMgdGhlIGJpZyBvbmUgLSB0aGF0J3MgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIGFjdHVhbGx5IGFwcGx5aW5nIHRoZSBiaW8gdGhyb3R0bGluZyBsb2dpYy4gTm93LCBsZXQncyBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IHRob3NlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zIGFyZSBhbHNvIHVzZWQgaW4gdGhlIGB0aHJvdGxfZmlsZXNgIGNvbnRleHQsIGp1c3QgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE0MSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQxODoxMTo0MS44MTczMTU2OTlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTM2NTM3MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGhyb3RsX2ZpbGVzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay10aHJvdHRsZS5jPTE1NDc9c3RhdGljIHNzaXplX3QgdGdfc2V0X2xpbWl0KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE2MjgtXFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTYyOTpzdGF0aWMgc3RydWN0IGNmdHlwZSB0aHJvdGxfZmlsZXNbXSA9IHtcXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNjMwLVxcdHtcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jPTE2ODI9c3RydWN0IGJsa2NnX3BvbGljeSBibGtjZ19wb2xpY3lfdGhyb3RsID0ge1xcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE2ODM6XFx0LmRmbF9jZnR5cGVzXFx0XFx0PSB0aHJvdGxfZmlsZXMsXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTY4NC1cXHQubGVnYWN5X2NmdHlwZXNcXHRcXHQ9IHRocm90bF9sZWdhY3lfZmlsZXMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDE4OjExOjQzLjg3MDk3ODE0M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTk2MzQwMjgxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIFRocm90dGxpbmcgQ29uZmlndXJhdGlvbiBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyB0aHJvdHRsaW5nIGNvZGUgYW5kIG5vdGljaW5nIHNvbWV0aGluZy4gYHRnX3NldF9jb25mX3U2NGAgYW5kIGB0Z19zZXRfY29uZl91aW50YCBhcmUgbmVzdGxlZCByaWdodCB0aGVyZSBpbiBgdGhyb3RsX2xlZ2FjeV9maWxlc2AuIEludGVyZXN0aW5nLiBCdXQgd2FpdCwgYHRnX3NldF9saW1pdGAgaXMgb3ZlciBpbiBgdGhyb3RsX2ZpbGVzYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIsIGFuZCByaWdodCBub3cgYHRnX3NldF9saW1pdGAgc2VlbXMgbGlrZSB0aGUga2V5LiBJJ2xsIGZvY3VzIG9uIHVuZGVyc3RhbmRpbmcgdGhhdCBvbmUgZmlyc3QsIHRoZW4gbWF5YmUgSSdsbCBoYXZlIGEgYmV0dGVyIHBpY3R1cmUgb2YgdGhlIHdob2xlIHNldHVwLiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uIGluIGB0Z19zZXRfbGltaXRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTg5LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMTg6MTI6MjMuODM0MzgyODlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzM4MTk5NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGdfc2V0X2xpbWl0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay10aHJvdHRsZS5jPTE1NDA9c3RhdGljIGludCB0Z19wcmludF9saW1pdChzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTU0Ni1cXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNTQ3OnN0YXRpYyBzc2l6ZV90IHRnX3NldF9saW1pdChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTU0OC1cXHRcXHRcXHQgIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jPTE2Mjk9c3RhdGljIHN0cnVjdCBjZnR5cGUgdGhyb3RsX2ZpbGVzW10gPSB7XFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNjMzLVxcdFxcdC5zZXFfc2hvdyA9IHRnX3ByaW50X2xpbWl0LFxcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjE2MzQ6XFx0XFx0LndyaXRlID0gdGdfc2V0X2xpbWl0LFxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE2MzUtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMTg6MTI6MjYuMDY4MjA5Njk2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjA0MzczNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUaHJvdHRsaW5nIENvbmZpZ3VyYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgdGdfc2V0X2xpbWl0YCBpcyB0aGUgd3JpdGUgaGFuZGxlciBmb3IgY2dyb3VwIHYyLiBXZSdyZSBhbHNvIGRlYWxpbmcgd2l0aCBgdGdfc2V0X2NvbmZfdTY0YCBhbmQgYHRnX3NldF9jb25mX3VpbnRgLCB3aGljaCBhcmUgdGhlIGNncm91cCB2MSB3cml0ZSBoYW5kbGVycy4gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGhvbmluZyBpbiBvbiBgdGdfc2V0X2NvbmZgLCB3aGljaCBpcyBhIGtleSBmdW5jdGlvbiBhcyBpdCdzIHRoZSBvbmUgY2FsbGVkIGJ5IGJvdGggb2YgdGhlIHYxIGhhbmRsZXJzLiBUaGF04oCZcyBwcm9iYWJseSB3aGVyZSB0aGV5J3JlIHRyeWluZyB0byB1bmlmeSBvciBtb2RpZnkgc29tZXRoaW5nIGZ1bmRhbWVudGFsLlxuXG5JdCdzIGFsc28gdG91Y2hpbmcgYHRnX2Rpc3BhdGNoX2lvcHNfdGltZWAsIHdoaWNoIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBJTyBzY2hlZHVsaW5nIG9yIGFjY291bnRpbmcuIFRoZSBjZW50cmFsIHBvaW50IHNlZW1zIHRvIGJlIHRocm90dGxpbmcsIGFuZCBJIHNlZSB0aGUgY29uZmlncyBpbnZvbHZlZCBhcmUgYEJMS19ERVZfVEhST1RUTElOR2AuIE5vdywgc2luY2UgdGhlIHRocm90dGxpbmcgaXMgcHJvYmFibHkgdGllZCB0byBibG9jayBkZXZpY2VzLCBgQkxLX0NHUk9VUGAgaXMgdmVyeSBsaWtlbHkgYSBwcmVyZXF1aXNpdGUgb3IgYSBkZXBlbmRlbnQgZmVhdHVyZSBvZiBgQkxLX0RFVl9USFJPVFRMSU5HYC4gVGltZSB0byBjb25maXJtIHRoYXQgZGVwZW5kZW5jeSwganVzdCB0byBiZSBzdXJlLiBJIG5lZWQgdG8gZW5zdXJlIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgZGVwZW5kZW5jaWVzIGlzIHByZXNlbnQgYmVmb3JlIG1vdmluZyBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDQxLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDE4OjEyOjMwLjEyODY0ODU1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODU5OTE3MjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX1RIUk9UVExJTkdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZz05Nz1jb25maWcgQkxLX0RFVl9aT05FRFxcbi0tXFxuYmxvY2svS2NvbmZpZy0xMDUtXFxuYmxvY2svS2NvbmZpZzoxMDY6Y29uZmlnIEJMS19ERVZfVEhST1RUTElOR1xcbmJsb2NrL0tjb25maWctMTA3LVxcdGJvb2wgXFxcIkJsb2NrIGxheWVyIGJpbyB0aHJvdHRsaW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDE4OjEyOjMxLjk4ODU3MDc4M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDExNDg1NTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBsaWtlIHlvdTpcblxuKipEaXZpbmcgaW50byBCbG9jayBEZXZpY2UgVGhyb3R0bGluZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBpbnZlc3RpZ2F0ZSBob3cgYEJMS19ERVZfVEhST1RUTElOR2AgaXMgY29uZmlndXJlZC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCBpbnRvIGBibG9jay9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgY29yZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYmxvY2sgZGV2aWNlcyBhcmUgdHlwaWNhbGx5IGRlZmluZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoYXQgc2V0dGluZy4gQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXM/IFdoYXQgYXJlIHRoZSBkZWZhdWx0IHZhbHVlcyBhbmQgd2hhdCBhcmNoaXRlY3R1cmVzIG9yIGZlYXR1cmVzIGlzIGl0IHRpZWQgdG8/IElzIGl0IGEgdHJpc3RhdGUgb3IgYSBib29sZWFuPyBVbmRlcnN0YW5kaW5nIHRoZSBLY29uZmlnIHN0cnVjdHVyZSB3aWxsIGdpdmUgbWUgdGhlIGZvdW5kYXRpb25hbCBjb250ZXh0IEkgbmVlZCB0byBjb25zaWRlciBhbnkgcmVsYXRlZCBjb2RlIHBhdGhzIGFuZCBob3cgdGhyb3R0bGluZyBpcyBlbmFibGVkIG9yIGRpc2FibGVkLiBUaGlzIGlzIHRoZSBqdW1waW5nIG9mZiBwb2ludCB0byBhc3Nlc3MgaG93IHRoaXMgc3BlY2lmaWMgZmVhdHVyZSBiZWhhdmVzIGluIHRoZSB3aWRlciBibG9jayBkZXZpY2UgY29udGV4dCwgYW5kIGhvdyBpdCBtaWdodCBpbnRlcmFjdCB3aXRoIG90aGVyIGNvbnRyb2wgbWVjaGFuaXNtcyB3aXRoaW4gdGhlIElPIHN1YnN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUzOCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDE4OjEyOjM1LjQwMDA1ODE3MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMDpcXHRcXHRCbG9jayBsYXllciB6b25lZCBibG9jayBkZXZpY2Ugc3VwcG9ydC4gVGhpcyBvcHRpb24gZW5hYmxlc1xcbiAxMDE6XFx0XFx0c3VwcG9ydCBmb3IgWkFDL1pCQy9aTlMgaG9zdC1tYW5hZ2VkIGFuZCBob3N0LWF3YXJlIHpvbmVkIGJsb2NrXFxuIDEwMjpcXHRcXHRkZXZpY2VzLlxcbiAxMDM6XFx0XFxuIDEwNDpcXHRcXHRTYXkgeWVzIGhlcmUgaWYgeW91IGhhdmUgYSBaQUMsIFpCQywgb3IgWk5TIHN0b3JhZ2UgZGV2aWNlLlxcbiAxMDU6XFx0XFxuIDEwNjpcXHRjb25maWcgQkxLX0RFVl9USFJPVFRMSU5HXFxuIDEwNzpcXHRcXHRib29sIFxcXCJCbG9jayBsYXllciBiaW8gdGhyb3R0bGluZyBzdXBwb3J0XFxcIlxcbiAxMDg6XFx0XFx0ZGVwZW5kcyBvbiBCTEtfQ0dST1VQXFxuIDEwOTpcXHRcXHRzZWxlY3QgQkxLX0NHUk9VUF9SV1NUQVRcXG4gMTEwOlxcdFxcdGhlbHBcXG4gMTExOlxcdFxcdEJsb2NrIGxheWVyIGJpbyB0aHJvdHRsaW5nIHN1cHBvcnQuIEl0IGNhbiBiZSB1c2VkIHRvIGxpbWl0XFxuIDExMjpcXHRcXHR0aGUgSU8gcmF0ZSB0byBhIGRldmljZS4gSU8gcmF0ZSBwb2xpY2llcyBhcmUgcGVyIGNncm91cCBhbmRcXG4gMTEzOlxcdFxcdG9uZSBuZWVkcyB0byBtb3VudCBhbmQgdXNlIGJsa2lvIGNncm91cCBjb250cm9sbGVyIGZvciBjcmVhdGluZ1xcbiAxMTQ6XFx0XFx0Y2dyb3VwcyBhbmQgc3BlY2lmeWluZyBwZXIgZGV2aWNlIElPIHJhdGUgcG9saWNpZXMuXFxuIDExNTpcXHRcXG4gMTE2OlxcdFxcdFNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9ibGtpby1jb250cm9sbGVyLnJzdCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cXG4gMTE3OlxcdFxcbiAxMTg6XFx0Y29uZmlnIEJMS19XQlRcXG4gMTE5OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBibG9jayBkZXZpY2Ugd3JpdGViYWNrIHRocm90dGxpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDE4OjEyOjM1LjQwMDEyODczMVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjU5NzA3OTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCbG9jayBUaHJvdHRsaW5nIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyByZWxhdGVkIHRvIGJsb2NrIGRldmljZSB0aHJvdHRsaW5nLCB3aGljaCBoaW5nZXMgb24gdGhlIGBCTEtfQ0dST1VQYCBhbmQsIG1vcmUgc3BlY2lmaWNhbGx5LCBlbmFibGluZyBgQkxLX0RFVl9USFJPVFRMSU5HYC4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gYSBmZXcga2V5IHN5bWJvbHM6IGB0Z19zZXRfY29uZl91NjRgLCBgdGdfc2V0X2NvbmZfdWludGAsIGB0Z19zZXRfbGltaXRgLCBhbmQgYF9fYmxrX3Rocm90bF9iaW9gLlxuXG5JJ3ZlIGNvbmZpcm1lZCB0aGF0IGB0Z19zZXRfY29uZl91NjRgIGFuZCBgdGdfc2V0X2NvbmZfdWludGAgYXJlIGluZGVlZCBjZ3JvdXAgdjEgd3JpdGUgaGFuZGxlcnMsIGFuZCBgdGdfc2V0X2xpbWl0YCBpcyBhIGNncm91cCB2MiB3cml0ZSBoYW5kbGVyLiBgX19ibGtfdGhyb3RsX2Jpb2AgaXMgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50IGZvciBiaW8gdGhyb3R0bGluZywgc28gdGhhdOKAmXMgYSBwcmltYXJ5IHRhcmdldC5cblxuSSBhbHNvIGNoZWNrZWQgZm9yIG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucy4gSSBmb3VuZCBgdGdfZGlzcGF0Y2hfaW9wc190aW1lYCwgYnV0IHRoYXQncyBzdGF0aWMsIHNvIG15IGZvY3VzIHJlbWFpbnMgb24gYF9fYmxrX3Rocm90bF9iaW9gIHNpbmNlIHRoYXQgaXMgd2hhdCBjYWxscyBpdC5cblxuVGhlIGFjdHVhbCBjaGFuZ2VzIGludm9sdmUgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBkaXZpZGUtYnktemVybyBlcnJvciBpbiBgdGdfd2l0aGluX2lvcHNfbGltaXQoKWAgd2l0aGluIGB0Z19kaXNwYXRjaF9pb3BzX3RpbWUoKWAuIEl0IGhhbmRsZXMgdGhlIGBpb3BzX2xpbWl0ID09IDBgIGNhc2UgY29ycmVjdGx5IG5vdywgdHJlYXRpbmcgaXQgYXMgdW5saW1pdGVkLiBBZGRpdGlvbmFsbHksIHRoZXkndmUgZml4ZWQgYSBwb3RlbnRpYWwgdHJ1bmNhdGlvbiBpc3N1ZSBpbiBgdGdfc2V0X2NvbmYoKWAgYnkgdXNpbmcgYG1pbih2LCAodTY0KVVJTlRfTUFYKWAgd2hlbiBjYXN0aW5nLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2U7IGl0J3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIGFuZCB0aG9zZSBmb2N1cyBzeW1ib2xzIHdpbGwgYmUgdGhlIGtleSB0byB0cmlnZ2VyaW5nIGFuZCB0ZXN0aW5nIGl0LiBJJ3ZlIGFsc28gY2hlY2tlZCBhbmQgdmVyaWZpZWQgdGhhdCB0aG9zZSBmdW5jdGlvbnMsIGB0Z19zZXRfY29uZl91NjRgIGFuZCBgdGdfc2V0X2NvbmZfdWludGAgYXJlIGRlZmluZWQgaW4gdGhlIGBibG9jay9ibGstdGhyb3R0bGUuY2AgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxMDUsIk91dHB1dFRva2VucyI6MTMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMTg6MTI6NDMuNjU5ODM4NTI1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAxNTYyMTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfVEhST1RUTElOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRnX3NldF9jb25mX3U2NFwiLFxuICAgIFwidGdfc2V0X2NvbmZfdWludFwiLFxuICAgIFwidGdfc2V0X2xpbWl0XCIsXG4gICAgXCJfX2Jsa190aHJvdGxfYmlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBkaXZpZGUtYnktemVybyBidWcgaW4gdGhlIGJsb2NrIGxheWVyJ3MgYmlvIHRocm90dGxpbmcgbG9naWMgKGJsay10aHJvdHRsZSkgYW5kIGFuIGludGVnZXIgdHJ1bmNhdGlvbiBpc3N1ZSB3aGVuIHNldHRpbmcgY2dyb3VwIGxpbWl0cy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyByZWFjaGFibGUgdmlhIGNncm91cGZzIHdyaXRlcyBhbmQgYmxvY2sgSU8gb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX1RIUk9UVExJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Z19zZXRfY29uZl91NjRcIixcbiAgICBcInRnX3NldF9jb25mX3VpbnRcIixcbiAgICBcInRnX3NldF9saW1pdFwiLFxuICAgIFwiX19ibGtfdGhyb3RsX2Jpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgZGl2aWRlLWJ5LXplcm8gYnVnIGluIHRoZSBibG9jayBsYXllcidzIGJpbyB0aHJvdHRsaW5nIGxvZ2ljIChibGstdGhyb3R0bGUpIGFuZCBhbiBpbnRlZ2VyIHRydW5jYXRpb24gaXNzdWUgd2hlbiBzZXR0aW5nIGNncm91cCBsaW1pdHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgcmVhY2hhYmxlIHZpYSBjZ3JvdXBmcyB3cml0ZXMgYW5kIGJsb2NrIElPIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmf6vd[1] Phase: Succeeded StartedAt: 2026-07-15 18:12:55 +0000 UTC FinishedAt: 2026-07-15 18:12:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmf6vd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-15 18:12:55 +0000 UTC FinishedAt: 2026-07-15 18:12:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmf6vd[2] Phase: Succeeded StartedAt: 2026-07-15 18:12:55 +0000 UTC FinishedAt: 2026-07-15 22:20:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmf6vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf_u64","tg_set_conf_uint","tg_set_limit","__blk_throtl_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"c4fbc5f2-52af-432a-a2a7-391c1e4c3894","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-15 18:12:55 +0000 UTC FinishedAt: 2026-07-15 22:20:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf_u64","tg_set_conf_uint","tg_set_limit","__blk_throtl_bio"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"c4fbc5f2-52af-432a-a2a7-391c1e4c3894","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowmf6vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf_u64","tg_set_conf_uint","tg_set_limit","__blk_throtl_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"c4fbc5f2-52af-432a-a2a7-391c1e4c3894","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-15 18:12:55 +0000 UTC FinishedAt: 2026-07-15 18:13:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmf6vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf_u64","tg_set_conf_uint","tg_set_limit","__blk_throtl_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"c4fbc5f2-52af-432a-a2a7-391c1e4c3894","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-15 18:12:55 +0000 UTC FinishedAt: 2026-07-15 18:13:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmf6vd/series-workflowmf6vd-convert-artifact-1320250407/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmf6vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf_u64","tg_set_conf_uint","tg_set_limit","__blk_throtl_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"c4fbc5f2-52af-432a-a2a7-391c1e4c3894","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-15 18:13:05 +0000 UTC FinishedAt: 2026-07-15 18:43:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmf6vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf_u64","tg_set_conf_uint","tg_set_limit","__blk_throtl_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"c4fbc5f2-52af-432a-a2a7-391c1e4c3894","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-15 18:13:05 +0000 UTC FinishedAt: 2026-07-15 18:43:31 +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:*a9cfa3cd-801e-4620-9e39-7b9c5562703b,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-workflowmf6vd/series-workflowmf6vd-convert-artifact-1320250407/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": "014e2116-5a5b-4124-9732-de8d68b816f7", "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-workflowmf6vd/series-workflowmf6vd-build-action-497662909/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmf6vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf_u64","tg_set_conf_uint","tg_set_limit","__blk_throtl_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"c4fbc5f2-52af-432a-a2a7-391c1e4c3894","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-15 18:13:05 +0000 UTC FinishedAt: 2026-07-15 18:43:21 +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:*a9cfa3cd-801e-4620-9e39-7b9c5562703b,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-workflowmf6vd/series-workflowmf6vd-convert-artifact-1320250407/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": "014e2116-5a5b-4124-9732-de8d68b816f7", "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-workflowmf6vd/series-workflowmf6vd-build-action-497662909/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmf6vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf_u64","tg_set_conf_uint","tg_set_limit","__blk_throtl_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"c4fbc5f2-52af-432a-a2a7-391c1e4c3894","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-15 18:43:31 +0000 UTC FinishedAt: 2026-07-15 18:43:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmf6vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf_u64","tg_set_conf_uint","tg_set_limit","__blk_throtl_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"c4fbc5f2-52af-432a-a2a7-391c1e4c3894","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-15 18:43:31 +0000 UTC FinishedAt: 2026-07-15 18:43:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmf6vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf_u64","tg_set_conf_uint","tg_set_limit","__blk_throtl_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"c4fbc5f2-52af-432a-a2a7-391c1e4c3894","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-15 18:43:31 +0000 UTC FinishedAt: 2026-07-15 18:43:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmf6vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf_u64","tg_set_conf_uint","tg_set_limit","__blk_throtl_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"c4fbc5f2-52af-432a-a2a7-391c1e4c3894","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-15 18:43:31 +0000 UTC FinishedAt: 2026-07-15 18:43:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"c4fbc5f2-52af-432a-a2a7-391c1e4c3894","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmf6vd/series-workflowmf6vd-convert-artifact-1084142038/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmf6vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf_u64","tg_set_conf_uint","tg_set_limit","__blk_throtl_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"c4fbc5f2-52af-432a-a2a7-391c1e4c3894","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-15 18:43:54 +0000 UTC FinishedAt: 2026-07-15 18:45:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmf6vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf_u64","tg_set_conf_uint","tg_set_limit","__blk_throtl_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"c4fbc5f2-52af-432a-a2a7-391c1e4c3894","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-15 18:43:54 +0000 UTC FinishedAt: 2026-07-15 18:45:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*014e2116-5a5b-4124-9732-de8d68b816f7,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-workflowmf6vd/series-workflowmf6vd-build-action-497662909/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-workflowmf6vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf_u64","tg_set_conf_uint","tg_set_limit","__blk_throtl_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"c4fbc5f2-52af-432a-a2a7-391c1e4c3894","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-15 18:45:49 +0000 UTC FinishedAt: 2026-07-15 18:45:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmf6vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf_u64","tg_set_conf_uint","tg_set_limit","__blk_throtl_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"c4fbc5f2-52af-432a-a2a7-391c1e4c3894","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-15 18:45:49 +0000 UTC FinishedAt: 2026-07-15 18:45:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmf6vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf_u64","tg_set_conf_uint","tg_set_limit","__blk_throtl_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"c4fbc5f2-52af-432a-a2a7-391c1e4c3894","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-15 18:45:49 +0000 UTC FinishedAt: 2026-07-15 19:15:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmf6vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf_u64","tg_set_conf_uint","tg_set_limit","__blk_throtl_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"c4fbc5f2-52af-432a-a2a7-391c1e4c3894","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-15 18:45:49 +0000 UTC FinishedAt: 2026-07-15 19:15:22 +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:*a9cfa3cd-801e-4620-9e39-7b9c5562703b,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-workflowmf6vd/series-workflowmf6vd-convert-artifact-1084142038/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": "262a35d0-b2b8-4ad7-a648-c101950242bf", "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-workflowmf6vd/series-workflowmf6vd-build-action-1901287386/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmf6vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf_u64","tg_set_conf_uint","tg_set_limit","__blk_throtl_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"c4fbc5f2-52af-432a-a2a7-391c1e4c3894","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-15 18:45:49 +0000 UTC FinishedAt: 2026-07-15 19:15:11 +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:*a9cfa3cd-801e-4620-9e39-7b9c5562703b,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-workflowmf6vd/series-workflowmf6vd-convert-artifact-1084142038/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": "262a35d0-b2b8-4ad7-a648-c101950242bf", "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-workflowmf6vd/series-workflowmf6vd-build-action-1901287386/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmf6vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf_u64","tg_set_conf_uint","tg_set_limit","__blk_throtl_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"c4fbc5f2-52af-432a-a2a7-391c1e4c3894","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-15 19:15:22 +0000 UTC FinishedAt: 2026-07-15 19:15:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmf6vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf_u64","tg_set_conf_uint","tg_set_limit","__blk_throtl_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"c4fbc5f2-52af-432a-a2a7-391c1e4c3894","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-15 19:15:22 +0000 UTC FinishedAt: 2026-07-15 19:15:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmf6vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf_u64","tg_set_conf_uint","tg_set_limit","__blk_throtl_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"c4fbc5f2-52af-432a-a2a7-391c1e4c3894","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-15 19:15:22 +0000 UTC FinishedAt: 2026-07-15 19:17:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmf6vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf_u64","tg_set_conf_uint","tg_set_limit","__blk_throtl_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"c4fbc5f2-52af-432a-a2a7-391c1e4c3894","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-15 19:15:22 +0000 UTC FinishedAt: 2026-07-15 19:17:07 +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:*262a35d0-b2b8-4ad7-a648-c101950242bf,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-workflowmf6vd/series-workflowmf6vd-build-action-1901287386/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-workflowmf6vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf_u64","tg_set_conf_uint","tg_set_limit","__blk_throtl_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"c4fbc5f2-52af-432a-a2a7-391c1e4c3894","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-15 19:17:17 +0000 UTC FinishedAt: 2026-07-15 22:20:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmf6vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf_u64","tg_set_conf_uint","tg_set_limit","__blk_throtl_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"c4fbc5f2-52af-432a-a2a7-391c1e4c3894","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-15 19:17:17 +0000 UTC FinishedAt: 2026-07-15 22:20:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf_u64","tg_set_conf_uint","tg_set_limit","__blk_throtl_bio"],"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:*014e2116-5a5b-4124-9732-de8d68b816f7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*262a35d0-b2b8-4ad7-a648-c101950242bf,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-workflowmf6vd/series-workflowmf6vd-build-action-497662909/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-workflowmf6vd/series-workflowmf6vd-build-action-1901287386/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowmf6vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf_u64","tg_set_conf_uint","tg_set_limit","__blk_throtl_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"c4fbc5f2-52af-432a-a2a7-391c1e4c3894","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-15 19:17:17 +0000 UTC FinishedAt: 2026-07-15 19:17:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmf6vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf_u64","tg_set_conf_uint","tg_set_limit","__blk_throtl_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"c4fbc5f2-52af-432a-a2a7-391c1e4c3894","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-15 19:17:17 +0000 UTC FinishedAt: 2026-07-15 19:17:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf_u64","tg_set_conf_uint","tg_set_limit","__blk_throtl_bio"],"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-workflowmf6vd/series-workflowmf6vd-convert-artifact-998126459/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmf6vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf_u64","tg_set_conf_uint","tg_set_limit","__blk_throtl_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"c4fbc5f2-52af-432a-a2a7-391c1e4c3894","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-15 19:17:17 +0000 UTC FinishedAt: 2026-07-15 19:17:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmf6vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf_u64","tg_set_conf_uint","tg_set_limit","__blk_throtl_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"c4fbc5f2-52af-432a-a2a7-391c1e4c3894","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-15 19:17:17 +0000 UTC FinishedAt: 2026-07-15 19:17:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmf6vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf_u64","tg_set_conf_uint","tg_set_limit","__blk_throtl_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"c4fbc5f2-52af-432a-a2a7-391c1e4c3894","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-15 19:17:17 +0000 UTC FinishedAt: 2026-07-15 19:17:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmf6vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf_u64","tg_set_conf_uint","tg_set_limit","__blk_throtl_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"c4fbc5f2-52af-432a-a2a7-391c1e4c3894","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-15 19:17:27 +0000 UTC FinishedAt: 2026-07-15 22:20:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmf6vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["tg_set_conf_u64","tg_set_conf_uint","tg_set_limit","__blk_throtl_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_THROTTLING"],"series_id":"c4fbc5f2-52af-432a-a2a7-391c1e4c3894","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-15 19:17:27 +0000 UTC FinishedAt: 2026-07-15 22:20:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*014e2116-5a5b-4124-9732-de8d68b816f7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*262a35d0-b2b8-4ad7-a648-c101950242bf,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-workflowmf6vd/series-workflowmf6vd-build-action-497662909/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-workflowmf6vd/series-workflowmf6vd-build-action-1901287386/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-workflowmf6vd/series-workflowmf6vd-convert-artifact-998126459/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,}