Name: series-workflow68wkb Phase: Succeeded StartedAt: 2026-07-11 21:54:25 +0000 UTC FinishedAt: 2026-07-12 00:15:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow68wkb[0] Phase: Succeeded StartedAt: 2026-07-11 21:54:25 +0000 UTC FinishedAt: 2026-07-11 22:33:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow68wkb[0].run-triage Phase: Succeeded StartedAt: 2026-07-11 21:54:25 +0000 UTC FinishedAt: 2026-07-11 22:33:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG" ], "series_id": "9c3fc021-5f0f-45b2-94cb-21b4c6e25374" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "alloc_shrinker_info" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIyOjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2Nfc2hyaW5rZXJfaW5mbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBvZiBgYWxsb2Nfc2hyaW5rZXJfaW5mb2AgZHVyaW5nIG1lbW9yeSBjZ3JvdXAgY3JlYXRpb24uIEZ1enppbmcgdGhpcyByZXF1aXJlcyB0cmlnZ2VyaW5nIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIHdoaWxlIGNyZWF0aW5nIG1lbWNncy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMjozMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDZkM2M4NDEyNTZhZjVmZWI1ZjQzYjQ5MzVmMTk4YTc4NTdjMmViNDVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxMSAyMjozMjo0MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9zaHJpbmtlci5jIGIvbW0vc2hyaW5rZXIuY1xuaW5kZXggNzA4MmQwMWM4YzlkMGQuLjkyYzZjYjQ1NWZjOThkIDEwMDY0NFxuLS0tIGEvbW0vc2hyaW5rZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2hyaW5rZXIuY1xuQEAgLTc4LDYgJiM0Mzs3OCw3IEBAIGludCBhbGxvY19zaHJpbmtlcl9pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRpbnQgbmlkLCByZXQgPSAwO1xuIFx0aW50IGFycmF5X3NpemUgPSAwO1xuJiM0MztcdGludCBmYWlsZWRfbmlkO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZzaHJpbmtlcl9tdXRleCk7XG4gXHRhcnJheV9zaXplID0gc2hyaW5rZXJfdW5pdF9zaXplKHNocmlua2VyX25yX21heCk7XG5AQCAtOTgsOCAmIzQzOzk5LDE4IEBAIGludCBhbGxvY19zaHJpbmtlcl9pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiBcdHJldHVybiByZXQ7XG4gXG4gZXJyOlxuJiM0MztcdGZhaWxlZF9uaWQgPSBuaWQ7XG4mIzQzO1x0Zm9yX2VhY2hfbm9kZShuaWQpIHtcbiYjNDM7XHRcdHN0cnVjdCBzaHJpbmtlcl9pbmZvICppbmZvO1xuJiM0MztcbiYjNDM7XHRcdGlmIChuaWQgXHUwMDNlPSBmYWlsZWRfbmlkKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGluZm8gPSBzaHJpbmtlcl9pbmZvX3Byb3RlY3RlZChtZW1jZywgbmlkKTtcbiYjNDM7XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihtZW1jZy1cdTAwM2Vub2RlaW5mb1tuaWRdLVx1MDAzZXNocmlua2VyX2luZm8sIE5VTEwpO1xuJiM0MztcdFx0c2hyaW5rZXJfdW5pdF9mcmVlKGluZm8sIDApO1xuJiM0MztcdFx0a3ZmcmVlKGluZm8pO1xuJiM0MztcdH1cbiBcdG11dGV4X3VubG9jayhcdTAwMjZzaHJpbmtlcl9tdXRleCk7XG4tXHRmcmVlX3Nocmlua2VyX2luZm8obWVtY2cpO1xuIFx0cmV0dXJuIC1FTk9NRU07XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIyOjMyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2Nfc2hyaW5rZXJfaW5mbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBvZiBgYWxsb2Nfc2hyaW5rZXJfaW5mb2AgZHVyaW5nIG1lbW9yeSBjZ3JvdXAgY3JlYXRpb24uIEZ1enppbmcgdGhpcyByZXF1aXJlcyB0cmlnZ2VyaW5nIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIHdoaWxlIGNyZWF0aW5nIG1lbWNncy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmQzYzg0MTI1NmFmNWZlYjVmNDNiNDkzNWYxOThhNzg1N2MyZWI0NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgSnVsIDExIDIyOjMyOjQxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vc2hyaW5rZXIuYyBiL21tL3Nocmlua2VyLmMKaW5kZXggNzA4MmQwMWM4YzlkMGQuLjkyYzZjYjQ1NWZjOThkIDEwMDY0NAotLS0gYS9tbS9zaHJpbmtlci5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Nocmlua2VyLmMKQEAgLTc4LDYgJiM0Mzs3OCw3IEBAIGludCBhbGxvY19zaHJpbmtlcl9pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIAlpbnQgbmlkLCByZXQgPSAwOwogCWludCBhcnJheV9zaXplID0gMDsKJiM0MzsJaW50IGZhaWxlZF9uaWQ7CiAKIAltdXRleF9sb2NrKCZhbXA7c2hyaW5rZXJfbXV0ZXgpOwogCWFycmF5X3NpemUgPSBzaHJpbmtlcl91bml0X3NpemUoc2hyaW5rZXJfbnJfbWF4KTsKQEAgLTk4LDggJiM0Mzs5OSwxOCBAQCBpbnQgYWxsb2Nfc2hyaW5rZXJfaW5mbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiAJcmV0dXJuIHJldDsKIAogZXJyOgomIzQzOwlmYWlsZWRfbmlkID0gbmlkOwomIzQzOwlmb3JfZWFjaF9ub2RlKG5pZCkgewomIzQzOwkJc3RydWN0IHNocmlua2VyX2luZm8gKmluZm87CiYjNDM7CiYjNDM7CQlpZiAobmlkICZndDs9IGZhaWxlZF9uaWQpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlpbmZvID0gc2hyaW5rZXJfaW5mb19wcm90ZWN0ZWQobWVtY2csIG5pZCk7CiYjNDM7CQlyY3VfYXNzaWduX3BvaW50ZXIobWVtY2ctJmd0O25vZGVpbmZvW25pZF0tJmd0O3Nocmlua2VyX2luZm8sIE5VTEwpOwomIzQzOwkJc2hyaW5rZXJfdW5pdF9mcmVlKGluZm8sIDApOwomIzQzOwkJa3ZmcmVlKGluZm8pOwomIzQzOwl9CiAJbXV0ZXhfdW5sb2NrKCZhbXA7c2hyaW5rZXJfbXV0ZXgpOwotCWZyZWVfc2hyaW5rZXJfaW5mbyhtZW1jZyk7CiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjI6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYG1tL3Nocmlua2VyLmNgIFBhdGNoKioKCk9rYXksIHNvIHRoZXJlJiMzOTtzIGEgcGF0Y2ggaW4gYG1tL3Nocmlua2VyLmNgLiBNeSBpbml0aWFsIHJlYWQgc3VnZ2VzdHMgaXTigJlzIGRlYWxpbmcgd2l0aCBhbiBlcnJvciBwYXRoIHdpdGhpbiBgYWxsb2Nfc2hyaW5rZXJfaW5mb2AuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgaXNzdWUgcmV2b2x2ZXMgYXJvdW5kIGhvdyB0aGUgY29kZSBoYW5kbGVzIGZhaWx1cmVzIGR1cmluZyB0aGUgYWxsb2NhdGlvbiBvZiBgc2hyaW5rZXJfaW5mb2Agc3RydWN0dXJlcy4gSW5zdGVhZCBvZiB1c2luZyB0aGUgbW9yZSBjb252ZW50aW9uYWwgYGZyZWVfc2hyaW5rZXJfaW5mbyhtZW1jZylgIGZvciBjbGVhbnVwLCB0aGlzIHBhdGNoIGFkb3B0cyBhIG1hbnVhbCBhcHByb2FjaC4gSXQgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgbm9kZXMgdXAgdG8gYSBwb2ludCBkZXNpZ25hdGVkIGFzIGBmYWlsZWRfbmlkYCwgYW5kIGZyZWVzIHRoZSBhbGxvY2F0ZWQgYHNocmlua2VyX2luZm9gIHN0cnVjdHVyZXMgaW5kaXZpZHVhbGx5LiBUaGUgZm9jdXMsIHRoZW4sIGlzIGRlZmluaXRlbHkgb24gaW1wcm92aW5nIHRoZSByb2J1c3RuZXNzIG9mIHRoYXQgZmFpbHVyZSBoYW5kbGluZy4gSSBzaG91bGQgcHJvYmFibHkgZGl2ZSBpbnRvIGBhbGxvY19zaHJpbmtlcl9pbmZvYCBpdHNlbGYgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXTigJlzIGdvaW5nIG9uIGFuZCB2ZXJpZnkgdGhhdCB0aGUgbWFudWFsIGZyZWVpbmcgaXMgdGhlIHJpZ2h0IHdheSB0byBhcHByb2FjaCB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhlIGNvbnZlbnRpb25hbCBjbGVhbnVwIGlzbiYjMzk7dCBzdWZmaWNpZW50IGluIHRoaXMgc3BlY2lmaWMgc2NlbmFyaW8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjI6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2Nfc2hyaW5rZXJfaW5mbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Nocmlua2VyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2hyaW5rZXIuYz02Mj12b2lkIGZyZWVfc2hyaW5rZXJfaW5mbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vc2hyaW5rZXIuYy03Ni1cbm1tL3Nocmlua2VyLmM6Nzc6aW50IGFsbG9jX3Nocmlua2VyX2luZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vc2hyaW5rZXIuYy03OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjI6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQxNAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgYWxsb2Nfc2hyaW5rZXJfaW5mb2AgaW4gbW0vc2hyaW5rZXIuYyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBtbS9zaHJpbmtlci5jYCBhbmQgemVybyBpbiBvbiB0aGUgYGFsbG9jX3Nocmlua2VyX2luZm9gIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiBtZW1vcnkgcmVjbGFtYXRpb24uIEkga25vdyBzaHJpbmtlcnMgYXJlIGZ1bmRhbWVudGFsLCBidXQgSSBuZWVkIGEgcmVmcmVzaGVyIG9uIHRoZSBwcmVjaXNlIG1lY2hhbmlzbSBhbmQgY29udGV4dCB0aGlzIGZ1bmN0aW9uIHVzZXMuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBudWFuY2VzIG9mIGhvdyBpdCYjMzk7cyBhbGxvY2F0aW5nIGFuZCBpbml0aWFsaXppbmcgdGhlIHN0cnVjdHVyZXMgdXNlZCB0byBtYW5hZ2UgcmVjbGFpbWFibGUgcGFnZXMgYW5kIGhvdyB0aGF0IHRpZXMgaW50byB0aGUgb3ZlcmFsbCBkZXNpZ24gb2YgdGhlIGtlcm5lbCYjMzk7cyBsb3cgbWVtb3J5IHNpdHVhdGlvbi4gVGhlcmUgYXJlIGEgZmV3IGRpZmZlcmVudCBkYXRhIHN0cnVjdHVyZXMgaW4gdGhpcyBzZWN0aW9uIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgaG93IHRoZXkgaW50ZXJhY3QuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Nocmlua2VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDcwOlx0XHRcdGluZm8gPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHBuLVx1MDAzZXNocmlua2VyX2luZm8sIHRydWUpO1xuICA3MTpcdFx0XHRzaHJpbmtlcl91bml0X2ZyZWUoaW5mbywgMCk7XG4gIDcyOlx0XHRcdGt2ZnJlZShpbmZvKTtcbiAgNzM6XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHBuLVx1MDAzZXNocmlua2VyX2luZm8sIE5VTEwpO1xuICA3NDpcdFx0fVxuICA3NTpcdH1cbiAgNzY6XHRcbiAgNzc6XHRpbnQgYWxsb2Nfc2hyaW5rZXJfaW5mbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gIDc4Olx0e1xuICA3OTpcdFx0aW50IG5pZCwgcmV0ID0gMDtcbiAgODA6XHRcdGludCBhcnJheV9zaXplID0gMDtcbiAgODE6XHRcdGludCBmYWlsZWRfbmlkO1xuICA4MjpcdFxuICA4MzpcdFx0bXV0ZXhfbG9jayhcdTAwMjZzaHJpbmtlcl9tdXRleCk7XG4gIDg0Olx0XHRhcnJheV9zaXplID0gc2hyaW5rZXJfdW5pdF9zaXplKHNocmlua2VyX25yX21heCk7XG4gIDg1Olx0XHRmb3JfZWFjaF9ub2RlKG5pZCkge1xuICA4NjpcdFx0XHRzdHJ1Y3Qgc2hyaW5rZXJfaW5mbyAqaW5mbyA9IGt2emFsbG9jX25vZGUoc2l6ZW9mKCppbmZvKSAmIzQzOyBhcnJheV9zaXplLFxuICA4NzpcdFx0XHRcdFx0XHRcdFx0ICAgR0ZQX0tFUk5FTCwgbmlkKTtcbiAgODg6XHRcdFx0aWYgKCFpbmZvKVxuICA4OTpcdFx0XHRcdGdvdG8gZXJyO1xuICA5MDpcdFx0XHRpbmZvLVx1MDAzZW1hcF9ucl9tYXggPSBzaHJpbmtlcl9ucl9tYXg7XG4gIDkxOlx0XHRcdGlmIChzaHJpbmtlcl91bml0X2FsbG9jKGluZm8sIE5VTEwsIG5pZCkpIHtcbiAgOTI6XHRcdFx0XHRrdmZyZWUoaW5mbyk7XG4gIDkzOlx0XHRcdFx0Z290byBlcnI7XG4gIDk0Olx0XHRcdH1cbiAgOTU6XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKG1lbWNnLVx1MDAzZW5vZGVpbmZvW25pZF0tXHUwMDNlc2hyaW5rZXJfaW5mbywgaW5mbyk7XG4gIDk2Olx0XHR9XG4gIDk3Olx0XHRtdXRleF91bmxvY2soXHUwMDI2c2hyaW5rZXJfbXV0ZXgpO1xuICA5ODpcdFxuICA5OTpcdFx0cmV0dXJuIHJldDtcbiAxMDA6XHRcbiAxMDE6XHRlcnI6XG4gMTAyOlx0XHRmYWlsZWRfbmlkID0gbmlkO1xuIDEwMzpcdFx0Zm9yX2VhY2hfbm9kZShuaWQpIHtcbiAxMDQ6XHRcdFx0c3RydWN0IHNocmlua2VyX2luZm8gKmluZm87XG4gMTA1Olx0XG4gMTA2Olx0XHRcdGlmIChuaWQgXHUwMDNlPSBmYWlsZWRfbmlkKVxuIDEwNzpcdFx0XHRcdGJyZWFrO1xuIDEwODpcdFx0XHRpbmZvID0gc2hyaW5rZXJfaW5mb19wcm90ZWN0ZWQobWVtY2csIG5pZCk7XG4gMTA5Olx0XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihtZW1jZy1cdTAwM2Vub2RlaW5mb1tuaWRdLVx1MDAzZXNocmlua2VyX2luZm8sIE5VTEwpO1xuIDExMDpcdFx0XHRzaHJpbmtlcl91bml0X2ZyZWUoaW5mbywgMCk7XG4gMTExOlx0XHRcdGt2ZnJlZShpbmZvKTtcbiAxMTI6XHRcdH1cbiAxMTM6XHRcdG11dGV4X3VubG9jayhcdTAwMjZzaHJpbmtlcl9tdXRleCk7XG4gMTE0Olx0XHRyZXR1cm4gLUVOT01FTTtcbiAxMTU6XHR9XG4gMTE2Olx0XG4gMTE3Olx0c3RhdGljIHN0cnVjdCBzaHJpbmtlcl9pbmZvICpzaHJpbmtlcl9pbmZvX3Byb3RlY3RlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gMTE4Olx0XHRcdFx0XHRcdFx0ICAgICBpbnQgbmlkKVxuIDExOTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMjozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzQ5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgYnVnIGZpeCwgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgRGVhZGxvY2sgaW4gTWVtb3J5IENHIFNocmlua2luZyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGNsYWltcyB0byBmaXggYSBwcmV0dHkgbmFzdHkgYnVnLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBpbiB0aGUgYGFsbG9jX3Nocmlua2VyX2luZm9gIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhvdyB0aGUgbWVtb3J5IGNncm91cCYjMzk7cyBzaHJpbmtlciBpbmZvIGlzIGhhbmRsZWQuIEkgcmVtZW1iZXIgYGZyZWVfc2hyaW5rZXJfaW5mbyhtZW1jZylgIGJlaW5nIGNhbGxlZCB3aGlsZSBhbHJlYWR5IGhvbGRpbmcgdGhlIGBzaHJpbmtlcl9tdXRleGAuIFRoYXQgcmluZ3Mgc29tZSBhbGFybSBiZWxscyBpbW1lZGlhdGVseS4gTXkgZ3V0IHRlbGxzIG1lIHRoZXJlJiMzOTtzIGEgcG90ZW50aWFsIGRlYWRsb2NrIGx1cmtpbmcgaGVyZS4gVGhlIHF1ZXN0aW9uIGlzLCBkb2VzIGBmcmVlX3Nocmlua2VyX2luZm9gICppdHNlbGYqIHRyeSB0byBhY3F1aXJlIHRoZSBgc2hyaW5rZXJfbXV0ZXhgPyBJZiBpdCBkb2VzLCBhbmQgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIHdoaWxlIHRoZSBtdXRleCBpcyBhbHJlYWR5IGhlbGQsIHdlJiMzOTt2ZSBnb3QgYSBjbGFzc2ljIGRlYWRsb2NrIHNjZW5hcmlvLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSBmb3IgYGZyZWVfc2hyaW5rZXJfaW5mb2AgYW5kIHZlcmlmeSB0aGF0IGFzc3VtcHRpb24uIEkgbmVlZCB0byBjb25maXJtIGlmIHRoYXQgbmVzdGVkIGxvY2sgYWNxdWlzaXRpb24gaXMgYWN0dWFsbHkgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIyOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vc2hyaW5rZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTU6XHRcbiAgNTY6XHRcdFx0bmV3LVx1MDAzZXVuaXRbaV0gPSB1bml0O1xuICA1NzpcdFx0fVxuICA1ODpcdFxuICA1OTpcdFx0cmV0dXJuIDA7XG4gIDYwOlx0fVxuICA2MTpcdFxuICA2MjpcdHZvaWQgZnJlZV9zaHJpbmtlcl9pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiAgNjM6XHR7XG4gIDY0Olx0XHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG47XG4gIDY1Olx0XHRzdHJ1Y3Qgc2hyaW5rZXJfaW5mbyAqaW5mbztcbiAgNjY6XHRcdGludCBuaWQ7XG4gIDY3Olx0XG4gIDY4Olx0XHRmb3JfZWFjaF9ub2RlKG5pZCkge1xuICA2OTpcdFx0XHRwbiA9IG1lbWNnLVx1MDAzZW5vZGVpbmZvW25pZF07XG4gIDcwOlx0XHRcdGluZm8gPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHBuLVx1MDAzZXNocmlua2VyX2luZm8sIHRydWUpO1xuICA3MTpcdFx0XHRzaHJpbmtlcl91bml0X2ZyZWUoaW5mbywgMCk7XG4gIDcyOlx0XHRcdGt2ZnJlZShpbmZvKTtcbiAgNzM6XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHBuLVx1MDAzZXNocmlua2VyX2luZm8sIE5VTEwpO1xuICA3NDpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIyOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MjQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgZnJlZV9zaHJpbmtlcl9pbmZvYCBhbmQgTXV0ZXggVXNhZ2UqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbm90aWNlZCB0aGF0IGBmcmVlX3Nocmlua2VyX2luZm9gIGRvZXNuJiMzOTt0IHRha2UgdGhlIGBzaHJpbmtlcl9tdXRleGAuIFRoYXQgc2VlbXPigKYgb2RkLiBUaGUgb3JpZ2luYWwgY29kZSBpbiBgYWxsb2Nfc2hyaW5rZXJfaW5mb2AgY2FsbGVkIGBmcmVlX3Nocmlua2VyX2luZm9gICphZnRlciogdW5sb2NraW5nIHRoZSBgc2hyaW5rZXJfbXV0ZXhgLgoKYGBgCmVycjoKCW11dGV4X3VubG9jaygmYW1wO3Nocmlua2VyX211dGV4KTsKCWZyZWVfc2hyaW5rZXJfaW5mbyhtZW1jZyk7CglyZXR1cm4gLUVOT01FTTsKYGBgCgpOb3csIHRoZSBuZXcgY29kZSwgdW5kZXIgdGhlIHNhbWUgZXJyb3IgY29uZGl0aW9uLCBsb29rcyBsaWtlIHRoaXM6CgpgYGAKZXJyOgoJZmFpbGVkX25pZCA9IG5pZDsKCWZvcl9lYWNoX25vZGUobmlkKSB7CgkJc3RydWN0IHNocmlua2VyX2luZm8gKmluZm87CgoJCWlmIChuaWQgJmd0Oz0gZmFpbGVkX25pZCkKCQkJYnJlYWs7CgkJaW5mbyA9IHNocmlua2VyX2luZm9fcHJvdGVjdGVkKG1lbWNnLCBuaWQpOwoJCXJjdV9hc3NpZ25fcG9pbnRlcihtZW1jZy0mZ3Q7bm9kZWluZm9bbmlkXS0mZ3Q7c2hyaW5rZXJfaW5mbywgTlVMTCk7CgkJc2hyaW5rZXJfdW5pdF9mcmVlKGluZm8sIDApOwoJCWt2ZnJlZShpbmZvKTsKCX0KCW11dGV4X3VubG9jaygmYW1wO3Nocmlua2VyX211dGV4KTsKCXJldHVybiAtRU5PTUVNOwpgYGAKClRoaXMgY2hhbmdlIGlzIHNpZ25pZmljYW50LiBUaGUgb2xkIGBmcmVlX3Nocmlua2VyX2luZm9gIGNhbGwgaXMgZ29uZSwgcmVwbGFjZWQgd2l0aCB0aGlzIGxvb3AgYW5kIGEgZGlmZmVyZW50IGZyZWVpbmcgcHJvY2Vzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSouIFdhcyB0aGUgb3JpZ2luYWwgYGZyZWVfc2hyaW5rZXJfaW5mb2AgcG90ZW50aWFsbHkgZnJlZWluZyBub2RlcyB0aGF0IGhhZG4mIzM5O3QgYmVlbiBhbGxvY2F0ZWQgeWV0PyBJcyBpdCBwb3NzaWJsZSB0aGF0IGBmcmVlX3Nocmlua2VyX2luZm9gICpuZWVkcyogdGhlIGBzaHJpbmtlcl9tdXRleGAgdG8gYmUgaGVsZD8KCkFoYSEgYGZyZWVfc2hyaW5rZXJfaW5mb2AgdXNlcyBgcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChwbi0mZ3Q7c2hyaW5rZXJfaW5mbywgdHJ1ZSlgLiBUaGF0JiMzOTtzIGEga2V5IGNsdWUuIEZ1cnRoZXIsIHRoZSBjb2RlIHVzZXMgYHNocmlua2VyX2luZm9fcHJvdGVjdGVkYC4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgYW5kIHNlZSB3aGF0IHRoYXQgZnVuY3Rpb24gZG9lcy4gQW5kIHRoZXJlIGl0IGlzISBgc2hyaW5rZXJfaW5mb19wcm90ZWN0ZWRgIGl0c2VsZiB1c2VzIGByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKC4uLiwgbG9ja2RlcF9pc19oZWxkKCZhbXA7c2hyaW5rZXJfbXV0ZXgpKWAuIFRoYXQgZXhwbGFpbnMgaXQhIEl0IHNlZW1zIHRoZSBjcml0aWNhbCBzZWN0aW9uIG9mIGBmcmVlX3Nocmlua2VyX2luZm9gIG5lZWRzIHRvIGVuc3VyZSB0aGUgbXV0ZXggaXMgaGVsZCwgb3IgdGhlIFJDVSByZWFkcyBjb3VsZCByYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Nocmlua2VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDExNzpcdHN0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXJfaW5mbyAqc2hyaW5rZXJfaW5mb19wcm90ZWN0ZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIDExODpcdFx0XHRcdFx0XHRcdCAgICAgaW50IG5pZClcbiAxMTk6XHR7XG4gMTIwOlx0XHRyZXR1cm4gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtZW1jZy1cdTAwM2Vub2RlaW5mb1tuaWRdLVx1MDAzZXNocmlua2VyX2luZm8sXG4gMTIxOlx0XHRcdFx0XHRcdCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2c2hyaW5rZXJfbXV0ZXgpKTtcbiAxMjI6XHR9XG4gMTIzOlx0XG4gMTI0Olx0c3RhdGljIGludCBleHBhbmRfb25lX3Nocmlua2VyX2luZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmV3X3NpemUsXG4gMTI1Olx0XHRcdFx0XHQgICAgaW50IG9sZF9zaXplLCBpbnQgbmV3X25yX21heClcbiAxMjY6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIyOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNDkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0OiBgZnJlZV9zaHJpbmtlcl9pbmZvYCBhbmQgTWVtb3J5IFByZXNzdXJlIGluIE1lbWNncyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGZyZWVfc2hyaW5rZXJfaW5mb2AgYW5kIEkgc2VlIGl0JiMzOTtzIHVzaW5nIGByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHBuLSZndDtzaHJpbmtlcl9pbmZvLCB0cnVlKWAuIFRoYXQmIzM5O3Mgc3RhbmRhcmQgZW5vdWdoLCBidXQgbGV0JiMzOTtzIGRpZyBkZWVwZXIuIFRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzIHRoYXQgYGFsbG9jX3Nocmlua2VyX2luZm9gIGlzICphbHNvKiBmcmVlaW5nIGFueSBhbGxvY2F0ZWQgYHNocmlua2VyX2luZm9gIGluc3RhbmNlcyBpZiBpdCBmYWlscy4gVGhhdCYjMzk7cyBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyEKClRoZSBjcnV4IG9mIHRoZSBwcm9ibGVtLCBhbmQgd2h5IHRoaXMgY291bGQgYmUgaW50ZXJlc3RpbmcsIGlzIHdoZXJlIGBhbGxvY19zaHJpbmtlcl9pbmZvYCBpcyBjYWxsZWQ6IGR1cmluZyBtZW1jZyBjcmVhdGlvbi4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyB0aGlzIGFzIGEgcG9zc2libGUgbWVtb3J5IG1hbmFnZW1lbnQvY2dyb3VwIGVycm9yIHBhdGgsIHJpcGUgZm9yIGZ1enppbmcuIElmIGBhbGxvY19zaHJpbmtlcl9pbmZvYCBmYWlscywgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgY2xlYW51cCBpcyBjb3JyZWN0LiBUaGUgZ29hbCBpcyB0byB0cmlnZ2VyIHRoaXMgZXJyb3IsIHdoaWNoIG1lYW5zIHdlIG5lZWQgdG8gaW5kdWNlIGEgZmFpbHVyZSB3aXRoaW4gYGFsbG9jX3Nocmlua2VyX2luZm9gIGl0c2VsZi4gVGhhdCBtZWFucyBlaXRoZXIgYSBga3Z6YWxsb2Nfbm9kZWAgZmFpbHVyZSBvciBgc2hyaW5rZXJfdW5pdF9hbGxvY2AgZmFpbGluZy4KClJpZ2h0LCBzbyB0aGlzIGlzIGFuIGVycm9yIHBhdGguIFRvIHJlbGlhYmx5IGZ1enogdGhpcywgSSYjMzk7bGwgbmVlZCB0byBpbmR1Y2UgbWVtb3J5IHByZXNzdXJlIHNvbWVob3csIG9yIGxvb2sgaW50byBmYXVsdCBpbmplY3Rpb24gdG8gc3BlY2lmaWNhbGx5IHRyaWdnZXIgdGhlc2UgZmFpbHVyZXMuIFNpbmNlIGBhbGxvY19zaHJpbmtlcl9pbmZvYCBpcyBjYWxsZWQgZnJvbSBgbWVtX2Nncm91cF9jc3NfYWxsb2NgLCB0cmlnZ2VyaW5nIHRoaXMgcmVsaWFibHkgZGVwZW5kcyBvbiB0aGUgYWJpbGl0eSB0byBmYWlsIGVpdGhlciBga3Z6YWxsb2Nfbm9kZWAgb3IgYHNocmlua2VyX3VuaXRfYWxsb2NgIGluIHRoZSBgbWVtX2Nncm91cF9jc3NfYWxsb2NgIGZ1bmN0aW9uLiBJIHRoaW5rIHRoaXMgd2lsbCBiZSBhbiBpbnRlcmVzdGluZyBmdXp6aW5nIHRhcmdldCwgYSBsb3Qgb2YgcG90ZW50aWFsIGhlcmUgZm9yIGRpc2NvdmVyaW5nIG1lbW9yeSBpc3N1ZXMgaW4gbWVtY2cgY3JlYXRpb24gZHVyaW5nIHJlc291cmNlIGNvbnN0cmFpbmVkIGNvbmRpdGlvbnMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIyOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX3Nocmlua2VyX2luZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTQyMDk9c3RhdGljIGludCBtZW1fY2dyb3VwX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbi0tXG5tbS9tZW1jb250cm9sLmMtNDIyMS1cdCAqL1xubW0vbWVtY29udHJvbC5jOjQyMjI6XHRpZiAoYWxsb2Nfc2hyaW5rZXJfaW5mbyhtZW1jZykpXG5tbS9tZW1jb250cm9sLmMtNDIyMy1cdFx0Z290byBvZmZsaW5lX2ttZW07XG4tLVxubW0vc2hyaW5rZXIuYz02Mj12b2lkIGZyZWVfc2hyaW5rZXJfaW5mbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vc2hyaW5rZXIuYy03Ni1cbm1tL3Nocmlua2VyLmM6Nzc6aW50IGFsbG9jX3Nocmlua2VyX2luZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vc2hyaW5rZXIuYy03OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MzYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvZGUgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbiBjYWxsIOKAkyBpdCYjMzk7cyBjb21pbmcgZnJvbSBgbWVtX2Nncm91cF9jc3Nfb25saW5lYC4gUmlnaHQuIE5vdywgaWYgSSB3YW50IHRvIGZ1enogdGhpcyBwYXJ0aWN1bGFyIGFyZWEsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgc3lzdGVtIGlzIGJ1aWx0IHdpdGggYENPTkZJR19NRU1DR2AgZW5hYmxlZC4gTm8gcG9pbnQgaW4gdHJ5aW5nIHRvIGZ1enogc29tZXRoaW5nIHRoYXQgaXNuJiMzOTt0IGV2ZW4gY29tcGlsZWQgaW4hIExldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIGhhcyB0aGlzIGVuYWJsZWQgYmVmb3JlIHByb2NlZWRpbmcgYW55IGZ1cnRoZXIsIHRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIyOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA2Mz1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbi0tXG5pbml0L0tjb25maWctMTA3Mi1cbmluaXQvS2NvbmZpZzoxMDczOmNvbmZpZyBNRU1DR1xuaW5pdC9LY29uZmlnLTEwNzQtXHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnLTEwODEtXG5pbml0L0tjb25maWc6MTA4Mjpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuaW5pdC9LY29uZmlnLTEwODMtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTEwODgtXG5pbml0L0tjb25maWc6MTA4OTpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbmluaXQvS2NvbmZpZy0xMDkwLVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMDk1LVxuaW5pdC9LY29uZmlnOjEwOTY6Y29uZmlnIE1FTUNHX1YxXG5pbml0L0tjb25maWctMTA5Ny1cdGJvb2wgXCYjMzQ7TGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjQyCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgTUVNQ0dgIENvbmZpZ3VyYXRpb24gYW5kIFNocmlua2VyIEluZm9ybWF0aW9uKioKCk9rYXksIHNvIHRoZSBpbml0aWFsIHF1ZXN0aW9uIGlzIGFib3V0IHRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gbWVtb3J5IGNncm91cHMg4oCTIGBNRU1DR2AsIHRoYXQmIzM5O3MgdGhlIGtleS4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGF0LCBhbmQgSSBiZWxpZXZlIHRoZSBzcGVjaWZpYyBzeW1ib2wgSSYjMzk7bSB0cmFja2luZyBkb3duIGlzIGBhbGxvY19zaHJpbmtlcl9pbmZvYC4gSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGF0JiMzOTtzIHRoZSBjcml0aWNhbCBwaWVjZSBmb3IgdW5kZXJzdGFuZGluZyB0aGUgbWVtb3J5IHNocmlua2VyIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIG1lbWNncy4KCk5vdywgYSBxdWljayBjaGVjay4uLmlzIHRoZXJlICphbm90aGVyKiByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbiBsdXJraW5nIGFyb3VuZD8gQWgsIHJpZ2h0LCBgQ09ORklHX1NIUklOS0VSX0RFQlVHYCBleGlzdHMgYnV0IHRoYXQmIzM5O3MganVzdCBhIGRlYnVnZ2luZyBvcHRpb24sIGl0IGRvZXNuJiMzOTt0IHNlZW0gdG8gYWZmZWN0IHRoZSBjb3JlIHByZXNlbmNlIG9mIHNocmlua2VyIGluZm9ybWF0aW9uIGZvciBtZW1jZ3MsIGl0IHdpbGwgYWx3YXlzIGJlIHRoZXJlLiBTbywgSSBkb24mIzM5O3QgbmVlZCB0byBjb25zaWRlciB0aGF0IGFzIGEgcHJlLXJlcXVpc2l0ZS4KClJpZ2h0LCBgYWxsb2Nfc2hyaW5rZXJfaW5mb2AuLi4gSSB2YWd1ZWx5IHJlY2FsbCB0aGF0IGJlaW5nIGRlZmluZWQgb3IgaW1wbGVtZW50ZWQgd2l0aGluIGBtbS9zaHJpbmtlci5jYC4gTGV0IG1lIGp1c3QgdmVyaWZ5IHRoYXQ7IEkgd2lsbCBub3cgaGF2ZSB0byBjaGVjayBpZiB0aGlzIGZpbGUsIGBtbS9zaHJpbmtlci5jYCwgaXMgY29tcGlsZWQgY29uZGl0aW9uYWxseSBiYXNlZCBvbiBhbnkgb3RoZXIgZmxhZ3MuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjb2RlIGlzICphY3R1YWxseSogaW5jbHVkZWQgd2hlbiBkZWFsaW5nIHdpdGggbWVtb3J5IGNncm91cHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIyOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nocmlua2VyLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT01MT1vYmoteVx0XHRcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcbm1tL01ha2VmaWxlLTUyLVx0XHRcdCAgIG1hY2Nlc3MubyBwYWdlLXdyaXRlYmFjay5vIGZvbGlvLWNvbXBhdC5vIFxcXG5tbS9NYWtlZmlsZTo1MzpcdFx0XHQgICByZWFkYWhlYWQubyBzd2FwLm8gdHJ1bmNhdGUubyB2bXNjYW4ubyBzaHJpbmtlci5vIFxcXG5tbS9NYWtlZmlsZS01NC1cdFx0XHQgICBzaG1lbS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3NTIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGF0IGtlcm5lbCBjb2RlIHNuaXBwZXQsIHB1dHRpbmcgbXlzZWxmIGluIHRoZSByb2xlIG9mIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBhIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIGluIHRoZSBNZW1vcnkgU2hyaW5rZXIqKgoKUmlnaHQsIHNvIGl0JiMzOTtzIGFsd2F5cyBjb21waWxlZCwgYnV0IHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgZnVuY3Rpb24sIGBhbGxvY19zaHJpbmtlcl9pbmZvYCwgYW5kIGl0IHNvdW5kcyBsaWtlICp0aGF0KiBwYXJ0aWN1bGFyIHBpZWNlIG9mIGNvZGUgbWlnaHQgYmUgY29uZGl0aW9uYWwuIE15IG1lbnRhbCBhbGFybSBiZWxscyBhcmUgYWxyZWFkeSByaW5naW5nIGJlY2F1c2UgYW55dGhpbmcgdGhhdCYjMzk7cyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIG5lZWRzIGNhcmVmdWwgZXhhbWluYXRpb24g4oCTIGl0IGludHJvZHVjZXMgY29tcGxleGl0eSBhbmQgcG90ZW50aWFsIGVkZ2UgY2FzZXMuIFRoZSBjb21tZW50IGltcGxpZXMgaXQgZGVwZW5kcyBvbiBgQ09ORklHX01FTUNHYC4gVGltZSB0byB2ZXJpZnkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXRoZXIgdGhpcyBoYXMgYW55IGltcGFjdCBvbiB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneSwgYW5kIGhvdyBpdCBlZmZlY3RzIHBlcmZvcm1hbmNlLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UsIGFuZCBpbnZlc3RpZ2F0ZSBgbW0vc2hyaW5rZXIuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgYW5zd2VyIHdpbGwgYmUsIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGAjaWZkZWZgIGFuZCBgI2VuZGlmYCBkaXJlY3RpdmVzIG9yIHNpbWlsYXIgcHJlcHJvY2Vzc29yIGxvZ2ljIHN1cnJvdW5kaW5nIHRoZSBkZWNsYXJhdGlvbiBhbmQgZGVmaW5pdGlvbiBvZiBgYWxsb2Nfc2hyaW5rZXJfaW5mb2AuIEkmIzM5O2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoaXMgYWZmZWN0cyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIFRoZSBpbXBsaWNhdGlvbnMgb2YgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gY2FuIGJlIHN1YnRsZSwgZXNwZWNpYWxseSBpbiBhIGNvcmUgc3Vic3lzdGVtIGxpa2UgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHNocmlua2VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19zaHJpbmtlcl9pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2hyaW5rZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zaHJpbmtlci5jPTYyPXZvaWQgZnJlZV9zaHJpbmtlcl9pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9zaHJpbmtlci5jLTc2LVxubW0vc2hyaW5rZXIuYzo3NzppbnQgYWxsb2Nfc2hyaW5rZXJfaW5mbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS9zaHJpbmtlci5jLTc4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjI6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE2NAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipJbnZlc3RpZ2F0aW5nIGBtbS9zaHJpbmtlci5jYCBhbmQgTWVtb3J5IENvbnRyb2wgR3JvdXBzKioKCkFscmlnaHQsIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHNocmlua2VyIHN1YnN5c3RlbSBhbmQgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgcmlnaHQgaW50byBgbW0vc2hyaW5rZXIuY2AuIFRoZSBmaXJzdCB0aGluZyBJIHdhbnQgdG8gZG8gaXMgc2VlIGlmIHRoZSBrZXJuZWwgZGV2ZWxvcGVycyBoYXZlIGNvbmRpdGlvbmFsaXplZCBhbnkgbWVtb3J5IHJlY2xhbWF0aW9uIGNvZGUgYmFzZWQgb24gdGhlIHByZXNlbmNlIG9mIG1lbW9yeSBjb250cm9sIGdyb3Vwcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGxvb2tpbmcgZm9yIGAjaWZkZWYgQ09ORklHX01FTUNHYCBkaXJlY3RpdmVzLiBUaGF0JiMzOTtzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0LiBBIHF1aWNrIGdyZXAgaW4gbXkgaGVhZCwgb3IgYSBsaXRlcmFsIGdyZXAsIHdpbGwgdGVsbCBtZSBpZiB0aGVyZSYjMzk7cyBhbnkgZGlyZWN0IGludGVyYWN0aW9uIHRoZXJlLiBJJiMzOTttIGV4cGVjdGluZyBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljIGFyb3VuZCBtZW1vcnkgcHJlc3N1cmUgY2FsY3VsYXRpb25zLCByZXNvdXJjZSBsaW1pdHMsIG9yIHBlcmhhcHMgaG93IHRoZSBzaHJpbmtlciBwcmlvcml0aXplcyBwYWdlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzaHJpbmtlciBpbnRlcmFjdHMgd2l0aCBgbWVtY2dgIHdoZW4gYG1lbWNnYCBpcyBlbmFibGVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIyOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19NRU1DRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Nocmlua2VyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2hyaW5rZXIuYz0xMT1ERUZJTkVfTVVURVgoc2hyaW5rZXJfbXV0ZXgpO1xubW0vc2hyaW5rZXIuYy0xMi1cbm1tL3Nocmlua2VyLmM6MTM6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vc2hyaW5rZXIuYy0xNC1zdGF0aWMgaW50IHNocmlua2VyX25yX21heDtcbi0tXG5tbS9zaHJpbmtlci5jPTMzNj1zdGF0aWMgbG9uZyBhZGRfbnJfZGVmZXJyZWRfbWVtY2cobG9uZyBuciwgaW50IG5pZCwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcbi0tXG5tbS9zaHJpbmtlci5jLTM0MC19XG5tbS9zaHJpbmtlci5jOjM0MTojZW5kaWYgLyogQ09ORklHX01FTUNHICovXG5tbS9zaHJpbmtlci5jLTM0Mi1cbi0tXG5tbS9zaHJpbmtlci5jPTM3OD1zdGF0aWMgdW5zaWduZWQgbG9uZyBkb19zaHJpbmtfc2xhYihzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNocmlua2N0bCxcbi0tXG5tbS9zaHJpbmtlci5jLTQ3Ni1cbm1tL3Nocmlua2VyLmM6NDc3OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Nocmlua2VyLmMtNDc4LXN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19zbGFiX21lbWNnKGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLFxuLS1cbm1tL3Nocmlua2VyLmMtNTk3LX1cbm1tL3Nocmlua2VyLmM6NTk4OiNlbHNlIC8qICFDT05GSUdfTUVNQ0cgKi9cbm1tL3Nocmlua2VyLmMtNTk5LXN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19zbGFiX21lbWNnKGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLFxuLS1cbm1tL3Nocmlua2VyLmMtNjAzLX1cbm1tL3Nocmlua2VyLmM6NjA0OiNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cbm1tL3Nocmlua2VyLmMtNjA1LVxuLS1cbm1tL3Nocmlua2VyLmM9NjkwPXN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXJfYWxsb2ModW5zaWduZWQgaW50IGZsYWdzLCBjb25zdCBjaGFyICpmbXQsIC4uLilcbi0tXG5tbS9zaHJpbmtlci5jLTcyOC1cdCAqICAtIG5vbi1tZW1jZy1hd2FyZSBzaHJpbmtlcnNcbm1tL3Nocmlua2VyLmM6NzI5Olx0ICogIC0gIUNPTkZJR19NRU1DR1xubW0vc2hyaW5rZXIuYy03MzAtXHQgKiAgLSBtZW1jZyBpcyBkaXNhYmxlZCBieSBrZXJuZWwgY29tbWFuZCBsaW5lXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5MDMKCQkJCQkJCW91dHB1dDogODMKCQkJCQkJCXRob3VnaHRzOiAyNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gdGhlIGBhbGxvY19zaHJpbmtlcl9pbmZvYCBmdW5jdGlvbiBpcyBkZWZpbml0ZWx5IHRpZWQgdG8gYCNpZmRlZiBDT05GSUdfTUVNQ0dgLCBtZWFuaW5nIGl0JiMzOTtzIGRlcGVuZGVudCBvbiB0aGUgYE1FTUNHYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhhdCYjMzk7cyBvdXIgc3RhcnRpbmcgcG9pbnQuIFRoaXMgcGFydGljdWxhciBwYXRjaCBpcyBpbnRlcmVzdGluZzsgaXQgbG9va3MgbGlrZSBhIGZpeCBmb3IgYW4gZXJyb3IgcGF0aCB3aXRoaW4gYGFsbG9jX3Nocmlua2VyX2luZm9gIGl0c2VsZi4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBjb3JyZWN0IGFuIGlzc3VlIHdoZXJlIHNocmlua2VyIGluZm8gd2FzIGJlaW5nIGluY29ycmVjdGx5IGZyZWVkLiBUaGF0LCBieSBpdHMgbmF0dXJlLCBtYWtlcyBpdCAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4KCk15IGZvY3VzIHN5bWJvbCBmb3IgdGhpcyBmdXp6aW5nIGVmZm9ydCB3aWxsIGJlIGBhbGxvY19zaHJpbmtlcl9pbmZvYC4gTXkgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBlcnJvciBjb25kaXRpb24gd2l0aGluIHRoYXQgZnVuY3Rpb24uIFRoZSBjb3JlIG9mIHRyaWdnZXJpbmcgdGhpcyBidWcgbGlrZWx5IHJldm9sdmVzIGFyb3VuZCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyAqZHVyaW5nKiB0aGUgY3JlYXRpb24gb2YgbWVtb3J5IGNncm91cHMsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFdlJiMzOTtsbCBuZWVkIHRvIGluZHVjZSB0aG9zZSBmYWlsdXJlcyB0byB0ZXN0IHRoaXMgZml4IHRob3JvdWdobHkuCgpMZXQgbWUgZG91YmxlLWNoZWNrIGZvciBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBvciBtb2RpZmllZCBmdW5jdGlvbnMuIEFoLCBgYWxsb2Nfc2hyaW5rZXJfaW5mb2AgaXMgY2FsbGVkIGZyb20gYG1lbV9jZ3JvdXBfY3NzX29ubGluZWAuIFRoYXQgaGVscHMgZGVmaW5lIHRoZSBjYWxsIHN0YWNrLiBObyBvdGhlciBmdW5jdGlvbnMgc2VlbSB0byBiZSBkaXJlY3RseSBtb2RpZmllZCBpbiB0aGUgc3Vycm91bmRpbmcgY29kZS4gVGhpcyBwYXRjaCBzZWVtcyBmb2N1c2VkLCBmdW5jdGlvbmFsLCBhbmQgaXQgZGlyZWN0bHkgYWZmZWN0cyBjb3JlIGtlcm5lbCBsb2dpYyB3aXRoaW4gdGhlIGNncm91cC9tZW1jZyBzdWJzeXN0ZW0sIHdoaWNoIG1lYW5zIGl0IGlzIHRydWx5IHdvcnRoIGZ1enppbmcuCgpMZXQmIzM5O3Mgc3VtbWFyaXplIHRoaXMgY2xlYXJseToKCiogICAqKkZvY3VzU3ltYm9scyoqOiBgYWxsb2Nfc2hyaW5rZXJfaW5mb2AKKiAgICoqRW5hYmxlQ29uZmlncyoqOiBgTUVNQ0dgCiogICAqKlJlYXNvbmluZyoqOiBUaGlzIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIG9mIGBhbGxvY19zaHJpbmtlcl9pbmZvYCBkdXJpbmcgbWVtb3J5IGNncm91cCBjcmVhdGlvbi4gRnV6emluZyB0aGlzIHdpbGwgcmVxdWlyZSB0cmlnZ2VyaW5nIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIHdoaWxlIG1lbWNncyBhcmUgYmVpbmcgY3JlYXRlZC4KKiAgICoqV29ydGhGdXp6aW5nKio6IHRydWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIyOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX3Nocmlua2VyX2luZm8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2YgYGFsbG9jX3Nocmlua2VyX2luZm9gIGR1cmluZyBtZW1vcnkgY2dyb3VwIGNyZWF0aW9uLiBGdXp6aW5nIHRoaXMgcmVxdWlyZXMgdHJpZ2dlcmluZyBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyB3aGlsZSBjcmVhdGluZyBtZW1jZ3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2Nfc2hyaW5rZXJfaW5mbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBvZiBgYWxsb2Nfc2hyaW5rZXJfaW5mb2AgZHVyaW5nIG1lbW9yeSBjZ3JvdXAgY3JlYXRpb24uIEZ1enppbmcgdGhpcyByZXF1aXJlcyB0cmlnZ2VyaW5nIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIHdoaWxlIGNyZWF0aW5nIG1lbWNncy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIyOjMyOjQzLjM2OTI0OTU5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA3MTM3NTIzMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19zaHJpbmtlcl9pbmZvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2YgYGFsbG9jX3Nocmlua2VyX2luZm9gIGR1cmluZyBtZW1vcnkgY2dyb3VwIGNyZWF0aW9uLiBGdXp6aW5nIHRoaXMgcmVxdWlyZXMgdHJpZ2dlcmluZyBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyB3aGlsZSBjcmVhdGluZyBtZW1jZ3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIyOjMyOjQzLjM2OTI1NDk0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzE0MTg3MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2ZDNjODQxMjU2YWY1ZmViNWY0M2I0OTM1ZjE5OGE3ODU3YzJlYjQ1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgSnVsIDExIDIyOjMyOjQxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3Nocmlua2VyLmMgYi9tbS9zaHJpbmtlci5jXFxuaW5kZXggNzA4MmQwMWM4YzlkMGQuLjkyYzZjYjQ1NWZjOThkIDEwMDY0NFxcbi0tLSBhL21tL3Nocmlua2VyLmNcXG4rKysgYi9tbS9zaHJpbmtlci5jXFxuQEAgLTc4LDYgKzc4LDcgQEAgaW50IGFsbG9jX3Nocmlua2VyX2luZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiB7XFxuIFxcdGludCBuaWQsIHJldCA9IDA7XFxuIFxcdGludCBhcnJheV9zaXplID0gMDtcXG4rXFx0aW50IGZhaWxlZF9uaWQ7XFxuIFxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZzaHJpbmtlcl9tdXRleCk7XFxuIFxcdGFycmF5X3NpemUgPSBzaHJpbmtlcl91bml0X3NpemUoc2hyaW5rZXJfbnJfbWF4KTtcXG5AQCAtOTgsOCArOTksMTggQEAgaW50IGFsbG9jX3Nocmlua2VyX2luZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiBcXG4gZXJyOlxcbitcXHRmYWlsZWRfbmlkID0gbmlkO1xcbitcXHRmb3JfZWFjaF9ub2RlKG5pZCkge1xcbitcXHRcXHRzdHJ1Y3Qgc2hyaW5rZXJfaW5mbyAqaW5mbztcXG4rXFxuK1xcdFxcdGlmIChuaWQgXFx1MDAzZT0gZmFpbGVkX25pZClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGluZm8gPSBzaHJpbmtlcl9pbmZvX3Byb3RlY3RlZChtZW1jZywgbmlkKTtcXG4rXFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKG1lbWNnLVxcdTAwM2Vub2RlaW5mb1tuaWRdLVxcdTAwM2VzaHJpbmtlcl9pbmZvLCBOVUxMKTtcXG4rXFx0XFx0c2hyaW5rZXJfdW5pdF9mcmVlKGluZm8sIDApO1xcbitcXHRcXHRrdmZyZWUoaW5mbyk7XFxuK1xcdH1cXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzaHJpbmtlcl9tdXRleCk7XFxuLVxcdGZyZWVfc2hyaW5rZXJfaW5mbyhtZW1jZyk7XFxuIFxcdHJldHVybiAtRU5PTUVNO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMjozMjo0My44MDE2NjAzODZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMjgxMzMxNzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2Nfc2hyaW5rZXJfaW5mb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIG9mIGBhbGxvY19zaHJpbmtlcl9pbmZvYCBkdXJpbmcgbWVtb3J5IGNncm91cCBjcmVhdGlvbi4gRnV6emluZyB0aGlzIHJlcXVpcmVzIHRyaWdnZXJpbmcgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgd2hpbGUgY3JlYXRpbmcgbWVtY2dzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZkM2M4NDEyNTZhZjVmZWI1ZjQzYjQ5MzVmMTk4YTc4NTdjMmViNDVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxMSAyMjozMjo0MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3Nocmlua2VyLmMgYi9tbS9zaHJpbmtlci5jXG5pbmRleCA3MDgyZDAxYzhjOWQwZC4uOTJjNmNiNDU1ZmM5OGQgMTAwNjQ0XG4tLS0gYS9tbS9zaHJpbmtlci5jXG4rKysgYi9tbS9zaHJpbmtlci5jXG5AQCAtNzgsNiArNzgsNyBAQCBpbnQgYWxsb2Nfc2hyaW5rZXJfaW5mbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0aW50IG5pZCwgcmV0ID0gMDtcbiBcdGludCBhcnJheV9zaXplID0gMDtcbitcdGludCBmYWlsZWRfbmlkO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZzaHJpbmtlcl9tdXRleCk7XG4gXHRhcnJheV9zaXplID0gc2hyaW5rZXJfdW5pdF9zaXplKHNocmlua2VyX25yX21heCk7XG5AQCAtOTgsOCArOTksMTggQEAgaW50IGFsbG9jX3Nocmlua2VyX2luZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIFx0cmV0dXJuIHJldDtcbiBcbiBlcnI6XG4rXHRmYWlsZWRfbmlkID0gbmlkO1xuK1x0Zm9yX2VhY2hfbm9kZShuaWQpIHtcbitcdFx0c3RydWN0IHNocmlua2VyX2luZm8gKmluZm87XG4rXG4rXHRcdGlmIChuaWQgXHUwMDNlPSBmYWlsZWRfbmlkKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHRpbmZvID0gc2hyaW5rZXJfaW5mb19wcm90ZWN0ZWQobWVtY2csIG5pZCk7XG4rXHRcdHJjdV9hc3NpZ25fcG9pbnRlcihtZW1jZy1cdTAwM2Vub2RlaW5mb1tuaWRdLVx1MDAzZXNocmlua2VyX2luZm8sIE5VTEwpO1xuK1x0XHRzaHJpbmtlcl91bml0X2ZyZWUoaW5mbywgMCk7XG4rXHRcdGt2ZnJlZShpbmZvKTtcbitcdH1cbiBcdG11dGV4X3VubG9jayhcdTAwMjZzaHJpbmtlcl9tdXRleCk7XG4tXHRmcmVlX3Nocmlua2VyX2luZm8obWVtY2cpO1xuIFx0cmV0dXJuIC1FTk9NRU07XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjI6MzI6NDMuODAxNjYyNjY2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc3NjA3OTY1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBtbS9zaHJpbmtlci5jYCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZXJlJ3MgYSBwYXRjaCBpbiBgbW0vc2hyaW5rZXIuY2AuIE15IGluaXRpYWwgcmVhZCBzdWdnZXN0cyBpdOKAmXMgZGVhbGluZyB3aXRoIGFuIGVycm9yIHBhdGggd2l0aGluIGBhbGxvY19zaHJpbmtlcl9pbmZvYC4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBpc3N1ZSByZXZvbHZlcyBhcm91bmQgaG93IHRoZSBjb2RlIGhhbmRsZXMgZmFpbHVyZXMgZHVyaW5nIHRoZSBhbGxvY2F0aW9uIG9mIGBzaHJpbmtlcl9pbmZvYCBzdHJ1Y3R1cmVzLiBJbnN0ZWFkIG9mIHVzaW5nIHRoZSBtb3JlIGNvbnZlbnRpb25hbCBgZnJlZV9zaHJpbmtlcl9pbmZvKG1lbWNnKWAgZm9yIGNsZWFudXAsIHRoaXMgcGF0Y2ggYWRvcHRzIGEgbWFudWFsIGFwcHJvYWNoLiBJdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBub2RlcyB1cCB0byBhIHBvaW50IGRlc2lnbmF0ZWQgYXMgYGZhaWxlZF9uaWRgLCBhbmQgZnJlZXMgdGhlIGFsbG9jYXRlZCBgc2hyaW5rZXJfaW5mb2Agc3RydWN0dXJlcyBpbmRpdmlkdWFsbHkuIFRoZSBmb2N1cywgdGhlbiwgaXMgZGVmaW5pdGVseSBvbiBpbXByb3ZpbmcgdGhlIHJvYnVzdG5lc3Mgb2YgdGhhdCBmYWlsdXJlIGhhbmRsaW5nLiBJIHNob3VsZCBwcm9iYWJseSBkaXZlIGludG8gYGFsbG9jX3Nocmlua2VyX2luZm9gIGl0c2VsZiB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdOKAmXMgZ29pbmcgb24gYW5kIHZlcmlmeSB0aGF0IHRoZSBtYW51YWwgZnJlZWluZyBpcyB0aGUgcmlnaHQgd2F5IHRvIGFwcHJvYWNoIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGUgY29udmVudGlvbmFsIGNsZWFudXAgaXNuJ3Qgc3VmZmljaWVudCBpbiB0aGlzIHNwZWNpZmljIHNjZW5hcmlvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTk3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMjozMjo0Ny41Nzc3NDk5MjVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg1Mjk0ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2Nfc2hyaW5rZXJfaW5mb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zaHJpbmtlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Nocmlua2VyLmM9NjI9dm9pZCBmcmVlX3Nocmlua2VyX2luZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vc2hyaW5rZXIuYy03Ni1cXG5tbS9zaHJpbmtlci5jOjc3OmludCBhbGxvY19zaHJpbmtlcl9pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS9zaHJpbmtlci5jLTc4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjI6MzI6NDcuNjc2Mjg1NTQ4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc5NjU5OTkzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBhbGxvY19zaHJpbmtlcl9pbmZvYCBpbiBtbS9zaHJpbmtlci5jKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIGBtbS9zaHJpbmtlci5jYCBhbmQgemVybyBpbiBvbiB0aGUgYGFsbG9jX3Nocmlua2VyX2luZm9gIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiBtZW1vcnkgcmVjbGFtYXRpb24uIEkga25vdyBzaHJpbmtlcnMgYXJlIGZ1bmRhbWVudGFsLCBidXQgSSBuZWVkIGEgcmVmcmVzaGVyIG9uIHRoZSBwcmVjaXNlIG1lY2hhbmlzbSBhbmQgY29udGV4dCB0aGlzIGZ1bmN0aW9uIHVzZXMuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIG51YW5jZXMgb2YgaG93IGl0J3MgYWxsb2NhdGluZyBhbmQgaW5pdGlhbGl6aW5nIHRoZSBzdHJ1Y3R1cmVzIHVzZWQgdG8gbWFuYWdlIHJlY2xhaW1hYmxlIHBhZ2VzIGFuZCBob3cgdGhhdCB0aWVzIGludG8gdGhlIG92ZXJhbGwgZGVzaWduIG9mIHRoZSBrZXJuZWwncyBsb3cgbWVtb3J5IHNpdHVhdGlvbi4gVGhlcmUgYXJlIGEgZmV3IGRpZmZlcmVudCBkYXRhIHN0cnVjdHVyZXMgaW4gdGhpcyBzZWN0aW9uIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgaG93IHRoZXkgaW50ZXJhY3QuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDE0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjI6MzI6NTAuNDcyODg3MzI3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzNDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Nocmlua2VyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNzA6XFx0XFx0XFx0aW5mbyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocG4tXFx1MDAzZXNocmlua2VyX2luZm8sIHRydWUpO1xcbiAgNzE6XFx0XFx0XFx0c2hyaW5rZXJfdW5pdF9mcmVlKGluZm8sIDApO1xcbiAgNzI6XFx0XFx0XFx0a3ZmcmVlKGluZm8pO1xcbiAgNzM6XFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHBuLVxcdTAwM2VzaHJpbmtlcl9pbmZvLCBOVUxMKTtcXG4gIDc0OlxcdFxcdH1cXG4gIDc1OlxcdH1cXG4gIDc2OlxcdFxcbiAgNzc6XFx0aW50IGFsbG9jX3Nocmlua2VyX2luZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiAgNzg6XFx0e1xcbiAgNzk6XFx0XFx0aW50IG5pZCwgcmV0ID0gMDtcXG4gIDgwOlxcdFxcdGludCBhcnJheV9zaXplID0gMDtcXG4gIDgxOlxcdFxcdGludCBmYWlsZWRfbmlkO1xcbiAgODI6XFx0XFxuICA4MzpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZzaHJpbmtlcl9tdXRleCk7XFxuICA4NDpcXHRcXHRhcnJheV9zaXplID0gc2hyaW5rZXJfdW5pdF9zaXplKHNocmlua2VyX25yX21heCk7XFxuICA4NTpcXHRcXHRmb3JfZWFjaF9ub2RlKG5pZCkge1xcbiAgODY6XFx0XFx0XFx0c3RydWN0IHNocmlua2VyX2luZm8gKmluZm8gPSBrdnphbGxvY19ub2RlKHNpemVvZigqaW5mbykgKyBhcnJheV9zaXplLFxcbiAgODc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgR0ZQX0tFUk5FTCwgbmlkKTtcXG4gIDg4OlxcdFxcdFxcdGlmICghaW5mbylcXG4gIDg5OlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbiAgOTA6XFx0XFx0XFx0aW5mby1cXHUwMDNlbWFwX25yX21heCA9IHNocmlua2VyX25yX21heDtcXG4gIDkxOlxcdFxcdFxcdGlmIChzaHJpbmtlcl91bml0X2FsbG9jKGluZm8sIE5VTEwsIG5pZCkpIHtcXG4gIDkyOlxcdFxcdFxcdFxcdGt2ZnJlZShpbmZvKTtcXG4gIDkzOlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbiAgOTQ6XFx0XFx0XFx0fVxcbiAgOTU6XFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKG1lbWNnLVxcdTAwM2Vub2RlaW5mb1tuaWRdLVxcdTAwM2VzaHJpbmtlcl9pbmZvLCBpbmZvKTtcXG4gIDk2OlxcdFxcdH1cXG4gIDk3OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2c2hyaW5rZXJfbXV0ZXgpO1xcbiAgOTg6XFx0XFxuICA5OTpcXHRcXHRyZXR1cm4gcmV0O1xcbiAxMDA6XFx0XFxuIDEwMTpcXHRlcnI6XFxuIDEwMjpcXHRcXHRmYWlsZWRfbmlkID0gbmlkO1xcbiAxMDM6XFx0XFx0Zm9yX2VhY2hfbm9kZShuaWQpIHtcXG4gMTA0OlxcdFxcdFxcdHN0cnVjdCBzaHJpbmtlcl9pbmZvICppbmZvO1xcbiAxMDU6XFx0XFxuIDEwNjpcXHRcXHRcXHRpZiAobmlkIFxcdTAwM2U9IGZhaWxlZF9uaWQpXFxuIDEwNzpcXHRcXHRcXHRcXHRicmVhaztcXG4gMTA4OlxcdFxcdFxcdGluZm8gPSBzaHJpbmtlcl9pbmZvX3Byb3RlY3RlZChtZW1jZywgbmlkKTtcXG4gMTA5OlxcdFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihtZW1jZy1cXHUwMDNlbm9kZWluZm9bbmlkXS1cXHUwMDNlc2hyaW5rZXJfaW5mbywgTlVMTCk7XFxuIDExMDpcXHRcXHRcXHRzaHJpbmtlcl91bml0X2ZyZWUoaW5mbywgMCk7XFxuIDExMTpcXHRcXHRcXHRrdmZyZWUoaW5mbyk7XFxuIDExMjpcXHRcXHR9XFxuIDExMzpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnNocmlua2VyX211dGV4KTtcXG4gMTE0OlxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAxMTU6XFx0fVxcbiAxMTY6XFx0XFxuIDExNzpcXHRzdGF0aWMgc3RydWN0IHNocmlua2VyX2luZm8gKnNocmlua2VyX2luZm9fcHJvdGVjdGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4gMTE4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgaW50IG5pZClcXG4gMTE5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjI6MzI6NTAuNDczMDIyMzc3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM0MDQ2NTE5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGJ1ZyBmaXgsIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgRGVhZGxvY2sgaW4gTWVtb3J5IENHIFNocmlua2luZyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggY2xhaW1zIHRvIGZpeCBhIHByZXR0eSBuYXN0eSBidWcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgaW4gdGhlIGBhbGxvY19zaHJpbmtlcl9pbmZvYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGFyb3VuZCBob3cgdGhlIG1lbW9yeSBjZ3JvdXAncyBzaHJpbmtlciBpbmZvIGlzIGhhbmRsZWQuIEkgcmVtZW1iZXIgYGZyZWVfc2hyaW5rZXJfaW5mbyhtZW1jZylgIGJlaW5nIGNhbGxlZCB3aGlsZSBhbHJlYWR5IGhvbGRpbmcgdGhlIGBzaHJpbmtlcl9tdXRleGAuIFRoYXQgcmluZ3Mgc29tZSBhbGFybSBiZWxscyBpbW1lZGlhdGVseS4gTXkgZ3V0IHRlbGxzIG1lIHRoZXJlJ3MgYSBwb3RlbnRpYWwgZGVhZGxvY2sgbHVya2luZyBoZXJlLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgYGZyZWVfc2hyaW5rZXJfaW5mb2AgKml0c2VsZiogdHJ5IHRvIGFjcXVpcmUgdGhlIGBzaHJpbmtlcl9tdXRleGA/IElmIGl0IGRvZXMsIGFuZCBpdCdzIGJlaW5nIGNhbGxlZCB3aGlsZSB0aGUgbXV0ZXggaXMgYWxyZWFkeSBoZWxkLCB3ZSd2ZSBnb3QgYSBjbGFzc2ljIGRlYWRsb2NrIHNjZW5hcmlvLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSBmb3IgYGZyZWVfc2hyaW5rZXJfaW5mb2AgYW5kIHZlcmlmeSB0aGF0IGFzc3VtcHRpb24uIEkgbmVlZCB0byBjb25maXJtIGlmIHRoYXQgbmVzdGVkIGxvY2sgYWNxdWlzaXRpb24gaXMgYWN0dWFsbHkgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzQ5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMjozMjo1My44MTM0OTAzNDFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzgxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vc2hyaW5rZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1NTpcXHRcXG4gIDU2OlxcdFxcdFxcdG5ldy1cXHUwMDNldW5pdFtpXSA9IHVuaXQ7XFxuICA1NzpcXHRcXHR9XFxuICA1ODpcXHRcXG4gIDU5OlxcdFxcdHJldHVybiAwO1xcbiAgNjA6XFx0fVxcbiAgNjE6XFx0XFxuICA2MjpcXHR2b2lkIGZyZWVfc2hyaW5rZXJfaW5mbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuICA2MzpcXHR7XFxuICA2NDpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG47XFxuICA2NTpcXHRcXHRzdHJ1Y3Qgc2hyaW5rZXJfaW5mbyAqaW5mbztcXG4gIDY2OlxcdFxcdGludCBuaWQ7XFxuICA2NzpcXHRcXG4gIDY4OlxcdFxcdGZvcl9lYWNoX25vZGUobmlkKSB7XFxuICA2OTpcXHRcXHRcXHRwbiA9IG1lbWNnLVxcdTAwM2Vub2RlaW5mb1tuaWRdO1xcbiAgNzA6XFx0XFx0XFx0aW5mbyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocG4tXFx1MDAzZXNocmlua2VyX2luZm8sIHRydWUpO1xcbiAgNzE6XFx0XFx0XFx0c2hyaW5rZXJfdW5pdF9mcmVlKGluZm8sIDApO1xcbiAgNzI6XFx0XFx0XFx0a3ZmcmVlKGluZm8pO1xcbiAgNzM6XFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHBuLVxcdTAwM2VzaHJpbmtlcl9pbmZvLCBOVUxMKTtcXG4gIDc0OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjI6MzI6NTMuODEzNjMwODIxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAxNTE5MjYwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBmcmVlX3Nocmlua2VyX2luZm9gIGFuZCBNdXRleCBVc2FnZSoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5vdGljZWQgdGhhdCBgZnJlZV9zaHJpbmtlcl9pbmZvYCBkb2Vzbid0IHRha2UgdGhlIGBzaHJpbmtlcl9tdXRleGAuIFRoYXQgc2VlbXPigKYgb2RkLiBUaGUgb3JpZ2luYWwgY29kZSBpbiBgYWxsb2Nfc2hyaW5rZXJfaW5mb2AgY2FsbGVkIGBmcmVlX3Nocmlua2VyX2luZm9gICphZnRlciogdW5sb2NraW5nIHRoZSBgc2hyaW5rZXJfbXV0ZXhgLlxuXG5gYGBcbmVycjpcblx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNocmlua2VyX211dGV4KTtcblx0ZnJlZV9zaHJpbmtlcl9pbmZvKG1lbWNnKTtcblx0cmV0dXJuIC1FTk9NRU07XG5gYGBcblxuTm93LCB0aGUgbmV3IGNvZGUsIHVuZGVyIHRoZSBzYW1lIGVycm9yIGNvbmRpdGlvbiwgbG9va3MgbGlrZSB0aGlzOlxuXG5gYGBcbmVycjpcblx0ZmFpbGVkX25pZCA9IG5pZDtcblx0Zm9yX2VhY2hfbm9kZShuaWQpIHtcblx0XHRzdHJ1Y3Qgc2hyaW5rZXJfaW5mbyAqaW5mbztcblxuXHRcdGlmIChuaWQgXHUwMDNlPSBmYWlsZWRfbmlkKVxuXHRcdFx0YnJlYWs7XG5cdFx0aW5mbyA9IHNocmlua2VyX2luZm9fcHJvdGVjdGVkKG1lbWNnLCBuaWQpO1xuXHRcdHJjdV9hc3NpZ25fcG9pbnRlcihtZW1jZy1cdTAwM2Vub2RlaW5mb1tuaWRdLVx1MDAzZXNocmlua2VyX2luZm8sIE5VTEwpO1xuXHRcdHNocmlua2VyX3VuaXRfZnJlZShpbmZvLCAwKTtcblx0XHRrdmZyZWUoaW5mbyk7XG5cdH1cblx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNocmlua2VyX211dGV4KTtcblx0cmV0dXJuIC1FTk9NRU07XG5gYGBcblxuVGhpcyBjaGFuZ2UgaXMgc2lnbmlmaWNhbnQuIFRoZSBvbGQgYGZyZWVfc2hyaW5rZXJfaW5mb2AgY2FsbCBpcyBnb25lLCByZXBsYWNlZCB3aXRoIHRoaXMgbG9vcCBhbmQgYSBkaWZmZXJlbnQgZnJlZWluZyBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5Ki4gV2FzIHRoZSBvcmlnaW5hbCBgZnJlZV9zaHJpbmtlcl9pbmZvYCBwb3RlbnRpYWxseSBmcmVlaW5nIG5vZGVzIHRoYXQgaGFkbid0IGJlZW4gYWxsb2NhdGVkIHlldD8gSXMgaXQgcG9zc2libGUgdGhhdCBgZnJlZV9zaHJpbmtlcl9pbmZvYCAqbmVlZHMqIHRoZSBgc2hyaW5rZXJfbXV0ZXhgIHRvIGJlIGhlbGQ/XG5cbkFoYSEgYGZyZWVfc2hyaW5rZXJfaW5mb2AgdXNlcyBgcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChwbi1cdTAwM2VzaHJpbmtlcl9pbmZvLCB0cnVlKWAuIFRoYXQncyBhIGtleSBjbHVlLiBGdXJ0aGVyLCB0aGUgY29kZSB1c2VzIGBzaHJpbmtlcl9pbmZvX3Byb3RlY3RlZGAuIExldCdzIGRpZyBkZWVwZXIgYW5kIHNlZSB3aGF0IHRoYXQgZnVuY3Rpb24gZG9lcy4gQW5kIHRoZXJlIGl0IGlzISBgc2hyaW5rZXJfaW5mb19wcm90ZWN0ZWRgIGl0c2VsZiB1c2VzIGByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKC4uLiwgbG9ja2RlcF9pc19oZWxkKFx1MDAyNnNocmlua2VyX211dGV4KSlgLiBUaGF0IGV4cGxhaW5zIGl0ISBJdCBzZWVtcyB0aGUgY3JpdGljYWwgc2VjdGlvbiBvZiBgZnJlZV9zaHJpbmtlcl9pbmZvYCBuZWVkcyB0byBlbnN1cmUgdGhlIG11dGV4IGlzIGhlbGQsIG9yIHRoZSBSQ1UgcmVhZHMgY291bGQgcmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkyNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIyOjMyOjU5LjgyODgyNjQxNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDMzMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vc2hyaW5rZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTcsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMTc6XFx0c3RhdGljIHN0cnVjdCBzaHJpbmtlcl9pbmZvICpzaHJpbmtlcl9pbmZvX3Byb3RlY3RlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuIDExODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGludCBuaWQpXFxuIDExOTpcXHR7XFxuIDEyMDpcXHRcXHRyZXR1cm4gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtZW1jZy1cXHUwMDNlbm9kZWluZm9bbmlkXS1cXHUwMDNlc2hyaW5rZXJfaW5mbyxcXG4gMTIxOlxcdFxcdFxcdFxcdFxcdFxcdCBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNnNocmlua2VyX211dGV4KSk7XFxuIDEyMjpcXHR9XFxuIDEyMzpcXHRcXG4gMTI0OlxcdHN0YXRpYyBpbnQgZXhwYW5kX29uZV9zaHJpbmtlcl9pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5ld19zaXplLFxcbiAxMjU6XFx0XFx0XFx0XFx0XFx0ICAgIGludCBvbGRfc2l6ZSwgaW50IG5ld19ucl9tYXgpXFxuIDEyNjpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIyOjMyOjU5LjgyODkzMTc2NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzA3MDgyMjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldDogYGZyZWVfc2hyaW5rZXJfaW5mb2AgYW5kIE1lbW9yeSBQcmVzc3VyZSBpbiBNZW1jZ3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZnJlZV9zaHJpbmtlcl9pbmZvYCBhbmQgSSBzZWUgaXQncyB1c2luZyBgcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChwbi1cdTAwM2VzaHJpbmtlcl9pbmZvLCB0cnVlKWAuIFRoYXQncyBzdGFuZGFyZCBlbm91Z2gsIGJ1dCBsZXQncyBkaWcgZGVlcGVyLiBUaGUgY3JpdGljYWwgdGhpbmcgaGVyZSBpcyB0aGF0IGBhbGxvY19zaHJpbmtlcl9pbmZvYCBpcyAqYWxzbyogZnJlZWluZyBhbnkgYWxsb2NhdGVkIGBzaHJpbmtlcl9pbmZvYCBpbnN0YW5jZXMgaWYgaXQgZmFpbHMuIFRoYXQncyBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyFcblxuVGhlIGNydXggb2YgdGhlIHByb2JsZW0sIGFuZCB3aHkgdGhpcyBjb3VsZCBiZSBpbnRlcmVzdGluZywgaXMgd2hlcmUgYGFsbG9jX3Nocmlua2VyX2luZm9gIGlzIGNhbGxlZDogZHVyaW5nIG1lbWNnIGNyZWF0aW9uLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIHRoaXMgYXMgYSBwb3NzaWJsZSBtZW1vcnkgbWFuYWdlbWVudC9jZ3JvdXAgZXJyb3IgcGF0aCwgcmlwZSBmb3IgZnV6emluZy4gSWYgYGFsbG9jX3Nocmlua2VyX2luZm9gIGZhaWxzLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjbGVhbnVwIGlzIGNvcnJlY3QuIFRoZSBnb2FsIGlzIHRvIHRyaWdnZXIgdGhpcyBlcnJvciwgd2hpY2ggbWVhbnMgd2UgbmVlZCB0byBpbmR1Y2UgYSBmYWlsdXJlIHdpdGhpbiBgYWxsb2Nfc2hyaW5rZXJfaW5mb2AgaXRzZWxmLiBUaGF0IG1lYW5zIGVpdGhlciBhIGBrdnphbGxvY19ub2RlYCBmYWlsdXJlIG9yIGBzaHJpbmtlcl91bml0X2FsbG9jYCBmYWlsaW5nLlxuXG5SaWdodCwgc28gdGhpcyBpcyBhbiBlcnJvciBwYXRoLiBUbyByZWxpYWJseSBmdXp6IHRoaXMsIEknbGwgbmVlZCB0byBpbmR1Y2UgbWVtb3J5IHByZXNzdXJlIHNvbWVob3csIG9yIGxvb2sgaW50byBmYXVsdCBpbmplY3Rpb24gdG8gc3BlY2lmaWNhbGx5IHRyaWdnZXIgdGhlc2UgZmFpbHVyZXMuIFNpbmNlIGBhbGxvY19zaHJpbmtlcl9pbmZvYCBpcyBjYWxsZWQgZnJvbSBgbWVtX2Nncm91cF9jc3NfYWxsb2NgLCB0cmlnZ2VyaW5nIHRoaXMgcmVsaWFibHkgZGVwZW5kcyBvbiB0aGUgYWJpbGl0eSB0byBmYWlsIGVpdGhlciBga3Z6YWxsb2Nfbm9kZWAgb3IgYHNocmlua2VyX3VuaXRfYWxsb2NgIGluIHRoZSBgbWVtX2Nncm91cF9jc3NfYWxsb2NgIGZ1bmN0aW9uLiBJIHRoaW5rIHRoaXMgd2lsbCBiZSBhbiBpbnRlcmVzdGluZyBmdXp6aW5nIHRhcmdldCwgYSBsb3Qgb2YgcG90ZW50aWFsIGhlcmUgZm9yIGRpc2NvdmVyaW5nIG1lbW9yeSBpc3N1ZXMgaW4gbWVtY2cgY3JlYXRpb24gZHVyaW5nIHJlc291cmNlIGNvbnN0cmFpbmVkIGNvbmRpdGlvbnMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwNDksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMjozMzowNC41MzYwMTY2NTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjM4MDM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19zaHJpbmtlcl9pbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9NDIwOT1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQyMjEtXFx0ICovXFxubW0vbWVtY29udHJvbC5jOjQyMjI6XFx0aWYgKGFsbG9jX3Nocmlua2VyX2luZm8obWVtY2cpKVxcbm1tL21lbWNvbnRyb2wuYy00MjIzLVxcdFxcdGdvdG8gb2ZmbGluZV9rbWVtO1xcbi0tXFxubW0vc2hyaW5rZXIuYz02Mj12b2lkIGZyZWVfc2hyaW5rZXJfaW5mbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9zaHJpbmtlci5jLTc2LVxcbm1tL3Nocmlua2VyLmM6Nzc6aW50IGFsbG9jX3Nocmlua2VyX2luZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL3Nocmlua2VyLmMtNzgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMjozMzowNC42NTI0MDQyOTVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjYzNTgxNTY5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvZGUgUGF0aCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZnVuY3Rpb24gY2FsbCDigJMgaXQncyBjb21pbmcgZnJvbSBgbWVtX2Nncm91cF9jc3Nfb25saW5lYC4gUmlnaHQuIE5vdywgaWYgSSB3YW50IHRvIGZ1enogdGhpcyBwYXJ0aWN1bGFyIGFyZWEsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgc3lzdGVtIGlzIGJ1aWx0IHdpdGggYENPTkZJR19NRU1DR2AgZW5hYmxlZC4gTm8gcG9pbnQgaW4gdHJ5aW5nIHRvIGZ1enogc29tZXRoaW5nIHRoYXQgaXNuJ3QgZXZlbiBjb21waWxlZCBpbiEgTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gaGFzIHRoaXMgZW5hYmxlZCBiZWZvcmUgcHJvY2VlZGluZyBhbnkgZnVydGhlciwgdGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgzNiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIyOjMzOjA3LjI4ODIyMzIzMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5OTM3Mjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1DR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNjM9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA3Mi1cXG5pbml0L0tjb25maWc6MTA3Mzpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA3NC1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDgxLVxcbmluaXQvS2NvbmZpZzoxMDgyOmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuaW5pdC9LY29uZmlnLTEwODMtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwODgtXFxuaW5pdC9LY29uZmlnOjEwODk6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuaW5pdC9LY29uZmlnLTEwOTAtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTUtXFxuaW5pdC9LY29uZmlnOjEwOTY6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTEwOTctXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjI6MzM6MDcuNDA4MTY3OTNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc3NDQ3NDcwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBNRU1DR2AgQ29uZmlndXJhdGlvbiBhbmQgU2hyaW5rZXIgSW5mb3JtYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgaW5pdGlhbCBxdWVzdGlvbiBpcyBhYm91dCB0aGUgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIG1lbW9yeSBjZ3JvdXBzIOKAkyBgTUVNQ0dgLCB0aGF0J3MgdGhlIGtleS4gSSdtIGZvY3VzaW5nIG9uIHRoYXQsIGFuZCBJIGJlbGlldmUgdGhlIHNwZWNpZmljIHN5bWJvbCBJJ20gdHJhY2tpbmcgZG93biBpcyBgYWxsb2Nfc2hyaW5rZXJfaW5mb2AuIEknbSBwcmV0dHkgc3VyZSB0aGF0J3MgdGhlIGNyaXRpY2FsIHBpZWNlIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBtZW1vcnkgc2hyaW5rZXIgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgbWVtY2dzLlxuXG5Ob3csIGEgcXVpY2sgY2hlY2suLi5pcyB0aGVyZSAqYW5vdGhlciogcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24gbHVya2luZyBhcm91bmQ/IEFoLCByaWdodCwgYENPTkZJR19TSFJJTktFUl9ERUJVR2AgZXhpc3RzIGJ1dCB0aGF0J3MganVzdCBhIGRlYnVnZ2luZyBvcHRpb24sIGl0IGRvZXNuJ3Qgc2VlbSB0byBhZmZlY3QgdGhlIGNvcmUgcHJlc2VuY2Ugb2Ygc2hyaW5rZXIgaW5mb3JtYXRpb24gZm9yIG1lbWNncywgaXQgd2lsbCBhbHdheXMgYmUgdGhlcmUuIFNvLCBJIGRvbid0IG5lZWQgdG8gY29uc2lkZXIgdGhhdCBhcyBhIHByZS1yZXF1aXNpdGUuXG5cblJpZ2h0LCBgYWxsb2Nfc2hyaW5rZXJfaW5mb2AuLi4gSSB2YWd1ZWx5IHJlY2FsbCB0aGF0IGJlaW5nIGRlZmluZWQgb3IgaW1wbGVtZW50ZWQgd2l0aGluIGBtbS9zaHJpbmtlci5jYC4gTGV0IG1lIGp1c3QgdmVyaWZ5IHRoYXQ7IEkgd2lsbCBub3cgaGF2ZSB0byBjaGVjayBpZiB0aGlzIGZpbGUsIGBtbS9zaHJpbmtlci5jYCwgaXMgY29tcGlsZWQgY29uZGl0aW9uYWxseSBiYXNlZCBvbiBhbnkgb3RoZXIgZmxhZ3MuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjb2RlIGlzICphY3R1YWxseSogaW5jbHVkZWQgd2hlbiBkZWFsaW5nIHdpdGggbWVtb3J5IGNncm91cHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyNDIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMjozMzoxMS4xODI2NDQ4NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc1NjE5MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hyaW5rZXIub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT01MT1vYmoteVxcdFxcdFxcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcXFxcbm1tL01ha2VmaWxlLTUyLVxcdFxcdFxcdCAgIG1hY2Nlc3MubyBwYWdlLXdyaXRlYmFjay5vIGZvbGlvLWNvbXBhdC5vIFxcXFxcXG5tbS9NYWtlZmlsZTo1MzpcXHRcXHRcXHQgICByZWFkYWhlYWQubyBzd2FwLm8gdHJ1bmNhdGUubyB2bXNjYW4ubyBzaHJpbmtlci5vIFxcXFxcXG5tbS9NYWtlZmlsZS01NC1cXHRcXHRcXHQgICBzaG1lbS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjI6MzM6MTEuMjgwMjEyMzMzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MDgyNDAyNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBrZXJuZWwgY29kZSBzbmlwcGV0LCBwdXR0aW5nIG15c2VsZiBpbiB0aGUgcm9sZSBvZiBhbiBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBhIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIGluIHRoZSBNZW1vcnkgU2hyaW5rZXIqKlxuXG5SaWdodCwgc28gaXQncyBhbHdheXMgY29tcGlsZWQsIGJ1dCB0aGVyZSdzIGEgc3BlY2lmaWMgZnVuY3Rpb24sIGBhbGxvY19zaHJpbmtlcl9pbmZvYCwgYW5kIGl0IHNvdW5kcyBsaWtlICp0aGF0KiBwYXJ0aWN1bGFyIHBpZWNlIG9mIGNvZGUgbWlnaHQgYmUgY29uZGl0aW9uYWwuIE15IG1lbnRhbCBhbGFybSBiZWxscyBhcmUgYWxyZWFkeSByaW5naW5nIGJlY2F1c2UgYW55dGhpbmcgdGhhdCdzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgbmVlZHMgY2FyZWZ1bCBleGFtaW5hdGlvbiDigJMgaXQgaW50cm9kdWNlcyBjb21wbGV4aXR5IGFuZCBwb3RlbnRpYWwgZWRnZSBjYXNlcy4gVGhlIGNvbW1lbnQgaW1wbGllcyBpdCBkZXBlbmRzIG9uIGBDT05GSUdfTUVNQ0dgLiBUaW1lIHRvIHZlcmlmeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIGhhcyBhbnkgaW1wYWN0IG9uIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LCBhbmQgaG93IGl0IGVmZmVjdHMgcGVyZm9ybWFuY2UuIEknbGwgbmVlZCB0byBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlLCBhbmQgaW52ZXN0aWdhdGUgYG1tL3Nocmlua2VyLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgYW5zd2VyIHdpbGwgYmUsIEknbGwgYmUgbG9va2luZyBmb3IgYCNpZmRlZmAgYW5kIGAjZW5kaWZgIGRpcmVjdGl2ZXMgb3Igc2ltaWxhciBwcmVwcm9jZXNzb3IgbG9naWMgc3Vycm91bmRpbmcgdGhlIGRlY2xhcmF0aW9uIGFuZCBkZWZpbml0aW9uIG9mIGBhbGxvY19zaHJpbmtlcl9pbmZvYC4gSSdsbCBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGlzIGFmZmVjdHMgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBUaGUgaW1wbGljYXRpb25zIG9mIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGNhbiBiZSBzdWJ0bGUsIGVzcGVjaWFsbHkgaW4gYSBjb3JlIHN1YnN5c3RlbSBsaWtlIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzaHJpbmtlci5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc1MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIyOjMzOjE0Ljg4ODQ1NTM0MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ0NzUxNDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2Nfc2hyaW5rZXJfaW5mb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zaHJpbmtlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Nocmlua2VyLmM9NjI9dm9pZCBmcmVlX3Nocmlua2VyX2luZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vc2hyaW5rZXIuYy03Ni1cXG5tbS9zaHJpbmtlci5jOjc3OmludCBhbGxvY19zaHJpbmtlcl9pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS9zaHJpbmtlci5jLTc4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjI6MzM6MTQuOTgyOTM1OTM2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODYwNTM2MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipJbnZlc3RpZ2F0aW5nIGBtbS9zaHJpbmtlci5jYCBhbmQgTWVtb3J5IENvbnRyb2wgR3JvdXBzKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgc2hyaW5rZXIgc3Vic3lzdGVtIGFuZCBtZW1vcnkgY29udHJvbCBncm91cHMuIEknbSBnb2luZyB0byBqdW1wIHJpZ2h0IGludG8gYG1tL3Nocmlua2VyLmNgLiBUaGUgZmlyc3QgdGhpbmcgSSB3YW50IHRvIGRvIGlzIHNlZSBpZiB0aGUga2VybmVsIGRldmVsb3BlcnMgaGF2ZSBjb25kaXRpb25hbGl6ZWQgYW55IG1lbW9yeSByZWNsYW1hdGlvbiBjb2RlIGJhc2VkIG9uIHRoZSBwcmVzZW5jZSBvZiBtZW1vcnkgY29udHJvbCBncm91cHMuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgZm9yIGAjaWZkZWYgQ09ORklHX01FTUNHYCBkaXJlY3RpdmVzLiBUaGF0J3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQuIEEgcXVpY2sgZ3JlcCBpbiBteSBoZWFkLCBvciBhIGxpdGVyYWwgZ3JlcCwgd2lsbCB0ZWxsIG1lIGlmIHRoZXJlJ3MgYW55IGRpcmVjdCBpbnRlcmFjdGlvbiB0aGVyZS4gSSdtIGV4cGVjdGluZyBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljIGFyb3VuZCBtZW1vcnkgcHJlc3N1cmUgY2FsY3VsYXRpb25zLCByZXNvdXJjZSBsaW1pdHMsIG9yIHBlcmhhcHMgaG93IHRoZSBzaHJpbmtlciBwcmlvcml0aXplcyBwYWdlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzaHJpbmtlciBpbnRlcmFjdHMgd2l0aCBgbWVtY2dgIHdoZW4gYG1lbWNnYCBpcyBlbmFibGVkLiBMZXQncyBzZWUgd2hhdCdzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTY0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjI6MzM6MTguMjY4OTkxNTRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTc0NjQzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTUVNQ0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2hyaW5rZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zaHJpbmtlci5jPTExPURFRklORV9NVVRFWChzaHJpbmtlcl9tdXRleCk7XFxubW0vc2hyaW5rZXIuYy0xMi1cXG5tbS9zaHJpbmtlci5jOjEzOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9zaHJpbmtlci5jLTE0LXN0YXRpYyBpbnQgc2hyaW5rZXJfbnJfbWF4O1xcbi0tXFxubW0vc2hyaW5rZXIuYz0zMzY9c3RhdGljIGxvbmcgYWRkX25yX2RlZmVycmVkX21lbWNnKGxvbmcgbnIsIGludCBuaWQsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXFxuLS1cXG5tbS9zaHJpbmtlci5jLTM0MC19XFxubW0vc2hyaW5rZXIuYzozNDE6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbm1tL3Nocmlua2VyLmMtMzQyLVxcbi0tXFxubW0vc2hyaW5rZXIuYz0zNzg9c3RhdGljIHVuc2lnbmVkIGxvbmcgZG9fc2hyaW5rX3NsYWIoc3RydWN0IHNocmlua19jb250cm9sICpzaHJpbmtjdGwsXFxuLS1cXG5tbS9zaHJpbmtlci5jLTQ3Ni1cXG5tbS9zaHJpbmtlci5jOjQ3NzojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vc2hyaW5rZXIuYy00Nzgtc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX3NsYWJfbWVtY2coZ2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQsXFxuLS1cXG5tbS9zaHJpbmtlci5jLTU5Ny19XFxubW0vc2hyaW5rZXIuYzo1OTg6I2Vsc2UgLyogIUNPTkZJR19NRU1DRyAqL1xcbm1tL3Nocmlua2VyLmMtNTk5LXN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19zbGFiX21lbWNnKGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLFxcbi0tXFxubW0vc2hyaW5rZXIuYy02MDMtfVxcbm1tL3Nocmlua2VyLmM6NjA0OiNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cXG5tbS9zaHJpbmtlci5jLTYwNS1cXG4tLVxcbm1tL3Nocmlua2VyLmM9NjkwPXN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXJfYWxsb2ModW5zaWduZWQgaW50IGZsYWdzLCBjb25zdCBjaGFyICpmbXQsIC4uLilcXG4tLVxcbm1tL3Nocmlua2VyLmMtNzI4LVxcdCAqICAtIG5vbi1tZW1jZy1hd2FyZSBzaHJpbmtlcnNcXG5tbS9zaHJpbmtlci5jOjcyOTpcXHQgKiAgLSAhQ09ORklHX01FTUNHXFxubW0vc2hyaW5rZXIuYy03MzAtXFx0ICogIC0gbWVtY2cgaXMgZGlzYWJsZWQgYnkga2VybmVsIGNvbW1hbmQgbGluZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMjozMzoxOC4zNzQ3NDMzNjFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUzNDM3MjQzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gdGhlIGBhbGxvY19zaHJpbmtlcl9pbmZvYCBmdW5jdGlvbiBpcyBkZWZpbml0ZWx5IHRpZWQgdG8gYCNpZmRlZiBDT05GSUdfTUVNQ0dgLCBtZWFuaW5nIGl0J3MgZGVwZW5kZW50IG9uIHRoZSBgTUVNQ0dgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGF0J3Mgb3VyIHN0YXJ0aW5nIHBvaW50LiBUaGlzIHBhcnRpY3VsYXIgcGF0Y2ggaXMgaW50ZXJlc3Rpbmc7IGl0IGxvb2tzIGxpa2UgYSBmaXggZm9yIGFuIGVycm9yIHBhdGggd2l0aGluIGBhbGxvY19zaHJpbmtlcl9pbmZvYCBpdHNlbGYuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gY29ycmVjdCBhbiBpc3N1ZSB3aGVyZSBzaHJpbmtlciBpbmZvIHdhcyBiZWluZyBpbmNvcnJlY3RseSBmcmVlZC4gVGhhdCwgYnkgaXRzIG5hdHVyZSwgbWFrZXMgaXQgKmRlZmluaXRlbHkqIHdvcnRoIGZ1enppbmcuXG5cbk15IGZvY3VzIHN5bWJvbCBmb3IgdGhpcyBmdXp6aW5nIGVmZm9ydCB3aWxsIGJlIGBhbGxvY19zaHJpbmtlcl9pbmZvYC4gTXkgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBlcnJvciBjb25kaXRpb24gd2l0aGluIHRoYXQgZnVuY3Rpb24uIFRoZSBjb3JlIG9mIHRyaWdnZXJpbmcgdGhpcyBidWcgbGlrZWx5IHJldm9sdmVzIGFyb3VuZCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyAqZHVyaW5nKiB0aGUgY3JlYXRpb24gb2YgbWVtb3J5IGNncm91cHMsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFdlJ2xsIG5lZWQgdG8gaW5kdWNlIHRob3NlIGZhaWx1cmVzIHRvIHRlc3QgdGhpcyBmaXggdGhvcm91Z2hseS5cblxuTGV0IG1lIGRvdWJsZS1jaGVjayBmb3IgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgb3IgbW9kaWZpZWQgZnVuY3Rpb25zLiBBaCwgYGFsbG9jX3Nocmlua2VyX2luZm9gIGlzIGNhbGxlZCBmcm9tIGBtZW1fY2dyb3VwX2Nzc19vbmxpbmVgLiBUaGF0IGhlbHBzIGRlZmluZSB0aGUgY2FsbCBzdGFjay4gTm8gb3RoZXIgZnVuY3Rpb25zIHNlZW0gdG8gYmUgZGlyZWN0bHkgbW9kaWZpZWQgaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFRoaXMgcGF0Y2ggc2VlbXMgZm9jdXNlZCwgZnVuY3Rpb25hbCwgYW5kIGl0IGRpcmVjdGx5IGFmZmVjdHMgY29yZSBrZXJuZWwgbG9naWMgd2l0aGluIHRoZSBjZ3JvdXAvbWVtY2cgc3Vic3lzdGVtLCB3aGljaCBtZWFucyBpdCBpcyB0cnVseSB3b3J0aCBmdXp6aW5nLlxuXG5MZXQncyBzdW1tYXJpemUgdGhpcyBjbGVhcmx5OlxuXG4qICAgKipGb2N1c1N5bWJvbHMqKjogYGFsbG9jX3Nocmlua2VyX2luZm9gXG4qICAgKipFbmFibGVDb25maWdzKio6IGBNRU1DR2BcbiogICAqKlJlYXNvbmluZyoqOiBUaGlzIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIG9mIGBhbGxvY19zaHJpbmtlcl9pbmZvYCBkdXJpbmcgbWVtb3J5IGNncm91cCBjcmVhdGlvbi4gRnV6emluZyB0aGlzIHdpbGwgcmVxdWlyZSB0cmlnZ2VyaW5nIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIHdoaWxlIG1lbWNncyBhcmUgYmVpbmcgY3JlYXRlZC5cbiogICAqKldvcnRoRnV6emluZyoqOiB0cnVlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTAzLCJPdXRwdXRUb2tlbnMiOjgzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIyOjMzOjIzLjkwOTExODYyOFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Mzg3MDAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19zaHJpbmtlcl9pbmZvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2YgYGFsbG9jX3Nocmlua2VyX2luZm9gIGR1cmluZyBtZW1vcnkgY2dyb3VwIGNyZWF0aW9uLiBGdXp6aW5nIHRoaXMgcmVxdWlyZXMgdHJpZ2dlcmluZyBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyB3aGlsZSBjcmVhdGluZyBtZW1jZ3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19zaHJpbmtlcl9pbmZvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2YgYGFsbG9jX3Nocmlua2VyX2luZm9gIGR1cmluZyBtZW1vcnkgY2dyb3VwIGNyZWF0aW9uLiBGdXp6aW5nIHRoaXMgcmVxdWlyZXMgdHJpZ2dlcmluZyBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyB3aGlsZSBjcmVhdGluZyBtZW1jZ3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow68wkb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-11 21:54:25 +0000 UTC FinishedAt: 2026-07-11 22:33:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG" ], "series_id": "9c3fc021-5f0f-45b2-94cb-21b4c6e25374" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "alloc_shrinker_info" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIyOjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2Nfc2hyaW5rZXJfaW5mbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBvZiBgYWxsb2Nfc2hyaW5rZXJfaW5mb2AgZHVyaW5nIG1lbW9yeSBjZ3JvdXAgY3JlYXRpb24uIEZ1enppbmcgdGhpcyByZXF1aXJlcyB0cmlnZ2VyaW5nIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIHdoaWxlIGNyZWF0aW5nIG1lbWNncy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMjozMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDZkM2M4NDEyNTZhZjVmZWI1ZjQzYjQ5MzVmMTk4YTc4NTdjMmViNDVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxMSAyMjozMjo0MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9zaHJpbmtlci5jIGIvbW0vc2hyaW5rZXIuY1xuaW5kZXggNzA4MmQwMWM4YzlkMGQuLjkyYzZjYjQ1NWZjOThkIDEwMDY0NFxuLS0tIGEvbW0vc2hyaW5rZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2hyaW5rZXIuY1xuQEAgLTc4LDYgJiM0Mzs3OCw3IEBAIGludCBhbGxvY19zaHJpbmtlcl9pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRpbnQgbmlkLCByZXQgPSAwO1xuIFx0aW50IGFycmF5X3NpemUgPSAwO1xuJiM0MztcdGludCBmYWlsZWRfbmlkO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZzaHJpbmtlcl9tdXRleCk7XG4gXHRhcnJheV9zaXplID0gc2hyaW5rZXJfdW5pdF9zaXplKHNocmlua2VyX25yX21heCk7XG5AQCAtOTgsOCAmIzQzOzk5LDE4IEBAIGludCBhbGxvY19zaHJpbmtlcl9pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiBcdHJldHVybiByZXQ7XG4gXG4gZXJyOlxuJiM0MztcdGZhaWxlZF9uaWQgPSBuaWQ7XG4mIzQzO1x0Zm9yX2VhY2hfbm9kZShuaWQpIHtcbiYjNDM7XHRcdHN0cnVjdCBzaHJpbmtlcl9pbmZvICppbmZvO1xuJiM0MztcbiYjNDM7XHRcdGlmIChuaWQgXHUwMDNlPSBmYWlsZWRfbmlkKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGluZm8gPSBzaHJpbmtlcl9pbmZvX3Byb3RlY3RlZChtZW1jZywgbmlkKTtcbiYjNDM7XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihtZW1jZy1cdTAwM2Vub2RlaW5mb1tuaWRdLVx1MDAzZXNocmlua2VyX2luZm8sIE5VTEwpO1xuJiM0MztcdFx0c2hyaW5rZXJfdW5pdF9mcmVlKGluZm8sIDApO1xuJiM0MztcdFx0a3ZmcmVlKGluZm8pO1xuJiM0MztcdH1cbiBcdG11dGV4X3VubG9jayhcdTAwMjZzaHJpbmtlcl9tdXRleCk7XG4tXHRmcmVlX3Nocmlua2VyX2luZm8obWVtY2cpO1xuIFx0cmV0dXJuIC1FTk9NRU07XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIyOjMyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2Nfc2hyaW5rZXJfaW5mbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBvZiBgYWxsb2Nfc2hyaW5rZXJfaW5mb2AgZHVyaW5nIG1lbW9yeSBjZ3JvdXAgY3JlYXRpb24uIEZ1enppbmcgdGhpcyByZXF1aXJlcyB0cmlnZ2VyaW5nIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIHdoaWxlIGNyZWF0aW5nIG1lbWNncy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmQzYzg0MTI1NmFmNWZlYjVmNDNiNDkzNWYxOThhNzg1N2MyZWI0NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgSnVsIDExIDIyOjMyOjQxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vc2hyaW5rZXIuYyBiL21tL3Nocmlua2VyLmMKaW5kZXggNzA4MmQwMWM4YzlkMGQuLjkyYzZjYjQ1NWZjOThkIDEwMDY0NAotLS0gYS9tbS9zaHJpbmtlci5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Nocmlua2VyLmMKQEAgLTc4LDYgJiM0Mzs3OCw3IEBAIGludCBhbGxvY19zaHJpbmtlcl9pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIAlpbnQgbmlkLCByZXQgPSAwOwogCWludCBhcnJheV9zaXplID0gMDsKJiM0MzsJaW50IGZhaWxlZF9uaWQ7CiAKIAltdXRleF9sb2NrKCZhbXA7c2hyaW5rZXJfbXV0ZXgpOwogCWFycmF5X3NpemUgPSBzaHJpbmtlcl91bml0X3NpemUoc2hyaW5rZXJfbnJfbWF4KTsKQEAgLTk4LDggJiM0Mzs5OSwxOCBAQCBpbnQgYWxsb2Nfc2hyaW5rZXJfaW5mbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiAJcmV0dXJuIHJldDsKIAogZXJyOgomIzQzOwlmYWlsZWRfbmlkID0gbmlkOwomIzQzOwlmb3JfZWFjaF9ub2RlKG5pZCkgewomIzQzOwkJc3RydWN0IHNocmlua2VyX2luZm8gKmluZm87CiYjNDM7CiYjNDM7CQlpZiAobmlkICZndDs9IGZhaWxlZF9uaWQpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlpbmZvID0gc2hyaW5rZXJfaW5mb19wcm90ZWN0ZWQobWVtY2csIG5pZCk7CiYjNDM7CQlyY3VfYXNzaWduX3BvaW50ZXIobWVtY2ctJmd0O25vZGVpbmZvW25pZF0tJmd0O3Nocmlua2VyX2luZm8sIE5VTEwpOwomIzQzOwkJc2hyaW5rZXJfdW5pdF9mcmVlKGluZm8sIDApOwomIzQzOwkJa3ZmcmVlKGluZm8pOwomIzQzOwl9CiAJbXV0ZXhfdW5sb2NrKCZhbXA7c2hyaW5rZXJfbXV0ZXgpOwotCWZyZWVfc2hyaW5rZXJfaW5mbyhtZW1jZyk7CiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjI6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYG1tL3Nocmlua2VyLmNgIFBhdGNoKioKCk9rYXksIHNvIHRoZXJlJiMzOTtzIGEgcGF0Y2ggaW4gYG1tL3Nocmlua2VyLmNgLiBNeSBpbml0aWFsIHJlYWQgc3VnZ2VzdHMgaXTigJlzIGRlYWxpbmcgd2l0aCBhbiBlcnJvciBwYXRoIHdpdGhpbiBgYWxsb2Nfc2hyaW5rZXJfaW5mb2AuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgaXNzdWUgcmV2b2x2ZXMgYXJvdW5kIGhvdyB0aGUgY29kZSBoYW5kbGVzIGZhaWx1cmVzIGR1cmluZyB0aGUgYWxsb2NhdGlvbiBvZiBgc2hyaW5rZXJfaW5mb2Agc3RydWN0dXJlcy4gSW5zdGVhZCBvZiB1c2luZyB0aGUgbW9yZSBjb252ZW50aW9uYWwgYGZyZWVfc2hyaW5rZXJfaW5mbyhtZW1jZylgIGZvciBjbGVhbnVwLCB0aGlzIHBhdGNoIGFkb3B0cyBhIG1hbnVhbCBhcHByb2FjaC4gSXQgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgbm9kZXMgdXAgdG8gYSBwb2ludCBkZXNpZ25hdGVkIGFzIGBmYWlsZWRfbmlkYCwgYW5kIGZyZWVzIHRoZSBhbGxvY2F0ZWQgYHNocmlua2VyX2luZm9gIHN0cnVjdHVyZXMgaW5kaXZpZHVhbGx5LiBUaGUgZm9jdXMsIHRoZW4sIGlzIGRlZmluaXRlbHkgb24gaW1wcm92aW5nIHRoZSByb2J1c3RuZXNzIG9mIHRoYXQgZmFpbHVyZSBoYW5kbGluZy4gSSBzaG91bGQgcHJvYmFibHkgZGl2ZSBpbnRvIGBhbGxvY19zaHJpbmtlcl9pbmZvYCBpdHNlbGYgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXTigJlzIGdvaW5nIG9uIGFuZCB2ZXJpZnkgdGhhdCB0aGUgbWFudWFsIGZyZWVpbmcgaXMgdGhlIHJpZ2h0IHdheSB0byBhcHByb2FjaCB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhlIGNvbnZlbnRpb25hbCBjbGVhbnVwIGlzbiYjMzk7dCBzdWZmaWNpZW50IGluIHRoaXMgc3BlY2lmaWMgc2NlbmFyaW8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjI6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2Nfc2hyaW5rZXJfaW5mbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Nocmlua2VyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2hyaW5rZXIuYz02Mj12b2lkIGZyZWVfc2hyaW5rZXJfaW5mbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vc2hyaW5rZXIuYy03Ni1cbm1tL3Nocmlua2VyLmM6Nzc6aW50IGFsbG9jX3Nocmlua2VyX2luZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vc2hyaW5rZXIuYy03OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjI6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQxNAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgYWxsb2Nfc2hyaW5rZXJfaW5mb2AgaW4gbW0vc2hyaW5rZXIuYyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBtbS9zaHJpbmtlci5jYCBhbmQgemVybyBpbiBvbiB0aGUgYGFsbG9jX3Nocmlua2VyX2luZm9gIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiBtZW1vcnkgcmVjbGFtYXRpb24uIEkga25vdyBzaHJpbmtlcnMgYXJlIGZ1bmRhbWVudGFsLCBidXQgSSBuZWVkIGEgcmVmcmVzaGVyIG9uIHRoZSBwcmVjaXNlIG1lY2hhbmlzbSBhbmQgY29udGV4dCB0aGlzIGZ1bmN0aW9uIHVzZXMuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBudWFuY2VzIG9mIGhvdyBpdCYjMzk7cyBhbGxvY2F0aW5nIGFuZCBpbml0aWFsaXppbmcgdGhlIHN0cnVjdHVyZXMgdXNlZCB0byBtYW5hZ2UgcmVjbGFpbWFibGUgcGFnZXMgYW5kIGhvdyB0aGF0IHRpZXMgaW50byB0aGUgb3ZlcmFsbCBkZXNpZ24gb2YgdGhlIGtlcm5lbCYjMzk7cyBsb3cgbWVtb3J5IHNpdHVhdGlvbi4gVGhlcmUgYXJlIGEgZmV3IGRpZmZlcmVudCBkYXRhIHN0cnVjdHVyZXMgaW4gdGhpcyBzZWN0aW9uIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgaG93IHRoZXkgaW50ZXJhY3QuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Nocmlua2VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDcwOlx0XHRcdGluZm8gPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHBuLVx1MDAzZXNocmlua2VyX2luZm8sIHRydWUpO1xuICA3MTpcdFx0XHRzaHJpbmtlcl91bml0X2ZyZWUoaW5mbywgMCk7XG4gIDcyOlx0XHRcdGt2ZnJlZShpbmZvKTtcbiAgNzM6XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHBuLVx1MDAzZXNocmlua2VyX2luZm8sIE5VTEwpO1xuICA3NDpcdFx0fVxuICA3NTpcdH1cbiAgNzY6XHRcbiAgNzc6XHRpbnQgYWxsb2Nfc2hyaW5rZXJfaW5mbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gIDc4Olx0e1xuICA3OTpcdFx0aW50IG5pZCwgcmV0ID0gMDtcbiAgODA6XHRcdGludCBhcnJheV9zaXplID0gMDtcbiAgODE6XHRcdGludCBmYWlsZWRfbmlkO1xuICA4MjpcdFxuICA4MzpcdFx0bXV0ZXhfbG9jayhcdTAwMjZzaHJpbmtlcl9tdXRleCk7XG4gIDg0Olx0XHRhcnJheV9zaXplID0gc2hyaW5rZXJfdW5pdF9zaXplKHNocmlua2VyX25yX21heCk7XG4gIDg1Olx0XHRmb3JfZWFjaF9ub2RlKG5pZCkge1xuICA4NjpcdFx0XHRzdHJ1Y3Qgc2hyaW5rZXJfaW5mbyAqaW5mbyA9IGt2emFsbG9jX25vZGUoc2l6ZW9mKCppbmZvKSAmIzQzOyBhcnJheV9zaXplLFxuICA4NzpcdFx0XHRcdFx0XHRcdFx0ICAgR0ZQX0tFUk5FTCwgbmlkKTtcbiAgODg6XHRcdFx0aWYgKCFpbmZvKVxuICA4OTpcdFx0XHRcdGdvdG8gZXJyO1xuICA5MDpcdFx0XHRpbmZvLVx1MDAzZW1hcF9ucl9tYXggPSBzaHJpbmtlcl9ucl9tYXg7XG4gIDkxOlx0XHRcdGlmIChzaHJpbmtlcl91bml0X2FsbG9jKGluZm8sIE5VTEwsIG5pZCkpIHtcbiAgOTI6XHRcdFx0XHRrdmZyZWUoaW5mbyk7XG4gIDkzOlx0XHRcdFx0Z290byBlcnI7XG4gIDk0Olx0XHRcdH1cbiAgOTU6XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKG1lbWNnLVx1MDAzZW5vZGVpbmZvW25pZF0tXHUwMDNlc2hyaW5rZXJfaW5mbywgaW5mbyk7XG4gIDk2Olx0XHR9XG4gIDk3Olx0XHRtdXRleF91bmxvY2soXHUwMDI2c2hyaW5rZXJfbXV0ZXgpO1xuICA5ODpcdFxuICA5OTpcdFx0cmV0dXJuIHJldDtcbiAxMDA6XHRcbiAxMDE6XHRlcnI6XG4gMTAyOlx0XHRmYWlsZWRfbmlkID0gbmlkO1xuIDEwMzpcdFx0Zm9yX2VhY2hfbm9kZShuaWQpIHtcbiAxMDQ6XHRcdFx0c3RydWN0IHNocmlua2VyX2luZm8gKmluZm87XG4gMTA1Olx0XG4gMTA2Olx0XHRcdGlmIChuaWQgXHUwMDNlPSBmYWlsZWRfbmlkKVxuIDEwNzpcdFx0XHRcdGJyZWFrO1xuIDEwODpcdFx0XHRpbmZvID0gc2hyaW5rZXJfaW5mb19wcm90ZWN0ZWQobWVtY2csIG5pZCk7XG4gMTA5Olx0XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihtZW1jZy1cdTAwM2Vub2RlaW5mb1tuaWRdLVx1MDAzZXNocmlua2VyX2luZm8sIE5VTEwpO1xuIDExMDpcdFx0XHRzaHJpbmtlcl91bml0X2ZyZWUoaW5mbywgMCk7XG4gMTExOlx0XHRcdGt2ZnJlZShpbmZvKTtcbiAxMTI6XHRcdH1cbiAxMTM6XHRcdG11dGV4X3VubG9jayhcdTAwMjZzaHJpbmtlcl9tdXRleCk7XG4gMTE0Olx0XHRyZXR1cm4gLUVOT01FTTtcbiAxMTU6XHR9XG4gMTE2Olx0XG4gMTE3Olx0c3RhdGljIHN0cnVjdCBzaHJpbmtlcl9pbmZvICpzaHJpbmtlcl9pbmZvX3Byb3RlY3RlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gMTE4Olx0XHRcdFx0XHRcdFx0ICAgICBpbnQgbmlkKVxuIDExOTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMjozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzQ5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgYnVnIGZpeCwgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgRGVhZGxvY2sgaW4gTWVtb3J5IENHIFNocmlua2luZyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGNsYWltcyB0byBmaXggYSBwcmV0dHkgbmFzdHkgYnVnLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBpbiB0aGUgYGFsbG9jX3Nocmlua2VyX2luZm9gIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhvdyB0aGUgbWVtb3J5IGNncm91cCYjMzk7cyBzaHJpbmtlciBpbmZvIGlzIGhhbmRsZWQuIEkgcmVtZW1iZXIgYGZyZWVfc2hyaW5rZXJfaW5mbyhtZW1jZylgIGJlaW5nIGNhbGxlZCB3aGlsZSBhbHJlYWR5IGhvbGRpbmcgdGhlIGBzaHJpbmtlcl9tdXRleGAuIFRoYXQgcmluZ3Mgc29tZSBhbGFybSBiZWxscyBpbW1lZGlhdGVseS4gTXkgZ3V0IHRlbGxzIG1lIHRoZXJlJiMzOTtzIGEgcG90ZW50aWFsIGRlYWRsb2NrIGx1cmtpbmcgaGVyZS4gVGhlIHF1ZXN0aW9uIGlzLCBkb2VzIGBmcmVlX3Nocmlua2VyX2luZm9gICppdHNlbGYqIHRyeSB0byBhY3F1aXJlIHRoZSBgc2hyaW5rZXJfbXV0ZXhgPyBJZiBpdCBkb2VzLCBhbmQgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIHdoaWxlIHRoZSBtdXRleCBpcyBhbHJlYWR5IGhlbGQsIHdlJiMzOTt2ZSBnb3QgYSBjbGFzc2ljIGRlYWRsb2NrIHNjZW5hcmlvLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSBmb3IgYGZyZWVfc2hyaW5rZXJfaW5mb2AgYW5kIHZlcmlmeSB0aGF0IGFzc3VtcHRpb24uIEkgbmVlZCB0byBjb25maXJtIGlmIHRoYXQgbmVzdGVkIGxvY2sgYWNxdWlzaXRpb24gaXMgYWN0dWFsbHkgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIyOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vc2hyaW5rZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTU6XHRcbiAgNTY6XHRcdFx0bmV3LVx1MDAzZXVuaXRbaV0gPSB1bml0O1xuICA1NzpcdFx0fVxuICA1ODpcdFxuICA1OTpcdFx0cmV0dXJuIDA7XG4gIDYwOlx0fVxuICA2MTpcdFxuICA2MjpcdHZvaWQgZnJlZV9zaHJpbmtlcl9pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiAgNjM6XHR7XG4gIDY0Olx0XHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG47XG4gIDY1Olx0XHRzdHJ1Y3Qgc2hyaW5rZXJfaW5mbyAqaW5mbztcbiAgNjY6XHRcdGludCBuaWQ7XG4gIDY3Olx0XG4gIDY4Olx0XHRmb3JfZWFjaF9ub2RlKG5pZCkge1xuICA2OTpcdFx0XHRwbiA9IG1lbWNnLVx1MDAzZW5vZGVpbmZvW25pZF07XG4gIDcwOlx0XHRcdGluZm8gPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHBuLVx1MDAzZXNocmlua2VyX2luZm8sIHRydWUpO1xuICA3MTpcdFx0XHRzaHJpbmtlcl91bml0X2ZyZWUoaW5mbywgMCk7XG4gIDcyOlx0XHRcdGt2ZnJlZShpbmZvKTtcbiAgNzM6XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHBuLVx1MDAzZXNocmlua2VyX2luZm8sIE5VTEwpO1xuICA3NDpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIyOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MjQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgZnJlZV9zaHJpbmtlcl9pbmZvYCBhbmQgTXV0ZXggVXNhZ2UqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbm90aWNlZCB0aGF0IGBmcmVlX3Nocmlua2VyX2luZm9gIGRvZXNuJiMzOTt0IHRha2UgdGhlIGBzaHJpbmtlcl9tdXRleGAuIFRoYXQgc2VlbXPigKYgb2RkLiBUaGUgb3JpZ2luYWwgY29kZSBpbiBgYWxsb2Nfc2hyaW5rZXJfaW5mb2AgY2FsbGVkIGBmcmVlX3Nocmlua2VyX2luZm9gICphZnRlciogdW5sb2NraW5nIHRoZSBgc2hyaW5rZXJfbXV0ZXhgLgoKYGBgCmVycjoKCW11dGV4X3VubG9jaygmYW1wO3Nocmlua2VyX211dGV4KTsKCWZyZWVfc2hyaW5rZXJfaW5mbyhtZW1jZyk7CglyZXR1cm4gLUVOT01FTTsKYGBgCgpOb3csIHRoZSBuZXcgY29kZSwgdW5kZXIgdGhlIHNhbWUgZXJyb3IgY29uZGl0aW9uLCBsb29rcyBsaWtlIHRoaXM6CgpgYGAKZXJyOgoJZmFpbGVkX25pZCA9IG5pZDsKCWZvcl9lYWNoX25vZGUobmlkKSB7CgkJc3RydWN0IHNocmlua2VyX2luZm8gKmluZm87CgoJCWlmIChuaWQgJmd0Oz0gZmFpbGVkX25pZCkKCQkJYnJlYWs7CgkJaW5mbyA9IHNocmlua2VyX2luZm9fcHJvdGVjdGVkKG1lbWNnLCBuaWQpOwoJCXJjdV9hc3NpZ25fcG9pbnRlcihtZW1jZy0mZ3Q7bm9kZWluZm9bbmlkXS0mZ3Q7c2hyaW5rZXJfaW5mbywgTlVMTCk7CgkJc2hyaW5rZXJfdW5pdF9mcmVlKGluZm8sIDApOwoJCWt2ZnJlZShpbmZvKTsKCX0KCW11dGV4X3VubG9jaygmYW1wO3Nocmlua2VyX211dGV4KTsKCXJldHVybiAtRU5PTUVNOwpgYGAKClRoaXMgY2hhbmdlIGlzIHNpZ25pZmljYW50LiBUaGUgb2xkIGBmcmVlX3Nocmlua2VyX2luZm9gIGNhbGwgaXMgZ29uZSwgcmVwbGFjZWQgd2l0aCB0aGlzIGxvb3AgYW5kIGEgZGlmZmVyZW50IGZyZWVpbmcgcHJvY2Vzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSouIFdhcyB0aGUgb3JpZ2luYWwgYGZyZWVfc2hyaW5rZXJfaW5mb2AgcG90ZW50aWFsbHkgZnJlZWluZyBub2RlcyB0aGF0IGhhZG4mIzM5O3QgYmVlbiBhbGxvY2F0ZWQgeWV0PyBJcyBpdCBwb3NzaWJsZSB0aGF0IGBmcmVlX3Nocmlua2VyX2luZm9gICpuZWVkcyogdGhlIGBzaHJpbmtlcl9tdXRleGAgdG8gYmUgaGVsZD8KCkFoYSEgYGZyZWVfc2hyaW5rZXJfaW5mb2AgdXNlcyBgcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChwbi0mZ3Q7c2hyaW5rZXJfaW5mbywgdHJ1ZSlgLiBUaGF0JiMzOTtzIGEga2V5IGNsdWUuIEZ1cnRoZXIsIHRoZSBjb2RlIHVzZXMgYHNocmlua2VyX2luZm9fcHJvdGVjdGVkYC4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgYW5kIHNlZSB3aGF0IHRoYXQgZnVuY3Rpb24gZG9lcy4gQW5kIHRoZXJlIGl0IGlzISBgc2hyaW5rZXJfaW5mb19wcm90ZWN0ZWRgIGl0c2VsZiB1c2VzIGByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKC4uLiwgbG9ja2RlcF9pc19oZWxkKCZhbXA7c2hyaW5rZXJfbXV0ZXgpKWAuIFRoYXQgZXhwbGFpbnMgaXQhIEl0IHNlZW1zIHRoZSBjcml0aWNhbCBzZWN0aW9uIG9mIGBmcmVlX3Nocmlua2VyX2luZm9gIG5lZWRzIHRvIGVuc3VyZSB0aGUgbXV0ZXggaXMgaGVsZCwgb3IgdGhlIFJDVSByZWFkcyBjb3VsZCByYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Nocmlua2VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDExNzpcdHN0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXJfaW5mbyAqc2hyaW5rZXJfaW5mb19wcm90ZWN0ZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIDExODpcdFx0XHRcdFx0XHRcdCAgICAgaW50IG5pZClcbiAxMTk6XHR7XG4gMTIwOlx0XHRyZXR1cm4gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtZW1jZy1cdTAwM2Vub2RlaW5mb1tuaWRdLVx1MDAzZXNocmlua2VyX2luZm8sXG4gMTIxOlx0XHRcdFx0XHRcdCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2c2hyaW5rZXJfbXV0ZXgpKTtcbiAxMjI6XHR9XG4gMTIzOlx0XG4gMTI0Olx0c3RhdGljIGludCBleHBhbmRfb25lX3Nocmlua2VyX2luZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmV3X3NpemUsXG4gMTI1Olx0XHRcdFx0XHQgICAgaW50IG9sZF9zaXplLCBpbnQgbmV3X25yX21heClcbiAxMjY6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIyOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNDkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0OiBgZnJlZV9zaHJpbmtlcl9pbmZvYCBhbmQgTWVtb3J5IFByZXNzdXJlIGluIE1lbWNncyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGZyZWVfc2hyaW5rZXJfaW5mb2AgYW5kIEkgc2VlIGl0JiMzOTtzIHVzaW5nIGByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHBuLSZndDtzaHJpbmtlcl9pbmZvLCB0cnVlKWAuIFRoYXQmIzM5O3Mgc3RhbmRhcmQgZW5vdWdoLCBidXQgbGV0JiMzOTtzIGRpZyBkZWVwZXIuIFRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzIHRoYXQgYGFsbG9jX3Nocmlua2VyX2luZm9gIGlzICphbHNvKiBmcmVlaW5nIGFueSBhbGxvY2F0ZWQgYHNocmlua2VyX2luZm9gIGluc3RhbmNlcyBpZiBpdCBmYWlscy4gVGhhdCYjMzk7cyBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyEKClRoZSBjcnV4IG9mIHRoZSBwcm9ibGVtLCBhbmQgd2h5IHRoaXMgY291bGQgYmUgaW50ZXJlc3RpbmcsIGlzIHdoZXJlIGBhbGxvY19zaHJpbmtlcl9pbmZvYCBpcyBjYWxsZWQ6IGR1cmluZyBtZW1jZyBjcmVhdGlvbi4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyB0aGlzIGFzIGEgcG9zc2libGUgbWVtb3J5IG1hbmFnZW1lbnQvY2dyb3VwIGVycm9yIHBhdGgsIHJpcGUgZm9yIGZ1enppbmcuIElmIGBhbGxvY19zaHJpbmtlcl9pbmZvYCBmYWlscywgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgY2xlYW51cCBpcyBjb3JyZWN0LiBUaGUgZ29hbCBpcyB0byB0cmlnZ2VyIHRoaXMgZXJyb3IsIHdoaWNoIG1lYW5zIHdlIG5lZWQgdG8gaW5kdWNlIGEgZmFpbHVyZSB3aXRoaW4gYGFsbG9jX3Nocmlua2VyX2luZm9gIGl0c2VsZi4gVGhhdCBtZWFucyBlaXRoZXIgYSBga3Z6YWxsb2Nfbm9kZWAgZmFpbHVyZSBvciBgc2hyaW5rZXJfdW5pdF9hbGxvY2AgZmFpbGluZy4KClJpZ2h0LCBzbyB0aGlzIGlzIGFuIGVycm9yIHBhdGguIFRvIHJlbGlhYmx5IGZ1enogdGhpcywgSSYjMzk7bGwgbmVlZCB0byBpbmR1Y2UgbWVtb3J5IHByZXNzdXJlIHNvbWVob3csIG9yIGxvb2sgaW50byBmYXVsdCBpbmplY3Rpb24gdG8gc3BlY2lmaWNhbGx5IHRyaWdnZXIgdGhlc2UgZmFpbHVyZXMuIFNpbmNlIGBhbGxvY19zaHJpbmtlcl9pbmZvYCBpcyBjYWxsZWQgZnJvbSBgbWVtX2Nncm91cF9jc3NfYWxsb2NgLCB0cmlnZ2VyaW5nIHRoaXMgcmVsaWFibHkgZGVwZW5kcyBvbiB0aGUgYWJpbGl0eSB0byBmYWlsIGVpdGhlciBga3Z6YWxsb2Nfbm9kZWAgb3IgYHNocmlua2VyX3VuaXRfYWxsb2NgIGluIHRoZSBgbWVtX2Nncm91cF9jc3NfYWxsb2NgIGZ1bmN0aW9uLiBJIHRoaW5rIHRoaXMgd2lsbCBiZSBhbiBpbnRlcmVzdGluZyBmdXp6aW5nIHRhcmdldCwgYSBsb3Qgb2YgcG90ZW50aWFsIGhlcmUgZm9yIGRpc2NvdmVyaW5nIG1lbW9yeSBpc3N1ZXMgaW4gbWVtY2cgY3JlYXRpb24gZHVyaW5nIHJlc291cmNlIGNvbnN0cmFpbmVkIGNvbmRpdGlvbnMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIyOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX3Nocmlua2VyX2luZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTQyMDk9c3RhdGljIGludCBtZW1fY2dyb3VwX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbi0tXG5tbS9tZW1jb250cm9sLmMtNDIyMS1cdCAqL1xubW0vbWVtY29udHJvbC5jOjQyMjI6XHRpZiAoYWxsb2Nfc2hyaW5rZXJfaW5mbyhtZW1jZykpXG5tbS9tZW1jb250cm9sLmMtNDIyMy1cdFx0Z290byBvZmZsaW5lX2ttZW07XG4tLVxubW0vc2hyaW5rZXIuYz02Mj12b2lkIGZyZWVfc2hyaW5rZXJfaW5mbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vc2hyaW5rZXIuYy03Ni1cbm1tL3Nocmlua2VyLmM6Nzc6aW50IGFsbG9jX3Nocmlua2VyX2luZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vc2hyaW5rZXIuYy03OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MzYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvZGUgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbiBjYWxsIOKAkyBpdCYjMzk7cyBjb21pbmcgZnJvbSBgbWVtX2Nncm91cF9jc3Nfb25saW5lYC4gUmlnaHQuIE5vdywgaWYgSSB3YW50IHRvIGZ1enogdGhpcyBwYXJ0aWN1bGFyIGFyZWEsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgc3lzdGVtIGlzIGJ1aWx0IHdpdGggYENPTkZJR19NRU1DR2AgZW5hYmxlZC4gTm8gcG9pbnQgaW4gdHJ5aW5nIHRvIGZ1enogc29tZXRoaW5nIHRoYXQgaXNuJiMzOTt0IGV2ZW4gY29tcGlsZWQgaW4hIExldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIGhhcyB0aGlzIGVuYWJsZWQgYmVmb3JlIHByb2NlZWRpbmcgYW55IGZ1cnRoZXIsIHRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIyOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA2Mz1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbi0tXG5pbml0L0tjb25maWctMTA3Mi1cbmluaXQvS2NvbmZpZzoxMDczOmNvbmZpZyBNRU1DR1xuaW5pdC9LY29uZmlnLTEwNzQtXHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnLTEwODEtXG5pbml0L0tjb25maWc6MTA4Mjpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuaW5pdC9LY29uZmlnLTEwODMtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTEwODgtXG5pbml0L0tjb25maWc6MTA4OTpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbmluaXQvS2NvbmZpZy0xMDkwLVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMDk1LVxuaW5pdC9LY29uZmlnOjEwOTY6Y29uZmlnIE1FTUNHX1YxXG5pbml0L0tjb25maWctMTA5Ny1cdGJvb2wgXCYjMzQ7TGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjQyCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgTUVNQ0dgIENvbmZpZ3VyYXRpb24gYW5kIFNocmlua2VyIEluZm9ybWF0aW9uKioKCk9rYXksIHNvIHRoZSBpbml0aWFsIHF1ZXN0aW9uIGlzIGFib3V0IHRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gbWVtb3J5IGNncm91cHMg4oCTIGBNRU1DR2AsIHRoYXQmIzM5O3MgdGhlIGtleS4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGF0LCBhbmQgSSBiZWxpZXZlIHRoZSBzcGVjaWZpYyBzeW1ib2wgSSYjMzk7bSB0cmFja2luZyBkb3duIGlzIGBhbGxvY19zaHJpbmtlcl9pbmZvYC4gSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGF0JiMzOTtzIHRoZSBjcml0aWNhbCBwaWVjZSBmb3IgdW5kZXJzdGFuZGluZyB0aGUgbWVtb3J5IHNocmlua2VyIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIG1lbWNncy4KCk5vdywgYSBxdWljayBjaGVjay4uLmlzIHRoZXJlICphbm90aGVyKiByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbiBsdXJraW5nIGFyb3VuZD8gQWgsIHJpZ2h0LCBgQ09ORklHX1NIUklOS0VSX0RFQlVHYCBleGlzdHMgYnV0IHRoYXQmIzM5O3MganVzdCBhIGRlYnVnZ2luZyBvcHRpb24sIGl0IGRvZXNuJiMzOTt0IHNlZW0gdG8gYWZmZWN0IHRoZSBjb3JlIHByZXNlbmNlIG9mIHNocmlua2VyIGluZm9ybWF0aW9uIGZvciBtZW1jZ3MsIGl0IHdpbGwgYWx3YXlzIGJlIHRoZXJlLiBTbywgSSBkb24mIzM5O3QgbmVlZCB0byBjb25zaWRlciB0aGF0IGFzIGEgcHJlLXJlcXVpc2l0ZS4KClJpZ2h0LCBgYWxsb2Nfc2hyaW5rZXJfaW5mb2AuLi4gSSB2YWd1ZWx5IHJlY2FsbCB0aGF0IGJlaW5nIGRlZmluZWQgb3IgaW1wbGVtZW50ZWQgd2l0aGluIGBtbS9zaHJpbmtlci5jYC4gTGV0IG1lIGp1c3QgdmVyaWZ5IHRoYXQ7IEkgd2lsbCBub3cgaGF2ZSB0byBjaGVjayBpZiB0aGlzIGZpbGUsIGBtbS9zaHJpbmtlci5jYCwgaXMgY29tcGlsZWQgY29uZGl0aW9uYWxseSBiYXNlZCBvbiBhbnkgb3RoZXIgZmxhZ3MuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjb2RlIGlzICphY3R1YWxseSogaW5jbHVkZWQgd2hlbiBkZWFsaW5nIHdpdGggbWVtb3J5IGNncm91cHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIyOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nocmlua2VyLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT01MT1vYmoteVx0XHRcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcbm1tL01ha2VmaWxlLTUyLVx0XHRcdCAgIG1hY2Nlc3MubyBwYWdlLXdyaXRlYmFjay5vIGZvbGlvLWNvbXBhdC5vIFxcXG5tbS9NYWtlZmlsZTo1MzpcdFx0XHQgICByZWFkYWhlYWQubyBzd2FwLm8gdHJ1bmNhdGUubyB2bXNjYW4ubyBzaHJpbmtlci5vIFxcXG5tbS9NYWtlZmlsZS01NC1cdFx0XHQgICBzaG1lbS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3NTIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGF0IGtlcm5lbCBjb2RlIHNuaXBwZXQsIHB1dHRpbmcgbXlzZWxmIGluIHRoZSByb2xlIG9mIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBhIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIGluIHRoZSBNZW1vcnkgU2hyaW5rZXIqKgoKUmlnaHQsIHNvIGl0JiMzOTtzIGFsd2F5cyBjb21waWxlZCwgYnV0IHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgZnVuY3Rpb24sIGBhbGxvY19zaHJpbmtlcl9pbmZvYCwgYW5kIGl0IHNvdW5kcyBsaWtlICp0aGF0KiBwYXJ0aWN1bGFyIHBpZWNlIG9mIGNvZGUgbWlnaHQgYmUgY29uZGl0aW9uYWwuIE15IG1lbnRhbCBhbGFybSBiZWxscyBhcmUgYWxyZWFkeSByaW5naW5nIGJlY2F1c2UgYW55dGhpbmcgdGhhdCYjMzk7cyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIG5lZWRzIGNhcmVmdWwgZXhhbWluYXRpb24g4oCTIGl0IGludHJvZHVjZXMgY29tcGxleGl0eSBhbmQgcG90ZW50aWFsIGVkZ2UgY2FzZXMuIFRoZSBjb21tZW50IGltcGxpZXMgaXQgZGVwZW5kcyBvbiBgQ09ORklHX01FTUNHYC4gVGltZSB0byB2ZXJpZnkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXRoZXIgdGhpcyBoYXMgYW55IGltcGFjdCBvbiB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneSwgYW5kIGhvdyBpdCBlZmZlY3RzIHBlcmZvcm1hbmNlLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UsIGFuZCBpbnZlc3RpZ2F0ZSBgbW0vc2hyaW5rZXIuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgYW5zd2VyIHdpbGwgYmUsIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGAjaWZkZWZgIGFuZCBgI2VuZGlmYCBkaXJlY3RpdmVzIG9yIHNpbWlsYXIgcHJlcHJvY2Vzc29yIGxvZ2ljIHN1cnJvdW5kaW5nIHRoZSBkZWNsYXJhdGlvbiBhbmQgZGVmaW5pdGlvbiBvZiBgYWxsb2Nfc2hyaW5rZXJfaW5mb2AuIEkmIzM5O2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoaXMgYWZmZWN0cyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIFRoZSBpbXBsaWNhdGlvbnMgb2YgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gY2FuIGJlIHN1YnRsZSwgZXNwZWNpYWxseSBpbiBhIGNvcmUgc3Vic3lzdGVtIGxpa2UgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHNocmlua2VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19zaHJpbmtlcl9pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2hyaW5rZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zaHJpbmtlci5jPTYyPXZvaWQgZnJlZV9zaHJpbmtlcl9pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9zaHJpbmtlci5jLTc2LVxubW0vc2hyaW5rZXIuYzo3NzppbnQgYWxsb2Nfc2hyaW5rZXJfaW5mbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS9zaHJpbmtlci5jLTc4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjI6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE2NAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipJbnZlc3RpZ2F0aW5nIGBtbS9zaHJpbmtlci5jYCBhbmQgTWVtb3J5IENvbnRyb2wgR3JvdXBzKioKCkFscmlnaHQsIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHNocmlua2VyIHN1YnN5c3RlbSBhbmQgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgcmlnaHQgaW50byBgbW0vc2hyaW5rZXIuY2AuIFRoZSBmaXJzdCB0aGluZyBJIHdhbnQgdG8gZG8gaXMgc2VlIGlmIHRoZSBrZXJuZWwgZGV2ZWxvcGVycyBoYXZlIGNvbmRpdGlvbmFsaXplZCBhbnkgbWVtb3J5IHJlY2xhbWF0aW9uIGNvZGUgYmFzZWQgb24gdGhlIHByZXNlbmNlIG9mIG1lbW9yeSBjb250cm9sIGdyb3Vwcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGxvb2tpbmcgZm9yIGAjaWZkZWYgQ09ORklHX01FTUNHYCBkaXJlY3RpdmVzLiBUaGF0JiMzOTtzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0LiBBIHF1aWNrIGdyZXAgaW4gbXkgaGVhZCwgb3IgYSBsaXRlcmFsIGdyZXAsIHdpbGwgdGVsbCBtZSBpZiB0aGVyZSYjMzk7cyBhbnkgZGlyZWN0IGludGVyYWN0aW9uIHRoZXJlLiBJJiMzOTttIGV4cGVjdGluZyBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljIGFyb3VuZCBtZW1vcnkgcHJlc3N1cmUgY2FsY3VsYXRpb25zLCByZXNvdXJjZSBsaW1pdHMsIG9yIHBlcmhhcHMgaG93IHRoZSBzaHJpbmtlciBwcmlvcml0aXplcyBwYWdlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzaHJpbmtlciBpbnRlcmFjdHMgd2l0aCBgbWVtY2dgIHdoZW4gYG1lbWNnYCBpcyBlbmFibGVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIyOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19NRU1DRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Nocmlua2VyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2hyaW5rZXIuYz0xMT1ERUZJTkVfTVVURVgoc2hyaW5rZXJfbXV0ZXgpO1xubW0vc2hyaW5rZXIuYy0xMi1cbm1tL3Nocmlua2VyLmM6MTM6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vc2hyaW5rZXIuYy0xNC1zdGF0aWMgaW50IHNocmlua2VyX25yX21heDtcbi0tXG5tbS9zaHJpbmtlci5jPTMzNj1zdGF0aWMgbG9uZyBhZGRfbnJfZGVmZXJyZWRfbWVtY2cobG9uZyBuciwgaW50IG5pZCwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcbi0tXG5tbS9zaHJpbmtlci5jLTM0MC19XG5tbS9zaHJpbmtlci5jOjM0MTojZW5kaWYgLyogQ09ORklHX01FTUNHICovXG5tbS9zaHJpbmtlci5jLTM0Mi1cbi0tXG5tbS9zaHJpbmtlci5jPTM3OD1zdGF0aWMgdW5zaWduZWQgbG9uZyBkb19zaHJpbmtfc2xhYihzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNocmlua2N0bCxcbi0tXG5tbS9zaHJpbmtlci5jLTQ3Ni1cbm1tL3Nocmlua2VyLmM6NDc3OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Nocmlua2VyLmMtNDc4LXN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19zbGFiX21lbWNnKGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLFxuLS1cbm1tL3Nocmlua2VyLmMtNTk3LX1cbm1tL3Nocmlua2VyLmM6NTk4OiNlbHNlIC8qICFDT05GSUdfTUVNQ0cgKi9cbm1tL3Nocmlua2VyLmMtNTk5LXN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19zbGFiX21lbWNnKGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLFxuLS1cbm1tL3Nocmlua2VyLmMtNjAzLX1cbm1tL3Nocmlua2VyLmM6NjA0OiNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cbm1tL3Nocmlua2VyLmMtNjA1LVxuLS1cbm1tL3Nocmlua2VyLmM9NjkwPXN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXJfYWxsb2ModW5zaWduZWQgaW50IGZsYWdzLCBjb25zdCBjaGFyICpmbXQsIC4uLilcbi0tXG5tbS9zaHJpbmtlci5jLTcyOC1cdCAqICAtIG5vbi1tZW1jZy1hd2FyZSBzaHJpbmtlcnNcbm1tL3Nocmlua2VyLmM6NzI5Olx0ICogIC0gIUNPTkZJR19NRU1DR1xubW0vc2hyaW5rZXIuYy03MzAtXHQgKiAgLSBtZW1jZyBpcyBkaXNhYmxlZCBieSBrZXJuZWwgY29tbWFuZCBsaW5lXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5MDMKCQkJCQkJCW91dHB1dDogODMKCQkJCQkJCXRob3VnaHRzOiAyNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gdGhlIGBhbGxvY19zaHJpbmtlcl9pbmZvYCBmdW5jdGlvbiBpcyBkZWZpbml0ZWx5IHRpZWQgdG8gYCNpZmRlZiBDT05GSUdfTUVNQ0dgLCBtZWFuaW5nIGl0JiMzOTtzIGRlcGVuZGVudCBvbiB0aGUgYE1FTUNHYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhhdCYjMzk7cyBvdXIgc3RhcnRpbmcgcG9pbnQuIFRoaXMgcGFydGljdWxhciBwYXRjaCBpcyBpbnRlcmVzdGluZzsgaXQgbG9va3MgbGlrZSBhIGZpeCBmb3IgYW4gZXJyb3IgcGF0aCB3aXRoaW4gYGFsbG9jX3Nocmlua2VyX2luZm9gIGl0c2VsZi4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBjb3JyZWN0IGFuIGlzc3VlIHdoZXJlIHNocmlua2VyIGluZm8gd2FzIGJlaW5nIGluY29ycmVjdGx5IGZyZWVkLiBUaGF0LCBieSBpdHMgbmF0dXJlLCBtYWtlcyBpdCAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4KCk15IGZvY3VzIHN5bWJvbCBmb3IgdGhpcyBmdXp6aW5nIGVmZm9ydCB3aWxsIGJlIGBhbGxvY19zaHJpbmtlcl9pbmZvYC4gTXkgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBlcnJvciBjb25kaXRpb24gd2l0aGluIHRoYXQgZnVuY3Rpb24uIFRoZSBjb3JlIG9mIHRyaWdnZXJpbmcgdGhpcyBidWcgbGlrZWx5IHJldm9sdmVzIGFyb3VuZCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyAqZHVyaW5nKiB0aGUgY3JlYXRpb24gb2YgbWVtb3J5IGNncm91cHMsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFdlJiMzOTtsbCBuZWVkIHRvIGluZHVjZSB0aG9zZSBmYWlsdXJlcyB0byB0ZXN0IHRoaXMgZml4IHRob3JvdWdobHkuCgpMZXQgbWUgZG91YmxlLWNoZWNrIGZvciBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBvciBtb2RpZmllZCBmdW5jdGlvbnMuIEFoLCBgYWxsb2Nfc2hyaW5rZXJfaW5mb2AgaXMgY2FsbGVkIGZyb20gYG1lbV9jZ3JvdXBfY3NzX29ubGluZWAuIFRoYXQgaGVscHMgZGVmaW5lIHRoZSBjYWxsIHN0YWNrLiBObyBvdGhlciBmdW5jdGlvbnMgc2VlbSB0byBiZSBkaXJlY3RseSBtb2RpZmllZCBpbiB0aGUgc3Vycm91bmRpbmcgY29kZS4gVGhpcyBwYXRjaCBzZWVtcyBmb2N1c2VkLCBmdW5jdGlvbmFsLCBhbmQgaXQgZGlyZWN0bHkgYWZmZWN0cyBjb3JlIGtlcm5lbCBsb2dpYyB3aXRoaW4gdGhlIGNncm91cC9tZW1jZyBzdWJzeXN0ZW0sIHdoaWNoIG1lYW5zIGl0IGlzIHRydWx5IHdvcnRoIGZ1enppbmcuCgpMZXQmIzM5O3Mgc3VtbWFyaXplIHRoaXMgY2xlYXJseToKCiogICAqKkZvY3VzU3ltYm9scyoqOiBgYWxsb2Nfc2hyaW5rZXJfaW5mb2AKKiAgICoqRW5hYmxlQ29uZmlncyoqOiBgTUVNQ0dgCiogICAqKlJlYXNvbmluZyoqOiBUaGlzIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIG9mIGBhbGxvY19zaHJpbmtlcl9pbmZvYCBkdXJpbmcgbWVtb3J5IGNncm91cCBjcmVhdGlvbi4gRnV6emluZyB0aGlzIHdpbGwgcmVxdWlyZSB0cmlnZ2VyaW5nIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIHdoaWxlIG1lbWNncyBhcmUgYmVpbmcgY3JlYXRlZC4KKiAgICoqV29ydGhGdXp6aW5nKio6IHRydWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIyOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX3Nocmlua2VyX2luZm8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2YgYGFsbG9jX3Nocmlua2VyX2luZm9gIGR1cmluZyBtZW1vcnkgY2dyb3VwIGNyZWF0aW9uLiBGdXp6aW5nIHRoaXMgcmVxdWlyZXMgdHJpZ2dlcmluZyBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyB3aGlsZSBjcmVhdGluZyBtZW1jZ3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2Nfc2hyaW5rZXJfaW5mbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBvZiBgYWxsb2Nfc2hyaW5rZXJfaW5mb2AgZHVyaW5nIG1lbW9yeSBjZ3JvdXAgY3JlYXRpb24uIEZ1enppbmcgdGhpcyByZXF1aXJlcyB0cmlnZ2VyaW5nIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIHdoaWxlIGNyZWF0aW5nIG1lbWNncy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIyOjMyOjQzLjM2OTI0OTU5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA3MTM3NTIzMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19zaHJpbmtlcl9pbmZvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2YgYGFsbG9jX3Nocmlua2VyX2luZm9gIGR1cmluZyBtZW1vcnkgY2dyb3VwIGNyZWF0aW9uLiBGdXp6aW5nIHRoaXMgcmVxdWlyZXMgdHJpZ2dlcmluZyBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyB3aGlsZSBjcmVhdGluZyBtZW1jZ3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIyOjMyOjQzLjM2OTI1NDk0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzE0MTg3MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2ZDNjODQxMjU2YWY1ZmViNWY0M2I0OTM1ZjE5OGE3ODU3YzJlYjQ1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgSnVsIDExIDIyOjMyOjQxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3Nocmlua2VyLmMgYi9tbS9zaHJpbmtlci5jXFxuaW5kZXggNzA4MmQwMWM4YzlkMGQuLjkyYzZjYjQ1NWZjOThkIDEwMDY0NFxcbi0tLSBhL21tL3Nocmlua2VyLmNcXG4rKysgYi9tbS9zaHJpbmtlci5jXFxuQEAgLTc4LDYgKzc4LDcgQEAgaW50IGFsbG9jX3Nocmlua2VyX2luZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiB7XFxuIFxcdGludCBuaWQsIHJldCA9IDA7XFxuIFxcdGludCBhcnJheV9zaXplID0gMDtcXG4rXFx0aW50IGZhaWxlZF9uaWQ7XFxuIFxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZzaHJpbmtlcl9tdXRleCk7XFxuIFxcdGFycmF5X3NpemUgPSBzaHJpbmtlcl91bml0X3NpemUoc2hyaW5rZXJfbnJfbWF4KTtcXG5AQCAtOTgsOCArOTksMTggQEAgaW50IGFsbG9jX3Nocmlua2VyX2luZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiBcXG4gZXJyOlxcbitcXHRmYWlsZWRfbmlkID0gbmlkO1xcbitcXHRmb3JfZWFjaF9ub2RlKG5pZCkge1xcbitcXHRcXHRzdHJ1Y3Qgc2hyaW5rZXJfaW5mbyAqaW5mbztcXG4rXFxuK1xcdFxcdGlmIChuaWQgXFx1MDAzZT0gZmFpbGVkX25pZClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGluZm8gPSBzaHJpbmtlcl9pbmZvX3Byb3RlY3RlZChtZW1jZywgbmlkKTtcXG4rXFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKG1lbWNnLVxcdTAwM2Vub2RlaW5mb1tuaWRdLVxcdTAwM2VzaHJpbmtlcl9pbmZvLCBOVUxMKTtcXG4rXFx0XFx0c2hyaW5rZXJfdW5pdF9mcmVlKGluZm8sIDApO1xcbitcXHRcXHRrdmZyZWUoaW5mbyk7XFxuK1xcdH1cXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzaHJpbmtlcl9tdXRleCk7XFxuLVxcdGZyZWVfc2hyaW5rZXJfaW5mbyhtZW1jZyk7XFxuIFxcdHJldHVybiAtRU5PTUVNO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMjozMjo0My44MDE2NjAzODZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMjgxMzMxNzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2Nfc2hyaW5rZXJfaW5mb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIG9mIGBhbGxvY19zaHJpbmtlcl9pbmZvYCBkdXJpbmcgbWVtb3J5IGNncm91cCBjcmVhdGlvbi4gRnV6emluZyB0aGlzIHJlcXVpcmVzIHRyaWdnZXJpbmcgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgd2hpbGUgY3JlYXRpbmcgbWVtY2dzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZkM2M4NDEyNTZhZjVmZWI1ZjQzYjQ5MzVmMTk4YTc4NTdjMmViNDVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxMSAyMjozMjo0MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3Nocmlua2VyLmMgYi9tbS9zaHJpbmtlci5jXG5pbmRleCA3MDgyZDAxYzhjOWQwZC4uOTJjNmNiNDU1ZmM5OGQgMTAwNjQ0XG4tLS0gYS9tbS9zaHJpbmtlci5jXG4rKysgYi9tbS9zaHJpbmtlci5jXG5AQCAtNzgsNiArNzgsNyBAQCBpbnQgYWxsb2Nfc2hyaW5rZXJfaW5mbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0aW50IG5pZCwgcmV0ID0gMDtcbiBcdGludCBhcnJheV9zaXplID0gMDtcbitcdGludCBmYWlsZWRfbmlkO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZzaHJpbmtlcl9tdXRleCk7XG4gXHRhcnJheV9zaXplID0gc2hyaW5rZXJfdW5pdF9zaXplKHNocmlua2VyX25yX21heCk7XG5AQCAtOTgsOCArOTksMTggQEAgaW50IGFsbG9jX3Nocmlua2VyX2luZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIFx0cmV0dXJuIHJldDtcbiBcbiBlcnI6XG4rXHRmYWlsZWRfbmlkID0gbmlkO1xuK1x0Zm9yX2VhY2hfbm9kZShuaWQpIHtcbitcdFx0c3RydWN0IHNocmlua2VyX2luZm8gKmluZm87XG4rXG4rXHRcdGlmIChuaWQgXHUwMDNlPSBmYWlsZWRfbmlkKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHRpbmZvID0gc2hyaW5rZXJfaW5mb19wcm90ZWN0ZWQobWVtY2csIG5pZCk7XG4rXHRcdHJjdV9hc3NpZ25fcG9pbnRlcihtZW1jZy1cdTAwM2Vub2RlaW5mb1tuaWRdLVx1MDAzZXNocmlua2VyX2luZm8sIE5VTEwpO1xuK1x0XHRzaHJpbmtlcl91bml0X2ZyZWUoaW5mbywgMCk7XG4rXHRcdGt2ZnJlZShpbmZvKTtcbitcdH1cbiBcdG11dGV4X3VubG9jayhcdTAwMjZzaHJpbmtlcl9tdXRleCk7XG4tXHRmcmVlX3Nocmlua2VyX2luZm8obWVtY2cpO1xuIFx0cmV0dXJuIC1FTk9NRU07XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjI6MzI6NDMuODAxNjYyNjY2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc3NjA3OTY1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBtbS9zaHJpbmtlci5jYCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZXJlJ3MgYSBwYXRjaCBpbiBgbW0vc2hyaW5rZXIuY2AuIE15IGluaXRpYWwgcmVhZCBzdWdnZXN0cyBpdOKAmXMgZGVhbGluZyB3aXRoIGFuIGVycm9yIHBhdGggd2l0aGluIGBhbGxvY19zaHJpbmtlcl9pbmZvYC4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBpc3N1ZSByZXZvbHZlcyBhcm91bmQgaG93IHRoZSBjb2RlIGhhbmRsZXMgZmFpbHVyZXMgZHVyaW5nIHRoZSBhbGxvY2F0aW9uIG9mIGBzaHJpbmtlcl9pbmZvYCBzdHJ1Y3R1cmVzLiBJbnN0ZWFkIG9mIHVzaW5nIHRoZSBtb3JlIGNvbnZlbnRpb25hbCBgZnJlZV9zaHJpbmtlcl9pbmZvKG1lbWNnKWAgZm9yIGNsZWFudXAsIHRoaXMgcGF0Y2ggYWRvcHRzIGEgbWFudWFsIGFwcHJvYWNoLiBJdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBub2RlcyB1cCB0byBhIHBvaW50IGRlc2lnbmF0ZWQgYXMgYGZhaWxlZF9uaWRgLCBhbmQgZnJlZXMgdGhlIGFsbG9jYXRlZCBgc2hyaW5rZXJfaW5mb2Agc3RydWN0dXJlcyBpbmRpdmlkdWFsbHkuIFRoZSBmb2N1cywgdGhlbiwgaXMgZGVmaW5pdGVseSBvbiBpbXByb3ZpbmcgdGhlIHJvYnVzdG5lc3Mgb2YgdGhhdCBmYWlsdXJlIGhhbmRsaW5nLiBJIHNob3VsZCBwcm9iYWJseSBkaXZlIGludG8gYGFsbG9jX3Nocmlua2VyX2luZm9gIGl0c2VsZiB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdOKAmXMgZ29pbmcgb24gYW5kIHZlcmlmeSB0aGF0IHRoZSBtYW51YWwgZnJlZWluZyBpcyB0aGUgcmlnaHQgd2F5IHRvIGFwcHJvYWNoIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGUgY29udmVudGlvbmFsIGNsZWFudXAgaXNuJ3Qgc3VmZmljaWVudCBpbiB0aGlzIHNwZWNpZmljIHNjZW5hcmlvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTk3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMjozMjo0Ny41Nzc3NDk5MjVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg1Mjk0ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2Nfc2hyaW5rZXJfaW5mb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zaHJpbmtlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Nocmlua2VyLmM9NjI9dm9pZCBmcmVlX3Nocmlua2VyX2luZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vc2hyaW5rZXIuYy03Ni1cXG5tbS9zaHJpbmtlci5jOjc3OmludCBhbGxvY19zaHJpbmtlcl9pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS9zaHJpbmtlci5jLTc4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjI6MzI6NDcuNjc2Mjg1NTQ4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc5NjU5OTkzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBhbGxvY19zaHJpbmtlcl9pbmZvYCBpbiBtbS9zaHJpbmtlci5jKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIGBtbS9zaHJpbmtlci5jYCBhbmQgemVybyBpbiBvbiB0aGUgYGFsbG9jX3Nocmlua2VyX2luZm9gIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiBtZW1vcnkgcmVjbGFtYXRpb24uIEkga25vdyBzaHJpbmtlcnMgYXJlIGZ1bmRhbWVudGFsLCBidXQgSSBuZWVkIGEgcmVmcmVzaGVyIG9uIHRoZSBwcmVjaXNlIG1lY2hhbmlzbSBhbmQgY29udGV4dCB0aGlzIGZ1bmN0aW9uIHVzZXMuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIG51YW5jZXMgb2YgaG93IGl0J3MgYWxsb2NhdGluZyBhbmQgaW5pdGlhbGl6aW5nIHRoZSBzdHJ1Y3R1cmVzIHVzZWQgdG8gbWFuYWdlIHJlY2xhaW1hYmxlIHBhZ2VzIGFuZCBob3cgdGhhdCB0aWVzIGludG8gdGhlIG92ZXJhbGwgZGVzaWduIG9mIHRoZSBrZXJuZWwncyBsb3cgbWVtb3J5IHNpdHVhdGlvbi4gVGhlcmUgYXJlIGEgZmV3IGRpZmZlcmVudCBkYXRhIHN0cnVjdHVyZXMgaW4gdGhpcyBzZWN0aW9uIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgaG93IHRoZXkgaW50ZXJhY3QuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDE0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjI6MzI6NTAuNDcyODg3MzI3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzNDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Nocmlua2VyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNzA6XFx0XFx0XFx0aW5mbyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocG4tXFx1MDAzZXNocmlua2VyX2luZm8sIHRydWUpO1xcbiAgNzE6XFx0XFx0XFx0c2hyaW5rZXJfdW5pdF9mcmVlKGluZm8sIDApO1xcbiAgNzI6XFx0XFx0XFx0a3ZmcmVlKGluZm8pO1xcbiAgNzM6XFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHBuLVxcdTAwM2VzaHJpbmtlcl9pbmZvLCBOVUxMKTtcXG4gIDc0OlxcdFxcdH1cXG4gIDc1OlxcdH1cXG4gIDc2OlxcdFxcbiAgNzc6XFx0aW50IGFsbG9jX3Nocmlua2VyX2luZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiAgNzg6XFx0e1xcbiAgNzk6XFx0XFx0aW50IG5pZCwgcmV0ID0gMDtcXG4gIDgwOlxcdFxcdGludCBhcnJheV9zaXplID0gMDtcXG4gIDgxOlxcdFxcdGludCBmYWlsZWRfbmlkO1xcbiAgODI6XFx0XFxuICA4MzpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZzaHJpbmtlcl9tdXRleCk7XFxuICA4NDpcXHRcXHRhcnJheV9zaXplID0gc2hyaW5rZXJfdW5pdF9zaXplKHNocmlua2VyX25yX21heCk7XFxuICA4NTpcXHRcXHRmb3JfZWFjaF9ub2RlKG5pZCkge1xcbiAgODY6XFx0XFx0XFx0c3RydWN0IHNocmlua2VyX2luZm8gKmluZm8gPSBrdnphbGxvY19ub2RlKHNpemVvZigqaW5mbykgKyBhcnJheV9zaXplLFxcbiAgODc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgR0ZQX0tFUk5FTCwgbmlkKTtcXG4gIDg4OlxcdFxcdFxcdGlmICghaW5mbylcXG4gIDg5OlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbiAgOTA6XFx0XFx0XFx0aW5mby1cXHUwMDNlbWFwX25yX21heCA9IHNocmlua2VyX25yX21heDtcXG4gIDkxOlxcdFxcdFxcdGlmIChzaHJpbmtlcl91bml0X2FsbG9jKGluZm8sIE5VTEwsIG5pZCkpIHtcXG4gIDkyOlxcdFxcdFxcdFxcdGt2ZnJlZShpbmZvKTtcXG4gIDkzOlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbiAgOTQ6XFx0XFx0XFx0fVxcbiAgOTU6XFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKG1lbWNnLVxcdTAwM2Vub2RlaW5mb1tuaWRdLVxcdTAwM2VzaHJpbmtlcl9pbmZvLCBpbmZvKTtcXG4gIDk2OlxcdFxcdH1cXG4gIDk3OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2c2hyaW5rZXJfbXV0ZXgpO1xcbiAgOTg6XFx0XFxuICA5OTpcXHRcXHRyZXR1cm4gcmV0O1xcbiAxMDA6XFx0XFxuIDEwMTpcXHRlcnI6XFxuIDEwMjpcXHRcXHRmYWlsZWRfbmlkID0gbmlkO1xcbiAxMDM6XFx0XFx0Zm9yX2VhY2hfbm9kZShuaWQpIHtcXG4gMTA0OlxcdFxcdFxcdHN0cnVjdCBzaHJpbmtlcl9pbmZvICppbmZvO1xcbiAxMDU6XFx0XFxuIDEwNjpcXHRcXHRcXHRpZiAobmlkIFxcdTAwM2U9IGZhaWxlZF9uaWQpXFxuIDEwNzpcXHRcXHRcXHRcXHRicmVhaztcXG4gMTA4OlxcdFxcdFxcdGluZm8gPSBzaHJpbmtlcl9pbmZvX3Byb3RlY3RlZChtZW1jZywgbmlkKTtcXG4gMTA5OlxcdFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihtZW1jZy1cXHUwMDNlbm9kZWluZm9bbmlkXS1cXHUwMDNlc2hyaW5rZXJfaW5mbywgTlVMTCk7XFxuIDExMDpcXHRcXHRcXHRzaHJpbmtlcl91bml0X2ZyZWUoaW5mbywgMCk7XFxuIDExMTpcXHRcXHRcXHRrdmZyZWUoaW5mbyk7XFxuIDExMjpcXHRcXHR9XFxuIDExMzpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnNocmlua2VyX211dGV4KTtcXG4gMTE0OlxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAxMTU6XFx0fVxcbiAxMTY6XFx0XFxuIDExNzpcXHRzdGF0aWMgc3RydWN0IHNocmlua2VyX2luZm8gKnNocmlua2VyX2luZm9fcHJvdGVjdGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4gMTE4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgaW50IG5pZClcXG4gMTE5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjI6MzI6NTAuNDczMDIyMzc3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM0MDQ2NTE5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGJ1ZyBmaXgsIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgRGVhZGxvY2sgaW4gTWVtb3J5IENHIFNocmlua2luZyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggY2xhaW1zIHRvIGZpeCBhIHByZXR0eSBuYXN0eSBidWcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgaW4gdGhlIGBhbGxvY19zaHJpbmtlcl9pbmZvYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGFyb3VuZCBob3cgdGhlIG1lbW9yeSBjZ3JvdXAncyBzaHJpbmtlciBpbmZvIGlzIGhhbmRsZWQuIEkgcmVtZW1iZXIgYGZyZWVfc2hyaW5rZXJfaW5mbyhtZW1jZylgIGJlaW5nIGNhbGxlZCB3aGlsZSBhbHJlYWR5IGhvbGRpbmcgdGhlIGBzaHJpbmtlcl9tdXRleGAuIFRoYXQgcmluZ3Mgc29tZSBhbGFybSBiZWxscyBpbW1lZGlhdGVseS4gTXkgZ3V0IHRlbGxzIG1lIHRoZXJlJ3MgYSBwb3RlbnRpYWwgZGVhZGxvY2sgbHVya2luZyBoZXJlLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgYGZyZWVfc2hyaW5rZXJfaW5mb2AgKml0c2VsZiogdHJ5IHRvIGFjcXVpcmUgdGhlIGBzaHJpbmtlcl9tdXRleGA/IElmIGl0IGRvZXMsIGFuZCBpdCdzIGJlaW5nIGNhbGxlZCB3aGlsZSB0aGUgbXV0ZXggaXMgYWxyZWFkeSBoZWxkLCB3ZSd2ZSBnb3QgYSBjbGFzc2ljIGRlYWRsb2NrIHNjZW5hcmlvLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSBmb3IgYGZyZWVfc2hyaW5rZXJfaW5mb2AgYW5kIHZlcmlmeSB0aGF0IGFzc3VtcHRpb24uIEkgbmVlZCB0byBjb25maXJtIGlmIHRoYXQgbmVzdGVkIGxvY2sgYWNxdWlzaXRpb24gaXMgYWN0dWFsbHkgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzQ5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMjozMjo1My44MTM0OTAzNDFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzgxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vc2hyaW5rZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1NTpcXHRcXG4gIDU2OlxcdFxcdFxcdG5ldy1cXHUwMDNldW5pdFtpXSA9IHVuaXQ7XFxuICA1NzpcXHRcXHR9XFxuICA1ODpcXHRcXG4gIDU5OlxcdFxcdHJldHVybiAwO1xcbiAgNjA6XFx0fVxcbiAgNjE6XFx0XFxuICA2MjpcXHR2b2lkIGZyZWVfc2hyaW5rZXJfaW5mbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuICA2MzpcXHR7XFxuICA2NDpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG47XFxuICA2NTpcXHRcXHRzdHJ1Y3Qgc2hyaW5rZXJfaW5mbyAqaW5mbztcXG4gIDY2OlxcdFxcdGludCBuaWQ7XFxuICA2NzpcXHRcXG4gIDY4OlxcdFxcdGZvcl9lYWNoX25vZGUobmlkKSB7XFxuICA2OTpcXHRcXHRcXHRwbiA9IG1lbWNnLVxcdTAwM2Vub2RlaW5mb1tuaWRdO1xcbiAgNzA6XFx0XFx0XFx0aW5mbyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocG4tXFx1MDAzZXNocmlua2VyX2luZm8sIHRydWUpO1xcbiAgNzE6XFx0XFx0XFx0c2hyaW5rZXJfdW5pdF9mcmVlKGluZm8sIDApO1xcbiAgNzI6XFx0XFx0XFx0a3ZmcmVlKGluZm8pO1xcbiAgNzM6XFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHBuLVxcdTAwM2VzaHJpbmtlcl9pbmZvLCBOVUxMKTtcXG4gIDc0OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjI6MzI6NTMuODEzNjMwODIxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAxNTE5MjYwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBmcmVlX3Nocmlua2VyX2luZm9gIGFuZCBNdXRleCBVc2FnZSoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5vdGljZWQgdGhhdCBgZnJlZV9zaHJpbmtlcl9pbmZvYCBkb2Vzbid0IHRha2UgdGhlIGBzaHJpbmtlcl9tdXRleGAuIFRoYXQgc2VlbXPigKYgb2RkLiBUaGUgb3JpZ2luYWwgY29kZSBpbiBgYWxsb2Nfc2hyaW5rZXJfaW5mb2AgY2FsbGVkIGBmcmVlX3Nocmlua2VyX2luZm9gICphZnRlciogdW5sb2NraW5nIHRoZSBgc2hyaW5rZXJfbXV0ZXhgLlxuXG5gYGBcbmVycjpcblx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNocmlua2VyX211dGV4KTtcblx0ZnJlZV9zaHJpbmtlcl9pbmZvKG1lbWNnKTtcblx0cmV0dXJuIC1FTk9NRU07XG5gYGBcblxuTm93LCB0aGUgbmV3IGNvZGUsIHVuZGVyIHRoZSBzYW1lIGVycm9yIGNvbmRpdGlvbiwgbG9va3MgbGlrZSB0aGlzOlxuXG5gYGBcbmVycjpcblx0ZmFpbGVkX25pZCA9IG5pZDtcblx0Zm9yX2VhY2hfbm9kZShuaWQpIHtcblx0XHRzdHJ1Y3Qgc2hyaW5rZXJfaW5mbyAqaW5mbztcblxuXHRcdGlmIChuaWQgXHUwMDNlPSBmYWlsZWRfbmlkKVxuXHRcdFx0YnJlYWs7XG5cdFx0aW5mbyA9IHNocmlua2VyX2luZm9fcHJvdGVjdGVkKG1lbWNnLCBuaWQpO1xuXHRcdHJjdV9hc3NpZ25fcG9pbnRlcihtZW1jZy1cdTAwM2Vub2RlaW5mb1tuaWRdLVx1MDAzZXNocmlua2VyX2luZm8sIE5VTEwpO1xuXHRcdHNocmlua2VyX3VuaXRfZnJlZShpbmZvLCAwKTtcblx0XHRrdmZyZWUoaW5mbyk7XG5cdH1cblx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNocmlua2VyX211dGV4KTtcblx0cmV0dXJuIC1FTk9NRU07XG5gYGBcblxuVGhpcyBjaGFuZ2UgaXMgc2lnbmlmaWNhbnQuIFRoZSBvbGQgYGZyZWVfc2hyaW5rZXJfaW5mb2AgY2FsbCBpcyBnb25lLCByZXBsYWNlZCB3aXRoIHRoaXMgbG9vcCBhbmQgYSBkaWZmZXJlbnQgZnJlZWluZyBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5Ki4gV2FzIHRoZSBvcmlnaW5hbCBgZnJlZV9zaHJpbmtlcl9pbmZvYCBwb3RlbnRpYWxseSBmcmVlaW5nIG5vZGVzIHRoYXQgaGFkbid0IGJlZW4gYWxsb2NhdGVkIHlldD8gSXMgaXQgcG9zc2libGUgdGhhdCBgZnJlZV9zaHJpbmtlcl9pbmZvYCAqbmVlZHMqIHRoZSBgc2hyaW5rZXJfbXV0ZXhgIHRvIGJlIGhlbGQ/XG5cbkFoYSEgYGZyZWVfc2hyaW5rZXJfaW5mb2AgdXNlcyBgcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChwbi1cdTAwM2VzaHJpbmtlcl9pbmZvLCB0cnVlKWAuIFRoYXQncyBhIGtleSBjbHVlLiBGdXJ0aGVyLCB0aGUgY29kZSB1c2VzIGBzaHJpbmtlcl9pbmZvX3Byb3RlY3RlZGAuIExldCdzIGRpZyBkZWVwZXIgYW5kIHNlZSB3aGF0IHRoYXQgZnVuY3Rpb24gZG9lcy4gQW5kIHRoZXJlIGl0IGlzISBgc2hyaW5rZXJfaW5mb19wcm90ZWN0ZWRgIGl0c2VsZiB1c2VzIGByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKC4uLiwgbG9ja2RlcF9pc19oZWxkKFx1MDAyNnNocmlua2VyX211dGV4KSlgLiBUaGF0IGV4cGxhaW5zIGl0ISBJdCBzZWVtcyB0aGUgY3JpdGljYWwgc2VjdGlvbiBvZiBgZnJlZV9zaHJpbmtlcl9pbmZvYCBuZWVkcyB0byBlbnN1cmUgdGhlIG11dGV4IGlzIGhlbGQsIG9yIHRoZSBSQ1UgcmVhZHMgY291bGQgcmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkyNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIyOjMyOjU5LjgyODgyNjQxNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDMzMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vc2hyaW5rZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTcsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMTc6XFx0c3RhdGljIHN0cnVjdCBzaHJpbmtlcl9pbmZvICpzaHJpbmtlcl9pbmZvX3Byb3RlY3RlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuIDExODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGludCBuaWQpXFxuIDExOTpcXHR7XFxuIDEyMDpcXHRcXHRyZXR1cm4gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtZW1jZy1cXHUwMDNlbm9kZWluZm9bbmlkXS1cXHUwMDNlc2hyaW5rZXJfaW5mbyxcXG4gMTIxOlxcdFxcdFxcdFxcdFxcdFxcdCBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNnNocmlua2VyX211dGV4KSk7XFxuIDEyMjpcXHR9XFxuIDEyMzpcXHRcXG4gMTI0OlxcdHN0YXRpYyBpbnQgZXhwYW5kX29uZV9zaHJpbmtlcl9pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5ld19zaXplLFxcbiAxMjU6XFx0XFx0XFx0XFx0XFx0ICAgIGludCBvbGRfc2l6ZSwgaW50IG5ld19ucl9tYXgpXFxuIDEyNjpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIyOjMyOjU5LjgyODkzMTc2NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzA3MDgyMjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldDogYGZyZWVfc2hyaW5rZXJfaW5mb2AgYW5kIE1lbW9yeSBQcmVzc3VyZSBpbiBNZW1jZ3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZnJlZV9zaHJpbmtlcl9pbmZvYCBhbmQgSSBzZWUgaXQncyB1c2luZyBgcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChwbi1cdTAwM2VzaHJpbmtlcl9pbmZvLCB0cnVlKWAuIFRoYXQncyBzdGFuZGFyZCBlbm91Z2gsIGJ1dCBsZXQncyBkaWcgZGVlcGVyLiBUaGUgY3JpdGljYWwgdGhpbmcgaGVyZSBpcyB0aGF0IGBhbGxvY19zaHJpbmtlcl9pbmZvYCBpcyAqYWxzbyogZnJlZWluZyBhbnkgYWxsb2NhdGVkIGBzaHJpbmtlcl9pbmZvYCBpbnN0YW5jZXMgaWYgaXQgZmFpbHMuIFRoYXQncyBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyFcblxuVGhlIGNydXggb2YgdGhlIHByb2JsZW0sIGFuZCB3aHkgdGhpcyBjb3VsZCBiZSBpbnRlcmVzdGluZywgaXMgd2hlcmUgYGFsbG9jX3Nocmlua2VyX2luZm9gIGlzIGNhbGxlZDogZHVyaW5nIG1lbWNnIGNyZWF0aW9uLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIHRoaXMgYXMgYSBwb3NzaWJsZSBtZW1vcnkgbWFuYWdlbWVudC9jZ3JvdXAgZXJyb3IgcGF0aCwgcmlwZSBmb3IgZnV6emluZy4gSWYgYGFsbG9jX3Nocmlua2VyX2luZm9gIGZhaWxzLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjbGVhbnVwIGlzIGNvcnJlY3QuIFRoZSBnb2FsIGlzIHRvIHRyaWdnZXIgdGhpcyBlcnJvciwgd2hpY2ggbWVhbnMgd2UgbmVlZCB0byBpbmR1Y2UgYSBmYWlsdXJlIHdpdGhpbiBgYWxsb2Nfc2hyaW5rZXJfaW5mb2AgaXRzZWxmLiBUaGF0IG1lYW5zIGVpdGhlciBhIGBrdnphbGxvY19ub2RlYCBmYWlsdXJlIG9yIGBzaHJpbmtlcl91bml0X2FsbG9jYCBmYWlsaW5nLlxuXG5SaWdodCwgc28gdGhpcyBpcyBhbiBlcnJvciBwYXRoLiBUbyByZWxpYWJseSBmdXp6IHRoaXMsIEknbGwgbmVlZCB0byBpbmR1Y2UgbWVtb3J5IHByZXNzdXJlIHNvbWVob3csIG9yIGxvb2sgaW50byBmYXVsdCBpbmplY3Rpb24gdG8gc3BlY2lmaWNhbGx5IHRyaWdnZXIgdGhlc2UgZmFpbHVyZXMuIFNpbmNlIGBhbGxvY19zaHJpbmtlcl9pbmZvYCBpcyBjYWxsZWQgZnJvbSBgbWVtX2Nncm91cF9jc3NfYWxsb2NgLCB0cmlnZ2VyaW5nIHRoaXMgcmVsaWFibHkgZGVwZW5kcyBvbiB0aGUgYWJpbGl0eSB0byBmYWlsIGVpdGhlciBga3Z6YWxsb2Nfbm9kZWAgb3IgYHNocmlua2VyX3VuaXRfYWxsb2NgIGluIHRoZSBgbWVtX2Nncm91cF9jc3NfYWxsb2NgIGZ1bmN0aW9uLiBJIHRoaW5rIHRoaXMgd2lsbCBiZSBhbiBpbnRlcmVzdGluZyBmdXp6aW5nIHRhcmdldCwgYSBsb3Qgb2YgcG90ZW50aWFsIGhlcmUgZm9yIGRpc2NvdmVyaW5nIG1lbW9yeSBpc3N1ZXMgaW4gbWVtY2cgY3JlYXRpb24gZHVyaW5nIHJlc291cmNlIGNvbnN0cmFpbmVkIGNvbmRpdGlvbnMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwNDksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMjozMzowNC41MzYwMTY2NTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjM4MDM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19zaHJpbmtlcl9pbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9NDIwOT1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQyMjEtXFx0ICovXFxubW0vbWVtY29udHJvbC5jOjQyMjI6XFx0aWYgKGFsbG9jX3Nocmlua2VyX2luZm8obWVtY2cpKVxcbm1tL21lbWNvbnRyb2wuYy00MjIzLVxcdFxcdGdvdG8gb2ZmbGluZV9rbWVtO1xcbi0tXFxubW0vc2hyaW5rZXIuYz02Mj12b2lkIGZyZWVfc2hyaW5rZXJfaW5mbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9zaHJpbmtlci5jLTc2LVxcbm1tL3Nocmlua2VyLmM6Nzc6aW50IGFsbG9jX3Nocmlua2VyX2luZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL3Nocmlua2VyLmMtNzgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMjozMzowNC42NTI0MDQyOTVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjYzNTgxNTY5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvZGUgUGF0aCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZnVuY3Rpb24gY2FsbCDigJMgaXQncyBjb21pbmcgZnJvbSBgbWVtX2Nncm91cF9jc3Nfb25saW5lYC4gUmlnaHQuIE5vdywgaWYgSSB3YW50IHRvIGZ1enogdGhpcyBwYXJ0aWN1bGFyIGFyZWEsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgc3lzdGVtIGlzIGJ1aWx0IHdpdGggYENPTkZJR19NRU1DR2AgZW5hYmxlZC4gTm8gcG9pbnQgaW4gdHJ5aW5nIHRvIGZ1enogc29tZXRoaW5nIHRoYXQgaXNuJ3QgZXZlbiBjb21waWxlZCBpbiEgTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gaGFzIHRoaXMgZW5hYmxlZCBiZWZvcmUgcHJvY2VlZGluZyBhbnkgZnVydGhlciwgdGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgzNiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIyOjMzOjA3LjI4ODIyMzIzMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5OTM3Mjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1DR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNjM9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA3Mi1cXG5pbml0L0tjb25maWc6MTA3Mzpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA3NC1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDgxLVxcbmluaXQvS2NvbmZpZzoxMDgyOmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuaW5pdC9LY29uZmlnLTEwODMtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwODgtXFxuaW5pdC9LY29uZmlnOjEwODk6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuaW5pdC9LY29uZmlnLTEwOTAtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTUtXFxuaW5pdC9LY29uZmlnOjEwOTY6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTEwOTctXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjI6MzM6MDcuNDA4MTY3OTNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc3NDQ3NDcwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBNRU1DR2AgQ29uZmlndXJhdGlvbiBhbmQgU2hyaW5rZXIgSW5mb3JtYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgaW5pdGlhbCBxdWVzdGlvbiBpcyBhYm91dCB0aGUgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIG1lbW9yeSBjZ3JvdXBzIOKAkyBgTUVNQ0dgLCB0aGF0J3MgdGhlIGtleS4gSSdtIGZvY3VzaW5nIG9uIHRoYXQsIGFuZCBJIGJlbGlldmUgdGhlIHNwZWNpZmljIHN5bWJvbCBJJ20gdHJhY2tpbmcgZG93biBpcyBgYWxsb2Nfc2hyaW5rZXJfaW5mb2AuIEknbSBwcmV0dHkgc3VyZSB0aGF0J3MgdGhlIGNyaXRpY2FsIHBpZWNlIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBtZW1vcnkgc2hyaW5rZXIgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgbWVtY2dzLlxuXG5Ob3csIGEgcXVpY2sgY2hlY2suLi5pcyB0aGVyZSAqYW5vdGhlciogcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24gbHVya2luZyBhcm91bmQ/IEFoLCByaWdodCwgYENPTkZJR19TSFJJTktFUl9ERUJVR2AgZXhpc3RzIGJ1dCB0aGF0J3MganVzdCBhIGRlYnVnZ2luZyBvcHRpb24sIGl0IGRvZXNuJ3Qgc2VlbSB0byBhZmZlY3QgdGhlIGNvcmUgcHJlc2VuY2Ugb2Ygc2hyaW5rZXIgaW5mb3JtYXRpb24gZm9yIG1lbWNncywgaXQgd2lsbCBhbHdheXMgYmUgdGhlcmUuIFNvLCBJIGRvbid0IG5lZWQgdG8gY29uc2lkZXIgdGhhdCBhcyBhIHByZS1yZXF1aXNpdGUuXG5cblJpZ2h0LCBgYWxsb2Nfc2hyaW5rZXJfaW5mb2AuLi4gSSB2YWd1ZWx5IHJlY2FsbCB0aGF0IGJlaW5nIGRlZmluZWQgb3IgaW1wbGVtZW50ZWQgd2l0aGluIGBtbS9zaHJpbmtlci5jYC4gTGV0IG1lIGp1c3QgdmVyaWZ5IHRoYXQ7IEkgd2lsbCBub3cgaGF2ZSB0byBjaGVjayBpZiB0aGlzIGZpbGUsIGBtbS9zaHJpbmtlci5jYCwgaXMgY29tcGlsZWQgY29uZGl0aW9uYWxseSBiYXNlZCBvbiBhbnkgb3RoZXIgZmxhZ3MuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjb2RlIGlzICphY3R1YWxseSogaW5jbHVkZWQgd2hlbiBkZWFsaW5nIHdpdGggbWVtb3J5IGNncm91cHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyNDIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMjozMzoxMS4xODI2NDQ4NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc1NjE5MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hyaW5rZXIub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT01MT1vYmoteVxcdFxcdFxcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcXFxcbm1tL01ha2VmaWxlLTUyLVxcdFxcdFxcdCAgIG1hY2Nlc3MubyBwYWdlLXdyaXRlYmFjay5vIGZvbGlvLWNvbXBhdC5vIFxcXFxcXG5tbS9NYWtlZmlsZTo1MzpcXHRcXHRcXHQgICByZWFkYWhlYWQubyBzd2FwLm8gdHJ1bmNhdGUubyB2bXNjYW4ubyBzaHJpbmtlci5vIFxcXFxcXG5tbS9NYWtlZmlsZS01NC1cXHRcXHRcXHQgICBzaG1lbS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjI6MzM6MTEuMjgwMjEyMzMzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MDgyNDAyNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBrZXJuZWwgY29kZSBzbmlwcGV0LCBwdXR0aW5nIG15c2VsZiBpbiB0aGUgcm9sZSBvZiBhbiBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBhIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIGluIHRoZSBNZW1vcnkgU2hyaW5rZXIqKlxuXG5SaWdodCwgc28gaXQncyBhbHdheXMgY29tcGlsZWQsIGJ1dCB0aGVyZSdzIGEgc3BlY2lmaWMgZnVuY3Rpb24sIGBhbGxvY19zaHJpbmtlcl9pbmZvYCwgYW5kIGl0IHNvdW5kcyBsaWtlICp0aGF0KiBwYXJ0aWN1bGFyIHBpZWNlIG9mIGNvZGUgbWlnaHQgYmUgY29uZGl0aW9uYWwuIE15IG1lbnRhbCBhbGFybSBiZWxscyBhcmUgYWxyZWFkeSByaW5naW5nIGJlY2F1c2UgYW55dGhpbmcgdGhhdCdzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgbmVlZHMgY2FyZWZ1bCBleGFtaW5hdGlvbiDigJMgaXQgaW50cm9kdWNlcyBjb21wbGV4aXR5IGFuZCBwb3RlbnRpYWwgZWRnZSBjYXNlcy4gVGhlIGNvbW1lbnQgaW1wbGllcyBpdCBkZXBlbmRzIG9uIGBDT05GSUdfTUVNQ0dgLiBUaW1lIHRvIHZlcmlmeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIGhhcyBhbnkgaW1wYWN0IG9uIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LCBhbmQgaG93IGl0IGVmZmVjdHMgcGVyZm9ybWFuY2UuIEknbGwgbmVlZCB0byBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlLCBhbmQgaW52ZXN0aWdhdGUgYG1tL3Nocmlua2VyLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgYW5zd2VyIHdpbGwgYmUsIEknbGwgYmUgbG9va2luZyBmb3IgYCNpZmRlZmAgYW5kIGAjZW5kaWZgIGRpcmVjdGl2ZXMgb3Igc2ltaWxhciBwcmVwcm9jZXNzb3IgbG9naWMgc3Vycm91bmRpbmcgdGhlIGRlY2xhcmF0aW9uIGFuZCBkZWZpbml0aW9uIG9mIGBhbGxvY19zaHJpbmtlcl9pbmZvYC4gSSdsbCBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGlzIGFmZmVjdHMgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBUaGUgaW1wbGljYXRpb25zIG9mIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGNhbiBiZSBzdWJ0bGUsIGVzcGVjaWFsbHkgaW4gYSBjb3JlIHN1YnN5c3RlbSBsaWtlIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzaHJpbmtlci5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc1MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIyOjMzOjE0Ljg4ODQ1NTM0MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ0NzUxNDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2Nfc2hyaW5rZXJfaW5mb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zaHJpbmtlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Nocmlua2VyLmM9NjI9dm9pZCBmcmVlX3Nocmlua2VyX2luZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vc2hyaW5rZXIuYy03Ni1cXG5tbS9zaHJpbmtlci5jOjc3OmludCBhbGxvY19zaHJpbmtlcl9pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS9zaHJpbmtlci5jLTc4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjI6MzM6MTQuOTgyOTM1OTM2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODYwNTM2MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipJbnZlc3RpZ2F0aW5nIGBtbS9zaHJpbmtlci5jYCBhbmQgTWVtb3J5IENvbnRyb2wgR3JvdXBzKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgc2hyaW5rZXIgc3Vic3lzdGVtIGFuZCBtZW1vcnkgY29udHJvbCBncm91cHMuIEknbSBnb2luZyB0byBqdW1wIHJpZ2h0IGludG8gYG1tL3Nocmlua2VyLmNgLiBUaGUgZmlyc3QgdGhpbmcgSSB3YW50IHRvIGRvIGlzIHNlZSBpZiB0aGUga2VybmVsIGRldmVsb3BlcnMgaGF2ZSBjb25kaXRpb25hbGl6ZWQgYW55IG1lbW9yeSByZWNsYW1hdGlvbiBjb2RlIGJhc2VkIG9uIHRoZSBwcmVzZW5jZSBvZiBtZW1vcnkgY29udHJvbCBncm91cHMuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgZm9yIGAjaWZkZWYgQ09ORklHX01FTUNHYCBkaXJlY3RpdmVzLiBUaGF0J3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQuIEEgcXVpY2sgZ3JlcCBpbiBteSBoZWFkLCBvciBhIGxpdGVyYWwgZ3JlcCwgd2lsbCB0ZWxsIG1lIGlmIHRoZXJlJ3MgYW55IGRpcmVjdCBpbnRlcmFjdGlvbiB0aGVyZS4gSSdtIGV4cGVjdGluZyBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljIGFyb3VuZCBtZW1vcnkgcHJlc3N1cmUgY2FsY3VsYXRpb25zLCByZXNvdXJjZSBsaW1pdHMsIG9yIHBlcmhhcHMgaG93IHRoZSBzaHJpbmtlciBwcmlvcml0aXplcyBwYWdlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzaHJpbmtlciBpbnRlcmFjdHMgd2l0aCBgbWVtY2dgIHdoZW4gYG1lbWNnYCBpcyBlbmFibGVkLiBMZXQncyBzZWUgd2hhdCdzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTY0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjI6MzM6MTguMjY4OTkxNTRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTc0NjQzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTUVNQ0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2hyaW5rZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zaHJpbmtlci5jPTExPURFRklORV9NVVRFWChzaHJpbmtlcl9tdXRleCk7XFxubW0vc2hyaW5rZXIuYy0xMi1cXG5tbS9zaHJpbmtlci5jOjEzOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9zaHJpbmtlci5jLTE0LXN0YXRpYyBpbnQgc2hyaW5rZXJfbnJfbWF4O1xcbi0tXFxubW0vc2hyaW5rZXIuYz0zMzY9c3RhdGljIGxvbmcgYWRkX25yX2RlZmVycmVkX21lbWNnKGxvbmcgbnIsIGludCBuaWQsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXFxuLS1cXG5tbS9zaHJpbmtlci5jLTM0MC19XFxubW0vc2hyaW5rZXIuYzozNDE6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbm1tL3Nocmlua2VyLmMtMzQyLVxcbi0tXFxubW0vc2hyaW5rZXIuYz0zNzg9c3RhdGljIHVuc2lnbmVkIGxvbmcgZG9fc2hyaW5rX3NsYWIoc3RydWN0IHNocmlua19jb250cm9sICpzaHJpbmtjdGwsXFxuLS1cXG5tbS9zaHJpbmtlci5jLTQ3Ni1cXG5tbS9zaHJpbmtlci5jOjQ3NzojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vc2hyaW5rZXIuYy00Nzgtc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX3NsYWJfbWVtY2coZ2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQsXFxuLS1cXG5tbS9zaHJpbmtlci5jLTU5Ny19XFxubW0vc2hyaW5rZXIuYzo1OTg6I2Vsc2UgLyogIUNPTkZJR19NRU1DRyAqL1xcbm1tL3Nocmlua2VyLmMtNTk5LXN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19zbGFiX21lbWNnKGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLFxcbi0tXFxubW0vc2hyaW5rZXIuYy02MDMtfVxcbm1tL3Nocmlua2VyLmM6NjA0OiNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cXG5tbS9zaHJpbmtlci5jLTYwNS1cXG4tLVxcbm1tL3Nocmlua2VyLmM9NjkwPXN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXJfYWxsb2ModW5zaWduZWQgaW50IGZsYWdzLCBjb25zdCBjaGFyICpmbXQsIC4uLilcXG4tLVxcbm1tL3Nocmlua2VyLmMtNzI4LVxcdCAqICAtIG5vbi1tZW1jZy1hd2FyZSBzaHJpbmtlcnNcXG5tbS9zaHJpbmtlci5jOjcyOTpcXHQgKiAgLSAhQ09ORklHX01FTUNHXFxubW0vc2hyaW5rZXIuYy03MzAtXFx0ICogIC0gbWVtY2cgaXMgZGlzYWJsZWQgYnkga2VybmVsIGNvbW1hbmQgbGluZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMjozMzoxOC4zNzQ3NDMzNjFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUzNDM3MjQzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gdGhlIGBhbGxvY19zaHJpbmtlcl9pbmZvYCBmdW5jdGlvbiBpcyBkZWZpbml0ZWx5IHRpZWQgdG8gYCNpZmRlZiBDT05GSUdfTUVNQ0dgLCBtZWFuaW5nIGl0J3MgZGVwZW5kZW50IG9uIHRoZSBgTUVNQ0dgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGF0J3Mgb3VyIHN0YXJ0aW5nIHBvaW50LiBUaGlzIHBhcnRpY3VsYXIgcGF0Y2ggaXMgaW50ZXJlc3Rpbmc7IGl0IGxvb2tzIGxpa2UgYSBmaXggZm9yIGFuIGVycm9yIHBhdGggd2l0aGluIGBhbGxvY19zaHJpbmtlcl9pbmZvYCBpdHNlbGYuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gY29ycmVjdCBhbiBpc3N1ZSB3aGVyZSBzaHJpbmtlciBpbmZvIHdhcyBiZWluZyBpbmNvcnJlY3RseSBmcmVlZC4gVGhhdCwgYnkgaXRzIG5hdHVyZSwgbWFrZXMgaXQgKmRlZmluaXRlbHkqIHdvcnRoIGZ1enppbmcuXG5cbk15IGZvY3VzIHN5bWJvbCBmb3IgdGhpcyBmdXp6aW5nIGVmZm9ydCB3aWxsIGJlIGBhbGxvY19zaHJpbmtlcl9pbmZvYC4gTXkgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBlcnJvciBjb25kaXRpb24gd2l0aGluIHRoYXQgZnVuY3Rpb24uIFRoZSBjb3JlIG9mIHRyaWdnZXJpbmcgdGhpcyBidWcgbGlrZWx5IHJldm9sdmVzIGFyb3VuZCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyAqZHVyaW5nKiB0aGUgY3JlYXRpb24gb2YgbWVtb3J5IGNncm91cHMsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFdlJ2xsIG5lZWQgdG8gaW5kdWNlIHRob3NlIGZhaWx1cmVzIHRvIHRlc3QgdGhpcyBmaXggdGhvcm91Z2hseS5cblxuTGV0IG1lIGRvdWJsZS1jaGVjayBmb3IgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgb3IgbW9kaWZpZWQgZnVuY3Rpb25zLiBBaCwgYGFsbG9jX3Nocmlua2VyX2luZm9gIGlzIGNhbGxlZCBmcm9tIGBtZW1fY2dyb3VwX2Nzc19vbmxpbmVgLiBUaGF0IGhlbHBzIGRlZmluZSB0aGUgY2FsbCBzdGFjay4gTm8gb3RoZXIgZnVuY3Rpb25zIHNlZW0gdG8gYmUgZGlyZWN0bHkgbW9kaWZpZWQgaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFRoaXMgcGF0Y2ggc2VlbXMgZm9jdXNlZCwgZnVuY3Rpb25hbCwgYW5kIGl0IGRpcmVjdGx5IGFmZmVjdHMgY29yZSBrZXJuZWwgbG9naWMgd2l0aGluIHRoZSBjZ3JvdXAvbWVtY2cgc3Vic3lzdGVtLCB3aGljaCBtZWFucyBpdCBpcyB0cnVseSB3b3J0aCBmdXp6aW5nLlxuXG5MZXQncyBzdW1tYXJpemUgdGhpcyBjbGVhcmx5OlxuXG4qICAgKipGb2N1c1N5bWJvbHMqKjogYGFsbG9jX3Nocmlua2VyX2luZm9gXG4qICAgKipFbmFibGVDb25maWdzKio6IGBNRU1DR2BcbiogICAqKlJlYXNvbmluZyoqOiBUaGlzIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIG9mIGBhbGxvY19zaHJpbmtlcl9pbmZvYCBkdXJpbmcgbWVtb3J5IGNncm91cCBjcmVhdGlvbi4gRnV6emluZyB0aGlzIHdpbGwgcmVxdWlyZSB0cmlnZ2VyaW5nIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIHdoaWxlIG1lbWNncyBhcmUgYmVpbmcgY3JlYXRlZC5cbiogICAqKldvcnRoRnV6emluZyoqOiB0cnVlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTAzLCJPdXRwdXRUb2tlbnMiOjgzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIyOjMzOjIzLjkwOTExODYyOFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Mzg3MDAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19zaHJpbmtlcl9pbmZvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2YgYGFsbG9jX3Nocmlua2VyX2luZm9gIGR1cmluZyBtZW1vcnkgY2dyb3VwIGNyZWF0aW9uLiBGdXp6aW5nIHRoaXMgcmVxdWlyZXMgdHJpZ2dlcmluZyBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyB3aGlsZSBjcmVhdGluZyBtZW1jZ3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19zaHJpbmtlcl9pbmZvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2YgYGFsbG9jX3Nocmlua2VyX2luZm9gIGR1cmluZyBtZW1vcnkgY2dyb3VwIGNyZWF0aW9uLiBGdXp6aW5nIHRoaXMgcmVxdWlyZXMgdHJpZ2dlcmluZyBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyB3aGlsZSBjcmVhdGluZyBtZW1jZ3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow68wkb[1] Phase: Succeeded StartedAt: 2026-07-11 22:33:36 +0000 UTC FinishedAt: 2026-07-11 22:33:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow68wkb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-11 22:33:36 +0000 UTC FinishedAt: 2026-07-11 22:33:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow68wkb[2] Phase: Succeeded StartedAt: 2026-07-11 22:33:36 +0000 UTC FinishedAt: 2026-07-12 00:15:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow68wkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_shrinker_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"9c3fc021-5f0f-45b2-94cb-21b4c6e25374","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-07-11 22:33:36 +0000 UTC FinishedAt: 2026-07-12 00:15:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_shrinker_info"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"9c3fc021-5f0f-45b2-94cb-21b4c6e25374","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow68wkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_shrinker_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"9c3fc021-5f0f-45b2-94cb-21b4c6e25374","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-11 22:33:36 +0000 UTC FinishedAt: 2026-07-11 22:33:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow68wkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_shrinker_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"9c3fc021-5f0f-45b2-94cb-21b4c6e25374","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-11 22:33:36 +0000 UTC FinishedAt: 2026-07-11 22:33:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow68wkb/series-workflow68wkb-convert-artifact-1878237221/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow68wkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_shrinker_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"9c3fc021-5f0f-45b2-94cb-21b4c6e25374","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-11 22:33:58 +0000 UTC FinishedAt: 2026-07-11 23:37:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow68wkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_shrinker_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"9c3fc021-5f0f-45b2-94cb-21b4c6e25374","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-11 22:33:58 +0000 UTC FinishedAt: 2026-07-11 23:37:52 +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:*91e0c49d-fe9e-4711-94aa-172cd101a29c,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-workflow68wkb/series-workflow68wkb-convert-artifact-1878237221/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": "bd17d288-67af-47bd-8535-e39427eddefc", "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-workflow68wkb/series-workflow68wkb-build-action-1611103307/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow68wkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_shrinker_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"9c3fc021-5f0f-45b2-94cb-21b4c6e25374","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-11 22:33:58 +0000 UTC FinishedAt: 2026-07-11 23:37:35 +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:*91e0c49d-fe9e-4711-94aa-172cd101a29c,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-workflow68wkb/series-workflow68wkb-convert-artifact-1878237221/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": "bd17d288-67af-47bd-8535-e39427eddefc", "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-workflow68wkb/series-workflow68wkb-build-action-1611103307/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow68wkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_shrinker_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"9c3fc021-5f0f-45b2-94cb-21b4c6e25374","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-11 23:37:52 +0000 UTC FinishedAt: 2026-07-11 23:37:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow68wkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_shrinker_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"9c3fc021-5f0f-45b2-94cb-21b4c6e25374","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-11 23:37:52 +0000 UTC FinishedAt: 2026-07-11 23:37:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow68wkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_shrinker_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"9c3fc021-5f0f-45b2-94cb-21b4c6e25374","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-11 23:37:52 +0000 UTC FinishedAt: 2026-07-11 23:38:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow68wkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_shrinker_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"9c3fc021-5f0f-45b2-94cb-21b4c6e25374","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-11 23:37:52 +0000 UTC FinishedAt: 2026-07-11 23:37:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"9c3fc021-5f0f-45b2-94cb-21b4c6e25374","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow68wkb/series-workflow68wkb-convert-artifact-256893184/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow68wkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_shrinker_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"9c3fc021-5f0f-45b2-94cb-21b4c6e25374","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-11 23:38:06 +0000 UTC FinishedAt: 2026-07-11 23:40:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow68wkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_shrinker_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"9c3fc021-5f0f-45b2-94cb-21b4c6e25374","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-11 23:38:06 +0000 UTC FinishedAt: 2026-07-11 23:40:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bd17d288-67af-47bd-8535-e39427eddefc,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-workflow68wkb/series-workflow68wkb-build-action-1611103307/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-workflow68wkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_shrinker_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"9c3fc021-5f0f-45b2-94cb-21b4c6e25374","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-11 23:40:17 +0000 UTC FinishedAt: 2026-07-11 23:40:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow68wkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_shrinker_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"9c3fc021-5f0f-45b2-94cb-21b4c6e25374","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-11 23:40:17 +0000 UTC FinishedAt: 2026-07-11 23:40:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow68wkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_shrinker_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"9c3fc021-5f0f-45b2-94cb-21b4c6e25374","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-11 23:40:17 +0000 UTC FinishedAt: 2026-07-12 00:14:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow68wkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_shrinker_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"9c3fc021-5f0f-45b2-94cb-21b4c6e25374","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-11 23:40:17 +0000 UTC FinishedAt: 2026-07-12 00:14:56 +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:*91e0c49d-fe9e-4711-94aa-172cd101a29c,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-workflow68wkb/series-workflow68wkb-convert-artifact-256893184/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": "ade000b9-8f89-412e-b371-264605dc0952", "success": false },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-workflow68wkb/series-workflow68wkb-build-action-2302529212/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow68wkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_shrinker_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"9c3fc021-5f0f-45b2-94cb-21b4c6e25374","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-11 23:40:17 +0000 UTC FinishedAt: 2026-07-12 00:14:45 +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:*91e0c49d-fe9e-4711-94aa-172cd101a29c,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-workflow68wkb/series-workflow68wkb-convert-artifact-256893184/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": "ade000b9-8f89-412e-b371-264605dc0952", "success": false },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-workflow68wkb/series-workflow68wkb-build-action-2302529212/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow68wkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_shrinker_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"9c3fc021-5f0f-45b2-94cb-21b4c6e25374","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Failed StartedAt: 2026-07-12 00:14:56 +0000 UTC FinishedAt: 2026-07-12 00:15:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow68wkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_shrinker_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"9c3fc021-5f0f-45b2-94cb-21b4c6e25374","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Failed StartedAt: 2026-07-12 00:14:56 +0000 UTC FinishedAt: 2026-07-12 00:15:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}