Name: series-workflowbcr7f Phase: Succeeded StartedAt: 2026-07-21 15:53:18 +0000 UTC FinishedAt: 2026-07-21 17:40:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbcr7f[0] Phase: Succeeded StartedAt: 2026-07-21 15:53:19 +0000 UTC FinishedAt: 2026-07-21 16:30:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbcr7f[0].run-triage Phase: Succeeded StartedAt: 2026-07-21 15:53:19 +0000 UTC FinishedAt: 2026-07-21 16:30:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "3fe08b9796f36ef437ab9328e7dd1e5ff2d66603", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC", "NFC_NCI", "NFC_VIRTUAL_NCI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "3fe08b9796f36ef437ab9328e7dd1e5ff2d66603", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC", "NFC_NCI", "NFC_VIRTUAL_NCI" ], "series_id": "176648b6-267e-4e4f-9e9c-cb30e3266d5b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nci_core_conn_close_rsp_packet" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE2OjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GQyYjMzQ7LAogICAgJiMzNDtORkNfTkNJJiMzNDssCiAgICAmIzM0O05GQ19WSVJUVUFMX05DSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoaXMgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgTkZDIE5DSSBzdWJzeXN0ZW0gd2hlbiBoYW5kbGluZyBhIENPUkVfQ09OTl9DTE9TRV9SU1AgcGFja2V0LiBJdCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgYW5kIHRlc3RlZCB2aWEgdGhlIHZpcnR1YWwgTkNJIGRldmljZSBzaW11bGF0b3IuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTY6Mjg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1MGQxYmIyOThkYTc4MWY5MWY3MTBmYmJhNmE0MzUyZmRiNjg3MzE4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjEgMTY6Mjg6NTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25mYy9uY2kvcnNwLmMgYi9uZXQvbmZjL25jaS9yc3AuY1xuaW5kZXggNmIyZmE2YmRiZDE0YmQuLjIxYzJmZTY0NDkwZTJkIDEwMDY0NFxuLS0tIGEvbmV0L25mYy9uY2kvcnNwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZmMvbmNpL3JzcC5jXG5AQCAtMzYwLDYgJiM0MzszNjAsNyBAQCBzdGF0aWMgdm9pZCBuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4gXHRcdFx0bGlzdF9kZWwoXHUwMDI2Y29ubl9pbmZvLVx1MDAzZWxpc3QpO1xuIFx0XHRcdGlmIChjb25uX2luZm8gPT0gbmRldi1cdTAwM2VyZl9jb25uX2luZm8pXG4gXHRcdFx0XHRuZGV2LVx1MDAzZXJmX2Nvbm5faW5mbyA9IE5VTEw7XG4mIzQzO1x0XHRcdGRldm1fa2ZyZWUoXHUwMDI2bmRldi1cdTAwM2VuZmNfZGV2LVx1MDAzZWRldiwgY29ubl9pbmZvLVx1MDAzZWRlc3RfcGFyYW1zKTtcbiBcdFx0XHRkZXZtX2tmcmVlKFx1MDAyNm5kZXYtXHUwMDNlbmZjX2Rldi1cdTAwM2VkZXYsIGNvbm5faW5mbyk7XG4gXHRcdH1cbiBcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNjoyODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZDJiMzNDssCiAgICAmIzM0O05GQ19OQ0kmIzM0OywKICAgICYjMzQ7TkZDX1ZJUlRVQUxfTkNJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmNpX2NvcmVfY29ubl9jbG9zZV9yc3BfcGFja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIHRoZSBORkMgTkNJIHN1YnN5c3RlbSB3aGVuIGhhbmRsaW5nIGEgQ09SRV9DT05OX0NMT1NFX1JTUCBwYWNrZXQuIEl0IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIHZpYSB0aGUgdmlydHVhbCBOQ0kgZGV2aWNlIHNpbXVsYXRvci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTBkMWJiMjk4ZGE3ODFmOTFmNzEwZmJiYTZhNDM1MmZkYjY4NzMxOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDIxIDE2OjI4OjUxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25mYy9uY2kvcnNwLmMgYi9uZXQvbmZjL25jaS9yc3AuYwppbmRleCA2YjJmYTZiZGJkMTRiZC4uMjFjMmZlNjQ0OTBlMmQgMTAwNjQ0Ci0tLSBhL25ldC9uZmMvbmNpL3JzcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZmMvbmNpL3JzcC5jCkBAIC0zNjAsNiAmIzQzOzM2MCw3IEBAIHN0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldiwKIAkJCWxpc3RfZGVsKCZhbXA7Y29ubl9pbmZvLSZndDtsaXN0KTsKIAkJCWlmIChjb25uX2luZm8gPT0gbmRldi0mZ3Q7cmZfY29ubl9pbmZvKQogCQkJCW5kZXYtJmd0O3JmX2Nvbm5faW5mbyA9IE5VTEw7CiYjNDM7CQkJZGV2bV9rZnJlZSgmYW1wO25kZXYtJmd0O25mY19kZXYtJmd0O2RldiwgY29ubl9pbmZvLSZndDtkZXN0X3BhcmFtcyk7CiAJCQlkZXZtX2tmcmVlKCZhbXA7bmRldi0mZ3Q7bmZjX2Rldi0mZ3Q7ZGV2LCBjb25uX2luZm8pOwogCQl9CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTIyCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE1lbW9yeSBMZWFrIEZpeCBpbiBuZXQvbmZjL25jaS9yc3AuYyoqCgpPa2F5LCBzbyB3ZSBoYXZlIGEgcGF0Y2ggdGhhdCYjMzk7cyBiZWVuIHByb3Bvc2VkIGZvciBgbmV0L25mYy9uY2kvcnNwLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIGZ1bmN0aW9uYWxpdHksIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBhIHBvdGVudGlhbCBtZW1vcnkgbGVhayBmaXguIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBkZXZtX2tmcmVlKCZhbXA7bmRldi0mZ3Q7bmZjX2Rldi0mZ3Q7ZGV2LCBjb25uX2luZm8tJmd0O2Rlc3RfcGFyYW1zKTtgIGJlZm9yZSBmcmVlaW5nIGBjb25uX2luZm9gLiBUaGlzIGlzIGludGVyZXN0aW5nOyBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIG1lbW9yeSBsZWFrIGZpeCDigJMgdGhvc2UgYXJlIGFsd2F5cyB3b3J0aCBhIGNsb3NlciBsb29rLgoKTXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzIHRvIHRyYWNlIHRoaXMgdGhyb3VnaCB0aGUgcmVsYXRlZCBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZSwgc28gSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGZ1bmN0aW9uIHRoYXQgc2VlbXMgY2VudHJhbCB0byB0aGlzIGZpeCwgYG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldGAuIEkmIzM5O2xsIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBmaW5kIHRoZSBkZWZpbml0aW9uIGFuZCBhbnkgcmVsYXRlZCBjYWxscyB3aXRoaW4gdGhlIGNvZGUgYmFzZS4gU2VlaW5nIHRoZSBjb25uZWN0aW9ucyBhbmQgaW50ZXJhY3Rpb25zIG9mIHRoaXMgZnVuY3Rpb24gd2lsbCBjbGFyaWZ5IHdoZXRoZXIgdGhpcyBpcyB0aGUgY29ycmVjdCBwbGFjZSB0byBoYW5kbGUgZnJlZWluZyB0aGUgbWVtb3J5IG9yIGlmIHNvbWV0aGluZyBpcyBhbWlzcyBlbHNld2hlcmUuIFVuZGVyc3RhbmRpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGFuZCBlc3BlY2lhbGx5IHRoZSBhbGxvY2F0aW9uIHBhdHRlcm5zIG9mIGBjb25uX2luZm8tJmd0O2Rlc3RfcGFyYW1zYCB3aWxsIGJlIGNyaXRpY2FsIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIHRoZSBjb3JyZWN0IGZpeC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmZjL25jaS9yc3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmZjL25jaS9yc3AuYz0yOTQ9c3RhdGljIHZvaWQgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbi0tXG5uZXQvbmZjL25jaS9yc3AuYy0zNDgtXG5uZXQvbmZjL25jaS9yc3AuYzozNDk6c3RhdGljIHZvaWQgbmNpX2NvcmVfY29ubl9jbG9zZV9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxubmV0L25mYy9uY2kvcnNwLmMtMzUwLVx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9uZmMvbmNpL3JzcC5jPTM3MD12b2lkIG5jaV9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9uZmMvbmNpL3JzcC5jLTQxMi1cdGNhc2UgTkNJX09QX0NPUkVfQ09OTl9DTE9TRV9SU1A6XG5uZXQvbmZjL25jaS9yc3AuYzo0MTM6XHRcdG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldChuZGV2LCBza2IpO1xubmV0L25mYy9uY2kvcnNwLmMtNDE0LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjE2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyB0aGUgTkNJIENvcmUgQ29ubmVjdGlvbiBDbG9zdXJlIFJlc3BvbnNlKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbmNpX2NvcmVfY29ubl9jbG9zZV9yc3BfcGFja2V0YCBmdW5jdGlvbi4gSXQgc2VlbXMgdG8gYmUgdHJpZ2dlcmVkIHdpdGhpbiB0aGUgYG5jaV9yc3BfcGFja2V0YCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdoZW4gd2UgZ2V0IGFuIGBOQ0lfT1BfQ09SRV9DT05OX0NMT1NFX1JTUGAgbWVzc2FnZS4gVGhhdCYjMzk7cyBhIGtleSBjbHVlOyB0aGlzIGlzIGRlZmluaXRlbHkgcGFydCBvZiB0aGUgTkZDIE5DSSBzdWJzeXN0ZW0uIFRpbWUgdG8gZGlnIGludG8gdGhlIGBLY29uZmlnYCBmb3IgdGhlIE5GQyBOQ0kgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgb3B0aW9ucyByZWxhdGVkIHRvIGNvbm5lY3Rpb24gY2xvc3VyZSByZXNwb25zZXMgdG8gcHJvcGVybHkgYXNzZXNzIGl0cyBmdW5jdGlvbiBhbmQgaW50ZWdyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTY6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GQ19OQ0kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmZjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmZjL25jaS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvbmZjL25jaS9LY29uZmlnOjI6Y29uZmlnIE5GQ19OQ0lcbm5ldC9uZmMvbmNpL0tjb25maWctMy1cdGRlcGVuZHMgb24gTkZDXG4tLVxubmV0L25mYy9uY2kvS2NvbmZpZy0xMi1cbm5ldC9uZmMvbmNpL0tjb25maWc6MTM6Y29uZmlnIE5GQ19OQ0lfU1BJXG5uZXQvbmZjL25jaS9LY29uZmlnLTE0LVx0ZGVwZW5kcyBvbiBORkNfTkNJIFx1MDAyNlx1MDAyNiBTUElcbi0tXG5uZXQvbmZjL25jaS9LY29uZmlnLTIzLVxubmV0L25mYy9uY2kvS2NvbmZpZzoyNDpjb25maWcgTkZDX05DSV9VQVJUXG5uZXQvbmZjL25jaS9LY29uZmlnLTI1LVx0ZGVwZW5kcyBvbiBORkNfTkNJIFx1MDAyNlx1MDAyNiBUVFlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDU3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgbmNpX2NvcmVfY29ubl9jbG9zZV9yc3BfcGFja2V0YCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbmNpX2NvcmVfY29ubl9jbG9zZV9yc3BfcGFja2V0YCBmdW5jdGlvbiwgYW5kIHRoZSBjb25maWd1cmF0aW9uIGlzIHNldCB0byBgTkZDX05DSWAuIFJpZ2h0IG9mZiB0aGUgYmF0LCB0aGF0IHRlbGxzIG1lIHRoZSBzY29wZSBvZiB0aGUgcHJvYmxlbSBpcyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgTkZDIE5DSS4gQnV0IGxldCYjMzk7cyBub3QganVtcCB0byBjb25jbHVzaW9uczsgSSBrbm93IGBORkNfTkNJYCBpcyBkZXBlbmRlbnQgb24gYE5GQ2AgYmVpbmcgZW5hYmxlZCwgc28gdGhhdCYjMzk7cyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kIGFzIEkgZGlnIGRlZXBlci4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHJlc3BvbnNlIHBhY2tldCBpcyBoYW5kbGVkLCBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSB0aGlzIGNvbmZpZ3VyYXRpb24uCgpCZWZvcmUgSSBnbyBmdXJ0aGVyLCBJIHNob3VsZCB2ZXJpZnkgdGhlIGV4aXN0ZW5jZSBvZiBhbHRlcm5hdGl2ZSBwYXRocywgYnkgc2VlaW5nIGlmIHRoZXJlIGFyZSBhbnkgdmlydHVhbCBkcml2ZXJzIGFjdGl2ZSBvciByZWxldmFudC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHZpcnR1YWwgTkNJIGRyaXZlcnMuIExldCBtZSBjaGVjayBpZiBgTkZDX1ZJUlRVQUxfTkNJYCBpcyBkZWZpbmVkIG9yIGludm9sdmVkIGhlcmUuIEl04oCZcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCAqYWxsKiB0aGUgcG9zc2libGUgd2F5cyB0aGlzIGZ1bmN0aW9uYWxpdHkgY291bGQgYmUgaW1wbGVtZW50ZWQuIFRoaXMgaXMgc3RhbmRhcmQgcHJvY2VkdXJlOiBjb3ZlciBhbGwgdGhlIGJhc2VzLCBiZWNhdXNlIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IGVkZ2UgY2FzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTY6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GQ19WSVJUVUFMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmZjL0tjb25maWc9NDI9Y29uZmlnIE5GQ19QT1JUMTAwXG4tLVxuZHJpdmVycy9uZmMvS2NvbmZpZy01MS1cbmRyaXZlcnMvbmZjL0tjb25maWc6NTI6Y29uZmlnIE5GQ19WSVJUVUFMX05DSVxuZHJpdmVycy9uZmMvS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O05DSSBkZXZpY2Ugc2ltdWxhdG9yIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE2OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MDQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBORkMgVmlydHVhbCBOQ0kgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgc28gdGhlIGNvbmNlcHQgb2YgYE5GQ19WSVJUVUFMX05DSWAgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgSSYjMzk7bSBmYW1pbGlhciB3aXRoOyBpdCYjMzk7cyBhIGtub3duIGNvbnN0cnVjdC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hlcmUmIzM5O3MgdGhlIGltcGxlbWVudGF0aW9uPyYjMzQ7IEdpdmVuIHRoZSBuYW1lLCBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIGl0IHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIE5GQyBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBpbiB0aGUgZHJpdmVyIHNwYWNlLiBNb3JlIHNwZWNpZmljYWxseSwgSSBzaG91bGQgYmUgbG9va2luZyBhdCBgZHJpdmVycy9uZmMvYC4gTGV0IG1lIHRoaW5rLi4uZ2l2ZW4gaXQmIzM5O3MgdmlydHVhbCwgc29tZXRoaW5nIGxpa2UgYHZpcnR1YWxfbmNpZGV2LmNgIHNvdW5kcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgZmlsZSBuYW1lLiBJIHNob3VsZCBzdGFydCB0aGVyZSwgb3IgbWF5YmUgc29tZXRoaW5nIHNpbWlsYXIsIGFzIGEgZmlyc3QgcG9ydCBvZiBjYWxsLiBUaGF0JiMzOTtzIHByb2JhYmx5IHRoZSBtb3N0IGxpa2VseSBsb2NhdGlvbiBmb3IgdGhlIGNvZGUgSSYjMzk7bSBhZnRlciwgYXQgbGVhc3QgZm9yIGEgZmlyc3QgcGFzcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBkaWcgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE2OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05GQ19WSVJUVUFMX05DSSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmZjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25mYy9LY29uZmlnPTQyPWNvbmZpZyBORkNfUE9SVDEwMFxuLS1cbmRyaXZlcnMvbmZjL0tjb25maWctNTEtXG5kcml2ZXJzL25mYy9LY29uZmlnOjUyOmNvbmZpZyBORkNfVklSVFVBTF9OQ0lcbmRyaXZlcnMvbmZjL0tjb25maWctNTMtXHR0cmlzdGF0ZSBcJiMzNDtOQ0kgZGV2aWNlIHNpbXVsYXRvciBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25mYy9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfTkZDX1NUOTVIRilcdCYjNDM7PSBzdDk1aGYvXG5kcml2ZXJzL25mYy9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfTkZDX1ZJUlRVQUxfTkNJKVx0JiM0Mzs9IHZpcnR1YWxfbmNpZGV2Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTY6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkyNQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipNeSBUaGlua2luZyBvbiBORkMgQ29uZmlndXJhdGlvbiBhbmQgQ29yZSBSZXNwb25zZSBQYWNrZXRzKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBvcHRpbWFsIE5GQyBjb25maWd1cmF0aW9uLiBCYXNlZCBvbiBteSBleHBlcmllbmNlLCBJJiMzOTtkIHNheSBlbmFibGluZyBgTkZDX1ZJUlRVQUxfTkNJYCBpcyBhIHNvbGlkIG1vdmUuIFRoYXQgcHJvdmlkZXMgYSBnb29kIGJhc2UgZm9yIHZpcnR1YWwgTkNJIGltcGxlbWVudGF0aW9ucywgd2hpY2ggSSBvZnRlbiBzZWUgYXMgbmVjZXNzYXJ5LiBBbG9uZyB3aXRoIHRoYXQsIG5hdHVyYWxseSwgYE5GQ19OQ0lgIGFuZCBgTkZDYCBzaG91bGQgYWxzbyBiZSBlbmFibGVkLiBUaGF0JiMzOTtzIHByZXR0eSBzdGFuZGFyZCBmb3IgbW9zdCBzZXR1cHMuCgpOb3csIEkgd2FudCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgc29tZXRoaW5nIHNwZWNpZmljOiB0aGUgYG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldGAgZnVuY3Rpb24uIEkmIzM5O20gZ29pbmcgdG8gY2hlY2sgaG93IHRoaXMgcmVzcG9uc2UgcGFja2V0IGlzIGhhbmRsZWQgd2l0aGluIHRoZSBgbmV0L25mYy9uY2kvcnNwLmNgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBzeXN0ZW0gcmVhY3RzIHRvIGEgY29ubmVjdGlvbiBjbG9zZSByZXNwb25zZS4gVGhpcyBpcyBjcml0aWNhbCBmb3Igcm9idXN0IE5GQyBvcGVyYXRpb24sIGFzIEkgbmVlZCB0byBrbm93IHRoZSBwcm9wZXIgY2xlYW51cCBzZXF1ZW5jZSBvbiBhbnkgZmFpbHVyZSBvciBkaXNjb25uZWN0LiBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBpbXBsZW1lbnRhdGlvbiB0byBtYWtlIHN1cmUgaXQgZnVuY3Rpb25zIGFzIGV4cGVjdGVkIGluIGEgcm9idXN0IGFuZCBzZWN1cmUgZmFzaGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTY6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmZjL25jaS9yc3AuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzQwOlx0XG4gMzQxOlx0ZnJlZV9jb25uX2luZm86XG4gMzQyOlx0XHRpZiAoc3RhdHVzID09IE5DSV9TVEFUVVNfUkVKRUNURUQpXG4gMzQzOlx0XHRcdGRldm1fa2ZyZWUoXHUwMDI2bmRldi1cdTAwM2VuZmNfZGV2LVx1MDAzZWRldiwgY29ubl9pbmZvKTtcbiAzNDQ6XHRleGl0OlxuIDM0NTpcdFxuIDM0NjpcdFx0bmNpX3JlcV9jb21wbGV0ZShuZGV2LCBzdGF0dXMpO1xuIDM0NzpcdH1cbiAzNDg6XHRcbiAzNDk6XHRzdGF0aWMgdm9pZCBuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4gMzUwOlx0XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4gMzUxOlx0e1xuIDM1MjpcdFx0c3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcbiAzNTM6XHRcdF9fdTggc3RhdHVzID0gc2tiLVx1MDAzZWRhdGFbMF07XG4gMzU0Olx0XG4gMzU1Olx0XHRwcl9kZWJ1ZyhcJiMzNDtzdGF0dXMgMHgleFxcblwmIzM0Oywgc3RhdHVzKTtcbiAzNTY6XHRcdGlmIChzdGF0dXMgPT0gTkNJX1NUQVRVU19PSykge1xuIDM1NzpcdFx0XHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKG5kZXYsXG4gMzU4Olx0XHRcdFx0XHRcdFx0XHQgbmRldi1cdTAwM2VjdXJfY29ubl9pZCk7XG4gMzU5Olx0XHRcdGlmIChjb25uX2luZm8pIHtcbiAzNjA6XHRcdFx0XHRsaXN0X2RlbChcdTAwMjZjb25uX2luZm8tXHUwMDNlbGlzdCk7XG4gMzYxOlx0XHRcdFx0aWYgKGNvbm5faW5mbyA9PSBuZGV2LVx1MDAzZXJmX2Nvbm5faW5mbylcbiAzNjI6XHRcdFx0XHRcdG5kZXYtXHUwMDNlcmZfY29ubl9pbmZvID0gTlVMTDtcbiAzNjM6XHRcdFx0XHRkZXZtX2tmcmVlKFx1MDAyNm5kZXYtXHUwMDNlbmZjX2Rldi1cdTAwM2VkZXYsIGNvbm5faW5mby1cdTAwM2VkZXN0X3BhcmFtcyk7XG4gMzY0Olx0XHRcdFx0ZGV2bV9rZnJlZShcdTAwMjZuZGV2LVx1MDAzZW5mY19kZXYtXHUwMDNlZGV2LCBjb25uX2luZm8pO1xuIDM2NTpcdFx0XHR9XG4gMzY2Olx0XHR9XG4gMzY3Olx0XHRuY2lfcmVxX2NvbXBsZXRlKG5kZXYsIHN0YXR1cyk7XG4gMzY4Olx0fVxuIDM2OTpcdFxuIDM3MDpcdHZvaWQgbmNpX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gMzcxOlx0e1xuIDM3MjpcdFx0X191MTYgcnNwX29wY29kZSA9IG5jaV9vcGNvZGUoc2tiLVx1MDAzZWRhdGEpO1xuIDM3MzpcdFxuIDM3NDpcdFx0Lyogd2UgZ290IGEgcnNwLCBzdG9wIHRoZSBjbWQgdGltZXIgKi9cbiAzNzU6XHRcdHRpbWVyX2RlbGV0ZShcdTAwMjZuZGV2LVx1MDAzZWNtZF90aW1lcik7XG4gMzc2Olx0XG4gMzc3Olx0XHRwcl9kZWJ1ZyhcJiMzNDtOQ0kgUlg6IE1UPXJzcCwgUEJGPSVkLCBHSUQ9MHgleCwgT0lEPTB4JXgsIHBsZW49JWRcXG5cJiMzNDssXG4gMzc4Olx0XHRcdCBuY2lfcGJmKHNrYi1cdTAwM2VkYXRhKSxcbiAzNzk6XHRcdFx0IG5jaV9vcGNvZGVfZ2lkKHJzcF9vcGNvZGUpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTU0CgkJCQkJCQlvdXRwdXQ6IDExMwoJCQkJCQkJdGhvdWdodHM6IDIwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpcyBhbmQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCDigJMgc2VlbXMgbGlrZSBpdCYjMzk7cyBhZGRyZXNzaW5nIGEgbWVtb3J5IGxlYWssIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXRgIGZ1bmN0aW9uLiBUaGlzIGlzIGtleSwgYW5kIGl0JiMzOTtzIHJlYWNoYWJsZSB0aHJvdWdoIGVpdGhlciBgdmlydHVhbF9uY2lkZXZgIG9yIG90aGVyIE5GQyBkcml2ZXJzLgoKUmlnaHQsIHNvIHRvIGVuYWJsZSB0aGlzIGZpeCwgdGhlIGNvbmZpZ3MgaW52b2x2ZWQgYXJlIGBORkNfTkNJYCBhbmQgYE5GQ19WSVJUVUFMX05DSWAuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgYE5GQ19OQ0lgIGlzIGVub3VnaCB0byBwdWxsIGluIGV2ZXJ5dGhpbmcgd2UgbmVlZCwgb3IgaWYgd2UgbmVlZCB0byBleHBsaWNpdGx5IGluY2x1ZGUgYE5GQ2AgYXMgd2VsbC4gTGV0IG1lIGp1c3QgYWRkIGBORkNgLCBgTkZDX05DSWAsIGFuZCBgTkZDX1ZJUlRVQUxfTkNJYCB0byB0aGUgbGlzdC4gQmV0dGVyIHRvIGJlIHRob3JvdWdoLCBJIHN1cHBvc2UuCgpOb3csIGxldCYjMzk7cyBjaXJjbGUgYmFjayB0byB0aGF0IGZvY3VzIHN5bWJvbDogYG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldGAuIEl0JiMzOTtzIHN0YXRpYywgd2hpY2ggaXMgaWRlYWwgYmVjYXVzZSB0aGF0IG1ha2VzIGl0IGEgbXVjaCBjbGVhcmVyIHRhcmdldCBmb3IgYW5hbHlzaXMuIGBuY2lfcnNwX3BhY2tldGAgbWlnaHQgYWxzbyBiZSByZWxldmFudCwgYnV0IGl0JiMzOTtzIGEgYml0IHRvbyBnZW5lcmljLCBzbyBgbmNpX2NvcmVfY29ubl9jbG9zZV9yc3BfcGFja2V0YCBpcyB0aGUgcHJlZmVycmVkIHRhcmdldC4KCkFscmlnaHQsIEkmIzM5O20gc2F0aXNmaWVkIHdpdGggdGhlIGFzc2Vzc21lbnQuIFRpbWUgdG8gc2V0IHRoZXNlIHJlc3VsdHMgYW5kIHByb2NlZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE2OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORkMmIzM0OywKICAgICYjMzQ7TkZDX05DSSYjMzQ7LAogICAgJiMzNDtORkNfVklSVFVBTF9OQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIE5GQyBOQ0kgc3Vic3lzdGVtIHdoZW4gaGFuZGxpbmcgYSBDT1JFX0NPTk5fQ0xPU0VfUlNQIHBhY2tldC4gSXQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgdmlhIHRoZSB2aXJ0dWFsIE5DSSBkZXZpY2Ugc2ltdWxhdG9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORkMmIzM0OywKICAgICYjMzQ7TkZDX05DSSYjMzQ7LAogICAgJiMzNDtORkNfVklSVFVBTF9OQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIE5GQyBOQ0kgc3Vic3lzdGVtIHdoZW4gaGFuZGxpbmcgYSBDT1JFX0NPTk5fQ0xPU0VfUlNQIHBhY2tldC4gSXQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgdmlhIHRoZSB2aXJ0dWFsIE5DSSBkZXZpY2Ugc2ltdWxhdG9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjFUMTY6Mjg6NTMuNzMyMTE5MTAxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkzOTUwNzg2MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZDXCIsXG4gICAgXCJORkNfTkNJXCIsXG4gICAgXCJORkNfVklSVFVBTF9OQ0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgTkZDIE5DSSBzdWJzeXN0ZW0gd2hlbiBoYW5kbGluZyBhIENPUkVfQ09OTl9DTE9TRV9SU1AgcGFja2V0LiBJdCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgYW5kIHRlc3RlZCB2aWEgdGhlIHZpcnR1YWwgTkNJIGRldmljZSBzaW11bGF0b3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE2OjI4OjUzLjczMjEyNjQ3MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc5NzIxNDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTBkMWJiMjk4ZGE3ODFmOTFmNzEwZmJiYTZhNDM1MmZkYjY4NzMxOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1bCAyMSAxNjoyODo1MSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbmZjL25jaS9yc3AuYyBiL25ldC9uZmMvbmNpL3JzcC5jXFxuaW5kZXggNmIyZmE2YmRiZDE0YmQuLjIxYzJmZTY0NDkwZTJkIDEwMDY0NFxcbi0tLSBhL25ldC9uZmMvbmNpL3JzcC5jXFxuKysrIGIvbmV0L25mYy9uY2kvcnNwLmNcXG5AQCAtMzYwLDYgKzM2MCw3IEBAIHN0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG4gXFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNmNvbm5faW5mby1cXHUwMDNlbGlzdCk7XFxuIFxcdFxcdFxcdGlmIChjb25uX2luZm8gPT0gbmRldi1cXHUwMDNlcmZfY29ubl9pbmZvKVxcbiBcXHRcXHRcXHRcXHRuZGV2LVxcdTAwM2VyZl9jb25uX2luZm8gPSBOVUxMO1xcbitcXHRcXHRcXHRkZXZtX2tmcmVlKFxcdTAwMjZuZGV2LVxcdTAwM2VuZmNfZGV2LVxcdTAwM2VkZXYsIGNvbm5faW5mby1cXHUwMDNlZGVzdF9wYXJhbXMpO1xcbiBcXHRcXHRcXHRkZXZtX2tmcmVlKFxcdTAwMjZuZGV2LVxcdTAwM2VuZmNfZGV2LVxcdTAwM2VkZXYsIGNvbm5faW5mbyk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNjoyODo1NC4zMTU4OTAzMjZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1ODgxMTI5NDk2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORkNcIixcbiAgICBcIk5GQ19OQ0lcIixcbiAgICBcIk5GQ19WSVJUVUFMX05DSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhpcyBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIHRoZSBORkMgTkNJIHN1YnN5c3RlbSB3aGVuIGhhbmRsaW5nIGEgQ09SRV9DT05OX0NMT1NFX1JTUCBwYWNrZXQuIEl0IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIHZpYSB0aGUgdmlydHVhbCBOQ0kgZGV2aWNlIHNpbXVsYXRvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1MGQxYmIyOThkYTc4MWY5MWY3MTBmYmJhNmE0MzUyZmRiNjg3MzE4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjEgMTY6Mjg6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmZjL25jaS9yc3AuYyBiL25ldC9uZmMvbmNpL3JzcC5jXG5pbmRleCA2YjJmYTZiZGJkMTRiZC4uMjFjMmZlNjQ0OTBlMmQgMTAwNjQ0XG4tLS0gYS9uZXQvbmZjL25jaS9yc3AuY1xuKysrIGIvbmV0L25mYy9uY2kvcnNwLmNcbkBAIC0zNjAsNiArMzYwLDcgQEAgc3RhdGljIHZvaWQgbmNpX2NvcmVfY29ubl9jbG9zZV9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuIFx0XHRcdGxpc3RfZGVsKFx1MDAyNmNvbm5faW5mby1cdTAwM2VsaXN0KTtcbiBcdFx0XHRpZiAoY29ubl9pbmZvID09IG5kZXYtXHUwMDNlcmZfY29ubl9pbmZvKVxuIFx0XHRcdFx0bmRldi1cdTAwM2VyZl9jb25uX2luZm8gPSBOVUxMO1xuK1x0XHRcdGRldm1fa2ZyZWUoXHUwMDI2bmRldi1cdTAwM2VuZmNfZGV2LVx1MDAzZWRldiwgY29ubl9pbmZvLVx1MDAzZWRlc3RfcGFyYW1zKTtcbiBcdFx0XHRkZXZtX2tmcmVlKFx1MDAyNm5kZXYtXHUwMDNlbmZjX2Rldi1cdTAwM2VkZXYsIGNvbm5faW5mbyk7XG4gXHRcdH1cbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE2OjI4OjU0LjMxNTg5Mjk3NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MTM3MjM3OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTWVtb3J5IExlYWsgRml4IGluIG5ldC9uZmMvbmNpL3JzcC5jKipcblxuT2theSwgc28gd2UgaGF2ZSBhIHBhdGNoIHRoYXQncyBiZWVuIHByb3Bvc2VkIGZvciBgbmV0L25mYy9uY2kvcnNwLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIGZ1bmN0aW9uYWxpdHksIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBhIHBvdGVudGlhbCBtZW1vcnkgbGVhayBmaXguIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBkZXZtX2tmcmVlKFx1MDAyNm5kZXYtXHUwMDNlbmZjX2Rldi1cdTAwM2VkZXYsIGNvbm5faW5mby1cdTAwM2VkZXN0X3BhcmFtcyk7YCBiZWZvcmUgZnJlZWluZyBgY29ubl9pbmZvYC4gVGhpcyBpcyBpbnRlcmVzdGluZzsgaXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIG1lbW9yeSBsZWFrIGZpeCDigJMgdGhvc2UgYXJlIGFsd2F5cyB3b3J0aCBhIGNsb3NlciBsb29rLlxuXG5NeSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMgdG8gdHJhY2UgdGhpcyB0aHJvdWdoIHRoZSByZWxhdGVkIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgY2hhbmdlLCBzbyBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBmdW5jdGlvbiB0aGF0IHNlZW1zIGNlbnRyYWwgdG8gdGhpcyBmaXgsIGBuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXRgLiBJJ2xsIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBmaW5kIHRoZSBkZWZpbml0aW9uIGFuZCBhbnkgcmVsYXRlZCBjYWxscyB3aXRoaW4gdGhlIGNvZGUgYmFzZS4gU2VlaW5nIHRoZSBjb25uZWN0aW9ucyBhbmQgaW50ZXJhY3Rpb25zIG9mIHRoaXMgZnVuY3Rpb24gd2lsbCBjbGFyaWZ5IHdoZXRoZXIgdGhpcyBpcyB0aGUgY29ycmVjdCBwbGFjZSB0byBoYW5kbGUgZnJlZWluZyB0aGUgbWVtb3J5IG9yIGlmIHNvbWV0aGluZyBpcyBhbWlzcyBlbHNld2hlcmUuIFVuZGVyc3RhbmRpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGFuZCBlc3BlY2lhbGx5IHRoZSBhbGxvY2F0aW9uIHBhdHRlcm5zIG9mIGBjb25uX2luZm8tXHUwMDNlZGVzdF9wYXJhbXNgIHdpbGwgYmUgY3JpdGljYWwgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgdGhlIGNvcnJlY3QgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTIyLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTY6Mjg6NTguNzI5NjE5NDkyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjU5NTc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mYy9uY2kvcnNwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25mYy9uY2kvcnNwLmM9Mjk0PXN0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXFxuLS1cXG5uZXQvbmZjL25jaS9yc3AuYy0zNDgtXFxubmV0L25mYy9uY2kvcnNwLmM6MzQ5OnN0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG5uZXQvbmZjL25jaS9yc3AuYy0zNTAtXFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9uZmMvbmNpL3JzcC5jPTM3MD12b2lkIG5jaV9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L25mYy9uY2kvcnNwLmMtNDEyLVxcdGNhc2UgTkNJX09QX0NPUkVfQ09OTl9DTE9TRV9SU1A6XFxubmV0L25mYy9uY2kvcnNwLmM6NDEzOlxcdFxcdG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldChuZGV2LCBza2IpO1xcbm5ldC9uZmMvbmNpL3JzcC5jLTQxNC1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTY6Mjg6NTguODkyMjIyMTcyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYxMjk4NTg0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyB0aGUgTkNJIENvcmUgQ29ubmVjdGlvbiBDbG9zdXJlIFJlc3BvbnNlKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldGAgZnVuY3Rpb24uIEl0IHNlZW1zIHRvIGJlIHRyaWdnZXJlZCB3aXRoaW4gdGhlIGBuY2lfcnNwX3BhY2tldGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aGVuIHdlIGdldCBhbiBgTkNJX09QX0NPUkVfQ09OTl9DTE9TRV9SU1BgIG1lc3NhZ2UuIFRoYXQncyBhIGtleSBjbHVlOyB0aGlzIGlzIGRlZmluaXRlbHkgcGFydCBvZiB0aGUgTkZDIE5DSSBzdWJzeXN0ZW0uIFRpbWUgdG8gZGlnIGludG8gdGhlIGBLY29uZmlnYCBmb3IgdGhlIE5GQyBOQ0kgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgb3B0aW9ucyByZWxhdGVkIHRvIGNvbm5lY3Rpb24gY2xvc3VyZSByZXNwb25zZXMgdG8gcHJvcGVybHkgYXNzZXNzIGl0cyBmdW5jdGlvbiBhbmQgaW50ZWdyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MTYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNjoyOTowMi41MDUyMTc3MDlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzMTMxMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORkNfTkNJXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZmMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZmMvbmNpL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvbmZjL25jaS9LY29uZmlnOjI6Y29uZmlnIE5GQ19OQ0lcXG5uZXQvbmZjL25jaS9LY29uZmlnLTMtXFx0ZGVwZW5kcyBvbiBORkNcXG4tLVxcbm5ldC9uZmMvbmNpL0tjb25maWctMTItXFxubmV0L25mYy9uY2kvS2NvbmZpZzoxMzpjb25maWcgTkZDX05DSV9TUElcXG5uZXQvbmZjL25jaS9LY29uZmlnLTE0LVxcdGRlcGVuZHMgb24gTkZDX05DSSBcXHUwMDI2XFx1MDAyNiBTUElcXG4tLVxcbm5ldC9uZmMvbmNpL0tjb25maWctMjMtXFxubmV0L25mYy9uY2kvS2NvbmZpZzoyNDpjb25maWcgTkZDX05DSV9VQVJUXFxubmV0L25mYy9uY2kvS2NvbmZpZy0yNS1cXHRkZXBlbmRzIG9uIE5GQ19OQ0kgXFx1MDAyNlxcdTAwMjYgVFRZXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE2OjI5OjAyLjYyODM2MDQ1OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0NTkwMzIxNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgbmNpX2NvcmVfY29ubl9jbG9zZV9yc3BfcGFja2V0YCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldGAgZnVuY3Rpb24sIGFuZCB0aGUgY29uZmlndXJhdGlvbiBpcyBzZXQgdG8gYE5GQ19OQ0lgLiBSaWdodCBvZmYgdGhlIGJhdCwgdGhhdCB0ZWxscyBtZSB0aGUgc2NvcGUgb2YgdGhlIHByb2JsZW0gaXMgd2l0aGluIHRoZSBjb250ZXh0IG9mIE5GQyBOQ0kuIEJ1dCBsZXQncyBub3QganVtcCB0byBjb25jbHVzaW9uczsgSSBrbm93IGBORkNfTkNJYCBpcyBkZXBlbmRlbnQgb24gYE5GQ2AgYmVpbmcgZW5hYmxlZCwgc28gdGhhdCdzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQgYXMgSSBkaWcgZGVlcGVyLiBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgcmVzcG9uc2UgcGFja2V0IGlzIGhhbmRsZWQsIGFuZCBhbnkgcG90ZW50aWFsIGlzc3VlcyBzdGVtbWluZyBmcm9tIHRoaXMgY29uZmlndXJhdGlvbi5cblxuQmVmb3JlIEkgZ28gZnVydGhlciwgSSBzaG91bGQgdmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgYWx0ZXJuYXRpdmUgcGF0aHMsIGJ5IHNlZWluZyBpZiB0aGVyZSBhcmUgYW55IHZpcnR1YWwgZHJpdmVycyBhY3RpdmUgb3IgcmVsZXZhbnQuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHZpcnR1YWwgTkNJIGRyaXZlcnMuIExldCBtZSBjaGVjayBpZiBgTkZDX1ZJUlRVQUxfTkNJYCBpcyBkZWZpbmVkIG9yIGludm9sdmVkIGhlcmUuIEl04oCZcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCAqYWxsKiB0aGUgcG9zc2libGUgd2F5cyB0aGlzIGZ1bmN0aW9uYWxpdHkgY291bGQgYmUgaW1wbGVtZW50ZWQuIFRoaXMgaXMgc3RhbmRhcmQgcHJvY2VkdXJlOiBjb3ZlciBhbGwgdGhlIGJhc2VzLCBiZWNhdXNlIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgZWRnZSBjYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA1NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE2OjI5OjExLjA4NzM5NDk5MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjM4NzQzNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GQ19WSVJUVUFMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmZjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25mYy9LY29uZmlnPTQyPWNvbmZpZyBORkNfUE9SVDEwMFxcbi0tXFxuZHJpdmVycy9uZmMvS2NvbmZpZy01MS1cXG5kcml2ZXJzL25mYy9LY29uZmlnOjUyOmNvbmZpZyBORkNfVklSVFVBTF9OQ0lcXG5kcml2ZXJzL25mYy9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJOQ0kgZGV2aWNlIHNpbXVsYXRvciBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE2OjI5OjExLjIxMTI3NDQxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTgxOTQ4MjQ1NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgTkZDIFZpcnR1YWwgTkNJIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGNvbmNlcHQgb2YgYE5GQ19WSVJUVUFMX05DSWAgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgSSdtIGZhbWlsaWFyIHdpdGg7IGl0J3MgYSBrbm93biBjb25zdHJ1Y3QuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoZXJlJ3MgdGhlIGltcGxlbWVudGF0aW9uP1wiIEdpdmVuIHRoZSBuYW1lLCBJJ2QgZXhwZWN0IHRvIGZpbmQgaXQgd2l0aGluIHRoZSBrZXJuZWwncyBORkMgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGRyaXZlciBzcGFjZS4gTW9yZSBzcGVjaWZpY2FsbHksIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgYGRyaXZlcnMvbmZjL2AuIExldCBtZSB0aGluay4uLmdpdmVuIGl0J3MgdmlydHVhbCwgc29tZXRoaW5nIGxpa2UgYHZpcnR1YWxfbmNpZGV2LmNgIHNvdW5kcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgZmlsZSBuYW1lLiBJIHNob3VsZCBzdGFydCB0aGVyZSwgb3IgbWF5YmUgc29tZXRoaW5nIHNpbWlsYXIsIGFzIGEgZmlyc3QgcG9ydCBvZiBjYWxsLiBUaGF0J3MgcHJvYmFibHkgdGhlIG1vc3QgbGlrZWx5IGxvY2F0aW9uIGZvciB0aGUgY29kZSBJJ20gYWZ0ZXIsIGF0IGxlYXN0IGZvciBhIGZpcnN0IHBhc3MuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBkaWcgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MDQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNjoyOToyOS40MDYxMDA5NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5MjIyMzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5GQ19WSVJUVUFMX05DSVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25mYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZmMvS2NvbmZpZz00Mj1jb25maWcgTkZDX1BPUlQxMDBcXG4tLVxcbmRyaXZlcnMvbmZjL0tjb25maWctNTEtXFxuZHJpdmVycy9uZmMvS2NvbmZpZzo1Mjpjb25maWcgTkZDX1ZJUlRVQUxfTkNJXFxuZHJpdmVycy9uZmMvS2NvbmZpZy01My1cXHR0cmlzdGF0ZSBcXFwiTkNJIGRldmljZSBzaW11bGF0b3IgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZmMvTWFrZWZpbGU9MTk9b2JqLSQoQ09ORklHX05GQ19TVDk1SEYpXFx0Kz0gc3Q5NWhmL1xcbmRyaXZlcnMvbmZjL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19ORkNfVklSVFVBTF9OQ0kpXFx0Kz0gdmlydHVhbF9uY2lkZXYub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNjoyOToyOS41NzUzMzQxNThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU2NDg1NjUzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKk15IFRoaW5raW5nIG9uIE5GQyBDb25maWd1cmF0aW9uIGFuZCBDb3JlIFJlc3BvbnNlIFBhY2tldHMqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBvcHRpbWFsIE5GQyBjb25maWd1cmF0aW9uLiBCYXNlZCBvbiBteSBleHBlcmllbmNlLCBJJ2Qgc2F5IGVuYWJsaW5nIGBORkNfVklSVFVBTF9OQ0lgIGlzIGEgc29saWQgbW92ZS4gVGhhdCBwcm92aWRlcyBhIGdvb2QgYmFzZSBmb3IgdmlydHVhbCBOQ0kgaW1wbGVtZW50YXRpb25zLCB3aGljaCBJIG9mdGVuIHNlZSBhcyBuZWNlc3NhcnkuIEFsb25nIHdpdGggdGhhdCwgbmF0dXJhbGx5LCBgTkZDX05DSWAgYW5kIGBORkNgIHNob3VsZCBhbHNvIGJlIGVuYWJsZWQuIFRoYXQncyBwcmV0dHkgc3RhbmRhcmQgZm9yIG1vc3Qgc2V0dXBzLlxuXG5Ob3csIEkgd2FudCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgc29tZXRoaW5nIHNwZWNpZmljOiB0aGUgYG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldGAgZnVuY3Rpb24uIEknbSBnb2luZyB0byBjaGVjayBob3cgdGhpcyByZXNwb25zZSBwYWNrZXQgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGBuZXQvbmZjL25jaS9yc3AuY2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIHN5c3RlbSByZWFjdHMgdG8gYSBjb25uZWN0aW9uIGNsb3NlIHJlc3BvbnNlLiBUaGlzIGlzIGNyaXRpY2FsIGZvciByb2J1c3QgTkZDIG9wZXJhdGlvbiwgYXMgSSBuZWVkIHRvIGtub3cgdGhlIHByb3BlciBjbGVhbnVwIHNlcXVlbmNlIG9uIGFueSBmYWlsdXJlIG9yIGRpc2Nvbm5lY3QuIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGltcGxlbWVudGF0aW9uIHRvIG1ha2Ugc3VyZSBpdCBmdW5jdGlvbnMgYXMgZXhwZWN0ZWQgaW4gYSByb2J1c3QgYW5kIHNlY3VyZSBmYXNoaW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTI1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTY6Mjk6MzMuMTQwMTkzMzI4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmZjL25jaS9yc3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNDA6XFx0XFxuIDM0MTpcXHRmcmVlX2Nvbm5faW5mbzpcXG4gMzQyOlxcdFxcdGlmIChzdGF0dXMgPT0gTkNJX1NUQVRVU19SRUpFQ1RFRClcXG4gMzQzOlxcdFxcdFxcdGRldm1fa2ZyZWUoXFx1MDAyNm5kZXYtXFx1MDAzZW5mY19kZXYtXFx1MDAzZWRldiwgY29ubl9pbmZvKTtcXG4gMzQ0OlxcdGV4aXQ6XFxuIDM0NTpcXHRcXG4gMzQ2OlxcdFxcdG5jaV9yZXFfY29tcGxldGUobmRldiwgc3RhdHVzKTtcXG4gMzQ3OlxcdH1cXG4gMzQ4OlxcdFxcbiAzNDk6XFx0c3RhdGljIHZvaWQgbmNpX2NvcmVfY29ubl9jbG9zZV9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxcbiAzNTA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gMzUxOlxcdHtcXG4gMzUyOlxcdFxcdHN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87XFxuIDM1MzpcXHRcXHRfX3U4IHN0YXR1cyA9IHNrYi1cXHUwMDNlZGF0YVswXTtcXG4gMzU0OlxcdFxcbiAzNTU6XFx0XFx0cHJfZGVidWcoXFxcInN0YXR1cyAweCV4XFxcXG5cXFwiLCBzdGF0dXMpO1xcbiAzNTY6XFx0XFx0aWYgKHN0YXR1cyA9PSBOQ0lfU1RBVFVTX09LKSB7XFxuIDM1NzpcXHRcXHRcXHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKG5kZXYsXFxuIDM1ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgbmRldi1cXHUwMDNlY3VyX2Nvbm5faWQpO1xcbiAzNTk6XFx0XFx0XFx0aWYgKGNvbm5faW5mbykge1xcbiAzNjA6XFx0XFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNmNvbm5faW5mby1cXHUwMDNlbGlzdCk7XFxuIDM2MTpcXHRcXHRcXHRcXHRpZiAoY29ubl9pbmZvID09IG5kZXYtXFx1MDAzZXJmX2Nvbm5faW5mbylcXG4gMzYyOlxcdFxcdFxcdFxcdFxcdG5kZXYtXFx1MDAzZXJmX2Nvbm5faW5mbyA9IE5VTEw7XFxuIDM2MzpcXHRcXHRcXHRcXHRkZXZtX2tmcmVlKFxcdTAwMjZuZGV2LVxcdTAwM2VuZmNfZGV2LVxcdTAwM2VkZXYsIGNvbm5faW5mby1cXHUwMDNlZGVzdF9wYXJhbXMpO1xcbiAzNjQ6XFx0XFx0XFx0XFx0ZGV2bV9rZnJlZShcXHUwMDI2bmRldi1cXHUwMDNlbmZjX2Rldi1cXHUwMDNlZGV2LCBjb25uX2luZm8pO1xcbiAzNjU6XFx0XFx0XFx0fVxcbiAzNjY6XFx0XFx0fVxcbiAzNjc6XFx0XFx0bmNpX3JlcV9jb21wbGV0ZShuZGV2LCBzdGF0dXMpO1xcbiAzNjg6XFx0fVxcbiAzNjk6XFx0XFxuIDM3MDpcXHR2b2lkIG5jaV9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAzNzE6XFx0e1xcbiAzNzI6XFx0XFx0X191MTYgcnNwX29wY29kZSA9IG5jaV9vcGNvZGUoc2tiLVxcdTAwM2VkYXRhKTtcXG4gMzczOlxcdFxcbiAzNzQ6XFx0XFx0Lyogd2UgZ290IGEgcnNwLCBzdG9wIHRoZSBjbWQgdGltZXIgKi9cXG4gMzc1OlxcdFxcdHRpbWVyX2RlbGV0ZShcXHUwMDI2bmRldi1cXHUwMDNlY21kX3RpbWVyKTtcXG4gMzc2OlxcdFxcbiAzNzc6XFx0XFx0cHJfZGVidWcoXFxcIk5DSSBSWDogTVQ9cnNwLCBQQkY9JWQsIEdJRD0weCV4LCBPSUQ9MHgleCwgcGxlbj0lZFxcXFxuXFxcIixcXG4gMzc4OlxcdFxcdFxcdCBuY2lfcGJmKHNrYi1cXHUwMDNlZGF0YSksXFxuIDM3OTpcXHRcXHRcXHQgbmNpX29wY29kZV9naWQocnNwX29wY29kZSksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE2OjI5OjMzLjE0MDMwOTAxOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTc3MDI3MDU5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpcyBhbmQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2gg4oCTIHNlZW1zIGxpa2UgaXQncyBhZGRyZXNzaW5nIGEgbWVtb3J5IGxlYWssIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXRgIGZ1bmN0aW9uLiBUaGlzIGlzIGtleSwgYW5kIGl0J3MgcmVhY2hhYmxlIHRocm91Z2ggZWl0aGVyIGB2aXJ0dWFsX25jaWRldmAgb3Igb3RoZXIgTkZDIGRyaXZlcnMuXG5cblJpZ2h0LCBzbyB0byBlbmFibGUgdGhpcyBmaXgsIHRoZSBjb25maWdzIGludm9sdmVkIGFyZSBgTkZDX05DSWAgYW5kIGBORkNfVklSVFVBTF9OQ0lgLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIGBORkNfTkNJYCBpcyBlbm91Z2ggdG8gcHVsbCBpbiBldmVyeXRoaW5nIHdlIG5lZWQsIG9yIGlmIHdlIG5lZWQgdG8gZXhwbGljaXRseSBpbmNsdWRlIGBORkNgIGFzIHdlbGwuIExldCBtZSBqdXN0IGFkZCBgTkZDYCwgYE5GQ19OQ0lgLCBhbmQgYE5GQ19WSVJUVUFMX05DSWAgdG8gdGhlIGxpc3QuIEJldHRlciB0byBiZSB0aG9yb3VnaCwgSSBzdXBwb3NlLlxuXG5Ob3csIGxldCdzIGNpcmNsZSBiYWNrIHRvIHRoYXQgZm9jdXMgc3ltYm9sOiBgbmNpX2NvcmVfY29ubl9jbG9zZV9yc3BfcGFja2V0YC4gSXQncyBzdGF0aWMsIHdoaWNoIGlzIGlkZWFsIGJlY2F1c2UgdGhhdCBtYWtlcyBpdCBhIG11Y2ggY2xlYXJlciB0YXJnZXQgZm9yIGFuYWx5c2lzLiBgbmNpX3JzcF9wYWNrZXRgIG1pZ2h0IGFsc28gYmUgcmVsZXZhbnQsIGJ1dCBpdCdzIGEgYml0IHRvbyBnZW5lcmljLCBzbyBgbmNpX2NvcmVfY29ubl9jbG9zZV9yc3BfcGFja2V0YCBpcyB0aGUgcHJlZmVycmVkIHRhcmdldC5cblxuQWxyaWdodCwgSSdtIHNhdGlzZmllZCB3aXRoIHRoZSBhc3Nlc3NtZW50LiBUaW1lIHRvIHNldCB0aGVzZSByZXN1bHRzIGFuZCBwcm9jZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTU0LCJPdXRwdXRUb2tlbnMiOjExMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE2OjI5OjUyLjkxMDU4MjI2OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjU5ODgzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZDXCIsXG4gICAgXCJORkNfTkNJXCIsXG4gICAgXCJORkNfVklSVFVBTF9OQ0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgTkZDIE5DSSBzdWJzeXN0ZW0gd2hlbiBoYW5kbGluZyBhIENPUkVfQ09OTl9DTE9TRV9SU1AgcGFja2V0LiBJdCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgYW5kIHRlc3RlZCB2aWEgdGhlIHZpcnR1YWwgTkNJIGRldmljZSBzaW11bGF0b3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZDXCIsXG4gICAgXCJORkNfTkNJXCIsXG4gICAgXCJORkNfVklSVFVBTF9OQ0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgTkZDIE5DSSBzdWJzeXN0ZW0gd2hlbiBoYW5kbGluZyBhIENPUkVfQ09OTl9DTE9TRV9SU1AgcGFja2V0LiBJdCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgYW5kIHRlc3RlZCB2aWEgdGhlIHZpcnR1YWwgTkNJIGRldmljZSBzaW11bGF0b3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowbcr7f[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-21 15:53:19 +0000 UTC FinishedAt: 2026-07-21 16:29:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "3fe08b9796f36ef437ab9328e7dd1e5ff2d66603", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC", "NFC_NCI", "NFC_VIRTUAL_NCI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "3fe08b9796f36ef437ab9328e7dd1e5ff2d66603", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC", "NFC_NCI", "NFC_VIRTUAL_NCI" ], "series_id": "176648b6-267e-4e4f-9e9c-cb30e3266d5b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nci_core_conn_close_rsp_packet" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE2OjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GQyYjMzQ7LAogICAgJiMzNDtORkNfTkNJJiMzNDssCiAgICAmIzM0O05GQ19WSVJUVUFMX05DSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoaXMgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgTkZDIE5DSSBzdWJzeXN0ZW0gd2hlbiBoYW5kbGluZyBhIENPUkVfQ09OTl9DTE9TRV9SU1AgcGFja2V0LiBJdCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgYW5kIHRlc3RlZCB2aWEgdGhlIHZpcnR1YWwgTkNJIGRldmljZSBzaW11bGF0b3IuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTY6Mjg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1MGQxYmIyOThkYTc4MWY5MWY3MTBmYmJhNmE0MzUyZmRiNjg3MzE4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjEgMTY6Mjg6NTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25mYy9uY2kvcnNwLmMgYi9uZXQvbmZjL25jaS9yc3AuY1xuaW5kZXggNmIyZmE2YmRiZDE0YmQuLjIxYzJmZTY0NDkwZTJkIDEwMDY0NFxuLS0tIGEvbmV0L25mYy9uY2kvcnNwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZmMvbmNpL3JzcC5jXG5AQCAtMzYwLDYgJiM0MzszNjAsNyBAQCBzdGF0aWMgdm9pZCBuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4gXHRcdFx0bGlzdF9kZWwoXHUwMDI2Y29ubl9pbmZvLVx1MDAzZWxpc3QpO1xuIFx0XHRcdGlmIChjb25uX2luZm8gPT0gbmRldi1cdTAwM2VyZl9jb25uX2luZm8pXG4gXHRcdFx0XHRuZGV2LVx1MDAzZXJmX2Nvbm5faW5mbyA9IE5VTEw7XG4mIzQzO1x0XHRcdGRldm1fa2ZyZWUoXHUwMDI2bmRldi1cdTAwM2VuZmNfZGV2LVx1MDAzZWRldiwgY29ubl9pbmZvLVx1MDAzZWRlc3RfcGFyYW1zKTtcbiBcdFx0XHRkZXZtX2tmcmVlKFx1MDAyNm5kZXYtXHUwMDNlbmZjX2Rldi1cdTAwM2VkZXYsIGNvbm5faW5mbyk7XG4gXHRcdH1cbiBcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNjoyODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZDJiMzNDssCiAgICAmIzM0O05GQ19OQ0kmIzM0OywKICAgICYjMzQ7TkZDX1ZJUlRVQUxfTkNJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmNpX2NvcmVfY29ubl9jbG9zZV9yc3BfcGFja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIHRoZSBORkMgTkNJIHN1YnN5c3RlbSB3aGVuIGhhbmRsaW5nIGEgQ09SRV9DT05OX0NMT1NFX1JTUCBwYWNrZXQuIEl0IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIHZpYSB0aGUgdmlydHVhbCBOQ0kgZGV2aWNlIHNpbXVsYXRvci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTBkMWJiMjk4ZGE3ODFmOTFmNzEwZmJiYTZhNDM1MmZkYjY4NzMxOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDIxIDE2OjI4OjUxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25mYy9uY2kvcnNwLmMgYi9uZXQvbmZjL25jaS9yc3AuYwppbmRleCA2YjJmYTZiZGJkMTRiZC4uMjFjMmZlNjQ0OTBlMmQgMTAwNjQ0Ci0tLSBhL25ldC9uZmMvbmNpL3JzcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZmMvbmNpL3JzcC5jCkBAIC0zNjAsNiAmIzQzOzM2MCw3IEBAIHN0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldiwKIAkJCWxpc3RfZGVsKCZhbXA7Y29ubl9pbmZvLSZndDtsaXN0KTsKIAkJCWlmIChjb25uX2luZm8gPT0gbmRldi0mZ3Q7cmZfY29ubl9pbmZvKQogCQkJCW5kZXYtJmd0O3JmX2Nvbm5faW5mbyA9IE5VTEw7CiYjNDM7CQkJZGV2bV9rZnJlZSgmYW1wO25kZXYtJmd0O25mY19kZXYtJmd0O2RldiwgY29ubl9pbmZvLSZndDtkZXN0X3BhcmFtcyk7CiAJCQlkZXZtX2tmcmVlKCZhbXA7bmRldi0mZ3Q7bmZjX2Rldi0mZ3Q7ZGV2LCBjb25uX2luZm8pOwogCQl9CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTIyCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE1lbW9yeSBMZWFrIEZpeCBpbiBuZXQvbmZjL25jaS9yc3AuYyoqCgpPa2F5LCBzbyB3ZSBoYXZlIGEgcGF0Y2ggdGhhdCYjMzk7cyBiZWVuIHByb3Bvc2VkIGZvciBgbmV0L25mYy9uY2kvcnNwLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIGZ1bmN0aW9uYWxpdHksIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBhIHBvdGVudGlhbCBtZW1vcnkgbGVhayBmaXguIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBkZXZtX2tmcmVlKCZhbXA7bmRldi0mZ3Q7bmZjX2Rldi0mZ3Q7ZGV2LCBjb25uX2luZm8tJmd0O2Rlc3RfcGFyYW1zKTtgIGJlZm9yZSBmcmVlaW5nIGBjb25uX2luZm9gLiBUaGlzIGlzIGludGVyZXN0aW5nOyBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIG1lbW9yeSBsZWFrIGZpeCDigJMgdGhvc2UgYXJlIGFsd2F5cyB3b3J0aCBhIGNsb3NlciBsb29rLgoKTXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzIHRvIHRyYWNlIHRoaXMgdGhyb3VnaCB0aGUgcmVsYXRlZCBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZSwgc28gSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGZ1bmN0aW9uIHRoYXQgc2VlbXMgY2VudHJhbCB0byB0aGlzIGZpeCwgYG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldGAuIEkmIzM5O2xsIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBmaW5kIHRoZSBkZWZpbml0aW9uIGFuZCBhbnkgcmVsYXRlZCBjYWxscyB3aXRoaW4gdGhlIGNvZGUgYmFzZS4gU2VlaW5nIHRoZSBjb25uZWN0aW9ucyBhbmQgaW50ZXJhY3Rpb25zIG9mIHRoaXMgZnVuY3Rpb24gd2lsbCBjbGFyaWZ5IHdoZXRoZXIgdGhpcyBpcyB0aGUgY29ycmVjdCBwbGFjZSB0byBoYW5kbGUgZnJlZWluZyB0aGUgbWVtb3J5IG9yIGlmIHNvbWV0aGluZyBpcyBhbWlzcyBlbHNld2hlcmUuIFVuZGVyc3RhbmRpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGFuZCBlc3BlY2lhbGx5IHRoZSBhbGxvY2F0aW9uIHBhdHRlcm5zIG9mIGBjb25uX2luZm8tJmd0O2Rlc3RfcGFyYW1zYCB3aWxsIGJlIGNyaXRpY2FsIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIHRoZSBjb3JyZWN0IGZpeC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmZjL25jaS9yc3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmZjL25jaS9yc3AuYz0yOTQ9c3RhdGljIHZvaWQgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbi0tXG5uZXQvbmZjL25jaS9yc3AuYy0zNDgtXG5uZXQvbmZjL25jaS9yc3AuYzozNDk6c3RhdGljIHZvaWQgbmNpX2NvcmVfY29ubl9jbG9zZV9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxubmV0L25mYy9uY2kvcnNwLmMtMzUwLVx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9uZmMvbmNpL3JzcC5jPTM3MD12b2lkIG5jaV9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9uZmMvbmNpL3JzcC5jLTQxMi1cdGNhc2UgTkNJX09QX0NPUkVfQ09OTl9DTE9TRV9SU1A6XG5uZXQvbmZjL25jaS9yc3AuYzo0MTM6XHRcdG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldChuZGV2LCBza2IpO1xubmV0L25mYy9uY2kvcnNwLmMtNDE0LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjE2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyB0aGUgTkNJIENvcmUgQ29ubmVjdGlvbiBDbG9zdXJlIFJlc3BvbnNlKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbmNpX2NvcmVfY29ubl9jbG9zZV9yc3BfcGFja2V0YCBmdW5jdGlvbi4gSXQgc2VlbXMgdG8gYmUgdHJpZ2dlcmVkIHdpdGhpbiB0aGUgYG5jaV9yc3BfcGFja2V0YCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdoZW4gd2UgZ2V0IGFuIGBOQ0lfT1BfQ09SRV9DT05OX0NMT1NFX1JTUGAgbWVzc2FnZS4gVGhhdCYjMzk7cyBhIGtleSBjbHVlOyB0aGlzIGlzIGRlZmluaXRlbHkgcGFydCBvZiB0aGUgTkZDIE5DSSBzdWJzeXN0ZW0uIFRpbWUgdG8gZGlnIGludG8gdGhlIGBLY29uZmlnYCBmb3IgdGhlIE5GQyBOQ0kgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgb3B0aW9ucyByZWxhdGVkIHRvIGNvbm5lY3Rpb24gY2xvc3VyZSByZXNwb25zZXMgdG8gcHJvcGVybHkgYXNzZXNzIGl0cyBmdW5jdGlvbiBhbmQgaW50ZWdyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTY6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GQ19OQ0kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmZjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmZjL25jaS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvbmZjL25jaS9LY29uZmlnOjI6Y29uZmlnIE5GQ19OQ0lcbm5ldC9uZmMvbmNpL0tjb25maWctMy1cdGRlcGVuZHMgb24gTkZDXG4tLVxubmV0L25mYy9uY2kvS2NvbmZpZy0xMi1cbm5ldC9uZmMvbmNpL0tjb25maWc6MTM6Y29uZmlnIE5GQ19OQ0lfU1BJXG5uZXQvbmZjL25jaS9LY29uZmlnLTE0LVx0ZGVwZW5kcyBvbiBORkNfTkNJIFx1MDAyNlx1MDAyNiBTUElcbi0tXG5uZXQvbmZjL25jaS9LY29uZmlnLTIzLVxubmV0L25mYy9uY2kvS2NvbmZpZzoyNDpjb25maWcgTkZDX05DSV9VQVJUXG5uZXQvbmZjL25jaS9LY29uZmlnLTI1LVx0ZGVwZW5kcyBvbiBORkNfTkNJIFx1MDAyNlx1MDAyNiBUVFlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDU3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgbmNpX2NvcmVfY29ubl9jbG9zZV9yc3BfcGFja2V0YCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbmNpX2NvcmVfY29ubl9jbG9zZV9yc3BfcGFja2V0YCBmdW5jdGlvbiwgYW5kIHRoZSBjb25maWd1cmF0aW9uIGlzIHNldCB0byBgTkZDX05DSWAuIFJpZ2h0IG9mZiB0aGUgYmF0LCB0aGF0IHRlbGxzIG1lIHRoZSBzY29wZSBvZiB0aGUgcHJvYmxlbSBpcyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgTkZDIE5DSS4gQnV0IGxldCYjMzk7cyBub3QganVtcCB0byBjb25jbHVzaW9uczsgSSBrbm93IGBORkNfTkNJYCBpcyBkZXBlbmRlbnQgb24gYE5GQ2AgYmVpbmcgZW5hYmxlZCwgc28gdGhhdCYjMzk7cyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kIGFzIEkgZGlnIGRlZXBlci4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHJlc3BvbnNlIHBhY2tldCBpcyBoYW5kbGVkLCBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSB0aGlzIGNvbmZpZ3VyYXRpb24uCgpCZWZvcmUgSSBnbyBmdXJ0aGVyLCBJIHNob3VsZCB2ZXJpZnkgdGhlIGV4aXN0ZW5jZSBvZiBhbHRlcm5hdGl2ZSBwYXRocywgYnkgc2VlaW5nIGlmIHRoZXJlIGFyZSBhbnkgdmlydHVhbCBkcml2ZXJzIGFjdGl2ZSBvciByZWxldmFudC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHZpcnR1YWwgTkNJIGRyaXZlcnMuIExldCBtZSBjaGVjayBpZiBgTkZDX1ZJUlRVQUxfTkNJYCBpcyBkZWZpbmVkIG9yIGludm9sdmVkIGhlcmUuIEl04oCZcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCAqYWxsKiB0aGUgcG9zc2libGUgd2F5cyB0aGlzIGZ1bmN0aW9uYWxpdHkgY291bGQgYmUgaW1wbGVtZW50ZWQuIFRoaXMgaXMgc3RhbmRhcmQgcHJvY2VkdXJlOiBjb3ZlciBhbGwgdGhlIGJhc2VzLCBiZWNhdXNlIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IGVkZ2UgY2FzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTY6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GQ19WSVJUVUFMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmZjL0tjb25maWc9NDI9Y29uZmlnIE5GQ19QT1JUMTAwXG4tLVxuZHJpdmVycy9uZmMvS2NvbmZpZy01MS1cbmRyaXZlcnMvbmZjL0tjb25maWc6NTI6Y29uZmlnIE5GQ19WSVJUVUFMX05DSVxuZHJpdmVycy9uZmMvS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O05DSSBkZXZpY2Ugc2ltdWxhdG9yIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE2OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MDQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBORkMgVmlydHVhbCBOQ0kgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgc28gdGhlIGNvbmNlcHQgb2YgYE5GQ19WSVJUVUFMX05DSWAgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgSSYjMzk7bSBmYW1pbGlhciB3aXRoOyBpdCYjMzk7cyBhIGtub3duIGNvbnN0cnVjdC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hlcmUmIzM5O3MgdGhlIGltcGxlbWVudGF0aW9uPyYjMzQ7IEdpdmVuIHRoZSBuYW1lLCBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIGl0IHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIE5GQyBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBpbiB0aGUgZHJpdmVyIHNwYWNlLiBNb3JlIHNwZWNpZmljYWxseSwgSSBzaG91bGQgYmUgbG9va2luZyBhdCBgZHJpdmVycy9uZmMvYC4gTGV0IG1lIHRoaW5rLi4uZ2l2ZW4gaXQmIzM5O3MgdmlydHVhbCwgc29tZXRoaW5nIGxpa2UgYHZpcnR1YWxfbmNpZGV2LmNgIHNvdW5kcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgZmlsZSBuYW1lLiBJIHNob3VsZCBzdGFydCB0aGVyZSwgb3IgbWF5YmUgc29tZXRoaW5nIHNpbWlsYXIsIGFzIGEgZmlyc3QgcG9ydCBvZiBjYWxsLiBUaGF0JiMzOTtzIHByb2JhYmx5IHRoZSBtb3N0IGxpa2VseSBsb2NhdGlvbiBmb3IgdGhlIGNvZGUgSSYjMzk7bSBhZnRlciwgYXQgbGVhc3QgZm9yIGEgZmlyc3QgcGFzcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBkaWcgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE2OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05GQ19WSVJUVUFMX05DSSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmZjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25mYy9LY29uZmlnPTQyPWNvbmZpZyBORkNfUE9SVDEwMFxuLS1cbmRyaXZlcnMvbmZjL0tjb25maWctNTEtXG5kcml2ZXJzL25mYy9LY29uZmlnOjUyOmNvbmZpZyBORkNfVklSVFVBTF9OQ0lcbmRyaXZlcnMvbmZjL0tjb25maWctNTMtXHR0cmlzdGF0ZSBcJiMzNDtOQ0kgZGV2aWNlIHNpbXVsYXRvciBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25mYy9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfTkZDX1NUOTVIRilcdCYjNDM7PSBzdDk1aGYvXG5kcml2ZXJzL25mYy9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfTkZDX1ZJUlRVQUxfTkNJKVx0JiM0Mzs9IHZpcnR1YWxfbmNpZGV2Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTY6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkyNQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipNeSBUaGlua2luZyBvbiBORkMgQ29uZmlndXJhdGlvbiBhbmQgQ29yZSBSZXNwb25zZSBQYWNrZXRzKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBvcHRpbWFsIE5GQyBjb25maWd1cmF0aW9uLiBCYXNlZCBvbiBteSBleHBlcmllbmNlLCBJJiMzOTtkIHNheSBlbmFibGluZyBgTkZDX1ZJUlRVQUxfTkNJYCBpcyBhIHNvbGlkIG1vdmUuIFRoYXQgcHJvdmlkZXMgYSBnb29kIGJhc2UgZm9yIHZpcnR1YWwgTkNJIGltcGxlbWVudGF0aW9ucywgd2hpY2ggSSBvZnRlbiBzZWUgYXMgbmVjZXNzYXJ5LiBBbG9uZyB3aXRoIHRoYXQsIG5hdHVyYWxseSwgYE5GQ19OQ0lgIGFuZCBgTkZDYCBzaG91bGQgYWxzbyBiZSBlbmFibGVkLiBUaGF0JiMzOTtzIHByZXR0eSBzdGFuZGFyZCBmb3IgbW9zdCBzZXR1cHMuCgpOb3csIEkgd2FudCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgc29tZXRoaW5nIHNwZWNpZmljOiB0aGUgYG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldGAgZnVuY3Rpb24uIEkmIzM5O20gZ29pbmcgdG8gY2hlY2sgaG93IHRoaXMgcmVzcG9uc2UgcGFja2V0IGlzIGhhbmRsZWQgd2l0aGluIHRoZSBgbmV0L25mYy9uY2kvcnNwLmNgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBzeXN0ZW0gcmVhY3RzIHRvIGEgY29ubmVjdGlvbiBjbG9zZSByZXNwb25zZS4gVGhpcyBpcyBjcml0aWNhbCBmb3Igcm9idXN0IE5GQyBvcGVyYXRpb24sIGFzIEkgbmVlZCB0byBrbm93IHRoZSBwcm9wZXIgY2xlYW51cCBzZXF1ZW5jZSBvbiBhbnkgZmFpbHVyZSBvciBkaXNjb25uZWN0LiBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBpbXBsZW1lbnRhdGlvbiB0byBtYWtlIHN1cmUgaXQgZnVuY3Rpb25zIGFzIGV4cGVjdGVkIGluIGEgcm9idXN0IGFuZCBzZWN1cmUgZmFzaGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTY6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmZjL25jaS9yc3AuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzQwOlx0XG4gMzQxOlx0ZnJlZV9jb25uX2luZm86XG4gMzQyOlx0XHRpZiAoc3RhdHVzID09IE5DSV9TVEFUVVNfUkVKRUNURUQpXG4gMzQzOlx0XHRcdGRldm1fa2ZyZWUoXHUwMDI2bmRldi1cdTAwM2VuZmNfZGV2LVx1MDAzZWRldiwgY29ubl9pbmZvKTtcbiAzNDQ6XHRleGl0OlxuIDM0NTpcdFxuIDM0NjpcdFx0bmNpX3JlcV9jb21wbGV0ZShuZGV2LCBzdGF0dXMpO1xuIDM0NzpcdH1cbiAzNDg6XHRcbiAzNDk6XHRzdGF0aWMgdm9pZCBuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4gMzUwOlx0XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4gMzUxOlx0e1xuIDM1MjpcdFx0c3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcbiAzNTM6XHRcdF9fdTggc3RhdHVzID0gc2tiLVx1MDAzZWRhdGFbMF07XG4gMzU0Olx0XG4gMzU1Olx0XHRwcl9kZWJ1ZyhcJiMzNDtzdGF0dXMgMHgleFxcblwmIzM0Oywgc3RhdHVzKTtcbiAzNTY6XHRcdGlmIChzdGF0dXMgPT0gTkNJX1NUQVRVU19PSykge1xuIDM1NzpcdFx0XHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKG5kZXYsXG4gMzU4Olx0XHRcdFx0XHRcdFx0XHQgbmRldi1cdTAwM2VjdXJfY29ubl9pZCk7XG4gMzU5Olx0XHRcdGlmIChjb25uX2luZm8pIHtcbiAzNjA6XHRcdFx0XHRsaXN0X2RlbChcdTAwMjZjb25uX2luZm8tXHUwMDNlbGlzdCk7XG4gMzYxOlx0XHRcdFx0aWYgKGNvbm5faW5mbyA9PSBuZGV2LVx1MDAzZXJmX2Nvbm5faW5mbylcbiAzNjI6XHRcdFx0XHRcdG5kZXYtXHUwMDNlcmZfY29ubl9pbmZvID0gTlVMTDtcbiAzNjM6XHRcdFx0XHRkZXZtX2tmcmVlKFx1MDAyNm5kZXYtXHUwMDNlbmZjX2Rldi1cdTAwM2VkZXYsIGNvbm5faW5mby1cdTAwM2VkZXN0X3BhcmFtcyk7XG4gMzY0Olx0XHRcdFx0ZGV2bV9rZnJlZShcdTAwMjZuZGV2LVx1MDAzZW5mY19kZXYtXHUwMDNlZGV2LCBjb25uX2luZm8pO1xuIDM2NTpcdFx0XHR9XG4gMzY2Olx0XHR9XG4gMzY3Olx0XHRuY2lfcmVxX2NvbXBsZXRlKG5kZXYsIHN0YXR1cyk7XG4gMzY4Olx0fVxuIDM2OTpcdFxuIDM3MDpcdHZvaWQgbmNpX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gMzcxOlx0e1xuIDM3MjpcdFx0X191MTYgcnNwX29wY29kZSA9IG5jaV9vcGNvZGUoc2tiLVx1MDAzZWRhdGEpO1xuIDM3MzpcdFxuIDM3NDpcdFx0Lyogd2UgZ290IGEgcnNwLCBzdG9wIHRoZSBjbWQgdGltZXIgKi9cbiAzNzU6XHRcdHRpbWVyX2RlbGV0ZShcdTAwMjZuZGV2LVx1MDAzZWNtZF90aW1lcik7XG4gMzc2Olx0XG4gMzc3Olx0XHRwcl9kZWJ1ZyhcJiMzNDtOQ0kgUlg6IE1UPXJzcCwgUEJGPSVkLCBHSUQ9MHgleCwgT0lEPTB4JXgsIHBsZW49JWRcXG5cJiMzNDssXG4gMzc4Olx0XHRcdCBuY2lfcGJmKHNrYi1cdTAwM2VkYXRhKSxcbiAzNzk6XHRcdFx0IG5jaV9vcGNvZGVfZ2lkKHJzcF9vcGNvZGUpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTU0CgkJCQkJCQlvdXRwdXQ6IDExMwoJCQkJCQkJdGhvdWdodHM6IDIwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpcyBhbmQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCDigJMgc2VlbXMgbGlrZSBpdCYjMzk7cyBhZGRyZXNzaW5nIGEgbWVtb3J5IGxlYWssIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXRgIGZ1bmN0aW9uLiBUaGlzIGlzIGtleSwgYW5kIGl0JiMzOTtzIHJlYWNoYWJsZSB0aHJvdWdoIGVpdGhlciBgdmlydHVhbF9uY2lkZXZgIG9yIG90aGVyIE5GQyBkcml2ZXJzLgoKUmlnaHQsIHNvIHRvIGVuYWJsZSB0aGlzIGZpeCwgdGhlIGNvbmZpZ3MgaW52b2x2ZWQgYXJlIGBORkNfTkNJYCBhbmQgYE5GQ19WSVJUVUFMX05DSWAuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgYE5GQ19OQ0lgIGlzIGVub3VnaCB0byBwdWxsIGluIGV2ZXJ5dGhpbmcgd2UgbmVlZCwgb3IgaWYgd2UgbmVlZCB0byBleHBsaWNpdGx5IGluY2x1ZGUgYE5GQ2AgYXMgd2VsbC4gTGV0IG1lIGp1c3QgYWRkIGBORkNgLCBgTkZDX05DSWAsIGFuZCBgTkZDX1ZJUlRVQUxfTkNJYCB0byB0aGUgbGlzdC4gQmV0dGVyIHRvIGJlIHRob3JvdWdoLCBJIHN1cHBvc2UuCgpOb3csIGxldCYjMzk7cyBjaXJjbGUgYmFjayB0byB0aGF0IGZvY3VzIHN5bWJvbDogYG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldGAuIEl0JiMzOTtzIHN0YXRpYywgd2hpY2ggaXMgaWRlYWwgYmVjYXVzZSB0aGF0IG1ha2VzIGl0IGEgbXVjaCBjbGVhcmVyIHRhcmdldCBmb3IgYW5hbHlzaXMuIGBuY2lfcnNwX3BhY2tldGAgbWlnaHQgYWxzbyBiZSByZWxldmFudCwgYnV0IGl0JiMzOTtzIGEgYml0IHRvbyBnZW5lcmljLCBzbyBgbmNpX2NvcmVfY29ubl9jbG9zZV9yc3BfcGFja2V0YCBpcyB0aGUgcHJlZmVycmVkIHRhcmdldC4KCkFscmlnaHQsIEkmIzM5O20gc2F0aXNmaWVkIHdpdGggdGhlIGFzc2Vzc21lbnQuIFRpbWUgdG8gc2V0IHRoZXNlIHJlc3VsdHMgYW5kIHByb2NlZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE2OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORkMmIzM0OywKICAgICYjMzQ7TkZDX05DSSYjMzQ7LAogICAgJiMzNDtORkNfVklSVFVBTF9OQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIE5GQyBOQ0kgc3Vic3lzdGVtIHdoZW4gaGFuZGxpbmcgYSBDT1JFX0NPTk5fQ0xPU0VfUlNQIHBhY2tldC4gSXQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgdmlhIHRoZSB2aXJ0dWFsIE5DSSBkZXZpY2Ugc2ltdWxhdG9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORkMmIzM0OywKICAgICYjMzQ7TkZDX05DSSYjMzQ7LAogICAgJiMzNDtORkNfVklSVFVBTF9OQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIE5GQyBOQ0kgc3Vic3lzdGVtIHdoZW4gaGFuZGxpbmcgYSBDT1JFX0NPTk5fQ0xPU0VfUlNQIHBhY2tldC4gSXQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgdmlhIHRoZSB2aXJ0dWFsIE5DSSBkZXZpY2Ugc2ltdWxhdG9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjFUMTY6Mjg6NTMuNzMyMTE5MTAxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkzOTUwNzg2MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZDXCIsXG4gICAgXCJORkNfTkNJXCIsXG4gICAgXCJORkNfVklSVFVBTF9OQ0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgTkZDIE5DSSBzdWJzeXN0ZW0gd2hlbiBoYW5kbGluZyBhIENPUkVfQ09OTl9DTE9TRV9SU1AgcGFja2V0LiBJdCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgYW5kIHRlc3RlZCB2aWEgdGhlIHZpcnR1YWwgTkNJIGRldmljZSBzaW11bGF0b3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE2OjI4OjUzLjczMjEyNjQ3MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc5NzIxNDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTBkMWJiMjk4ZGE3ODFmOTFmNzEwZmJiYTZhNDM1MmZkYjY4NzMxOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1bCAyMSAxNjoyODo1MSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbmZjL25jaS9yc3AuYyBiL25ldC9uZmMvbmNpL3JzcC5jXFxuaW5kZXggNmIyZmE2YmRiZDE0YmQuLjIxYzJmZTY0NDkwZTJkIDEwMDY0NFxcbi0tLSBhL25ldC9uZmMvbmNpL3JzcC5jXFxuKysrIGIvbmV0L25mYy9uY2kvcnNwLmNcXG5AQCAtMzYwLDYgKzM2MCw3IEBAIHN0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG4gXFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNmNvbm5faW5mby1cXHUwMDNlbGlzdCk7XFxuIFxcdFxcdFxcdGlmIChjb25uX2luZm8gPT0gbmRldi1cXHUwMDNlcmZfY29ubl9pbmZvKVxcbiBcXHRcXHRcXHRcXHRuZGV2LVxcdTAwM2VyZl9jb25uX2luZm8gPSBOVUxMO1xcbitcXHRcXHRcXHRkZXZtX2tmcmVlKFxcdTAwMjZuZGV2LVxcdTAwM2VuZmNfZGV2LVxcdTAwM2VkZXYsIGNvbm5faW5mby1cXHUwMDNlZGVzdF9wYXJhbXMpO1xcbiBcXHRcXHRcXHRkZXZtX2tmcmVlKFxcdTAwMjZuZGV2LVxcdTAwM2VuZmNfZGV2LVxcdTAwM2VkZXYsIGNvbm5faW5mbyk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNjoyODo1NC4zMTU4OTAzMjZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1ODgxMTI5NDk2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORkNcIixcbiAgICBcIk5GQ19OQ0lcIixcbiAgICBcIk5GQ19WSVJUVUFMX05DSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhpcyBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIHRoZSBORkMgTkNJIHN1YnN5c3RlbSB3aGVuIGhhbmRsaW5nIGEgQ09SRV9DT05OX0NMT1NFX1JTUCBwYWNrZXQuIEl0IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIHZpYSB0aGUgdmlydHVhbCBOQ0kgZGV2aWNlIHNpbXVsYXRvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1MGQxYmIyOThkYTc4MWY5MWY3MTBmYmJhNmE0MzUyZmRiNjg3MzE4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjEgMTY6Mjg6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmZjL25jaS9yc3AuYyBiL25ldC9uZmMvbmNpL3JzcC5jXG5pbmRleCA2YjJmYTZiZGJkMTRiZC4uMjFjMmZlNjQ0OTBlMmQgMTAwNjQ0XG4tLS0gYS9uZXQvbmZjL25jaS9yc3AuY1xuKysrIGIvbmV0L25mYy9uY2kvcnNwLmNcbkBAIC0zNjAsNiArMzYwLDcgQEAgc3RhdGljIHZvaWQgbmNpX2NvcmVfY29ubl9jbG9zZV9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuIFx0XHRcdGxpc3RfZGVsKFx1MDAyNmNvbm5faW5mby1cdTAwM2VsaXN0KTtcbiBcdFx0XHRpZiAoY29ubl9pbmZvID09IG5kZXYtXHUwMDNlcmZfY29ubl9pbmZvKVxuIFx0XHRcdFx0bmRldi1cdTAwM2VyZl9jb25uX2luZm8gPSBOVUxMO1xuK1x0XHRcdGRldm1fa2ZyZWUoXHUwMDI2bmRldi1cdTAwM2VuZmNfZGV2LVx1MDAzZWRldiwgY29ubl9pbmZvLVx1MDAzZWRlc3RfcGFyYW1zKTtcbiBcdFx0XHRkZXZtX2tmcmVlKFx1MDAyNm5kZXYtXHUwMDNlbmZjX2Rldi1cdTAwM2VkZXYsIGNvbm5faW5mbyk7XG4gXHRcdH1cbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE2OjI4OjU0LjMxNTg5Mjk3NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MTM3MjM3OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTWVtb3J5IExlYWsgRml4IGluIG5ldC9uZmMvbmNpL3JzcC5jKipcblxuT2theSwgc28gd2UgaGF2ZSBhIHBhdGNoIHRoYXQncyBiZWVuIHByb3Bvc2VkIGZvciBgbmV0L25mYy9uY2kvcnNwLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIGZ1bmN0aW9uYWxpdHksIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBhIHBvdGVudGlhbCBtZW1vcnkgbGVhayBmaXguIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBkZXZtX2tmcmVlKFx1MDAyNm5kZXYtXHUwMDNlbmZjX2Rldi1cdTAwM2VkZXYsIGNvbm5faW5mby1cdTAwM2VkZXN0X3BhcmFtcyk7YCBiZWZvcmUgZnJlZWluZyBgY29ubl9pbmZvYC4gVGhpcyBpcyBpbnRlcmVzdGluZzsgaXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIG1lbW9yeSBsZWFrIGZpeCDigJMgdGhvc2UgYXJlIGFsd2F5cyB3b3J0aCBhIGNsb3NlciBsb29rLlxuXG5NeSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMgdG8gdHJhY2UgdGhpcyB0aHJvdWdoIHRoZSByZWxhdGVkIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgY2hhbmdlLCBzbyBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBmdW5jdGlvbiB0aGF0IHNlZW1zIGNlbnRyYWwgdG8gdGhpcyBmaXgsIGBuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXRgLiBJJ2xsIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBmaW5kIHRoZSBkZWZpbml0aW9uIGFuZCBhbnkgcmVsYXRlZCBjYWxscyB3aXRoaW4gdGhlIGNvZGUgYmFzZS4gU2VlaW5nIHRoZSBjb25uZWN0aW9ucyBhbmQgaW50ZXJhY3Rpb25zIG9mIHRoaXMgZnVuY3Rpb24gd2lsbCBjbGFyaWZ5IHdoZXRoZXIgdGhpcyBpcyB0aGUgY29ycmVjdCBwbGFjZSB0byBoYW5kbGUgZnJlZWluZyB0aGUgbWVtb3J5IG9yIGlmIHNvbWV0aGluZyBpcyBhbWlzcyBlbHNld2hlcmUuIFVuZGVyc3RhbmRpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGFuZCBlc3BlY2lhbGx5IHRoZSBhbGxvY2F0aW9uIHBhdHRlcm5zIG9mIGBjb25uX2luZm8tXHUwMDNlZGVzdF9wYXJhbXNgIHdpbGwgYmUgY3JpdGljYWwgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgdGhlIGNvcnJlY3QgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTIyLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTY6Mjg6NTguNzI5NjE5NDkyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjU5NTc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mYy9uY2kvcnNwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25mYy9uY2kvcnNwLmM9Mjk0PXN0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXFxuLS1cXG5uZXQvbmZjL25jaS9yc3AuYy0zNDgtXFxubmV0L25mYy9uY2kvcnNwLmM6MzQ5OnN0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG5uZXQvbmZjL25jaS9yc3AuYy0zNTAtXFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9uZmMvbmNpL3JzcC5jPTM3MD12b2lkIG5jaV9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L25mYy9uY2kvcnNwLmMtNDEyLVxcdGNhc2UgTkNJX09QX0NPUkVfQ09OTl9DTE9TRV9SU1A6XFxubmV0L25mYy9uY2kvcnNwLmM6NDEzOlxcdFxcdG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldChuZGV2LCBza2IpO1xcbm5ldC9uZmMvbmNpL3JzcC5jLTQxNC1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTY6Mjg6NTguODkyMjIyMTcyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYxMjk4NTg0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyB0aGUgTkNJIENvcmUgQ29ubmVjdGlvbiBDbG9zdXJlIFJlc3BvbnNlKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldGAgZnVuY3Rpb24uIEl0IHNlZW1zIHRvIGJlIHRyaWdnZXJlZCB3aXRoaW4gdGhlIGBuY2lfcnNwX3BhY2tldGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aGVuIHdlIGdldCBhbiBgTkNJX09QX0NPUkVfQ09OTl9DTE9TRV9SU1BgIG1lc3NhZ2UuIFRoYXQncyBhIGtleSBjbHVlOyB0aGlzIGlzIGRlZmluaXRlbHkgcGFydCBvZiB0aGUgTkZDIE5DSSBzdWJzeXN0ZW0uIFRpbWUgdG8gZGlnIGludG8gdGhlIGBLY29uZmlnYCBmb3IgdGhlIE5GQyBOQ0kgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgb3B0aW9ucyByZWxhdGVkIHRvIGNvbm5lY3Rpb24gY2xvc3VyZSByZXNwb25zZXMgdG8gcHJvcGVybHkgYXNzZXNzIGl0cyBmdW5jdGlvbiBhbmQgaW50ZWdyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MTYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNjoyOTowMi41MDUyMTc3MDlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzMTMxMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORkNfTkNJXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZmMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZmMvbmNpL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvbmZjL25jaS9LY29uZmlnOjI6Y29uZmlnIE5GQ19OQ0lcXG5uZXQvbmZjL25jaS9LY29uZmlnLTMtXFx0ZGVwZW5kcyBvbiBORkNcXG4tLVxcbm5ldC9uZmMvbmNpL0tjb25maWctMTItXFxubmV0L25mYy9uY2kvS2NvbmZpZzoxMzpjb25maWcgTkZDX05DSV9TUElcXG5uZXQvbmZjL25jaS9LY29uZmlnLTE0LVxcdGRlcGVuZHMgb24gTkZDX05DSSBcXHUwMDI2XFx1MDAyNiBTUElcXG4tLVxcbm5ldC9uZmMvbmNpL0tjb25maWctMjMtXFxubmV0L25mYy9uY2kvS2NvbmZpZzoyNDpjb25maWcgTkZDX05DSV9VQVJUXFxubmV0L25mYy9uY2kvS2NvbmZpZy0yNS1cXHRkZXBlbmRzIG9uIE5GQ19OQ0kgXFx1MDAyNlxcdTAwMjYgVFRZXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE2OjI5OjAyLjYyODM2MDQ1OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0NTkwMzIxNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgbmNpX2NvcmVfY29ubl9jbG9zZV9yc3BfcGFja2V0YCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldGAgZnVuY3Rpb24sIGFuZCB0aGUgY29uZmlndXJhdGlvbiBpcyBzZXQgdG8gYE5GQ19OQ0lgLiBSaWdodCBvZmYgdGhlIGJhdCwgdGhhdCB0ZWxscyBtZSB0aGUgc2NvcGUgb2YgdGhlIHByb2JsZW0gaXMgd2l0aGluIHRoZSBjb250ZXh0IG9mIE5GQyBOQ0kuIEJ1dCBsZXQncyBub3QganVtcCB0byBjb25jbHVzaW9uczsgSSBrbm93IGBORkNfTkNJYCBpcyBkZXBlbmRlbnQgb24gYE5GQ2AgYmVpbmcgZW5hYmxlZCwgc28gdGhhdCdzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQgYXMgSSBkaWcgZGVlcGVyLiBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgcmVzcG9uc2UgcGFja2V0IGlzIGhhbmRsZWQsIGFuZCBhbnkgcG90ZW50aWFsIGlzc3VlcyBzdGVtbWluZyBmcm9tIHRoaXMgY29uZmlndXJhdGlvbi5cblxuQmVmb3JlIEkgZ28gZnVydGhlciwgSSBzaG91bGQgdmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgYWx0ZXJuYXRpdmUgcGF0aHMsIGJ5IHNlZWluZyBpZiB0aGVyZSBhcmUgYW55IHZpcnR1YWwgZHJpdmVycyBhY3RpdmUgb3IgcmVsZXZhbnQuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHZpcnR1YWwgTkNJIGRyaXZlcnMuIExldCBtZSBjaGVjayBpZiBgTkZDX1ZJUlRVQUxfTkNJYCBpcyBkZWZpbmVkIG9yIGludm9sdmVkIGhlcmUuIEl04oCZcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCAqYWxsKiB0aGUgcG9zc2libGUgd2F5cyB0aGlzIGZ1bmN0aW9uYWxpdHkgY291bGQgYmUgaW1wbGVtZW50ZWQuIFRoaXMgaXMgc3RhbmRhcmQgcHJvY2VkdXJlOiBjb3ZlciBhbGwgdGhlIGJhc2VzLCBiZWNhdXNlIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgZWRnZSBjYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA1NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE2OjI5OjExLjA4NzM5NDk5MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjM4NzQzNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GQ19WSVJUVUFMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmZjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25mYy9LY29uZmlnPTQyPWNvbmZpZyBORkNfUE9SVDEwMFxcbi0tXFxuZHJpdmVycy9uZmMvS2NvbmZpZy01MS1cXG5kcml2ZXJzL25mYy9LY29uZmlnOjUyOmNvbmZpZyBORkNfVklSVFVBTF9OQ0lcXG5kcml2ZXJzL25mYy9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJOQ0kgZGV2aWNlIHNpbXVsYXRvciBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE2OjI5OjExLjIxMTI3NDQxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTgxOTQ4MjQ1NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgTkZDIFZpcnR1YWwgTkNJIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGNvbmNlcHQgb2YgYE5GQ19WSVJUVUFMX05DSWAgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgSSdtIGZhbWlsaWFyIHdpdGg7IGl0J3MgYSBrbm93biBjb25zdHJ1Y3QuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoZXJlJ3MgdGhlIGltcGxlbWVudGF0aW9uP1wiIEdpdmVuIHRoZSBuYW1lLCBJJ2QgZXhwZWN0IHRvIGZpbmQgaXQgd2l0aGluIHRoZSBrZXJuZWwncyBORkMgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGRyaXZlciBzcGFjZS4gTW9yZSBzcGVjaWZpY2FsbHksIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgYGRyaXZlcnMvbmZjL2AuIExldCBtZSB0aGluay4uLmdpdmVuIGl0J3MgdmlydHVhbCwgc29tZXRoaW5nIGxpa2UgYHZpcnR1YWxfbmNpZGV2LmNgIHNvdW5kcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgZmlsZSBuYW1lLiBJIHNob3VsZCBzdGFydCB0aGVyZSwgb3IgbWF5YmUgc29tZXRoaW5nIHNpbWlsYXIsIGFzIGEgZmlyc3QgcG9ydCBvZiBjYWxsLiBUaGF0J3MgcHJvYmFibHkgdGhlIG1vc3QgbGlrZWx5IGxvY2F0aW9uIGZvciB0aGUgY29kZSBJJ20gYWZ0ZXIsIGF0IGxlYXN0IGZvciBhIGZpcnN0IHBhc3MuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBkaWcgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MDQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNjoyOToyOS40MDYxMDA5NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5MjIyMzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5GQ19WSVJUVUFMX05DSVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25mYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZmMvS2NvbmZpZz00Mj1jb25maWcgTkZDX1BPUlQxMDBcXG4tLVxcbmRyaXZlcnMvbmZjL0tjb25maWctNTEtXFxuZHJpdmVycy9uZmMvS2NvbmZpZzo1Mjpjb25maWcgTkZDX1ZJUlRVQUxfTkNJXFxuZHJpdmVycy9uZmMvS2NvbmZpZy01My1cXHR0cmlzdGF0ZSBcXFwiTkNJIGRldmljZSBzaW11bGF0b3IgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZmMvTWFrZWZpbGU9MTk9b2JqLSQoQ09ORklHX05GQ19TVDk1SEYpXFx0Kz0gc3Q5NWhmL1xcbmRyaXZlcnMvbmZjL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19ORkNfVklSVFVBTF9OQ0kpXFx0Kz0gdmlydHVhbF9uY2lkZXYub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNjoyOToyOS41NzUzMzQxNThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU2NDg1NjUzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKk15IFRoaW5raW5nIG9uIE5GQyBDb25maWd1cmF0aW9uIGFuZCBDb3JlIFJlc3BvbnNlIFBhY2tldHMqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBvcHRpbWFsIE5GQyBjb25maWd1cmF0aW9uLiBCYXNlZCBvbiBteSBleHBlcmllbmNlLCBJJ2Qgc2F5IGVuYWJsaW5nIGBORkNfVklSVFVBTF9OQ0lgIGlzIGEgc29saWQgbW92ZS4gVGhhdCBwcm92aWRlcyBhIGdvb2QgYmFzZSBmb3IgdmlydHVhbCBOQ0kgaW1wbGVtZW50YXRpb25zLCB3aGljaCBJIG9mdGVuIHNlZSBhcyBuZWNlc3NhcnkuIEFsb25nIHdpdGggdGhhdCwgbmF0dXJhbGx5LCBgTkZDX05DSWAgYW5kIGBORkNgIHNob3VsZCBhbHNvIGJlIGVuYWJsZWQuIFRoYXQncyBwcmV0dHkgc3RhbmRhcmQgZm9yIG1vc3Qgc2V0dXBzLlxuXG5Ob3csIEkgd2FudCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgc29tZXRoaW5nIHNwZWNpZmljOiB0aGUgYG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldGAgZnVuY3Rpb24uIEknbSBnb2luZyB0byBjaGVjayBob3cgdGhpcyByZXNwb25zZSBwYWNrZXQgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGBuZXQvbmZjL25jaS9yc3AuY2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIHN5c3RlbSByZWFjdHMgdG8gYSBjb25uZWN0aW9uIGNsb3NlIHJlc3BvbnNlLiBUaGlzIGlzIGNyaXRpY2FsIGZvciByb2J1c3QgTkZDIG9wZXJhdGlvbiwgYXMgSSBuZWVkIHRvIGtub3cgdGhlIHByb3BlciBjbGVhbnVwIHNlcXVlbmNlIG9uIGFueSBmYWlsdXJlIG9yIGRpc2Nvbm5lY3QuIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGltcGxlbWVudGF0aW9uIHRvIG1ha2Ugc3VyZSBpdCBmdW5jdGlvbnMgYXMgZXhwZWN0ZWQgaW4gYSByb2J1c3QgYW5kIHNlY3VyZSBmYXNoaW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTI1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTY6Mjk6MzMuMTQwMTkzMzI4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmZjL25jaS9yc3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNDA6XFx0XFxuIDM0MTpcXHRmcmVlX2Nvbm5faW5mbzpcXG4gMzQyOlxcdFxcdGlmIChzdGF0dXMgPT0gTkNJX1NUQVRVU19SRUpFQ1RFRClcXG4gMzQzOlxcdFxcdFxcdGRldm1fa2ZyZWUoXFx1MDAyNm5kZXYtXFx1MDAzZW5mY19kZXYtXFx1MDAzZWRldiwgY29ubl9pbmZvKTtcXG4gMzQ0OlxcdGV4aXQ6XFxuIDM0NTpcXHRcXG4gMzQ2OlxcdFxcdG5jaV9yZXFfY29tcGxldGUobmRldiwgc3RhdHVzKTtcXG4gMzQ3OlxcdH1cXG4gMzQ4OlxcdFxcbiAzNDk6XFx0c3RhdGljIHZvaWQgbmNpX2NvcmVfY29ubl9jbG9zZV9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxcbiAzNTA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gMzUxOlxcdHtcXG4gMzUyOlxcdFxcdHN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87XFxuIDM1MzpcXHRcXHRfX3U4IHN0YXR1cyA9IHNrYi1cXHUwMDNlZGF0YVswXTtcXG4gMzU0OlxcdFxcbiAzNTU6XFx0XFx0cHJfZGVidWcoXFxcInN0YXR1cyAweCV4XFxcXG5cXFwiLCBzdGF0dXMpO1xcbiAzNTY6XFx0XFx0aWYgKHN0YXR1cyA9PSBOQ0lfU1RBVFVTX09LKSB7XFxuIDM1NzpcXHRcXHRcXHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKG5kZXYsXFxuIDM1ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgbmRldi1cXHUwMDNlY3VyX2Nvbm5faWQpO1xcbiAzNTk6XFx0XFx0XFx0aWYgKGNvbm5faW5mbykge1xcbiAzNjA6XFx0XFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNmNvbm5faW5mby1cXHUwMDNlbGlzdCk7XFxuIDM2MTpcXHRcXHRcXHRcXHRpZiAoY29ubl9pbmZvID09IG5kZXYtXFx1MDAzZXJmX2Nvbm5faW5mbylcXG4gMzYyOlxcdFxcdFxcdFxcdFxcdG5kZXYtXFx1MDAzZXJmX2Nvbm5faW5mbyA9IE5VTEw7XFxuIDM2MzpcXHRcXHRcXHRcXHRkZXZtX2tmcmVlKFxcdTAwMjZuZGV2LVxcdTAwM2VuZmNfZGV2LVxcdTAwM2VkZXYsIGNvbm5faW5mby1cXHUwMDNlZGVzdF9wYXJhbXMpO1xcbiAzNjQ6XFx0XFx0XFx0XFx0ZGV2bV9rZnJlZShcXHUwMDI2bmRldi1cXHUwMDNlbmZjX2Rldi1cXHUwMDNlZGV2LCBjb25uX2luZm8pO1xcbiAzNjU6XFx0XFx0XFx0fVxcbiAzNjY6XFx0XFx0fVxcbiAzNjc6XFx0XFx0bmNpX3JlcV9jb21wbGV0ZShuZGV2LCBzdGF0dXMpO1xcbiAzNjg6XFx0fVxcbiAzNjk6XFx0XFxuIDM3MDpcXHR2b2lkIG5jaV9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAzNzE6XFx0e1xcbiAzNzI6XFx0XFx0X191MTYgcnNwX29wY29kZSA9IG5jaV9vcGNvZGUoc2tiLVxcdTAwM2VkYXRhKTtcXG4gMzczOlxcdFxcbiAzNzQ6XFx0XFx0Lyogd2UgZ290IGEgcnNwLCBzdG9wIHRoZSBjbWQgdGltZXIgKi9cXG4gMzc1OlxcdFxcdHRpbWVyX2RlbGV0ZShcXHUwMDI2bmRldi1cXHUwMDNlY21kX3RpbWVyKTtcXG4gMzc2OlxcdFxcbiAzNzc6XFx0XFx0cHJfZGVidWcoXFxcIk5DSSBSWDogTVQ9cnNwLCBQQkY9JWQsIEdJRD0weCV4LCBPSUQ9MHgleCwgcGxlbj0lZFxcXFxuXFxcIixcXG4gMzc4OlxcdFxcdFxcdCBuY2lfcGJmKHNrYi1cXHUwMDNlZGF0YSksXFxuIDM3OTpcXHRcXHRcXHQgbmNpX29wY29kZV9naWQocnNwX29wY29kZSksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE2OjI5OjMzLjE0MDMwOTAxOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTc3MDI3MDU5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpcyBhbmQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2gg4oCTIHNlZW1zIGxpa2UgaXQncyBhZGRyZXNzaW5nIGEgbWVtb3J5IGxlYWssIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXRgIGZ1bmN0aW9uLiBUaGlzIGlzIGtleSwgYW5kIGl0J3MgcmVhY2hhYmxlIHRocm91Z2ggZWl0aGVyIGB2aXJ0dWFsX25jaWRldmAgb3Igb3RoZXIgTkZDIGRyaXZlcnMuXG5cblJpZ2h0LCBzbyB0byBlbmFibGUgdGhpcyBmaXgsIHRoZSBjb25maWdzIGludm9sdmVkIGFyZSBgTkZDX05DSWAgYW5kIGBORkNfVklSVFVBTF9OQ0lgLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIGBORkNfTkNJYCBpcyBlbm91Z2ggdG8gcHVsbCBpbiBldmVyeXRoaW5nIHdlIG5lZWQsIG9yIGlmIHdlIG5lZWQgdG8gZXhwbGljaXRseSBpbmNsdWRlIGBORkNgIGFzIHdlbGwuIExldCBtZSBqdXN0IGFkZCBgTkZDYCwgYE5GQ19OQ0lgLCBhbmQgYE5GQ19WSVJUVUFMX05DSWAgdG8gdGhlIGxpc3QuIEJldHRlciB0byBiZSB0aG9yb3VnaCwgSSBzdXBwb3NlLlxuXG5Ob3csIGxldCdzIGNpcmNsZSBiYWNrIHRvIHRoYXQgZm9jdXMgc3ltYm9sOiBgbmNpX2NvcmVfY29ubl9jbG9zZV9yc3BfcGFja2V0YC4gSXQncyBzdGF0aWMsIHdoaWNoIGlzIGlkZWFsIGJlY2F1c2UgdGhhdCBtYWtlcyBpdCBhIG11Y2ggY2xlYXJlciB0YXJnZXQgZm9yIGFuYWx5c2lzLiBgbmNpX3JzcF9wYWNrZXRgIG1pZ2h0IGFsc28gYmUgcmVsZXZhbnQsIGJ1dCBpdCdzIGEgYml0IHRvbyBnZW5lcmljLCBzbyBgbmNpX2NvcmVfY29ubl9jbG9zZV9yc3BfcGFja2V0YCBpcyB0aGUgcHJlZmVycmVkIHRhcmdldC5cblxuQWxyaWdodCwgSSdtIHNhdGlzZmllZCB3aXRoIHRoZSBhc3Nlc3NtZW50LiBUaW1lIHRvIHNldCB0aGVzZSByZXN1bHRzIGFuZCBwcm9jZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTU0LCJPdXRwdXRUb2tlbnMiOjExMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE2OjI5OjUyLjkxMDU4MjI2OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjU5ODgzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZDXCIsXG4gICAgXCJORkNfTkNJXCIsXG4gICAgXCJORkNfVklSVFVBTF9OQ0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgTkZDIE5DSSBzdWJzeXN0ZW0gd2hlbiBoYW5kbGluZyBhIENPUkVfQ09OTl9DTE9TRV9SU1AgcGFja2V0LiBJdCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgYW5kIHRlc3RlZCB2aWEgdGhlIHZpcnR1YWwgTkNJIGRldmljZSBzaW11bGF0b3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZDXCIsXG4gICAgXCJORkNfTkNJXCIsXG4gICAgXCJORkNfVklSVFVBTF9OQ0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgTkZDIE5DSSBzdWJzeXN0ZW0gd2hlbiBoYW5kbGluZyBhIENPUkVfQ09OTl9DTE9TRV9SU1AgcGFja2V0LiBJdCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgYW5kIHRlc3RlZCB2aWEgdGhlIHZpcnR1YWwgTkNJIGRldmljZSBzaW11bGF0b3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowbcr7f[1] Phase: Succeeded StartedAt: 2026-07-21 16:30:04 +0000 UTC FinishedAt: 2026-07-21 16:30:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbcr7f[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-21 16:30:04 +0000 UTC FinishedAt: 2026-07-21 16:30:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbcr7f[2] Phase: Succeeded StartedAt: 2026-07-21 16:30:04 +0000 UTC FinishedAt: 2026-07-21 17:40:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbcr7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_close_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"176648b6-267e-4e4f-9e9c-cb30e3266d5b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-07-21 16:30:04 +0000 UTC FinishedAt: 2026-07-21 17:40:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_close_rsp_packet"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"176648b6-267e-4e4f-9e9c-cb30e3266d5b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowbcr7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_close_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"176648b6-267e-4e4f-9e9c-cb30e3266d5b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-21 16:30:04 +0000 UTC FinishedAt: 2026-07-21 16:30:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbcr7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_close_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"176648b6-267e-4e4f-9e9c-cb30e3266d5b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-21 16:30:04 +0000 UTC FinishedAt: 2026-07-21 16:30:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowbcr7f/series-workflowbcr7f-convert-artifact-4107222692/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbcr7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_close_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"176648b6-267e-4e4f-9e9c-cb30e3266d5b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-21 16:30:24 +0000 UTC FinishedAt: 2026-07-21 17:09:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbcr7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_close_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"176648b6-267e-4e4f-9e9c-cb30e3266d5b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-21 16:30:24 +0000 UTC FinishedAt: 2026-07-21 17:09:04 +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:*d449a260-e7d1-460e-8bdf-acb2a2a92077,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-workflowbcr7f/series-workflowbcr7f-convert-artifact-4107222692/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": "d4df09f7-c008-4c3b-9373-547133a4def0", "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-workflowbcr7f/series-workflowbcr7f-build-action-1833881826/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbcr7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_close_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"176648b6-267e-4e4f-9e9c-cb30e3266d5b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-21 16:30:24 +0000 UTC FinishedAt: 2026-07-21 17:08:54 +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:*d449a260-e7d1-460e-8bdf-acb2a2a92077,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-workflowbcr7f/series-workflowbcr7f-convert-artifact-4107222692/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": "d4df09f7-c008-4c3b-9373-547133a4def0", "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-workflowbcr7f/series-workflowbcr7f-build-action-1833881826/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbcr7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_close_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"176648b6-267e-4e4f-9e9c-cb30e3266d5b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-21 17:09:04 +0000 UTC FinishedAt: 2026-07-21 17:09:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbcr7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_close_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"176648b6-267e-4e4f-9e9c-cb30e3266d5b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-21 17:09:04 +0000 UTC FinishedAt: 2026-07-21 17:09:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbcr7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_close_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"176648b6-267e-4e4f-9e9c-cb30e3266d5b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-21 17:09:04 +0000 UTC FinishedAt: 2026-07-21 17:09:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbcr7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_close_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"176648b6-267e-4e4f-9e9c-cb30e3266d5b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-21 17:09:04 +0000 UTC FinishedAt: 2026-07-21 17:09:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"176648b6-267e-4e4f-9e9c-cb30e3266d5b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowbcr7f/series-workflowbcr7f-convert-artifact-1385564835/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbcr7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_close_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"176648b6-267e-4e4f-9e9c-cb30e3266d5b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-21 17:09:14 +0000 UTC FinishedAt: 2026-07-21 17:40:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbcr7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_close_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"176648b6-267e-4e4f-9e9c-cb30e3266d5b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-21 17:09:14 +0000 UTC FinishedAt: 2026-07-21 17:40:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d4df09f7-c008-4c3b-9373-547133a4def0,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-workflowbcr7f/series-workflowbcr7f-build-action-1833881826/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": false },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-workflowbcr7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_close_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"176648b6-267e-4e4f-9e9c-cb30e3266d5b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Failed StartedAt: 2026-07-21 17:40:26 +0000 UTC FinishedAt: 2026-07-21 17:40:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbcr7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_close_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"176648b6-267e-4e4f-9e9c-cb30e3266d5b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Failed StartedAt: 2026-07-21 17:40:26 +0000 UTC FinishedAt: 2026-07-21 17:40:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}