Name: series-workflowgxvph Phase: Succeeded StartedAt: 2026-07-09 03:55:55 +0000 UTC FinishedAt: 2026-07-09 09:00:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgxvph[0] Phase: Succeeded StartedAt: 2026-07-09 03:55:55 +0000 UTC FinishedAt: 2026-07-09 04:23:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgxvph[0].run-triage Phase: Succeeded StartedAt: 2026-07-09 03:55:55 +0000 UTC FinishedAt: 2026-07-09 04:23:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "aaa333be-5549-4a61-a07e-21707bd65bb9" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_expand_extra_isize_ea", "ext4_xattr_make_inode_space" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDA0OjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYSYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX21ha2VfaW5vZGVfc3BhY2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gZXh0NCB3aGVyZSBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgIGNvdWxkIHJldHVybiBgLUVOT1NQQ2AgZXZlbiB3aGVuIGl0IHN1Y2Nlc3NmdWxseSBleHBhbmRlZCB0aGUgZXh0cmEgaXNpemUsIGJlY2F1c2UgYGVycm9yYCB3YXNuJiMzOTt0IHJlc2V0IHRvIDAgYmVmb3JlIGp1bXBpbmcgdG8gYHJldHJ5YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGZpbGVzeXN0ZW0gbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDQ6MTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2YzVmZDkwNWI0OTNlZjI0YWQ2NGU0ZjI4NWFiNjhhYjU5NjMzMGI1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgOSAwNDoxODo1NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyLmMgYi9mcy9leHQ0L3hhdHRyLmNcbmluZGV4IDk4MmExZjgzMWUyMjgyLi45ZGE1ZGZjZWE3Yjg2YiAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQveGF0dHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC94YXR0ci5jXG5AQCAtMjgzOSw2ICYjNDM7MjgzOSw3IEBAIGludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxuIFx0XHQgICAgc19taW5fZXh0cmFfaXNpemUpIHtcbiBcdFx0XHR0cmllZF9taW5fZXh0cmFfaXNpemUmIzQzOyYjNDM7O1xuIFx0XHRcdG5ld19leHRyYV9pc2l6ZSA9IHNfbWluX2V4dHJhX2lzaXplO1xuJiM0MztcdFx0XHRlcnJvciA9IDA7XG4gXHRcdFx0Z290byByZXRyeTtcbiBcdFx0fVxuIFx0XHRnb3RvIGNsZWFudXA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDQ6MTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfbWFrZV9pbm9kZV9zcGFjZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBleHQ0IHdoZXJlIGBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYWAgY291bGQgcmV0dXJuIGAtRU5PU1BDYCBldmVuIHdoZW4gaXQgc3VjY2Vzc2Z1bGx5IGV4cGFuZGVkIHRoZSBleHRyYSBpc2l6ZSwgYmVjYXVzZSBgZXJyb3JgIHdhc24mIzM5O3QgcmVzZXQgdG8gMCBiZWZvcmUganVtcGluZyB0byBgcmV0cnlgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmM1ZmQ5MDViNDkzZWYyNGFkNjRlNGYyODVhYjY4YWI1OTYzMzBiNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDkgMDQ6MTg6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyLmMgYi9mcy9leHQ0L3hhdHRyLmMKaW5kZXggOTgyYTFmODMxZTIyODIuLjlkYTVkZmNlYTdiODZiIDEwMDY0NAotLS0gYS9mcy9leHQ0L3hhdHRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC94YXR0ci5jCkBAIC0yODM5LDYgJiM0MzsyODM5LDcgQEAgaW50IGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZXh0cmFfaXNpemUsCiAJCSAgICBzX21pbl9leHRyYV9pc2l6ZSkgewogCQkJdHJpZWRfbWluX2V4dHJhX2lzaXplJiM0MzsmIzQzOzsKIAkJCW5ld19leHRyYV9pc2l6ZSA9IHNfbWluX2V4dHJhX2lzaXplOwomIzQzOwkJCWVycm9yID0gMDsKIAkJCWdvdG8gcmV0cnk7CiAJCX0KIAkJZ290byBjbGVhbnVwOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwNDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODIxCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBFeHQ0IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZnMvZXh0NC94YXR0ci5jYC4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHRoZSBjaGFuZ2UgaXMgaW5zZXJ0aW5nIGBlcnJvciA9IDA7YCByaWdodCBiZWZvcmUgdGhlIGBnb3RvIHJldHJ5O2AgbGFiZWwgd2l0aGluIHRoZSBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyB3YXMgYWRkZWQgYW5kIHdoYXQgcHJvYmxlbSBpdCYjMzk7cyBhZGRyZXNzaW5nLiBUaGUgb2J2aW91cyBuZXh0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgIGZ1bmN0aW9uIGl0c2VsZiBhbmQgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aGluIHRoYXQgY29kZSBibG9jay4gVGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsIGVkZ2UgY2FzZSBmaXgsIHBlcmhhcHMgcmVsYXRlZCB0byBlcnJvciBoYW5kbGluZyBvciByZXNvdXJjZSBtYW5hZ2VtZW50IGR1cmluZyBleHRlbmRlZCBhdHRyaWJ1dGUgb3BlcmF0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgY29udHJvbCBmbG93IGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoYXQgYHJldHJ5YCBsYWJlbCB0byBmdWxseSBncmFzcCB0aGUgaW50ZW50IG9mIHRoaXMgc2VlbWluZ2x5IG1pbm9yIGFkZGl0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDA0OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC94YXR0ci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQveGF0dHIuYz0yNjk0PXN0YXRpYyBpbnQgZXh0NF94YXR0cl9tYWtlX2lub2RlX3NwYWNlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC94YXR0ci5jLTI3NjItICovXG5mcy9leHQ0L3hhdHRyLmM6Mjc2MzppbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSxcbmZzL2V4dDQveGF0dHIuYy0yNzY0LVx0XHRcdCAgICAgICBzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlLCBoYW5kbGVfdCAqaGFuZGxlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDA0OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGl0LCBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiBhbiBleHBlcnQgaW4gZmlsZSBzeXN0ZW1zOgoKKipEZWNvbnN0cnVjdGluZyBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgKioKCkFscmlnaHQsIEkmIzM5O20gaGVhZGluZyBvdmVyIHRvIGBmcy9leHQ0L3hhdHRyLmNgIGFuZCBmb2N1c2luZyBvbiBsaW5lIDI4MzkgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGZ1bmN0aW9uIGBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYWAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBmdW5jdGlvbiAqbXVzdCogYmUgZGVhbGluZyB3aXRoIHRoZSBhbGxvY2F0aW9uIGFuZCBleHBhbnNpb24gb2YgRXh0ZW5kZWQgQXR0cmlidXRlIChFQSkgc3BhY2Ugd2l0aGluIGFuIGV4dDQgZmlsZXN5c3RlbS4gVGhlIG5hbWUgZ2l2ZXMgdGhhdCBhd2F5LCBidXQgSSB3YW50IHRvIGNvbmZpcm0gd2hhdCBpdCYjMzk7cyBzcGVjaWZpY2FsbHkgZG9pbmcgcmVsYXRlZCB0byBpbmNyZWFzaW5nIHRoZSBpbi1pbm9kZSBzaXplLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXRhaWxzIG9mIHRoZSBpbm9kZSBkYXRhIHN0cnVjdHVyZSwgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3ksIGhvdyBFQXMgYXJlIHN0b3JlZCwgYW5kIHRoZSBwb3RlbnRpYWwgY29uc3RyYWludHMgdGhhdCBhcmUgYmVpbmcgbWFuYWdlZCBoZXJlLiBUaGluZ3MgdG8gaW1tZWRpYXRlbHkgY29uc2lkZXI6IGhvdyBpdCBoYW5kbGVzIHRoZSBpX2V4dHJhX2lzaXplIGZpZWxkIG9mIHRoZSBpbm9kZSwgdGhlIHBvdGVudGlhbCBmb3IgZnJhZ21lbnRhdGlvbiBvciBuZWVkaW5nIHRvIG1vdmUgZGF0YSBhcm91bmQsIGVycm9yIGNvbmRpdGlvbnMgc3VjaCBhcyBzcGFjZSBleGhhdXN0aW9uIG9yIGNvcnJ1cHRpb24sIGFuZCBhbnkgbG9ja2luZyBtZWNoYW5pc21zIHVzZWQgZm9yIHN5bmNocm9uaXphdGlvbiB0byBtYWludGFpbiBjb25zaXN0ZW5jeSBvZiB0aGUgZmlsZSBzeXN0ZW0uIEkgYWxzbyBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBvc3NpYmxlIGZhaWx1cmUgc3RhdGVzLCBmb3IgZXhhbXBsZSwgcnVubmluZyBvdXQgb2Ygc3BhY2UuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoZSBmdW5jdGlvbi4gSSBleHBlY3QgaXQmIzM5O3MgZ29pbmcgdG8gaW5jbHVkZSBzb21lIGNoZWNrcyBmb3Igc3VmZmljaWVudCBzcGFjZSwgcGVyaGFwcyBzb21lIGJsb2NrIGFsbG9jYXRpb24gbG9naWMgaWYgaXQmIzM5O3MgZXhwYW5kaW5nIGJleW9uZCB0aGUgaW5pdGlhbCBpbi1pbm9kZSBhcmVhLCBhbmQgcHJvYmFibHkgc29tZSB3cml0aW5nIHRvIHRoZSBzdXBlcmJsb2NrIG9yIGlub2RlIGl0c2VsZiB0byByZWZsZWN0IHRoZSBjaGFuZ2VzLiBVbHRpbWF0ZWx5LCBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBuaXR0eS1ncml0dHkgb2YgaG93IGl0IGV4cGFuZHMgdGhlIGF2YWlsYWJsZSBzcGFjZSBmb3IgRUFzIGluIHRoZSBpbm9kZS4gTGV0JiMzOTtzIHNlZSBob3cgaXQgd29ya3MhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDQ6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L3hhdHRyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyODAwOlx0XHQgKiBFQSBibG9jayBjYW4gaG9sZCBuZXdfZXh0cmFfaXNpemUgYnl0ZXMuXG4yODAxOlx0XHQgKi9cbjI4MDI6XHRcdGlmIChFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmlsZV9hY2wpIHtcbjI4MDM6XHRcdFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbjI4MDQ6XHRcbjI4MDU6XHRcdFx0YmggPSBleHQ0X3NiX2JyZWFkKGlub2RlLVx1MDAzZWlfc2IsIEVYVDRfSShpbm9kZSktXHUwMDNlaV9maWxlX2FjbCwgUkVRX1BSSU8pO1xuMjgwNjpcdFx0XHRpZiAoSVNfRVJSKGJoKSkge1xuMjgwNzpcdFx0XHRcdGVycm9yID0gUFRSX0VSUihiaCk7XG4yODA4Olx0XHRcdFx0Z290byBjbGVhbnVwO1xuMjgwOTpcdFx0XHR9XG4yODEwOlx0XHRcdGVycm9yID0gZXh0NF94YXR0cl9jaGVja19ibG9jayhpbm9kZSwgYmgpO1xuMjgxMTpcdFx0XHRpZiAoZXJyb3IpIHtcbjI4MTI6XHRcdFx0XHRicmVsc2UoYmgpO1xuMjgxMzpcdFx0XHRcdGdvdG8gY2xlYW51cDtcbjI4MTQ6XHRcdFx0fVxuMjgxNTpcdFx0XHRiYXNlID0gQkhEUihiaCk7XG4yODE2Olx0XHRcdGVuZCA9IGJoLVx1MDAzZWJfZGF0YSAmIzQzOyBiaC1cdTAwM2ViX3NpemU7XG4yODE3Olx0XHRcdG1pbl9vZmZzID0gZW5kIC0gYmFzZTtcbjI4MTg6XHRcdFx0YmZyZWUgPSBleHQ0X3hhdHRyX2ZyZWVfc3BhY2UoQkZJUlNUKGJoKSwgXHUwMDI2bWluX29mZnMsIGJhc2UsXG4yODE5Olx0XHRcdFx0XHRcdCAgICAgIE5VTEwpO1xuMjgyMDpcdFx0XHRicmVsc2UoYmgpO1xuMjgyMTpcdFx0XHRpZiAoYmZyZWUgJiM0MzsgaWZyZWUgXHUwMDNjIGlzaXplX2RpZmYpIHtcbjI4MjI6XHRcdFx0XHRpZiAoIXRyaWVkX21pbl9leHRyYV9pc2l6ZSBcdTAwMjZcdTAwMjYgc19taW5fZXh0cmFfaXNpemUpIHtcbjI4MjM6XHRcdFx0XHRcdHRyaWVkX21pbl9leHRyYV9pc2l6ZSYjNDM7JiM0Mzs7XG4yODI0Olx0XHRcdFx0XHRuZXdfZXh0cmFfaXNpemUgPSBzX21pbl9leHRyYV9pc2l6ZTtcbjI4MjU6XHRcdFx0XHRcdGdvdG8gcmV0cnk7XG4yODI2Olx0XHRcdFx0fVxuMjgyNzpcdFx0XHRcdGVycm9yID0gLUVOT1NQQztcbjI4Mjg6XHRcdFx0XHRnb3RvIGNsZWFudXA7XG4yODI5Olx0XHRcdH1cbjI4MzA6XHRcdH0gZWxzZSB7XG4yODMxOlx0XHRcdGJmcmVlID0gaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZTtcbjI4MzI6XHRcdH1cbjI4MzM6XHRcbjI4MzQ6XHRcdGVycm9yID0gZXh0NF94YXR0cl9tYWtlX2lub2RlX3NwYWNlKGhhbmRsZSwgaW5vZGUsIHJhd19pbm9kZSxcbjI4MzU6XHRcdFx0XHRcdFx0ICAgIGlzaXplX2RpZmYsIGlmcmVlLCBiZnJlZSxcbjI4MzY6XHRcdFx0XHRcdFx0ICAgIFx1MDAyNnRvdGFsX2lubyk7XG4yODM3Olx0XHRpZiAoZXJyb3IpIHtcbjI4Mzg6XHRcdFx0aWYgKGVycm9yID09IC1FTk9TUEMgXHUwMDI2XHUwMDI2ICF0cmllZF9taW5fZXh0cmFfaXNpemUgXHUwMDI2XHUwMDI2XG4yODM5Olx0XHRcdCAgICBzX21pbl9leHRyYV9pc2l6ZSkge1xuMjg0MDpcdFx0XHRcdHRyaWVkX21pbl9leHRyYV9pc2l6ZSYjNDM7JiM0Mzs7XG4yODQxOlx0XHRcdFx0bmV3X2V4dHJhX2lzaXplID0gc19taW5fZXh0cmFfaXNpemU7XG4yODQyOlx0XHRcdFx0ZXJyb3IgPSAwO1xuMjg0MzpcdFx0XHRcdGdvdG8gcmV0cnk7XG4yODQ0Olx0XHRcdH1cbjI4NDU6XHRcdFx0Z290byBjbGVhbnVwO1xuMjg0NjpcdFx0fVxuMjg0NzpcdHNoaWZ0OlxuMjg0ODpcdFx0LyogQWRqdXN0IHRoZSBvZmZzZXRzIGFuZCBzaGlmdCB0aGUgcmVtYWluaW5nIGVudHJpZXMgYWhlYWQgKi9cbjI4NDk6XHRcdGV4dDRfeGF0dHJfc2hpZnRfZW50cmllcyhJRklSU1QoaGVhZGVyKSwgRVhUNF9JKGlub2RlKS1cdTAwM2VpX2V4dHJhX2lzaXplXG4yODUwOlx0XHRcdFx0LSBuZXdfZXh0cmFfaXNpemUsICh2b2lkICopcmF3X2lub2RlICYjNDM7XG4yODUxOlx0XHRcdFx0RVhUNF9HT09EX09MRF9JTk9ERV9TSVpFICYjNDM7IG5ld19leHRyYV9pc2l6ZSxcbjI4NTI6XHRcdFx0XHQodm9pZCAqKWhlYWRlciwgdG90YWxfaW5vKTtcbjI4NTM6XHRcdEVYVDRfSShpbm9kZSktXHUwMDNlaV9leHRyYV9pc2l6ZSA9IG5ld19leHRyYV9pc2l6ZTtcbjI4NTQ6XHRcbjI4NTU6XHRcdGlmIChleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpXG4yODU2Olx0XHRcdGVycm9yID0gZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhpbm9kZSk7XG4yODU3Olx0XG4yODU4Olx0Y2xlYW51cDpcbjI4NTk6XHRcdGlmIChlcnJvciBcdTAwMjZcdTAwMjYgKG1udF9jb3VudCAhPSBsZTE2X3RvX2NwdShzYmktXHUwMDNlc19lcy1cdTAwM2VzX21udF9jb3VudCkpKSB7XG4yODYwOlx0XHRcdGV4dDRfd2FybmluZyhpbm9kZS1cdTAwM2VpX3NiLCBcJiMzNDtVbmFibGUgdG8gZXhwYW5kIGlub2RlICVsbHUuIERlbGV0ZSBzb21lIEVBcyBvciBydW4gZTJmc2NrLlwmIzM0OyxcbjI4NjE6XHRcdFx0XHQgICAgIGlub2RlLVx1MDAzZWlfaW5vKTtcbjI4NjI6XHRcdFx0bW50X2NvdW50ID0gbGUxNl90b19jcHUoc2JpLVx1MDAzZXNfZXMtXHUwMDNlc19tbnRfY291bnQpO1xuMjg2MzpcdFx0fVxuMjg2NDpcdFx0cmV0dXJuIGVycm9yO1xuMjg2NTpcdH1cbjI4NjY6XHRcbjI4Njc6XHQjZGVmaW5lIEVJQV9JTkNSIDE2IC8qIG11c3QgYmUgMl5uICovXG4yODY4Olx0I2RlZmluZSBFSUFfTUFTSyAoRUlBX0lOQ1IgLSAxKVxuMjg2OTpcdFxuMjg3MDpcdC8qIEFkZCB0aGUgbGFyZ2UgeGF0dHIgQGlub2RlIGludG8gQGVhX2lub2RlX2FycmF5IGZvciBkZWZlcnJlZCBpcHV0KCkuXG4yODcxOlx0ICogSWYgQGVhX2lub2RlX2FycmF5IGlzIG5ldyBvciBmdWxsIGl0IHdpbGwgYmUgZ3Jvd24gYW5kIHRoZSBvbGRcbjI4NzI6XHQgKiBjb250ZW50cyBjb3BpZWQgb3Zlci5cbjI4NzM6XHQgKi9cbjI4NzQ6XHRzdGF0aWMgaW50XG4yODc1Olx0ZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbjI4NzY6XHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuMjg3NzpcdHtcbjI4Nzg6XHRcdGlmICgqZWFfaW5vZGVfYXJyYXkgPT0gTlVMTCkge1xuMjg3OTpcdFx0XHQvKlxuMjg4MDpcdFx0XHQgKiBTdGFydCB3aXRoIDE1IGlub2Rlcywgc28gaXQgZml0cyBpbnRvIGEgcG93ZXItb2YtdHdvIHNpemUuXG4yODgxOlx0XHRcdCAqL1xuMjg4MjpcdFx0XHQoKmVhX2lub2RlX2FycmF5KSA9IGttYWxsb2NfZmxleCgqKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsXG4yODgzOlx0XHRcdFx0XHRcdFx0IEVJQV9NQVNLLCBHRlBfTk9GUyk7XG4yODg0Olx0XHRcdGlmICgqZWFfaW5vZGVfYXJyYXkgPT0gTlVMTClcbjI4ODU6XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjI4ODY6XHRcdFx0KCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgPSAwO1xuMjg4NzpcdFx0fSBlbHNlIGlmICgoKCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgXHUwMDI2IEVJQV9NQVNLKSA9PSBFSUFfTUFTSykge1xuMjg4ODpcdFx0XHQvKiBleHBhbmQgdGhlIGFycmF5IG9uY2UgYWxsIDE1ICYjNDM7IG4gKiAxNiBzbG90cyBhcmUgZnVsbCAqL1xuMjg4OTpcdFx0XHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqbmV3X2FycmF5ID0gTlVMTDtcbjI4OTA6XHRcbjI4OTE6XHRcdFx0bmV3X2FycmF5ID0ga21hbGxvY19mbGV4KCoqZWFfaW5vZGVfYXJyYXksIGlub2RlcyxcbjI4OTI6XHRcdFx0XHRcdFx0ICgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50ICYjNDM7IEVJQV9JTkNSLFxuMjg5MzpcdFx0XHRcdFx0XHQgR0ZQX05PRlMpO1xuMjg5NDpcdFx0XHRpZiAobmV3X2FycmF5ID09IE5VTEwpXG4yODk1Olx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4yODk2Olx0XHRcdG1lbWNweShuZXdfYXJyYXksICplYV9pbm9kZV9hcnJheSxcbjI4OTc6XHRcdFx0ICAgICAgIHN0cnVjdF9zaXplKCplYV9pbm9kZV9hcnJheSwgaW5vZGVzLFxuMjg5ODpcdFx0XHRcdFx0ICAgKCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQpKTtcbjI4OTk6XHRcdFx0a2ZyZWUoKmVhX2lub2RlX2FycmF5KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwNDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Mzk3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBmaXgsIGJ1dCB0aGUgaW1wbGljYXRpb25zIGFyZSBpbXBvcnRhbnQsIGVzcGVjaWFsbHkgaW4gYSBmaWxlIHN5c3RlbSBjb250ZXh0LiBUaGUgY29yZSBvZiBpdCBhZGRzIGBlcnJvciA9IDA7YCByaWdodCBiZWZvcmUgdGhlIGBnb3RvIHJldHJ5O2Agc3RhdGVtZW50IGluIGBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgaW5kZWVkIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCBhIGNydWNpYWwgb25lLiBXaXRob3V0IHJlc2V0dGluZyBgZXJyb3JgIHRvIHplcm8sIHRoZSBmdW5jdGlvbiBjb3VsZCBwb3RlbnRpYWxseSBwcm9wYWdhdGUgYSBwcmV2aW91cyBlcnJvciBjb2RlLiBUaGlzIGNvdWxkIGxlYWQgdG8gYSBjYXNjYWRpbmcgZmFpbHVyZSBmdXJ0aGVyIGRvd24gdGhlIGxpbmUsIG9yLCB3b3JzZSwgcmV0dXJuIGFuIGluY29ycmVjdCBlcnJvciBzdGF0ZS4KClRvIHByb3Blcmx5IGFzc2VzcyB0aGlzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHdpdGhpbiBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgLiBUaGUga2V5IGlzIGxvY2F0aW5nIHRoYXQgYHJldHJ5OmAgbGFiZWwgdG8gc2VlIHdoZXJlIHRoaXMgJiMzNDtnb3RvJiMzNDsgaXMgYWN0dWFsbHkgdGFraW5nIHVzLiBJcyBpdCB3aXRoaW4gYSBsb29wLCBhIGNvbmRpdGlvbmFsLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGNvbnRleHQgb2YgdGhlIHJldHJ5IGlzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIGltcGFjdC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgaWRlbnRpZnkgaG93IHRoZSBmdW5jdGlvbiBoYW5kbGVzIGVycm9ycyBpbiBnZW5lcmFsLiBPbmNlIEkmIzM5O3ZlIG1hcHBlZCB0aGlzIGluIG15IG1pbmQsIHRoZSBzaWduaWZpY2FuY2Ugb2Ygc2V0dGluZyBgZXJyb3JgIHRvIDAgd2lsbCBiZWNvbWUgY2xlYXIuIFVuZGVyc3RhbmRpbmcgdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGlzIGZ1bmN0aW9uIGlzIGNydWNpYWwgdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5IGFuZCBhdm9pZCBwb3RlbnRpYWwgZmlsZSBzeXN0ZW0gY29ycnVwdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwNDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQveGF0dHIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjc2MDpcdCAqIEV4cGFuZCBhbiBpbm9kZSBieSBuZXdfZXh0cmFfaXNpemUgYnl0ZXMgd2hlbiBFQXMgYXJlIHByZXNlbnQuXG4yNzYxOlx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJyb3IgbnVtYmVyIG9uIGZhaWx1cmUuXG4yNzYyOlx0ICovXG4yNzYzOlx0aW50IGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZXh0cmFfaXNpemUsXG4yNzY0Olx0XHRcdFx0ICAgICAgIHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUsIGhhbmRsZV90ICpoYW5kbGUpXG4yNzY1Olx0e1xuMjc2NjpcdFx0c3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfaGVhZGVyICpoZWFkZXI7XG4yNzY3Olx0XHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuMjc2ODpcdFx0c3RhdGljIHVuc2lnbmVkIGludCBtbnRfY291bnQ7XG4yNzY5Olx0XHRzaXplX3QgbWluX29mZnM7XG4yNzcwOlx0XHRzaXplX3QgaWZyZWUsIGJmcmVlO1xuMjc3MTpcdFx0aW50IHRvdGFsX2lubztcbjI3NzI6XHRcdHZvaWQgKmJhc2UsICplbmQ7XG4yNzczOlx0XHRpbnQgZXJyb3IgPSAwLCB0cmllZF9taW5fZXh0cmFfaXNpemUgPSAwO1xuMjc3NDpcdFx0aW50IHNfbWluX2V4dHJhX2lzaXplID0gbGUxNl90b19jcHUoc2JpLVx1MDAzZXNfZXMtXHUwMDNlc19taW5fZXh0cmFfaXNpemUpO1xuMjc3NTpcdFx0aW50IGlzaXplX2RpZmY7XHQvKiBIb3cgbXVjaCBkbyB3ZSBuZWVkIHRvIGdyb3cgaV9leHRyYV9pc2l6ZSAqL1xuMjc3NjpcdFxuMjc3NzpcdHJldHJ5OlxuMjc3ODpcdFx0aXNpemVfZGlmZiA9IG5ld19leHRyYV9pc2l6ZSAtIEVYVDRfSShpbm9kZSktXHUwMDNlaV9leHRyYV9pc2l6ZTtcbjI3Nzk6XHRcdGlmIChFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZXh0cmFfaXNpemUgXHUwMDNlPSBuZXdfZXh0cmFfaXNpemUpXG4yNzgwOlx0XHRcdHJldHVybiAwO1xuMjc4MTpcdFxuMjc4MjpcdFx0aGVhZGVyID0gSUhEUihpbm9kZSwgcmF3X2lub2RlKTtcbjI3ODM6XHRcbjI3ODQ6XHRcdC8qXG4yNzg1Olx0XHQgKiBDaGVjayBpZiBlbm91Z2ggZnJlZSBzcGFjZSBpcyBhdmFpbGFibGUgaW4gdGhlIGlub2RlIHRvIHNoaWZ0IHRoZVxuMjc4NjpcdFx0ICogZW50cmllcyBhaGVhZCBieSBuZXdfZXh0cmFfaXNpemUuXG4yNzg3Olx0XHQgKi9cbjI3ODg6XHRcbjI3ODk6XHRcdGJhc2UgPSBJRklSU1QoaGVhZGVyKTtcbjI3OTA6XHRcdGVuZCA9IElUQUlMKGlub2RlLCByYXdfaW5vZGUpO1xuMjc5MTpcdFx0bWluX29mZnMgPSBlbmQgLSBiYXNlO1xuMjc5MjpcdFx0dG90YWxfaW5vID0gc2l6ZW9mKHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2hlYWRlcikgJiM0Mzsgc2l6ZW9mKHUzMik7XG4yNzkzOlx0XG4yNzk0Olx0XHRpZnJlZSA9IGV4dDRfeGF0dHJfZnJlZV9zcGFjZShiYXNlLCBcdTAwMjZtaW5fb2ZmcywgYmFzZSwgXHUwMDI2dG90YWxfaW5vKTtcbjI3OTU6XHRcdGlmIChpZnJlZSBcdTAwM2U9IGlzaXplX2RpZmYpXG4yNzk2Olx0XHRcdGdvdG8gc2hpZnQ7XG4yNzk3Olx0XG4yNzk4Olx0XHQvKlxuMjc5OTpcdFx0ICogRW5vdWdoIGZyZWUgc3BhY2UgaXNuJiMzOTt0IGF2YWlsYWJsZSBpbiB0aGUgaW5vZGUsIGNoZWNrIGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDQ6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUwNAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgQnVnIGluIEV4dDQgWGF0dHIgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBleHQ0IGNvZGUsIGFuZCBJJiMzOTt2ZSBnb3QgYSBzY2VuYXJpbyBwbGF5aW5nIG91dCBpbiBteSBoZWFkLiBJZiBgZXJyb3JgIGlzbiYjMzk7dCBleHBsaWNpdGx5IHJlc2V0IHRvIHplcm8gYWZ0ZXIgYSBmYWlsdXJlIGFuZCB3ZSBlbmQgdXAganVtcGluZyBiYWNrIHRvIGByZXRyeTpgLCB0aGVyZSYjMzk7cyBhIHByb2JsZW0uIEF0IGByZXRyeTpgLCBgaXNpemVfZGlmZmAgaXMgcmVjb21wdXRlZCwgYW5kIGlmIHRoZSBhdmFpbGFibGUgc3BhY2UgaXMgc3VmZmljaWVudCwgaW5kaWNhdGVkIGJ5IGBpZnJlZSAmZ3Q7PSBpc2l6ZV9kaWZmYCwgd2UgYnJhbmNoIHRvIGBzaGlmdDpgLgoKTm93LCBhdCBgc2hpZnQ6YCwgdGhlIHZhbHVlIG9mIGBlcnJvcmAgaXMgb25seSB1cGRhdGVkIGlmIHRoZSBpbm9kZSBoYXMgaW5saW5lIGRhdGEuIElmIGl0ICpkb2VzbiYjMzk7dCogaGF2ZSBpbmxpbmUgZGF0YSwgd2hpY2ggaXMgdGhlIG1vcmUgY29tbW9uIHBhdGgsIHRoZSBjb2RlIGZhbGxzIHRocm91Z2ggdG8gYGNsZWFudXA6YC4gQW5kIGF0IGBjbGVhbnVwOmAsIGl0ICpyZXR1cm5zKiB0aGUgdmFsdWUgb2YgYGVycm9yYC4KClRoZSBrZXkgaXNzdWUgaXMgdGhpczogSWYgdGhlIGluaXRpYWwgYGVycm9yYCB3YXMgYC1FTk9TUENgLCBiZWNhdXNlIGBleHQ0X3hhdHRyX21ha2VfaW5vZGVfc3BhY2VgIGZhaWxlZCwgdGhhdCBgLUVOT1NQQ2AgZ2V0cyBjYXJyaWVkIGFsbCB0aGUgd2F5IHRocm91Z2gsIGV2ZW4gdGhvdWdoIHRoZSBzaGlmdGluZyBwcm9jZXNzIGl0c2VsZiBtaWdodCBoYXZlIGJlZW4gZW50aXJlbHkgc3VjY2Vzc2Z1bCEgSXQgd291bGQgcmV0dXJuIGAtRU5PU1BDYCBldmVuIHRob3VnaCBpdCBzdWNjZXNzZnVsbHkgc2hpZnRlZCBlbnRyaWVzIGFuZCBmaXhlZCB0aGUgcHJvYmxlbSEKCldhaXQsIGxldCBtZSB3YWxrIHRocm91Z2ggaXQgYWdhaW4uLi4gYC1FTk9TUENgIGNhdXNlcyBhIGp1bXAgYmFjayB0byByZXRyeSwgYW5kIHRoZW4gaWYgdGhlIHNwYWNlIGhhcyBiZWVuIGZyZWVkIHdlIGhpdCBzaGlmdCwgdGhlbiBpdCByZXR1cm5zIGBlcnJvcmAgd2hpY2ggaXMgYC1FTk9TUENgLiBUaGF0JiMzOTtzIGl0LCBpdCYjMzk7cyByZXR1cm5pbmcgYW4gZXJyb3IgY29kZSBpbmRpY2F0aW5nIHRoZSBzcGFjZSBpcyBmdWxsLCBldmVuIGlmIHRoZSBlcnJvciBjb25kaXRpb24gaGFzIGJlZW4gcmVzb2x2ZWQhIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBidWcuCgpTbywgdGhlIGZpeCBpcyBzdHJhaWdodGZvcndhcmQ6IHdlIG5lZWQgdG8gZXhwbGljaXRseSBzZXQgYGVycm9yID0gMDtgIGJlZm9yZSB0aGUganVtcCB0byBgcmV0cnk6YC4gVGhhdCBlbnN1cmVzIGEgc3VjY2Vzc2Z1bCBvcGVyYXRpb24gcmV0dXJucyBhIHN1Y2Nlc3MgY29kZS4KClJpZ2h0LCBsZXQmIzM5O3MgbWFrZSBzdXJlIHRoaXMgZml4IGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQuIE5lZWRzIEVYVDRfRlMuIE5lZWQgdG8gY2hlY2sgYGZzL2V4dDQvS2NvbmZpZ2AgdG8gc2VlIHRoZSBjb25maWcgb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDQ6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEVYVDRfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9leHQ0L0tjb25maWc6Mjpjb25maWcgRVhUNF9GU1xuZnMvZXh0NC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVwmIzM0O1xuLS1cbmZzL2V4dDQvS2NvbmZpZz0zNT1jb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcbi0tXG5mcy9leHQ0L0tjb25maWctNDUtXG5mcy9leHQ0L0tjb25maWc6NDY6Y29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMXG5mcy9leHQ0L0tjb25maWctNDctXHRib29sIFwmIzM0O0V4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWctNTUtXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcbmZzL2V4dDQvS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7RXh0NCBTZWN1cml0eSBMYWJlbHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDQ6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ1MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzLCBkaXN0aWxsZWQgaW50byBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5IGFzIHlvdSByZXF1ZXN0ZWQsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSB3ZWxsLXZlcnNlZCBpbiBmaWxlc3lzdGVtcyBhbmQga2VybmVsIGludGVybmFscy4KCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBFWFQ0IFhBVFRScyoqCgpSaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgRXh0ZW5kZWQgQXR0cmlidXRlcyAoeGF0dHJzKSB3aXRoaW4gdGhlIEVYVDQgZmlsZXN5c3RlbS4gVGhlIGltcGxpY2F0aW9uIGlzIEVYVDQgaXMgdGhlIHByaW1hcnkgZm9jdXMsIHdoaWNoIGlzIG5vIHN1cnByaXNlIGdpdmVuIGl0cyBwcmV2YWxlbmNlLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IGFyZSB0aGVyZSBvdGhlciBmaWxlIHN5c3RlbXMgYXQgcGxheSBoZXJlPyBBcmUgdGhlcmUgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBlaXRoZXIgY29tcGlsZS10aW1lIG9yIHJ1bnRpbWUsIHRoYXQgY291bGQgaW5mbHVlbmNlIGhvdyB0aGVzZSB4YXR0cnMgYmVoYXZlIG9yIGFyZSBldmVuIGVuYWJsZWQ/CgpNeSBuZXh0IHBvaW50IGlzIHRvIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBjb2RlIGxvY2F0aW9uLiBJIHJlbWVtYmVyIHRoYXQgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gZm9yIHhhdHRycyBpbiBFWFQ0IHJlc2lkZXMgd2l0aGluIGBmcy9leHQ0L3hhdHRyLmNgLiBTbywgSSYjMzk7bGwgc3RhcnQgdGhlcmUuCgpCdXQgYmVmb3JlIGRpdmluZyBkZWVwIGludG8gdGhlIHNvdXJjZSBjb2RlLCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIHRoYXQgYHhhdHRyLmNgIGZpbGUgaXMgY29tcGlsZWQgaW4gY29uZGl0aW9uYWxseS4gSXMgdGhpcyBmdW5jdGlvbmFsaXR5IGEgbW9kdWxlLCBvciBpcyBpdCBjb21waWxlZCBpbiBkZXBlbmRpbmcgb24gc29tZSBLY29uZmlnIG9wdGlvbj8gS25vd2luZyB0aGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGl0cyBhdmFpbGFiaWxpdHkgYWNyb3NzIHZhcmlvdXMga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFuZCBkaXN0cmlidXRpb25zLiBJIHNob3VsZCBwcm9iYWJseSBxdWlja2x5IGNoZWNrIGlmIHRoZXJlIGlzIGEgYEtjb25maWdgIGZvciB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwNDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4YXR0ci5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L01ha2VmaWxlPTg9ZXh0NC15XHQ6PSBiYWxsb2MubyBiaXRtYXAubyBibG9ja192YWxpZGl0eS5vIGRpci5vIGV4dDRfamJkMi5vIGV4dGVudHMubyBcXFxuLS1cbmZzL2V4dDQvTWFrZWZpbGUtMTEtXHRcdG1tcC5vIG1vdmVfZXh0ZW50Lm8gbmFtZWkubyBwYWdlLWlvLm8gcmVhZHBhZ2UubyByZXNpemUubyBcXFxuZnMvZXh0NC9NYWtlZmlsZToxMjpcdFx0c3VwZXIubyBzeW1saW5rLm8gc3lzZnMubyB4YXR0ci5vIHhhdHRyX2h1cmQubyB4YXR0cl90cnVzdGVkLm8gXFxcbmZzL2V4dDQvTWFrZWZpbGUtMTMtXHRcdHhhdHRyX3VzZXIubyBmYXN0X2NvbW1pdC5vIG9ycGhhbi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDA0OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NDAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIEVYVDRfRlMgYW5kIEV4cGFuZGVkIGlfc2l6ZSoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBFWFQ0IHN0dWZmIGFnYWluLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSBmYWN0IHRoYXQsIHByZXR0eSBtdWNoIGFsd2F5cywgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHN5c3RlbSBjb21waWxlZCB3aXRoIGBFWFQ0X0ZTYC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUsIHRoZSBmb3VuZGF0aW9uLiBCdXQgSSYjMzk7bSBhbHNvIHBvbmRlcmluZyBob3cgYGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhYCBmaXRzIGludG8gdGhlIHBpY3R1cmUuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGZvciBleHBhbmRpbmcgdGhlIGlub2RlJiMzOTtzIGV4dHJhIGlfc2l6ZSBmaWVsZCwgYW5kIEkgbmVlZCB0byBjb25zaWRlciBpdHMgdXNhZ2UgY29udGV4dC4gSSBoYXZlIHRvIGRyaWxsIGRvd24gZnVydGhlcjsgaXMgaXQgY2FsbGVkIGp1c3QgZ2VuZXJhbGx5LCBvciBmcm9tIHNvbWUgc3BlY2lmaWMgYXJlYSBvZiBjb2RlIHRoYXQgSSBzaG91bGQgYmUga2V5aW5nIG9uPyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIGNoYWluIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDQ6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2lub2RlLmM9NjQzOT1zdGF0aWMgaW50IF9fZXh0NF9leHBhbmRfZXh0cmFfaXNpemUoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2lub2RlLmMtNjQ4NS1cdC8qIHRyeSB0byBleHBhbmQgd2l0aCBFQXMgcHJlc2VudCAqL1xuZnMvZXh0NC9pbm9kZS5jOjY0ODY6XHRlcnJvciA9IGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhKGlub2RlLCBuZXdfZXh0cmFfaXNpemUsXG5mcy9leHQ0L2lub2RlLmMtNjQ4Ny1cdFx0XHRcdFx0ICAgcmF3X2lub2RlLCBoYW5kbGUpO1xuLS1cbmZzL2V4dDQveGF0dHIuYz0yNjk0PXN0YXRpYyBpbnQgZXh0NF94YXR0cl9tYWtlX2lub2RlX3NwYWNlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC94YXR0ci5jLTI3NjItICovXG5mcy9leHQ0L3hhdHRyLmM6Mjc2MzppbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSxcbmZzL2V4dDQveGF0dHIuYy0yNzY0LVx0XHRcdCAgICAgICBzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlLCBoYW5kbGVfdCAqaGFuZGxlKVxuLS1cbmZzL2V4dDQveGF0dHIuaD0xOTI9ZXh0ZXJuIHZvaWQgZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICphcnJheSk7XG5mcy9leHQ0L3hhdHRyLmgtMTkzLVxuZnMvZXh0NC94YXR0ci5oOjE5NDpleHRlcm4gaW50IGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZXh0cmFfaXNpemUsXG5mcy9leHQ0L3hhdHRyLmgtMTk1LVx0XHRcdCAgICBzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlLCBoYW5kbGVfdCAqaGFuZGxlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDQ6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU5MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgc2Vhc29uZWQgZXhwZXJ0OgoKKipBbmFseXppbmcgdGhlIGBfX2V4dDRfZXhwYW5kX2V4dHJhX2lzaXplYCBGdW5jdGlvbioqCgpSaWdodCwgc28gdGhpcyBjYWxsIG9yaWdpbmF0ZXMgd2l0aGluIHRoZSBgX19leHQ0X2V4cGFuZF9leHRyYV9pc2l6ZWAgZnVuY3Rpb24sIGZvdW5kIGluIHRoZSBgZnMvZXh0NC9pbm9kZS5jYCBmaWxlLiBJbnRlcmVzdGluZy4gTXkgaW5pdGlhbCBmb2N1cyBpcyBuYXR1cmFsbHkgZHJhd24gdG8gYF9fZXh0NF9leHBhbmRfZXh0cmFfaXNpemVgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGFjY29tcGxpc2guIEdpdmVuIHRoZSBuYW1lLCBpdCYjMzk7cyBjbGVhciB0aGlzIGRlYWxzIHdpdGggZXhwYW5kaW5nIHRoZSAmIzM0O2V4dHJhIGlfc2l6ZSYjMzQ7IGF0dHJpYnV0ZSB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbS4gSSBpbW1lZGlhdGVseSB3YW50IHRvIGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiwgYW5kIGV2YWx1YXRlIGl0cyBwdXJwb3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwNDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2V4dDRfZXhwYW5kX2V4dHJhX2lzaXplJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9pbm9kZS5jPTY0MTU9ZXh0NF9yZXNlcnZlX2lub2RlX3dyaXRlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTY0MzgtXG5mcy9leHQ0L2lub2RlLmM6NjQzOTpzdGF0aWMgaW50IF9fZXh0NF9leHBhbmRfZXh0cmFfaXNpemUoc3RydWN0IGlub2RlICppbm9kZSxcbmZzL2V4dDQvaW5vZGUuYy02NDQwLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgbmV3X2V4dHJhX2lzaXplLFxuLS1cbmZzL2V4dDQvaW5vZGUuYz02NTAyPXN0YXRpYyBpbnQgZXh0NF90cnlfdG9fZXhwYW5kX2V4dHJhX2lzaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTY1MjgtXG5mcy9leHQ0L2lub2RlLmM6NjUyOTpcdGVycm9yID0gX19leHQ0X2V4cGFuZF9leHRyYV9pc2l6ZShpbm9kZSwgbmV3X2V4dHJhX2lzaXplLCBcdTAwMjZpbG9jLFxuZnMvZXh0NC9pbm9kZS5jLTY1MzAtXHRcdFx0XHRcdCAgaGFuZGxlLCBcdTAwMjZub19leHBhbmQpO1xuLS1cbmZzL2V4dDQvaW5vZGUuYz02NTM2PWludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvaW5vZGUuYy02NTY2LVxuZnMvZXh0NC9pbm9kZS5jOjY1Njc6XHRlcnJvciA9IF9fZXh0NF9leHBhbmRfZXh0cmFfaXNpemUoaW5vZGUsIG5ld19leHRyYV9pc2l6ZSwgaWxvYyxcbmZzL2V4dDQvaW5vZGUuYy02NTY4LVx0XHRcdFx0XHQgIGhhbmRsZSwgXHUwMDI2bm9fZXhwYW5kKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDQ6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE4MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGaXhpbmcgYSBTdWJ0bGUgWGF0dHIgRXhwYW5zaW9uIEJ1ZyBpbiBleHQ0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBzb21lIGNvZGUgcmVsYXRlZCB0byBleHQ0JiMzOTtzIGV4dGVuZGVkIGF0dHJpYnV0ZSAoeGF0dHIpIGhhbmRsaW5nLiBTcGVjaWZpY2FsbHksIG15IGZvY3VzIGlzIG9uIGhvdyBpdCBoYW5kbGVzIGV4cGFuZGluZyB0aGUgZXh0cmEgaW5vZGUgc2l6ZS4gSSBzZWUgdGhhdCBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVgIGFuZCBgZXh0NF90cnlfdG9fZXhwYW5kX2V4dHJhX2lzaXplYCBhcmUgdGhlIGVudHJ5IHBvaW50cyBoZXJlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgY29ycmVjdGlvbiB3aXRoaW4gdGhlIGV4dDQgeGF0dHIgc3lzdGVtLgoKVGhlIGNvcmUgb2YgdGhlIGlzc3VlIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYWAuIEl0IGxvb2tzIGxpa2UgdGhlcmUmIzM5O3MgYSBidWcgd2hlcmUgdGhpcyBmdW5jdGlvbiBjb3VsZCByZXR1cm4gYC1FTk9TUENgLCBldmVuIGFmdGVyIGl0IGFjdHVhbGx5ICpkaWQqIG1hbmFnZSB0byBleHBhbmQgdGhlIGV4dHJhIGlzaXplIHN1Y2Nlc3NmdWxseS4gVGhlIHByb2JsZW0gYm9pbHMgZG93biB0byBhbiBlcnJvciBjb2RlIG5vdCBiZWluZyBwcm9wZXJseSByZXNldCBiZWZvcmUgYSBgcmV0cnlgIGp1bXAuIFRoaXMgY2FuIGxlYWQgdG8gdGhlIG1pc2xlYWRpbmcgZXJyb3IgbWVzc2FnZS4KCkkmIzM5O20ga2V5aW5nIGluIG9uIGBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYWAgYXMgdGhlIHByaW1hcnkgZnVuY3Rpb24gaW52b2x2ZWQgaW4gdGhpcyBwYXJ0aWN1bGFyIGZpeC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyBhbmQgY29uZmlybSB0aGUgZXhhY3QgcGF0aCB0aGUgYnVnIHRha2VzLgoKSSBzaG91bGQgYWxzbyBxdWlja2x5IGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIGBDT05GSUdfRVhUNF9GU2AsIG9mIGNvdXJzZSwgaXMgdGhlIHJlbGV2YW50IGZpbGVzeXN0ZW0gY29uZmlndXJhdGlvbi4gQnV0IGlzIGBDT05GSUdfRVhUNF9GU19YQVRUUmAgYWxzbyByZXF1aXJlZD8gTGV0IG1lIHJ1biBhIHF1aWNrIGdyZXAgYW5kIGRvdWJsZS1jaGVjayB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnkgZGVwZW5kZW5jaWVzIGluIHRoZSBidWlsZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDQ6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfRVhUNF9GU19YQVRUUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDQ6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc3MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkRlbHZpbmcgRGVlcGVyIGludG8gZXh0NCB4YXR0cnMqKgoKUmlnaHQsIHNvLCB0aGUgcXVlc3Rpb24gb2YgZXh0NCBleHRlbmRlZCBhdHRyaWJ1dGVzLi4uSSAqa25vdyogSSYjMzk7bSBub3QgY3JhenksIGV4dDQgeGF0dHJzIGFyZSBiYXNpY2FsbHkgYWx3YXlzIGVuYWJsZWQsIGFyZW4mIzM5O3QgdGhleT8gSXQmIzM5O3Mgbm90IGEgY29uZmlndXJhYmxlIG9wdGlvbiBsaWtlIHdpdGggc29tZSBvdGhlciBmaWxlc3lzdGVtcy4gTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgbXkgbWVudGFsIG1vZGVsIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBhY2N1cmF0ZS4gSSBuZWVkIHRvIHJldmlzaXQgdGhhdCBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgIGZ1bmN0aW9uLiBHb3R0YSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaGFuZGxpbmcgb2YgdGhlIGV4dHJhIGlub2RlIHNpemUgZm9yIHN0b3JpbmcgZXh0ZW5kZWQgYXR0cmlidXRlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJ4oCZbSBub3QgbWlzc2luZyBhbnl0aGluZyBjcnVjaWFsIGFib3V0IGhvdyBpdOKAmXMgbWFuYWdlZCBkdXJpbmcgaW5vZGUgYWxsb2NhdGlvbiBhbmQgZXhwYW5zaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwNDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQveGF0dHIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjgzMDpcdFx0fSBlbHNlIHtcbjI4MzE6XHRcdFx0YmZyZWUgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuMjgzMjpcdFx0fVxuMjgzMzpcdFxuMjgzNDpcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX21ha2VfaW5vZGVfc3BhY2UoaGFuZGxlLCBpbm9kZSwgcmF3X2lub2RlLFxuMjgzNTpcdFx0XHRcdFx0XHQgICAgaXNpemVfZGlmZiwgaWZyZWUsIGJmcmVlLFxuMjgzNjpcdFx0XHRcdFx0XHQgICAgXHUwMDI2dG90YWxfaW5vKTtcbjI4Mzc6XHRcdGlmIChlcnJvcikge1xuMjgzODpcdFx0XHRpZiAoZXJyb3IgPT0gLUVOT1NQQyBcdTAwMjZcdTAwMjYgIXRyaWVkX21pbl9leHRyYV9pc2l6ZSBcdTAwMjZcdTAwMjZcbjI4Mzk6XHRcdFx0ICAgIHNfbWluX2V4dHJhX2lzaXplKSB7XG4yODQwOlx0XHRcdFx0dHJpZWRfbWluX2V4dHJhX2lzaXplJiM0MzsmIzQzOztcbjI4NDE6XHRcdFx0XHRuZXdfZXh0cmFfaXNpemUgPSBzX21pbl9leHRyYV9pc2l6ZTtcbjI4NDI6XHRcdFx0XHRlcnJvciA9IDA7XG4yODQzOlx0XHRcdFx0Z290byByZXRyeTtcbjI4NDQ6XHRcdFx0fVxuMjg0NTpcdFx0XHRnb3RvIGNsZWFudXA7XG4yODQ2Olx0XHR9XG4yODQ3Olx0c2hpZnQ6XG4yODQ4Olx0XHQvKiBBZGp1c3QgdGhlIG9mZnNldHMgYW5kIHNoaWZ0IHRoZSByZW1haW5pbmcgZW50cmllcyBhaGVhZCAqL1xuMjg0OTpcdFx0ZXh0NF94YXR0cl9zaGlmdF9lbnRyaWVzKElGSVJTVChoZWFkZXIpLCBFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZXh0cmFfaXNpemVcbjI4NTA6XHRcdFx0XHQtIG5ld19leHRyYV9pc2l6ZSwgKHZvaWQgKilyYXdfaW5vZGUgJiM0MztcbjI4NTE6XHRcdFx0XHRFWFQ0X0dPT0RfT0xEX0lOT0RFX1NJWkUgJiM0MzsgbmV3X2V4dHJhX2lzaXplLFxuMjg1MjpcdFx0XHRcdCh2b2lkICopaGVhZGVyLCB0b3RhbF9pbm8pO1xuMjg1MzpcdFx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2V4dHJhX2lzaXplID0gbmV3X2V4dHJhX2lzaXplO1xuMjg1NDpcdFxuMjg1NTpcdFx0aWYgKGV4dDRfaGFzX2lubGluZV9kYXRhKGlub2RlKSlcbjI4NTY6XHRcdFx0ZXJyb3IgPSBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKGlub2RlKTtcbjI4NTc6XHRcbjI4NTg6XHRjbGVhbnVwOlxuMjg1OTpcdFx0aWYgKGVycm9yIFx1MDAyNlx1MDAyNiAobW50X2NvdW50ICE9IGxlMTZfdG9fY3B1KHNiaS1cdTAwM2VzX2VzLVx1MDAzZXNfbW50X2NvdW50KSkpIHtcbjI4NjA6XHRcdFx0ZXh0NF93YXJuaW5nKGlub2RlLVx1MDAzZWlfc2IsIFwmIzM0O1VuYWJsZSB0byBleHBhbmQgaW5vZGUgJWxsdS4gRGVsZXRlIHNvbWUgRUFzIG9yIHJ1biBlMmZzY2suXCYjMzQ7LFxuMjg2MTpcdFx0XHRcdCAgICAgaW5vZGUtXHUwMDNlaV9pbm8pO1xuMjg2MjpcdFx0XHRtbnRfY291bnQgPSBsZTE2X3RvX2NwdShzYmktXHUwMDNlc19lcy1cdTAwM2VzX21udF9jb3VudCk7XG4yODYzOlx0XHR9XG4yODY0Olx0XHRyZXR1cm4gZXJyb3I7XG4yODY1Olx0fVxuMjg2NjpcdFxuMjg2NzpcdCNkZWZpbmUgRUlBX0lOQ1IgMTYgLyogbXVzdCBiZSAyXm4gKi9cbjI4Njg6XHQjZGVmaW5lIEVJQV9NQVNLIChFSUFfSU5DUiAtIDEpXG4yODY5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDA0OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2OTAKCQkJCQkJCW91dHB1dDogMTMxCgkJCQkJCQl0aG91Z2h0czogMTM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGV4dDQgQnVnIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBleGFtaW5lZCB0aGlzIHBhdGNoLCBhbmQgSSYjMzk7bSBjb25maWRlbnQgaW4gc2F5aW5nIHRoYXQgdGhpcyBpcyBpbmRlZWQgYSBmdW5jdGlvbmFsIGJ1ZyBmaXggd2l0aGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIEkgY2FuIHNlZSB0aGUgcmVhc29uaW5nIGNsZWFybHkuIEl0JiMzOTtzIGFib3V0IGhvdyBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgIGhhbmRsZXMgdGhlIHJldHVybiB2YWx1ZSBhbmQgcG90ZW50aWFsIGVycm9ycy4gU3BlY2lmaWNhbGx5LCB0aGUgY29uY2VybiBpcyB0aGF0IGFuIGAtRU5PU1BDYCBjb3VsZCBiZSByZXR1cm5lZCBldmVuIGFmdGVyIGEgc3VjY2Vzc2Z1bCBleHBhbnNpb24gb2YgdGhlIGV4dHJhIGlzaXplLCBkdWUgdG8gYW4gdW4tcmVzZXQgYGVycm9yYCB2YXJpYWJsZS4gVGhpcyBtZWFucyBhIHN1YnNlcXVlbnQgYXR0ZW1wdCBtaWdodCBub3QgYmUgdW5kZXJ0YWtlbiBkZXNwaXRlIHNwYWNlIGJlaW5nIGF2YWlsYWJsZS4KCkdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIHRoaXMgdG8gbWFuaWZlc3QgYXMgZGF0YSBjb3JydXB0aW9uIG9yIHNwdXJpb3VzIHNwYWNlIGV4aGF1c3Rpb24sIEkmIzM5O20gbWFya2luZyB0aGlzIGFzIGhpZ2hseSBmdXp6YWJsZS4gSSYjMzk7bGwgc2V0IGBXb3J0aEZ1enppbmdgIHRvIGB0cnVlYC4KCkkmIzM5O2xsIGZvY3VzIHRoZSBmdXp6aW5nIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGlzIHNwZWNpZmljIGlzc3VlOiBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgIGFuZCBgZXh0NF94YXR0cl9tYWtlX2lub2RlX3NwYWNlYC4gVGhlc2UgYXJlIHRoZSBrZXkgYXJlYXMgd2hlcmUgdGhpcyBidWcgaXMgbGlrZWx5IHRvIGJlIHRyaWdnZXJlZC4gSSBhbHNvIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGBFWFQ0X0ZTYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBlbmFibGVkIGZvciB0aGUgZnV6emluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIGxvZ2ljLCBzbyBJIG5lZWQgdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDA0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9tYWtlX2lub2RlX3NwYWNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGV4dDQgd2hlcmUgYGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhYCBjb3VsZCByZXR1cm4gYC1FTk9TUENgIGV2ZW4gd2hlbiBpdCBzdWNjZXNzZnVsbHkgZXhwYW5kZWQgdGhlIGV4dHJhIGlzaXplLCBiZWNhdXNlIGBlcnJvcmAgd2FzbiYjMzk7dCByZXNldCB0byAwIGJlZm9yZSBqdW1waW5nIHRvIGByZXRyeWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9tYWtlX2lub2RlX3NwYWNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGV4dDQgd2hlcmUgYGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhYCBjb3VsZCByZXR1cm4gYC1FTk9TUENgIGV2ZW4gd2hlbiBpdCBzdWNjZXNzZnVsbHkgZXhwYW5kZWQgdGhlIGV4dHJhIGlzaXplLCBiZWNhdXNlIGBlcnJvcmAgd2FzbiYjMzk7dCByZXNldCB0byAwIGJlZm9yZSBqdW1waW5nIHRvIGByZXRyeWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDlUMDQ6MTg6NTUuNTEwNTI1NjgyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU5NzE1NTg2NjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYVwiLFxuICAgIFwiZXh0NF94YXR0cl9tYWtlX2lub2RlX3NwYWNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gZXh0NCB3aGVyZSBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgIGNvdWxkIHJldHVybiBgLUVOT1NQQ2AgZXZlbiB3aGVuIGl0IHN1Y2Nlc3NmdWxseSBleHBhbmRlZCB0aGUgZXh0cmEgaXNpemUsIGJlY2F1c2UgYGVycm9yYCB3YXNuJ3QgcmVzZXQgdG8gMCBiZWZvcmUganVtcGluZyB0byBgcmV0cnlgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDQ6MTg6NTUuNTEwNTMwNDgyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzkxMzkwMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2YzVmZDkwNWI0OTNlZjI0YWQ2NGU0ZjI4NWFiNjhhYjU5NjMzMGI1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDkgMDQ6MTg6NTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5jIGIvZnMvZXh0NC94YXR0ci5jXFxuaW5kZXggOTgyYTFmODMxZTIyODIuLjlkYTVkZmNlYTdiODZiIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQveGF0dHIuY1xcbisrKyBiL2ZzL2V4dDQveGF0dHIuY1xcbkBAIC0yODM5LDYgKzI4MzksNyBAQCBpbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSxcXG4gXFx0XFx0ICAgIHNfbWluX2V4dHJhX2lzaXplKSB7XFxuIFxcdFxcdFxcdHRyaWVkX21pbl9leHRyYV9pc2l6ZSsrO1xcbiBcXHRcXHRcXHRuZXdfZXh0cmFfaXNpemUgPSBzX21pbl9leHRyYV9pc2l6ZTtcXG4rXFx0XFx0XFx0ZXJyb3IgPSAwO1xcbiBcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbiBcXHRcXHR9XFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDQ6MTg6NTUuOTUwMzQ0OTQ1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNTkyNzU3NTgyOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhXCIsXG4gICAgXCJleHQ0X3hhdHRyX21ha2VfaW5vZGVfc3BhY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBleHQ0IHdoZXJlIGBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYWAgY291bGQgcmV0dXJuIGAtRU5PU1BDYCBldmVuIHdoZW4gaXQgc3VjY2Vzc2Z1bGx5IGV4cGFuZGVkIHRoZSBleHRyYSBpc2l6ZSwgYmVjYXVzZSBgZXJyb3JgIHdhc24ndCByZXNldCB0byAwIGJlZm9yZSBqdW1waW5nIHRvIGByZXRyeWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZjNWZkOTA1YjQ5M2VmMjRhZDY0ZTRmMjg1YWI2OGFiNTk2MzMwYjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCA5IDA0OjE4OjU0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5jIGIvZnMvZXh0NC94YXR0ci5jXG5pbmRleCA5ODJhMWY4MzFlMjI4Mi4uOWRhNWRmY2VhN2I4NmIgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3hhdHRyLmNcbisrKyBiL2ZzL2V4dDQveGF0dHIuY1xuQEAgLTI4MzksNiArMjgzOSw3IEBAIGludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxuIFx0XHQgICAgc19taW5fZXh0cmFfaXNpemUpIHtcbiBcdFx0XHR0cmllZF9taW5fZXh0cmFfaXNpemUrKztcbiBcdFx0XHRuZXdfZXh0cmFfaXNpemUgPSBzX21pbl9leHRyYV9pc2l6ZTtcbitcdFx0XHRlcnJvciA9IDA7XG4gXHRcdFx0Z290byByZXRyeTtcbiBcdFx0fVxuIFx0XHRnb3RvIGNsZWFudXA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwNDoxODo1NS45NTAzNDYwNjVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTE2MjI4MDQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFByb3Bvc2VkIEV4dDQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZnMvZXh0NC94YXR0ci5jYC4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHRoZSBjaGFuZ2UgaXMgaW5zZXJ0aW5nIGBlcnJvciA9IDA7YCByaWdodCBiZWZvcmUgdGhlIGBnb3RvIHJldHJ5O2AgbGFiZWwgd2l0aGluIHRoZSBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyB3YXMgYWRkZWQgYW5kIHdoYXQgcHJvYmxlbSBpdCdzIGFkZHJlc3NpbmcuIFRoZSBvYnZpb3VzIG5leHQgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYWAgZnVuY3Rpb24gaXRzZWxmIGFuZCBzZWUgd2hhdCdzIGdvaW5nIG9uIHdpdGhpbiB0aGF0IGNvZGUgYmxvY2suIFRoaXMgbG9va3MgbGlrZSBhIHBvdGVudGlhbCBlZGdlIGNhc2UgZml4LCBwZXJoYXBzIHJlbGF0ZWQgdG8gZXJyb3IgaGFuZGxpbmcgb3IgcmVzb3VyY2UgbWFuYWdlbWVudCBkdXJpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIG9wZXJhdGlvbnMuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgY29udHJvbCBmbG93IGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoYXQgYHJldHJ5YCBsYWJlbCB0byBmdWxseSBncmFzcCB0aGUgaW50ZW50IG9mIHRoaXMgc2VlbWluZ2x5IG1pbm9yIGFkZGl0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODIxLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwNDoxOToxNS4xMTI2Mjg1MDhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkwNzI0MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC94YXR0ci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQveGF0dHIuYz0yNjk0PXN0YXRpYyBpbnQgZXh0NF94YXR0cl9tYWtlX2lub2RlX3NwYWNlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjc2Mi0gKi9cXG5mcy9leHQ0L3hhdHRyLmM6Mjc2MzppbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSxcXG5mcy9leHQ0L3hhdHRyLmMtMjc2NC1cXHRcXHRcXHQgICAgICAgc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDQ6MTk6MTUuMTgxNzAzNDY2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjMzODg2NDc3NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknbSB0aGlua2luZyBhYm91dCBpdCwgZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgYW4gZXhwZXJ0IGluIGZpbGUgc3lzdGVtczpcblxuKipEZWNvbnN0cnVjdGluZyBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgKipcblxuQWxyaWdodCwgSSdtIGhlYWRpbmcgb3ZlciB0byBgZnMvZXh0NC94YXR0ci5jYCBhbmQgZm9jdXNpbmcgb24gbGluZSAyODM5IGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBmdW5jdGlvbiBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgZnVuY3Rpb24gKm11c3QqIGJlIGRlYWxpbmcgd2l0aCB0aGUgYWxsb2NhdGlvbiBhbmQgZXhwYW5zaW9uIG9mIEV4dGVuZGVkIEF0dHJpYnV0ZSAoRUEpIHNwYWNlIHdpdGhpbiBhbiBleHQ0IGZpbGVzeXN0ZW0uIFRoZSBuYW1lIGdpdmVzIHRoYXQgYXdheSwgYnV0IEkgd2FudCB0byBjb25maXJtIHdoYXQgaXQncyBzcGVjaWZpY2FsbHkgZG9pbmcgcmVsYXRlZCB0byBpbmNyZWFzaW5nIHRoZSBpbi1pbm9kZSBzaXplLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXRhaWxzIG9mIHRoZSBpbm9kZSBkYXRhIHN0cnVjdHVyZSwgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3ksIGhvdyBFQXMgYXJlIHN0b3JlZCwgYW5kIHRoZSBwb3RlbnRpYWwgY29uc3RyYWludHMgdGhhdCBhcmUgYmVpbmcgbWFuYWdlZCBoZXJlLiBUaGluZ3MgdG8gaW1tZWRpYXRlbHkgY29uc2lkZXI6IGhvdyBpdCBoYW5kbGVzIHRoZSBpX2V4dHJhX2lzaXplIGZpZWxkIG9mIHRoZSBpbm9kZSwgdGhlIHBvdGVudGlhbCBmb3IgZnJhZ21lbnRhdGlvbiBvciBuZWVkaW5nIHRvIG1vdmUgZGF0YSBhcm91bmQsIGVycm9yIGNvbmRpdGlvbnMgc3VjaCBhcyBzcGFjZSBleGhhdXN0aW9uIG9yIGNvcnJ1cHRpb24sIGFuZCBhbnkgbG9ja2luZyBtZWNoYW5pc21zIHVzZWQgZm9yIHN5bmNocm9uaXphdGlvbiB0byBtYWludGFpbiBjb25zaXN0ZW5jeSBvZiB0aGUgZmlsZSBzeXN0ZW0uIEkgYWxzbyBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBvc3NpYmxlIGZhaWx1cmUgc3RhdGVzLCBmb3IgZXhhbXBsZSwgcnVubmluZyBvdXQgb2Ygc3BhY2UuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIGZ1bmN0aW9uLiBJIGV4cGVjdCBpdCdzIGdvaW5nIHRvIGluY2x1ZGUgc29tZSBjaGVja3MgZm9yIHN1ZmZpY2llbnQgc3BhY2UsIHBlcmhhcHMgc29tZSBibG9jayBhbGxvY2F0aW9uIGxvZ2ljIGlmIGl0J3MgZXhwYW5kaW5nIGJleW9uZCB0aGUgaW5pdGlhbCBpbi1pbm9kZSBhcmVhLCBhbmQgcHJvYmFibHkgc29tZSB3cml0aW5nIHRvIHRoZSBzdXBlcmJsb2NrIG9yIGlub2RlIGl0c2VsZiB0byByZWZsZWN0IHRoZSBjaGFuZ2VzLiBVbHRpbWF0ZWx5LCBJJ20gbG9va2luZyBmb3IgdGhlIG5pdHR5LWdyaXR0eSBvZiBob3cgaXQgZXhwYW5kcyB0aGUgYXZhaWxhYmxlIHNwYWNlIGZvciBFQXMgaW4gdGhlIGlub2RlLiBMZXQncyBzZWUgaG93IGl0IHdvcmtzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjY1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDQ6MTk6MzguNTcwMzUzMzk1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ0OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQveGF0dHIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODAwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjgwMDpcXHRcXHQgKiBFQSBibG9jayBjYW4gaG9sZCBuZXdfZXh0cmFfaXNpemUgYnl0ZXMuXFxuMjgwMTpcXHRcXHQgKi9cXG4yODAyOlxcdFxcdGlmIChFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2ZpbGVfYWNsKSB7XFxuMjgwMzpcXHRcXHRcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xcbjI4MDQ6XFx0XFxuMjgwNTpcXHRcXHRcXHRiaCA9IGV4dDRfc2JfYnJlYWQoaW5vZGUtXFx1MDAzZWlfc2IsIEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZmlsZV9hY2wsIFJFUV9QUklPKTtcXG4yODA2OlxcdFxcdFxcdGlmIChJU19FUlIoYmgpKSB7XFxuMjgwNzpcXHRcXHRcXHRcXHRlcnJvciA9IFBUUl9FUlIoYmgpO1xcbjI4MDg6XFx0XFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbjI4MDk6XFx0XFx0XFx0fVxcbjI4MTA6XFx0XFx0XFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2NoZWNrX2Jsb2NrKGlub2RlLCBiaCk7XFxuMjgxMTpcXHRcXHRcXHRpZiAoZXJyb3IpIHtcXG4yODEyOlxcdFxcdFxcdFxcdGJyZWxzZShiaCk7XFxuMjgxMzpcXHRcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuMjgxNDpcXHRcXHRcXHR9XFxuMjgxNTpcXHRcXHRcXHRiYXNlID0gQkhEUihiaCk7XFxuMjgxNjpcXHRcXHRcXHRlbmQgPSBiaC1cXHUwMDNlYl9kYXRhICsgYmgtXFx1MDAzZWJfc2l6ZTtcXG4yODE3OlxcdFxcdFxcdG1pbl9vZmZzID0gZW5kIC0gYmFzZTtcXG4yODE4OlxcdFxcdFxcdGJmcmVlID0gZXh0NF94YXR0cl9mcmVlX3NwYWNlKEJGSVJTVChiaCksIFxcdTAwMjZtaW5fb2ZmcywgYmFzZSxcXG4yODE5OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIE5VTEwpO1xcbjI4MjA6XFx0XFx0XFx0YnJlbHNlKGJoKTtcXG4yODIxOlxcdFxcdFxcdGlmIChiZnJlZSArIGlmcmVlIFxcdTAwM2MgaXNpemVfZGlmZikge1xcbjI4MjI6XFx0XFx0XFx0XFx0aWYgKCF0cmllZF9taW5fZXh0cmFfaXNpemUgXFx1MDAyNlxcdTAwMjYgc19taW5fZXh0cmFfaXNpemUpIHtcXG4yODIzOlxcdFxcdFxcdFxcdFxcdHRyaWVkX21pbl9leHRyYV9pc2l6ZSsrO1xcbjI4MjQ6XFx0XFx0XFx0XFx0XFx0bmV3X2V4dHJhX2lzaXplID0gc19taW5fZXh0cmFfaXNpemU7XFxuMjgyNTpcXHRcXHRcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbjI4MjY6XFx0XFx0XFx0XFx0fVxcbjI4Mjc6XFx0XFx0XFx0XFx0ZXJyb3IgPSAtRU5PU1BDO1xcbjI4Mjg6XFx0XFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbjI4Mjk6XFx0XFx0XFx0fVxcbjI4MzA6XFx0XFx0fSBlbHNlIHtcXG4yODMxOlxcdFxcdFxcdGJmcmVlID0gaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplO1xcbjI4MzI6XFx0XFx0fVxcbjI4MzM6XFx0XFxuMjgzNDpcXHRcXHRlcnJvciA9IGV4dDRfeGF0dHJfbWFrZV9pbm9kZV9zcGFjZShoYW5kbGUsIGlub2RlLCByYXdfaW5vZGUsXFxuMjgzNTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgaXNpemVfZGlmZiwgaWZyZWUsIGJmcmVlLFxcbjI4MzY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZ0b3RhbF9pbm8pO1xcbjI4Mzc6XFx0XFx0aWYgKGVycm9yKSB7XFxuMjgzODpcXHRcXHRcXHRpZiAoZXJyb3IgPT0gLUVOT1NQQyBcXHUwMDI2XFx1MDAyNiAhdHJpZWRfbWluX2V4dHJhX2lzaXplIFxcdTAwMjZcXHUwMDI2XFxuMjgzOTpcXHRcXHRcXHQgICAgc19taW5fZXh0cmFfaXNpemUpIHtcXG4yODQwOlxcdFxcdFxcdFxcdHRyaWVkX21pbl9leHRyYV9pc2l6ZSsrO1xcbjI4NDE6XFx0XFx0XFx0XFx0bmV3X2V4dHJhX2lzaXplID0gc19taW5fZXh0cmFfaXNpemU7XFxuMjg0MjpcXHRcXHRcXHRcXHRlcnJvciA9IDA7XFxuMjg0MzpcXHRcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbjI4NDQ6XFx0XFx0XFx0fVxcbjI4NDU6XFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbjI4NDY6XFx0XFx0fVxcbjI4NDc6XFx0c2hpZnQ6XFxuMjg0ODpcXHRcXHQvKiBBZGp1c3QgdGhlIG9mZnNldHMgYW5kIHNoaWZ0IHRoZSByZW1haW5pbmcgZW50cmllcyBhaGVhZCAqL1xcbjI4NDk6XFx0XFx0ZXh0NF94YXR0cl9zaGlmdF9lbnRyaWVzKElGSVJTVChoZWFkZXIpLCBFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2V4dHJhX2lzaXplXFxuMjg1MDpcXHRcXHRcXHRcXHQtIG5ld19leHRyYV9pc2l6ZSwgKHZvaWQgKilyYXdfaW5vZGUgK1xcbjI4NTE6XFx0XFx0XFx0XFx0RVhUNF9HT09EX09MRF9JTk9ERV9TSVpFICsgbmV3X2V4dHJhX2lzaXplLFxcbjI4NTI6XFx0XFx0XFx0XFx0KHZvaWQgKiloZWFkZXIsIHRvdGFsX2lubyk7XFxuMjg1MzpcXHRcXHRFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2V4dHJhX2lzaXplID0gbmV3X2V4dHJhX2lzaXplO1xcbjI4NTQ6XFx0XFxuMjg1NTpcXHRcXHRpZiAoZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKVxcbjI4NTY6XFx0XFx0XFx0ZXJyb3IgPSBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKGlub2RlKTtcXG4yODU3OlxcdFxcbjI4NTg6XFx0Y2xlYW51cDpcXG4yODU5OlxcdFxcdGlmIChlcnJvciBcXHUwMDI2XFx1MDAyNiAobW50X2NvdW50ICE9IGxlMTZfdG9fY3B1KHNiaS1cXHUwMDNlc19lcy1cXHUwMDNlc19tbnRfY291bnQpKSkge1xcbjI4NjA6XFx0XFx0XFx0ZXh0NF93YXJuaW5nKGlub2RlLVxcdTAwM2VpX3NiLCBcXFwiVW5hYmxlIHRvIGV4cGFuZCBpbm9kZSAlbGx1LiBEZWxldGUgc29tZSBFQXMgb3IgcnVuIGUyZnNjay5cXFwiLFxcbjI4NjE6XFx0XFx0XFx0XFx0ICAgICBpbm9kZS1cXHUwMDNlaV9pbm8pO1xcbjI4NjI6XFx0XFx0XFx0bW50X2NvdW50ID0gbGUxNl90b19jcHUoc2JpLVxcdTAwM2VzX2VzLVxcdTAwM2VzX21udF9jb3VudCk7XFxuMjg2MzpcXHRcXHR9XFxuMjg2NDpcXHRcXHRyZXR1cm4gZXJyb3I7XFxuMjg2NTpcXHR9XFxuMjg2NjpcXHRcXG4yODY3OlxcdCNkZWZpbmUgRUlBX0lOQ1IgMTYgLyogbXVzdCBiZSAyXm4gKi9cXG4yODY4OlxcdCNkZWZpbmUgRUlBX01BU0sgKEVJQV9JTkNSIC0gMSlcXG4yODY5OlxcdFxcbjI4NzA6XFx0LyogQWRkIHRoZSBsYXJnZSB4YXR0ciBAaW5vZGUgaW50byBAZWFfaW5vZGVfYXJyYXkgZm9yIGRlZmVycmVkIGlwdXQoKS5cXG4yODcxOlxcdCAqIElmIEBlYV9pbm9kZV9hcnJheSBpcyBuZXcgb3IgZnVsbCBpdCB3aWxsIGJlIGdyb3duIGFuZCB0aGUgb2xkXFxuMjg3MjpcXHQgKiBjb250ZW50cyBjb3BpZWQgb3Zlci5cXG4yODczOlxcdCAqL1xcbjI4NzQ6XFx0c3RhdGljIGludFxcbjI4NzU6XFx0ZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcXG4yODc2OlxcdFxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuMjg3NzpcXHR7XFxuMjg3ODpcXHRcXHRpZiAoKmVhX2lub2RlX2FycmF5ID09IE5VTEwpIHtcXG4yODc5OlxcdFxcdFxcdC8qXFxuMjg4MDpcXHRcXHRcXHQgKiBTdGFydCB3aXRoIDE1IGlub2Rlcywgc28gaXQgZml0cyBpbnRvIGEgcG93ZXItb2YtdHdvIHNpemUuXFxuMjg4MTpcXHRcXHRcXHQgKi9cXG4yODgyOlxcdFxcdFxcdCgqZWFfaW5vZGVfYXJyYXkpID0ga21hbGxvY19mbGV4KCoqZWFfaW5vZGVfYXJyYXksIGlub2RlcyxcXG4yODgzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBFSUFfTUFTSywgR0ZQX05PRlMpO1xcbjI4ODQ6XFx0XFx0XFx0aWYgKCplYV9pbm9kZV9hcnJheSA9PSBOVUxMKVxcbjI4ODU6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjg4NjpcXHRcXHRcXHQoKmVhX2lub2RlX2FycmF5KS1cXHUwMDNlY291bnQgPSAwO1xcbjI4ODc6XFx0XFx0fSBlbHNlIGlmICgoKCplYV9pbm9kZV9hcnJheSktXFx1MDAzZWNvdW50IFxcdTAwMjYgRUlBX01BU0spID09IEVJQV9NQVNLKSB7XFxuMjg4ODpcXHRcXHRcXHQvKiBleHBhbmQgdGhlIGFycmF5IG9uY2UgYWxsIDE1ICsgbiAqIDE2IHNsb3RzIGFyZSBmdWxsICovXFxuMjg4OTpcXHRcXHRcXHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqbmV3X2FycmF5ID0gTlVMTDtcXG4yODkwOlxcdFxcbjI4OTE6XFx0XFx0XFx0bmV3X2FycmF5ID0ga21hbGxvY19mbGV4KCoqZWFfaW5vZGVfYXJyYXksIGlub2RlcyxcXG4yODkyOlxcdFxcdFxcdFxcdFxcdFxcdCAoKmVhX2lub2RlX2FycmF5KS1cXHUwMDNlY291bnQgKyBFSUFfSU5DUixcXG4yODkzOlxcdFxcdFxcdFxcdFxcdFxcdCBHRlBfTk9GUyk7XFxuMjg5NDpcXHRcXHRcXHRpZiAobmV3X2FycmF5ID09IE5VTEwpXFxuMjg5NTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4yODk2OlxcdFxcdFxcdG1lbWNweShuZXdfYXJyYXksICplYV9pbm9kZV9hcnJheSxcXG4yODk3OlxcdFxcdFxcdCAgICAgICBzdHJ1Y3Rfc2l6ZSgqZWFfaW5vZGVfYXJyYXksIGlub2RlcyxcXG4yODk4OlxcdFxcdFxcdFxcdFxcdCAgICgqZWFfaW5vZGVfYXJyYXkpLVxcdTAwM2Vjb3VudCkpO1xcbjI4OTk6XFx0XFx0XFx0a2ZyZWUoKmVhX2lub2RlX2FycmF5KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDQ6MTk6MzguNTcwODAwNzA1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA5NDcyODc0MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGZpeCwgYnV0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIGltcG9ydGFudCwgZXNwZWNpYWxseSBpbiBhIGZpbGUgc3lzdGVtIGNvbnRleHQuIFRoZSBjb3JlIG9mIGl0IGFkZHMgYGVycm9yID0gMDtgIHJpZ2h0IGJlZm9yZSB0aGUgYGdvdG8gcmV0cnk7YCBzdGF0ZW1lbnQgaW4gYGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBpbmRlZWQgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGEgY3J1Y2lhbCBvbmUuIFdpdGhvdXQgcmVzZXR0aW5nIGBlcnJvcmAgdG8gemVybywgdGhlIGZ1bmN0aW9uIGNvdWxkIHBvdGVudGlhbGx5IHByb3BhZ2F0ZSBhIHByZXZpb3VzIGVycm9yIGNvZGUuIFRoaXMgY291bGQgbGVhZCB0byBhIGNhc2NhZGluZyBmYWlsdXJlIGZ1cnRoZXIgZG93biB0aGUgbGluZSwgb3IsIHdvcnNlLCByZXR1cm4gYW4gaW5jb3JyZWN0IGVycm9yIHN0YXRlLlxuXG5UbyBwcm9wZXJseSBhc3Nlc3MgdGhpcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyB3aXRoaW4gYGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhYC4gVGhlIGtleSBpcyBsb2NhdGluZyB0aGF0IGByZXRyeTpgIGxhYmVsIHRvIHNlZSB3aGVyZSB0aGlzIFwiZ290b1wiIGlzIGFjdHVhbGx5IHRha2luZyB1cy4gSXMgaXQgd2l0aGluIGEgbG9vcCwgYSBjb25kaXRpb25hbCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBjb250ZXh0IG9mIHRoZSByZXRyeSBpcyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBpbXBhY3QuIEkgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIGlkZW50aWZ5IGhvdyB0aGUgZnVuY3Rpb24gaGFuZGxlcyBlcnJvcnMgaW4gZ2VuZXJhbC4gT25jZSBJJ3ZlIG1hcHBlZCB0aGlzIGluIG15IG1pbmQsIHRoZSBzaWduaWZpY2FuY2Ugb2Ygc2V0dGluZyBgZXJyb3JgIHRvIDAgd2lsbCBiZWNvbWUgY2xlYXIuIFVuZGVyc3RhbmRpbmcgdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGlzIGZ1bmN0aW9uIGlzIGNydWNpYWwgdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5IGFuZCBhdm9pZCBwb3RlbnRpYWwgZmlsZSBzeXN0ZW0gY29ycnVwdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM5NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDQ6MjA6MDkuNTE4MDkwMDVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDg5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC94YXR0ci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3NjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3NjA6XFx0ICogRXhwYW5kIGFuIGlub2RlIGJ5IG5ld19leHRyYV9pc2l6ZSBieXRlcyB3aGVuIEVBcyBhcmUgcHJlc2VudC5cXG4yNzYxOlxcdCAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG5lZ2F0aXZlIGVycm9yIG51bWJlciBvbiBmYWlsdXJlLlxcbjI3NjI6XFx0ICovXFxuMjc2MzpcXHRpbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSxcXG4yNzY0OlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlLCBoYW5kbGVfdCAqaGFuZGxlKVxcbjI3NjU6XFx0e1xcbjI3NjY6XFx0XFx0c3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfaGVhZGVyICpoZWFkZXI7XFxuMjc2NzpcXHRcXHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4yNzY4OlxcdFxcdHN0YXRpYyB1bnNpZ25lZCBpbnQgbW50X2NvdW50O1xcbjI3Njk6XFx0XFx0c2l6ZV90IG1pbl9vZmZzO1xcbjI3NzA6XFx0XFx0c2l6ZV90IGlmcmVlLCBiZnJlZTtcXG4yNzcxOlxcdFxcdGludCB0b3RhbF9pbm87XFxuMjc3MjpcXHRcXHR2b2lkICpiYXNlLCAqZW5kO1xcbjI3NzM6XFx0XFx0aW50IGVycm9yID0gMCwgdHJpZWRfbWluX2V4dHJhX2lzaXplID0gMDtcXG4yNzc0OlxcdFxcdGludCBzX21pbl9leHRyYV9pc2l6ZSA9IGxlMTZfdG9fY3B1KHNiaS1cXHUwMDNlc19lcy1cXHUwMDNlc19taW5fZXh0cmFfaXNpemUpO1xcbjI3NzU6XFx0XFx0aW50IGlzaXplX2RpZmY7XFx0LyogSG93IG11Y2ggZG8gd2UgbmVlZCB0byBncm93IGlfZXh0cmFfaXNpemUgKi9cXG4yNzc2OlxcdFxcbjI3Nzc6XFx0cmV0cnk6XFxuMjc3ODpcXHRcXHRpc2l6ZV9kaWZmID0gbmV3X2V4dHJhX2lzaXplIC0gRVhUNF9JKGlub2RlKS1cXHUwMDNlaV9leHRyYV9pc2l6ZTtcXG4yNzc5OlxcdFxcdGlmIChFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2V4dHJhX2lzaXplIFxcdTAwM2U9IG5ld19leHRyYV9pc2l6ZSlcXG4yNzgwOlxcdFxcdFxcdHJldHVybiAwO1xcbjI3ODE6XFx0XFxuMjc4MjpcXHRcXHRoZWFkZXIgPSBJSERSKGlub2RlLCByYXdfaW5vZGUpO1xcbjI3ODM6XFx0XFxuMjc4NDpcXHRcXHQvKlxcbjI3ODU6XFx0XFx0ICogQ2hlY2sgaWYgZW5vdWdoIGZyZWUgc3BhY2UgaXMgYXZhaWxhYmxlIGluIHRoZSBpbm9kZSB0byBzaGlmdCB0aGVcXG4yNzg2OlxcdFxcdCAqIGVudHJpZXMgYWhlYWQgYnkgbmV3X2V4dHJhX2lzaXplLlxcbjI3ODc6XFx0XFx0ICovXFxuMjc4ODpcXHRcXG4yNzg5OlxcdFxcdGJhc2UgPSBJRklSU1QoaGVhZGVyKTtcXG4yNzkwOlxcdFxcdGVuZCA9IElUQUlMKGlub2RlLCByYXdfaW5vZGUpO1xcbjI3OTE6XFx0XFx0bWluX29mZnMgPSBlbmQgLSBiYXNlO1xcbjI3OTI6XFx0XFx0dG90YWxfaW5vID0gc2l6ZW9mKHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2hlYWRlcikgKyBzaXplb2YodTMyKTtcXG4yNzkzOlxcdFxcbjI3OTQ6XFx0XFx0aWZyZWUgPSBleHQ0X3hhdHRyX2ZyZWVfc3BhY2UoYmFzZSwgXFx1MDAyNm1pbl9vZmZzLCBiYXNlLCBcXHUwMDI2dG90YWxfaW5vKTtcXG4yNzk1OlxcdFxcdGlmIChpZnJlZSBcXHUwMDNlPSBpc2l6ZV9kaWZmKVxcbjI3OTY6XFx0XFx0XFx0Z290byBzaGlmdDtcXG4yNzk3OlxcdFxcbjI3OTg6XFx0XFx0LypcXG4yNzk5OlxcdFxcdCAqIEVub3VnaCBmcmVlIHNwYWNlIGlzbid0IGF2YWlsYWJsZSBpbiB0aGUgaW5vZGUsIGNoZWNrIGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDA0OjIwOjA5LjUxODI0Mjc3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjIxMDQyOTQ1ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEJ1ZyBpbiBFeHQ0IFhhdHRyIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGV4dDQgY29kZSwgYW5kIEkndmUgZ290IGEgc2NlbmFyaW8gcGxheWluZyBvdXQgaW4gbXkgaGVhZC4gSWYgYGVycm9yYCBpc24ndCBleHBsaWNpdGx5IHJlc2V0IHRvIHplcm8gYWZ0ZXIgYSBmYWlsdXJlIGFuZCB3ZSBlbmQgdXAganVtcGluZyBiYWNrIHRvIGByZXRyeTpgLCB0aGVyZSdzIGEgcHJvYmxlbS4gQXQgYHJldHJ5OmAsIGBpc2l6ZV9kaWZmYCBpcyByZWNvbXB1dGVkLCBhbmQgaWYgdGhlIGF2YWlsYWJsZSBzcGFjZSBpcyBzdWZmaWNpZW50LCBpbmRpY2F0ZWQgYnkgYGlmcmVlIFx1MDAzZT0gaXNpemVfZGlmZmAsIHdlIGJyYW5jaCB0byBgc2hpZnQ6YC5cblxuTm93LCBhdCBgc2hpZnQ6YCwgdGhlIHZhbHVlIG9mIGBlcnJvcmAgaXMgb25seSB1cGRhdGVkIGlmIHRoZSBpbm9kZSBoYXMgaW5saW5lIGRhdGEuIElmIGl0ICpkb2Vzbid0KiBoYXZlIGlubGluZSBkYXRhLCB3aGljaCBpcyB0aGUgbW9yZSBjb21tb24gcGF0aCwgdGhlIGNvZGUgZmFsbHMgdGhyb3VnaCB0byBgY2xlYW51cDpgLiBBbmQgYXQgYGNsZWFudXA6YCwgaXQgKnJldHVybnMqIHRoZSB2YWx1ZSBvZiBgZXJyb3JgLlxuXG5UaGUga2V5IGlzc3VlIGlzIHRoaXM6IElmIHRoZSBpbml0aWFsIGBlcnJvcmAgd2FzIGAtRU5PU1BDYCwgYmVjYXVzZSBgZXh0NF94YXR0cl9tYWtlX2lub2RlX3NwYWNlYCBmYWlsZWQsIHRoYXQgYC1FTk9TUENgIGdldHMgY2FycmllZCBhbGwgdGhlIHdheSB0aHJvdWdoLCBldmVuIHRob3VnaCB0aGUgc2hpZnRpbmcgcHJvY2VzcyBpdHNlbGYgbWlnaHQgaGF2ZSBiZWVuIGVudGlyZWx5IHN1Y2Nlc3NmdWwhIEl0IHdvdWxkIHJldHVybiBgLUVOT1NQQ2AgZXZlbiB0aG91Z2ggaXQgc3VjY2Vzc2Z1bGx5IHNoaWZ0ZWQgZW50cmllcyBhbmQgZml4ZWQgdGhlIHByb2JsZW0hXG5cbldhaXQsIGxldCBtZSB3YWxrIHRocm91Z2ggaXQgYWdhaW4uLi4gYC1FTk9TUENgIGNhdXNlcyBhIGp1bXAgYmFjayB0byByZXRyeSwgYW5kIHRoZW4gaWYgdGhlIHNwYWNlIGhhcyBiZWVuIGZyZWVkIHdlIGhpdCBzaGlmdCwgdGhlbiBpdCByZXR1cm5zIGBlcnJvcmAgd2hpY2ggaXMgYC1FTk9TUENgLiBUaGF0J3MgaXQsIGl0J3MgcmV0dXJuaW5nIGFuIGVycm9yIGNvZGUgaW5kaWNhdGluZyB0aGUgc3BhY2UgaXMgZnVsbCwgZXZlbiBpZiB0aGUgZXJyb3IgY29uZGl0aW9uIGhhcyBiZWVuIHJlc29sdmVkISBJdCdzIGEgZnVuY3Rpb25hbCBidWcuXG5cblNvLCB0aGUgZml4IGlzIHN0cmFpZ2h0Zm9yd2FyZDogd2UgbmVlZCB0byBleHBsaWNpdGx5IHNldCBgZXJyb3IgPSAwO2AgYmVmb3JlIHRoZSBqdW1wIHRvIGByZXRyeTpgLiBUaGF0IGVuc3VyZXMgYSBzdWNjZXNzZnVsIG9wZXJhdGlvbiByZXR1cm5zIGEgc3VjY2VzcyBjb2RlLlxuXG5SaWdodCwgbGV0J3MgbWFrZSBzdXJlIHRoaXMgZml4IGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQuIE5lZWRzIEVYVDRfRlMuIE5lZWQgdG8gY2hlY2sgYGZzL2V4dDQvS2NvbmZpZ2AgdG8gc2VlIHRoZSBjb25maWcgb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTUwNCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDA0OjIwOjMxLjYyMjUzOTQzOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA1NDgwNzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFWFQ0X0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9leHQ0L0tjb25maWc6Mjpjb25maWcgRVhUNF9GU1xcbmZzL2V4dDQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVxcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZz0zNT1jb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy00NS1cXG5mcy9leHQ0L0tjb25maWc6NDY6Y29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMXFxuZnMvZXh0NC9LY29uZmlnLTQ3LVxcdGJvb2wgXFxcIkV4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNTUtXFxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXFxuZnMvZXh0NC9LY29uZmlnLTU3LVxcdGJvb2wgXFxcIkV4dDQgU2VjdXJpdHkgTGFiZWxzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwNDoyMDozMS45MjgwMzc4MDRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM1NzQ2MzAyMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcywgZGlzdGlsbGVkIGludG8gYSBmaXJzdC1wZXJzb24gc3VtbWFyeSBhcyB5b3UgcmVxdWVzdGVkLCBhc3N1bWluZyBJJ20gYWxyZWFkeSB3ZWxsLXZlcnNlZCBpbiBmaWxlc3lzdGVtcyBhbmQga2VybmVsIGludGVybmFscy5cblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IEVYVDQgWEFUVFJzKipcblxuUmlnaHQsIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgRXh0ZW5kZWQgQXR0cmlidXRlcyAoeGF0dHJzKSB3aXRoaW4gdGhlIEVYVDQgZmlsZXN5c3RlbS4gVGhlIGltcGxpY2F0aW9uIGlzIEVYVDQgaXMgdGhlIHByaW1hcnkgZm9jdXMsIHdoaWNoIGlzIG5vIHN1cnByaXNlIGdpdmVuIGl0cyBwcmV2YWxlbmNlLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IGFyZSB0aGVyZSBvdGhlciBmaWxlIHN5c3RlbXMgYXQgcGxheSBoZXJlPyBBcmUgdGhlcmUgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBlaXRoZXIgY29tcGlsZS10aW1lIG9yIHJ1bnRpbWUsIHRoYXQgY291bGQgaW5mbHVlbmNlIGhvdyB0aGVzZSB4YXR0cnMgYmVoYXZlIG9yIGFyZSBldmVuIGVuYWJsZWQ/XG5cbk15IG5leHQgcG9pbnQgaXMgdG8gaWRlbnRpZnkgdGhlIHNwZWNpZmljIGNvZGUgbG9jYXRpb24uIEkgcmVtZW1iZXIgdGhhdCB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbiBmb3IgeGF0dHJzIGluIEVYVDQgcmVzaWRlcyB3aXRoaW4gYGZzL2V4dDQveGF0dHIuY2AuIFNvLCBJJ2xsIHN0YXJ0IHRoZXJlLlxuXG5CdXQgYmVmb3JlIGRpdmluZyBkZWVwIGludG8gdGhlIHNvdXJjZSBjb2RlLCBJJ2xsIG5lZWQgdG8gY2hlY2sgaWYgdGhhdCBgeGF0dHIuY2AgZmlsZSBpcyBjb21waWxlZCBpbiBjb25kaXRpb25hbGx5LiBJcyB0aGlzIGZ1bmN0aW9uYWxpdHkgYSBtb2R1bGUsIG9yIGlzIGl0IGNvbXBpbGVkIGluIGRlcGVuZGluZyBvbiBzb21lIEtjb25maWcgb3B0aW9uPyBLbm93aW5nIHRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIGF2YWlsYWJpbGl0eSBhY3Jvc3MgdmFyaW91cyBrZXJuZWwgY29uZmlndXJhdGlvbnMgYW5kIGRpc3RyaWJ1dGlvbnMuIEkgc2hvdWxkIHByb2JhYmx5IHF1aWNrbHkgY2hlY2sgaWYgdGhlcmUgaXMgYSBgS2NvbmZpZ2AgZm9yIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0NTAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwNDoyMTowNS41MDI2Njk5MTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDA5MzkzMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGF0dHIub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvTWFrZWZpbGU9OD1leHQ0LXlcXHQ6PSBiYWxsb2MubyBiaXRtYXAubyBibG9ja192YWxpZGl0eS5vIGRpci5vIGV4dDRfamJkMi5vIGV4dGVudHMubyBcXFxcXFxuLS1cXG5mcy9leHQ0L01ha2VmaWxlLTExLVxcdFxcdG1tcC5vIG1vdmVfZXh0ZW50Lm8gbmFtZWkubyBwYWdlLWlvLm8gcmVhZHBhZ2UubyByZXNpemUubyBcXFxcXFxuZnMvZXh0NC9NYWtlZmlsZToxMjpcXHRcXHRzdXBlci5vIHN5bWxpbmsubyBzeXNmcy5vIHhhdHRyLm8geGF0dHJfaHVyZC5vIHhhdHRyX3RydXN0ZWQubyBcXFxcXFxuZnMvZXh0NC9NYWtlZmlsZS0xMy1cXHRcXHR4YXR0cl91c2VyLm8gZmFzdF9jb21taXQubyBvcnBoYW4ub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwNDoyMTowNi45MDM2MTM1MjlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjI2NDY4NjIyOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgRVhUNF9GUyBhbmQgRXhwYW5kZWQgaV9zaXplKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBFWFQ0IHN0dWZmIGFnYWluLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSBmYWN0IHRoYXQsIHByZXR0eSBtdWNoIGFsd2F5cywgd2UncmUgZGVhbGluZyB3aXRoIGEgc3lzdGVtIGNvbXBpbGVkIHdpdGggYEVYVDRfRlNgLiBUaGF0J3MgdGhlIGJhc2VsaW5lLCB0aGUgZm91bmRhdGlvbi4gQnV0IEknbSBhbHNvIHBvbmRlcmluZyBob3cgYGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhYCBmaXRzIGludG8gdGhlIHBpY3R1cmUuIEl0J3MgYSBrZXkgZnVuY3Rpb24gZm9yIGV4cGFuZGluZyB0aGUgaW5vZGUncyBleHRyYSBpX3NpemUgZmllbGQsIGFuZCBJIG5lZWQgdG8gY29uc2lkZXIgaXRzIHVzYWdlIGNvbnRleHQuIEkgaGF2ZSB0byBkcmlsbCBkb3duIGZ1cnRoZXI7IGlzIGl0IGNhbGxlZCBqdXN0IGdlbmVyYWxseSwgb3IgZnJvbSBzb21lIHNwZWNpZmljIGFyZWEgb2YgY29kZSB0aGF0IEkgc2hvdWxkIGJlIGtleWluZyBvbj8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBjaGFpbiBpcyBnb2luZyB0byBiZSBjcnVjaWFsIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NDAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwNDoyMToyOS41NTA0NzgwMDlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3Mjk4NjUxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2lub2RlLmM9NjQzOT1zdGF0aWMgaW50IF9fZXh0NF9leHBhbmRfZXh0cmFfaXNpemUoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy02NDg1LVxcdC8qIHRyeSB0byBleHBhbmQgd2l0aCBFQXMgcHJlc2VudCAqL1xcbmZzL2V4dDQvaW5vZGUuYzo2NDg2OlxcdGVycm9yID0gZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoaW5vZGUsIG5ld19leHRyYV9pc2l6ZSxcXG5mcy9leHQ0L2lub2RlLmMtNjQ4Ny1cXHRcXHRcXHRcXHRcXHQgICByYXdfaW5vZGUsIGhhbmRsZSk7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MjY5ND1zdGF0aWMgaW50IGV4dDRfeGF0dHJfbWFrZV9pbm9kZV9zcGFjZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI3NjItICovXFxuZnMvZXh0NC94YXR0ci5jOjI3NjM6aW50IGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZXh0cmFfaXNpemUsXFxuZnMvZXh0NC94YXR0ci5jLTI3NjQtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUsIGhhbmRsZV90ICpoYW5kbGUpXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmg9MTkyPWV4dGVybiB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqYXJyYXkpO1xcbmZzL2V4dDQveGF0dHIuaC0xOTMtXFxuZnMvZXh0NC94YXR0ci5oOjE5NDpleHRlcm4gaW50IGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZXh0cmFfaXNpemUsXFxuZnMvZXh0NC94YXR0ci5oLTE5NS1cXHRcXHRcXHQgICAgc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDA0OjIxOjI5LjkyMzQ2ODYwM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTkxOTQ0MDkwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgc2Vhc29uZWQgZXhwZXJ0OlxuXG4qKkFuYWx5emluZyB0aGUgYF9fZXh0NF9leHBhbmRfZXh0cmFfaXNpemVgIEZ1bmN0aW9uKipcblxuUmlnaHQsIHNvIHRoaXMgY2FsbCBvcmlnaW5hdGVzIHdpdGhpbiB0aGUgYF9fZXh0NF9leHBhbmRfZXh0cmFfaXNpemVgIGZ1bmN0aW9uLCBmb3VuZCBpbiB0aGUgYGZzL2V4dDQvaW5vZGUuY2AgZmlsZS4gSW50ZXJlc3RpbmcuIE15IGluaXRpYWwgZm9jdXMgaXMgbmF0dXJhbGx5IGRyYXduIHRvIGBfX2V4dDRfZXhwYW5kX2V4dHJhX2lzaXplYCBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBhY2NvbXBsaXNoLiBHaXZlbiB0aGUgbmFtZSwgaXQncyBjbGVhciB0aGlzIGRlYWxzIHdpdGggZXhwYW5kaW5nIHRoZSBcImV4dHJhIGlfc2l6ZVwiIGF0dHJpYnV0ZSB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbS4gSSBpbW1lZGlhdGVseSB3YW50IHRvIGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiwgYW5kIGV2YWx1YXRlIGl0cyBwdXJwb3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTkxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDQ6MjI6MjEuODQyOTExNjgzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjQ2NzU2NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19leHQ0X2V4cGFuZF9leHRyYV9pc2l6ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2lub2RlLmM9NjQxNT1leHQ0X3Jlc2VydmVfaW5vZGVfd3JpdGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy02NDM4LVxcbmZzL2V4dDQvaW5vZGUuYzo2NDM5OnN0YXRpYyBpbnQgX19leHQ0X2V4cGFuZF9leHRyYV9pc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbmZzL2V4dDQvaW5vZGUuYy02NDQwLVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgaW50IG5ld19leHRyYV9pc2l6ZSxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz02NTAyPXN0YXRpYyBpbnQgZXh0NF90cnlfdG9fZXhwYW5kX2V4dHJhX2lzaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNjUyOC1cXG5mcy9leHQ0L2lub2RlLmM6NjUyOTpcXHRlcnJvciA9IF9fZXh0NF9leHBhbmRfZXh0cmFfaXNpemUoaW5vZGUsIG5ld19leHRyYV9pc2l6ZSwgXFx1MDAyNmlsb2MsXFxuZnMvZXh0NC9pbm9kZS5jLTY1MzAtXFx0XFx0XFx0XFx0XFx0ICBoYW5kbGUsIFxcdTAwMjZub19leHBhbmQpO1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTY1MzY9aW50IGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNjU2Ni1cXG5mcy9leHQ0L2lub2RlLmM6NjU2NzpcXHRlcnJvciA9IF9fZXh0NF9leHBhbmRfZXh0cmFfaXNpemUoaW5vZGUsIG5ld19leHRyYV9pc2l6ZSwgaWxvYyxcXG5mcy9leHQ0L2lub2RlLmMtNjU2OC1cXHRcXHRcXHRcXHRcXHQgIGhhbmRsZSwgXFx1MDAyNm5vX2V4cGFuZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDA0OjIyOjIyLjE2NzU5ODEwOFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjY5NDQxOTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZpeGluZyBhIFN1YnRsZSBYYXR0ciBFeHBhbnNpb24gQnVnIGluIGV4dDQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBzb21lIGNvZGUgcmVsYXRlZCB0byBleHQ0J3MgZXh0ZW5kZWQgYXR0cmlidXRlICh4YXR0cikgaGFuZGxpbmcuIFNwZWNpZmljYWxseSwgbXkgZm9jdXMgaXMgb24gaG93IGl0IGhhbmRsZXMgZXhwYW5kaW5nIHRoZSBleHRyYSBpbm9kZSBzaXplLiBJIHNlZSB0aGF0IGBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZWAgYW5kIGBleHQ0X3RyeV90b19leHBhbmRfZXh0cmFfaXNpemVgIGFyZSB0aGUgZW50cnkgcG9pbnRzIGhlcmUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBjb3JyZWN0aW9uIHdpdGhpbiB0aGUgZXh0NCB4YXR0ciBzeXN0ZW0uXG5cblRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgLiBJdCBsb29rcyBsaWtlIHRoZXJlJ3MgYSBidWcgd2hlcmUgdGhpcyBmdW5jdGlvbiBjb3VsZCByZXR1cm4gYC1FTk9TUENgLCBldmVuIGFmdGVyIGl0IGFjdHVhbGx5ICpkaWQqIG1hbmFnZSB0byBleHBhbmQgdGhlIGV4dHJhIGlzaXplIHN1Y2Nlc3NmdWxseS4gVGhlIHByb2JsZW0gYm9pbHMgZG93biB0byBhbiBlcnJvciBjb2RlIG5vdCBiZWluZyBwcm9wZXJseSByZXNldCBiZWZvcmUgYSBgcmV0cnlgIGp1bXAuIFRoaXMgY2FuIGxlYWQgdG8gdGhlIG1pc2xlYWRpbmcgZXJyb3IgbWVzc2FnZS5cblxuSSdtIGtleWluZyBpbiBvbiBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgIGFzIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIGludm9sdmVkIGluIHRoaXMgcGFydGljdWxhciBmaXguIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyBhbmQgY29uZmlybSB0aGUgZXhhY3QgcGF0aCB0aGUgYnVnIHRha2VzLlxuXG5JIHNob3VsZCBhbHNvIHF1aWNrbHkgY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gYENPTkZJR19FWFQ0X0ZTYCwgb2YgY291cnNlLCBpcyB0aGUgcmVsZXZhbnQgZmlsZXN5c3RlbSBjb25maWd1cmF0aW9uLiBCdXQgaXMgYENPTkZJR19FWFQ0X0ZTX1hBVFRSYCBhbHNvIHJlcXVpcmVkPyBMZXQgbWUgcnVuIGEgcXVpY2sgZ3JlcCBhbmQgZG91YmxlLWNoZWNrIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55IGRlcGVuZGVuY2llcyBpbiB0aGUgYnVpbGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxODEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDQ6MjI6MjcuNDM3MDQyNTQ5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTgxNDY1OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0VYVDRfRlNfWEFUVFJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDA0OjIyOjI3LjQ5Mjg2NDYwOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDMyMTc2NzA2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRGVsdmluZyBEZWVwZXIgaW50byBleHQ0IHhhdHRycyoqXG5cblJpZ2h0LCBzbywgdGhlIHF1ZXN0aW9uIG9mIGV4dDQgZXh0ZW5kZWQgYXR0cmlidXRlcy4uLkkgKmtub3cqIEknbSBub3QgY3JhenksIGV4dDQgeGF0dHJzIGFyZSBiYXNpY2FsbHkgYWx3YXlzIGVuYWJsZWQsIGFyZW4ndCB0aGV5PyBJdCdzIG5vdCBhIGNvbmZpZ3VyYWJsZSBvcHRpb24gbGlrZSB3aXRoIHNvbWUgb3RoZXIgZmlsZXN5c3RlbXMuIE5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgbXkgbWVudGFsIG1vZGVsIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBhY2N1cmF0ZS4gSSBuZWVkIHRvIHJldmlzaXQgdGhhdCBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgIGZ1bmN0aW9uLiBHb3R0YSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaGFuZGxpbmcgb2YgdGhlIGV4dHJhIGlub2RlIHNpemUgZm9yIHN0b3JpbmcgZXh0ZW5kZWQgYXR0cmlidXRlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJ4oCZbSBub3QgbWlzc2luZyBhbnl0aGluZyBjcnVjaWFsIGFib3V0IGhvdyBpdOKAmXMgbWFuYWdlZCBkdXJpbmcgaW5vZGUgYWxsb2NhdGlvbiBhbmQgZXhwYW5zaW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzczLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDQ6MjI6NDEuODE0NjM1MTEzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L3hhdHRyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjgzMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjgzMDpcXHRcXHR9IGVsc2Uge1xcbjI4MzE6XFx0XFx0XFx0YmZyZWUgPSBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemU7XFxuMjgzMjpcXHRcXHR9XFxuMjgzMzpcXHRcXG4yODM0OlxcdFxcdGVycm9yID0gZXh0NF94YXR0cl9tYWtlX2lub2RlX3NwYWNlKGhhbmRsZSwgaW5vZGUsIHJhd19pbm9kZSxcXG4yODM1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBpc2l6ZV9kaWZmLCBpZnJlZSwgYmZyZWUsXFxuMjgzNjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnRvdGFsX2lubyk7XFxuMjgzNzpcXHRcXHRpZiAoZXJyb3IpIHtcXG4yODM4OlxcdFxcdFxcdGlmIChlcnJvciA9PSAtRU5PU1BDIFxcdTAwMjZcXHUwMDI2ICF0cmllZF9taW5fZXh0cmFfaXNpemUgXFx1MDAyNlxcdTAwMjZcXG4yODM5OlxcdFxcdFxcdCAgICBzX21pbl9leHRyYV9pc2l6ZSkge1xcbjI4NDA6XFx0XFx0XFx0XFx0dHJpZWRfbWluX2V4dHJhX2lzaXplKys7XFxuMjg0MTpcXHRcXHRcXHRcXHRuZXdfZXh0cmFfaXNpemUgPSBzX21pbl9leHRyYV9pc2l6ZTtcXG4yODQyOlxcdFxcdFxcdFxcdGVycm9yID0gMDtcXG4yODQzOlxcdFxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuMjg0NDpcXHRcXHRcXHR9XFxuMjg0NTpcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuMjg0NjpcXHRcXHR9XFxuMjg0NzpcXHRzaGlmdDpcXG4yODQ4OlxcdFxcdC8qIEFkanVzdCB0aGUgb2Zmc2V0cyBhbmQgc2hpZnQgdGhlIHJlbWFpbmluZyBlbnRyaWVzIGFoZWFkICovXFxuMjg0OTpcXHRcXHRleHQ0X3hhdHRyX3NoaWZ0X2VudHJpZXMoSUZJUlNUKGhlYWRlciksIEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZXh0cmFfaXNpemVcXG4yODUwOlxcdFxcdFxcdFxcdC0gbmV3X2V4dHJhX2lzaXplLCAodm9pZCAqKXJhd19pbm9kZSArXFxuMjg1MTpcXHRcXHRcXHRcXHRFWFQ0X0dPT0RfT0xEX0lOT0RFX1NJWkUgKyBuZXdfZXh0cmFfaXNpemUsXFxuMjg1MjpcXHRcXHRcXHRcXHQodm9pZCAqKWhlYWRlciwgdG90YWxfaW5vKTtcXG4yODUzOlxcdFxcdEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZXh0cmFfaXNpemUgPSBuZXdfZXh0cmFfaXNpemU7XFxuMjg1NDpcXHRcXG4yODU1OlxcdFxcdGlmIChleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpXFxuMjg1NjpcXHRcXHRcXHRlcnJvciA9IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soaW5vZGUpO1xcbjI4NTc6XFx0XFxuMjg1ODpcXHRjbGVhbnVwOlxcbjI4NTk6XFx0XFx0aWYgKGVycm9yIFxcdTAwMjZcXHUwMDI2IChtbnRfY291bnQgIT0gbGUxNl90b19jcHUoc2JpLVxcdTAwM2VzX2VzLVxcdTAwM2VzX21udF9jb3VudCkpKSB7XFxuMjg2MDpcXHRcXHRcXHRleHQ0X3dhcm5pbmcoaW5vZGUtXFx1MDAzZWlfc2IsIFxcXCJVbmFibGUgdG8gZXhwYW5kIGlub2RlICVsbHUuIERlbGV0ZSBzb21lIEVBcyBvciBydW4gZTJmc2NrLlxcXCIsXFxuMjg2MTpcXHRcXHRcXHRcXHQgICAgIGlub2RlLVxcdTAwM2VpX2lubyk7XFxuMjg2MjpcXHRcXHRcXHRtbnRfY291bnQgPSBsZTE2X3RvX2NwdShzYmktXFx1MDAzZXNfZXMtXFx1MDAzZXNfbW50X2NvdW50KTtcXG4yODYzOlxcdFxcdH1cXG4yODY0OlxcdFxcdHJldHVybiBlcnJvcjtcXG4yODY1OlxcdH1cXG4yODY2OlxcdFxcbjI4Njc6XFx0I2RlZmluZSBFSUFfSU5DUiAxNiAvKiBtdXN0IGJlIDJebiAqL1xcbjI4Njg6XFx0I2RlZmluZSBFSUFfTUFTSyAoRUlBX0lOQ1IgLSAxKVxcbjI4Njk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDA0OjIyOjQxLjgxNDgwNDI5M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzI3Nzk4MDMwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBleHQ0IEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGV4YW1pbmVkIHRoaXMgcGF0Y2gsIGFuZCBJJ20gY29uZmlkZW50IGluIHNheWluZyB0aGF0IHRoaXMgaXMgaW5kZWVkIGEgZnVuY3Rpb25hbCBidWcgZml4IHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtLiBJIGNhbiBzZWUgdGhlIHJlYXNvbmluZyBjbGVhcmx5LiBJdCdzIGFib3V0IGhvdyBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgIGhhbmRsZXMgdGhlIHJldHVybiB2YWx1ZSBhbmQgcG90ZW50aWFsIGVycm9ycy4gU3BlY2lmaWNhbGx5LCB0aGUgY29uY2VybiBpcyB0aGF0IGFuIGAtRU5PU1BDYCBjb3VsZCBiZSByZXR1cm5lZCBldmVuIGFmdGVyIGEgc3VjY2Vzc2Z1bCBleHBhbnNpb24gb2YgdGhlIGV4dHJhIGlzaXplLCBkdWUgdG8gYW4gdW4tcmVzZXQgYGVycm9yYCB2YXJpYWJsZS4gVGhpcyBtZWFucyBhIHN1YnNlcXVlbnQgYXR0ZW1wdCBtaWdodCBub3QgYmUgdW5kZXJ0YWtlbiBkZXNwaXRlIHNwYWNlIGJlaW5nIGF2YWlsYWJsZS5cblxuR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgdGhpcyB0byBtYW5pZmVzdCBhcyBkYXRhIGNvcnJ1cHRpb24gb3Igc3B1cmlvdXMgc3BhY2UgZXhoYXVzdGlvbiwgSSdtIG1hcmtpbmcgdGhpcyBhcyBoaWdobHkgZnV6emFibGUuIEknbGwgc2V0IGBXb3J0aEZ1enppbmdgIHRvIGB0cnVlYC5cblxuSSdsbCBmb2N1cyB0aGUgZnV6emluZyBvbiB0aGUgY29yZSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhpcyBzcGVjaWZpYyBpc3N1ZTogYGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhYCBhbmQgYGV4dDRfeGF0dHJfbWFrZV9pbm9kZV9zcGFjZWAuIFRoZXNlIGFyZSB0aGUga2V5IGFyZWFzIHdoZXJlIHRoaXMgYnVnIGlzIGxpa2VseSB0byBiZSB0cmlnZ2VyZWQuIEkgYWxzbyBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBgRVhUNF9GU2AgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZW5hYmxlZCBmb3IgdGhlIGZ1enppbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gcmVhY2hhYmxlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYywgc28gSSBuZWVkIHRvIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjkwLCJPdXRwdXRUb2tlbnMiOjEzMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDA0OjIzOjE1LjA5Mjc4NjY1M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzMxMjU1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhXCIsXG4gICAgXCJleHQ0X3hhdHRyX21ha2VfaW5vZGVfc3BhY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBleHQ0IHdoZXJlIGBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYWAgY291bGQgcmV0dXJuIGAtRU5PU1BDYCBldmVuIHdoZW4gaXQgc3VjY2Vzc2Z1bGx5IGV4cGFuZGVkIHRoZSBleHRyYSBpc2l6ZSwgYmVjYXVzZSBgZXJyb3JgIHdhc24ndCByZXNldCB0byAwIGJlZm9yZSBqdW1waW5nIHRvIGByZXRyeWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYVwiLFxuICAgIFwiZXh0NF94YXR0cl9tYWtlX2lub2RlX3NwYWNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gZXh0NCB3aGVyZSBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgIGNvdWxkIHJldHVybiBgLUVOT1NQQ2AgZXZlbiB3aGVuIGl0IHN1Y2Nlc3NmdWxseSBleHBhbmRlZCB0aGUgZXh0cmEgaXNpemUsIGJlY2F1c2UgYGVycm9yYCB3YXNuJ3QgcmVzZXQgdG8gMCBiZWZvcmUganVtcGluZyB0byBgcmV0cnlgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgxvph[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-09 03:55:55 +0000 UTC FinishedAt: 2026-07-09 04:23:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "aaa333be-5549-4a61-a07e-21707bd65bb9" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_expand_extra_isize_ea", "ext4_xattr_make_inode_space" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDA0OjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYSYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX21ha2VfaW5vZGVfc3BhY2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gZXh0NCB3aGVyZSBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgIGNvdWxkIHJldHVybiBgLUVOT1NQQ2AgZXZlbiB3aGVuIGl0IHN1Y2Nlc3NmdWxseSBleHBhbmRlZCB0aGUgZXh0cmEgaXNpemUsIGJlY2F1c2UgYGVycm9yYCB3YXNuJiMzOTt0IHJlc2V0IHRvIDAgYmVmb3JlIGp1bXBpbmcgdG8gYHJldHJ5YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGZpbGVzeXN0ZW0gbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDQ6MTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2YzVmZDkwNWI0OTNlZjI0YWQ2NGU0ZjI4NWFiNjhhYjU5NjMzMGI1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgOSAwNDoxODo1NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyLmMgYi9mcy9leHQ0L3hhdHRyLmNcbmluZGV4IDk4MmExZjgzMWUyMjgyLi45ZGE1ZGZjZWE3Yjg2YiAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQveGF0dHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC94YXR0ci5jXG5AQCAtMjgzOSw2ICYjNDM7MjgzOSw3IEBAIGludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxuIFx0XHQgICAgc19taW5fZXh0cmFfaXNpemUpIHtcbiBcdFx0XHR0cmllZF9taW5fZXh0cmFfaXNpemUmIzQzOyYjNDM7O1xuIFx0XHRcdG5ld19leHRyYV9pc2l6ZSA9IHNfbWluX2V4dHJhX2lzaXplO1xuJiM0MztcdFx0XHRlcnJvciA9IDA7XG4gXHRcdFx0Z290byByZXRyeTtcbiBcdFx0fVxuIFx0XHRnb3RvIGNsZWFudXA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDQ6MTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfbWFrZV9pbm9kZV9zcGFjZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBleHQ0IHdoZXJlIGBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYWAgY291bGQgcmV0dXJuIGAtRU5PU1BDYCBldmVuIHdoZW4gaXQgc3VjY2Vzc2Z1bGx5IGV4cGFuZGVkIHRoZSBleHRyYSBpc2l6ZSwgYmVjYXVzZSBgZXJyb3JgIHdhc24mIzM5O3QgcmVzZXQgdG8gMCBiZWZvcmUganVtcGluZyB0byBgcmV0cnlgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmM1ZmQ5MDViNDkzZWYyNGFkNjRlNGYyODVhYjY4YWI1OTYzMzBiNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDkgMDQ6MTg6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyLmMgYi9mcy9leHQ0L3hhdHRyLmMKaW5kZXggOTgyYTFmODMxZTIyODIuLjlkYTVkZmNlYTdiODZiIDEwMDY0NAotLS0gYS9mcy9leHQ0L3hhdHRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC94YXR0ci5jCkBAIC0yODM5LDYgJiM0MzsyODM5LDcgQEAgaW50IGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZXh0cmFfaXNpemUsCiAJCSAgICBzX21pbl9leHRyYV9pc2l6ZSkgewogCQkJdHJpZWRfbWluX2V4dHJhX2lzaXplJiM0MzsmIzQzOzsKIAkJCW5ld19leHRyYV9pc2l6ZSA9IHNfbWluX2V4dHJhX2lzaXplOwomIzQzOwkJCWVycm9yID0gMDsKIAkJCWdvdG8gcmV0cnk7CiAJCX0KIAkJZ290byBjbGVhbnVwOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwNDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODIxCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBFeHQ0IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZnMvZXh0NC94YXR0ci5jYC4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHRoZSBjaGFuZ2UgaXMgaW5zZXJ0aW5nIGBlcnJvciA9IDA7YCByaWdodCBiZWZvcmUgdGhlIGBnb3RvIHJldHJ5O2AgbGFiZWwgd2l0aGluIHRoZSBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyB3YXMgYWRkZWQgYW5kIHdoYXQgcHJvYmxlbSBpdCYjMzk7cyBhZGRyZXNzaW5nLiBUaGUgb2J2aW91cyBuZXh0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgIGZ1bmN0aW9uIGl0c2VsZiBhbmQgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aGluIHRoYXQgY29kZSBibG9jay4gVGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsIGVkZ2UgY2FzZSBmaXgsIHBlcmhhcHMgcmVsYXRlZCB0byBlcnJvciBoYW5kbGluZyBvciByZXNvdXJjZSBtYW5hZ2VtZW50IGR1cmluZyBleHRlbmRlZCBhdHRyaWJ1dGUgb3BlcmF0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgY29udHJvbCBmbG93IGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoYXQgYHJldHJ5YCBsYWJlbCB0byBmdWxseSBncmFzcCB0aGUgaW50ZW50IG9mIHRoaXMgc2VlbWluZ2x5IG1pbm9yIGFkZGl0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDA0OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC94YXR0ci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQveGF0dHIuYz0yNjk0PXN0YXRpYyBpbnQgZXh0NF94YXR0cl9tYWtlX2lub2RlX3NwYWNlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC94YXR0ci5jLTI3NjItICovXG5mcy9leHQ0L3hhdHRyLmM6Mjc2MzppbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSxcbmZzL2V4dDQveGF0dHIuYy0yNzY0LVx0XHRcdCAgICAgICBzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlLCBoYW5kbGVfdCAqaGFuZGxlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDA0OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGl0LCBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiBhbiBleHBlcnQgaW4gZmlsZSBzeXN0ZW1zOgoKKipEZWNvbnN0cnVjdGluZyBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgKioKCkFscmlnaHQsIEkmIzM5O20gaGVhZGluZyBvdmVyIHRvIGBmcy9leHQ0L3hhdHRyLmNgIGFuZCBmb2N1c2luZyBvbiBsaW5lIDI4MzkgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGZ1bmN0aW9uIGBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYWAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBmdW5jdGlvbiAqbXVzdCogYmUgZGVhbGluZyB3aXRoIHRoZSBhbGxvY2F0aW9uIGFuZCBleHBhbnNpb24gb2YgRXh0ZW5kZWQgQXR0cmlidXRlIChFQSkgc3BhY2Ugd2l0aGluIGFuIGV4dDQgZmlsZXN5c3RlbS4gVGhlIG5hbWUgZ2l2ZXMgdGhhdCBhd2F5LCBidXQgSSB3YW50IHRvIGNvbmZpcm0gd2hhdCBpdCYjMzk7cyBzcGVjaWZpY2FsbHkgZG9pbmcgcmVsYXRlZCB0byBpbmNyZWFzaW5nIHRoZSBpbi1pbm9kZSBzaXplLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXRhaWxzIG9mIHRoZSBpbm9kZSBkYXRhIHN0cnVjdHVyZSwgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3ksIGhvdyBFQXMgYXJlIHN0b3JlZCwgYW5kIHRoZSBwb3RlbnRpYWwgY29uc3RyYWludHMgdGhhdCBhcmUgYmVpbmcgbWFuYWdlZCBoZXJlLiBUaGluZ3MgdG8gaW1tZWRpYXRlbHkgY29uc2lkZXI6IGhvdyBpdCBoYW5kbGVzIHRoZSBpX2V4dHJhX2lzaXplIGZpZWxkIG9mIHRoZSBpbm9kZSwgdGhlIHBvdGVudGlhbCBmb3IgZnJhZ21lbnRhdGlvbiBvciBuZWVkaW5nIHRvIG1vdmUgZGF0YSBhcm91bmQsIGVycm9yIGNvbmRpdGlvbnMgc3VjaCBhcyBzcGFjZSBleGhhdXN0aW9uIG9yIGNvcnJ1cHRpb24sIGFuZCBhbnkgbG9ja2luZyBtZWNoYW5pc21zIHVzZWQgZm9yIHN5bmNocm9uaXphdGlvbiB0byBtYWludGFpbiBjb25zaXN0ZW5jeSBvZiB0aGUgZmlsZSBzeXN0ZW0uIEkgYWxzbyBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBvc3NpYmxlIGZhaWx1cmUgc3RhdGVzLCBmb3IgZXhhbXBsZSwgcnVubmluZyBvdXQgb2Ygc3BhY2UuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoZSBmdW5jdGlvbi4gSSBleHBlY3QgaXQmIzM5O3MgZ29pbmcgdG8gaW5jbHVkZSBzb21lIGNoZWNrcyBmb3Igc3VmZmljaWVudCBzcGFjZSwgcGVyaGFwcyBzb21lIGJsb2NrIGFsbG9jYXRpb24gbG9naWMgaWYgaXQmIzM5O3MgZXhwYW5kaW5nIGJleW9uZCB0aGUgaW5pdGlhbCBpbi1pbm9kZSBhcmVhLCBhbmQgcHJvYmFibHkgc29tZSB3cml0aW5nIHRvIHRoZSBzdXBlcmJsb2NrIG9yIGlub2RlIGl0c2VsZiB0byByZWZsZWN0IHRoZSBjaGFuZ2VzLiBVbHRpbWF0ZWx5LCBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBuaXR0eS1ncml0dHkgb2YgaG93IGl0IGV4cGFuZHMgdGhlIGF2YWlsYWJsZSBzcGFjZSBmb3IgRUFzIGluIHRoZSBpbm9kZS4gTGV0JiMzOTtzIHNlZSBob3cgaXQgd29ya3MhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDQ6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L3hhdHRyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyODAwOlx0XHQgKiBFQSBibG9jayBjYW4gaG9sZCBuZXdfZXh0cmFfaXNpemUgYnl0ZXMuXG4yODAxOlx0XHQgKi9cbjI4MDI6XHRcdGlmIChFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmlsZV9hY2wpIHtcbjI4MDM6XHRcdFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbjI4MDQ6XHRcbjI4MDU6XHRcdFx0YmggPSBleHQ0X3NiX2JyZWFkKGlub2RlLVx1MDAzZWlfc2IsIEVYVDRfSShpbm9kZSktXHUwMDNlaV9maWxlX2FjbCwgUkVRX1BSSU8pO1xuMjgwNjpcdFx0XHRpZiAoSVNfRVJSKGJoKSkge1xuMjgwNzpcdFx0XHRcdGVycm9yID0gUFRSX0VSUihiaCk7XG4yODA4Olx0XHRcdFx0Z290byBjbGVhbnVwO1xuMjgwOTpcdFx0XHR9XG4yODEwOlx0XHRcdGVycm9yID0gZXh0NF94YXR0cl9jaGVja19ibG9jayhpbm9kZSwgYmgpO1xuMjgxMTpcdFx0XHRpZiAoZXJyb3IpIHtcbjI4MTI6XHRcdFx0XHRicmVsc2UoYmgpO1xuMjgxMzpcdFx0XHRcdGdvdG8gY2xlYW51cDtcbjI4MTQ6XHRcdFx0fVxuMjgxNTpcdFx0XHRiYXNlID0gQkhEUihiaCk7XG4yODE2Olx0XHRcdGVuZCA9IGJoLVx1MDAzZWJfZGF0YSAmIzQzOyBiaC1cdTAwM2ViX3NpemU7XG4yODE3Olx0XHRcdG1pbl9vZmZzID0gZW5kIC0gYmFzZTtcbjI4MTg6XHRcdFx0YmZyZWUgPSBleHQ0X3hhdHRyX2ZyZWVfc3BhY2UoQkZJUlNUKGJoKSwgXHUwMDI2bWluX29mZnMsIGJhc2UsXG4yODE5Olx0XHRcdFx0XHRcdCAgICAgIE5VTEwpO1xuMjgyMDpcdFx0XHRicmVsc2UoYmgpO1xuMjgyMTpcdFx0XHRpZiAoYmZyZWUgJiM0MzsgaWZyZWUgXHUwMDNjIGlzaXplX2RpZmYpIHtcbjI4MjI6XHRcdFx0XHRpZiAoIXRyaWVkX21pbl9leHRyYV9pc2l6ZSBcdTAwMjZcdTAwMjYgc19taW5fZXh0cmFfaXNpemUpIHtcbjI4MjM6XHRcdFx0XHRcdHRyaWVkX21pbl9leHRyYV9pc2l6ZSYjNDM7JiM0Mzs7XG4yODI0Olx0XHRcdFx0XHRuZXdfZXh0cmFfaXNpemUgPSBzX21pbl9leHRyYV9pc2l6ZTtcbjI4MjU6XHRcdFx0XHRcdGdvdG8gcmV0cnk7XG4yODI2Olx0XHRcdFx0fVxuMjgyNzpcdFx0XHRcdGVycm9yID0gLUVOT1NQQztcbjI4Mjg6XHRcdFx0XHRnb3RvIGNsZWFudXA7XG4yODI5Olx0XHRcdH1cbjI4MzA6XHRcdH0gZWxzZSB7XG4yODMxOlx0XHRcdGJmcmVlID0gaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZTtcbjI4MzI6XHRcdH1cbjI4MzM6XHRcbjI4MzQ6XHRcdGVycm9yID0gZXh0NF94YXR0cl9tYWtlX2lub2RlX3NwYWNlKGhhbmRsZSwgaW5vZGUsIHJhd19pbm9kZSxcbjI4MzU6XHRcdFx0XHRcdFx0ICAgIGlzaXplX2RpZmYsIGlmcmVlLCBiZnJlZSxcbjI4MzY6XHRcdFx0XHRcdFx0ICAgIFx1MDAyNnRvdGFsX2lubyk7XG4yODM3Olx0XHRpZiAoZXJyb3IpIHtcbjI4Mzg6XHRcdFx0aWYgKGVycm9yID09IC1FTk9TUEMgXHUwMDI2XHUwMDI2ICF0cmllZF9taW5fZXh0cmFfaXNpemUgXHUwMDI2XHUwMDI2XG4yODM5Olx0XHRcdCAgICBzX21pbl9leHRyYV9pc2l6ZSkge1xuMjg0MDpcdFx0XHRcdHRyaWVkX21pbl9leHRyYV9pc2l6ZSYjNDM7JiM0Mzs7XG4yODQxOlx0XHRcdFx0bmV3X2V4dHJhX2lzaXplID0gc19taW5fZXh0cmFfaXNpemU7XG4yODQyOlx0XHRcdFx0ZXJyb3IgPSAwO1xuMjg0MzpcdFx0XHRcdGdvdG8gcmV0cnk7XG4yODQ0Olx0XHRcdH1cbjI4NDU6XHRcdFx0Z290byBjbGVhbnVwO1xuMjg0NjpcdFx0fVxuMjg0NzpcdHNoaWZ0OlxuMjg0ODpcdFx0LyogQWRqdXN0IHRoZSBvZmZzZXRzIGFuZCBzaGlmdCB0aGUgcmVtYWluaW5nIGVudHJpZXMgYWhlYWQgKi9cbjI4NDk6XHRcdGV4dDRfeGF0dHJfc2hpZnRfZW50cmllcyhJRklSU1QoaGVhZGVyKSwgRVhUNF9JKGlub2RlKS1cdTAwM2VpX2V4dHJhX2lzaXplXG4yODUwOlx0XHRcdFx0LSBuZXdfZXh0cmFfaXNpemUsICh2b2lkICopcmF3X2lub2RlICYjNDM7XG4yODUxOlx0XHRcdFx0RVhUNF9HT09EX09MRF9JTk9ERV9TSVpFICYjNDM7IG5ld19leHRyYV9pc2l6ZSxcbjI4NTI6XHRcdFx0XHQodm9pZCAqKWhlYWRlciwgdG90YWxfaW5vKTtcbjI4NTM6XHRcdEVYVDRfSShpbm9kZSktXHUwMDNlaV9leHRyYV9pc2l6ZSA9IG5ld19leHRyYV9pc2l6ZTtcbjI4NTQ6XHRcbjI4NTU6XHRcdGlmIChleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpXG4yODU2Olx0XHRcdGVycm9yID0gZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhpbm9kZSk7XG4yODU3Olx0XG4yODU4Olx0Y2xlYW51cDpcbjI4NTk6XHRcdGlmIChlcnJvciBcdTAwMjZcdTAwMjYgKG1udF9jb3VudCAhPSBsZTE2X3RvX2NwdShzYmktXHUwMDNlc19lcy1cdTAwM2VzX21udF9jb3VudCkpKSB7XG4yODYwOlx0XHRcdGV4dDRfd2FybmluZyhpbm9kZS1cdTAwM2VpX3NiLCBcJiMzNDtVbmFibGUgdG8gZXhwYW5kIGlub2RlICVsbHUuIERlbGV0ZSBzb21lIEVBcyBvciBydW4gZTJmc2NrLlwmIzM0OyxcbjI4NjE6XHRcdFx0XHQgICAgIGlub2RlLVx1MDAzZWlfaW5vKTtcbjI4NjI6XHRcdFx0bW50X2NvdW50ID0gbGUxNl90b19jcHUoc2JpLVx1MDAzZXNfZXMtXHUwMDNlc19tbnRfY291bnQpO1xuMjg2MzpcdFx0fVxuMjg2NDpcdFx0cmV0dXJuIGVycm9yO1xuMjg2NTpcdH1cbjI4NjY6XHRcbjI4Njc6XHQjZGVmaW5lIEVJQV9JTkNSIDE2IC8qIG11c3QgYmUgMl5uICovXG4yODY4Olx0I2RlZmluZSBFSUFfTUFTSyAoRUlBX0lOQ1IgLSAxKVxuMjg2OTpcdFxuMjg3MDpcdC8qIEFkZCB0aGUgbGFyZ2UgeGF0dHIgQGlub2RlIGludG8gQGVhX2lub2RlX2FycmF5IGZvciBkZWZlcnJlZCBpcHV0KCkuXG4yODcxOlx0ICogSWYgQGVhX2lub2RlX2FycmF5IGlzIG5ldyBvciBmdWxsIGl0IHdpbGwgYmUgZ3Jvd24gYW5kIHRoZSBvbGRcbjI4NzI6XHQgKiBjb250ZW50cyBjb3BpZWQgb3Zlci5cbjI4NzM6XHQgKi9cbjI4NzQ6XHRzdGF0aWMgaW50XG4yODc1Olx0ZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbjI4NzY6XHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuMjg3NzpcdHtcbjI4Nzg6XHRcdGlmICgqZWFfaW5vZGVfYXJyYXkgPT0gTlVMTCkge1xuMjg3OTpcdFx0XHQvKlxuMjg4MDpcdFx0XHQgKiBTdGFydCB3aXRoIDE1IGlub2Rlcywgc28gaXQgZml0cyBpbnRvIGEgcG93ZXItb2YtdHdvIHNpemUuXG4yODgxOlx0XHRcdCAqL1xuMjg4MjpcdFx0XHQoKmVhX2lub2RlX2FycmF5KSA9IGttYWxsb2NfZmxleCgqKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsXG4yODgzOlx0XHRcdFx0XHRcdFx0IEVJQV9NQVNLLCBHRlBfTk9GUyk7XG4yODg0Olx0XHRcdGlmICgqZWFfaW5vZGVfYXJyYXkgPT0gTlVMTClcbjI4ODU6XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjI4ODY6XHRcdFx0KCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgPSAwO1xuMjg4NzpcdFx0fSBlbHNlIGlmICgoKCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgXHUwMDI2IEVJQV9NQVNLKSA9PSBFSUFfTUFTSykge1xuMjg4ODpcdFx0XHQvKiBleHBhbmQgdGhlIGFycmF5IG9uY2UgYWxsIDE1ICYjNDM7IG4gKiAxNiBzbG90cyBhcmUgZnVsbCAqL1xuMjg4OTpcdFx0XHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqbmV3X2FycmF5ID0gTlVMTDtcbjI4OTA6XHRcbjI4OTE6XHRcdFx0bmV3X2FycmF5ID0ga21hbGxvY19mbGV4KCoqZWFfaW5vZGVfYXJyYXksIGlub2RlcyxcbjI4OTI6XHRcdFx0XHRcdFx0ICgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50ICYjNDM7IEVJQV9JTkNSLFxuMjg5MzpcdFx0XHRcdFx0XHQgR0ZQX05PRlMpO1xuMjg5NDpcdFx0XHRpZiAobmV3X2FycmF5ID09IE5VTEwpXG4yODk1Olx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4yODk2Olx0XHRcdG1lbWNweShuZXdfYXJyYXksICplYV9pbm9kZV9hcnJheSxcbjI4OTc6XHRcdFx0ICAgICAgIHN0cnVjdF9zaXplKCplYV9pbm9kZV9hcnJheSwgaW5vZGVzLFxuMjg5ODpcdFx0XHRcdFx0ICAgKCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQpKTtcbjI4OTk6XHRcdFx0a2ZyZWUoKmVhX2lub2RlX2FycmF5KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwNDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Mzk3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBmaXgsIGJ1dCB0aGUgaW1wbGljYXRpb25zIGFyZSBpbXBvcnRhbnQsIGVzcGVjaWFsbHkgaW4gYSBmaWxlIHN5c3RlbSBjb250ZXh0LiBUaGUgY29yZSBvZiBpdCBhZGRzIGBlcnJvciA9IDA7YCByaWdodCBiZWZvcmUgdGhlIGBnb3RvIHJldHJ5O2Agc3RhdGVtZW50IGluIGBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgaW5kZWVkIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCBhIGNydWNpYWwgb25lLiBXaXRob3V0IHJlc2V0dGluZyBgZXJyb3JgIHRvIHplcm8sIHRoZSBmdW5jdGlvbiBjb3VsZCBwb3RlbnRpYWxseSBwcm9wYWdhdGUgYSBwcmV2aW91cyBlcnJvciBjb2RlLiBUaGlzIGNvdWxkIGxlYWQgdG8gYSBjYXNjYWRpbmcgZmFpbHVyZSBmdXJ0aGVyIGRvd24gdGhlIGxpbmUsIG9yLCB3b3JzZSwgcmV0dXJuIGFuIGluY29ycmVjdCBlcnJvciBzdGF0ZS4KClRvIHByb3Blcmx5IGFzc2VzcyB0aGlzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHdpdGhpbiBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgLiBUaGUga2V5IGlzIGxvY2F0aW5nIHRoYXQgYHJldHJ5OmAgbGFiZWwgdG8gc2VlIHdoZXJlIHRoaXMgJiMzNDtnb3RvJiMzNDsgaXMgYWN0dWFsbHkgdGFraW5nIHVzLiBJcyBpdCB3aXRoaW4gYSBsb29wLCBhIGNvbmRpdGlvbmFsLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGNvbnRleHQgb2YgdGhlIHJldHJ5IGlzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIGltcGFjdC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgaWRlbnRpZnkgaG93IHRoZSBmdW5jdGlvbiBoYW5kbGVzIGVycm9ycyBpbiBnZW5lcmFsLiBPbmNlIEkmIzM5O3ZlIG1hcHBlZCB0aGlzIGluIG15IG1pbmQsIHRoZSBzaWduaWZpY2FuY2Ugb2Ygc2V0dGluZyBgZXJyb3JgIHRvIDAgd2lsbCBiZWNvbWUgY2xlYXIuIFVuZGVyc3RhbmRpbmcgdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGlzIGZ1bmN0aW9uIGlzIGNydWNpYWwgdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5IGFuZCBhdm9pZCBwb3RlbnRpYWwgZmlsZSBzeXN0ZW0gY29ycnVwdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwNDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQveGF0dHIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjc2MDpcdCAqIEV4cGFuZCBhbiBpbm9kZSBieSBuZXdfZXh0cmFfaXNpemUgYnl0ZXMgd2hlbiBFQXMgYXJlIHByZXNlbnQuXG4yNzYxOlx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJyb3IgbnVtYmVyIG9uIGZhaWx1cmUuXG4yNzYyOlx0ICovXG4yNzYzOlx0aW50IGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZXh0cmFfaXNpemUsXG4yNzY0Olx0XHRcdFx0ICAgICAgIHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUsIGhhbmRsZV90ICpoYW5kbGUpXG4yNzY1Olx0e1xuMjc2NjpcdFx0c3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfaGVhZGVyICpoZWFkZXI7XG4yNzY3Olx0XHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuMjc2ODpcdFx0c3RhdGljIHVuc2lnbmVkIGludCBtbnRfY291bnQ7XG4yNzY5Olx0XHRzaXplX3QgbWluX29mZnM7XG4yNzcwOlx0XHRzaXplX3QgaWZyZWUsIGJmcmVlO1xuMjc3MTpcdFx0aW50IHRvdGFsX2lubztcbjI3NzI6XHRcdHZvaWQgKmJhc2UsICplbmQ7XG4yNzczOlx0XHRpbnQgZXJyb3IgPSAwLCB0cmllZF9taW5fZXh0cmFfaXNpemUgPSAwO1xuMjc3NDpcdFx0aW50IHNfbWluX2V4dHJhX2lzaXplID0gbGUxNl90b19jcHUoc2JpLVx1MDAzZXNfZXMtXHUwMDNlc19taW5fZXh0cmFfaXNpemUpO1xuMjc3NTpcdFx0aW50IGlzaXplX2RpZmY7XHQvKiBIb3cgbXVjaCBkbyB3ZSBuZWVkIHRvIGdyb3cgaV9leHRyYV9pc2l6ZSAqL1xuMjc3NjpcdFxuMjc3NzpcdHJldHJ5OlxuMjc3ODpcdFx0aXNpemVfZGlmZiA9IG5ld19leHRyYV9pc2l6ZSAtIEVYVDRfSShpbm9kZSktXHUwMDNlaV9leHRyYV9pc2l6ZTtcbjI3Nzk6XHRcdGlmIChFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZXh0cmFfaXNpemUgXHUwMDNlPSBuZXdfZXh0cmFfaXNpemUpXG4yNzgwOlx0XHRcdHJldHVybiAwO1xuMjc4MTpcdFxuMjc4MjpcdFx0aGVhZGVyID0gSUhEUihpbm9kZSwgcmF3X2lub2RlKTtcbjI3ODM6XHRcbjI3ODQ6XHRcdC8qXG4yNzg1Olx0XHQgKiBDaGVjayBpZiBlbm91Z2ggZnJlZSBzcGFjZSBpcyBhdmFpbGFibGUgaW4gdGhlIGlub2RlIHRvIHNoaWZ0IHRoZVxuMjc4NjpcdFx0ICogZW50cmllcyBhaGVhZCBieSBuZXdfZXh0cmFfaXNpemUuXG4yNzg3Olx0XHQgKi9cbjI3ODg6XHRcbjI3ODk6XHRcdGJhc2UgPSBJRklSU1QoaGVhZGVyKTtcbjI3OTA6XHRcdGVuZCA9IElUQUlMKGlub2RlLCByYXdfaW5vZGUpO1xuMjc5MTpcdFx0bWluX29mZnMgPSBlbmQgLSBiYXNlO1xuMjc5MjpcdFx0dG90YWxfaW5vID0gc2l6ZW9mKHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2hlYWRlcikgJiM0Mzsgc2l6ZW9mKHUzMik7XG4yNzkzOlx0XG4yNzk0Olx0XHRpZnJlZSA9IGV4dDRfeGF0dHJfZnJlZV9zcGFjZShiYXNlLCBcdTAwMjZtaW5fb2ZmcywgYmFzZSwgXHUwMDI2dG90YWxfaW5vKTtcbjI3OTU6XHRcdGlmIChpZnJlZSBcdTAwM2U9IGlzaXplX2RpZmYpXG4yNzk2Olx0XHRcdGdvdG8gc2hpZnQ7XG4yNzk3Olx0XG4yNzk4Olx0XHQvKlxuMjc5OTpcdFx0ICogRW5vdWdoIGZyZWUgc3BhY2UgaXNuJiMzOTt0IGF2YWlsYWJsZSBpbiB0aGUgaW5vZGUsIGNoZWNrIGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDQ6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUwNAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgQnVnIGluIEV4dDQgWGF0dHIgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBleHQ0IGNvZGUsIGFuZCBJJiMzOTt2ZSBnb3QgYSBzY2VuYXJpbyBwbGF5aW5nIG91dCBpbiBteSBoZWFkLiBJZiBgZXJyb3JgIGlzbiYjMzk7dCBleHBsaWNpdGx5IHJlc2V0IHRvIHplcm8gYWZ0ZXIgYSBmYWlsdXJlIGFuZCB3ZSBlbmQgdXAganVtcGluZyBiYWNrIHRvIGByZXRyeTpgLCB0aGVyZSYjMzk7cyBhIHByb2JsZW0uIEF0IGByZXRyeTpgLCBgaXNpemVfZGlmZmAgaXMgcmVjb21wdXRlZCwgYW5kIGlmIHRoZSBhdmFpbGFibGUgc3BhY2UgaXMgc3VmZmljaWVudCwgaW5kaWNhdGVkIGJ5IGBpZnJlZSAmZ3Q7PSBpc2l6ZV9kaWZmYCwgd2UgYnJhbmNoIHRvIGBzaGlmdDpgLgoKTm93LCBhdCBgc2hpZnQ6YCwgdGhlIHZhbHVlIG9mIGBlcnJvcmAgaXMgb25seSB1cGRhdGVkIGlmIHRoZSBpbm9kZSBoYXMgaW5saW5lIGRhdGEuIElmIGl0ICpkb2VzbiYjMzk7dCogaGF2ZSBpbmxpbmUgZGF0YSwgd2hpY2ggaXMgdGhlIG1vcmUgY29tbW9uIHBhdGgsIHRoZSBjb2RlIGZhbGxzIHRocm91Z2ggdG8gYGNsZWFudXA6YC4gQW5kIGF0IGBjbGVhbnVwOmAsIGl0ICpyZXR1cm5zKiB0aGUgdmFsdWUgb2YgYGVycm9yYC4KClRoZSBrZXkgaXNzdWUgaXMgdGhpczogSWYgdGhlIGluaXRpYWwgYGVycm9yYCB3YXMgYC1FTk9TUENgLCBiZWNhdXNlIGBleHQ0X3hhdHRyX21ha2VfaW5vZGVfc3BhY2VgIGZhaWxlZCwgdGhhdCBgLUVOT1NQQ2AgZ2V0cyBjYXJyaWVkIGFsbCB0aGUgd2F5IHRocm91Z2gsIGV2ZW4gdGhvdWdoIHRoZSBzaGlmdGluZyBwcm9jZXNzIGl0c2VsZiBtaWdodCBoYXZlIGJlZW4gZW50aXJlbHkgc3VjY2Vzc2Z1bCEgSXQgd291bGQgcmV0dXJuIGAtRU5PU1BDYCBldmVuIHRob3VnaCBpdCBzdWNjZXNzZnVsbHkgc2hpZnRlZCBlbnRyaWVzIGFuZCBmaXhlZCB0aGUgcHJvYmxlbSEKCldhaXQsIGxldCBtZSB3YWxrIHRocm91Z2ggaXQgYWdhaW4uLi4gYC1FTk9TUENgIGNhdXNlcyBhIGp1bXAgYmFjayB0byByZXRyeSwgYW5kIHRoZW4gaWYgdGhlIHNwYWNlIGhhcyBiZWVuIGZyZWVkIHdlIGhpdCBzaGlmdCwgdGhlbiBpdCByZXR1cm5zIGBlcnJvcmAgd2hpY2ggaXMgYC1FTk9TUENgLiBUaGF0JiMzOTtzIGl0LCBpdCYjMzk7cyByZXR1cm5pbmcgYW4gZXJyb3IgY29kZSBpbmRpY2F0aW5nIHRoZSBzcGFjZSBpcyBmdWxsLCBldmVuIGlmIHRoZSBlcnJvciBjb25kaXRpb24gaGFzIGJlZW4gcmVzb2x2ZWQhIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBidWcuCgpTbywgdGhlIGZpeCBpcyBzdHJhaWdodGZvcndhcmQ6IHdlIG5lZWQgdG8gZXhwbGljaXRseSBzZXQgYGVycm9yID0gMDtgIGJlZm9yZSB0aGUganVtcCB0byBgcmV0cnk6YC4gVGhhdCBlbnN1cmVzIGEgc3VjY2Vzc2Z1bCBvcGVyYXRpb24gcmV0dXJucyBhIHN1Y2Nlc3MgY29kZS4KClJpZ2h0LCBsZXQmIzM5O3MgbWFrZSBzdXJlIHRoaXMgZml4IGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQuIE5lZWRzIEVYVDRfRlMuIE5lZWQgdG8gY2hlY2sgYGZzL2V4dDQvS2NvbmZpZ2AgdG8gc2VlIHRoZSBjb25maWcgb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDQ6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEVYVDRfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9leHQ0L0tjb25maWc6Mjpjb25maWcgRVhUNF9GU1xuZnMvZXh0NC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVwmIzM0O1xuLS1cbmZzL2V4dDQvS2NvbmZpZz0zNT1jb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcbi0tXG5mcy9leHQ0L0tjb25maWctNDUtXG5mcy9leHQ0L0tjb25maWc6NDY6Y29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMXG5mcy9leHQ0L0tjb25maWctNDctXHRib29sIFwmIzM0O0V4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWctNTUtXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcbmZzL2V4dDQvS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7RXh0NCBTZWN1cml0eSBMYWJlbHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDQ6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ1MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzLCBkaXN0aWxsZWQgaW50byBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5IGFzIHlvdSByZXF1ZXN0ZWQsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSB3ZWxsLXZlcnNlZCBpbiBmaWxlc3lzdGVtcyBhbmQga2VybmVsIGludGVybmFscy4KCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBFWFQ0IFhBVFRScyoqCgpSaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgRXh0ZW5kZWQgQXR0cmlidXRlcyAoeGF0dHJzKSB3aXRoaW4gdGhlIEVYVDQgZmlsZXN5c3RlbS4gVGhlIGltcGxpY2F0aW9uIGlzIEVYVDQgaXMgdGhlIHByaW1hcnkgZm9jdXMsIHdoaWNoIGlzIG5vIHN1cnByaXNlIGdpdmVuIGl0cyBwcmV2YWxlbmNlLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IGFyZSB0aGVyZSBvdGhlciBmaWxlIHN5c3RlbXMgYXQgcGxheSBoZXJlPyBBcmUgdGhlcmUgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBlaXRoZXIgY29tcGlsZS10aW1lIG9yIHJ1bnRpbWUsIHRoYXQgY291bGQgaW5mbHVlbmNlIGhvdyB0aGVzZSB4YXR0cnMgYmVoYXZlIG9yIGFyZSBldmVuIGVuYWJsZWQ/CgpNeSBuZXh0IHBvaW50IGlzIHRvIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBjb2RlIGxvY2F0aW9uLiBJIHJlbWVtYmVyIHRoYXQgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gZm9yIHhhdHRycyBpbiBFWFQ0IHJlc2lkZXMgd2l0aGluIGBmcy9leHQ0L3hhdHRyLmNgLiBTbywgSSYjMzk7bGwgc3RhcnQgdGhlcmUuCgpCdXQgYmVmb3JlIGRpdmluZyBkZWVwIGludG8gdGhlIHNvdXJjZSBjb2RlLCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIHRoYXQgYHhhdHRyLmNgIGZpbGUgaXMgY29tcGlsZWQgaW4gY29uZGl0aW9uYWxseS4gSXMgdGhpcyBmdW5jdGlvbmFsaXR5IGEgbW9kdWxlLCBvciBpcyBpdCBjb21waWxlZCBpbiBkZXBlbmRpbmcgb24gc29tZSBLY29uZmlnIG9wdGlvbj8gS25vd2luZyB0aGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGl0cyBhdmFpbGFiaWxpdHkgYWNyb3NzIHZhcmlvdXMga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFuZCBkaXN0cmlidXRpb25zLiBJIHNob3VsZCBwcm9iYWJseSBxdWlja2x5IGNoZWNrIGlmIHRoZXJlIGlzIGEgYEtjb25maWdgIGZvciB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwNDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4YXR0ci5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L01ha2VmaWxlPTg9ZXh0NC15XHQ6PSBiYWxsb2MubyBiaXRtYXAubyBibG9ja192YWxpZGl0eS5vIGRpci5vIGV4dDRfamJkMi5vIGV4dGVudHMubyBcXFxuLS1cbmZzL2V4dDQvTWFrZWZpbGUtMTEtXHRcdG1tcC5vIG1vdmVfZXh0ZW50Lm8gbmFtZWkubyBwYWdlLWlvLm8gcmVhZHBhZ2UubyByZXNpemUubyBcXFxuZnMvZXh0NC9NYWtlZmlsZToxMjpcdFx0c3VwZXIubyBzeW1saW5rLm8gc3lzZnMubyB4YXR0ci5vIHhhdHRyX2h1cmQubyB4YXR0cl90cnVzdGVkLm8gXFxcbmZzL2V4dDQvTWFrZWZpbGUtMTMtXHRcdHhhdHRyX3VzZXIubyBmYXN0X2NvbW1pdC5vIG9ycGhhbi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDA0OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NDAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIEVYVDRfRlMgYW5kIEV4cGFuZGVkIGlfc2l6ZSoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBFWFQ0IHN0dWZmIGFnYWluLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSBmYWN0IHRoYXQsIHByZXR0eSBtdWNoIGFsd2F5cywgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHN5c3RlbSBjb21waWxlZCB3aXRoIGBFWFQ0X0ZTYC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUsIHRoZSBmb3VuZGF0aW9uLiBCdXQgSSYjMzk7bSBhbHNvIHBvbmRlcmluZyBob3cgYGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhYCBmaXRzIGludG8gdGhlIHBpY3R1cmUuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGZvciBleHBhbmRpbmcgdGhlIGlub2RlJiMzOTtzIGV4dHJhIGlfc2l6ZSBmaWVsZCwgYW5kIEkgbmVlZCB0byBjb25zaWRlciBpdHMgdXNhZ2UgY29udGV4dC4gSSBoYXZlIHRvIGRyaWxsIGRvd24gZnVydGhlcjsgaXMgaXQgY2FsbGVkIGp1c3QgZ2VuZXJhbGx5LCBvciBmcm9tIHNvbWUgc3BlY2lmaWMgYXJlYSBvZiBjb2RlIHRoYXQgSSBzaG91bGQgYmUga2V5aW5nIG9uPyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIGNoYWluIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDQ6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2lub2RlLmM9NjQzOT1zdGF0aWMgaW50IF9fZXh0NF9leHBhbmRfZXh0cmFfaXNpemUoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2lub2RlLmMtNjQ4NS1cdC8qIHRyeSB0byBleHBhbmQgd2l0aCBFQXMgcHJlc2VudCAqL1xuZnMvZXh0NC9pbm9kZS5jOjY0ODY6XHRlcnJvciA9IGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhKGlub2RlLCBuZXdfZXh0cmFfaXNpemUsXG5mcy9leHQ0L2lub2RlLmMtNjQ4Ny1cdFx0XHRcdFx0ICAgcmF3X2lub2RlLCBoYW5kbGUpO1xuLS1cbmZzL2V4dDQveGF0dHIuYz0yNjk0PXN0YXRpYyBpbnQgZXh0NF94YXR0cl9tYWtlX2lub2RlX3NwYWNlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC94YXR0ci5jLTI3NjItICovXG5mcy9leHQ0L3hhdHRyLmM6Mjc2MzppbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSxcbmZzL2V4dDQveGF0dHIuYy0yNzY0LVx0XHRcdCAgICAgICBzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlLCBoYW5kbGVfdCAqaGFuZGxlKVxuLS1cbmZzL2V4dDQveGF0dHIuaD0xOTI9ZXh0ZXJuIHZvaWQgZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICphcnJheSk7XG5mcy9leHQ0L3hhdHRyLmgtMTkzLVxuZnMvZXh0NC94YXR0ci5oOjE5NDpleHRlcm4gaW50IGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZXh0cmFfaXNpemUsXG5mcy9leHQ0L3hhdHRyLmgtMTk1LVx0XHRcdCAgICBzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlLCBoYW5kbGVfdCAqaGFuZGxlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDQ6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU5MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgc2Vhc29uZWQgZXhwZXJ0OgoKKipBbmFseXppbmcgdGhlIGBfX2V4dDRfZXhwYW5kX2V4dHJhX2lzaXplYCBGdW5jdGlvbioqCgpSaWdodCwgc28gdGhpcyBjYWxsIG9yaWdpbmF0ZXMgd2l0aGluIHRoZSBgX19leHQ0X2V4cGFuZF9leHRyYV9pc2l6ZWAgZnVuY3Rpb24sIGZvdW5kIGluIHRoZSBgZnMvZXh0NC9pbm9kZS5jYCBmaWxlLiBJbnRlcmVzdGluZy4gTXkgaW5pdGlhbCBmb2N1cyBpcyBuYXR1cmFsbHkgZHJhd24gdG8gYF9fZXh0NF9leHBhbmRfZXh0cmFfaXNpemVgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGFjY29tcGxpc2guIEdpdmVuIHRoZSBuYW1lLCBpdCYjMzk7cyBjbGVhciB0aGlzIGRlYWxzIHdpdGggZXhwYW5kaW5nIHRoZSAmIzM0O2V4dHJhIGlfc2l6ZSYjMzQ7IGF0dHJpYnV0ZSB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbS4gSSBpbW1lZGlhdGVseSB3YW50IHRvIGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiwgYW5kIGV2YWx1YXRlIGl0cyBwdXJwb3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwNDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2V4dDRfZXhwYW5kX2V4dHJhX2lzaXplJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9pbm9kZS5jPTY0MTU9ZXh0NF9yZXNlcnZlX2lub2RlX3dyaXRlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTY0MzgtXG5mcy9leHQ0L2lub2RlLmM6NjQzOTpzdGF0aWMgaW50IF9fZXh0NF9leHBhbmRfZXh0cmFfaXNpemUoc3RydWN0IGlub2RlICppbm9kZSxcbmZzL2V4dDQvaW5vZGUuYy02NDQwLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgbmV3X2V4dHJhX2lzaXplLFxuLS1cbmZzL2V4dDQvaW5vZGUuYz02NTAyPXN0YXRpYyBpbnQgZXh0NF90cnlfdG9fZXhwYW5kX2V4dHJhX2lzaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTY1MjgtXG5mcy9leHQ0L2lub2RlLmM6NjUyOTpcdGVycm9yID0gX19leHQ0X2V4cGFuZF9leHRyYV9pc2l6ZShpbm9kZSwgbmV3X2V4dHJhX2lzaXplLCBcdTAwMjZpbG9jLFxuZnMvZXh0NC9pbm9kZS5jLTY1MzAtXHRcdFx0XHRcdCAgaGFuZGxlLCBcdTAwMjZub19leHBhbmQpO1xuLS1cbmZzL2V4dDQvaW5vZGUuYz02NTM2PWludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvaW5vZGUuYy02NTY2LVxuZnMvZXh0NC9pbm9kZS5jOjY1Njc6XHRlcnJvciA9IF9fZXh0NF9leHBhbmRfZXh0cmFfaXNpemUoaW5vZGUsIG5ld19leHRyYV9pc2l6ZSwgaWxvYyxcbmZzL2V4dDQvaW5vZGUuYy02NTY4LVx0XHRcdFx0XHQgIGhhbmRsZSwgXHUwMDI2bm9fZXhwYW5kKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDQ6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE4MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGaXhpbmcgYSBTdWJ0bGUgWGF0dHIgRXhwYW5zaW9uIEJ1ZyBpbiBleHQ0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBzb21lIGNvZGUgcmVsYXRlZCB0byBleHQ0JiMzOTtzIGV4dGVuZGVkIGF0dHJpYnV0ZSAoeGF0dHIpIGhhbmRsaW5nLiBTcGVjaWZpY2FsbHksIG15IGZvY3VzIGlzIG9uIGhvdyBpdCBoYW5kbGVzIGV4cGFuZGluZyB0aGUgZXh0cmEgaW5vZGUgc2l6ZS4gSSBzZWUgdGhhdCBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVgIGFuZCBgZXh0NF90cnlfdG9fZXhwYW5kX2V4dHJhX2lzaXplYCBhcmUgdGhlIGVudHJ5IHBvaW50cyBoZXJlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgY29ycmVjdGlvbiB3aXRoaW4gdGhlIGV4dDQgeGF0dHIgc3lzdGVtLgoKVGhlIGNvcmUgb2YgdGhlIGlzc3VlIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYWAuIEl0IGxvb2tzIGxpa2UgdGhlcmUmIzM5O3MgYSBidWcgd2hlcmUgdGhpcyBmdW5jdGlvbiBjb3VsZCByZXR1cm4gYC1FTk9TUENgLCBldmVuIGFmdGVyIGl0IGFjdHVhbGx5ICpkaWQqIG1hbmFnZSB0byBleHBhbmQgdGhlIGV4dHJhIGlzaXplIHN1Y2Nlc3NmdWxseS4gVGhlIHByb2JsZW0gYm9pbHMgZG93biB0byBhbiBlcnJvciBjb2RlIG5vdCBiZWluZyBwcm9wZXJseSByZXNldCBiZWZvcmUgYSBgcmV0cnlgIGp1bXAuIFRoaXMgY2FuIGxlYWQgdG8gdGhlIG1pc2xlYWRpbmcgZXJyb3IgbWVzc2FnZS4KCkkmIzM5O20ga2V5aW5nIGluIG9uIGBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYWAgYXMgdGhlIHByaW1hcnkgZnVuY3Rpb24gaW52b2x2ZWQgaW4gdGhpcyBwYXJ0aWN1bGFyIGZpeC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyBhbmQgY29uZmlybSB0aGUgZXhhY3QgcGF0aCB0aGUgYnVnIHRha2VzLgoKSSBzaG91bGQgYWxzbyBxdWlja2x5IGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIGBDT05GSUdfRVhUNF9GU2AsIG9mIGNvdXJzZSwgaXMgdGhlIHJlbGV2YW50IGZpbGVzeXN0ZW0gY29uZmlndXJhdGlvbi4gQnV0IGlzIGBDT05GSUdfRVhUNF9GU19YQVRUUmAgYWxzbyByZXF1aXJlZD8gTGV0IG1lIHJ1biBhIHF1aWNrIGdyZXAgYW5kIGRvdWJsZS1jaGVjayB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnkgZGVwZW5kZW5jaWVzIGluIHRoZSBidWlsZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDQ6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfRVhUNF9GU19YQVRUUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDQ6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc3MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkRlbHZpbmcgRGVlcGVyIGludG8gZXh0NCB4YXR0cnMqKgoKUmlnaHQsIHNvLCB0aGUgcXVlc3Rpb24gb2YgZXh0NCBleHRlbmRlZCBhdHRyaWJ1dGVzLi4uSSAqa25vdyogSSYjMzk7bSBub3QgY3JhenksIGV4dDQgeGF0dHJzIGFyZSBiYXNpY2FsbHkgYWx3YXlzIGVuYWJsZWQsIGFyZW4mIzM5O3QgdGhleT8gSXQmIzM5O3Mgbm90IGEgY29uZmlndXJhYmxlIG9wdGlvbiBsaWtlIHdpdGggc29tZSBvdGhlciBmaWxlc3lzdGVtcy4gTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgbXkgbWVudGFsIG1vZGVsIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBhY2N1cmF0ZS4gSSBuZWVkIHRvIHJldmlzaXQgdGhhdCBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgIGZ1bmN0aW9uLiBHb3R0YSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaGFuZGxpbmcgb2YgdGhlIGV4dHJhIGlub2RlIHNpemUgZm9yIHN0b3JpbmcgZXh0ZW5kZWQgYXR0cmlidXRlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJ4oCZbSBub3QgbWlzc2luZyBhbnl0aGluZyBjcnVjaWFsIGFib3V0IGhvdyBpdOKAmXMgbWFuYWdlZCBkdXJpbmcgaW5vZGUgYWxsb2NhdGlvbiBhbmQgZXhwYW5zaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwNDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQveGF0dHIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjgzMDpcdFx0fSBlbHNlIHtcbjI4MzE6XHRcdFx0YmZyZWUgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuMjgzMjpcdFx0fVxuMjgzMzpcdFxuMjgzNDpcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX21ha2VfaW5vZGVfc3BhY2UoaGFuZGxlLCBpbm9kZSwgcmF3X2lub2RlLFxuMjgzNTpcdFx0XHRcdFx0XHQgICAgaXNpemVfZGlmZiwgaWZyZWUsIGJmcmVlLFxuMjgzNjpcdFx0XHRcdFx0XHQgICAgXHUwMDI2dG90YWxfaW5vKTtcbjI4Mzc6XHRcdGlmIChlcnJvcikge1xuMjgzODpcdFx0XHRpZiAoZXJyb3IgPT0gLUVOT1NQQyBcdTAwMjZcdTAwMjYgIXRyaWVkX21pbl9leHRyYV9pc2l6ZSBcdTAwMjZcdTAwMjZcbjI4Mzk6XHRcdFx0ICAgIHNfbWluX2V4dHJhX2lzaXplKSB7XG4yODQwOlx0XHRcdFx0dHJpZWRfbWluX2V4dHJhX2lzaXplJiM0MzsmIzQzOztcbjI4NDE6XHRcdFx0XHRuZXdfZXh0cmFfaXNpemUgPSBzX21pbl9leHRyYV9pc2l6ZTtcbjI4NDI6XHRcdFx0XHRlcnJvciA9IDA7XG4yODQzOlx0XHRcdFx0Z290byByZXRyeTtcbjI4NDQ6XHRcdFx0fVxuMjg0NTpcdFx0XHRnb3RvIGNsZWFudXA7XG4yODQ2Olx0XHR9XG4yODQ3Olx0c2hpZnQ6XG4yODQ4Olx0XHQvKiBBZGp1c3QgdGhlIG9mZnNldHMgYW5kIHNoaWZ0IHRoZSByZW1haW5pbmcgZW50cmllcyBhaGVhZCAqL1xuMjg0OTpcdFx0ZXh0NF94YXR0cl9zaGlmdF9lbnRyaWVzKElGSVJTVChoZWFkZXIpLCBFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZXh0cmFfaXNpemVcbjI4NTA6XHRcdFx0XHQtIG5ld19leHRyYV9pc2l6ZSwgKHZvaWQgKilyYXdfaW5vZGUgJiM0MztcbjI4NTE6XHRcdFx0XHRFWFQ0X0dPT0RfT0xEX0lOT0RFX1NJWkUgJiM0MzsgbmV3X2V4dHJhX2lzaXplLFxuMjg1MjpcdFx0XHRcdCh2b2lkICopaGVhZGVyLCB0b3RhbF9pbm8pO1xuMjg1MzpcdFx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2V4dHJhX2lzaXplID0gbmV3X2V4dHJhX2lzaXplO1xuMjg1NDpcdFxuMjg1NTpcdFx0aWYgKGV4dDRfaGFzX2lubGluZV9kYXRhKGlub2RlKSlcbjI4NTY6XHRcdFx0ZXJyb3IgPSBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKGlub2RlKTtcbjI4NTc6XHRcbjI4NTg6XHRjbGVhbnVwOlxuMjg1OTpcdFx0aWYgKGVycm9yIFx1MDAyNlx1MDAyNiAobW50X2NvdW50ICE9IGxlMTZfdG9fY3B1KHNiaS1cdTAwM2VzX2VzLVx1MDAzZXNfbW50X2NvdW50KSkpIHtcbjI4NjA6XHRcdFx0ZXh0NF93YXJuaW5nKGlub2RlLVx1MDAzZWlfc2IsIFwmIzM0O1VuYWJsZSB0byBleHBhbmQgaW5vZGUgJWxsdS4gRGVsZXRlIHNvbWUgRUFzIG9yIHJ1biBlMmZzY2suXCYjMzQ7LFxuMjg2MTpcdFx0XHRcdCAgICAgaW5vZGUtXHUwMDNlaV9pbm8pO1xuMjg2MjpcdFx0XHRtbnRfY291bnQgPSBsZTE2X3RvX2NwdShzYmktXHUwMDNlc19lcy1cdTAwM2VzX21udF9jb3VudCk7XG4yODYzOlx0XHR9XG4yODY0Olx0XHRyZXR1cm4gZXJyb3I7XG4yODY1Olx0fVxuMjg2NjpcdFxuMjg2NzpcdCNkZWZpbmUgRUlBX0lOQ1IgMTYgLyogbXVzdCBiZSAyXm4gKi9cbjI4Njg6XHQjZGVmaW5lIEVJQV9NQVNLIChFSUFfSU5DUiAtIDEpXG4yODY5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDA0OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2OTAKCQkJCQkJCW91dHB1dDogMTMxCgkJCQkJCQl0aG91Z2h0czogMTM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGV4dDQgQnVnIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBleGFtaW5lZCB0aGlzIHBhdGNoLCBhbmQgSSYjMzk7bSBjb25maWRlbnQgaW4gc2F5aW5nIHRoYXQgdGhpcyBpcyBpbmRlZWQgYSBmdW5jdGlvbmFsIGJ1ZyBmaXggd2l0aGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIEkgY2FuIHNlZSB0aGUgcmVhc29uaW5nIGNsZWFybHkuIEl0JiMzOTtzIGFib3V0IGhvdyBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgIGhhbmRsZXMgdGhlIHJldHVybiB2YWx1ZSBhbmQgcG90ZW50aWFsIGVycm9ycy4gU3BlY2lmaWNhbGx5LCB0aGUgY29uY2VybiBpcyB0aGF0IGFuIGAtRU5PU1BDYCBjb3VsZCBiZSByZXR1cm5lZCBldmVuIGFmdGVyIGEgc3VjY2Vzc2Z1bCBleHBhbnNpb24gb2YgdGhlIGV4dHJhIGlzaXplLCBkdWUgdG8gYW4gdW4tcmVzZXQgYGVycm9yYCB2YXJpYWJsZS4gVGhpcyBtZWFucyBhIHN1YnNlcXVlbnQgYXR0ZW1wdCBtaWdodCBub3QgYmUgdW5kZXJ0YWtlbiBkZXNwaXRlIHNwYWNlIGJlaW5nIGF2YWlsYWJsZS4KCkdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIHRoaXMgdG8gbWFuaWZlc3QgYXMgZGF0YSBjb3JydXB0aW9uIG9yIHNwdXJpb3VzIHNwYWNlIGV4aGF1c3Rpb24sIEkmIzM5O20gbWFya2luZyB0aGlzIGFzIGhpZ2hseSBmdXp6YWJsZS4gSSYjMzk7bGwgc2V0IGBXb3J0aEZ1enppbmdgIHRvIGB0cnVlYC4KCkkmIzM5O2xsIGZvY3VzIHRoZSBmdXp6aW5nIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGlzIHNwZWNpZmljIGlzc3VlOiBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgIGFuZCBgZXh0NF94YXR0cl9tYWtlX2lub2RlX3NwYWNlYC4gVGhlc2UgYXJlIHRoZSBrZXkgYXJlYXMgd2hlcmUgdGhpcyBidWcgaXMgbGlrZWx5IHRvIGJlIHRyaWdnZXJlZC4gSSBhbHNvIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGBFWFQ0X0ZTYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBlbmFibGVkIGZvciB0aGUgZnV6emluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIGxvZ2ljLCBzbyBJIG5lZWQgdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDA0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9tYWtlX2lub2RlX3NwYWNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGV4dDQgd2hlcmUgYGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhYCBjb3VsZCByZXR1cm4gYC1FTk9TUENgIGV2ZW4gd2hlbiBpdCBzdWNjZXNzZnVsbHkgZXhwYW5kZWQgdGhlIGV4dHJhIGlzaXplLCBiZWNhdXNlIGBlcnJvcmAgd2FzbiYjMzk7dCByZXNldCB0byAwIGJlZm9yZSBqdW1waW5nIHRvIGByZXRyeWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9tYWtlX2lub2RlX3NwYWNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGV4dDQgd2hlcmUgYGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhYCBjb3VsZCByZXR1cm4gYC1FTk9TUENgIGV2ZW4gd2hlbiBpdCBzdWNjZXNzZnVsbHkgZXhwYW5kZWQgdGhlIGV4dHJhIGlzaXplLCBiZWNhdXNlIGBlcnJvcmAgd2FzbiYjMzk7dCByZXNldCB0byAwIGJlZm9yZSBqdW1waW5nIHRvIGByZXRyeWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDlUMDQ6MTg6NTUuNTEwNTI1NjgyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU5NzE1NTg2NjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYVwiLFxuICAgIFwiZXh0NF94YXR0cl9tYWtlX2lub2RlX3NwYWNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gZXh0NCB3aGVyZSBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgIGNvdWxkIHJldHVybiBgLUVOT1NQQ2AgZXZlbiB3aGVuIGl0IHN1Y2Nlc3NmdWxseSBleHBhbmRlZCB0aGUgZXh0cmEgaXNpemUsIGJlY2F1c2UgYGVycm9yYCB3YXNuJ3QgcmVzZXQgdG8gMCBiZWZvcmUganVtcGluZyB0byBgcmV0cnlgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDQ6MTg6NTUuNTEwNTMwNDgyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzkxMzkwMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2YzVmZDkwNWI0OTNlZjI0YWQ2NGU0ZjI4NWFiNjhhYjU5NjMzMGI1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDkgMDQ6MTg6NTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5jIGIvZnMvZXh0NC94YXR0ci5jXFxuaW5kZXggOTgyYTFmODMxZTIyODIuLjlkYTVkZmNlYTdiODZiIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQveGF0dHIuY1xcbisrKyBiL2ZzL2V4dDQveGF0dHIuY1xcbkBAIC0yODM5LDYgKzI4MzksNyBAQCBpbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSxcXG4gXFx0XFx0ICAgIHNfbWluX2V4dHJhX2lzaXplKSB7XFxuIFxcdFxcdFxcdHRyaWVkX21pbl9leHRyYV9pc2l6ZSsrO1xcbiBcXHRcXHRcXHRuZXdfZXh0cmFfaXNpemUgPSBzX21pbl9leHRyYV9pc2l6ZTtcXG4rXFx0XFx0XFx0ZXJyb3IgPSAwO1xcbiBcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbiBcXHRcXHR9XFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDQ6MTg6NTUuOTUwMzQ0OTQ1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNTkyNzU3NTgyOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhXCIsXG4gICAgXCJleHQ0X3hhdHRyX21ha2VfaW5vZGVfc3BhY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBleHQ0IHdoZXJlIGBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYWAgY291bGQgcmV0dXJuIGAtRU5PU1BDYCBldmVuIHdoZW4gaXQgc3VjY2Vzc2Z1bGx5IGV4cGFuZGVkIHRoZSBleHRyYSBpc2l6ZSwgYmVjYXVzZSBgZXJyb3JgIHdhc24ndCByZXNldCB0byAwIGJlZm9yZSBqdW1waW5nIHRvIGByZXRyeWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZjNWZkOTA1YjQ5M2VmMjRhZDY0ZTRmMjg1YWI2OGFiNTk2MzMwYjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCA5IDA0OjE4OjU0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5jIGIvZnMvZXh0NC94YXR0ci5jXG5pbmRleCA5ODJhMWY4MzFlMjI4Mi4uOWRhNWRmY2VhN2I4NmIgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3hhdHRyLmNcbisrKyBiL2ZzL2V4dDQveGF0dHIuY1xuQEAgLTI4MzksNiArMjgzOSw3IEBAIGludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxuIFx0XHQgICAgc19taW5fZXh0cmFfaXNpemUpIHtcbiBcdFx0XHR0cmllZF9taW5fZXh0cmFfaXNpemUrKztcbiBcdFx0XHRuZXdfZXh0cmFfaXNpemUgPSBzX21pbl9leHRyYV9pc2l6ZTtcbitcdFx0XHRlcnJvciA9IDA7XG4gXHRcdFx0Z290byByZXRyeTtcbiBcdFx0fVxuIFx0XHRnb3RvIGNsZWFudXA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwNDoxODo1NS45NTAzNDYwNjVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTE2MjI4MDQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFByb3Bvc2VkIEV4dDQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZnMvZXh0NC94YXR0ci5jYC4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHRoZSBjaGFuZ2UgaXMgaW5zZXJ0aW5nIGBlcnJvciA9IDA7YCByaWdodCBiZWZvcmUgdGhlIGBnb3RvIHJldHJ5O2AgbGFiZWwgd2l0aGluIHRoZSBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyB3YXMgYWRkZWQgYW5kIHdoYXQgcHJvYmxlbSBpdCdzIGFkZHJlc3NpbmcuIFRoZSBvYnZpb3VzIG5leHQgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYWAgZnVuY3Rpb24gaXRzZWxmIGFuZCBzZWUgd2hhdCdzIGdvaW5nIG9uIHdpdGhpbiB0aGF0IGNvZGUgYmxvY2suIFRoaXMgbG9va3MgbGlrZSBhIHBvdGVudGlhbCBlZGdlIGNhc2UgZml4LCBwZXJoYXBzIHJlbGF0ZWQgdG8gZXJyb3IgaGFuZGxpbmcgb3IgcmVzb3VyY2UgbWFuYWdlbWVudCBkdXJpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIG9wZXJhdGlvbnMuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgY29udHJvbCBmbG93IGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoYXQgYHJldHJ5YCBsYWJlbCB0byBmdWxseSBncmFzcCB0aGUgaW50ZW50IG9mIHRoaXMgc2VlbWluZ2x5IG1pbm9yIGFkZGl0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODIxLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwNDoxOToxNS4xMTI2Mjg1MDhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkwNzI0MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC94YXR0ci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQveGF0dHIuYz0yNjk0PXN0YXRpYyBpbnQgZXh0NF94YXR0cl9tYWtlX2lub2RlX3NwYWNlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjc2Mi0gKi9cXG5mcy9leHQ0L3hhdHRyLmM6Mjc2MzppbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSxcXG5mcy9leHQ0L3hhdHRyLmMtMjc2NC1cXHRcXHRcXHQgICAgICAgc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDQ6MTk6MTUuMTgxNzAzNDY2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjMzODg2NDc3NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknbSB0aGlua2luZyBhYm91dCBpdCwgZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgYW4gZXhwZXJ0IGluIGZpbGUgc3lzdGVtczpcblxuKipEZWNvbnN0cnVjdGluZyBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgKipcblxuQWxyaWdodCwgSSdtIGhlYWRpbmcgb3ZlciB0byBgZnMvZXh0NC94YXR0ci5jYCBhbmQgZm9jdXNpbmcgb24gbGluZSAyODM5IGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBmdW5jdGlvbiBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgZnVuY3Rpb24gKm11c3QqIGJlIGRlYWxpbmcgd2l0aCB0aGUgYWxsb2NhdGlvbiBhbmQgZXhwYW5zaW9uIG9mIEV4dGVuZGVkIEF0dHJpYnV0ZSAoRUEpIHNwYWNlIHdpdGhpbiBhbiBleHQ0IGZpbGVzeXN0ZW0uIFRoZSBuYW1lIGdpdmVzIHRoYXQgYXdheSwgYnV0IEkgd2FudCB0byBjb25maXJtIHdoYXQgaXQncyBzcGVjaWZpY2FsbHkgZG9pbmcgcmVsYXRlZCB0byBpbmNyZWFzaW5nIHRoZSBpbi1pbm9kZSBzaXplLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXRhaWxzIG9mIHRoZSBpbm9kZSBkYXRhIHN0cnVjdHVyZSwgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3ksIGhvdyBFQXMgYXJlIHN0b3JlZCwgYW5kIHRoZSBwb3RlbnRpYWwgY29uc3RyYWludHMgdGhhdCBhcmUgYmVpbmcgbWFuYWdlZCBoZXJlLiBUaGluZ3MgdG8gaW1tZWRpYXRlbHkgY29uc2lkZXI6IGhvdyBpdCBoYW5kbGVzIHRoZSBpX2V4dHJhX2lzaXplIGZpZWxkIG9mIHRoZSBpbm9kZSwgdGhlIHBvdGVudGlhbCBmb3IgZnJhZ21lbnRhdGlvbiBvciBuZWVkaW5nIHRvIG1vdmUgZGF0YSBhcm91bmQsIGVycm9yIGNvbmRpdGlvbnMgc3VjaCBhcyBzcGFjZSBleGhhdXN0aW9uIG9yIGNvcnJ1cHRpb24sIGFuZCBhbnkgbG9ja2luZyBtZWNoYW5pc21zIHVzZWQgZm9yIHN5bmNocm9uaXphdGlvbiB0byBtYWludGFpbiBjb25zaXN0ZW5jeSBvZiB0aGUgZmlsZSBzeXN0ZW0uIEkgYWxzbyBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBvc3NpYmxlIGZhaWx1cmUgc3RhdGVzLCBmb3IgZXhhbXBsZSwgcnVubmluZyBvdXQgb2Ygc3BhY2UuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIGZ1bmN0aW9uLiBJIGV4cGVjdCBpdCdzIGdvaW5nIHRvIGluY2x1ZGUgc29tZSBjaGVja3MgZm9yIHN1ZmZpY2llbnQgc3BhY2UsIHBlcmhhcHMgc29tZSBibG9jayBhbGxvY2F0aW9uIGxvZ2ljIGlmIGl0J3MgZXhwYW5kaW5nIGJleW9uZCB0aGUgaW5pdGlhbCBpbi1pbm9kZSBhcmVhLCBhbmQgcHJvYmFibHkgc29tZSB3cml0aW5nIHRvIHRoZSBzdXBlcmJsb2NrIG9yIGlub2RlIGl0c2VsZiB0byByZWZsZWN0IHRoZSBjaGFuZ2VzLiBVbHRpbWF0ZWx5LCBJJ20gbG9va2luZyBmb3IgdGhlIG5pdHR5LWdyaXR0eSBvZiBob3cgaXQgZXhwYW5kcyB0aGUgYXZhaWxhYmxlIHNwYWNlIGZvciBFQXMgaW4gdGhlIGlub2RlLiBMZXQncyBzZWUgaG93IGl0IHdvcmtzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjY1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDQ6MTk6MzguNTcwMzUzMzk1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ0OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQveGF0dHIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODAwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjgwMDpcXHRcXHQgKiBFQSBibG9jayBjYW4gaG9sZCBuZXdfZXh0cmFfaXNpemUgYnl0ZXMuXFxuMjgwMTpcXHRcXHQgKi9cXG4yODAyOlxcdFxcdGlmIChFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2ZpbGVfYWNsKSB7XFxuMjgwMzpcXHRcXHRcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xcbjI4MDQ6XFx0XFxuMjgwNTpcXHRcXHRcXHRiaCA9IGV4dDRfc2JfYnJlYWQoaW5vZGUtXFx1MDAzZWlfc2IsIEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZmlsZV9hY2wsIFJFUV9QUklPKTtcXG4yODA2OlxcdFxcdFxcdGlmIChJU19FUlIoYmgpKSB7XFxuMjgwNzpcXHRcXHRcXHRcXHRlcnJvciA9IFBUUl9FUlIoYmgpO1xcbjI4MDg6XFx0XFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbjI4MDk6XFx0XFx0XFx0fVxcbjI4MTA6XFx0XFx0XFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2NoZWNrX2Jsb2NrKGlub2RlLCBiaCk7XFxuMjgxMTpcXHRcXHRcXHRpZiAoZXJyb3IpIHtcXG4yODEyOlxcdFxcdFxcdFxcdGJyZWxzZShiaCk7XFxuMjgxMzpcXHRcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuMjgxNDpcXHRcXHRcXHR9XFxuMjgxNTpcXHRcXHRcXHRiYXNlID0gQkhEUihiaCk7XFxuMjgxNjpcXHRcXHRcXHRlbmQgPSBiaC1cXHUwMDNlYl9kYXRhICsgYmgtXFx1MDAzZWJfc2l6ZTtcXG4yODE3OlxcdFxcdFxcdG1pbl9vZmZzID0gZW5kIC0gYmFzZTtcXG4yODE4OlxcdFxcdFxcdGJmcmVlID0gZXh0NF94YXR0cl9mcmVlX3NwYWNlKEJGSVJTVChiaCksIFxcdTAwMjZtaW5fb2ZmcywgYmFzZSxcXG4yODE5OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIE5VTEwpO1xcbjI4MjA6XFx0XFx0XFx0YnJlbHNlKGJoKTtcXG4yODIxOlxcdFxcdFxcdGlmIChiZnJlZSArIGlmcmVlIFxcdTAwM2MgaXNpemVfZGlmZikge1xcbjI4MjI6XFx0XFx0XFx0XFx0aWYgKCF0cmllZF9taW5fZXh0cmFfaXNpemUgXFx1MDAyNlxcdTAwMjYgc19taW5fZXh0cmFfaXNpemUpIHtcXG4yODIzOlxcdFxcdFxcdFxcdFxcdHRyaWVkX21pbl9leHRyYV9pc2l6ZSsrO1xcbjI4MjQ6XFx0XFx0XFx0XFx0XFx0bmV3X2V4dHJhX2lzaXplID0gc19taW5fZXh0cmFfaXNpemU7XFxuMjgyNTpcXHRcXHRcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbjI4MjY6XFx0XFx0XFx0XFx0fVxcbjI4Mjc6XFx0XFx0XFx0XFx0ZXJyb3IgPSAtRU5PU1BDO1xcbjI4Mjg6XFx0XFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbjI4Mjk6XFx0XFx0XFx0fVxcbjI4MzA6XFx0XFx0fSBlbHNlIHtcXG4yODMxOlxcdFxcdFxcdGJmcmVlID0gaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplO1xcbjI4MzI6XFx0XFx0fVxcbjI4MzM6XFx0XFxuMjgzNDpcXHRcXHRlcnJvciA9IGV4dDRfeGF0dHJfbWFrZV9pbm9kZV9zcGFjZShoYW5kbGUsIGlub2RlLCByYXdfaW5vZGUsXFxuMjgzNTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgaXNpemVfZGlmZiwgaWZyZWUsIGJmcmVlLFxcbjI4MzY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZ0b3RhbF9pbm8pO1xcbjI4Mzc6XFx0XFx0aWYgKGVycm9yKSB7XFxuMjgzODpcXHRcXHRcXHRpZiAoZXJyb3IgPT0gLUVOT1NQQyBcXHUwMDI2XFx1MDAyNiAhdHJpZWRfbWluX2V4dHJhX2lzaXplIFxcdTAwMjZcXHUwMDI2XFxuMjgzOTpcXHRcXHRcXHQgICAgc19taW5fZXh0cmFfaXNpemUpIHtcXG4yODQwOlxcdFxcdFxcdFxcdHRyaWVkX21pbl9leHRyYV9pc2l6ZSsrO1xcbjI4NDE6XFx0XFx0XFx0XFx0bmV3X2V4dHJhX2lzaXplID0gc19taW5fZXh0cmFfaXNpemU7XFxuMjg0MjpcXHRcXHRcXHRcXHRlcnJvciA9IDA7XFxuMjg0MzpcXHRcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbjI4NDQ6XFx0XFx0XFx0fVxcbjI4NDU6XFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbjI4NDY6XFx0XFx0fVxcbjI4NDc6XFx0c2hpZnQ6XFxuMjg0ODpcXHRcXHQvKiBBZGp1c3QgdGhlIG9mZnNldHMgYW5kIHNoaWZ0IHRoZSByZW1haW5pbmcgZW50cmllcyBhaGVhZCAqL1xcbjI4NDk6XFx0XFx0ZXh0NF94YXR0cl9zaGlmdF9lbnRyaWVzKElGSVJTVChoZWFkZXIpLCBFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2V4dHJhX2lzaXplXFxuMjg1MDpcXHRcXHRcXHRcXHQtIG5ld19leHRyYV9pc2l6ZSwgKHZvaWQgKilyYXdfaW5vZGUgK1xcbjI4NTE6XFx0XFx0XFx0XFx0RVhUNF9HT09EX09MRF9JTk9ERV9TSVpFICsgbmV3X2V4dHJhX2lzaXplLFxcbjI4NTI6XFx0XFx0XFx0XFx0KHZvaWQgKiloZWFkZXIsIHRvdGFsX2lubyk7XFxuMjg1MzpcXHRcXHRFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2V4dHJhX2lzaXplID0gbmV3X2V4dHJhX2lzaXplO1xcbjI4NTQ6XFx0XFxuMjg1NTpcXHRcXHRpZiAoZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKVxcbjI4NTY6XFx0XFx0XFx0ZXJyb3IgPSBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKGlub2RlKTtcXG4yODU3OlxcdFxcbjI4NTg6XFx0Y2xlYW51cDpcXG4yODU5OlxcdFxcdGlmIChlcnJvciBcXHUwMDI2XFx1MDAyNiAobW50X2NvdW50ICE9IGxlMTZfdG9fY3B1KHNiaS1cXHUwMDNlc19lcy1cXHUwMDNlc19tbnRfY291bnQpKSkge1xcbjI4NjA6XFx0XFx0XFx0ZXh0NF93YXJuaW5nKGlub2RlLVxcdTAwM2VpX3NiLCBcXFwiVW5hYmxlIHRvIGV4cGFuZCBpbm9kZSAlbGx1LiBEZWxldGUgc29tZSBFQXMgb3IgcnVuIGUyZnNjay5cXFwiLFxcbjI4NjE6XFx0XFx0XFx0XFx0ICAgICBpbm9kZS1cXHUwMDNlaV9pbm8pO1xcbjI4NjI6XFx0XFx0XFx0bW50X2NvdW50ID0gbGUxNl90b19jcHUoc2JpLVxcdTAwM2VzX2VzLVxcdTAwM2VzX21udF9jb3VudCk7XFxuMjg2MzpcXHRcXHR9XFxuMjg2NDpcXHRcXHRyZXR1cm4gZXJyb3I7XFxuMjg2NTpcXHR9XFxuMjg2NjpcXHRcXG4yODY3OlxcdCNkZWZpbmUgRUlBX0lOQ1IgMTYgLyogbXVzdCBiZSAyXm4gKi9cXG4yODY4OlxcdCNkZWZpbmUgRUlBX01BU0sgKEVJQV9JTkNSIC0gMSlcXG4yODY5OlxcdFxcbjI4NzA6XFx0LyogQWRkIHRoZSBsYXJnZSB4YXR0ciBAaW5vZGUgaW50byBAZWFfaW5vZGVfYXJyYXkgZm9yIGRlZmVycmVkIGlwdXQoKS5cXG4yODcxOlxcdCAqIElmIEBlYV9pbm9kZV9hcnJheSBpcyBuZXcgb3IgZnVsbCBpdCB3aWxsIGJlIGdyb3duIGFuZCB0aGUgb2xkXFxuMjg3MjpcXHQgKiBjb250ZW50cyBjb3BpZWQgb3Zlci5cXG4yODczOlxcdCAqL1xcbjI4NzQ6XFx0c3RhdGljIGludFxcbjI4NzU6XFx0ZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcXG4yODc2OlxcdFxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuMjg3NzpcXHR7XFxuMjg3ODpcXHRcXHRpZiAoKmVhX2lub2RlX2FycmF5ID09IE5VTEwpIHtcXG4yODc5OlxcdFxcdFxcdC8qXFxuMjg4MDpcXHRcXHRcXHQgKiBTdGFydCB3aXRoIDE1IGlub2Rlcywgc28gaXQgZml0cyBpbnRvIGEgcG93ZXItb2YtdHdvIHNpemUuXFxuMjg4MTpcXHRcXHRcXHQgKi9cXG4yODgyOlxcdFxcdFxcdCgqZWFfaW5vZGVfYXJyYXkpID0ga21hbGxvY19mbGV4KCoqZWFfaW5vZGVfYXJyYXksIGlub2RlcyxcXG4yODgzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBFSUFfTUFTSywgR0ZQX05PRlMpO1xcbjI4ODQ6XFx0XFx0XFx0aWYgKCplYV9pbm9kZV9hcnJheSA9PSBOVUxMKVxcbjI4ODU6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjg4NjpcXHRcXHRcXHQoKmVhX2lub2RlX2FycmF5KS1cXHUwMDNlY291bnQgPSAwO1xcbjI4ODc6XFx0XFx0fSBlbHNlIGlmICgoKCplYV9pbm9kZV9hcnJheSktXFx1MDAzZWNvdW50IFxcdTAwMjYgRUlBX01BU0spID09IEVJQV9NQVNLKSB7XFxuMjg4ODpcXHRcXHRcXHQvKiBleHBhbmQgdGhlIGFycmF5IG9uY2UgYWxsIDE1ICsgbiAqIDE2IHNsb3RzIGFyZSBmdWxsICovXFxuMjg4OTpcXHRcXHRcXHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqbmV3X2FycmF5ID0gTlVMTDtcXG4yODkwOlxcdFxcbjI4OTE6XFx0XFx0XFx0bmV3X2FycmF5ID0ga21hbGxvY19mbGV4KCoqZWFfaW5vZGVfYXJyYXksIGlub2RlcyxcXG4yODkyOlxcdFxcdFxcdFxcdFxcdFxcdCAoKmVhX2lub2RlX2FycmF5KS1cXHUwMDNlY291bnQgKyBFSUFfSU5DUixcXG4yODkzOlxcdFxcdFxcdFxcdFxcdFxcdCBHRlBfTk9GUyk7XFxuMjg5NDpcXHRcXHRcXHRpZiAobmV3X2FycmF5ID09IE5VTEwpXFxuMjg5NTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4yODk2OlxcdFxcdFxcdG1lbWNweShuZXdfYXJyYXksICplYV9pbm9kZV9hcnJheSxcXG4yODk3OlxcdFxcdFxcdCAgICAgICBzdHJ1Y3Rfc2l6ZSgqZWFfaW5vZGVfYXJyYXksIGlub2RlcyxcXG4yODk4OlxcdFxcdFxcdFxcdFxcdCAgICgqZWFfaW5vZGVfYXJyYXkpLVxcdTAwM2Vjb3VudCkpO1xcbjI4OTk6XFx0XFx0XFx0a2ZyZWUoKmVhX2lub2RlX2FycmF5KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDQ6MTk6MzguNTcwODAwNzA1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA5NDcyODc0MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGZpeCwgYnV0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIGltcG9ydGFudCwgZXNwZWNpYWxseSBpbiBhIGZpbGUgc3lzdGVtIGNvbnRleHQuIFRoZSBjb3JlIG9mIGl0IGFkZHMgYGVycm9yID0gMDtgIHJpZ2h0IGJlZm9yZSB0aGUgYGdvdG8gcmV0cnk7YCBzdGF0ZW1lbnQgaW4gYGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBpbmRlZWQgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGEgY3J1Y2lhbCBvbmUuIFdpdGhvdXQgcmVzZXR0aW5nIGBlcnJvcmAgdG8gemVybywgdGhlIGZ1bmN0aW9uIGNvdWxkIHBvdGVudGlhbGx5IHByb3BhZ2F0ZSBhIHByZXZpb3VzIGVycm9yIGNvZGUuIFRoaXMgY291bGQgbGVhZCB0byBhIGNhc2NhZGluZyBmYWlsdXJlIGZ1cnRoZXIgZG93biB0aGUgbGluZSwgb3IsIHdvcnNlLCByZXR1cm4gYW4gaW5jb3JyZWN0IGVycm9yIHN0YXRlLlxuXG5UbyBwcm9wZXJseSBhc3Nlc3MgdGhpcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyB3aXRoaW4gYGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhYC4gVGhlIGtleSBpcyBsb2NhdGluZyB0aGF0IGByZXRyeTpgIGxhYmVsIHRvIHNlZSB3aGVyZSB0aGlzIFwiZ290b1wiIGlzIGFjdHVhbGx5IHRha2luZyB1cy4gSXMgaXQgd2l0aGluIGEgbG9vcCwgYSBjb25kaXRpb25hbCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBjb250ZXh0IG9mIHRoZSByZXRyeSBpcyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBpbXBhY3QuIEkgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIGlkZW50aWZ5IGhvdyB0aGUgZnVuY3Rpb24gaGFuZGxlcyBlcnJvcnMgaW4gZ2VuZXJhbC4gT25jZSBJJ3ZlIG1hcHBlZCB0aGlzIGluIG15IG1pbmQsIHRoZSBzaWduaWZpY2FuY2Ugb2Ygc2V0dGluZyBgZXJyb3JgIHRvIDAgd2lsbCBiZWNvbWUgY2xlYXIuIFVuZGVyc3RhbmRpbmcgdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGlzIGZ1bmN0aW9uIGlzIGNydWNpYWwgdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5IGFuZCBhdm9pZCBwb3RlbnRpYWwgZmlsZSBzeXN0ZW0gY29ycnVwdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM5NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDQ6MjA6MDkuNTE4MDkwMDVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDg5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC94YXR0ci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3NjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3NjA6XFx0ICogRXhwYW5kIGFuIGlub2RlIGJ5IG5ld19leHRyYV9pc2l6ZSBieXRlcyB3aGVuIEVBcyBhcmUgcHJlc2VudC5cXG4yNzYxOlxcdCAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG5lZ2F0aXZlIGVycm9yIG51bWJlciBvbiBmYWlsdXJlLlxcbjI3NjI6XFx0ICovXFxuMjc2MzpcXHRpbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSxcXG4yNzY0OlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlLCBoYW5kbGVfdCAqaGFuZGxlKVxcbjI3NjU6XFx0e1xcbjI3NjY6XFx0XFx0c3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfaGVhZGVyICpoZWFkZXI7XFxuMjc2NzpcXHRcXHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4yNzY4OlxcdFxcdHN0YXRpYyB1bnNpZ25lZCBpbnQgbW50X2NvdW50O1xcbjI3Njk6XFx0XFx0c2l6ZV90IG1pbl9vZmZzO1xcbjI3NzA6XFx0XFx0c2l6ZV90IGlmcmVlLCBiZnJlZTtcXG4yNzcxOlxcdFxcdGludCB0b3RhbF9pbm87XFxuMjc3MjpcXHRcXHR2b2lkICpiYXNlLCAqZW5kO1xcbjI3NzM6XFx0XFx0aW50IGVycm9yID0gMCwgdHJpZWRfbWluX2V4dHJhX2lzaXplID0gMDtcXG4yNzc0OlxcdFxcdGludCBzX21pbl9leHRyYV9pc2l6ZSA9IGxlMTZfdG9fY3B1KHNiaS1cXHUwMDNlc19lcy1cXHUwMDNlc19taW5fZXh0cmFfaXNpemUpO1xcbjI3NzU6XFx0XFx0aW50IGlzaXplX2RpZmY7XFx0LyogSG93IG11Y2ggZG8gd2UgbmVlZCB0byBncm93IGlfZXh0cmFfaXNpemUgKi9cXG4yNzc2OlxcdFxcbjI3Nzc6XFx0cmV0cnk6XFxuMjc3ODpcXHRcXHRpc2l6ZV9kaWZmID0gbmV3X2V4dHJhX2lzaXplIC0gRVhUNF9JKGlub2RlKS1cXHUwMDNlaV9leHRyYV9pc2l6ZTtcXG4yNzc5OlxcdFxcdGlmIChFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2V4dHJhX2lzaXplIFxcdTAwM2U9IG5ld19leHRyYV9pc2l6ZSlcXG4yNzgwOlxcdFxcdFxcdHJldHVybiAwO1xcbjI3ODE6XFx0XFxuMjc4MjpcXHRcXHRoZWFkZXIgPSBJSERSKGlub2RlLCByYXdfaW5vZGUpO1xcbjI3ODM6XFx0XFxuMjc4NDpcXHRcXHQvKlxcbjI3ODU6XFx0XFx0ICogQ2hlY2sgaWYgZW5vdWdoIGZyZWUgc3BhY2UgaXMgYXZhaWxhYmxlIGluIHRoZSBpbm9kZSB0byBzaGlmdCB0aGVcXG4yNzg2OlxcdFxcdCAqIGVudHJpZXMgYWhlYWQgYnkgbmV3X2V4dHJhX2lzaXplLlxcbjI3ODc6XFx0XFx0ICovXFxuMjc4ODpcXHRcXG4yNzg5OlxcdFxcdGJhc2UgPSBJRklSU1QoaGVhZGVyKTtcXG4yNzkwOlxcdFxcdGVuZCA9IElUQUlMKGlub2RlLCByYXdfaW5vZGUpO1xcbjI3OTE6XFx0XFx0bWluX29mZnMgPSBlbmQgLSBiYXNlO1xcbjI3OTI6XFx0XFx0dG90YWxfaW5vID0gc2l6ZW9mKHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2hlYWRlcikgKyBzaXplb2YodTMyKTtcXG4yNzkzOlxcdFxcbjI3OTQ6XFx0XFx0aWZyZWUgPSBleHQ0X3hhdHRyX2ZyZWVfc3BhY2UoYmFzZSwgXFx1MDAyNm1pbl9vZmZzLCBiYXNlLCBcXHUwMDI2dG90YWxfaW5vKTtcXG4yNzk1OlxcdFxcdGlmIChpZnJlZSBcXHUwMDNlPSBpc2l6ZV9kaWZmKVxcbjI3OTY6XFx0XFx0XFx0Z290byBzaGlmdDtcXG4yNzk3OlxcdFxcbjI3OTg6XFx0XFx0LypcXG4yNzk5OlxcdFxcdCAqIEVub3VnaCBmcmVlIHNwYWNlIGlzbid0IGF2YWlsYWJsZSBpbiB0aGUgaW5vZGUsIGNoZWNrIGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDA0OjIwOjA5LjUxODI0Mjc3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjIxMDQyOTQ1ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEJ1ZyBpbiBFeHQ0IFhhdHRyIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGV4dDQgY29kZSwgYW5kIEkndmUgZ290IGEgc2NlbmFyaW8gcGxheWluZyBvdXQgaW4gbXkgaGVhZC4gSWYgYGVycm9yYCBpc24ndCBleHBsaWNpdGx5IHJlc2V0IHRvIHplcm8gYWZ0ZXIgYSBmYWlsdXJlIGFuZCB3ZSBlbmQgdXAganVtcGluZyBiYWNrIHRvIGByZXRyeTpgLCB0aGVyZSdzIGEgcHJvYmxlbS4gQXQgYHJldHJ5OmAsIGBpc2l6ZV9kaWZmYCBpcyByZWNvbXB1dGVkLCBhbmQgaWYgdGhlIGF2YWlsYWJsZSBzcGFjZSBpcyBzdWZmaWNpZW50LCBpbmRpY2F0ZWQgYnkgYGlmcmVlIFx1MDAzZT0gaXNpemVfZGlmZmAsIHdlIGJyYW5jaCB0byBgc2hpZnQ6YC5cblxuTm93LCBhdCBgc2hpZnQ6YCwgdGhlIHZhbHVlIG9mIGBlcnJvcmAgaXMgb25seSB1cGRhdGVkIGlmIHRoZSBpbm9kZSBoYXMgaW5saW5lIGRhdGEuIElmIGl0ICpkb2Vzbid0KiBoYXZlIGlubGluZSBkYXRhLCB3aGljaCBpcyB0aGUgbW9yZSBjb21tb24gcGF0aCwgdGhlIGNvZGUgZmFsbHMgdGhyb3VnaCB0byBgY2xlYW51cDpgLiBBbmQgYXQgYGNsZWFudXA6YCwgaXQgKnJldHVybnMqIHRoZSB2YWx1ZSBvZiBgZXJyb3JgLlxuXG5UaGUga2V5IGlzc3VlIGlzIHRoaXM6IElmIHRoZSBpbml0aWFsIGBlcnJvcmAgd2FzIGAtRU5PU1BDYCwgYmVjYXVzZSBgZXh0NF94YXR0cl9tYWtlX2lub2RlX3NwYWNlYCBmYWlsZWQsIHRoYXQgYC1FTk9TUENgIGdldHMgY2FycmllZCBhbGwgdGhlIHdheSB0aHJvdWdoLCBldmVuIHRob3VnaCB0aGUgc2hpZnRpbmcgcHJvY2VzcyBpdHNlbGYgbWlnaHQgaGF2ZSBiZWVuIGVudGlyZWx5IHN1Y2Nlc3NmdWwhIEl0IHdvdWxkIHJldHVybiBgLUVOT1NQQ2AgZXZlbiB0aG91Z2ggaXQgc3VjY2Vzc2Z1bGx5IHNoaWZ0ZWQgZW50cmllcyBhbmQgZml4ZWQgdGhlIHByb2JsZW0hXG5cbldhaXQsIGxldCBtZSB3YWxrIHRocm91Z2ggaXQgYWdhaW4uLi4gYC1FTk9TUENgIGNhdXNlcyBhIGp1bXAgYmFjayB0byByZXRyeSwgYW5kIHRoZW4gaWYgdGhlIHNwYWNlIGhhcyBiZWVuIGZyZWVkIHdlIGhpdCBzaGlmdCwgdGhlbiBpdCByZXR1cm5zIGBlcnJvcmAgd2hpY2ggaXMgYC1FTk9TUENgLiBUaGF0J3MgaXQsIGl0J3MgcmV0dXJuaW5nIGFuIGVycm9yIGNvZGUgaW5kaWNhdGluZyB0aGUgc3BhY2UgaXMgZnVsbCwgZXZlbiBpZiB0aGUgZXJyb3IgY29uZGl0aW9uIGhhcyBiZWVuIHJlc29sdmVkISBJdCdzIGEgZnVuY3Rpb25hbCBidWcuXG5cblNvLCB0aGUgZml4IGlzIHN0cmFpZ2h0Zm9yd2FyZDogd2UgbmVlZCB0byBleHBsaWNpdGx5IHNldCBgZXJyb3IgPSAwO2AgYmVmb3JlIHRoZSBqdW1wIHRvIGByZXRyeTpgLiBUaGF0IGVuc3VyZXMgYSBzdWNjZXNzZnVsIG9wZXJhdGlvbiByZXR1cm5zIGEgc3VjY2VzcyBjb2RlLlxuXG5SaWdodCwgbGV0J3MgbWFrZSBzdXJlIHRoaXMgZml4IGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQuIE5lZWRzIEVYVDRfRlMuIE5lZWQgdG8gY2hlY2sgYGZzL2V4dDQvS2NvbmZpZ2AgdG8gc2VlIHRoZSBjb25maWcgb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTUwNCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDA0OjIwOjMxLjYyMjUzOTQzOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA1NDgwNzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFWFQ0X0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9leHQ0L0tjb25maWc6Mjpjb25maWcgRVhUNF9GU1xcbmZzL2V4dDQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVxcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZz0zNT1jb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy00NS1cXG5mcy9leHQ0L0tjb25maWc6NDY6Y29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMXFxuZnMvZXh0NC9LY29uZmlnLTQ3LVxcdGJvb2wgXFxcIkV4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNTUtXFxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXFxuZnMvZXh0NC9LY29uZmlnLTU3LVxcdGJvb2wgXFxcIkV4dDQgU2VjdXJpdHkgTGFiZWxzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwNDoyMDozMS45MjgwMzc4MDRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM1NzQ2MzAyMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcywgZGlzdGlsbGVkIGludG8gYSBmaXJzdC1wZXJzb24gc3VtbWFyeSBhcyB5b3UgcmVxdWVzdGVkLCBhc3N1bWluZyBJJ20gYWxyZWFkeSB3ZWxsLXZlcnNlZCBpbiBmaWxlc3lzdGVtcyBhbmQga2VybmVsIGludGVybmFscy5cblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IEVYVDQgWEFUVFJzKipcblxuUmlnaHQsIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgRXh0ZW5kZWQgQXR0cmlidXRlcyAoeGF0dHJzKSB3aXRoaW4gdGhlIEVYVDQgZmlsZXN5c3RlbS4gVGhlIGltcGxpY2F0aW9uIGlzIEVYVDQgaXMgdGhlIHByaW1hcnkgZm9jdXMsIHdoaWNoIGlzIG5vIHN1cnByaXNlIGdpdmVuIGl0cyBwcmV2YWxlbmNlLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IGFyZSB0aGVyZSBvdGhlciBmaWxlIHN5c3RlbXMgYXQgcGxheSBoZXJlPyBBcmUgdGhlcmUgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBlaXRoZXIgY29tcGlsZS10aW1lIG9yIHJ1bnRpbWUsIHRoYXQgY291bGQgaW5mbHVlbmNlIGhvdyB0aGVzZSB4YXR0cnMgYmVoYXZlIG9yIGFyZSBldmVuIGVuYWJsZWQ/XG5cbk15IG5leHQgcG9pbnQgaXMgdG8gaWRlbnRpZnkgdGhlIHNwZWNpZmljIGNvZGUgbG9jYXRpb24uIEkgcmVtZW1iZXIgdGhhdCB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbiBmb3IgeGF0dHJzIGluIEVYVDQgcmVzaWRlcyB3aXRoaW4gYGZzL2V4dDQveGF0dHIuY2AuIFNvLCBJJ2xsIHN0YXJ0IHRoZXJlLlxuXG5CdXQgYmVmb3JlIGRpdmluZyBkZWVwIGludG8gdGhlIHNvdXJjZSBjb2RlLCBJJ2xsIG5lZWQgdG8gY2hlY2sgaWYgdGhhdCBgeGF0dHIuY2AgZmlsZSBpcyBjb21waWxlZCBpbiBjb25kaXRpb25hbGx5LiBJcyB0aGlzIGZ1bmN0aW9uYWxpdHkgYSBtb2R1bGUsIG9yIGlzIGl0IGNvbXBpbGVkIGluIGRlcGVuZGluZyBvbiBzb21lIEtjb25maWcgb3B0aW9uPyBLbm93aW5nIHRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIGF2YWlsYWJpbGl0eSBhY3Jvc3MgdmFyaW91cyBrZXJuZWwgY29uZmlndXJhdGlvbnMgYW5kIGRpc3RyaWJ1dGlvbnMuIEkgc2hvdWxkIHByb2JhYmx5IHF1aWNrbHkgY2hlY2sgaWYgdGhlcmUgaXMgYSBgS2NvbmZpZ2AgZm9yIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0NTAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwNDoyMTowNS41MDI2Njk5MTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDA5MzkzMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGF0dHIub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvTWFrZWZpbGU9OD1leHQ0LXlcXHQ6PSBiYWxsb2MubyBiaXRtYXAubyBibG9ja192YWxpZGl0eS5vIGRpci5vIGV4dDRfamJkMi5vIGV4dGVudHMubyBcXFxcXFxuLS1cXG5mcy9leHQ0L01ha2VmaWxlLTExLVxcdFxcdG1tcC5vIG1vdmVfZXh0ZW50Lm8gbmFtZWkubyBwYWdlLWlvLm8gcmVhZHBhZ2UubyByZXNpemUubyBcXFxcXFxuZnMvZXh0NC9NYWtlZmlsZToxMjpcXHRcXHRzdXBlci5vIHN5bWxpbmsubyBzeXNmcy5vIHhhdHRyLm8geGF0dHJfaHVyZC5vIHhhdHRyX3RydXN0ZWQubyBcXFxcXFxuZnMvZXh0NC9NYWtlZmlsZS0xMy1cXHRcXHR4YXR0cl91c2VyLm8gZmFzdF9jb21taXQubyBvcnBoYW4ub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwNDoyMTowNi45MDM2MTM1MjlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjI2NDY4NjIyOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgRVhUNF9GUyBhbmQgRXhwYW5kZWQgaV9zaXplKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBFWFQ0IHN0dWZmIGFnYWluLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSBmYWN0IHRoYXQsIHByZXR0eSBtdWNoIGFsd2F5cywgd2UncmUgZGVhbGluZyB3aXRoIGEgc3lzdGVtIGNvbXBpbGVkIHdpdGggYEVYVDRfRlNgLiBUaGF0J3MgdGhlIGJhc2VsaW5lLCB0aGUgZm91bmRhdGlvbi4gQnV0IEknbSBhbHNvIHBvbmRlcmluZyBob3cgYGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhYCBmaXRzIGludG8gdGhlIHBpY3R1cmUuIEl0J3MgYSBrZXkgZnVuY3Rpb24gZm9yIGV4cGFuZGluZyB0aGUgaW5vZGUncyBleHRyYSBpX3NpemUgZmllbGQsIGFuZCBJIG5lZWQgdG8gY29uc2lkZXIgaXRzIHVzYWdlIGNvbnRleHQuIEkgaGF2ZSB0byBkcmlsbCBkb3duIGZ1cnRoZXI7IGlzIGl0IGNhbGxlZCBqdXN0IGdlbmVyYWxseSwgb3IgZnJvbSBzb21lIHNwZWNpZmljIGFyZWEgb2YgY29kZSB0aGF0IEkgc2hvdWxkIGJlIGtleWluZyBvbj8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBjaGFpbiBpcyBnb2luZyB0byBiZSBjcnVjaWFsIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NDAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwNDoyMToyOS41NTA0NzgwMDlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3Mjk4NjUxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2lub2RlLmM9NjQzOT1zdGF0aWMgaW50IF9fZXh0NF9leHBhbmRfZXh0cmFfaXNpemUoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy02NDg1LVxcdC8qIHRyeSB0byBleHBhbmQgd2l0aCBFQXMgcHJlc2VudCAqL1xcbmZzL2V4dDQvaW5vZGUuYzo2NDg2OlxcdGVycm9yID0gZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoaW5vZGUsIG5ld19leHRyYV9pc2l6ZSxcXG5mcy9leHQ0L2lub2RlLmMtNjQ4Ny1cXHRcXHRcXHRcXHRcXHQgICByYXdfaW5vZGUsIGhhbmRsZSk7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MjY5ND1zdGF0aWMgaW50IGV4dDRfeGF0dHJfbWFrZV9pbm9kZV9zcGFjZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI3NjItICovXFxuZnMvZXh0NC94YXR0ci5jOjI3NjM6aW50IGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZXh0cmFfaXNpemUsXFxuZnMvZXh0NC94YXR0ci5jLTI3NjQtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUsIGhhbmRsZV90ICpoYW5kbGUpXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmg9MTkyPWV4dGVybiB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqYXJyYXkpO1xcbmZzL2V4dDQveGF0dHIuaC0xOTMtXFxuZnMvZXh0NC94YXR0ci5oOjE5NDpleHRlcm4gaW50IGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZXh0cmFfaXNpemUsXFxuZnMvZXh0NC94YXR0ci5oLTE5NS1cXHRcXHRcXHQgICAgc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDA0OjIxOjI5LjkyMzQ2ODYwM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTkxOTQ0MDkwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgc2Vhc29uZWQgZXhwZXJ0OlxuXG4qKkFuYWx5emluZyB0aGUgYF9fZXh0NF9leHBhbmRfZXh0cmFfaXNpemVgIEZ1bmN0aW9uKipcblxuUmlnaHQsIHNvIHRoaXMgY2FsbCBvcmlnaW5hdGVzIHdpdGhpbiB0aGUgYF9fZXh0NF9leHBhbmRfZXh0cmFfaXNpemVgIGZ1bmN0aW9uLCBmb3VuZCBpbiB0aGUgYGZzL2V4dDQvaW5vZGUuY2AgZmlsZS4gSW50ZXJlc3RpbmcuIE15IGluaXRpYWwgZm9jdXMgaXMgbmF0dXJhbGx5IGRyYXduIHRvIGBfX2V4dDRfZXhwYW5kX2V4dHJhX2lzaXplYCBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBhY2NvbXBsaXNoLiBHaXZlbiB0aGUgbmFtZSwgaXQncyBjbGVhciB0aGlzIGRlYWxzIHdpdGggZXhwYW5kaW5nIHRoZSBcImV4dHJhIGlfc2l6ZVwiIGF0dHJpYnV0ZSB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbS4gSSBpbW1lZGlhdGVseSB3YW50IHRvIGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiwgYW5kIGV2YWx1YXRlIGl0cyBwdXJwb3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTkxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDQ6MjI6MjEuODQyOTExNjgzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjQ2NzU2NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19leHQ0X2V4cGFuZF9leHRyYV9pc2l6ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2lub2RlLmM9NjQxNT1leHQ0X3Jlc2VydmVfaW5vZGVfd3JpdGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy02NDM4LVxcbmZzL2V4dDQvaW5vZGUuYzo2NDM5OnN0YXRpYyBpbnQgX19leHQ0X2V4cGFuZF9leHRyYV9pc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbmZzL2V4dDQvaW5vZGUuYy02NDQwLVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgaW50IG5ld19leHRyYV9pc2l6ZSxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz02NTAyPXN0YXRpYyBpbnQgZXh0NF90cnlfdG9fZXhwYW5kX2V4dHJhX2lzaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNjUyOC1cXG5mcy9leHQ0L2lub2RlLmM6NjUyOTpcXHRlcnJvciA9IF9fZXh0NF9leHBhbmRfZXh0cmFfaXNpemUoaW5vZGUsIG5ld19leHRyYV9pc2l6ZSwgXFx1MDAyNmlsb2MsXFxuZnMvZXh0NC9pbm9kZS5jLTY1MzAtXFx0XFx0XFx0XFx0XFx0ICBoYW5kbGUsIFxcdTAwMjZub19leHBhbmQpO1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTY1MzY9aW50IGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNjU2Ni1cXG5mcy9leHQ0L2lub2RlLmM6NjU2NzpcXHRlcnJvciA9IF9fZXh0NF9leHBhbmRfZXh0cmFfaXNpemUoaW5vZGUsIG5ld19leHRyYV9pc2l6ZSwgaWxvYyxcXG5mcy9leHQ0L2lub2RlLmMtNjU2OC1cXHRcXHRcXHRcXHRcXHQgIGhhbmRsZSwgXFx1MDAyNm5vX2V4cGFuZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDA0OjIyOjIyLjE2NzU5ODEwOFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjY5NDQxOTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZpeGluZyBhIFN1YnRsZSBYYXR0ciBFeHBhbnNpb24gQnVnIGluIGV4dDQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBzb21lIGNvZGUgcmVsYXRlZCB0byBleHQ0J3MgZXh0ZW5kZWQgYXR0cmlidXRlICh4YXR0cikgaGFuZGxpbmcuIFNwZWNpZmljYWxseSwgbXkgZm9jdXMgaXMgb24gaG93IGl0IGhhbmRsZXMgZXhwYW5kaW5nIHRoZSBleHRyYSBpbm9kZSBzaXplLiBJIHNlZSB0aGF0IGBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZWAgYW5kIGBleHQ0X3RyeV90b19leHBhbmRfZXh0cmFfaXNpemVgIGFyZSB0aGUgZW50cnkgcG9pbnRzIGhlcmUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBjb3JyZWN0aW9uIHdpdGhpbiB0aGUgZXh0NCB4YXR0ciBzeXN0ZW0uXG5cblRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgLiBJdCBsb29rcyBsaWtlIHRoZXJlJ3MgYSBidWcgd2hlcmUgdGhpcyBmdW5jdGlvbiBjb3VsZCByZXR1cm4gYC1FTk9TUENgLCBldmVuIGFmdGVyIGl0IGFjdHVhbGx5ICpkaWQqIG1hbmFnZSB0byBleHBhbmQgdGhlIGV4dHJhIGlzaXplIHN1Y2Nlc3NmdWxseS4gVGhlIHByb2JsZW0gYm9pbHMgZG93biB0byBhbiBlcnJvciBjb2RlIG5vdCBiZWluZyBwcm9wZXJseSByZXNldCBiZWZvcmUgYSBgcmV0cnlgIGp1bXAuIFRoaXMgY2FuIGxlYWQgdG8gdGhlIG1pc2xlYWRpbmcgZXJyb3IgbWVzc2FnZS5cblxuSSdtIGtleWluZyBpbiBvbiBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgIGFzIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIGludm9sdmVkIGluIHRoaXMgcGFydGljdWxhciBmaXguIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyBhbmQgY29uZmlybSB0aGUgZXhhY3QgcGF0aCB0aGUgYnVnIHRha2VzLlxuXG5JIHNob3VsZCBhbHNvIHF1aWNrbHkgY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gYENPTkZJR19FWFQ0X0ZTYCwgb2YgY291cnNlLCBpcyB0aGUgcmVsZXZhbnQgZmlsZXN5c3RlbSBjb25maWd1cmF0aW9uLiBCdXQgaXMgYENPTkZJR19FWFQ0X0ZTX1hBVFRSYCBhbHNvIHJlcXVpcmVkPyBMZXQgbWUgcnVuIGEgcXVpY2sgZ3JlcCBhbmQgZG91YmxlLWNoZWNrIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55IGRlcGVuZGVuY2llcyBpbiB0aGUgYnVpbGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxODEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDQ6MjI6MjcuNDM3MDQyNTQ5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTgxNDY1OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0VYVDRfRlNfWEFUVFJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDA0OjIyOjI3LjQ5Mjg2NDYwOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDMyMTc2NzA2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRGVsdmluZyBEZWVwZXIgaW50byBleHQ0IHhhdHRycyoqXG5cblJpZ2h0LCBzbywgdGhlIHF1ZXN0aW9uIG9mIGV4dDQgZXh0ZW5kZWQgYXR0cmlidXRlcy4uLkkgKmtub3cqIEknbSBub3QgY3JhenksIGV4dDQgeGF0dHJzIGFyZSBiYXNpY2FsbHkgYWx3YXlzIGVuYWJsZWQsIGFyZW4ndCB0aGV5PyBJdCdzIG5vdCBhIGNvbmZpZ3VyYWJsZSBvcHRpb24gbGlrZSB3aXRoIHNvbWUgb3RoZXIgZmlsZXN5c3RlbXMuIE5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgbXkgbWVudGFsIG1vZGVsIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBhY2N1cmF0ZS4gSSBuZWVkIHRvIHJldmlzaXQgdGhhdCBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgIGZ1bmN0aW9uLiBHb3R0YSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaGFuZGxpbmcgb2YgdGhlIGV4dHJhIGlub2RlIHNpemUgZm9yIHN0b3JpbmcgZXh0ZW5kZWQgYXR0cmlidXRlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJ4oCZbSBub3QgbWlzc2luZyBhbnl0aGluZyBjcnVjaWFsIGFib3V0IGhvdyBpdOKAmXMgbWFuYWdlZCBkdXJpbmcgaW5vZGUgYWxsb2NhdGlvbiBhbmQgZXhwYW5zaW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzczLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDQ6MjI6NDEuODE0NjM1MTEzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L3hhdHRyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjgzMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjgzMDpcXHRcXHR9IGVsc2Uge1xcbjI4MzE6XFx0XFx0XFx0YmZyZWUgPSBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemU7XFxuMjgzMjpcXHRcXHR9XFxuMjgzMzpcXHRcXG4yODM0OlxcdFxcdGVycm9yID0gZXh0NF94YXR0cl9tYWtlX2lub2RlX3NwYWNlKGhhbmRsZSwgaW5vZGUsIHJhd19pbm9kZSxcXG4yODM1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBpc2l6ZV9kaWZmLCBpZnJlZSwgYmZyZWUsXFxuMjgzNjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnRvdGFsX2lubyk7XFxuMjgzNzpcXHRcXHRpZiAoZXJyb3IpIHtcXG4yODM4OlxcdFxcdFxcdGlmIChlcnJvciA9PSAtRU5PU1BDIFxcdTAwMjZcXHUwMDI2ICF0cmllZF9taW5fZXh0cmFfaXNpemUgXFx1MDAyNlxcdTAwMjZcXG4yODM5OlxcdFxcdFxcdCAgICBzX21pbl9leHRyYV9pc2l6ZSkge1xcbjI4NDA6XFx0XFx0XFx0XFx0dHJpZWRfbWluX2V4dHJhX2lzaXplKys7XFxuMjg0MTpcXHRcXHRcXHRcXHRuZXdfZXh0cmFfaXNpemUgPSBzX21pbl9leHRyYV9pc2l6ZTtcXG4yODQyOlxcdFxcdFxcdFxcdGVycm9yID0gMDtcXG4yODQzOlxcdFxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuMjg0NDpcXHRcXHRcXHR9XFxuMjg0NTpcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuMjg0NjpcXHRcXHR9XFxuMjg0NzpcXHRzaGlmdDpcXG4yODQ4OlxcdFxcdC8qIEFkanVzdCB0aGUgb2Zmc2V0cyBhbmQgc2hpZnQgdGhlIHJlbWFpbmluZyBlbnRyaWVzIGFoZWFkICovXFxuMjg0OTpcXHRcXHRleHQ0X3hhdHRyX3NoaWZ0X2VudHJpZXMoSUZJUlNUKGhlYWRlciksIEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZXh0cmFfaXNpemVcXG4yODUwOlxcdFxcdFxcdFxcdC0gbmV3X2V4dHJhX2lzaXplLCAodm9pZCAqKXJhd19pbm9kZSArXFxuMjg1MTpcXHRcXHRcXHRcXHRFWFQ0X0dPT0RfT0xEX0lOT0RFX1NJWkUgKyBuZXdfZXh0cmFfaXNpemUsXFxuMjg1MjpcXHRcXHRcXHRcXHQodm9pZCAqKWhlYWRlciwgdG90YWxfaW5vKTtcXG4yODUzOlxcdFxcdEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZXh0cmFfaXNpemUgPSBuZXdfZXh0cmFfaXNpemU7XFxuMjg1NDpcXHRcXG4yODU1OlxcdFxcdGlmIChleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpXFxuMjg1NjpcXHRcXHRcXHRlcnJvciA9IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soaW5vZGUpO1xcbjI4NTc6XFx0XFxuMjg1ODpcXHRjbGVhbnVwOlxcbjI4NTk6XFx0XFx0aWYgKGVycm9yIFxcdTAwMjZcXHUwMDI2IChtbnRfY291bnQgIT0gbGUxNl90b19jcHUoc2JpLVxcdTAwM2VzX2VzLVxcdTAwM2VzX21udF9jb3VudCkpKSB7XFxuMjg2MDpcXHRcXHRcXHRleHQ0X3dhcm5pbmcoaW5vZGUtXFx1MDAzZWlfc2IsIFxcXCJVbmFibGUgdG8gZXhwYW5kIGlub2RlICVsbHUuIERlbGV0ZSBzb21lIEVBcyBvciBydW4gZTJmc2NrLlxcXCIsXFxuMjg2MTpcXHRcXHRcXHRcXHQgICAgIGlub2RlLVxcdTAwM2VpX2lubyk7XFxuMjg2MjpcXHRcXHRcXHRtbnRfY291bnQgPSBsZTE2X3RvX2NwdShzYmktXFx1MDAzZXNfZXMtXFx1MDAzZXNfbW50X2NvdW50KTtcXG4yODYzOlxcdFxcdH1cXG4yODY0OlxcdFxcdHJldHVybiBlcnJvcjtcXG4yODY1OlxcdH1cXG4yODY2OlxcdFxcbjI4Njc6XFx0I2RlZmluZSBFSUFfSU5DUiAxNiAvKiBtdXN0IGJlIDJebiAqL1xcbjI4Njg6XFx0I2RlZmluZSBFSUFfTUFTSyAoRUlBX0lOQ1IgLSAxKVxcbjI4Njk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDA0OjIyOjQxLjgxNDgwNDI5M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzI3Nzk4MDMwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBleHQ0IEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGV4YW1pbmVkIHRoaXMgcGF0Y2gsIGFuZCBJJ20gY29uZmlkZW50IGluIHNheWluZyB0aGF0IHRoaXMgaXMgaW5kZWVkIGEgZnVuY3Rpb25hbCBidWcgZml4IHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtLiBJIGNhbiBzZWUgdGhlIHJlYXNvbmluZyBjbGVhcmx5LiBJdCdzIGFib3V0IGhvdyBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgIGhhbmRsZXMgdGhlIHJldHVybiB2YWx1ZSBhbmQgcG90ZW50aWFsIGVycm9ycy4gU3BlY2lmaWNhbGx5LCB0aGUgY29uY2VybiBpcyB0aGF0IGFuIGAtRU5PU1BDYCBjb3VsZCBiZSByZXR1cm5lZCBldmVuIGFmdGVyIGEgc3VjY2Vzc2Z1bCBleHBhbnNpb24gb2YgdGhlIGV4dHJhIGlzaXplLCBkdWUgdG8gYW4gdW4tcmVzZXQgYGVycm9yYCB2YXJpYWJsZS4gVGhpcyBtZWFucyBhIHN1YnNlcXVlbnQgYXR0ZW1wdCBtaWdodCBub3QgYmUgdW5kZXJ0YWtlbiBkZXNwaXRlIHNwYWNlIGJlaW5nIGF2YWlsYWJsZS5cblxuR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgdGhpcyB0byBtYW5pZmVzdCBhcyBkYXRhIGNvcnJ1cHRpb24gb3Igc3B1cmlvdXMgc3BhY2UgZXhoYXVzdGlvbiwgSSdtIG1hcmtpbmcgdGhpcyBhcyBoaWdobHkgZnV6emFibGUuIEknbGwgc2V0IGBXb3J0aEZ1enppbmdgIHRvIGB0cnVlYC5cblxuSSdsbCBmb2N1cyB0aGUgZnV6emluZyBvbiB0aGUgY29yZSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhpcyBzcGVjaWZpYyBpc3N1ZTogYGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhYCBhbmQgYGV4dDRfeGF0dHJfbWFrZV9pbm9kZV9zcGFjZWAuIFRoZXNlIGFyZSB0aGUga2V5IGFyZWFzIHdoZXJlIHRoaXMgYnVnIGlzIGxpa2VseSB0byBiZSB0cmlnZ2VyZWQuIEkgYWxzbyBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBgRVhUNF9GU2AgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZW5hYmxlZCBmb3IgdGhlIGZ1enppbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gcmVhY2hhYmxlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYywgc28gSSBuZWVkIHRvIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjkwLCJPdXRwdXRUb2tlbnMiOjEzMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDA0OjIzOjE1LjA5Mjc4NjY1M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzMxMjU1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhXCIsXG4gICAgXCJleHQ0X3hhdHRyX21ha2VfaW5vZGVfc3BhY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBleHQ0IHdoZXJlIGBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYWAgY291bGQgcmV0dXJuIGAtRU5PU1BDYCBldmVuIHdoZW4gaXQgc3VjY2Vzc2Z1bGx5IGV4cGFuZGVkIHRoZSBleHRyYSBpc2l6ZSwgYmVjYXVzZSBgZXJyb3JgIHdhc24ndCByZXNldCB0byAwIGJlZm9yZSBqdW1waW5nIHRvIGByZXRyeWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYVwiLFxuICAgIFwiZXh0NF94YXR0cl9tYWtlX2lub2RlX3NwYWNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gZXh0NCB3aGVyZSBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgIGNvdWxkIHJldHVybiBgLUVOT1NQQ2AgZXZlbiB3aGVuIGl0IHN1Y2Nlc3NmdWxseSBleHBhbmRlZCB0aGUgZXh0cmEgaXNpemUsIGJlY2F1c2UgYGVycm9yYCB3YXNuJ3QgcmVzZXQgdG8gMCBiZWZvcmUganVtcGluZyB0byBgcmV0cnlgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgxvph[1] Phase: Succeeded StartedAt: 2026-07-09 04:23:29 +0000 UTC FinishedAt: 2026-07-09 04:23:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgxvph[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-09 04:23:29 +0000 UTC FinishedAt: 2026-07-09 04:23:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgxvph[2] Phase: Succeeded StartedAt: 2026-07-09 04:23:29 +0000 UTC FinishedAt: 2026-07-09 09:00:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgxvph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_expand_extra_isize_ea","ext4_xattr_make_inode_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"aaa333be-5549-4a61-a07e-21707bd65bb9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-09 04:23:29 +0000 UTC FinishedAt: 2026-07-09 09:00:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_expand_extra_isize_ea","ext4_xattr_make_inode_space"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"aaa333be-5549-4a61-a07e-21707bd65bb9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowgxvph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_expand_extra_isize_ea","ext4_xattr_make_inode_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"aaa333be-5549-4a61-a07e-21707bd65bb9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-09 04:23:29 +0000 UTC FinishedAt: 2026-07-09 04:23:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgxvph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_expand_extra_isize_ea","ext4_xattr_make_inode_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"aaa333be-5549-4a61-a07e-21707bd65bb9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-09 04:23:29 +0000 UTC FinishedAt: 2026-07-09 04:23:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowgxvph/series-workflowgxvph-convert-artifact-1343784589/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgxvph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_expand_extra_isize_ea","ext4_xattr_make_inode_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"aaa333be-5549-4a61-a07e-21707bd65bb9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-09 04:23:39 +0000 UTC FinishedAt: 2026-07-09 04:59:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgxvph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_expand_extra_isize_ea","ext4_xattr_make_inode_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"aaa333be-5549-4a61-a07e-21707bd65bb9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-09 04:23:39 +0000 UTC FinishedAt: 2026-07-09 04:59:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*7f425666-0ceb-4850-83e8-d1ed07280db7,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-workflowgxvph/series-workflowgxvph-convert-artifact-1343784589/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": "887c8b84-06cd-4bb8-abf8-ae5634004cfb", "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-workflowgxvph/series-workflowgxvph-build-action-1087365635/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgxvph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_expand_extra_isize_ea","ext4_xattr_make_inode_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"aaa333be-5549-4a61-a07e-21707bd65bb9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-09 04:23:39 +0000 UTC FinishedAt: 2026-07-09 04:59:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*7f425666-0ceb-4850-83e8-d1ed07280db7,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-workflowgxvph/series-workflowgxvph-convert-artifact-1343784589/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": "887c8b84-06cd-4bb8-abf8-ae5634004cfb", "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-workflowgxvph/series-workflowgxvph-build-action-1087365635/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgxvph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_expand_extra_isize_ea","ext4_xattr_make_inode_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"aaa333be-5549-4a61-a07e-21707bd65bb9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-09 04:59:41 +0000 UTC FinishedAt: 2026-07-09 04:59:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgxvph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_expand_extra_isize_ea","ext4_xattr_make_inode_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"aaa333be-5549-4a61-a07e-21707bd65bb9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-09 04:59:41 +0000 UTC FinishedAt: 2026-07-09 04:59:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgxvph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_expand_extra_isize_ea","ext4_xattr_make_inode_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"aaa333be-5549-4a61-a07e-21707bd65bb9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-09 04:59:41 +0000 UTC FinishedAt: 2026-07-09 04:59:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgxvph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_expand_extra_isize_ea","ext4_xattr_make_inode_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"aaa333be-5549-4a61-a07e-21707bd65bb9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-09 04:59:41 +0000 UTC FinishedAt: 2026-07-09 04:59:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"aaa333be-5549-4a61-a07e-21707bd65bb9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowgxvph/series-workflowgxvph-convert-artifact-4207698920/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgxvph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_expand_extra_isize_ea","ext4_xattr_make_inode_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"aaa333be-5549-4a61-a07e-21707bd65bb9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-09 04:59:51 +0000 UTC FinishedAt: 2026-07-09 05:01:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgxvph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_expand_extra_isize_ea","ext4_xattr_make_inode_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"aaa333be-5549-4a61-a07e-21707bd65bb9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-09 04:59:51 +0000 UTC FinishedAt: 2026-07-09 05:01:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*887c8b84-06cd-4bb8-abf8-ae5634004cfb,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-workflowgxvph/series-workflowgxvph-build-action-1087365635/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgxvph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_expand_extra_isize_ea","ext4_xattr_make_inode_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"aaa333be-5549-4a61-a07e-21707bd65bb9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-09 05:01:52 +0000 UTC FinishedAt: 2026-07-09 05:01:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgxvph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_expand_extra_isize_ea","ext4_xattr_make_inode_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"aaa333be-5549-4a61-a07e-21707bd65bb9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-09 05:01:52 +0000 UTC FinishedAt: 2026-07-09 05:01:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgxvph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_expand_extra_isize_ea","ext4_xattr_make_inode_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"aaa333be-5549-4a61-a07e-21707bd65bb9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-09 05:01:52 +0000 UTC FinishedAt: 2026-07-09 05:55:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgxvph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_expand_extra_isize_ea","ext4_xattr_make_inode_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"aaa333be-5549-4a61-a07e-21707bd65bb9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-09 05:01:52 +0000 UTC FinishedAt: 2026-07-09 05:55:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*7f425666-0ceb-4850-83e8-d1ed07280db7,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-workflowgxvph/series-workflowgxvph-convert-artifact-4207698920/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": "891694ac-91c1-4859-97dc-d8e63a73f377", "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-workflowgxvph/series-workflowgxvph-build-action-582556564/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgxvph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_expand_extra_isize_ea","ext4_xattr_make_inode_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"aaa333be-5549-4a61-a07e-21707bd65bb9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-09 05:01:52 +0000 UTC FinishedAt: 2026-07-09 05:55:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*7f425666-0ceb-4850-83e8-d1ed07280db7,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-workflowgxvph/series-workflowgxvph-convert-artifact-4207698920/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": "891694ac-91c1-4859-97dc-d8e63a73f377", "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-workflowgxvph/series-workflowgxvph-build-action-582556564/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgxvph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_expand_extra_isize_ea","ext4_xattr_make_inode_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"aaa333be-5549-4a61-a07e-21707bd65bb9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-09 05:55:41 +0000 UTC FinishedAt: 2026-07-09 05:55:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgxvph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_expand_extra_isize_ea","ext4_xattr_make_inode_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"aaa333be-5549-4a61-a07e-21707bd65bb9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-09 05:55:41 +0000 UTC FinishedAt: 2026-07-09 05:55:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgxvph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_expand_extra_isize_ea","ext4_xattr_make_inode_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"aaa333be-5549-4a61-a07e-21707bd65bb9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-09 05:55:41 +0000 UTC FinishedAt: 2026-07-09 05:57:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgxvph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_expand_extra_isize_ea","ext4_xattr_make_inode_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"aaa333be-5549-4a61-a07e-21707bd65bb9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-09 05:55:41 +0000 UTC FinishedAt: 2026-07-09 05:57:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*891694ac-91c1-4859-97dc-d8e63a73f377,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowgxvph/series-workflowgxvph-build-action-582556564/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgxvph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_expand_extra_isize_ea","ext4_xattr_make_inode_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"aaa333be-5549-4a61-a07e-21707bd65bb9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-09 05:57:57 +0000 UTC FinishedAt: 2026-07-09 09:00:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgxvph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_expand_extra_isize_ea","ext4_xattr_make_inode_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"aaa333be-5549-4a61-a07e-21707bd65bb9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-09 05:57:57 +0000 UTC FinishedAt: 2026-07-09 09:00:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_expand_extra_isize_ea","ext4_xattr_make_inode_space"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*887c8b84-06cd-4bb8-abf8-ae5634004cfb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*891694ac-91c1-4859-97dc-d8e63a73f377,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowgxvph/series-workflowgxvph-build-action-1087365635/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowgxvph/series-workflowgxvph-build-action-582556564/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowgxvph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_expand_extra_isize_ea","ext4_xattr_make_inode_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"aaa333be-5549-4a61-a07e-21707bd65bb9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-09 05:57:57 +0000 UTC FinishedAt: 2026-07-09 05:58:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgxvph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_expand_extra_isize_ea","ext4_xattr_make_inode_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"aaa333be-5549-4a61-a07e-21707bd65bb9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-09 05:57:57 +0000 UTC FinishedAt: 2026-07-09 05:58:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_expand_extra_isize_ea","ext4_xattr_make_inode_space"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowgxvph/series-workflowgxvph-convert-artifact-2187909153/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgxvph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_expand_extra_isize_ea","ext4_xattr_make_inode_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"aaa333be-5549-4a61-a07e-21707bd65bb9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-09 05:57:57 +0000 UTC FinishedAt: 2026-07-09 05:57:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgxvph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_expand_extra_isize_ea","ext4_xattr_make_inode_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"aaa333be-5549-4a61-a07e-21707bd65bb9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-09 05:57:57 +0000 UTC FinishedAt: 2026-07-09 05:57:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgxvph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_expand_extra_isize_ea","ext4_xattr_make_inode_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"aaa333be-5549-4a61-a07e-21707bd65bb9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-09 05:57:57 +0000 UTC FinishedAt: 2026-07-09 05:57:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgxvph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_expand_extra_isize_ea","ext4_xattr_make_inode_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"aaa333be-5549-4a61-a07e-21707bd65bb9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-09 05:58:07 +0000 UTC FinishedAt: 2026-07-09 09:00:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgxvph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_expand_extra_isize_ea","ext4_xattr_make_inode_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"aaa333be-5549-4a61-a07e-21707bd65bb9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-09 05:58:07 +0000 UTC FinishedAt: 2026-07-09 09:00:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*887c8b84-06cd-4bb8-abf8-ae5634004cfb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*891694ac-91c1-4859-97dc-d8e63a73f377,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowgxvph/series-workflowgxvph-build-action-1087365635/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowgxvph/series-workflowgxvph-build-action-582556564/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowgxvph/series-workflowgxvph-convert-artifact-2187909153/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}