Name: series-workflowd94sj Phase: Succeeded StartedAt: 2026-07-30 11:24:54 +0000 UTC FinishedAt: 2026-07-30 15:25:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd94sj[0] Phase: Succeeded StartedAt: 2026-07-30 11:24:54 +0000 UTC FinishedAt: 2026-07-30 11:42:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd94sj[0].run-triage Phase: Succeeded StartedAt: 2026-07-30 11:24:54 +0000 UTC FinishedAt: 2026-07-30 11:42:01 +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": "99cea7eb5216ff688a597595e93c123823865674", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "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": "99cea7eb5216ff688a597595e93c123823865674", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "series_id": "537b71d7-8297-4fe4-bd9a-adc2b6e32131" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "mm_get_huge_zero_folio", "do_huge_pmd_anonymous_page", "copy_huge_pmd" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMwIDExOjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bW1fZ2V0X2h1Z2VfemVyb19mb2xpbyYjMzQ7LAogICAgJiMzNDtkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZSYjMzQ7LAogICAgJiMzNDtjb3B5X2h1Z2VfcG1kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGJhcnJpZXIgaXNzdWUgaW4gZ2V0X2h1Z2VfemVyb19mb2xpbyBieSBjaGFuZ2luZyBhdG9taWNfc2V0IHRvIGF0b21pY19zZXRfcmVsZWFzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAodHJhbnNwYXJlbnQgaHVnZXBhZ2VzKSB0aGF0IGZpeGVzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIG1tX2dldF9odWdlX3plcm9fZm9saW8gYW5kIGl0cyBjYWxsZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDExOjQxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMGRiYjEyMDUyN2EyYTc1YTRhODI3MTRlZTg5ZGVkOGE2ZDE2NGM3ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDExOjQxOjA0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCAwMzI3MDJhNDYzN2JhLi42Yzc0ZDAzNzUzNzc5IDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTI0NSw4ICYjNDM7MjQ1LDExIEBAIHN0YXRpYyBib29sIGdldF9odWdlX3plcm9fZm9saW8odm9pZClcbiBcdH1cbiBcdFdSSVRFX09OQ0UoaHVnZV96ZXJvX3BmbiwgZm9saW9fcGZuKHplcm9fZm9saW8pKTtcbiBcbi1cdC8qIFdlIHRha2UgYWRkaXRpb25hbCByZWZlcmVuY2UgaGVyZS4gSXQgd2lsbCBiZSBwdXQgYmFjayBieSBzaHJpbmtlciAqL1xuLVx0YXRvbWljX3NldChcdTAwMjZodWdlX3plcm9fcmVmY291bnQsIDIpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUHVibGlzaCB0aGUgZm9saW8gYW5kIFBGTiBiZWZvcmUgbWFraW5nIHRoZW0gYXZhaWxhYmxlIHRvIGxvY2tsZXNzXG4mIzQzO1x0ICogdXNlcnMuIFBhaXJzIHdpdGggYSBzdWNjZXNzZnVsIGF0b21pY19pbmNfbm90X3plcm8oKSBhYm92ZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRhdG9taWNfc2V0X3JlbGVhc2UoXHUwMDI2aHVnZV96ZXJvX3JlZmNvdW50LCAyKTtcbiBcdHByZWVtcHRfZW5hYmxlKCk7XG4gXHRjb3VudF92bV9ldmVudChUSFBfWkVST19QQUdFX0FMTE9DKTtcbiBcdHJldHVybiB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDExOjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21tX2dldF9odWdlX3plcm9fZm9saW8mIzM0OywKICAgICYjMzQ7ZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2UmIzM0OywKICAgICYjMzQ7Y29weV9odWdlX3BtZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBiYXJyaWVyIGlzc3VlIGluIGdldF9odWdlX3plcm9fZm9saW8gYnkgY2hhbmdpbmcgYXRvbWljX3NldCB0byBhdG9taWNfc2V0X3JlbGVhc2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKHRyYW5zcGFyZW50IGh1Z2VwYWdlcykgdGhhdCBmaXhlcyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbi4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvIGFuZCBpdHMgY2FsbGVycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDBkYmIxMjA1MjdhMmE3NWE0YTgyNzE0ZWU4OWRlZDhhNmQxNjRjN2YKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAzMCAxMTo0MTowNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IDAzMjcwMmE0NjM3YmEuLjZjNzRkMDM3NTM3NzkgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtMjQ1LDggJiM0MzsyNDUsMTEgQEAgc3RhdGljIGJvb2wgZ2V0X2h1Z2VfemVyb19mb2xpbyh2b2lkKQogCX0KIAlXUklURV9PTkNFKGh1Z2VfemVyb19wZm4sIGZvbGlvX3Bmbih6ZXJvX2ZvbGlvKSk7CiAKLQkvKiBXZSB0YWtlIGFkZGl0aW9uYWwgcmVmZXJlbmNlIGhlcmUuIEl0IHdpbGwgYmUgcHV0IGJhY2sgYnkgc2hyaW5rZXIgKi8KLQlhdG9taWNfc2V0KCZhbXA7aHVnZV96ZXJvX3JlZmNvdW50LCAyKTsKJiM0MzsJLyoKJiM0MzsJICogUHVibGlzaCB0aGUgZm9saW8gYW5kIFBGTiBiZWZvcmUgbWFraW5nIHRoZW0gYXZhaWxhYmxlIHRvIGxvY2tsZXNzCiYjNDM7CSAqIHVzZXJzLiBQYWlycyB3aXRoIGEgc3VjY2Vzc2Z1bCBhdG9taWNfaW5jX25vdF96ZXJvKCkgYWJvdmUuCiYjNDM7CSAqLwomIzQzOwlhdG9taWNfc2V0X3JlbGVhc2UoJmFtcDtodWdlX3plcm9fcmVmY291bnQsIDIpOwogCXByZWVtcHRfZW5hYmxlKCk7CiAJY291bnRfdm1fZXZlbnQoVEhQX1pFUk9fUEFHRV9BTExPQyk7CiAJcmV0dXJuIHRydWU7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDExOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRhcmdldGluZyBgbW0vaHVnZV9tZW1vcnkuY2AuIEltbWVkaWF0ZWx5LCBJIHNlZSBpdCYjMzk7cyB0b3VjaGluZyBgZ2V0X2h1Z2VfemVyb19mb2xpb2AsIGFuZCB0aGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIGludGVyZXN0aW5nIHN0dWZmIGhhcHBlbnMgd2l0aCBodWdlIHBhZ2VzLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIHN3aXRjaGluZyBmcm9tIGEgcGxhaW4gYGF0b21pY19zZXRgIHRvIGBhdG9taWNfc2V0X3JlbGVhc2VgIG9uIHRoZSBgaHVnZV96ZXJvX3JlZmNvdW50YC4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgaXMgYWJvdXQgbWVtb3J5IGJhcnJpZXIgc2VtYW50aWNzLiBSaWdodCwgdGhlIHN1YnRsZSBkYW5jZSBhcm91bmQgc3luY2hyb25pemF0aW9uIGFuZCB2aXNpYmlsaXR5IGJldHdlZW4gdGhlIENQVSBjb3Jlcy4gVGhpcyBpc24mIzM5O3QganVzdCBhIGNvZGUgY29zbWV0aWMsIGl0JiMzOTtzIGEgKmZ1bmN0aW9uYWwqIG1vZGlmaWNhdGlvbiDigJMgYSBmaXggZm9yIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uLiBMZXQgbWUgZGl2ZSBpbnRvIHRoYXQgYGdldF9odWdlX3plcm9fZm9saW9gIGZ1bmN0aW9uIG5vdyBhbmQgc2VlIGV4YWN0bHkgaG93IHRoaXMgcmVsZWFzZSBzZW1hbnRpY3MgaGVscHMgcmVzb2x2ZSB0aGUgcmFjZS4gTGV0JiMzOTtzIHNlZSBob3cgdGhlIHJlZmVyZW5jZSBjb3VudCBpcyB1c2VkIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTE6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2V0X2h1Z2VfemVyb19mb2xpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz0xMTQ9dW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTIyMy1cbm1tL2h1Z2VfbWVtb3J5LmM6MjI0OnN0YXRpYyBib29sIGdldF9odWdlX3plcm9fZm9saW8odm9pZClcbm1tL2h1Z2VfbWVtb3J5LmMtMjI1LXtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTI1OD1zdGF0aWMgdm9pZCBwdXRfaHVnZV96ZXJvX2ZvbGlvKHZvaWQpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yNjYtXG5tbS9odWdlX21lbW9yeS5jOjI2NzpzdHJ1Y3QgZm9saW8gKm1tX2dldF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5tbS9odWdlX21lbW9yeS5jLTI2OC17XG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yNzQtXG5tbS9odWdlX21lbW9yeS5jOjI3NTpcdGlmICghZ2V0X2h1Z2VfemVyb19mb2xpbygpKVxubW0vaHVnZV9tZW1vcnkuYy0yNzYtXHRcdHJldHVybiBOVUxMO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9OTU5PXN0YXRpYyBpbnQgX19pbml0IHRocF9zaHJpbmtlcl9pbml0KHZvaWQpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy05ODMtXHRcdCAqIGh1Z2VfemVyb19mb2xpbyB3aWxsIGFsd2F5cyBiZSBOVUxMIG9uIGZhaWx1cmUuIFdlIGFzc3VtZVxubW0vaHVnZV9tZW1vcnkuYzo5ODQ6XHRcdCAqIHRoYXQgZ2V0X2h1Z2VfemVyb19mb2xpbygpIHdpbGwgbW9zdCBsaWtlbHkgbm90IGZhaWwgYXNcbm1tL2h1Z2VfbWVtb3J5LmMtOTg1LVx0XHQgKiB0aHBfc2hyaW5rZXJfaW5pdCgpIGlzIGludm9rZWQgZWFybHkgb24gZHVyaW5nIGJvb3QuXG5tbS9odWdlX21lbW9yeS5jLTk4Ni1cdFx0ICovXG5tbS9odWdlX21lbW9yeS5jOjk4NzpcdFx0aWYgKCFnZXRfaHVnZV96ZXJvX2ZvbGlvKCkpXG5tbS9odWdlX21lbW9yeS5jLTk4OC1cdFx0XHRwcl93YXJuKFwmIzM0O0FsbG9jYXRpbmcgcGVyc2lzdGVudCBodWdlIHplcm8gZm9saW8gZmFpbGVkXFxuXCYjMzQ7KTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTE0Nzk9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE1MDEtXHRcdFx0cmV0dXJuIFZNX0ZBVUxUX09PTTtcbm1tL2h1Z2VfbWVtb3J5LmM6MTUwMjpcdFx0emVyb19mb2xpbyA9IG1tX2dldF9odWdlX3plcm9fZm9saW8odm1hLVx1MDAzZXZtX21tKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMTUwMy1cdFx0aWYgKHVubGlrZWx5KCF6ZXJvX2ZvbGlvKSkge1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTg2Nz1pbnQgY29weV9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE5MzAtXHRcdC8qXG5tbS9odWdlX21lbW9yeS5jOjE5MzE6XHRcdCAqIG1tX2dldF9odWdlX3plcm9fZm9saW8oKSB3aWxsIG5ldmVyIGFsbG9jYXRlIGEgbmV3XG5tbS9odWdlX21lbW9yeS5jLTE5MzItXHRcdCAqIGZvbGlvIGhlcmUsIHNpbmNlIHdlIGFscmVhZHkgaGF2ZSBhIHplcm8gcGFnZSB0b1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTkzNC1cdFx0ICovXG5tbS9odWdlX21lbW9yeS5jOjE5MzU6XHRcdG1tX2dldF9odWdlX3plcm9fZm9saW8oZHN0X21tKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMTkzNi1cdFx0Z290byBvdXRfemVyb19wYWdlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDExOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNzcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEh1Z2UgWmVybyBGb2xpbyBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBzb21ldGhpbmcgaW50ZXJlc3Rpbmc6IGBnZXRfaHVnZV96ZXJvX2ZvbGlvYCBpcyBkZWZpbmVkIGFzIGBzdGF0aWNgLiBUaGF0JiMzOTtzIGltcG9ydGFudC4gSXQgbWVhbnMgaXQmIzM5O3MgaW50ZXJuYWwgdG8gdGhlIG1vZHVsZSwgbm90IG1lYW50IHRvIGJlIGRpcmVjdGx5IGFjY2Vzc2VkIGZyb20gb3V0c2lkZS4gQnV0IHRoZW4gSSBzZWUgdGhpcyBmdW5jdGlvbiwgYG1tX2dldF9odWdlX3plcm9fZm9saW9gLCB3aGljaCAqaXMqIGV4cG9ydGVkIGFuZCBpc24mIzM5O3Qgc3RhdGljLiBJdCYjMzk7cyB0aGUgcHVibGljIGludGVyZmFjZS4gSG1tLCBsb29rcyBsaWtlIGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCBwcm9iYWJseSBjYWxscyBgZ2V0X2h1Z2VfemVyb19mb2xpb2AuIEkgbmVlZCB0byBjb25maXJtIHRoYXQuIExldCYjMzk7cyBkaXZlIGludG8gYG1tL2h1Z2VfbWVtb3J5LmNgIGFuZCBzZWUgZXhhY3RseSBob3cgdGhleSBpbnRlcmFjdC4gR290dGEgdW5kZXJzdGFuZCB0aGUgZmxvdyBhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiBiZWhpbmQgdGhlIHNjZW5lcywgeW91IGtub3c/IFRoaXMgaXMgYSBrZXkgcGllY2Ugb2YgdGhlIHB1enpsZSBoZXJlLCBhbmQgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGludGVyYWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDExOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21tX2dldF9odWdlX3plcm9fZm9saW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9MjU4PXN0YXRpYyB2b2lkIHB1dF9odWdlX3plcm9fZm9saW8odm9pZClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI2Ni1cbm1tL2h1Z2VfbWVtb3J5LmM6MjY3OnN0cnVjdCBmb2xpbyAqbW1fZ2V0X2h1Z2VfemVyb19mb2xpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbm1tL2h1Z2VfbWVtb3J5LmMtMjY4LXtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTE0Nzk9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE1MDEtXHRcdFx0cmV0dXJuIFZNX0ZBVUxUX09PTTtcbm1tL2h1Z2VfbWVtb3J5LmM6MTUwMjpcdFx0emVyb19mb2xpbyA9IG1tX2dldF9odWdlX3plcm9fZm9saW8odm1hLVx1MDAzZXZtX21tKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMTUwMy1cdFx0aWYgKHVubGlrZWx5KCF6ZXJvX2ZvbGlvKSkge1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTg2Nz1pbnQgY29weV9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE5MzAtXHRcdC8qXG5tbS9odWdlX21lbW9yeS5jOjE5MzE6XHRcdCAqIG1tX2dldF9odWdlX3plcm9fZm9saW8oKSB3aWxsIG5ldmVyIGFsbG9jYXRlIGEgbmV3XG5tbS9odWdlX21lbW9yeS5jLTE5MzItXHRcdCAqIGZvbGlvIGhlcmUsIHNpbmNlIHdlIGFscmVhZHkgaGF2ZSBhIHplcm8gcGFnZSB0b1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTkzNC1cdFx0ICovXG5tbS9odWdlX21lbW9yeS5jOjE5MzU6XHRcdG1tX2dldF9odWdlX3plcm9fZm9saW8oZHN0X21tKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMTkzNi1cdFx0Z290byBvdXRfemVyb19wYWdlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDExOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NzkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEkmIzM5O20gaGF2aW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYG1tX2dldF9odWdlX3plcm9fZm9saW9gIGZvciBQb3RlbnRpYWwgVXNlKioKClJpZ2h0LCBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AgaXMgYW4gaW50ZXJlc3RpbmcgcG9pbnQgdG8gZGlnIGludG8uIEl0IGZlZWxzIGxpa2UgYSBrZXkgZnVuY3Rpb24gdG8gZXhwbG9yZS4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGl0cyBzY29wZS4gSXMgaXQgZXhwb3J0ZWQsIG1lYW5pbmcgaXQmIzM5O3MgaW50ZW5kZWQgdG8gYmUgdXNlZCBleHRlcm5hbGx5PyBPciBpcyBpdCBkZWNsYXJlZCBhcyBub24tc3RhdGljLCBwZXJoYXBzIHZpc2libGUgd2l0aGluIHRoZSBtb2R1bGUgYnV0IG5vdCBleHBsaWNpdGx5IHB1YmxpYyBmb3IgZ2VuZXJhbCB1c2U/IFVuZGVyc3RhbmRpbmcgaXRzIHZpc2liaWxpdHkgaXMgY3J1Y2lhbCB0byBmaWd1cmluZyBvdXQgd2hlcmUgYW5kIGhvdyBpdCBtaWdodCBmaXQgaW50byBteSBjdXJyZW50IG9iamVjdGl2ZS4gVGhpcyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTE6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLiptbV9nZXRfaHVnZV96ZXJvX2ZvbGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDExNwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6CgoqKkFuYWx5emluZyBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgZnVuY3Rpb24gYG1tX2dldF9odWdlX3plcm9fZm9saW9gLiBUaGUgaW1tZWRpYXRlIG9ic2VydmF0aW9uIGlzIHRoYXQgaXQmIzM5O3MgKm5vdCogbWFya2VkIGZvciBleHBvcnQsIG1lYW5pbmcgaXQmIzM5O3MgaW50ZW5kZWQgZm9yIGludGVybmFsIHVzZSB3aXRoaW4gdGhlIG1vZHVsZSBvciBwcm9qZWN0IGl0JiMzOTtzIGRlZmluZWQgaW4uIEhvd2V2ZXIsIHRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgKm5vdCogYHN0YXRpY2Agc3VnZ2VzdHMgdGhhdCBzb21ldGhpbmcgZWxzZSB3aXRoaW4gdGhpcyBjb2RlIGJhc2UgbmVlZHMgdG8gY2FsbCBpdC4gSXQmIzM5O3Mgbm90IGxpbWl0ZWQgdG8gdGhlIGNvbXBpbGF0aW9uIHVuaXQuCgpNeSBuZXh0IHN0ZXAgaGVyZSBpcyB0byBpZGVudGlmeSB0aG9zZSBjYWxsZXJzLiBLbm93aW5nIHdoZXJlIGFuZCBob3cgYG1tX2dldF9odWdlX3plcm9fZm9saW9gIGlzIGJlaW5nIHVzZWQgaXMgY3J1Y2lhbC4gSXMgaXQgb25seSB1c2VkIGJ5IGEgc21hbGwgcGFydCBvZiB0aGUgc3lzdGVtIG9yIGlzIHRoaXMgZnVuY3Rpb24gY2VudHJhbCB0byB0aGUgb3BlcmF0aW9uIG9mIGEga2V5IGNvbXBvbmVudD8gV2hhdCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFyZSBwb3RlbnRpYWxseSB0aWdodGx5IGNvdXBsZWQgd2l0aCB0aGUgaW1wbGVtZW50YXRpb24gYW5kIHNlbWFudGljcyBvZiBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2A/IEJ5IHRyYWNpbmcgaXRzIHVzZSwgSSBjYW4gcXVpY2tseSBnYWluIGNvbnRleHQgYXJvdW5kIGl0cyBwdXJwb3NlIGFuZCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGFyZWFzIG9mIGNvbmNlcm4sIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLCBvciBkZXBlbmRlbmNpZXMuIExldCYjMzk7cyBzZWUgd2hlcmUgdGhpcyByYWJiaXQgaG9sZSBsZWFkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTE6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW1fZ2V0X2h1Z2VfemVyb19mb2xpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9kYXguYz0xNDExPXN0YXRpYyB2bV9mYXVsdF90IGRheF9wbWRfbG9hZF9ob2xlKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi0tXG5mcy9kYXguYy0xNDE4LVxuZnMvZGF4LmM6MTQxOTpcdHplcm9fZm9saW8gPSBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKHZtZi1cdTAwM2V2bWEtXHUwMDNldm1fbW0pO1xuZnMvZGF4LmMtMTQyMC1cbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD01NDk9c3RhdGljIGlubGluZSBib29sIGlzX2h1Z2VfemVyb19wbWQocG1kX3QgcG1kKVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTU1My1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjU1NDpzdHJ1Y3QgZm9saW8gKm1tX2dldF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTU1LXZvaWQgbW1fcHV0X2h1Z2VfemVyb19mb2xpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9ODA2PXN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2ZvbGlvX3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfb3JkZXIpXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtODEzLSAqXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo4MTQ6ICogVGhpcyBmdW5jdGlvbiBzaGFsbCBiZSB1c2VkIHdoZW4gbW1fZ2V0X2h1Z2VfemVyb19mb2xpbygpIGNhbm5vdCBiZVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtODE1LSAqIHVzZWQgYXMgdGhlcmUgaXMgbm8gYXBwcm9wcmlhdGUgbW0gbGlmZXRpbWUgdG8gdGllIHRoZSBodWdlIHplcm8gZm9saW9cbi0tXG5tbS9odWdlX21lbW9yeS5jPTI1OD1zdGF0aWMgdm9pZCBwdXRfaHVnZV96ZXJvX2ZvbGlvKHZvaWQpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yNjYtXG5tbS9odWdlX21lbW9yeS5jOjI2NzpzdHJ1Y3QgZm9saW8gKm1tX2dldF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5tbS9odWdlX21lbW9yeS5jLTI2OC17XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xNDc5PXZtX2ZhdWx0X3QgZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xNTAxLVx0XHRcdHJldHVybiBWTV9GQVVMVF9PT007XG5tbS9odWdlX21lbW9yeS5jOjE1MDI6XHRcdHplcm9fZm9saW8gPSBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKHZtYS1cdTAwM2V2bV9tbSk7XG5tbS9odWdlX21lbW9yeS5jLTE1MDMtXHRcdGlmICh1bmxpa2VseSghemVyb19mb2xpbykpIHtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTE4Njc9aW50IGNvcHlfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xOTMwLVx0XHQvKlxubW0vaHVnZV9tZW1vcnkuYzoxOTMxOlx0XHQgKiBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKCkgd2lsbCBuZXZlciBhbGxvY2F0ZSBhIG5ld1xubW0vaHVnZV9tZW1vcnkuYy0xOTMyLVx0XHQgKiBmb2xpbyBoZXJlLCBzaW5jZSB3ZSBhbHJlYWR5IGhhdmUgYSB6ZXJvIHBhZ2UgdG9cbi0tXG5tbS9odWdlX21lbW9yeS5jLTE5MzQtXHRcdCAqL1xubW0vaHVnZV9tZW1vcnkuYzoxOTM1Olx0XHRtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKGRzdF9tbSk7XG5tbS9odWdlX21lbW9yeS5jLTE5MzYtXHRcdGdvdG8gb3V0X3plcm9fcGFnZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE5OQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYG1tX2dldF9odWdlX3plcm9fZm9saW9gIEZ1bmN0aW9uIGFuZCBUcmFuc3BhcmVudCBIdWdlcGFnZXMqKgoKT2theSwgc28gYG1tX2dldF9odWdlX3plcm9fZm9saW9gIHNlZW1zIGxpa2UgYSBrZXkgZnVuY3Rpb24gdG8gZm9jdXMgb24gaGVyZS4gSXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoaXMgYXJlYS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcy4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgYXJlIHRoZXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBhcmUgcHJlcmVxdWlzaXRlcyBvciByZWxhdGVkIHRvIGl0PyBJIHNob3VsZCBjaGVjayBhbmQgc2VlIGlmIGl0IGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuCgpSaWdodCwgYG1tL2h1Z2VfbWVtb3J5LmNgIGlzIHRoZSBsaWtlbHkgbG9jYXRpb24uIEkgcmVjYWxsIHRoYXQgaXQmIzM5O3MgY29tcGlsZWQgd2hlbiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBlbmFibGVkLCBvciBhdCBsZWFzdCB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvZGUuIFNvLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGBtbS9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgY29tcGlsYXRpb24gY29uZGl0aW9ucyBhbmQgbG9vayBhdCBvdGhlciBzb3VyY2UgZmlsZXMgdGhhdCBtYXkgaW5jbHVkZSB0aGlzIGZ1bmN0aW9uLiBUaGlzIHNob3VsZCBoZWxwIG1lIGJldHRlciB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGNvbnRleHQgYW5kIHBvdGVudGlhbCBjb21wbGV4aXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDExOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2VfbWVtb3J5Lm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICYjNDM7PSBtaWdyYXRlX2RldmljZS5vXG5tbS9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSAmIzQzOz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cbm1tL01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSAmIzQzOz0gcGFnZV9jb3VudGVyLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU4NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipNZW1vcnkgTWFuYWdlbWVudCBDb25maWd1cmF0aW9uIEFzc2Vzc21lbnQqKgoKQWxyaWdodCwgc28gdGhlIGNvcmUgaXNzdWUgYXQgaGFuZCBpcyB0aGUgcmVxdWlyZW1lbnQgZm9yIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lIGFzc3VtcHRpb24sIHRoZSBpbml0aWFsIGZvY2FsIHBvaW50LiBOb3csIGdpdmVuIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LCBteSBuZXh0IGxpbmUgb2YgaW5xdWlyeSBoYXMgdG8gYmUgdG8gbG9vayBhcm91bmQgYW5kIG1ha2Ugc3VyZSB0aGF0IHdlIGFyZW4mIzM5O3Qgb3Zlcmxvb2tpbmcgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlIGdvYWwgaXMgYSBjb21wcmVoZW5zaXZlIGFzc2Vzc21lbnQsIGVuc3VyaW5nIG5vdGhpbmcgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBvciByZWxhdGVkIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zIGdldHMgbGVmdCBieSB0aGUgd2F5c2lkZS4gTGV0JiMzOTtzIHNlZSB3aGF0IGVsc2UgdGhlIGNvbmZpZ3VyYXRpb24gcHJlc2VudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDExOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz04NDM9Y29uZmlnIE1NX0lEXG4tLVxubW0vS2NvbmZpZy04NDUtXG5tbS9LY29uZmlnOjg0NjptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9LY29uZmlnLTg0Ny1cdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODY0PWNob2ljZVxuLS1cbm1tL0tjb25maWctODY5LVxubW0vS2NvbmZpZzo4NzA6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXG5tbS9LY29uZmlnLTg3MS1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg3Ni1cbm1tL0tjb25maWc6ODc3Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0Vcbm1tL0tjb25maWctODc4LVx0XHRib29sIFwmIzM0O21hZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg4NS1cbm1tL0tjb25maWc6ODg2Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXG5tbS9LY29uZmlnLTg4Ny1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODkzPWNob2ljZVxuLS1cbm1tL0tjb25maWctOTAyLVxubW0vS2NvbmZpZzo5MDM6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxubW0vS2NvbmZpZy05MDQtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkxMi1cbm1tL0tjb25maWc6OTEzOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTkxNC1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkyMC1cbm1tL0tjb25maWc6OTIxOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTIyLVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MjgtXG5tbS9LY29uZmlnOjkyOTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05MzAtXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz05Mzg9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy05NDctXG5tbS9LY29uZmlnOjk0ODpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXG5tbS9LY29uZmlnLTk0OS1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTU2LVxubW0vS2NvbmZpZzo5NTc6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTU4LVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTY0LVxubW0vS2NvbmZpZzo5NjU6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05NjYtXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk3Mi1cbm1tL0tjb25maWc6OTczOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTk3NC1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ5MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDExNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTWVtb3J5IEJhcnJpZXIgRml4KioKCk9rYXksIHNvIHRoZSBmaXggaXRzZWxmIHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ7IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgdGhlIGtleS4gRnVuY3Rpb25hbGx5LCBpdCBkb2VzIHRoZSB0cmljaywgcmVzb2x2aW5nIHRoYXQgbWVtb3J5IGJhcnJpZXIgaXNzdWUuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCwgdGhhdCBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgZnVuY3Rpb24uIEFuZCB0aGUgb25seSBjb25maWcgbmVlZGVkIGlzIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuCgpOb3csIGxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSBpZiBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AgaXMgdGhlICpvbmx5KiBwZXJ0aW5lbnQgc3ltYm9sIGhlcmUuIFRoZSBmdW5jdGlvbiBgZ2V0X2h1Z2VfemVyb19mb2xpb2AgaXNuJiMzOTt0IGdvaW5nIHRvIHdvcmssIGFzIGl0JiMzOTtzIHN0YXRpYywgc28gaXQmIzM5O3Mgbm90IGEgcmVsZXZhbnQgc3ltYm9sIHRvIGNoZWNrLiBBbm90aGVyIGZ1bmN0aW9uIEkgc2hvdWxkIGxvb2sgYXQgaXMgYGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYDsgdGhhdCBsb29rcyBsaWtlIGFub3RoZXIgbGlrZWx5IGNhbmRpZGF0ZSB0byBleGFtaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC05LVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MTA6dm1fZmF1bHRfdCBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0xMS1pbnQgY29weV9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcbi0tXG5tbS9odWdlX21lbW9yeS5jPTEzMzE9c3RhdGljIHZvaWQgbWFwX2Fub25fZm9saW9fcG1kX3BmKHN0cnVjdCBmb2xpbyAqZm9saW8sIHBtZF90ICpwbWQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xMzQwLVxubW0vaHVnZV9tZW1vcnkuYzoxMzQxOnN0YXRpYyB2bV9mYXVsdF90IF9fZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG5tbS9odWdlX21lbW9yeS5jLTEzNDIte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTQ2Nz1zdGF0aWMgdm9pZCBzZXRfaHVnZV96ZXJvX2ZvbGlvKHBndGFibGVfdCBwZ3RhYmxlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE0NzgtXG5tbS9odWdlX21lbW9yeS5jOjE0Nzk6dm1fZmF1bHRfdCBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbm1tL2h1Z2VfbWVtb3J5LmMtMTQ4MC17XG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xNTMyLVxubW0vaHVnZV9tZW1vcnkuYzoxNTMzOlx0cmV0dXJuIF9fZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2Uodm1mKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMTUzNC19XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0yMzk4PXN0YXRpYyBib29sIGhhc19kZXBvc2l0ZWRfcGd0YWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcG1kX3QgcG1kdmFsLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjQxMy1cdCAqIE90aGVyd2lzZSwgb25seSBhbm9ueW1vdXMgZm9saW9zIGFyZSBkZXBvc2l0ZWQsIHNlZVxubW0vaHVnZV9tZW1vcnkuYzoyNDE0Olx0ICogX19kb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZSgpLlxubW0vaHVnZV9tZW1vcnkuYy0yNDE1LVx0ICovXG4tLVxubW0vbWVtb3J5LmM9NjIwMD1zdGF0aWMgaW5saW5lIHZtX2ZhdWx0X3QgY3JlYXRlX2h1Z2VfcG1kKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTYyMDMtXHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpKVxubW0vbWVtb3J5LmM6NjIwNDpcdFx0cmV0dXJuIGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHZtZik7XG5tbS9tZW1vcnkuYy02MjA1LVx0aWYgKHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlaHVnZV9mYXVsdClcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTc3MD1FWFBPUlRfU1lNQk9MKG1pZ3JhdGVfdm1hX3NldHVwKTtcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTc3OC0gKiBAcGFnZSBuZWVkcyB0byBiZSBpbml0aWFsaXplZCBhbmQgc2V0dXAgYWZ0ZXIgaXQmIzM5O3MgYWxsb2NhdGVkLiBUaGUgY29kZSBiaXRzXG5tbS9taWdyYXRlX2RldmljZS5jOjc3OTogKiBoZXJlIGZvbGxvdyBjbG9zZWx5IHRoZSBjb2RlIGluIF9fZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2UoKS4gVGhpcyBBUEkgZG9lc1xubW0vbWlncmF0ZV9kZXZpY2UuYy03ODAtICogbm90IHN1cHBvcnQgVEhQIHplcm8gcGFnZXMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDExOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NDkKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gS2V5IEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIHRoYXQgYGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCBpcyBhIHJlYWxseSBzb2xpZCBjYW5kaWRhdGUgYXMgYSBmb2N1cyBzeW1ib2wuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGluIGhhbmRsaW5nIGFub255bW91cyBodWdlIHBhZ2VzLCBzbyBpdCBzaG91bGQgYmUgcXVpdGUgaW5mb3JtYXRpdmUgdG8gYW5hbHl6ZS4gQW5kLCBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AgaXMgYW5vdGhlciBzdHJvbmcgY29udGVuZGVyLgoKSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBjYWxsZXJzIG9mIGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCwganVzdCB0byBjb25maXJtIG15IHRoaW5raW5nIGFuZCBleHBhbmQgdGhlIGNvbnRleHQuIExldCBtZSBzZWUuLi4geWVzLCBpdCBsb29rcyBsaWtlIGBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAsIGBjb3B5X2h1Z2VfcG1kYCwgYW5kIGBkYXhfcG1kX2xvYWRfaG9sZWAgYXJlIGFsbCBjYWxsaW5nIGl0LiBQZXJmZWN0LgoKUmlnaHQsIHNvIEkmIzM5O2xsIGFkZCBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AsIGBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAsIGBjb3B5X2h1Z2VfcG1kYCwgYW5kIGBkYXhfcG1kX2xvYWRfaG9sZWAgdG8gbXkgbGlzdCBvZiBmb2N1cyBzeW1ib2xzLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gaGF2ZSBhIGdvb2Qgc2V0LiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBgY29weV9odWdlX3BtZGAgYW5kIGBkYXhfcG1kX2xvYWRfaG9sZWAsIGJlY2F1c2UgdGhleSBkb24mIzM5O3Qgc2VlbSBhcyBvYnZpb3VzIGF0IGZpcnN0IGdsYW5jZS4gSSB3aWxsIGNoZWNrIHRoZW0gb3V0LCBhbmQgc2VlIHdoYXQgdGhlIGZ1bmN0aW9uIGRvZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDExOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvcHlfaHVnZV9wbWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmg9MTA9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoxMTppbnQgY29weV9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTEyLVx0XHQgIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTgxMT1zdGF0aWMgdm9pZCBjb3B5X2h1Z2Vfbm9uX3ByZXNlbnRfcG1kKFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTg2Ni1cbm1tL2h1Z2VfbWVtb3J5LmM6MTg2NzppbnQgY29weV9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcbm1tL2h1Z2VfbWVtb3J5LmMtMTg2OC1cdFx0ICBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tZW1vcnkuYz0xMzc5PWNvcHlfcG1kX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmNfdm1hLFxuLS1cbm1tL21lbW9yeS5jLTEzOTctXHRcdFx0Vk1fQlVHX09OX1ZNQShuZXh0LWFkZHIgIT0gSFBBR0VfUE1EX1NJWkUsIHNyY192bWEpO1xubW0vbWVtb3J5LmM6MTM5ODpcdFx0XHRlcnIgPSBjb3B5X2h1Z2VfcG1kKGRzdF9tbSwgc3JjX21tLCBkc3RfcG1kLCBzcmNfcG1kLFxubW0vbWVtb3J5LmMtMTM5OS1cdFx0XHRcdFx0ICAgIGFkZHIsIGRzdF92bWEsIHNyY192bWEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDIwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipNeSBQZXJzcGVjdGl2ZSBvbiBgY29weV9odWdlX3BtZGAqKgoKUmlnaHQsIGBjb3B5X2h1Z2VfcG1kYC4uLiB5ZWFoLCB0aGF0JiMzOTtzIGEgc29saWQgcGllY2Ugb2Ygd29yay4gRnJvbSBhIHBlcmZvcm1hbmNlIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBzdGFuZHBvaW50LCBpdCYjMzk7cyBwcmV0dHkgZWxlZ2FudC4gVGhlIGluaGVyZW50IGFkdmFudGFnZXMgb2YgZGVhbGluZyB3aXRoIGh1Z2UgcGFnZXMgYXJlIHdlbGwtdW5kZXJzdG9vZCwgYW5kIHRoZSBgY29weV9odWdlX3BtZGAgaW1wbGVtZW50YXRpb24gY2xlYXJseSBsZXZlcmFnZXMgdGhvc2UgdG8gb3B0aW1pemUgZGF0YSBtb3ZlbWVudC4gSSYjMzk7dmUgc2VlbiBzb21lIGltcGxlbWVudGF0aW9ucyBzdHJ1Z2dsZSB3aXRoIHRoZSBjb21wbGV4aXRpZXMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggbmVzdGVkIHBhZ2UgdGFibGVzIG9yIGRpZmZlcmVudCBoYXJkd2FyZSBhcmNoaXRlY3R1cmVzLiBCdXQgYmFzZWQgb24gbXkgaW5pdGlhbCByZXZpZXcsIHRoaXMgc29sdXRpb24gc2VlbXMgcm9idXN0IGFuZCBjb25zaWRlcnMgdGhvc2UgcG90ZW50aWFsIHBpdGZhbGxzLiBUaGUgZGVzaWduIGRlY2lzaW9ucyBhcHBlYXIgc291bmQsIHdpdGggYXR0ZW50aW9uIGdpdmVuIHRvIG1pbmltaXppbmcgVExCIGZsdXNoZXMgYW5kIG1heGltaXppbmcgY2FjaGUgdXRpbGl6YXRpb24uIEkmIzM5O2QgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIHNwZWNpZmljIGhhcmR3YXJlIGludGVyYWN0aW9ucywgcGFydGljdWxhcmx5IGZvciBteSB1c2UgY2FzZSBidXQgSSBsaWtlIHRoZSBhcHByb2FjaC4gT3ZlcmFsbCwgaXQgaW5kaWNhdGVzIGEgc3Ryb25nIGdyYXNwIG9mIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBoaWVyYXJjaHkgYW5kIGEgY29tbWl0bWVudCB0byBlZmZpY2llbnQgZGF0YSB0cmFuc2Zlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTE6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGF4X3BtZF9sb2FkX2hvbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZGF4LmM9MTM5NT1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfbG9hZF9ob2xlKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi0tXG5mcy9kYXguYy0xNDEwLSNpZmRlZiBDT05GSUdfRlNfREFYX1BNRFxuZnMvZGF4LmM6MTQxMTpzdGF0aWMgdm1fZmF1bHRfdCBkYXhfcG1kX2xvYWRfaG9sZShzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG5mcy9kYXguYy0xNDEyLVx0XHRjb25zdCBzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgdm9pZCAqKmVudHJ5KVxuLS1cbmZzL2RheC5jLTE0MjEtXHRpZiAodW5saWtlbHkoIXplcm9fZm9saW8pKSB7XG5mcy9kYXguYzoxNDIyOlx0XHR0cmFjZV9kYXhfcG1kX2xvYWRfaG9sZV9mYWxsYmFjayhpbm9kZSwgdm1mLCB6ZXJvX2ZvbGlvLCAqZW50cnkpO1xuZnMvZGF4LmMtMTQyMy1cdFx0cmV0dXJuIFZNX0ZBVUxUX0ZBTExCQUNLO1xuLS1cbmZzL2RheC5jLTE0MzAtXHRpZiAocmV0ID09IFZNX0ZBVUxUX05PUEFHRSlcbmZzL2RheC5jOjE0MzE6XHRcdHRyYWNlX2RheF9wbWRfbG9hZF9ob2xlKGlub2RlLCB2bWYsIHplcm9fZm9saW8sICplbnRyeSk7XG5mcy9kYXguYy0xNDMyLVx0cmV0dXJuIHJldDtcbi0tXG5mcy9kYXguYy0xNDM0LSNlbHNlXG5mcy9kYXguYzoxNDM1OnN0YXRpYyB2bV9mYXVsdF90IGRheF9wbWRfbG9hZF9ob2xlKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbmZzL2RheC5jLTE0MzYtXHRcdGNvbnN0IHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCB2b2lkICoqZW50cnkpXG4tLVxuZnMvZGF4LmM9MTg0Mj1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfZmF1bHRfaXRlcihzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi0tXG5mcy9kYXguYy0xODY0LVx0XHRcdHJldHVybiBkYXhfbG9hZF9ob2xlKHhhcywgdm1mLCBpdGVyLCBlbnRyeSk7XG5mcy9kYXguYzoxODY1Olx0XHRyZXR1cm4gZGF4X3BtZF9sb2FkX2hvbGUoeGFzLCB2bWYsIGl0ZXIsIGVudHJ5KTtcbmZzL2RheC5jLTE4NjYtXHR9XG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvZnNfZGF4Lmg9NjE9REVGSU5FX1BNRF9GQVVMVF9FVkVOVChkYXhfcG1kX2ZhdWx0X2RvbmUpO1xuaW5jbHVkZS90cmFjZS9ldmVudHMvZnNfZGF4LmgtNjItXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9mc19kYXguaDo2MzpERUNMQVJFX0VWRU5UX0NMQVNTKGRheF9wbWRfbG9hZF9ob2xlX2NsYXNzLFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZnNfZGF4LmgtNjQtXHRUUF9QUk9UTyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9mc19kYXguaC05Ni0jZGVmaW5lIERFRklORV9QTURfTE9BRF9IT0xFX0VWRU5UKG5hbWUpIFxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9mc19kYXguaDo5NzpERUZJTkVfRVZFTlQoZGF4X3BtZF9sb2FkX2hvbGVfY2xhc3MsIG5hbWUsIFxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9mc19kYXguaC05OC1cdFRQX1BST1RPKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBcXFxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2ZzX2RheC5oLTEwMS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2ZzX2RheC5oOjEwMjpERUZJTkVfUE1EX0xPQURfSE9MRV9FVkVOVChkYXhfcG1kX2xvYWRfaG9sZSk7XG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9mc19kYXguaDoxMDM6REVGSU5FX1BNRF9MT0FEX0hPTEVfRVZFTlQoZGF4X3BtZF9sb2FkX2hvbGVfZmFsbGJhY2spO1xuaW5jbHVkZS90cmFjZS9ldmVudHMvZnNfZGF4LmgtMTA0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTUwCgkJCQkJCQlvdXRwdXQ6IDE0MgoJCQkJCQkJdGhvdWdodHM6IDE4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiB0aGUgUmlnaHQgU3ltYm9scyoqCgpPa2F5LCBzbyBJJiMzOTttIGV2YWx1YXRpbmcgZm9jdXMgc3ltYm9scyBmb3IgdGhpcyBhbmFseXNpcy4gSW5pdGlhbGx5LCBJIGNvbnNpZGVyZWQgYGRheF9wbWRfbG9hZF9ob2xlYCwgYnV0IHRoZW4gcmVhbGl6ZWQgaXQmIzM5O3Mgc3RhdGljLCB3aGljaCBtYWtlcyBpdCBsZXNzIHRoYW4gaWRlYWwuIGBkYXhfZmF1bHRfaXRlcmAgaGFzIHRoZSBzYW1lIHByb2JsZW0sIGJlaW5nIHN0YXRpYyBhcyB3ZWxsLiBJIG5lZWQgbm9uLXN0YXRpYyBzeW1ib2xzIGZvciBhIGJldHRlciB2aWV3LgoKTGV0JiMzOTtzIHN3aXRjaCB0byBhIG5ldyBzZXQgb2YgcG9zc2libGUgdGFyZ2V0cy4gRm9jdXNpbmcgb24gdGhlIG1vcmUgZ2VuZXJhbCBodWdlIHBhZ2UgaGFuZGxpbmcsIGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCwgYGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCwgYW5kIGBjb3B5X2h1Z2VfcG1kYCBzb3VuZCBtb3JlIHByb21pc2luZy4KCkFoLCBnb29kLCBhIHF1aWNrIGNoZWNrIGNvbmZpcm1zIHRoYXQgYG1tX2dldF9odWdlX3plcm9fZm9saW9gLCBgZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2VgLCBhbmQgYGNvcHlfaHVnZV9wbWRgIGFyZSBhbGwgaW5kZWVkIG5vbi1zdGF0aWMgc3ltYm9scy4gUGVyZmVjdCEgVGhlc2UgYXJlIG11Y2ggYmV0dGVyIGNob2ljZXMgZm9yIGEgbW9yZSBkeW5hbWljIHVuZGVyc3RhbmRpbmcuCgpOb3csIGxldCBtZSBqdXN0IGNvbmZpcm0gdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgaWYgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyB0aGUgb25seSBjb25maWcgSSBuZWVkIHRvIGNvbnNpZGVyLiBJIGRvbiYjMzk7dCB3YW50IHRvIGdldCBzaWRlLXRyYWNrZWQgbG9va2luZyBhdCBvcHRpb25zIHRoYXQgSSBkb24mIzM5O3QgbmVlZC4KCkFscmlnaHQsIGEgcXVpY2sgc2NhbiBjb25maXJtcyB0aGF0IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgc3VmZmljaWVudC4gR3JlYXQuCgpOb3cgdGhhdCBJIGhhdmUgYSBmb2N1c2VkIHNldCBvZiBzeW1ib2xzIGFuZCBoYXZlIHZlcmlmaWVkIHRoZSBjb25maWcsIGxldCYjMzk7cyBwcm9jZWVkIHRvIHNldCB0aGUgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTE6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bW1fZ2V0X2h1Z2VfemVyb19mb2xpbyYjMzQ7LAogICAgJiMzNDtkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZSYjMzQ7LAogICAgJiMzNDtjb3B5X2h1Z2VfcG1kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGJhcnJpZXIgaXNzdWUgaW4gZ2V0X2h1Z2VfemVyb19mb2xpbyBieSBjaGFuZ2luZyBhdG9taWNfc2V0IHRvIGF0b21pY19zZXRfcmVsZWFzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAodHJhbnNwYXJlbnQgaHVnZXBhZ2VzKSB0aGF0IGZpeGVzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIG1tX2dldF9odWdlX3plcm9fZm9saW8gYW5kIGl0cyBjYWxsZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21tX2dldF9odWdlX3plcm9fZm9saW8mIzM0OywKICAgICYjMzQ7ZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2UmIzM0OywKICAgICYjMzQ7Y29weV9odWdlX3BtZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBiYXJyaWVyIGlzc3VlIGluIGdldF9odWdlX3plcm9fZm9saW8gYnkgY2hhbmdpbmcgYXRvbWljX3NldCB0byBhdG9taWNfc2V0X3JlbGVhc2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKHRyYW5zcGFyZW50IGh1Z2VwYWdlcykgdGhhdCBmaXhlcyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbi4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvIGFuZCBpdHMgY2FsbGVycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDExOjQxOjA1LjYwMDg5NjYyMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MjY1NzY5MTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibW1fZ2V0X2h1Z2VfemVyb19mb2xpb1wiLFxuICAgIFwiZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2VcIixcbiAgICBcImNvcHlfaHVnZV9wbWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBiYXJyaWVyIGlzc3VlIGluIGdldF9odWdlX3plcm9fZm9saW8gYnkgY2hhbmdpbmcgYXRvbWljX3NldCB0byBhdG9taWNfc2V0X3JlbGVhc2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKHRyYW5zcGFyZW50IGh1Z2VwYWdlcykgdGhhdCBmaXhlcyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbi4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvIGFuZCBpdHMgY2FsbGVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTE6NDE6MDUuNjAwOTAyNjAyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTE5NzM4NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwZGJiMTIwNTI3YTJhNzVhNGE4MjcxNGVlODlkZWQ4YTZkMTY0YzdmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDMwIDExOjQxOjA0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXFxuaW5kZXggMDMyNzAyYTQ2MzdiYS4uNmM3NGQwMzc1Mzc3OSAxMDA2NDRcXG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXFxuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xcbkBAIC0yNDUsOCArMjQ1LDExIEBAIHN0YXRpYyBib29sIGdldF9odWdlX3plcm9fZm9saW8odm9pZClcXG4gXFx0fVxcbiBcXHRXUklURV9PTkNFKGh1Z2VfemVyb19wZm4sIGZvbGlvX3Bmbih6ZXJvX2ZvbGlvKSk7XFxuIFxcbi1cXHQvKiBXZSB0YWtlIGFkZGl0aW9uYWwgcmVmZXJlbmNlIGhlcmUuIEl0IHdpbGwgYmUgcHV0IGJhY2sgYnkgc2hyaW5rZXIgKi9cXG4tXFx0YXRvbWljX3NldChcXHUwMDI2aHVnZV96ZXJvX3JlZmNvdW50LCAyKTtcXG4rXFx0LypcXG4rXFx0ICogUHVibGlzaCB0aGUgZm9saW8gYW5kIFBGTiBiZWZvcmUgbWFraW5nIHRoZW0gYXZhaWxhYmxlIHRvIGxvY2tsZXNzXFxuK1xcdCAqIHVzZXJzLiBQYWlycyB3aXRoIGEgc3VjY2Vzc2Z1bCBhdG9taWNfaW5jX25vdF96ZXJvKCkgYWJvdmUuXFxuK1xcdCAqL1xcbitcXHRhdG9taWNfc2V0X3JlbGVhc2UoXFx1MDAyNmh1Z2VfemVyb19yZWZjb3VudCwgMik7XFxuIFxcdHByZWVtcHRfZW5hYmxlKCk7XFxuIFxcdGNvdW50X3ZtX2V2ZW50KFRIUF9aRVJPX1BBR0VfQUxMT0MpO1xcbiBcXHRyZXR1cm4gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTE6NDE6MDUuOTEzNDgxMzA0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDM5NTMxNzM3NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvXCIsXG4gICAgXCJkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZVwiLFxuICAgIFwiY29weV9odWdlX3BtZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGJhcnJpZXIgaXNzdWUgaW4gZ2V0X2h1Z2VfemVyb19mb2xpbyBieSBjaGFuZ2luZyBhdG9taWNfc2V0IHRvIGF0b21pY19zZXRfcmVsZWFzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAodHJhbnNwYXJlbnQgaHVnZXBhZ2VzKSB0aGF0IGZpeGVzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIG1tX2dldF9odWdlX3plcm9fZm9saW8gYW5kIGl0cyBjYWxsZXJzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwZGJiMTIwNTI3YTJhNzVhNGE4MjcxNGVlODlkZWQ4YTZkMTY0YzdmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMTE6NDE6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggMDMyNzAyYTQ2MzdiYS4uNmM3NGQwMzc1Mzc3OSAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0yNDUsOCArMjQ1LDExIEBAIHN0YXRpYyBib29sIGdldF9odWdlX3plcm9fZm9saW8odm9pZClcbiBcdH1cbiBcdFdSSVRFX09OQ0UoaHVnZV96ZXJvX3BmbiwgZm9saW9fcGZuKHplcm9fZm9saW8pKTtcbiBcbi1cdC8qIFdlIHRha2UgYWRkaXRpb25hbCByZWZlcmVuY2UgaGVyZS4gSXQgd2lsbCBiZSBwdXQgYmFjayBieSBzaHJpbmtlciAqL1xuLVx0YXRvbWljX3NldChcdTAwMjZodWdlX3plcm9fcmVmY291bnQsIDIpO1xuK1x0LypcbitcdCAqIFB1Ymxpc2ggdGhlIGZvbGlvIGFuZCBQRk4gYmVmb3JlIG1ha2luZyB0aGVtIGF2YWlsYWJsZSB0byBsb2NrbGVzc1xuK1x0ICogdXNlcnMuIFBhaXJzIHdpdGggYSBzdWNjZXNzZnVsIGF0b21pY19pbmNfbm90X3plcm8oKSBhYm92ZS5cbitcdCAqL1xuK1x0YXRvbWljX3NldF9yZWxlYXNlKFx1MDAyNmh1Z2VfemVyb19yZWZjb3VudCwgMik7XG4gXHRwcmVlbXB0X2VuYWJsZSgpO1xuIFx0Y291bnRfdm1fZXZlbnQoVEhQX1pFUk9fUEFHRV9BTExPQyk7XG4gXHRyZXR1cm4gdHJ1ZTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDExOjQxOjA1LjkxMzQ4MjczNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyOTQ5MzUxNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0YXJnZXRpbmcgYG1tL2h1Z2VfbWVtb3J5LmNgLiBJbW1lZGlhdGVseSwgSSBzZWUgaXQncyB0b3VjaGluZyBgZ2V0X2h1Z2VfemVyb19mb2xpb2AsIGFuZCB0aGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgaW50ZXJlc3Rpbmcgc3R1ZmYgaGFwcGVucyB3aXRoIGh1Z2UgcGFnZXMuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgc3dpdGNoaW5nIGZyb20gYSBwbGFpbiBgYXRvbWljX3NldGAgdG8gYGF0b21pY19zZXRfcmVsZWFzZWAgb24gdGhlIGBodWdlX3plcm9fcmVmY291bnRgLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBpcyBhYm91dCBtZW1vcnkgYmFycmllciBzZW1hbnRpY3MuIFJpZ2h0LCB0aGUgc3VidGxlIGRhbmNlIGFyb3VuZCBzeW5jaHJvbml6YXRpb24gYW5kIHZpc2liaWxpdHkgYmV0d2VlbiB0aGUgQ1BVIGNvcmVzLiBUaGlzIGlzbid0IGp1c3QgYSBjb2RlIGNvc21ldGljLCBpdCdzIGEgKmZ1bmN0aW9uYWwqIG1vZGlmaWNhdGlvbiDigJMgYSBmaXggZm9yIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uLiBMZXQgbWUgZGl2ZSBpbnRvIHRoYXQgYGdldF9odWdlX3plcm9fZm9saW9gIGZ1bmN0aW9uIG5vdyBhbmQgc2VlIGV4YWN0bHkgaG93IHRoaXMgcmVsZWFzZSBzZW1hbnRpY3MgaGVscHMgcmVzb2x2ZSB0aGUgcmFjZS4gTGV0J3Mgc2VlIGhvdyB0aGUgcmVmZXJlbmNlIGNvdW50IGlzIHVzZWQgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDExOjQxOjA5LjIwODQxOTc2OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDYxNjk1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfaHVnZV96ZXJvX2ZvbGlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz0xMTQ9dW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjIzLVxcbm1tL2h1Z2VfbWVtb3J5LmM6MjI0OnN0YXRpYyBib29sIGdldF9odWdlX3plcm9fZm9saW8odm9pZClcXG5tbS9odWdlX21lbW9yeS5jLTIyNS17XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTI1OD1zdGF0aWMgdm9pZCBwdXRfaHVnZV96ZXJvX2ZvbGlvKHZvaWQpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTI2Ni1cXG5tbS9odWdlX21lbW9yeS5jOjI2NzpzdHJ1Y3QgZm9saW8gKm1tX2dldF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxubW0vaHVnZV9tZW1vcnkuYy0yNjgte1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yNzQtXFxubW0vaHVnZV9tZW1vcnkuYzoyNzU6XFx0aWYgKCFnZXRfaHVnZV96ZXJvX2ZvbGlvKCkpXFxubW0vaHVnZV9tZW1vcnkuYy0yNzYtXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTk1OT1zdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy05ODMtXFx0XFx0ICogaHVnZV96ZXJvX2ZvbGlvIHdpbGwgYWx3YXlzIGJlIE5VTEwgb24gZmFpbHVyZS4gV2UgYXNzdW1lXFxubW0vaHVnZV9tZW1vcnkuYzo5ODQ6XFx0XFx0ICogdGhhdCBnZXRfaHVnZV96ZXJvX2ZvbGlvKCkgd2lsbCBtb3N0IGxpa2VseSBub3QgZmFpbCBhc1xcbm1tL2h1Z2VfbWVtb3J5LmMtOTg1LVxcdFxcdCAqIHRocF9zaHJpbmtlcl9pbml0KCkgaXMgaW52b2tlZCBlYXJseSBvbiBkdXJpbmcgYm9vdC5cXG5tbS9odWdlX21lbW9yeS5jLTk4Ni1cXHRcXHQgKi9cXG5tbS9odWdlX21lbW9yeS5jOjk4NzpcXHRcXHRpZiAoIWdldF9odWdlX3plcm9fZm9saW8oKSlcXG5tbS9odWdlX21lbW9yeS5jLTk4OC1cXHRcXHRcXHRwcl93YXJuKFxcXCJBbGxvY2F0aW5nIHBlcnNpc3RlbnQgaHVnZSB6ZXJvIGZvbGlvIGZhaWxlZFxcXFxuXFxcIik7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTE0Nzk9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTUwMS1cXHRcXHRcXHRyZXR1cm4gVk1fRkFVTFRfT09NO1xcbm1tL2h1Z2VfbWVtb3J5LmM6MTUwMjpcXHRcXHR6ZXJvX2ZvbGlvID0gbW1fZ2V0X2h1Z2VfemVyb19mb2xpbyh2bWEtXFx1MDAzZXZtX21tKTtcXG5tbS9odWdlX21lbW9yeS5jLTE1MDMtXFx0XFx0aWYgKHVubGlrZWx5KCF6ZXJvX2ZvbGlvKSkge1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xODY3PWludCBjb3B5X2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdF9tbSwgc3RydWN0IG1tX3N0cnVjdCAqc3JjX21tLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xOTMwLVxcdFxcdC8qXFxubW0vaHVnZV9tZW1vcnkuYzoxOTMxOlxcdFxcdCAqIG1tX2dldF9odWdlX3plcm9fZm9saW8oKSB3aWxsIG5ldmVyIGFsbG9jYXRlIGEgbmV3XFxubW0vaHVnZV9tZW1vcnkuYy0xOTMyLVxcdFxcdCAqIGZvbGlvIGhlcmUsIHNpbmNlIHdlIGFscmVhZHkgaGF2ZSBhIHplcm8gcGFnZSB0b1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xOTM0LVxcdFxcdCAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6MTkzNTpcXHRcXHRtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKGRzdF9tbSk7XFxubW0vaHVnZV9tZW1vcnkuYy0xOTM2LVxcdFxcdGdvdG8gb3V0X3plcm9fcGFnZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTE6NDE6MDkuMjUzMDM5OTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjk5NjI4MTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZSBaZXJvIEZvbGlvIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBzb21ldGhpbmcgaW50ZXJlc3Rpbmc6IGBnZXRfaHVnZV96ZXJvX2ZvbGlvYCBpcyBkZWZpbmVkIGFzIGBzdGF0aWNgLiBUaGF0J3MgaW1wb3J0YW50LiBJdCBtZWFucyBpdCdzIGludGVybmFsIHRvIHRoZSBtb2R1bGUsIG5vdCBtZWFudCB0byBiZSBkaXJlY3RseSBhY2Nlc3NlZCBmcm9tIG91dHNpZGUuIEJ1dCB0aGVuIEkgc2VlIHRoaXMgZnVuY3Rpb24sIGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCwgd2hpY2ggKmlzKiBleHBvcnRlZCBhbmQgaXNuJ3Qgc3RhdGljLiBJdCdzIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBIbW0sIGxvb2tzIGxpa2UgYG1tX2dldF9odWdlX3plcm9fZm9saW9gIHByb2JhYmx5IGNhbGxzIGBnZXRfaHVnZV96ZXJvX2ZvbGlvYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdC4gTGV0J3MgZGl2ZSBpbnRvIGBtbS9odWdlX21lbW9yeS5jYCBhbmQgc2VlIGV4YWN0bHkgaG93IHRoZXkgaW50ZXJhY3QuIEdvdHRhIHVuZGVyc3RhbmQgdGhlIGZsb3cgYW5kIHdoYXQncyBnb2luZyBvbiBiZWhpbmQgdGhlIHNjZW5lcywgeW91IGtub3c/IFRoaXMgaXMgYSBrZXkgcGllY2Ugb2YgdGhlIHB1enpsZSBoZXJlLCBhbmQgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGludGVyYWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTc3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTE6NDE6MTIuNTUyNjY5OTI0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNjkxNzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1tX2dldF9odWdlX3plcm9fZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vaHVnZV9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTI1OD1zdGF0aWMgdm9pZCBwdXRfaHVnZV96ZXJvX2ZvbGlvKHZvaWQpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTI2Ni1cXG5tbS9odWdlX21lbW9yeS5jOjI2NzpzdHJ1Y3QgZm9saW8gKm1tX2dldF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxubW0vaHVnZV9tZW1vcnkuYy0yNjgte1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xNDc5PXZtX2ZhdWx0X3QgZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE1MDEtXFx0XFx0XFx0cmV0dXJuIFZNX0ZBVUxUX09PTTtcXG5tbS9odWdlX21lbW9yeS5jOjE1MDI6XFx0XFx0emVyb19mb2xpbyA9IG1tX2dldF9odWdlX3plcm9fZm9saW8odm1hLVxcdTAwM2V2bV9tbSk7XFxubW0vaHVnZV9tZW1vcnkuYy0xNTAzLVxcdFxcdGlmICh1bmxpa2VseSghemVyb19mb2xpbykpIHtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTg2Nz1pbnQgY29weV9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTkzMC1cXHRcXHQvKlxcbm1tL2h1Z2VfbWVtb3J5LmM6MTkzMTpcXHRcXHQgKiBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKCkgd2lsbCBuZXZlciBhbGxvY2F0ZSBhIG5ld1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTkzMi1cXHRcXHQgKiBmb2xpbyBoZXJlLCBzaW5jZSB3ZSBhbHJlYWR5IGhhdmUgYSB6ZXJvIHBhZ2UgdG9cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTkzNC1cXHRcXHQgKi9cXG5tbS9odWdlX21lbW9yeS5jOjE5MzU6XFx0XFx0bW1fZ2V0X2h1Z2VfemVyb19mb2xpbyhkc3RfbW0pO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTkzNi1cXHRcXHRnb3RvIG91dF96ZXJvX3BhZ2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDExOjQxOjEyLjU5NDM2Mzk2NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4OTUxMjA2ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEknbSBoYXZpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCBmb3IgUG90ZW50aWFsIFVzZSoqXG5cblJpZ2h0LCBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AgaXMgYW4gaW50ZXJlc3RpbmcgcG9pbnQgdG8gZGlnIGludG8uIEl0IGZlZWxzIGxpa2UgYSBrZXkgZnVuY3Rpb24gdG8gZXhwbG9yZS4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGl0cyBzY29wZS4gSXMgaXQgZXhwb3J0ZWQsIG1lYW5pbmcgaXQncyBpbnRlbmRlZCB0byBiZSB1c2VkIGV4dGVybmFsbHk/IE9yIGlzIGl0IGRlY2xhcmVkIGFzIG5vbi1zdGF0aWMsIHBlcmhhcHMgdmlzaWJsZSB3aXRoaW4gdGhlIG1vZHVsZSBidXQgbm90IGV4cGxpY2l0bHkgcHVibGljIGZvciBnZW5lcmFsIHVzZT8gVW5kZXJzdGFuZGluZyBpdHMgdmlzaWJpbGl0eSBpcyBjcnVjaWFsIHRvIGZpZ3VyaW5nIG91dCB3aGVyZSBhbmQgaG93IGl0IG1pZ2h0IGZpdCBpbnRvIG15IGN1cnJlbnQgb2JqZWN0aXZlLiBUaGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg3OSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDExOjQxOjE1LjQ4OTQ4Njc4N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjIyMzQxMSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qbW1fZ2V0X2h1Z2VfemVyb19mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdlX21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMTo0MToxNS41MzE3MTYxNzhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzkwODAxMTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeTpcblxuKipBbmFseXppbmcgYG1tX2dldF9odWdlX3plcm9fZm9saW9gKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbiBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AuIFRoZSBpbW1lZGlhdGUgb2JzZXJ2YXRpb24gaXMgdGhhdCBpdCdzICpub3QqIG1hcmtlZCBmb3IgZXhwb3J0LCBtZWFuaW5nIGl0J3MgaW50ZW5kZWQgZm9yIGludGVybmFsIHVzZSB3aXRoaW4gdGhlIG1vZHVsZSBvciBwcm9qZWN0IGl0J3MgZGVmaW5lZCBpbi4gSG93ZXZlciwgdGhlIGZhY3QgdGhhdCBpdCdzICpub3QqIGBzdGF0aWNgIHN1Z2dlc3RzIHRoYXQgc29tZXRoaW5nIGVsc2Ugd2l0aGluIHRoaXMgY29kZSBiYXNlIG5lZWRzIHRvIGNhbGwgaXQuIEl0J3Mgbm90IGxpbWl0ZWQgdG8gdGhlIGNvbXBpbGF0aW9uIHVuaXQuXG5cbk15IG5leHQgc3RlcCBoZXJlIGlzIHRvIGlkZW50aWZ5IHRob3NlIGNhbGxlcnMuIEtub3dpbmcgd2hlcmUgYW5kIGhvdyBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AgaXMgYmVpbmcgdXNlZCBpcyBjcnVjaWFsLiBJcyBpdCBvbmx5IHVzZWQgYnkgYSBzbWFsbCBwYXJ0IG9mIHRoZSBzeXN0ZW0gb3IgaXMgdGhpcyBmdW5jdGlvbiBjZW50cmFsIHRvIHRoZSBvcGVyYXRpb24gb2YgYSBrZXkgY29tcG9uZW50PyBXaGF0IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYXJlIHBvdGVudGlhbGx5IHRpZ2h0bHkgY291cGxlZCB3aXRoIHRoZSBpbXBsZW1lbnRhdGlvbiBhbmQgc2VtYW50aWNzIG9mIGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYD8gQnkgdHJhY2luZyBpdHMgdXNlLCBJIGNhbiBxdWlja2x5IGdhaW4gY29udGV4dCBhcm91bmQgaXRzIHB1cnBvc2UgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgYXJlYXMgb2YgY29uY2Vybiwgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMsIG9yIGRlcGVuZGVuY2llcy4gTGV0J3Mgc2VlIHdoZXJlIHRoaXMgcmFiYml0IGhvbGUgbGVhZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMTcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMTo0MToxOC45MjI1MTk1NjFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTA2NTYyMTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW1fZ2V0X2h1Z2VfemVyb19mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZGF4LmM9MTQxMT1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfcG1kX2xvYWRfaG9sZShzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuLS1cXG5mcy9kYXguYy0xNDE4LVxcbmZzL2RheC5jOjE0MTk6XFx0emVyb19mb2xpbyA9IG1tX2dldF9odWdlX3plcm9fZm9saW8odm1mLVxcdTAwM2V2bWEtXFx1MDAzZXZtX21tKTtcXG5mcy9kYXguYy0xNDIwLVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NTQ5PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19odWdlX3plcm9fcG1kKHBtZF90IHBtZClcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTU1My1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo1NTQ6c3RydWN0IGZvbGlvICptbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01NTUtdm9pZCBtbV9wdXRfaHVnZV96ZXJvX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTgwNj1zdGF0aWMgaW5saW5lIGludCBzcGxpdF9mb2xpb190b19vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X29yZGVyKVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtODEzLSAqXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6ODE0OiAqIFRoaXMgZnVuY3Rpb24gc2hhbGwgYmUgdXNlZCB3aGVuIG1tX2dldF9odWdlX3plcm9fZm9saW8oKSBjYW5ub3QgYmVcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC04MTUtICogdXNlZCBhcyB0aGVyZSBpcyBubyBhcHByb3ByaWF0ZSBtbSBsaWZldGltZSB0byB0aWUgdGhlIGh1Z2UgemVybyBmb2xpb1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yNTg9c3RhdGljIHZvaWQgcHV0X2h1Z2VfemVyb19mb2xpbyh2b2lkKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yNjYtXFxubW0vaHVnZV9tZW1vcnkuYzoyNjc6c3RydWN0IGZvbGlvICptbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjY4LXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTQ3OT12bV9mYXVsdF90IGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xNTAxLVxcdFxcdFxcdHJldHVybiBWTV9GQVVMVF9PT007XFxubW0vaHVnZV9tZW1vcnkuYzoxNTAyOlxcdFxcdHplcm9fZm9saW8gPSBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKHZtYS1cXHUwMDNldm1fbW0pO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTUwMy1cXHRcXHRpZiAodW5saWtlbHkoIXplcm9fZm9saW8pKSB7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTE4Njc9aW50IGNvcHlfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE5MzAtXFx0XFx0LypcXG5tbS9odWdlX21lbW9yeS5jOjE5MzE6XFx0XFx0ICogbW1fZ2V0X2h1Z2VfemVyb19mb2xpbygpIHdpbGwgbmV2ZXIgYWxsb2NhdGUgYSBuZXdcXG5tbS9odWdlX21lbW9yeS5jLTE5MzItXFx0XFx0ICogZm9saW8gaGVyZSwgc2luY2Ugd2UgYWxyZWFkeSBoYXZlIGEgemVybyBwYWdlIHRvXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE5MzQtXFx0XFx0ICovXFxubW0vaHVnZV9tZW1vcnkuYzoxOTM1OlxcdFxcdG1tX2dldF9odWdlX3plcm9fZm9saW8oZHN0X21tKTtcXG5tbS9odWdlX21lbW9yeS5jLTE5MzYtXFx0XFx0Z290byBvdXRfemVyb19wYWdlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMTo0MToyMC40NzMxODA0OTVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM0NTc1MzEzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCBGdW5jdGlvbiBhbmQgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzKipcblxuT2theSwgc28gYG1tX2dldF9odWdlX3plcm9fZm9saW9gIHNlZW1zIGxpa2UgYSBrZXkgZnVuY3Rpb24gdG8gZm9jdXMgb24gaGVyZS4gSXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhpcyBhcmVhLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFyZSBwcmVyZXF1aXNpdGVzIG9yIHJlbGF0ZWQgdG8gaXQ/IEkgc2hvdWxkIGNoZWNrIGFuZCBzZWUgaWYgaXQgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZC5cblxuUmlnaHQsIGBtbS9odWdlX21lbW9yeS5jYCBpcyB0aGUgbGlrZWx5IGxvY2F0aW9uLiBJIHJlY2FsbCB0aGF0IGl0J3MgY29tcGlsZWQgd2hlbiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBlbmFibGVkLCBvciBhdCBsZWFzdCB0aGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBjb2RlLiBTbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGNvbXBpbGF0aW9uIGNvbmRpdGlvbnMgYW5kIGxvb2sgYXQgb3RoZXIgc291cmNlIGZpbGVzIHRoYXQgbWF5IGluY2x1ZGUgdGhpcyBmdW5jdGlvbi4gVGhpcyBzaG91bGQgaGVscCBtZSBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBjb250ZXh0IGFuZCBwb3RlbnRpYWwgY29tcGxleGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTk5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTE6NDE6MjMuODE4OTM2MjExWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTM0NjI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdlX21lbW9yeS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTEwMD1vYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgKz0gbWlncmF0ZV9kZXZpY2Uub1xcbm1tL01ha2VmaWxlOjEwMTpvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXFxubW0vTWFrZWZpbGUtMTAyLW9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICs9IHBhZ2VfY291bnRlci5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDExOjQxOjIzLjg2NDI4NjgzMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjk3NTI0MjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTWVtb3J5IE1hbmFnZW1lbnQgQ29uZmlndXJhdGlvbiBBc3Nlc3NtZW50KipcblxuQWxyaWdodCwgc28gdGhlIGNvcmUgaXNzdWUgYXQgaGFuZCBpcyB0aGUgcmVxdWlyZW1lbnQgZm9yIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIFRoYXQncyB0aGUgYmFzZWxpbmUgYXNzdW1wdGlvbiwgdGhlIGluaXRpYWwgZm9jYWwgcG9pbnQuIE5vdywgZ2l2ZW4gdGhhdCdzIHRoZSBzdGFydGluZyBwb2ludCwgbXkgbmV4dCBsaW5lIG9mIGlucXVpcnkgaGFzIHRvIGJlIHRvIGxvb2sgYXJvdW5kIGFuZCBtYWtlIHN1cmUgdGhhdCB3ZSBhcmVuJ3Qgb3Zlcmxvb2tpbmcgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlIGdvYWwgaXMgYSBjb21wcmVoZW5zaXZlIGFzc2Vzc21lbnQsIGVuc3VyaW5nIG5vdGhpbmcgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBvciByZWxhdGVkIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zIGdldHMgbGVmdCBieSB0aGUgd2F5c2lkZS4gTGV0J3Mgc2VlIHdoYXQgZWxzZSB0aGUgY29uZmlndXJhdGlvbiBwcmVzZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU4NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDExOjQxOjI3LjE2MTgxMzgzN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyMDY5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04NDM9Y29uZmlnIE1NX0lEXFxuLS1cXG5tbS9LY29uZmlnLTg0NS1cXG5tbS9LY29uZmlnOjg0NjptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy04NDctXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG4tLVxcbm1tL0tjb25maWc9ODY0PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy04NjktXFxubW0vS2NvbmZpZzo4NzA6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xcbm1tL0tjb25maWctODcxLVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctODc2LVxcbm1tL0tjb25maWc6ODc3OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXFxubW0vS2NvbmZpZy04NzgtXFx0XFx0Ym9vbCBcXFwibWFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODg1LVxcbm1tL0tjb25maWc6ODg2OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxcbm1tL0tjb25maWctODg3LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZz04OTM9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTkwMi1cXG5tbS9LY29uZmlnOjkwMzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxcbm1tL0tjb25maWctOTA0LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MTItXFxubW0vS2NvbmZpZzo5MTM6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy05MTQtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MjAtXFxubW0vS2NvbmZpZzo5MjE6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTkyMi1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTI4LVxcbm1tL0tjb25maWc6OTI5OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTMwLVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWc9OTM4PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy05NDctXFxubW0vS2NvbmZpZzo5NDg6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcXG5tbS9LY29uZmlnLTk0OS1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWctOTU2LVxcbm1tL0tjb25maWc6OTU3OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xcbm1tL0tjb25maWctOTU4LVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctOTY0LVxcbm1tL0tjb25maWc6OTY1OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXFxubW0vS2NvbmZpZy05NjYtXFx0XFx0Ym9vbCBcXFwid2l0aGluX3NpemVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk3Mi1cXG5tbS9LY29uZmlnOjk3MzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0VcXG5tbS9LY29uZmlnLTk3NC1cXHRcXHRib29sIFxcXCJhZHZpc2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDExOjQxOjI3LjIwNjAyNDkwN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODU4ODQ0MTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBNZW1vcnkgQmFycmllciBGaXgqKlxuXG5Pa2F5LCBzbyB0aGUgZml4IGl0c2VsZiBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHRoZSBrZXkuIEZ1bmN0aW9uYWxseSwgaXQgZG9lcyB0aGUgdHJpY2ssIHJlc29sdmluZyB0aGF0IG1lbW9yeSBiYXJyaWVyIGlzc3VlLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AsIHRoYXQgc2VlbXMgdG8gYmUgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uLiBBbmQgdGhlIG9ubHkgY29uZmlnIG5lZWRlZCBpcyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLlxuXG5Ob3csIGxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSBpZiBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AgaXMgdGhlICpvbmx5KiBwZXJ0aW5lbnQgc3ltYm9sIGhlcmUuIFRoZSBmdW5jdGlvbiBgZ2V0X2h1Z2VfemVyb19mb2xpb2AgaXNuJ3QgZ29pbmcgdG8gd29yaywgYXMgaXQncyBzdGF0aWMsIHNvIGl0J3Mgbm90IGEgcmVsZXZhbnQgc3ltYm9sIHRvIGNoZWNrLiBBbm90aGVyIGZ1bmN0aW9uIEkgc2hvdWxkIGxvb2sgYXQgaXMgYGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYDsgdGhhdCBsb29rcyBsaWtlIGFub3RoZXIgbGlrZWx5IGNhbmRpZGF0ZSB0byBleGFtaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDkxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDExOjQxOjMxLjA2NDg3MTYzMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3ODQxODg5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdlX21tLmgtOS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoxMDp2bV9mYXVsdF90IGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0xMS1pbnQgY29weV9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTMzMT1zdGF0aWMgdm9pZCBtYXBfYW5vbl9mb2xpb19wbWRfcGYoc3RydWN0IGZvbGlvICpmb2xpbywgcG1kX3QgKnBtZCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTM0MC1cXG5tbS9odWdlX21lbW9yeS5jOjEzNDE6c3RhdGljIHZtX2ZhdWx0X3QgX19kb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG5tbS9odWdlX21lbW9yeS5jLTEzNDIte1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xNDY3PXN0YXRpYyB2b2lkIHNldF9odWdlX3plcm9fZm9saW8ocGd0YWJsZV90IHBndGFibGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xNDc4LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTQ3OTp2bV9mYXVsdF90IGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTQ4MC17XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE1MzItXFxubW0vaHVnZV9tZW1vcnkuYzoxNTMzOlxcdHJldHVybiBfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHZtZik7XFxubW0vaHVnZV9tZW1vcnkuYy0xNTM0LX1cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MjM5OD1zdGF0aWMgYm9vbCBoYXNfZGVwb3NpdGVkX3BndGFibGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90IHBtZHZhbCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjQxMy1cXHQgKiBPdGhlcndpc2UsIG9ubHkgYW5vbnltb3VzIGZvbGlvcyBhcmUgZGVwb3NpdGVkLCBzZWVcXG5tbS9odWdlX21lbW9yeS5jOjI0MTQ6XFx0ICogX19kb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZSgpLlxcbm1tL2h1Z2VfbWVtb3J5LmMtMjQxNS1cXHQgKi9cXG4tLVxcbm1tL21lbW9yeS5jPTYyMDA9c3RhdGljIGlubGluZSB2bV9mYXVsdF90IGNyZWF0ZV9odWdlX3BtZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTYyMDMtXFx0aWYgKHZtYV9pc19hbm9ueW1vdXModm1hKSlcXG5tbS9tZW1vcnkuYzo2MjA0OlxcdFxcdHJldHVybiBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZSh2bWYpO1xcbm1tL21lbW9yeS5jLTYyMDUtXFx0aWYgKHZtYS1cXHUwMDNldm1fb3BzLVxcdTAwM2VodWdlX2ZhdWx0KVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz03NzA9RVhQT1JUX1NZTUJPTChtaWdyYXRlX3ZtYV9zZXR1cCk7XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTc3OC0gKiBAcGFnZSBuZWVkcyB0byBiZSBpbml0aWFsaXplZCBhbmQgc2V0dXAgYWZ0ZXIgaXQncyBhbGxvY2F0ZWQuIFRoZSBjb2RlIGJpdHNcXG5tbS9taWdyYXRlX2RldmljZS5jOjc3OTogKiBoZXJlIGZvbGxvdyBjbG9zZWx5IHRoZSBjb2RlIGluIF9fZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2UoKS4gVGhpcyBBUEkgZG9lc1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzgwLSAqIG5vdCBzdXBwb3J0IFRIUCB6ZXJvIHBhZ2VzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMTo0MTozMi42NDMyOTU2NDlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgwNzgwNTM5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBLZXkgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIHRoYXQgYGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCBpcyBhIHJlYWxseSBzb2xpZCBjYW5kaWRhdGUgYXMgYSBmb2N1cyBzeW1ib2wuIEl0J3MgYSBrZXkgZnVuY3Rpb24gaW4gaGFuZGxpbmcgYW5vbnltb3VzIGh1Z2UgcGFnZXMsIHNvIGl0IHNob3VsZCBiZSBxdWl0ZSBpbmZvcm1hdGl2ZSB0byBhbmFseXplLiBBbmQsIGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCBpcyBhbm90aGVyIHN0cm9uZyBjb250ZW5kZXIuXG5cbkkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgY2FsbGVycyBvZiBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AsIGp1c3QgdG8gY29uZmlybSBteSB0aGlua2luZyBhbmQgZXhwYW5kIHRoZSBjb250ZXh0LiBMZXQgbWUgc2VlLi4uIHllcywgaXQgbG9va3MgbGlrZSBgZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2VgLCBgY29weV9odWdlX3BtZGAsIGFuZCBgZGF4X3BtZF9sb2FkX2hvbGVgIGFyZSBhbGwgY2FsbGluZyBpdC4gUGVyZmVjdC5cblxuUmlnaHQsIHNvIEknbGwgYWRkIGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCwgYGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCwgYGNvcHlfaHVnZV9wbWRgLCBhbmQgYGRheF9wbWRfbG9hZF9ob2xlYCB0byBteSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMuIEl0J3MgaW1wb3J0YW50IHRvIGhhdmUgYSBnb29kIHNldC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBgY29weV9odWdlX3BtZGAgYW5kIGBkYXhfcG1kX2xvYWRfaG9sZWAsIGJlY2F1c2UgdGhleSBkb24ndCBzZWVtIGFzIG9idmlvdXMgYXQgZmlyc3QgZ2xhbmNlLiBJIHdpbGwgY2hlY2sgdGhlbSBvdXQsIGFuZCBzZWUgd2hhdCB0aGUgZnVuY3Rpb24gZG9lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU0OSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMTo0MTozNy40NTExMDI4NTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzA2MDk1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29weV9odWdlX3BtZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdlX21tLmg9MTA9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MTE6aW50IGNvcHlfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMTItXFx0XFx0ICBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTgxMT1zdGF0aWMgdm9pZCBjb3B5X2h1Z2Vfbm9uX3ByZXNlbnRfcG1kKFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xODY2LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTg2NzppbnQgY29weV9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcXG5tbS9odWdlX21lbW9yeS5jLTE4NjgtXFx0XFx0ICBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL21lbW9yeS5jPTEzNzk9Y29weV9wbWRfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEsXFxuLS1cXG5tbS9tZW1vcnkuYy0xMzk3LVxcdFxcdFxcdFZNX0JVR19PTl9WTUEobmV4dC1hZGRyICE9IEhQQUdFX1BNRF9TSVpFLCBzcmNfdm1hKTtcXG5tbS9tZW1vcnkuYzoxMzk4OlxcdFxcdFxcdGVyciA9IGNvcHlfaHVnZV9wbWQoZHN0X21tLCBzcmNfbW0sIGRzdF9wbWQsIHNyY19wbWQsXFxubW0vbWVtb3J5LmMtMTM5OS1cXHRcXHRcXHRcXHRcXHQgICAgYWRkciwgZHN0X3ZtYSwgc3JjX3ZtYSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDExOjQxOjM4Ljg4MTcxNzAwN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjgyMTU0MTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk15IFBlcnNwZWN0aXZlIG9uIGBjb3B5X2h1Z2VfcG1kYCoqXG5cblJpZ2h0LCBgY29weV9odWdlX3BtZGAuLi4geWVhaCwgdGhhdCdzIGEgc29saWQgcGllY2Ugb2Ygd29yay4gRnJvbSBhIHBlcmZvcm1hbmNlIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBzdGFuZHBvaW50LCBpdCdzIHByZXR0eSBlbGVnYW50LiBUaGUgaW5oZXJlbnQgYWR2YW50YWdlcyBvZiBkZWFsaW5nIHdpdGggaHVnZSBwYWdlcyBhcmUgd2VsbC11bmRlcnN0b29kLCBhbmQgdGhlIGBjb3B5X2h1Z2VfcG1kYCBpbXBsZW1lbnRhdGlvbiBjbGVhcmx5IGxldmVyYWdlcyB0aG9zZSB0byBvcHRpbWl6ZSBkYXRhIG1vdmVtZW50LiBJJ3ZlIHNlZW4gc29tZSBpbXBsZW1lbnRhdGlvbnMgc3RydWdnbGUgd2l0aCB0aGUgY29tcGxleGl0aWVzLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIG5lc3RlZCBwYWdlIHRhYmxlcyBvciBkaWZmZXJlbnQgaGFyZHdhcmUgYXJjaGl0ZWN0dXJlcy4gQnV0IGJhc2VkIG9uIG15IGluaXRpYWwgcmV2aWV3LCB0aGlzIHNvbHV0aW9uIHNlZW1zIHJvYnVzdCBhbmQgY29uc2lkZXJzIHRob3NlIHBvdGVudGlhbCBwaXRmYWxscy4gVGhlIGRlc2lnbiBkZWNpc2lvbnMgYXBwZWFyIHNvdW5kLCB3aXRoIGF0dGVudGlvbiBnaXZlbiB0byBtaW5pbWl6aW5nIFRMQiBmbHVzaGVzIGFuZCBtYXhpbWl6aW5nIGNhY2hlIHV0aWxpemF0aW9uLiBJJ2QgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIHNwZWNpZmljIGhhcmR3YXJlIGludGVyYWN0aW9ucywgcGFydGljdWxhcmx5IGZvciBteSB1c2UgY2FzZSBidXQgSSBsaWtlIHRoZSBhcHByb2FjaC4gT3ZlcmFsbCwgaXQgaW5kaWNhdGVzIGEgc3Ryb25nIGdyYXNwIG9mIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBoaWVyYXJjaHkgYW5kIGEgY29tbWl0bWVudCB0byBlZmZpY2llbnQgZGF0YSB0cmFuc2Zlci5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQyMCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDExOjQxOjQyLjU2Mzg3MzM0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE4NTM0NTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRheF9wbWRfbG9hZF9ob2xlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9kYXguYz0xMzk1PXN0YXRpYyB2bV9mYXVsdF90IGRheF9sb2FkX2hvbGUoc3RydWN0IHhhX3N0YXRlICp4YXMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi0tXFxuZnMvZGF4LmMtMTQxMC0jaWZkZWYgQ09ORklHX0ZTX0RBWF9QTURcXG5mcy9kYXguYzoxNDExOnN0YXRpYyB2bV9mYXVsdF90IGRheF9wbWRfbG9hZF9ob2xlKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG5mcy9kYXguYy0xNDEyLVxcdFxcdGNvbnN0IHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCB2b2lkICoqZW50cnkpXFxuLS1cXG5mcy9kYXguYy0xNDIxLVxcdGlmICh1bmxpa2VseSghemVyb19mb2xpbykpIHtcXG5mcy9kYXguYzoxNDIyOlxcdFxcdHRyYWNlX2RheF9wbWRfbG9hZF9ob2xlX2ZhbGxiYWNrKGlub2RlLCB2bWYsIHplcm9fZm9saW8sICplbnRyeSk7XFxuZnMvZGF4LmMtMTQyMy1cXHRcXHRyZXR1cm4gVk1fRkFVTFRfRkFMTEJBQ0s7XFxuLS1cXG5mcy9kYXguYy0xNDMwLVxcdGlmIChyZXQgPT0gVk1fRkFVTFRfTk9QQUdFKVxcbmZzL2RheC5jOjE0MzE6XFx0XFx0dHJhY2VfZGF4X3BtZF9sb2FkX2hvbGUoaW5vZGUsIHZtZiwgemVyb19mb2xpbywgKmVudHJ5KTtcXG5mcy9kYXguYy0xNDMyLVxcdHJldHVybiByZXQ7XFxuLS1cXG5mcy9kYXguYy0xNDM0LSNlbHNlXFxuZnMvZGF4LmM6MTQzNTpzdGF0aWMgdm1fZmF1bHRfdCBkYXhfcG1kX2xvYWRfaG9sZShzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuZnMvZGF4LmMtMTQzNi1cXHRcXHRjb25zdCBzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgdm9pZCAqKmVudHJ5KVxcbi0tXFxuZnMvZGF4LmM9MTg0Mj1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfZmF1bHRfaXRlcihzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbmZzL2RheC5jLTE4NjQtXFx0XFx0XFx0cmV0dXJuIGRheF9sb2FkX2hvbGUoeGFzLCB2bWYsIGl0ZXIsIGVudHJ5KTtcXG5mcy9kYXguYzoxODY1OlxcdFxcdHJldHVybiBkYXhfcG1kX2xvYWRfaG9sZSh4YXMsIHZtZiwgaXRlciwgZW50cnkpO1xcbmZzL2RheC5jLTE4NjYtXFx0fVxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZnNfZGF4Lmg9NjE9REVGSU5FX1BNRF9GQVVMVF9FVkVOVChkYXhfcG1kX2ZhdWx0X2RvbmUpO1xcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2ZzX2RheC5oLTYyLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2ZzX2RheC5oOjYzOkRFQ0xBUkVfRVZFTlRfQ0xBU1MoZGF4X3BtZF9sb2FkX2hvbGVfY2xhc3MsXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZnNfZGF4LmgtNjQtXFx0VFBfUFJPVE8oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9mc19kYXguaC05Ni0jZGVmaW5lIERFRklORV9QTURfTE9BRF9IT0xFX0VWRU5UKG5hbWUpIFxcXFxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9mc19kYXguaDo5NzpERUZJTkVfRVZFTlQoZGF4X3BtZF9sb2FkX2hvbGVfY2xhc3MsIG5hbWUsIFxcXFxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9mc19kYXguaC05OC1cXHRUUF9QUk9UTyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgXFxcXFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZnNfZGF4LmgtMTAxLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2ZzX2RheC5oOjEwMjpERUZJTkVfUE1EX0xPQURfSE9MRV9FVkVOVChkYXhfcG1kX2xvYWRfaG9sZSk7XFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZnNfZGF4Lmg6MTAzOkRFRklORV9QTURfTE9BRF9IT0xFX0VWRU5UKGRheF9wbWRfbG9hZF9ob2xlX2ZhbGxiYWNrKTtcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9mc19kYXguaC0xMDQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDExOjQxOjQzLjk4MjQxMTY4MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODAyMDgwNDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIHRoZSBSaWdodCBTeW1ib2xzKipcblxuT2theSwgc28gSSdtIGV2YWx1YXRpbmcgZm9jdXMgc3ltYm9scyBmb3IgdGhpcyBhbmFseXNpcy4gSW5pdGlhbGx5LCBJIGNvbnNpZGVyZWQgYGRheF9wbWRfbG9hZF9ob2xlYCwgYnV0IHRoZW4gcmVhbGl6ZWQgaXQncyBzdGF0aWMsIHdoaWNoIG1ha2VzIGl0IGxlc3MgdGhhbiBpZGVhbC4gYGRheF9mYXVsdF9pdGVyYCBoYXMgdGhlIHNhbWUgcHJvYmxlbSwgYmVpbmcgc3RhdGljIGFzIHdlbGwuIEkgbmVlZCBub24tc3RhdGljIHN5bWJvbHMgZm9yIGEgYmV0dGVyIHZpZXcuXG5cbkxldCdzIHN3aXRjaCB0byBhIG5ldyBzZXQgb2YgcG9zc2libGUgdGFyZ2V0cy4gRm9jdXNpbmcgb24gdGhlIG1vcmUgZ2VuZXJhbCBodWdlIHBhZ2UgaGFuZGxpbmcsIGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCwgYGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCwgYW5kIGBjb3B5X2h1Z2VfcG1kYCBzb3VuZCBtb3JlIHByb21pc2luZy5cblxuQWgsIGdvb2QsIGEgcXVpY2sgY2hlY2sgY29uZmlybXMgdGhhdCBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AsIGBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAsIGFuZCBgY29weV9odWdlX3BtZGAgYXJlIGFsbCBpbmRlZWQgbm9uLXN0YXRpYyBzeW1ib2xzLiBQZXJmZWN0ISBUaGVzZSBhcmUgbXVjaCBiZXR0ZXIgY2hvaWNlcyBmb3IgYSBtb3JlIGR5bmFtaWMgdW5kZXJzdGFuZGluZy5cblxuTm93LCBsZXQgbWUganVzdCBjb25maXJtIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgaWYgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyB0aGUgb25seSBjb25maWcgSSBuZWVkIHRvIGNvbnNpZGVyLiBJIGRvbid0IHdhbnQgdG8gZ2V0IHNpZGUtdHJhY2tlZCBsb29raW5nIGF0IG9wdGlvbnMgdGhhdCBJIGRvbid0IG5lZWQuXG5cbkFscmlnaHQsIGEgcXVpY2sgc2NhbiBjb25maXJtcyB0aGF0IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgc3VmZmljaWVudC4gR3JlYXQuXG5cbk5vdyB0aGF0IEkgaGF2ZSBhIGZvY3VzZWQgc2V0IG9mIHN5bWJvbHMgYW5kIGhhdmUgdmVyaWZpZWQgdGhlIGNvbmZpZywgbGV0J3MgcHJvY2VlZCB0byBzZXQgdGhlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1NTAsIk91dHB1dFRva2VucyI6MTQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDExOjQxOjQ5Ljc4NDQ5MzkzM1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMTU3MzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1tX2dldF9odWdlX3plcm9fZm9saW9cIixcbiAgICBcImRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlXCIsXG4gICAgXCJjb3B5X2h1Z2VfcG1kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgYmFycmllciBpc3N1ZSBpbiBnZXRfaHVnZV96ZXJvX2ZvbGlvIGJ5IGNoYW5naW5nIGF0b21pY19zZXQgdG8gYXRvbWljX3NldF9yZWxlYXNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtICh0cmFuc3BhcmVudCBodWdlcGFnZXMpIHRoYXQgZml4ZXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24uIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgbW1fZ2V0X2h1Z2VfemVyb19mb2xpbyBhbmQgaXRzIGNhbGxlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvXCIsXG4gICAgXCJkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZVwiLFxuICAgIFwiY29weV9odWdlX3BtZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGJhcnJpZXIgaXNzdWUgaW4gZ2V0X2h1Z2VfemVyb19mb2xpbyBieSBjaGFuZ2luZyBhdG9taWNfc2V0IHRvIGF0b21pY19zZXRfcmVsZWFzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAodHJhbnNwYXJlbnQgaHVnZXBhZ2VzKSB0aGF0IGZpeGVzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIG1tX2dldF9odWdlX3plcm9fZm9saW8gYW5kIGl0cyBjYWxsZXJzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowd94sj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-30 11:24:54 +0000 UTC FinishedAt: 2026-07-30 11:41:51 +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": "99cea7eb5216ff688a597595e93c123823865674", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "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": "99cea7eb5216ff688a597595e93c123823865674", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "series_id": "537b71d7-8297-4fe4-bd9a-adc2b6e32131" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "mm_get_huge_zero_folio", "do_huge_pmd_anonymous_page", "copy_huge_pmd" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMwIDExOjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bW1fZ2V0X2h1Z2VfemVyb19mb2xpbyYjMzQ7LAogICAgJiMzNDtkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZSYjMzQ7LAogICAgJiMzNDtjb3B5X2h1Z2VfcG1kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGJhcnJpZXIgaXNzdWUgaW4gZ2V0X2h1Z2VfemVyb19mb2xpbyBieSBjaGFuZ2luZyBhdG9taWNfc2V0IHRvIGF0b21pY19zZXRfcmVsZWFzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAodHJhbnNwYXJlbnQgaHVnZXBhZ2VzKSB0aGF0IGZpeGVzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIG1tX2dldF9odWdlX3plcm9fZm9saW8gYW5kIGl0cyBjYWxsZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDExOjQxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMGRiYjEyMDUyN2EyYTc1YTRhODI3MTRlZTg5ZGVkOGE2ZDE2NGM3ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDExOjQxOjA0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCAwMzI3MDJhNDYzN2JhLi42Yzc0ZDAzNzUzNzc5IDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTI0NSw4ICYjNDM7MjQ1LDExIEBAIHN0YXRpYyBib29sIGdldF9odWdlX3plcm9fZm9saW8odm9pZClcbiBcdH1cbiBcdFdSSVRFX09OQ0UoaHVnZV96ZXJvX3BmbiwgZm9saW9fcGZuKHplcm9fZm9saW8pKTtcbiBcbi1cdC8qIFdlIHRha2UgYWRkaXRpb25hbCByZWZlcmVuY2UgaGVyZS4gSXQgd2lsbCBiZSBwdXQgYmFjayBieSBzaHJpbmtlciAqL1xuLVx0YXRvbWljX3NldChcdTAwMjZodWdlX3plcm9fcmVmY291bnQsIDIpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUHVibGlzaCB0aGUgZm9saW8gYW5kIFBGTiBiZWZvcmUgbWFraW5nIHRoZW0gYXZhaWxhYmxlIHRvIGxvY2tsZXNzXG4mIzQzO1x0ICogdXNlcnMuIFBhaXJzIHdpdGggYSBzdWNjZXNzZnVsIGF0b21pY19pbmNfbm90X3plcm8oKSBhYm92ZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRhdG9taWNfc2V0X3JlbGVhc2UoXHUwMDI2aHVnZV96ZXJvX3JlZmNvdW50LCAyKTtcbiBcdHByZWVtcHRfZW5hYmxlKCk7XG4gXHRjb3VudF92bV9ldmVudChUSFBfWkVST19QQUdFX0FMTE9DKTtcbiBcdHJldHVybiB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDExOjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21tX2dldF9odWdlX3plcm9fZm9saW8mIzM0OywKICAgICYjMzQ7ZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2UmIzM0OywKICAgICYjMzQ7Y29weV9odWdlX3BtZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBiYXJyaWVyIGlzc3VlIGluIGdldF9odWdlX3plcm9fZm9saW8gYnkgY2hhbmdpbmcgYXRvbWljX3NldCB0byBhdG9taWNfc2V0X3JlbGVhc2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKHRyYW5zcGFyZW50IGh1Z2VwYWdlcykgdGhhdCBmaXhlcyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbi4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvIGFuZCBpdHMgY2FsbGVycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDBkYmIxMjA1MjdhMmE3NWE0YTgyNzE0ZWU4OWRlZDhhNmQxNjRjN2YKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAzMCAxMTo0MTowNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IDAzMjcwMmE0NjM3YmEuLjZjNzRkMDM3NTM3NzkgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtMjQ1LDggJiM0MzsyNDUsMTEgQEAgc3RhdGljIGJvb2wgZ2V0X2h1Z2VfemVyb19mb2xpbyh2b2lkKQogCX0KIAlXUklURV9PTkNFKGh1Z2VfemVyb19wZm4sIGZvbGlvX3Bmbih6ZXJvX2ZvbGlvKSk7CiAKLQkvKiBXZSB0YWtlIGFkZGl0aW9uYWwgcmVmZXJlbmNlIGhlcmUuIEl0IHdpbGwgYmUgcHV0IGJhY2sgYnkgc2hyaW5rZXIgKi8KLQlhdG9taWNfc2V0KCZhbXA7aHVnZV96ZXJvX3JlZmNvdW50LCAyKTsKJiM0MzsJLyoKJiM0MzsJICogUHVibGlzaCB0aGUgZm9saW8gYW5kIFBGTiBiZWZvcmUgbWFraW5nIHRoZW0gYXZhaWxhYmxlIHRvIGxvY2tsZXNzCiYjNDM7CSAqIHVzZXJzLiBQYWlycyB3aXRoIGEgc3VjY2Vzc2Z1bCBhdG9taWNfaW5jX25vdF96ZXJvKCkgYWJvdmUuCiYjNDM7CSAqLwomIzQzOwlhdG9taWNfc2V0X3JlbGVhc2UoJmFtcDtodWdlX3plcm9fcmVmY291bnQsIDIpOwogCXByZWVtcHRfZW5hYmxlKCk7CiAJY291bnRfdm1fZXZlbnQoVEhQX1pFUk9fUEFHRV9BTExPQyk7CiAJcmV0dXJuIHRydWU7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDExOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRhcmdldGluZyBgbW0vaHVnZV9tZW1vcnkuY2AuIEltbWVkaWF0ZWx5LCBJIHNlZSBpdCYjMzk7cyB0b3VjaGluZyBgZ2V0X2h1Z2VfemVyb19mb2xpb2AsIGFuZCB0aGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIGludGVyZXN0aW5nIHN0dWZmIGhhcHBlbnMgd2l0aCBodWdlIHBhZ2VzLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIHN3aXRjaGluZyBmcm9tIGEgcGxhaW4gYGF0b21pY19zZXRgIHRvIGBhdG9taWNfc2V0X3JlbGVhc2VgIG9uIHRoZSBgaHVnZV96ZXJvX3JlZmNvdW50YC4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgaXMgYWJvdXQgbWVtb3J5IGJhcnJpZXIgc2VtYW50aWNzLiBSaWdodCwgdGhlIHN1YnRsZSBkYW5jZSBhcm91bmQgc3luY2hyb25pemF0aW9uIGFuZCB2aXNpYmlsaXR5IGJldHdlZW4gdGhlIENQVSBjb3Jlcy4gVGhpcyBpc24mIzM5O3QganVzdCBhIGNvZGUgY29zbWV0aWMsIGl0JiMzOTtzIGEgKmZ1bmN0aW9uYWwqIG1vZGlmaWNhdGlvbiDigJMgYSBmaXggZm9yIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uLiBMZXQgbWUgZGl2ZSBpbnRvIHRoYXQgYGdldF9odWdlX3plcm9fZm9saW9gIGZ1bmN0aW9uIG5vdyBhbmQgc2VlIGV4YWN0bHkgaG93IHRoaXMgcmVsZWFzZSBzZW1hbnRpY3MgaGVscHMgcmVzb2x2ZSB0aGUgcmFjZS4gTGV0JiMzOTtzIHNlZSBob3cgdGhlIHJlZmVyZW5jZSBjb3VudCBpcyB1c2VkIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTE6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2V0X2h1Z2VfemVyb19mb2xpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz0xMTQ9dW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTIyMy1cbm1tL2h1Z2VfbWVtb3J5LmM6MjI0OnN0YXRpYyBib29sIGdldF9odWdlX3plcm9fZm9saW8odm9pZClcbm1tL2h1Z2VfbWVtb3J5LmMtMjI1LXtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTI1OD1zdGF0aWMgdm9pZCBwdXRfaHVnZV96ZXJvX2ZvbGlvKHZvaWQpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yNjYtXG5tbS9odWdlX21lbW9yeS5jOjI2NzpzdHJ1Y3QgZm9saW8gKm1tX2dldF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5tbS9odWdlX21lbW9yeS5jLTI2OC17XG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yNzQtXG5tbS9odWdlX21lbW9yeS5jOjI3NTpcdGlmICghZ2V0X2h1Z2VfemVyb19mb2xpbygpKVxubW0vaHVnZV9tZW1vcnkuYy0yNzYtXHRcdHJldHVybiBOVUxMO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9OTU5PXN0YXRpYyBpbnQgX19pbml0IHRocF9zaHJpbmtlcl9pbml0KHZvaWQpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy05ODMtXHRcdCAqIGh1Z2VfemVyb19mb2xpbyB3aWxsIGFsd2F5cyBiZSBOVUxMIG9uIGZhaWx1cmUuIFdlIGFzc3VtZVxubW0vaHVnZV9tZW1vcnkuYzo5ODQ6XHRcdCAqIHRoYXQgZ2V0X2h1Z2VfemVyb19mb2xpbygpIHdpbGwgbW9zdCBsaWtlbHkgbm90IGZhaWwgYXNcbm1tL2h1Z2VfbWVtb3J5LmMtOTg1LVx0XHQgKiB0aHBfc2hyaW5rZXJfaW5pdCgpIGlzIGludm9rZWQgZWFybHkgb24gZHVyaW5nIGJvb3QuXG5tbS9odWdlX21lbW9yeS5jLTk4Ni1cdFx0ICovXG5tbS9odWdlX21lbW9yeS5jOjk4NzpcdFx0aWYgKCFnZXRfaHVnZV96ZXJvX2ZvbGlvKCkpXG5tbS9odWdlX21lbW9yeS5jLTk4OC1cdFx0XHRwcl93YXJuKFwmIzM0O0FsbG9jYXRpbmcgcGVyc2lzdGVudCBodWdlIHplcm8gZm9saW8gZmFpbGVkXFxuXCYjMzQ7KTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTE0Nzk9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE1MDEtXHRcdFx0cmV0dXJuIFZNX0ZBVUxUX09PTTtcbm1tL2h1Z2VfbWVtb3J5LmM6MTUwMjpcdFx0emVyb19mb2xpbyA9IG1tX2dldF9odWdlX3plcm9fZm9saW8odm1hLVx1MDAzZXZtX21tKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMTUwMy1cdFx0aWYgKHVubGlrZWx5KCF6ZXJvX2ZvbGlvKSkge1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTg2Nz1pbnQgY29weV9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE5MzAtXHRcdC8qXG5tbS9odWdlX21lbW9yeS5jOjE5MzE6XHRcdCAqIG1tX2dldF9odWdlX3plcm9fZm9saW8oKSB3aWxsIG5ldmVyIGFsbG9jYXRlIGEgbmV3XG5tbS9odWdlX21lbW9yeS5jLTE5MzItXHRcdCAqIGZvbGlvIGhlcmUsIHNpbmNlIHdlIGFscmVhZHkgaGF2ZSBhIHplcm8gcGFnZSB0b1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTkzNC1cdFx0ICovXG5tbS9odWdlX21lbW9yeS5jOjE5MzU6XHRcdG1tX2dldF9odWdlX3plcm9fZm9saW8oZHN0X21tKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMTkzNi1cdFx0Z290byBvdXRfemVyb19wYWdlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDExOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNzcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEh1Z2UgWmVybyBGb2xpbyBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBzb21ldGhpbmcgaW50ZXJlc3Rpbmc6IGBnZXRfaHVnZV96ZXJvX2ZvbGlvYCBpcyBkZWZpbmVkIGFzIGBzdGF0aWNgLiBUaGF0JiMzOTtzIGltcG9ydGFudC4gSXQgbWVhbnMgaXQmIzM5O3MgaW50ZXJuYWwgdG8gdGhlIG1vZHVsZSwgbm90IG1lYW50IHRvIGJlIGRpcmVjdGx5IGFjY2Vzc2VkIGZyb20gb3V0c2lkZS4gQnV0IHRoZW4gSSBzZWUgdGhpcyBmdW5jdGlvbiwgYG1tX2dldF9odWdlX3plcm9fZm9saW9gLCB3aGljaCAqaXMqIGV4cG9ydGVkIGFuZCBpc24mIzM5O3Qgc3RhdGljLiBJdCYjMzk7cyB0aGUgcHVibGljIGludGVyZmFjZS4gSG1tLCBsb29rcyBsaWtlIGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCBwcm9iYWJseSBjYWxscyBgZ2V0X2h1Z2VfemVyb19mb2xpb2AuIEkgbmVlZCB0byBjb25maXJtIHRoYXQuIExldCYjMzk7cyBkaXZlIGludG8gYG1tL2h1Z2VfbWVtb3J5LmNgIGFuZCBzZWUgZXhhY3RseSBob3cgdGhleSBpbnRlcmFjdC4gR290dGEgdW5kZXJzdGFuZCB0aGUgZmxvdyBhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiBiZWhpbmQgdGhlIHNjZW5lcywgeW91IGtub3c/IFRoaXMgaXMgYSBrZXkgcGllY2Ugb2YgdGhlIHB1enpsZSBoZXJlLCBhbmQgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGludGVyYWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDExOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21tX2dldF9odWdlX3plcm9fZm9saW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9MjU4PXN0YXRpYyB2b2lkIHB1dF9odWdlX3plcm9fZm9saW8odm9pZClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI2Ni1cbm1tL2h1Z2VfbWVtb3J5LmM6MjY3OnN0cnVjdCBmb2xpbyAqbW1fZ2V0X2h1Z2VfemVyb19mb2xpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbm1tL2h1Z2VfbWVtb3J5LmMtMjY4LXtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTE0Nzk9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE1MDEtXHRcdFx0cmV0dXJuIFZNX0ZBVUxUX09PTTtcbm1tL2h1Z2VfbWVtb3J5LmM6MTUwMjpcdFx0emVyb19mb2xpbyA9IG1tX2dldF9odWdlX3plcm9fZm9saW8odm1hLVx1MDAzZXZtX21tKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMTUwMy1cdFx0aWYgKHVubGlrZWx5KCF6ZXJvX2ZvbGlvKSkge1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTg2Nz1pbnQgY29weV9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE5MzAtXHRcdC8qXG5tbS9odWdlX21lbW9yeS5jOjE5MzE6XHRcdCAqIG1tX2dldF9odWdlX3plcm9fZm9saW8oKSB3aWxsIG5ldmVyIGFsbG9jYXRlIGEgbmV3XG5tbS9odWdlX21lbW9yeS5jLTE5MzItXHRcdCAqIGZvbGlvIGhlcmUsIHNpbmNlIHdlIGFscmVhZHkgaGF2ZSBhIHplcm8gcGFnZSB0b1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTkzNC1cdFx0ICovXG5tbS9odWdlX21lbW9yeS5jOjE5MzU6XHRcdG1tX2dldF9odWdlX3plcm9fZm9saW8oZHN0X21tKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMTkzNi1cdFx0Z290byBvdXRfemVyb19wYWdlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDExOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NzkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEkmIzM5O20gaGF2aW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYG1tX2dldF9odWdlX3plcm9fZm9saW9gIGZvciBQb3RlbnRpYWwgVXNlKioKClJpZ2h0LCBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AgaXMgYW4gaW50ZXJlc3RpbmcgcG9pbnQgdG8gZGlnIGludG8uIEl0IGZlZWxzIGxpa2UgYSBrZXkgZnVuY3Rpb24gdG8gZXhwbG9yZS4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGl0cyBzY29wZS4gSXMgaXQgZXhwb3J0ZWQsIG1lYW5pbmcgaXQmIzM5O3MgaW50ZW5kZWQgdG8gYmUgdXNlZCBleHRlcm5hbGx5PyBPciBpcyBpdCBkZWNsYXJlZCBhcyBub24tc3RhdGljLCBwZXJoYXBzIHZpc2libGUgd2l0aGluIHRoZSBtb2R1bGUgYnV0IG5vdCBleHBsaWNpdGx5IHB1YmxpYyBmb3IgZ2VuZXJhbCB1c2U/IFVuZGVyc3RhbmRpbmcgaXRzIHZpc2liaWxpdHkgaXMgY3J1Y2lhbCB0byBmaWd1cmluZyBvdXQgd2hlcmUgYW5kIGhvdyBpdCBtaWdodCBmaXQgaW50byBteSBjdXJyZW50IG9iamVjdGl2ZS4gVGhpcyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTE6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLiptbV9nZXRfaHVnZV96ZXJvX2ZvbGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDExNwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6CgoqKkFuYWx5emluZyBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgZnVuY3Rpb24gYG1tX2dldF9odWdlX3plcm9fZm9saW9gLiBUaGUgaW1tZWRpYXRlIG9ic2VydmF0aW9uIGlzIHRoYXQgaXQmIzM5O3MgKm5vdCogbWFya2VkIGZvciBleHBvcnQsIG1lYW5pbmcgaXQmIzM5O3MgaW50ZW5kZWQgZm9yIGludGVybmFsIHVzZSB3aXRoaW4gdGhlIG1vZHVsZSBvciBwcm9qZWN0IGl0JiMzOTtzIGRlZmluZWQgaW4uIEhvd2V2ZXIsIHRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgKm5vdCogYHN0YXRpY2Agc3VnZ2VzdHMgdGhhdCBzb21ldGhpbmcgZWxzZSB3aXRoaW4gdGhpcyBjb2RlIGJhc2UgbmVlZHMgdG8gY2FsbCBpdC4gSXQmIzM5O3Mgbm90IGxpbWl0ZWQgdG8gdGhlIGNvbXBpbGF0aW9uIHVuaXQuCgpNeSBuZXh0IHN0ZXAgaGVyZSBpcyB0byBpZGVudGlmeSB0aG9zZSBjYWxsZXJzLiBLbm93aW5nIHdoZXJlIGFuZCBob3cgYG1tX2dldF9odWdlX3plcm9fZm9saW9gIGlzIGJlaW5nIHVzZWQgaXMgY3J1Y2lhbC4gSXMgaXQgb25seSB1c2VkIGJ5IGEgc21hbGwgcGFydCBvZiB0aGUgc3lzdGVtIG9yIGlzIHRoaXMgZnVuY3Rpb24gY2VudHJhbCB0byB0aGUgb3BlcmF0aW9uIG9mIGEga2V5IGNvbXBvbmVudD8gV2hhdCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFyZSBwb3RlbnRpYWxseSB0aWdodGx5IGNvdXBsZWQgd2l0aCB0aGUgaW1wbGVtZW50YXRpb24gYW5kIHNlbWFudGljcyBvZiBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2A/IEJ5IHRyYWNpbmcgaXRzIHVzZSwgSSBjYW4gcXVpY2tseSBnYWluIGNvbnRleHQgYXJvdW5kIGl0cyBwdXJwb3NlIGFuZCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGFyZWFzIG9mIGNvbmNlcm4sIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLCBvciBkZXBlbmRlbmNpZXMuIExldCYjMzk7cyBzZWUgd2hlcmUgdGhpcyByYWJiaXQgaG9sZSBsZWFkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTE6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW1fZ2V0X2h1Z2VfemVyb19mb2xpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9kYXguYz0xNDExPXN0YXRpYyB2bV9mYXVsdF90IGRheF9wbWRfbG9hZF9ob2xlKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi0tXG5mcy9kYXguYy0xNDE4LVxuZnMvZGF4LmM6MTQxOTpcdHplcm9fZm9saW8gPSBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKHZtZi1cdTAwM2V2bWEtXHUwMDNldm1fbW0pO1xuZnMvZGF4LmMtMTQyMC1cbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD01NDk9c3RhdGljIGlubGluZSBib29sIGlzX2h1Z2VfemVyb19wbWQocG1kX3QgcG1kKVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTU1My1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjU1NDpzdHJ1Y3QgZm9saW8gKm1tX2dldF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTU1LXZvaWQgbW1fcHV0X2h1Z2VfemVyb19mb2xpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9ODA2PXN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2ZvbGlvX3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfb3JkZXIpXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtODEzLSAqXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo4MTQ6ICogVGhpcyBmdW5jdGlvbiBzaGFsbCBiZSB1c2VkIHdoZW4gbW1fZ2V0X2h1Z2VfemVyb19mb2xpbygpIGNhbm5vdCBiZVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtODE1LSAqIHVzZWQgYXMgdGhlcmUgaXMgbm8gYXBwcm9wcmlhdGUgbW0gbGlmZXRpbWUgdG8gdGllIHRoZSBodWdlIHplcm8gZm9saW9cbi0tXG5tbS9odWdlX21lbW9yeS5jPTI1OD1zdGF0aWMgdm9pZCBwdXRfaHVnZV96ZXJvX2ZvbGlvKHZvaWQpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yNjYtXG5tbS9odWdlX21lbW9yeS5jOjI2NzpzdHJ1Y3QgZm9saW8gKm1tX2dldF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5tbS9odWdlX21lbW9yeS5jLTI2OC17XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xNDc5PXZtX2ZhdWx0X3QgZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xNTAxLVx0XHRcdHJldHVybiBWTV9GQVVMVF9PT007XG5tbS9odWdlX21lbW9yeS5jOjE1MDI6XHRcdHplcm9fZm9saW8gPSBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKHZtYS1cdTAwM2V2bV9tbSk7XG5tbS9odWdlX21lbW9yeS5jLTE1MDMtXHRcdGlmICh1bmxpa2VseSghemVyb19mb2xpbykpIHtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTE4Njc9aW50IGNvcHlfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xOTMwLVx0XHQvKlxubW0vaHVnZV9tZW1vcnkuYzoxOTMxOlx0XHQgKiBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKCkgd2lsbCBuZXZlciBhbGxvY2F0ZSBhIG5ld1xubW0vaHVnZV9tZW1vcnkuYy0xOTMyLVx0XHQgKiBmb2xpbyBoZXJlLCBzaW5jZSB3ZSBhbHJlYWR5IGhhdmUgYSB6ZXJvIHBhZ2UgdG9cbi0tXG5tbS9odWdlX21lbW9yeS5jLTE5MzQtXHRcdCAqL1xubW0vaHVnZV9tZW1vcnkuYzoxOTM1Olx0XHRtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKGRzdF9tbSk7XG5tbS9odWdlX21lbW9yeS5jLTE5MzYtXHRcdGdvdG8gb3V0X3plcm9fcGFnZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE5OQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYG1tX2dldF9odWdlX3plcm9fZm9saW9gIEZ1bmN0aW9uIGFuZCBUcmFuc3BhcmVudCBIdWdlcGFnZXMqKgoKT2theSwgc28gYG1tX2dldF9odWdlX3plcm9fZm9saW9gIHNlZW1zIGxpa2UgYSBrZXkgZnVuY3Rpb24gdG8gZm9jdXMgb24gaGVyZS4gSXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoaXMgYXJlYS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcy4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgYXJlIHRoZXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBhcmUgcHJlcmVxdWlzaXRlcyBvciByZWxhdGVkIHRvIGl0PyBJIHNob3VsZCBjaGVjayBhbmQgc2VlIGlmIGl0IGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuCgpSaWdodCwgYG1tL2h1Z2VfbWVtb3J5LmNgIGlzIHRoZSBsaWtlbHkgbG9jYXRpb24uIEkgcmVjYWxsIHRoYXQgaXQmIzM5O3MgY29tcGlsZWQgd2hlbiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBlbmFibGVkLCBvciBhdCBsZWFzdCB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvZGUuIFNvLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGBtbS9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgY29tcGlsYXRpb24gY29uZGl0aW9ucyBhbmQgbG9vayBhdCBvdGhlciBzb3VyY2UgZmlsZXMgdGhhdCBtYXkgaW5jbHVkZSB0aGlzIGZ1bmN0aW9uLiBUaGlzIHNob3VsZCBoZWxwIG1lIGJldHRlciB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGNvbnRleHQgYW5kIHBvdGVudGlhbCBjb21wbGV4aXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDExOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2VfbWVtb3J5Lm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICYjNDM7PSBtaWdyYXRlX2RldmljZS5vXG5tbS9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSAmIzQzOz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cbm1tL01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSAmIzQzOz0gcGFnZV9jb3VudGVyLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU4NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipNZW1vcnkgTWFuYWdlbWVudCBDb25maWd1cmF0aW9uIEFzc2Vzc21lbnQqKgoKQWxyaWdodCwgc28gdGhlIGNvcmUgaXNzdWUgYXQgaGFuZCBpcyB0aGUgcmVxdWlyZW1lbnQgZm9yIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lIGFzc3VtcHRpb24sIHRoZSBpbml0aWFsIGZvY2FsIHBvaW50LiBOb3csIGdpdmVuIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LCBteSBuZXh0IGxpbmUgb2YgaW5xdWlyeSBoYXMgdG8gYmUgdG8gbG9vayBhcm91bmQgYW5kIG1ha2Ugc3VyZSB0aGF0IHdlIGFyZW4mIzM5O3Qgb3Zlcmxvb2tpbmcgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlIGdvYWwgaXMgYSBjb21wcmVoZW5zaXZlIGFzc2Vzc21lbnQsIGVuc3VyaW5nIG5vdGhpbmcgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBvciByZWxhdGVkIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zIGdldHMgbGVmdCBieSB0aGUgd2F5c2lkZS4gTGV0JiMzOTtzIHNlZSB3aGF0IGVsc2UgdGhlIGNvbmZpZ3VyYXRpb24gcHJlc2VudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDExOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz04NDM9Y29uZmlnIE1NX0lEXG4tLVxubW0vS2NvbmZpZy04NDUtXG5tbS9LY29uZmlnOjg0NjptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9LY29uZmlnLTg0Ny1cdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODY0PWNob2ljZVxuLS1cbm1tL0tjb25maWctODY5LVxubW0vS2NvbmZpZzo4NzA6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXG5tbS9LY29uZmlnLTg3MS1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg3Ni1cbm1tL0tjb25maWc6ODc3Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0Vcbm1tL0tjb25maWctODc4LVx0XHRib29sIFwmIzM0O21hZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg4NS1cbm1tL0tjb25maWc6ODg2Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXG5tbS9LY29uZmlnLTg4Ny1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODkzPWNob2ljZVxuLS1cbm1tL0tjb25maWctOTAyLVxubW0vS2NvbmZpZzo5MDM6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxubW0vS2NvbmZpZy05MDQtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkxMi1cbm1tL0tjb25maWc6OTEzOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTkxNC1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkyMC1cbm1tL0tjb25maWc6OTIxOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTIyLVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MjgtXG5tbS9LY29uZmlnOjkyOTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05MzAtXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz05Mzg9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy05NDctXG5tbS9LY29uZmlnOjk0ODpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXG5tbS9LY29uZmlnLTk0OS1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTU2LVxubW0vS2NvbmZpZzo5NTc6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTU4LVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTY0LVxubW0vS2NvbmZpZzo5NjU6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05NjYtXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk3Mi1cbm1tL0tjb25maWc6OTczOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTk3NC1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ5MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDExNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTWVtb3J5IEJhcnJpZXIgRml4KioKCk9rYXksIHNvIHRoZSBmaXggaXRzZWxmIHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ7IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgdGhlIGtleS4gRnVuY3Rpb25hbGx5LCBpdCBkb2VzIHRoZSB0cmljaywgcmVzb2x2aW5nIHRoYXQgbWVtb3J5IGJhcnJpZXIgaXNzdWUuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCwgdGhhdCBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgZnVuY3Rpb24uIEFuZCB0aGUgb25seSBjb25maWcgbmVlZGVkIGlzIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuCgpOb3csIGxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSBpZiBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AgaXMgdGhlICpvbmx5KiBwZXJ0aW5lbnQgc3ltYm9sIGhlcmUuIFRoZSBmdW5jdGlvbiBgZ2V0X2h1Z2VfemVyb19mb2xpb2AgaXNuJiMzOTt0IGdvaW5nIHRvIHdvcmssIGFzIGl0JiMzOTtzIHN0YXRpYywgc28gaXQmIzM5O3Mgbm90IGEgcmVsZXZhbnQgc3ltYm9sIHRvIGNoZWNrLiBBbm90aGVyIGZ1bmN0aW9uIEkgc2hvdWxkIGxvb2sgYXQgaXMgYGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYDsgdGhhdCBsb29rcyBsaWtlIGFub3RoZXIgbGlrZWx5IGNhbmRpZGF0ZSB0byBleGFtaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC05LVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MTA6dm1fZmF1bHRfdCBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0xMS1pbnQgY29weV9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcbi0tXG5tbS9odWdlX21lbW9yeS5jPTEzMzE9c3RhdGljIHZvaWQgbWFwX2Fub25fZm9saW9fcG1kX3BmKHN0cnVjdCBmb2xpbyAqZm9saW8sIHBtZF90ICpwbWQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xMzQwLVxubW0vaHVnZV9tZW1vcnkuYzoxMzQxOnN0YXRpYyB2bV9mYXVsdF90IF9fZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG5tbS9odWdlX21lbW9yeS5jLTEzNDIte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTQ2Nz1zdGF0aWMgdm9pZCBzZXRfaHVnZV96ZXJvX2ZvbGlvKHBndGFibGVfdCBwZ3RhYmxlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE0NzgtXG5tbS9odWdlX21lbW9yeS5jOjE0Nzk6dm1fZmF1bHRfdCBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbm1tL2h1Z2VfbWVtb3J5LmMtMTQ4MC17XG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xNTMyLVxubW0vaHVnZV9tZW1vcnkuYzoxNTMzOlx0cmV0dXJuIF9fZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2Uodm1mKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMTUzNC19XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0yMzk4PXN0YXRpYyBib29sIGhhc19kZXBvc2l0ZWRfcGd0YWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcG1kX3QgcG1kdmFsLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjQxMy1cdCAqIE90aGVyd2lzZSwgb25seSBhbm9ueW1vdXMgZm9saW9zIGFyZSBkZXBvc2l0ZWQsIHNlZVxubW0vaHVnZV9tZW1vcnkuYzoyNDE0Olx0ICogX19kb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZSgpLlxubW0vaHVnZV9tZW1vcnkuYy0yNDE1LVx0ICovXG4tLVxubW0vbWVtb3J5LmM9NjIwMD1zdGF0aWMgaW5saW5lIHZtX2ZhdWx0X3QgY3JlYXRlX2h1Z2VfcG1kKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTYyMDMtXHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpKVxubW0vbWVtb3J5LmM6NjIwNDpcdFx0cmV0dXJuIGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHZtZik7XG5tbS9tZW1vcnkuYy02MjA1LVx0aWYgKHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlaHVnZV9mYXVsdClcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTc3MD1FWFBPUlRfU1lNQk9MKG1pZ3JhdGVfdm1hX3NldHVwKTtcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTc3OC0gKiBAcGFnZSBuZWVkcyB0byBiZSBpbml0aWFsaXplZCBhbmQgc2V0dXAgYWZ0ZXIgaXQmIzM5O3MgYWxsb2NhdGVkLiBUaGUgY29kZSBiaXRzXG5tbS9taWdyYXRlX2RldmljZS5jOjc3OTogKiBoZXJlIGZvbGxvdyBjbG9zZWx5IHRoZSBjb2RlIGluIF9fZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2UoKS4gVGhpcyBBUEkgZG9lc1xubW0vbWlncmF0ZV9kZXZpY2UuYy03ODAtICogbm90IHN1cHBvcnQgVEhQIHplcm8gcGFnZXMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDExOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NDkKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gS2V5IEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIHRoYXQgYGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCBpcyBhIHJlYWxseSBzb2xpZCBjYW5kaWRhdGUgYXMgYSBmb2N1cyBzeW1ib2wuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGluIGhhbmRsaW5nIGFub255bW91cyBodWdlIHBhZ2VzLCBzbyBpdCBzaG91bGQgYmUgcXVpdGUgaW5mb3JtYXRpdmUgdG8gYW5hbHl6ZS4gQW5kLCBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AgaXMgYW5vdGhlciBzdHJvbmcgY29udGVuZGVyLgoKSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBjYWxsZXJzIG9mIGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCwganVzdCB0byBjb25maXJtIG15IHRoaW5raW5nIGFuZCBleHBhbmQgdGhlIGNvbnRleHQuIExldCBtZSBzZWUuLi4geWVzLCBpdCBsb29rcyBsaWtlIGBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAsIGBjb3B5X2h1Z2VfcG1kYCwgYW5kIGBkYXhfcG1kX2xvYWRfaG9sZWAgYXJlIGFsbCBjYWxsaW5nIGl0LiBQZXJmZWN0LgoKUmlnaHQsIHNvIEkmIzM5O2xsIGFkZCBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AsIGBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAsIGBjb3B5X2h1Z2VfcG1kYCwgYW5kIGBkYXhfcG1kX2xvYWRfaG9sZWAgdG8gbXkgbGlzdCBvZiBmb2N1cyBzeW1ib2xzLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gaGF2ZSBhIGdvb2Qgc2V0LiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBgY29weV9odWdlX3BtZGAgYW5kIGBkYXhfcG1kX2xvYWRfaG9sZWAsIGJlY2F1c2UgdGhleSBkb24mIzM5O3Qgc2VlbSBhcyBvYnZpb3VzIGF0IGZpcnN0IGdsYW5jZS4gSSB3aWxsIGNoZWNrIHRoZW0gb3V0LCBhbmQgc2VlIHdoYXQgdGhlIGZ1bmN0aW9uIGRvZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDExOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvcHlfaHVnZV9wbWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmg9MTA9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoxMTppbnQgY29weV9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTEyLVx0XHQgIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTgxMT1zdGF0aWMgdm9pZCBjb3B5X2h1Z2Vfbm9uX3ByZXNlbnRfcG1kKFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTg2Ni1cbm1tL2h1Z2VfbWVtb3J5LmM6MTg2NzppbnQgY29weV9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcbm1tL2h1Z2VfbWVtb3J5LmMtMTg2OC1cdFx0ICBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tZW1vcnkuYz0xMzc5PWNvcHlfcG1kX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmNfdm1hLFxuLS1cbm1tL21lbW9yeS5jLTEzOTctXHRcdFx0Vk1fQlVHX09OX1ZNQShuZXh0LWFkZHIgIT0gSFBBR0VfUE1EX1NJWkUsIHNyY192bWEpO1xubW0vbWVtb3J5LmM6MTM5ODpcdFx0XHRlcnIgPSBjb3B5X2h1Z2VfcG1kKGRzdF9tbSwgc3JjX21tLCBkc3RfcG1kLCBzcmNfcG1kLFxubW0vbWVtb3J5LmMtMTM5OS1cdFx0XHRcdFx0ICAgIGFkZHIsIGRzdF92bWEsIHNyY192bWEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDIwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipNeSBQZXJzcGVjdGl2ZSBvbiBgY29weV9odWdlX3BtZGAqKgoKUmlnaHQsIGBjb3B5X2h1Z2VfcG1kYC4uLiB5ZWFoLCB0aGF0JiMzOTtzIGEgc29saWQgcGllY2Ugb2Ygd29yay4gRnJvbSBhIHBlcmZvcm1hbmNlIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBzdGFuZHBvaW50LCBpdCYjMzk7cyBwcmV0dHkgZWxlZ2FudC4gVGhlIGluaGVyZW50IGFkdmFudGFnZXMgb2YgZGVhbGluZyB3aXRoIGh1Z2UgcGFnZXMgYXJlIHdlbGwtdW5kZXJzdG9vZCwgYW5kIHRoZSBgY29weV9odWdlX3BtZGAgaW1wbGVtZW50YXRpb24gY2xlYXJseSBsZXZlcmFnZXMgdGhvc2UgdG8gb3B0aW1pemUgZGF0YSBtb3ZlbWVudC4gSSYjMzk7dmUgc2VlbiBzb21lIGltcGxlbWVudGF0aW9ucyBzdHJ1Z2dsZSB3aXRoIHRoZSBjb21wbGV4aXRpZXMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggbmVzdGVkIHBhZ2UgdGFibGVzIG9yIGRpZmZlcmVudCBoYXJkd2FyZSBhcmNoaXRlY3R1cmVzLiBCdXQgYmFzZWQgb24gbXkgaW5pdGlhbCByZXZpZXcsIHRoaXMgc29sdXRpb24gc2VlbXMgcm9idXN0IGFuZCBjb25zaWRlcnMgdGhvc2UgcG90ZW50aWFsIHBpdGZhbGxzLiBUaGUgZGVzaWduIGRlY2lzaW9ucyBhcHBlYXIgc291bmQsIHdpdGggYXR0ZW50aW9uIGdpdmVuIHRvIG1pbmltaXppbmcgVExCIGZsdXNoZXMgYW5kIG1heGltaXppbmcgY2FjaGUgdXRpbGl6YXRpb24uIEkmIzM5O2QgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIHNwZWNpZmljIGhhcmR3YXJlIGludGVyYWN0aW9ucywgcGFydGljdWxhcmx5IGZvciBteSB1c2UgY2FzZSBidXQgSSBsaWtlIHRoZSBhcHByb2FjaC4gT3ZlcmFsbCwgaXQgaW5kaWNhdGVzIGEgc3Ryb25nIGdyYXNwIG9mIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBoaWVyYXJjaHkgYW5kIGEgY29tbWl0bWVudCB0byBlZmZpY2llbnQgZGF0YSB0cmFuc2Zlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTE6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGF4X3BtZF9sb2FkX2hvbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZGF4LmM9MTM5NT1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfbG9hZF9ob2xlKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi0tXG5mcy9kYXguYy0xNDEwLSNpZmRlZiBDT05GSUdfRlNfREFYX1BNRFxuZnMvZGF4LmM6MTQxMTpzdGF0aWMgdm1fZmF1bHRfdCBkYXhfcG1kX2xvYWRfaG9sZShzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG5mcy9kYXguYy0xNDEyLVx0XHRjb25zdCBzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgdm9pZCAqKmVudHJ5KVxuLS1cbmZzL2RheC5jLTE0MjEtXHRpZiAodW5saWtlbHkoIXplcm9fZm9saW8pKSB7XG5mcy9kYXguYzoxNDIyOlx0XHR0cmFjZV9kYXhfcG1kX2xvYWRfaG9sZV9mYWxsYmFjayhpbm9kZSwgdm1mLCB6ZXJvX2ZvbGlvLCAqZW50cnkpO1xuZnMvZGF4LmMtMTQyMy1cdFx0cmV0dXJuIFZNX0ZBVUxUX0ZBTExCQUNLO1xuLS1cbmZzL2RheC5jLTE0MzAtXHRpZiAocmV0ID09IFZNX0ZBVUxUX05PUEFHRSlcbmZzL2RheC5jOjE0MzE6XHRcdHRyYWNlX2RheF9wbWRfbG9hZF9ob2xlKGlub2RlLCB2bWYsIHplcm9fZm9saW8sICplbnRyeSk7XG5mcy9kYXguYy0xNDMyLVx0cmV0dXJuIHJldDtcbi0tXG5mcy9kYXguYy0xNDM0LSNlbHNlXG5mcy9kYXguYzoxNDM1OnN0YXRpYyB2bV9mYXVsdF90IGRheF9wbWRfbG9hZF9ob2xlKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbmZzL2RheC5jLTE0MzYtXHRcdGNvbnN0IHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCB2b2lkICoqZW50cnkpXG4tLVxuZnMvZGF4LmM9MTg0Mj1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfZmF1bHRfaXRlcihzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi0tXG5mcy9kYXguYy0xODY0LVx0XHRcdHJldHVybiBkYXhfbG9hZF9ob2xlKHhhcywgdm1mLCBpdGVyLCBlbnRyeSk7XG5mcy9kYXguYzoxODY1Olx0XHRyZXR1cm4gZGF4X3BtZF9sb2FkX2hvbGUoeGFzLCB2bWYsIGl0ZXIsIGVudHJ5KTtcbmZzL2RheC5jLTE4NjYtXHR9XG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvZnNfZGF4Lmg9NjE9REVGSU5FX1BNRF9GQVVMVF9FVkVOVChkYXhfcG1kX2ZhdWx0X2RvbmUpO1xuaW5jbHVkZS90cmFjZS9ldmVudHMvZnNfZGF4LmgtNjItXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9mc19kYXguaDo2MzpERUNMQVJFX0VWRU5UX0NMQVNTKGRheF9wbWRfbG9hZF9ob2xlX2NsYXNzLFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZnNfZGF4LmgtNjQtXHRUUF9QUk9UTyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9mc19kYXguaC05Ni0jZGVmaW5lIERFRklORV9QTURfTE9BRF9IT0xFX0VWRU5UKG5hbWUpIFxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9mc19kYXguaDo5NzpERUZJTkVfRVZFTlQoZGF4X3BtZF9sb2FkX2hvbGVfY2xhc3MsIG5hbWUsIFxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9mc19kYXguaC05OC1cdFRQX1BST1RPKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBcXFxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2ZzX2RheC5oLTEwMS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2ZzX2RheC5oOjEwMjpERUZJTkVfUE1EX0xPQURfSE9MRV9FVkVOVChkYXhfcG1kX2xvYWRfaG9sZSk7XG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9mc19kYXguaDoxMDM6REVGSU5FX1BNRF9MT0FEX0hPTEVfRVZFTlQoZGF4X3BtZF9sb2FkX2hvbGVfZmFsbGJhY2spO1xuaW5jbHVkZS90cmFjZS9ldmVudHMvZnNfZGF4LmgtMTA0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTUwCgkJCQkJCQlvdXRwdXQ6IDE0MgoJCQkJCQkJdGhvdWdodHM6IDE4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiB0aGUgUmlnaHQgU3ltYm9scyoqCgpPa2F5LCBzbyBJJiMzOTttIGV2YWx1YXRpbmcgZm9jdXMgc3ltYm9scyBmb3IgdGhpcyBhbmFseXNpcy4gSW5pdGlhbGx5LCBJIGNvbnNpZGVyZWQgYGRheF9wbWRfbG9hZF9ob2xlYCwgYnV0IHRoZW4gcmVhbGl6ZWQgaXQmIzM5O3Mgc3RhdGljLCB3aGljaCBtYWtlcyBpdCBsZXNzIHRoYW4gaWRlYWwuIGBkYXhfZmF1bHRfaXRlcmAgaGFzIHRoZSBzYW1lIHByb2JsZW0sIGJlaW5nIHN0YXRpYyBhcyB3ZWxsLiBJIG5lZWQgbm9uLXN0YXRpYyBzeW1ib2xzIGZvciBhIGJldHRlciB2aWV3LgoKTGV0JiMzOTtzIHN3aXRjaCB0byBhIG5ldyBzZXQgb2YgcG9zc2libGUgdGFyZ2V0cy4gRm9jdXNpbmcgb24gdGhlIG1vcmUgZ2VuZXJhbCBodWdlIHBhZ2UgaGFuZGxpbmcsIGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCwgYGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCwgYW5kIGBjb3B5X2h1Z2VfcG1kYCBzb3VuZCBtb3JlIHByb21pc2luZy4KCkFoLCBnb29kLCBhIHF1aWNrIGNoZWNrIGNvbmZpcm1zIHRoYXQgYG1tX2dldF9odWdlX3plcm9fZm9saW9gLCBgZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2VgLCBhbmQgYGNvcHlfaHVnZV9wbWRgIGFyZSBhbGwgaW5kZWVkIG5vbi1zdGF0aWMgc3ltYm9scy4gUGVyZmVjdCEgVGhlc2UgYXJlIG11Y2ggYmV0dGVyIGNob2ljZXMgZm9yIGEgbW9yZSBkeW5hbWljIHVuZGVyc3RhbmRpbmcuCgpOb3csIGxldCBtZSBqdXN0IGNvbmZpcm0gdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgaWYgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyB0aGUgb25seSBjb25maWcgSSBuZWVkIHRvIGNvbnNpZGVyLiBJIGRvbiYjMzk7dCB3YW50IHRvIGdldCBzaWRlLXRyYWNrZWQgbG9va2luZyBhdCBvcHRpb25zIHRoYXQgSSBkb24mIzM5O3QgbmVlZC4KCkFscmlnaHQsIGEgcXVpY2sgc2NhbiBjb25maXJtcyB0aGF0IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgc3VmZmljaWVudC4gR3JlYXQuCgpOb3cgdGhhdCBJIGhhdmUgYSBmb2N1c2VkIHNldCBvZiBzeW1ib2xzIGFuZCBoYXZlIHZlcmlmaWVkIHRoZSBjb25maWcsIGxldCYjMzk7cyBwcm9jZWVkIHRvIHNldCB0aGUgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTE6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bW1fZ2V0X2h1Z2VfemVyb19mb2xpbyYjMzQ7LAogICAgJiMzNDtkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZSYjMzQ7LAogICAgJiMzNDtjb3B5X2h1Z2VfcG1kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGJhcnJpZXIgaXNzdWUgaW4gZ2V0X2h1Z2VfemVyb19mb2xpbyBieSBjaGFuZ2luZyBhdG9taWNfc2V0IHRvIGF0b21pY19zZXRfcmVsZWFzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAodHJhbnNwYXJlbnQgaHVnZXBhZ2VzKSB0aGF0IGZpeGVzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIG1tX2dldF9odWdlX3plcm9fZm9saW8gYW5kIGl0cyBjYWxsZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21tX2dldF9odWdlX3plcm9fZm9saW8mIzM0OywKICAgICYjMzQ7ZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2UmIzM0OywKICAgICYjMzQ7Y29weV9odWdlX3BtZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBiYXJyaWVyIGlzc3VlIGluIGdldF9odWdlX3plcm9fZm9saW8gYnkgY2hhbmdpbmcgYXRvbWljX3NldCB0byBhdG9taWNfc2V0X3JlbGVhc2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKHRyYW5zcGFyZW50IGh1Z2VwYWdlcykgdGhhdCBmaXhlcyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbi4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvIGFuZCBpdHMgY2FsbGVycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDExOjQxOjA1LjYwMDg5NjYyMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MjY1NzY5MTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibW1fZ2V0X2h1Z2VfemVyb19mb2xpb1wiLFxuICAgIFwiZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2VcIixcbiAgICBcImNvcHlfaHVnZV9wbWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBiYXJyaWVyIGlzc3VlIGluIGdldF9odWdlX3plcm9fZm9saW8gYnkgY2hhbmdpbmcgYXRvbWljX3NldCB0byBhdG9taWNfc2V0X3JlbGVhc2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKHRyYW5zcGFyZW50IGh1Z2VwYWdlcykgdGhhdCBmaXhlcyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbi4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvIGFuZCBpdHMgY2FsbGVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTE6NDE6MDUuNjAwOTAyNjAyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTE5NzM4NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwZGJiMTIwNTI3YTJhNzVhNGE4MjcxNGVlODlkZWQ4YTZkMTY0YzdmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDMwIDExOjQxOjA0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXFxuaW5kZXggMDMyNzAyYTQ2MzdiYS4uNmM3NGQwMzc1Mzc3OSAxMDA2NDRcXG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXFxuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xcbkBAIC0yNDUsOCArMjQ1LDExIEBAIHN0YXRpYyBib29sIGdldF9odWdlX3plcm9fZm9saW8odm9pZClcXG4gXFx0fVxcbiBcXHRXUklURV9PTkNFKGh1Z2VfemVyb19wZm4sIGZvbGlvX3Bmbih6ZXJvX2ZvbGlvKSk7XFxuIFxcbi1cXHQvKiBXZSB0YWtlIGFkZGl0aW9uYWwgcmVmZXJlbmNlIGhlcmUuIEl0IHdpbGwgYmUgcHV0IGJhY2sgYnkgc2hyaW5rZXIgKi9cXG4tXFx0YXRvbWljX3NldChcXHUwMDI2aHVnZV96ZXJvX3JlZmNvdW50LCAyKTtcXG4rXFx0LypcXG4rXFx0ICogUHVibGlzaCB0aGUgZm9saW8gYW5kIFBGTiBiZWZvcmUgbWFraW5nIHRoZW0gYXZhaWxhYmxlIHRvIGxvY2tsZXNzXFxuK1xcdCAqIHVzZXJzLiBQYWlycyB3aXRoIGEgc3VjY2Vzc2Z1bCBhdG9taWNfaW5jX25vdF96ZXJvKCkgYWJvdmUuXFxuK1xcdCAqL1xcbitcXHRhdG9taWNfc2V0X3JlbGVhc2UoXFx1MDAyNmh1Z2VfemVyb19yZWZjb3VudCwgMik7XFxuIFxcdHByZWVtcHRfZW5hYmxlKCk7XFxuIFxcdGNvdW50X3ZtX2V2ZW50KFRIUF9aRVJPX1BBR0VfQUxMT0MpO1xcbiBcXHRyZXR1cm4gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTE6NDE6MDUuOTEzNDgxMzA0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDM5NTMxNzM3NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvXCIsXG4gICAgXCJkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZVwiLFxuICAgIFwiY29weV9odWdlX3BtZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGJhcnJpZXIgaXNzdWUgaW4gZ2V0X2h1Z2VfemVyb19mb2xpbyBieSBjaGFuZ2luZyBhdG9taWNfc2V0IHRvIGF0b21pY19zZXRfcmVsZWFzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAodHJhbnNwYXJlbnQgaHVnZXBhZ2VzKSB0aGF0IGZpeGVzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIG1tX2dldF9odWdlX3plcm9fZm9saW8gYW5kIGl0cyBjYWxsZXJzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwZGJiMTIwNTI3YTJhNzVhNGE4MjcxNGVlODlkZWQ4YTZkMTY0YzdmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMTE6NDE6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggMDMyNzAyYTQ2MzdiYS4uNmM3NGQwMzc1Mzc3OSAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0yNDUsOCArMjQ1LDExIEBAIHN0YXRpYyBib29sIGdldF9odWdlX3plcm9fZm9saW8odm9pZClcbiBcdH1cbiBcdFdSSVRFX09OQ0UoaHVnZV96ZXJvX3BmbiwgZm9saW9fcGZuKHplcm9fZm9saW8pKTtcbiBcbi1cdC8qIFdlIHRha2UgYWRkaXRpb25hbCByZWZlcmVuY2UgaGVyZS4gSXQgd2lsbCBiZSBwdXQgYmFjayBieSBzaHJpbmtlciAqL1xuLVx0YXRvbWljX3NldChcdTAwMjZodWdlX3plcm9fcmVmY291bnQsIDIpO1xuK1x0LypcbitcdCAqIFB1Ymxpc2ggdGhlIGZvbGlvIGFuZCBQRk4gYmVmb3JlIG1ha2luZyB0aGVtIGF2YWlsYWJsZSB0byBsb2NrbGVzc1xuK1x0ICogdXNlcnMuIFBhaXJzIHdpdGggYSBzdWNjZXNzZnVsIGF0b21pY19pbmNfbm90X3plcm8oKSBhYm92ZS5cbitcdCAqL1xuK1x0YXRvbWljX3NldF9yZWxlYXNlKFx1MDAyNmh1Z2VfemVyb19yZWZjb3VudCwgMik7XG4gXHRwcmVlbXB0X2VuYWJsZSgpO1xuIFx0Y291bnRfdm1fZXZlbnQoVEhQX1pFUk9fUEFHRV9BTExPQyk7XG4gXHRyZXR1cm4gdHJ1ZTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDExOjQxOjA1LjkxMzQ4MjczNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyOTQ5MzUxNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0YXJnZXRpbmcgYG1tL2h1Z2VfbWVtb3J5LmNgLiBJbW1lZGlhdGVseSwgSSBzZWUgaXQncyB0b3VjaGluZyBgZ2V0X2h1Z2VfemVyb19mb2xpb2AsIGFuZCB0aGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgaW50ZXJlc3Rpbmcgc3R1ZmYgaGFwcGVucyB3aXRoIGh1Z2UgcGFnZXMuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgc3dpdGNoaW5nIGZyb20gYSBwbGFpbiBgYXRvbWljX3NldGAgdG8gYGF0b21pY19zZXRfcmVsZWFzZWAgb24gdGhlIGBodWdlX3plcm9fcmVmY291bnRgLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBpcyBhYm91dCBtZW1vcnkgYmFycmllciBzZW1hbnRpY3MuIFJpZ2h0LCB0aGUgc3VidGxlIGRhbmNlIGFyb3VuZCBzeW5jaHJvbml6YXRpb24gYW5kIHZpc2liaWxpdHkgYmV0d2VlbiB0aGUgQ1BVIGNvcmVzLiBUaGlzIGlzbid0IGp1c3QgYSBjb2RlIGNvc21ldGljLCBpdCdzIGEgKmZ1bmN0aW9uYWwqIG1vZGlmaWNhdGlvbiDigJMgYSBmaXggZm9yIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uLiBMZXQgbWUgZGl2ZSBpbnRvIHRoYXQgYGdldF9odWdlX3plcm9fZm9saW9gIGZ1bmN0aW9uIG5vdyBhbmQgc2VlIGV4YWN0bHkgaG93IHRoaXMgcmVsZWFzZSBzZW1hbnRpY3MgaGVscHMgcmVzb2x2ZSB0aGUgcmFjZS4gTGV0J3Mgc2VlIGhvdyB0aGUgcmVmZXJlbmNlIGNvdW50IGlzIHVzZWQgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDExOjQxOjA5LjIwODQxOTc2OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDYxNjk1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfaHVnZV96ZXJvX2ZvbGlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz0xMTQ9dW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjIzLVxcbm1tL2h1Z2VfbWVtb3J5LmM6MjI0OnN0YXRpYyBib29sIGdldF9odWdlX3plcm9fZm9saW8odm9pZClcXG5tbS9odWdlX21lbW9yeS5jLTIyNS17XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTI1OD1zdGF0aWMgdm9pZCBwdXRfaHVnZV96ZXJvX2ZvbGlvKHZvaWQpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTI2Ni1cXG5tbS9odWdlX21lbW9yeS5jOjI2NzpzdHJ1Y3QgZm9saW8gKm1tX2dldF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxubW0vaHVnZV9tZW1vcnkuYy0yNjgte1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yNzQtXFxubW0vaHVnZV9tZW1vcnkuYzoyNzU6XFx0aWYgKCFnZXRfaHVnZV96ZXJvX2ZvbGlvKCkpXFxubW0vaHVnZV9tZW1vcnkuYy0yNzYtXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTk1OT1zdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy05ODMtXFx0XFx0ICogaHVnZV96ZXJvX2ZvbGlvIHdpbGwgYWx3YXlzIGJlIE5VTEwgb24gZmFpbHVyZS4gV2UgYXNzdW1lXFxubW0vaHVnZV9tZW1vcnkuYzo5ODQ6XFx0XFx0ICogdGhhdCBnZXRfaHVnZV96ZXJvX2ZvbGlvKCkgd2lsbCBtb3N0IGxpa2VseSBub3QgZmFpbCBhc1xcbm1tL2h1Z2VfbWVtb3J5LmMtOTg1LVxcdFxcdCAqIHRocF9zaHJpbmtlcl9pbml0KCkgaXMgaW52b2tlZCBlYXJseSBvbiBkdXJpbmcgYm9vdC5cXG5tbS9odWdlX21lbW9yeS5jLTk4Ni1cXHRcXHQgKi9cXG5tbS9odWdlX21lbW9yeS5jOjk4NzpcXHRcXHRpZiAoIWdldF9odWdlX3plcm9fZm9saW8oKSlcXG5tbS9odWdlX21lbW9yeS5jLTk4OC1cXHRcXHRcXHRwcl93YXJuKFxcXCJBbGxvY2F0aW5nIHBlcnNpc3RlbnQgaHVnZSB6ZXJvIGZvbGlvIGZhaWxlZFxcXFxuXFxcIik7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTE0Nzk9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTUwMS1cXHRcXHRcXHRyZXR1cm4gVk1fRkFVTFRfT09NO1xcbm1tL2h1Z2VfbWVtb3J5LmM6MTUwMjpcXHRcXHR6ZXJvX2ZvbGlvID0gbW1fZ2V0X2h1Z2VfemVyb19mb2xpbyh2bWEtXFx1MDAzZXZtX21tKTtcXG5tbS9odWdlX21lbW9yeS5jLTE1MDMtXFx0XFx0aWYgKHVubGlrZWx5KCF6ZXJvX2ZvbGlvKSkge1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xODY3PWludCBjb3B5X2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdF9tbSwgc3RydWN0IG1tX3N0cnVjdCAqc3JjX21tLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xOTMwLVxcdFxcdC8qXFxubW0vaHVnZV9tZW1vcnkuYzoxOTMxOlxcdFxcdCAqIG1tX2dldF9odWdlX3plcm9fZm9saW8oKSB3aWxsIG5ldmVyIGFsbG9jYXRlIGEgbmV3XFxubW0vaHVnZV9tZW1vcnkuYy0xOTMyLVxcdFxcdCAqIGZvbGlvIGhlcmUsIHNpbmNlIHdlIGFscmVhZHkgaGF2ZSBhIHplcm8gcGFnZSB0b1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xOTM0LVxcdFxcdCAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6MTkzNTpcXHRcXHRtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKGRzdF9tbSk7XFxubW0vaHVnZV9tZW1vcnkuYy0xOTM2LVxcdFxcdGdvdG8gb3V0X3plcm9fcGFnZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTE6NDE6MDkuMjUzMDM5OTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjk5NjI4MTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZSBaZXJvIEZvbGlvIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBzb21ldGhpbmcgaW50ZXJlc3Rpbmc6IGBnZXRfaHVnZV96ZXJvX2ZvbGlvYCBpcyBkZWZpbmVkIGFzIGBzdGF0aWNgLiBUaGF0J3MgaW1wb3J0YW50LiBJdCBtZWFucyBpdCdzIGludGVybmFsIHRvIHRoZSBtb2R1bGUsIG5vdCBtZWFudCB0byBiZSBkaXJlY3RseSBhY2Nlc3NlZCBmcm9tIG91dHNpZGUuIEJ1dCB0aGVuIEkgc2VlIHRoaXMgZnVuY3Rpb24sIGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCwgd2hpY2ggKmlzKiBleHBvcnRlZCBhbmQgaXNuJ3Qgc3RhdGljLiBJdCdzIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBIbW0sIGxvb2tzIGxpa2UgYG1tX2dldF9odWdlX3plcm9fZm9saW9gIHByb2JhYmx5IGNhbGxzIGBnZXRfaHVnZV96ZXJvX2ZvbGlvYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdC4gTGV0J3MgZGl2ZSBpbnRvIGBtbS9odWdlX21lbW9yeS5jYCBhbmQgc2VlIGV4YWN0bHkgaG93IHRoZXkgaW50ZXJhY3QuIEdvdHRhIHVuZGVyc3RhbmQgdGhlIGZsb3cgYW5kIHdoYXQncyBnb2luZyBvbiBiZWhpbmQgdGhlIHNjZW5lcywgeW91IGtub3c/IFRoaXMgaXMgYSBrZXkgcGllY2Ugb2YgdGhlIHB1enpsZSBoZXJlLCBhbmQgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGludGVyYWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTc3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTE6NDE6MTIuNTUyNjY5OTI0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNjkxNzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1tX2dldF9odWdlX3plcm9fZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vaHVnZV9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTI1OD1zdGF0aWMgdm9pZCBwdXRfaHVnZV96ZXJvX2ZvbGlvKHZvaWQpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTI2Ni1cXG5tbS9odWdlX21lbW9yeS5jOjI2NzpzdHJ1Y3QgZm9saW8gKm1tX2dldF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxubW0vaHVnZV9tZW1vcnkuYy0yNjgte1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xNDc5PXZtX2ZhdWx0X3QgZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE1MDEtXFx0XFx0XFx0cmV0dXJuIFZNX0ZBVUxUX09PTTtcXG5tbS9odWdlX21lbW9yeS5jOjE1MDI6XFx0XFx0emVyb19mb2xpbyA9IG1tX2dldF9odWdlX3plcm9fZm9saW8odm1hLVxcdTAwM2V2bV9tbSk7XFxubW0vaHVnZV9tZW1vcnkuYy0xNTAzLVxcdFxcdGlmICh1bmxpa2VseSghemVyb19mb2xpbykpIHtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTg2Nz1pbnQgY29weV9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTkzMC1cXHRcXHQvKlxcbm1tL2h1Z2VfbWVtb3J5LmM6MTkzMTpcXHRcXHQgKiBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKCkgd2lsbCBuZXZlciBhbGxvY2F0ZSBhIG5ld1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTkzMi1cXHRcXHQgKiBmb2xpbyBoZXJlLCBzaW5jZSB3ZSBhbHJlYWR5IGhhdmUgYSB6ZXJvIHBhZ2UgdG9cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTkzNC1cXHRcXHQgKi9cXG5tbS9odWdlX21lbW9yeS5jOjE5MzU6XFx0XFx0bW1fZ2V0X2h1Z2VfemVyb19mb2xpbyhkc3RfbW0pO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTkzNi1cXHRcXHRnb3RvIG91dF96ZXJvX3BhZ2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDExOjQxOjEyLjU5NDM2Mzk2NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4OTUxMjA2ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEknbSBoYXZpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCBmb3IgUG90ZW50aWFsIFVzZSoqXG5cblJpZ2h0LCBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AgaXMgYW4gaW50ZXJlc3RpbmcgcG9pbnQgdG8gZGlnIGludG8uIEl0IGZlZWxzIGxpa2UgYSBrZXkgZnVuY3Rpb24gdG8gZXhwbG9yZS4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGl0cyBzY29wZS4gSXMgaXQgZXhwb3J0ZWQsIG1lYW5pbmcgaXQncyBpbnRlbmRlZCB0byBiZSB1c2VkIGV4dGVybmFsbHk/IE9yIGlzIGl0IGRlY2xhcmVkIGFzIG5vbi1zdGF0aWMsIHBlcmhhcHMgdmlzaWJsZSB3aXRoaW4gdGhlIG1vZHVsZSBidXQgbm90IGV4cGxpY2l0bHkgcHVibGljIGZvciBnZW5lcmFsIHVzZT8gVW5kZXJzdGFuZGluZyBpdHMgdmlzaWJpbGl0eSBpcyBjcnVjaWFsIHRvIGZpZ3VyaW5nIG91dCB3aGVyZSBhbmQgaG93IGl0IG1pZ2h0IGZpdCBpbnRvIG15IGN1cnJlbnQgb2JqZWN0aXZlLiBUaGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg3OSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDExOjQxOjE1LjQ4OTQ4Njc4N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjIyMzQxMSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qbW1fZ2V0X2h1Z2VfemVyb19mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdlX21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMTo0MToxNS41MzE3MTYxNzhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzkwODAxMTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeTpcblxuKipBbmFseXppbmcgYG1tX2dldF9odWdlX3plcm9fZm9saW9gKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbiBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AuIFRoZSBpbW1lZGlhdGUgb2JzZXJ2YXRpb24gaXMgdGhhdCBpdCdzICpub3QqIG1hcmtlZCBmb3IgZXhwb3J0LCBtZWFuaW5nIGl0J3MgaW50ZW5kZWQgZm9yIGludGVybmFsIHVzZSB3aXRoaW4gdGhlIG1vZHVsZSBvciBwcm9qZWN0IGl0J3MgZGVmaW5lZCBpbi4gSG93ZXZlciwgdGhlIGZhY3QgdGhhdCBpdCdzICpub3QqIGBzdGF0aWNgIHN1Z2dlc3RzIHRoYXQgc29tZXRoaW5nIGVsc2Ugd2l0aGluIHRoaXMgY29kZSBiYXNlIG5lZWRzIHRvIGNhbGwgaXQuIEl0J3Mgbm90IGxpbWl0ZWQgdG8gdGhlIGNvbXBpbGF0aW9uIHVuaXQuXG5cbk15IG5leHQgc3RlcCBoZXJlIGlzIHRvIGlkZW50aWZ5IHRob3NlIGNhbGxlcnMuIEtub3dpbmcgd2hlcmUgYW5kIGhvdyBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AgaXMgYmVpbmcgdXNlZCBpcyBjcnVjaWFsLiBJcyBpdCBvbmx5IHVzZWQgYnkgYSBzbWFsbCBwYXJ0IG9mIHRoZSBzeXN0ZW0gb3IgaXMgdGhpcyBmdW5jdGlvbiBjZW50cmFsIHRvIHRoZSBvcGVyYXRpb24gb2YgYSBrZXkgY29tcG9uZW50PyBXaGF0IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYXJlIHBvdGVudGlhbGx5IHRpZ2h0bHkgY291cGxlZCB3aXRoIHRoZSBpbXBsZW1lbnRhdGlvbiBhbmQgc2VtYW50aWNzIG9mIGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYD8gQnkgdHJhY2luZyBpdHMgdXNlLCBJIGNhbiBxdWlja2x5IGdhaW4gY29udGV4dCBhcm91bmQgaXRzIHB1cnBvc2UgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgYXJlYXMgb2YgY29uY2Vybiwgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMsIG9yIGRlcGVuZGVuY2llcy4gTGV0J3Mgc2VlIHdoZXJlIHRoaXMgcmFiYml0IGhvbGUgbGVhZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMTcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMTo0MToxOC45MjI1MTk1NjFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTA2NTYyMTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW1fZ2V0X2h1Z2VfemVyb19mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZGF4LmM9MTQxMT1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfcG1kX2xvYWRfaG9sZShzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuLS1cXG5mcy9kYXguYy0xNDE4LVxcbmZzL2RheC5jOjE0MTk6XFx0emVyb19mb2xpbyA9IG1tX2dldF9odWdlX3plcm9fZm9saW8odm1mLVxcdTAwM2V2bWEtXFx1MDAzZXZtX21tKTtcXG5mcy9kYXguYy0xNDIwLVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NTQ5PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19odWdlX3plcm9fcG1kKHBtZF90IHBtZClcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTU1My1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo1NTQ6c3RydWN0IGZvbGlvICptbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01NTUtdm9pZCBtbV9wdXRfaHVnZV96ZXJvX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTgwNj1zdGF0aWMgaW5saW5lIGludCBzcGxpdF9mb2xpb190b19vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X29yZGVyKVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtODEzLSAqXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6ODE0OiAqIFRoaXMgZnVuY3Rpb24gc2hhbGwgYmUgdXNlZCB3aGVuIG1tX2dldF9odWdlX3plcm9fZm9saW8oKSBjYW5ub3QgYmVcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC04MTUtICogdXNlZCBhcyB0aGVyZSBpcyBubyBhcHByb3ByaWF0ZSBtbSBsaWZldGltZSB0byB0aWUgdGhlIGh1Z2UgemVybyBmb2xpb1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yNTg9c3RhdGljIHZvaWQgcHV0X2h1Z2VfemVyb19mb2xpbyh2b2lkKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yNjYtXFxubW0vaHVnZV9tZW1vcnkuYzoyNjc6c3RydWN0IGZvbGlvICptbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjY4LXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTQ3OT12bV9mYXVsdF90IGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xNTAxLVxcdFxcdFxcdHJldHVybiBWTV9GQVVMVF9PT007XFxubW0vaHVnZV9tZW1vcnkuYzoxNTAyOlxcdFxcdHplcm9fZm9saW8gPSBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKHZtYS1cXHUwMDNldm1fbW0pO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTUwMy1cXHRcXHRpZiAodW5saWtlbHkoIXplcm9fZm9saW8pKSB7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTE4Njc9aW50IGNvcHlfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE5MzAtXFx0XFx0LypcXG5tbS9odWdlX21lbW9yeS5jOjE5MzE6XFx0XFx0ICogbW1fZ2V0X2h1Z2VfemVyb19mb2xpbygpIHdpbGwgbmV2ZXIgYWxsb2NhdGUgYSBuZXdcXG5tbS9odWdlX21lbW9yeS5jLTE5MzItXFx0XFx0ICogZm9saW8gaGVyZSwgc2luY2Ugd2UgYWxyZWFkeSBoYXZlIGEgemVybyBwYWdlIHRvXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE5MzQtXFx0XFx0ICovXFxubW0vaHVnZV9tZW1vcnkuYzoxOTM1OlxcdFxcdG1tX2dldF9odWdlX3plcm9fZm9saW8oZHN0X21tKTtcXG5tbS9odWdlX21lbW9yeS5jLTE5MzYtXFx0XFx0Z290byBvdXRfemVyb19wYWdlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMTo0MToyMC40NzMxODA0OTVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM0NTc1MzEzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCBGdW5jdGlvbiBhbmQgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzKipcblxuT2theSwgc28gYG1tX2dldF9odWdlX3plcm9fZm9saW9gIHNlZW1zIGxpa2UgYSBrZXkgZnVuY3Rpb24gdG8gZm9jdXMgb24gaGVyZS4gSXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhpcyBhcmVhLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFyZSBwcmVyZXF1aXNpdGVzIG9yIHJlbGF0ZWQgdG8gaXQ/IEkgc2hvdWxkIGNoZWNrIGFuZCBzZWUgaWYgaXQgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZC5cblxuUmlnaHQsIGBtbS9odWdlX21lbW9yeS5jYCBpcyB0aGUgbGlrZWx5IGxvY2F0aW9uLiBJIHJlY2FsbCB0aGF0IGl0J3MgY29tcGlsZWQgd2hlbiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBlbmFibGVkLCBvciBhdCBsZWFzdCB0aGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBjb2RlLiBTbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGNvbXBpbGF0aW9uIGNvbmRpdGlvbnMgYW5kIGxvb2sgYXQgb3RoZXIgc291cmNlIGZpbGVzIHRoYXQgbWF5IGluY2x1ZGUgdGhpcyBmdW5jdGlvbi4gVGhpcyBzaG91bGQgaGVscCBtZSBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBjb250ZXh0IGFuZCBwb3RlbnRpYWwgY29tcGxleGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTk5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTE6NDE6MjMuODE4OTM2MjExWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTM0NjI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdlX21lbW9yeS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTEwMD1vYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgKz0gbWlncmF0ZV9kZXZpY2Uub1xcbm1tL01ha2VmaWxlOjEwMTpvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXFxubW0vTWFrZWZpbGUtMTAyLW9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICs9IHBhZ2VfY291bnRlci5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDExOjQxOjIzLjg2NDI4NjgzMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjk3NTI0MjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTWVtb3J5IE1hbmFnZW1lbnQgQ29uZmlndXJhdGlvbiBBc3Nlc3NtZW50KipcblxuQWxyaWdodCwgc28gdGhlIGNvcmUgaXNzdWUgYXQgaGFuZCBpcyB0aGUgcmVxdWlyZW1lbnQgZm9yIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIFRoYXQncyB0aGUgYmFzZWxpbmUgYXNzdW1wdGlvbiwgdGhlIGluaXRpYWwgZm9jYWwgcG9pbnQuIE5vdywgZ2l2ZW4gdGhhdCdzIHRoZSBzdGFydGluZyBwb2ludCwgbXkgbmV4dCBsaW5lIG9mIGlucXVpcnkgaGFzIHRvIGJlIHRvIGxvb2sgYXJvdW5kIGFuZCBtYWtlIHN1cmUgdGhhdCB3ZSBhcmVuJ3Qgb3Zlcmxvb2tpbmcgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlIGdvYWwgaXMgYSBjb21wcmVoZW5zaXZlIGFzc2Vzc21lbnQsIGVuc3VyaW5nIG5vdGhpbmcgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBvciByZWxhdGVkIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zIGdldHMgbGVmdCBieSB0aGUgd2F5c2lkZS4gTGV0J3Mgc2VlIHdoYXQgZWxzZSB0aGUgY29uZmlndXJhdGlvbiBwcmVzZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU4NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDExOjQxOjI3LjE2MTgxMzgzN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyMDY5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04NDM9Y29uZmlnIE1NX0lEXFxuLS1cXG5tbS9LY29uZmlnLTg0NS1cXG5tbS9LY29uZmlnOjg0NjptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy04NDctXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG4tLVxcbm1tL0tjb25maWc9ODY0PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy04NjktXFxubW0vS2NvbmZpZzo4NzA6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xcbm1tL0tjb25maWctODcxLVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctODc2LVxcbm1tL0tjb25maWc6ODc3OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXFxubW0vS2NvbmZpZy04NzgtXFx0XFx0Ym9vbCBcXFwibWFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODg1LVxcbm1tL0tjb25maWc6ODg2OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxcbm1tL0tjb25maWctODg3LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZz04OTM9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTkwMi1cXG5tbS9LY29uZmlnOjkwMzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxcbm1tL0tjb25maWctOTA0LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MTItXFxubW0vS2NvbmZpZzo5MTM6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy05MTQtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MjAtXFxubW0vS2NvbmZpZzo5MjE6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTkyMi1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTI4LVxcbm1tL0tjb25maWc6OTI5OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTMwLVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWc9OTM4PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy05NDctXFxubW0vS2NvbmZpZzo5NDg6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcXG5tbS9LY29uZmlnLTk0OS1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWctOTU2LVxcbm1tL0tjb25maWc6OTU3OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xcbm1tL0tjb25maWctOTU4LVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctOTY0LVxcbm1tL0tjb25maWc6OTY1OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXFxubW0vS2NvbmZpZy05NjYtXFx0XFx0Ym9vbCBcXFwid2l0aGluX3NpemVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk3Mi1cXG5tbS9LY29uZmlnOjk3MzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0VcXG5tbS9LY29uZmlnLTk3NC1cXHRcXHRib29sIFxcXCJhZHZpc2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDExOjQxOjI3LjIwNjAyNDkwN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODU4ODQ0MTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBNZW1vcnkgQmFycmllciBGaXgqKlxuXG5Pa2F5LCBzbyB0aGUgZml4IGl0c2VsZiBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHRoZSBrZXkuIEZ1bmN0aW9uYWxseSwgaXQgZG9lcyB0aGUgdHJpY2ssIHJlc29sdmluZyB0aGF0IG1lbW9yeSBiYXJyaWVyIGlzc3VlLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AsIHRoYXQgc2VlbXMgdG8gYmUgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uLiBBbmQgdGhlIG9ubHkgY29uZmlnIG5lZWRlZCBpcyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLlxuXG5Ob3csIGxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSBpZiBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AgaXMgdGhlICpvbmx5KiBwZXJ0aW5lbnQgc3ltYm9sIGhlcmUuIFRoZSBmdW5jdGlvbiBgZ2V0X2h1Z2VfemVyb19mb2xpb2AgaXNuJ3QgZ29pbmcgdG8gd29yaywgYXMgaXQncyBzdGF0aWMsIHNvIGl0J3Mgbm90IGEgcmVsZXZhbnQgc3ltYm9sIHRvIGNoZWNrLiBBbm90aGVyIGZ1bmN0aW9uIEkgc2hvdWxkIGxvb2sgYXQgaXMgYGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYDsgdGhhdCBsb29rcyBsaWtlIGFub3RoZXIgbGlrZWx5IGNhbmRpZGF0ZSB0byBleGFtaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDkxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDExOjQxOjMxLjA2NDg3MTYzMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3ODQxODg5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdlX21tLmgtOS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoxMDp2bV9mYXVsdF90IGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0xMS1pbnQgY29weV9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTMzMT1zdGF0aWMgdm9pZCBtYXBfYW5vbl9mb2xpb19wbWRfcGYoc3RydWN0IGZvbGlvICpmb2xpbywgcG1kX3QgKnBtZCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTM0MC1cXG5tbS9odWdlX21lbW9yeS5jOjEzNDE6c3RhdGljIHZtX2ZhdWx0X3QgX19kb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG5tbS9odWdlX21lbW9yeS5jLTEzNDIte1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xNDY3PXN0YXRpYyB2b2lkIHNldF9odWdlX3plcm9fZm9saW8ocGd0YWJsZV90IHBndGFibGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xNDc4LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTQ3OTp2bV9mYXVsdF90IGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTQ4MC17XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE1MzItXFxubW0vaHVnZV9tZW1vcnkuYzoxNTMzOlxcdHJldHVybiBfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHZtZik7XFxubW0vaHVnZV9tZW1vcnkuYy0xNTM0LX1cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MjM5OD1zdGF0aWMgYm9vbCBoYXNfZGVwb3NpdGVkX3BndGFibGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90IHBtZHZhbCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjQxMy1cXHQgKiBPdGhlcndpc2UsIG9ubHkgYW5vbnltb3VzIGZvbGlvcyBhcmUgZGVwb3NpdGVkLCBzZWVcXG5tbS9odWdlX21lbW9yeS5jOjI0MTQ6XFx0ICogX19kb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZSgpLlxcbm1tL2h1Z2VfbWVtb3J5LmMtMjQxNS1cXHQgKi9cXG4tLVxcbm1tL21lbW9yeS5jPTYyMDA9c3RhdGljIGlubGluZSB2bV9mYXVsdF90IGNyZWF0ZV9odWdlX3BtZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTYyMDMtXFx0aWYgKHZtYV9pc19hbm9ueW1vdXModm1hKSlcXG5tbS9tZW1vcnkuYzo2MjA0OlxcdFxcdHJldHVybiBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZSh2bWYpO1xcbm1tL21lbW9yeS5jLTYyMDUtXFx0aWYgKHZtYS1cXHUwMDNldm1fb3BzLVxcdTAwM2VodWdlX2ZhdWx0KVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz03NzA9RVhQT1JUX1NZTUJPTChtaWdyYXRlX3ZtYV9zZXR1cCk7XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTc3OC0gKiBAcGFnZSBuZWVkcyB0byBiZSBpbml0aWFsaXplZCBhbmQgc2V0dXAgYWZ0ZXIgaXQncyBhbGxvY2F0ZWQuIFRoZSBjb2RlIGJpdHNcXG5tbS9taWdyYXRlX2RldmljZS5jOjc3OTogKiBoZXJlIGZvbGxvdyBjbG9zZWx5IHRoZSBjb2RlIGluIF9fZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2UoKS4gVGhpcyBBUEkgZG9lc1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzgwLSAqIG5vdCBzdXBwb3J0IFRIUCB6ZXJvIHBhZ2VzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMTo0MTozMi42NDMyOTU2NDlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgwNzgwNTM5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBLZXkgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIHRoYXQgYGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCBpcyBhIHJlYWxseSBzb2xpZCBjYW5kaWRhdGUgYXMgYSBmb2N1cyBzeW1ib2wuIEl0J3MgYSBrZXkgZnVuY3Rpb24gaW4gaGFuZGxpbmcgYW5vbnltb3VzIGh1Z2UgcGFnZXMsIHNvIGl0IHNob3VsZCBiZSBxdWl0ZSBpbmZvcm1hdGl2ZSB0byBhbmFseXplLiBBbmQsIGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCBpcyBhbm90aGVyIHN0cm9uZyBjb250ZW5kZXIuXG5cbkkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgY2FsbGVycyBvZiBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AsIGp1c3QgdG8gY29uZmlybSBteSB0aGlua2luZyBhbmQgZXhwYW5kIHRoZSBjb250ZXh0LiBMZXQgbWUgc2VlLi4uIHllcywgaXQgbG9va3MgbGlrZSBgZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2VgLCBgY29weV9odWdlX3BtZGAsIGFuZCBgZGF4X3BtZF9sb2FkX2hvbGVgIGFyZSBhbGwgY2FsbGluZyBpdC4gUGVyZmVjdC5cblxuUmlnaHQsIHNvIEknbGwgYWRkIGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCwgYGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCwgYGNvcHlfaHVnZV9wbWRgLCBhbmQgYGRheF9wbWRfbG9hZF9ob2xlYCB0byBteSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMuIEl0J3MgaW1wb3J0YW50IHRvIGhhdmUgYSBnb29kIHNldC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBgY29weV9odWdlX3BtZGAgYW5kIGBkYXhfcG1kX2xvYWRfaG9sZWAsIGJlY2F1c2UgdGhleSBkb24ndCBzZWVtIGFzIG9idmlvdXMgYXQgZmlyc3QgZ2xhbmNlLiBJIHdpbGwgY2hlY2sgdGhlbSBvdXQsIGFuZCBzZWUgd2hhdCB0aGUgZnVuY3Rpb24gZG9lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU0OSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMTo0MTozNy40NTExMDI4NTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzA2MDk1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29weV9odWdlX3BtZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdlX21tLmg9MTA9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MTE6aW50IGNvcHlfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMTItXFx0XFx0ICBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTgxMT1zdGF0aWMgdm9pZCBjb3B5X2h1Z2Vfbm9uX3ByZXNlbnRfcG1kKFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xODY2LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTg2NzppbnQgY29weV9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcXG5tbS9odWdlX21lbW9yeS5jLTE4NjgtXFx0XFx0ICBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL21lbW9yeS5jPTEzNzk9Y29weV9wbWRfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEsXFxuLS1cXG5tbS9tZW1vcnkuYy0xMzk3LVxcdFxcdFxcdFZNX0JVR19PTl9WTUEobmV4dC1hZGRyICE9IEhQQUdFX1BNRF9TSVpFLCBzcmNfdm1hKTtcXG5tbS9tZW1vcnkuYzoxMzk4OlxcdFxcdFxcdGVyciA9IGNvcHlfaHVnZV9wbWQoZHN0X21tLCBzcmNfbW0sIGRzdF9wbWQsIHNyY19wbWQsXFxubW0vbWVtb3J5LmMtMTM5OS1cXHRcXHRcXHRcXHRcXHQgICAgYWRkciwgZHN0X3ZtYSwgc3JjX3ZtYSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDExOjQxOjM4Ljg4MTcxNzAwN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjgyMTU0MTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk15IFBlcnNwZWN0aXZlIG9uIGBjb3B5X2h1Z2VfcG1kYCoqXG5cblJpZ2h0LCBgY29weV9odWdlX3BtZGAuLi4geWVhaCwgdGhhdCdzIGEgc29saWQgcGllY2Ugb2Ygd29yay4gRnJvbSBhIHBlcmZvcm1hbmNlIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBzdGFuZHBvaW50LCBpdCdzIHByZXR0eSBlbGVnYW50LiBUaGUgaW5oZXJlbnQgYWR2YW50YWdlcyBvZiBkZWFsaW5nIHdpdGggaHVnZSBwYWdlcyBhcmUgd2VsbC11bmRlcnN0b29kLCBhbmQgdGhlIGBjb3B5X2h1Z2VfcG1kYCBpbXBsZW1lbnRhdGlvbiBjbGVhcmx5IGxldmVyYWdlcyB0aG9zZSB0byBvcHRpbWl6ZSBkYXRhIG1vdmVtZW50LiBJJ3ZlIHNlZW4gc29tZSBpbXBsZW1lbnRhdGlvbnMgc3RydWdnbGUgd2l0aCB0aGUgY29tcGxleGl0aWVzLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIG5lc3RlZCBwYWdlIHRhYmxlcyBvciBkaWZmZXJlbnQgaGFyZHdhcmUgYXJjaGl0ZWN0dXJlcy4gQnV0IGJhc2VkIG9uIG15IGluaXRpYWwgcmV2aWV3LCB0aGlzIHNvbHV0aW9uIHNlZW1zIHJvYnVzdCBhbmQgY29uc2lkZXJzIHRob3NlIHBvdGVudGlhbCBwaXRmYWxscy4gVGhlIGRlc2lnbiBkZWNpc2lvbnMgYXBwZWFyIHNvdW5kLCB3aXRoIGF0dGVudGlvbiBnaXZlbiB0byBtaW5pbWl6aW5nIFRMQiBmbHVzaGVzIGFuZCBtYXhpbWl6aW5nIGNhY2hlIHV0aWxpemF0aW9uLiBJJ2QgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIHNwZWNpZmljIGhhcmR3YXJlIGludGVyYWN0aW9ucywgcGFydGljdWxhcmx5IGZvciBteSB1c2UgY2FzZSBidXQgSSBsaWtlIHRoZSBhcHByb2FjaC4gT3ZlcmFsbCwgaXQgaW5kaWNhdGVzIGEgc3Ryb25nIGdyYXNwIG9mIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBoaWVyYXJjaHkgYW5kIGEgY29tbWl0bWVudCB0byBlZmZpY2llbnQgZGF0YSB0cmFuc2Zlci5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQyMCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDExOjQxOjQyLjU2Mzg3MzM0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE4NTM0NTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRheF9wbWRfbG9hZF9ob2xlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9kYXguYz0xMzk1PXN0YXRpYyB2bV9mYXVsdF90IGRheF9sb2FkX2hvbGUoc3RydWN0IHhhX3N0YXRlICp4YXMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi0tXFxuZnMvZGF4LmMtMTQxMC0jaWZkZWYgQ09ORklHX0ZTX0RBWF9QTURcXG5mcy9kYXguYzoxNDExOnN0YXRpYyB2bV9mYXVsdF90IGRheF9wbWRfbG9hZF9ob2xlKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG5mcy9kYXguYy0xNDEyLVxcdFxcdGNvbnN0IHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCB2b2lkICoqZW50cnkpXFxuLS1cXG5mcy9kYXguYy0xNDIxLVxcdGlmICh1bmxpa2VseSghemVyb19mb2xpbykpIHtcXG5mcy9kYXguYzoxNDIyOlxcdFxcdHRyYWNlX2RheF9wbWRfbG9hZF9ob2xlX2ZhbGxiYWNrKGlub2RlLCB2bWYsIHplcm9fZm9saW8sICplbnRyeSk7XFxuZnMvZGF4LmMtMTQyMy1cXHRcXHRyZXR1cm4gVk1fRkFVTFRfRkFMTEJBQ0s7XFxuLS1cXG5mcy9kYXguYy0xNDMwLVxcdGlmIChyZXQgPT0gVk1fRkFVTFRfTk9QQUdFKVxcbmZzL2RheC5jOjE0MzE6XFx0XFx0dHJhY2VfZGF4X3BtZF9sb2FkX2hvbGUoaW5vZGUsIHZtZiwgemVyb19mb2xpbywgKmVudHJ5KTtcXG5mcy9kYXguYy0xNDMyLVxcdHJldHVybiByZXQ7XFxuLS1cXG5mcy9kYXguYy0xNDM0LSNlbHNlXFxuZnMvZGF4LmM6MTQzNTpzdGF0aWMgdm1fZmF1bHRfdCBkYXhfcG1kX2xvYWRfaG9sZShzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuZnMvZGF4LmMtMTQzNi1cXHRcXHRjb25zdCBzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgdm9pZCAqKmVudHJ5KVxcbi0tXFxuZnMvZGF4LmM9MTg0Mj1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfZmF1bHRfaXRlcihzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbmZzL2RheC5jLTE4NjQtXFx0XFx0XFx0cmV0dXJuIGRheF9sb2FkX2hvbGUoeGFzLCB2bWYsIGl0ZXIsIGVudHJ5KTtcXG5mcy9kYXguYzoxODY1OlxcdFxcdHJldHVybiBkYXhfcG1kX2xvYWRfaG9sZSh4YXMsIHZtZiwgaXRlciwgZW50cnkpO1xcbmZzL2RheC5jLTE4NjYtXFx0fVxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZnNfZGF4Lmg9NjE9REVGSU5FX1BNRF9GQVVMVF9FVkVOVChkYXhfcG1kX2ZhdWx0X2RvbmUpO1xcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2ZzX2RheC5oLTYyLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2ZzX2RheC5oOjYzOkRFQ0xBUkVfRVZFTlRfQ0xBU1MoZGF4X3BtZF9sb2FkX2hvbGVfY2xhc3MsXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZnNfZGF4LmgtNjQtXFx0VFBfUFJPVE8oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9mc19kYXguaC05Ni0jZGVmaW5lIERFRklORV9QTURfTE9BRF9IT0xFX0VWRU5UKG5hbWUpIFxcXFxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9mc19kYXguaDo5NzpERUZJTkVfRVZFTlQoZGF4X3BtZF9sb2FkX2hvbGVfY2xhc3MsIG5hbWUsIFxcXFxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9mc19kYXguaC05OC1cXHRUUF9QUk9UTyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgXFxcXFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZnNfZGF4LmgtMTAxLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2ZzX2RheC5oOjEwMjpERUZJTkVfUE1EX0xPQURfSE9MRV9FVkVOVChkYXhfcG1kX2xvYWRfaG9sZSk7XFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZnNfZGF4Lmg6MTAzOkRFRklORV9QTURfTE9BRF9IT0xFX0VWRU5UKGRheF9wbWRfbG9hZF9ob2xlX2ZhbGxiYWNrKTtcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9mc19kYXguaC0xMDQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDExOjQxOjQzLjk4MjQxMTY4MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODAyMDgwNDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIHRoZSBSaWdodCBTeW1ib2xzKipcblxuT2theSwgc28gSSdtIGV2YWx1YXRpbmcgZm9jdXMgc3ltYm9scyBmb3IgdGhpcyBhbmFseXNpcy4gSW5pdGlhbGx5LCBJIGNvbnNpZGVyZWQgYGRheF9wbWRfbG9hZF9ob2xlYCwgYnV0IHRoZW4gcmVhbGl6ZWQgaXQncyBzdGF0aWMsIHdoaWNoIG1ha2VzIGl0IGxlc3MgdGhhbiBpZGVhbC4gYGRheF9mYXVsdF9pdGVyYCBoYXMgdGhlIHNhbWUgcHJvYmxlbSwgYmVpbmcgc3RhdGljIGFzIHdlbGwuIEkgbmVlZCBub24tc3RhdGljIHN5bWJvbHMgZm9yIGEgYmV0dGVyIHZpZXcuXG5cbkxldCdzIHN3aXRjaCB0byBhIG5ldyBzZXQgb2YgcG9zc2libGUgdGFyZ2V0cy4gRm9jdXNpbmcgb24gdGhlIG1vcmUgZ2VuZXJhbCBodWdlIHBhZ2UgaGFuZGxpbmcsIGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCwgYGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCwgYW5kIGBjb3B5X2h1Z2VfcG1kYCBzb3VuZCBtb3JlIHByb21pc2luZy5cblxuQWgsIGdvb2QsIGEgcXVpY2sgY2hlY2sgY29uZmlybXMgdGhhdCBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AsIGBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAsIGFuZCBgY29weV9odWdlX3BtZGAgYXJlIGFsbCBpbmRlZWQgbm9uLXN0YXRpYyBzeW1ib2xzLiBQZXJmZWN0ISBUaGVzZSBhcmUgbXVjaCBiZXR0ZXIgY2hvaWNlcyBmb3IgYSBtb3JlIGR5bmFtaWMgdW5kZXJzdGFuZGluZy5cblxuTm93LCBsZXQgbWUganVzdCBjb25maXJtIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgaWYgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyB0aGUgb25seSBjb25maWcgSSBuZWVkIHRvIGNvbnNpZGVyLiBJIGRvbid0IHdhbnQgdG8gZ2V0IHNpZGUtdHJhY2tlZCBsb29raW5nIGF0IG9wdGlvbnMgdGhhdCBJIGRvbid0IG5lZWQuXG5cbkFscmlnaHQsIGEgcXVpY2sgc2NhbiBjb25maXJtcyB0aGF0IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgc3VmZmljaWVudC4gR3JlYXQuXG5cbk5vdyB0aGF0IEkgaGF2ZSBhIGZvY3VzZWQgc2V0IG9mIHN5bWJvbHMgYW5kIGhhdmUgdmVyaWZpZWQgdGhlIGNvbmZpZywgbGV0J3MgcHJvY2VlZCB0byBzZXQgdGhlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1NTAsIk91dHB1dFRva2VucyI6MTQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDExOjQxOjQ5Ljc4NDQ5MzkzM1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMTU3MzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1tX2dldF9odWdlX3plcm9fZm9saW9cIixcbiAgICBcImRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlXCIsXG4gICAgXCJjb3B5X2h1Z2VfcG1kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgYmFycmllciBpc3N1ZSBpbiBnZXRfaHVnZV96ZXJvX2ZvbGlvIGJ5IGNoYW5naW5nIGF0b21pY19zZXQgdG8gYXRvbWljX3NldF9yZWxlYXNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtICh0cmFuc3BhcmVudCBodWdlcGFnZXMpIHRoYXQgZml4ZXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24uIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgbW1fZ2V0X2h1Z2VfemVyb19mb2xpbyBhbmQgaXRzIGNhbGxlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvXCIsXG4gICAgXCJkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZVwiLFxuICAgIFwiY29weV9odWdlX3BtZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGJhcnJpZXIgaXNzdWUgaW4gZ2V0X2h1Z2VfemVyb19mb2xpbyBieSBjaGFuZ2luZyBhdG9taWNfc2V0IHRvIGF0b21pY19zZXRfcmVsZWFzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAodHJhbnNwYXJlbnQgaHVnZXBhZ2VzKSB0aGF0IGZpeGVzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIG1tX2dldF9odWdlX3plcm9fZm9saW8gYW5kIGl0cyBjYWxsZXJzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowd94sj[1] Phase: Succeeded StartedAt: 2026-07-30 11:42:01 +0000 UTC FinishedAt: 2026-07-30 11:42:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd94sj[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-30 11:42:01 +0000 UTC FinishedAt: 2026-07-30 11:42:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd94sj[2] Phase: Succeeded StartedAt: 2026-07-30 11:42:01 +0000 UTC FinishedAt: 2026-07-30 15:25:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd94sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["mm_get_huge_zero_folio","do_huge_pmd_anonymous_page","copy_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"537b71d7-8297-4fe4-bd9a-adc2b6e32131","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-30 11:42:01 +0000 UTC FinishedAt: 2026-07-30 15:25:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["mm_get_huge_zero_folio","do_huge_pmd_anonymous_page","copy_huge_pmd"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"537b71d7-8297-4fe4-bd9a-adc2b6e32131","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-workflowd94sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["mm_get_huge_zero_folio","do_huge_pmd_anonymous_page","copy_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"537b71d7-8297-4fe4-bd9a-adc2b6e32131","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-30 11:42:01 +0000 UTC FinishedAt: 2026-07-30 11:42:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd94sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["mm_get_huge_zero_folio","do_huge_pmd_anonymous_page","copy_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"537b71d7-8297-4fe4-bd9a-adc2b6e32131","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-30 11:42:01 +0000 UTC FinishedAt: 2026-07-30 11:42:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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-workflowd94sj/series-workflowd94sj-convert-artifact-2730761457/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd94sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["mm_get_huge_zero_folio","do_huge_pmd_anonymous_page","copy_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"537b71d7-8297-4fe4-bd9a-adc2b6e32131","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-30 11:42:12 +0000 UTC FinishedAt: 2026-07-30 12:00:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd94sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["mm_get_huge_zero_folio","do_huge_pmd_anonymous_page","copy_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"537b71d7-8297-4fe4-bd9a-adc2b6e32131","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-30 11:42:12 +0000 UTC FinishedAt: 2026-07-30 12:00:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*7b524825-7d2b-4cc8-ae00-6a1aed495a98,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-workflowd94sj/series-workflowd94sj-convert-artifact-2730761457/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": "38bb9a4b-ad60-40f4-bfee-bfb282421647", "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-workflowd94sj/series-workflowd94sj-build-action-3475953439/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd94sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["mm_get_huge_zero_folio","do_huge_pmd_anonymous_page","copy_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"537b71d7-8297-4fe4-bd9a-adc2b6e32131","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-30 11:42:12 +0000 UTC FinishedAt: 2026-07-30 11:59:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*7b524825-7d2b-4cc8-ae00-6a1aed495a98,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-workflowd94sj/series-workflowd94sj-convert-artifact-2730761457/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": "38bb9a4b-ad60-40f4-bfee-bfb282421647", "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-workflowd94sj/series-workflowd94sj-build-action-3475953439/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd94sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["mm_get_huge_zero_folio","do_huge_pmd_anonymous_page","copy_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"537b71d7-8297-4fe4-bd9a-adc2b6e32131","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-30 12:00:04 +0000 UTC FinishedAt: 2026-07-30 12:00:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd94sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["mm_get_huge_zero_folio","do_huge_pmd_anonymous_page","copy_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"537b71d7-8297-4fe4-bd9a-adc2b6e32131","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-30 12:00:04 +0000 UTC FinishedAt: 2026-07-30 12:00:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd94sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["mm_get_huge_zero_folio","do_huge_pmd_anonymous_page","copy_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"537b71d7-8297-4fe4-bd9a-adc2b6e32131","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-30 12:00:04 +0000 UTC FinishedAt: 2026-07-30 12:00:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd94sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["mm_get_huge_zero_folio","do_huge_pmd_anonymous_page","copy_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"537b71d7-8297-4fe4-bd9a-adc2b6e32131","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-30 12:00:04 +0000 UTC FinishedAt: 2026-07-30 12:00:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"537b71d7-8297-4fe4-bd9a-adc2b6e32131","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-workflowd94sj/series-workflowd94sj-convert-artifact-776907588/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd94sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["mm_get_huge_zero_folio","do_huge_pmd_anonymous_page","copy_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"537b71d7-8297-4fe4-bd9a-adc2b6e32131","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-30 12:00:14 +0000 UTC FinishedAt: 2026-07-30 12:02:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd94sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["mm_get_huge_zero_folio","do_huge_pmd_anonymous_page","copy_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"537b71d7-8297-4fe4-bd9a-adc2b6e32131","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-30 12:00:14 +0000 UTC FinishedAt: 2026-07-30 12:02:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*38bb9a4b-ad60-40f4-bfee-bfb282421647,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-workflowd94sj/series-workflowd94sj-build-action-3475953439/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-workflowd94sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["mm_get_huge_zero_folio","do_huge_pmd_anonymous_page","copy_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"537b71d7-8297-4fe4-bd9a-adc2b6e32131","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-30 12:02:24 +0000 UTC FinishedAt: 2026-07-30 12:02:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd94sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["mm_get_huge_zero_folio","do_huge_pmd_anonymous_page","copy_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"537b71d7-8297-4fe4-bd9a-adc2b6e32131","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-30 12:02:24 +0000 UTC FinishedAt: 2026-07-30 12:02:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd94sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["mm_get_huge_zero_folio","do_huge_pmd_anonymous_page","copy_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"537b71d7-8297-4fe4-bd9a-adc2b6e32131","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-30 12:02:24 +0000 UTC FinishedAt: 2026-07-30 12:20:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd94sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["mm_get_huge_zero_folio","do_huge_pmd_anonymous_page","copy_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"537b71d7-8297-4fe4-bd9a-adc2b6e32131","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-30 12:02:24 +0000 UTC FinishedAt: 2026-07-30 12:20:25 +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:*7b524825-7d2b-4cc8-ae00-6a1aed495a98,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-workflowd94sj/series-workflowd94sj-convert-artifact-776907588/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": "7d307a02-b9e8-45e2-adf5-e2731e6df64b", "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-workflowd94sj/series-workflowd94sj-build-action-2646922064/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd94sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["mm_get_huge_zero_folio","do_huge_pmd_anonymous_page","copy_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"537b71d7-8297-4fe4-bd9a-adc2b6e32131","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-30 12:02:24 +0000 UTC FinishedAt: 2026-07-30 12:20:15 +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:*7b524825-7d2b-4cc8-ae00-6a1aed495a98,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-workflowd94sj/series-workflowd94sj-convert-artifact-776907588/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": "7d307a02-b9e8-45e2-adf5-e2731e6df64b", "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-workflowd94sj/series-workflowd94sj-build-action-2646922064/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd94sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["mm_get_huge_zero_folio","do_huge_pmd_anonymous_page","copy_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"537b71d7-8297-4fe4-bd9a-adc2b6e32131","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-30 12:20:25 +0000 UTC FinishedAt: 2026-07-30 12:20:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd94sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["mm_get_huge_zero_folio","do_huge_pmd_anonymous_page","copy_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"537b71d7-8297-4fe4-bd9a-adc2b6e32131","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: Skipped StartedAt: 2026-07-30 12:20:25 +0000 UTC FinishedAt: 2026-07-30 12:20:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd94sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["mm_get_huge_zero_folio","do_huge_pmd_anonymous_page","copy_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"537b71d7-8297-4fe4-bd9a-adc2b6e32131","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-30 12:20:25 +0000 UTC FinishedAt: 2026-07-30 12:22:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd94sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["mm_get_huge_zero_folio","do_huge_pmd_anonymous_page","copy_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"537b71d7-8297-4fe4-bd9a-adc2b6e32131","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-30 12:20:25 +0000 UTC FinishedAt: 2026-07-30 12:22:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7d307a02-b9e8-45e2-adf5-e2731e6df64b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd94sj/series-workflowd94sj-build-action-2646922064/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-workflowd94sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["mm_get_huge_zero_folio","do_huge_pmd_anonymous_page","copy_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"537b71d7-8297-4fe4-bd9a-adc2b6e32131","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-30 12:22:36 +0000 UTC FinishedAt: 2026-07-30 15:25:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd94sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["mm_get_huge_zero_folio","do_huge_pmd_anonymous_page","copy_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"537b71d7-8297-4fe4-bd9a-adc2b6e32131","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-30 12:22:36 +0000 UTC FinishedAt: 2026-07-30 15:25:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_get_huge_zero_folio","do_huge_pmd_anonymous_page","copy_huge_pmd"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*38bb9a4b-ad60-40f4-bfee-bfb282421647,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7d307a02-b9e8-45e2-adf5-e2731e6df64b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd94sj/series-workflowd94sj-build-action-3475953439/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd94sj/series-workflowd94sj-build-action-2646922064/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowd94sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["mm_get_huge_zero_folio","do_huge_pmd_anonymous_page","copy_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"537b71d7-8297-4fe4-bd9a-adc2b6e32131","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-30 12:22:36 +0000 UTC FinishedAt: 2026-07-30 12:22:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd94sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["mm_get_huge_zero_folio","do_huge_pmd_anonymous_page","copy_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"537b71d7-8297-4fe4-bd9a-adc2b6e32131","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-30 12:22:36 +0000 UTC FinishedAt: 2026-07-30 12:22:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_get_huge_zero_folio","do_huge_pmd_anonymous_page","copy_huge_pmd"],"skip_cover_check":true},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-workflowd94sj/series-workflowd94sj-convert-artifact-2319469645/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd94sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["mm_get_huge_zero_folio","do_huge_pmd_anonymous_page","copy_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"537b71d7-8297-4fe4-bd9a-adc2b6e32131","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-30 12:22:36 +0000 UTC FinishedAt: 2026-07-30 12:22:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd94sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["mm_get_huge_zero_folio","do_huge_pmd_anonymous_page","copy_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"537b71d7-8297-4fe4-bd9a-adc2b6e32131","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-30 12:22:36 +0000 UTC FinishedAt: 2026-07-30 12:22:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd94sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["mm_get_huge_zero_folio","do_huge_pmd_anonymous_page","copy_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"537b71d7-8297-4fe4-bd9a-adc2b6e32131","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-30 12:22:36 +0000 UTC FinishedAt: 2026-07-30 12:22:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd94sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["mm_get_huge_zero_folio","do_huge_pmd_anonymous_page","copy_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"537b71d7-8297-4fe4-bd9a-adc2b6e32131","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-30 12:22:46 +0000 UTC FinishedAt: 2026-07-30 15:25:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd94sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["mm_get_huge_zero_folio","do_huge_pmd_anonymous_page","copy_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"537b71d7-8297-4fe4-bd9a-adc2b6e32131","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-30 12:22:46 +0000 UTC FinishedAt: 2026-07-30 15:24:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*38bb9a4b-ad60-40f4-bfee-bfb282421647,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7d307a02-b9e8-45e2-adf5-e2731e6df64b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd94sj/series-workflowd94sj-build-action-3475953439/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd94sj/series-workflowd94sj-build-action-2646922064/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd94sj/series-workflowd94sj-convert-artifact-2319469645/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}